diff --git a/docs/deep_dives/particle_hmc.ipynb b/docs/deep_dives/particle_hmc.ipynb new file mode 100644 index 00000000..af225131 --- /dev/null +++ b/docs/deep_dives/particle_hmc.ipynb @@ -0,0 +1,596 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "71dacd15", + "metadata": {}, + "source": [ + "# pHMC" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "14ba6172", + "metadata": {}, + "outputs": [], + "source": [ + "import time\n", + "from dataclasses import dataclass\n", + "\n", + "import jax\n", + "import jax.numpy as jnp\n", + "import jax.random as jr\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "import numpyro\n", + "import numpyro.distributions as dist\n", + "from numpyro.diagnostics import effective_sample_size\n", + "from numpyro.infer import HMC, MCMC, Predictive\n", + "\n", + "import dynestyx as dsx\n", + "from dynestyx import (\n", + " DiscreteTimeSimulator,\n", + " DynamicalModel,\n", + " Filter,\n", + " LinearGaussianObservation,\n", + " LinearGaussianStateEvolution,\n", + ")\n", + "from dynestyx.inference.filters import (\n", + " KFConfig,\n", + " MarginalPFConfig,\n", + " PFConfig,\n", + " PFResamplingConfig,\n", + ")\n", + "\n", + "import jax.numpy as jnp\n", + "\n", + "import jax.numpy as jnp\n", + "import jax.random as jr\n", + "import numpyro\n", + "import numpyro.distributions as dist\n", + "from numpyro.infer import Predictive\n", + "\n", + "import dynestyx as dsx\n", + "from dynestyx import DiscreteTimeSimulator, DynamicalModel, LinearGaussianStateEvolution\n", + "\n", + "\n", + "jax.config.update(\"jax_enable_x64\", True)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "9621fa06", + "metadata": {}, + "outputs": [], + "source": [ + "def model(sigma_h=None, alpha=None, rho=None, obs_times=None, obs_values=None):\n", + " inv_sigma_h_obs = None if sigma_h is None else 1 / sigma_h**2\n", + " inv_sigma_h = numpyro.sample(\n", + " \"inv_sigma_h\", dist.Gamma(1e-1, 1e-1), obs=inv_sigma_h_obs\n", + " )\n", + " sigma_h = jnp.sqrt(1.0 / inv_sigma_h)\n", + "\n", + " rho = numpyro.sample(\"rho\", dist.Uniform(-0.999, 0.999), obs=rho)\n", + " alpha = numpyro.sample(\"alpha\", dist.Normal(0.0, 10.0), obs=alpha)\n", + "\n", + " dynamics_model = DynamicalModel(\n", + " initial_condition=dist.MultivariateNormal(\n", + " jnp.zeros(1),\n", + " jnp.array([[sigma_h**2 / (1.0 - rho**2)]]), # variance, not sd\n", + " ),\n", + " state_evolution=LinearGaussianStateEvolution(\n", + " A=jnp.array([[rho]]), cov=jnp.array([[sigma_h**2]])\n", + " ),\n", + " observation_model=lambda x, u, t: dist.Poisson(\n", + " jnp.exp(x[0] + alpha)\n", + " ), # exp(h + alpha)\n", + " state_dim=1,\n", + " control_dim=0,\n", + " observation_dim=1,\n", + " )\n", + "\n", + " dsx.sample(\n", + " \"f\",\n", + " dynamics_model,\n", + " obs_times=obs_times,\n", + " obs_values=obs_values,\n", + " )\n" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "97f16cdb", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(Array(-0.16292269, dtype=float64), Array(1.31830802, dtype=float64), 2)" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "true_rho = dist.Uniform(-0.999, 0.999).sample(jr.PRNGKey(0))\n", + "true_inv_sigma_h = dist.Gamma(1, 1).sample(jr.PRNGKey(1))\n", + "true_alpha = 2\n", + "\n", + "true_rho, true_inv_sigma_h, true_alpha\n" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "df2a7e9d", + "metadata": {}, + "outputs": [], + "source": [ + "obs_times = jnp.arange(0.0, 100.0, 1.0) \n", + "\n", + "def make_data():\n", + " predictive = Predictive(\n", + " model,\n", + " params={\n", + " \"rho\": jnp.array(true_rho),\n", + " \"inv_sigma_h\": jnp.array(true_inv_sigma_h),\n", + " \"alpha\": jnp.array(true_alpha),\n", + " },\n", + " num_samples=1,\n", + " exclude_deterministic=False,\n", + " )\n", + " with DiscreteTimeSimulator():\n", + " pred = predictive(rng_key=jr.PRNGKey(0), obs_times=obs_times)\n", + "\n", + " obs_values = pred[\"observations\"][0]\n", + " return obs_times, obs_values, pred\n", + "\n", + "\n", + "obs_times, obs_values, pred = make_data()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "056b0f00", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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D8axVKc/PONNnz7dk52d7fn73//u+fbbbz2/+tWvPPXq1fOUlJQke9HS2pAhQzzTpk3zrFmzxrNq1SrPT3/6U0+rVq08Bw8e9L/mjjvu8BQUFHjmzp3rWb58uadfv36e8847L6nLne6WLl3qadOmjadbt26eu+++2/8417U99u/f72ndurXnlltu8SxZssSzdetWzyeffOLZvHmz/zWTJk3y5OXled577z3P119/7bniiis8bdu29Rw5csSmpXCHJ554wtOwYUPPhx9+6Nm2bZtnxowZnjp16nieeeYZ/2u4rmP30UcfeX7/+9973n33XURznpkzZwY8b2XdXnrppZ7u3bt7Fi9e7Pn888897du391x33XWeeLki+Dj33HM9Y8aM8f998uRJT/PmzT0TJ05M6nJlmj179qgdfP78+erv0tJST/Xq1dUJRVu3bp16zaJFi5K4pOnrwIEDng4dOnjmzJnjueCCC/zBB9e1fe6//37PgAEDTJ8/deqUJz8/3/PUU0/5H8P6z8nJ8bz11ls2Lknmu+yyyzy33XZbwGMjRozwXH/99er/ua7tExx8WFm3a9euVf9u2bJl/td8/PHHnqysLM+uXbviWp6M73Y5duyYrFixQjUnGeePwd+LFi1K6rJlmrKyMvW7QYMG6jfW+/HjxwPWfceOHaVVq1Zc9zFCF9Zll10WsE65ru31wQcfSO/eveXqq69W3Yk9evSQl156yf/8tm3bpLi4OGAbYD4LdOfynBKd8847T+bOnSsbN25Uf3/99deycOFCGTp0KNd1glnZj/EbXS04HjS8HtfQJUuWxPX5KTexnN1++OEH1a/YtGnTgMfx9/r165O2XJkGsxEj/6B///7StWtX9Rh27OzsbLXzBq97PEfRmT59uqxcuVKWLVtW6Tmua/ts3bpVpk6dKuPHj5ff/e53an3/+te/VvvyzTff7N93Q51TuF9H54EHHlAzquKmpGrVqupc/cQTT6gcA+C6Thwr6xa/EYAbVatWTd1gxruvZ3zwQc7dka9Zs0bdtZD9MNX13XffLXPmzFFJ05TYQBp3en/84x/V32j5wL794osvquCD7PPOO+/IG2+8IW+++aZ06dJFVq1apW5ikCDJdZ3ZMr7bpVGjRiqiDq6wwN/5+flJW65Mctddd8mHH34on376qbRs2dL/ONYvur1KS0sDXs91Hz10Ye3Zs0d69uyp7jzwM3/+fHn22WfV/+NuhevaHsj879y5c8BjnTp1kh07dqj/1+cNnlPi99vf/la1flx77bWqoujGG2+UcePGqUo6ruvEsrIf4zfOO0YnTpxQFTDxXj8zPvhAU2mvXr1Uv6LxzgZ/FxYWJnXZ0h1ymBB4zJw5U+bNm6fK5Yyw3qtXrx6w7lGKi5M41310Bg0aJKtXr1Z3hvoHd+dontb/z3VtD3QdBpeMIyehdevW6v+xn+PEa9yv0XWAPnDu19E5fPiwyh8wws0iztFc14llZT/Gb9w84uZHw7ke2we5IXHxuKTUFhm8r7zyisrevf3221WpbXFxcbIXLa2NHj1alWl99tlnnt27d/t/Dh8+HFD+ifLbefPmqVLbwsJC9UPxM1a7cF3bW8pcrVo1VQa6adMmzxtvvOGpVauW5/XXXw8oUcQ55P333/d88803nmHDhrHUNgY333yzp0WLFv5SW5SENmrUyHPfffdxXdtUHffVV1+pH1zun376afX/27dvt7wfo9S2R48equx84cKFqtqOpbZReO6559RFEON9oPQWNcsUH+zMoX4w9oeGnfjOO+/01K9fX53Ar7zyShWgkP3BB9e1fWbNmuXp2rWrumnp2LGj569//WvA8yhTfOihhzxNmzZVrxk0aJBnw4YNNi6BO5SXl6t9GOfmGjVqeM444ww1LsXRo0f9r+G6jt2nn34a8hyNoM/qut23b58KNjD+Sm5urufWW29VQU28svCf+NpOiIiIiKzL+JwPIiIiSi0MPoiIiMhRDD6IiIjIUQw+iIiIyFEMPoiIiMhRDD6IiIjIUQw+iIiIyFEMPoiIiMhRDD6IiIjIUQw+iIiIyFEMPoiIiMhRDD6IiIhInPT/AeEJwlHPnZioAAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "\n", + "plt.plot(jnp.exp(pred[\"states\"][0] + 0.5))\n", + "plt.scatter(obs_times, obs_values)\n", + "plt.show()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "614d4378", + "metadata": {}, + "outputs": [], + "source": [ + "from dynestyx.inference.filter_configs import (\n", + " MarginalPFConfig,\n", + " PFResamplingConfig,\n", + " EKFConfig,\n", + ")\n", + "\n", + "\n", + "def data_conditioned_model(obs_times, obs_values):\n", + " filter_config = MarginalPFConfig(n_particles=200, resampling_method=PFResamplingConfig(base_method=\"systematic\", differential_method=\"stop_gradient\"))\n", + " # filter_config = EKFConfig()\n", + " # filter_config = PFConfig(n_particles=1_000, resampling_method=PFResamplingConfig(base_method=\"systematic\", differential_method=\"stop_gradient\"))\n", + " with Filter(filter_config=filter_config):\n", + " model(obs_times=obs_times, obs_values=obs_values)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "e7c8bc03", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/danwaxman/Documents/dynestyx/dynestyx/inference/filters.py:296: UserWarning: PFJax stop-gradient mode requires resampling at every step for its correction term to be valid. Overriding ess_threshold_ratio from 0.7 to 1.0.\n", + " run_pfjax_discrete(\n" + ] + } + ], + "source": [ + "predictive = Predictive(\n", + " data_conditioned_model,\n", + " params={\n", + " \"rho\": jnp.array(true_rho),\n", + " \"inv_sigma_h\": jnp.array(true_inv_sigma_h),\n", + " \"alpha\": jnp.array(true_alpha),\n", + " },\n", + " num_samples=1,\n", + " exclude_deterministic=False,\n", + ")\n", + "\n", + "filter_outputs = predictive(\n", + " rng_key=jr.PRNGKey(0), obs_times=obs_times, obs_values=obs_values\n", + ")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "c6b65f37", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.plot(filter_outputs[\"f_filtered_states_mean\"].squeeze(), label=\"filtered\")\n", + "plt.plot(pred[\"states\"][0], label=\"truth\")\n", + "plt.legend()\n", + "plt.show()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "91376d21", + "metadata": {}, + "outputs": [], + "source": [ + "from numpyro.infer.util import initialize_model\n", + "from numpyro.infer.initialization import init_to_sample\n", + "\n", + "rng_key = jr.PRNGKey(0)\n", + "rng_key, init_key = jax.random.split(rng_key)\n", + "init_params, potential_fn_gen, postprocess_fn, *_ = initialize_model(\n", + " init_key,\n", + " data_conditioned_model,\n", + " model_args=(obs_times, obs_values),\n", + " dynamic_args=True,\n", + " init_strategy=init_to_sample,\n", + ")\n", + "\n", + "logdensity_fn = lambda position: -potential_fn_gen(obs_times, obs_values)(position)\n", + "initial_position = init_params.z\n" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "7c0dc875", + "metadata": {}, + "outputs": [], + "source": [ + "import blackjax\n", + "from tqdm import tqdm\n", + "from jax import tree_util\n", + "\n", + "hmc = blackjax.hmc(logdensity_fn, 1e-2, jnp.eye(len(initial_position)), 10)\n", + "state = hmc.init(initial_position)\n", + "\n", + "\n", + "def inference_loop(rng_key, kernel, initial_state, num_samples):\n", + "\n", + " @jax.jit\n", + " def one_step(state, rng_key):\n", + " state, info = kernel(rng_key, state)\n", + " return state, info\n", + "\n", + " keys = jax.random.split(rng_key, num_samples)\n", + "\n", + " state = initial_state\n", + "\n", + " states = []\n", + " acceptance_rate = []\n", + " is_divergent = []\n", + " num_integration_steps = []\n", + "\n", + " for key in tqdm(keys):\n", + " state, info = one_step(state, key)\n", + "\n", + " states.append(state)\n", + " acceptance_rate.append(info.acceptance_rate)\n", + " is_divergent.append(info.is_divergent)\n", + " num_integration_steps.append(info.num_integration_steps)\n", + "\n", + " # stack to match scan outputs\n", + " states = tree_util.tree_map(lambda *xs: jnp.stack(xs), *states)\n", + "\n", + " acceptance_rate = jnp.stack(acceptance_rate)\n", + " is_divergent = jnp.stack(is_divergent)\n", + " num_integration_steps = jnp.stack(num_integration_steps)\n", + "\n", + " return states, (\n", + " acceptance_rate,\n", + " is_divergent,\n", + " num_integration_steps,\n", + " )\n" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "23aff572", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1000/1000 [05:48<00:00, 2.87it/s]\n" + ] + } + ], + "source": [ + "num_sample = 1_000\n", + "rng_key, sample_key = jax.random.split(rng_key)\n", + "states, infos = inference_loop(sample_key, hmc.step, state, num_sample)\n", + "_ = states.position[\"rho\"].block_until_ready()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "0de0cd94", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████| 1000/1000 [05:53<00:00, 2.83it/s]\n" + ] + } + ], + "source": [ + "rng_key, sample_key = jax.random.split(rng_key)\n", + "states2, infos2 = inference_loop(sample_key, hmc.step, state, num_sample)\n", + "_ = states2.position[\"rho\"].block_until_ready()" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "f680d58c", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/Users/danwaxman/Documents/dynestyx/.venv/lib/python3.12/site-packages/arviz/__init__.py:50: FutureWarning: \n", + "ArviZ is undergoing a major refactor to improve flexibility and extensibility while maintaining a user-friendly interface.\n", + "Some upcoming changes may be backward incompatible.\n", + "For details and migration guidance, visit: https://python.arviz.org/en/latest/user_guide/migration_guide.html\n", + " warn(\n", + "/Users/danwaxman/Documents/dynestyx/dynestyx/inference/filters.py:296: UserWarning: PFJax stop-gradient mode requires resampling at every step for its correction term to be valid. Overriding ess_threshold_ratio from 0.7 to 1.0.\n", + " run_pfjax_discrete(\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
meansdhdi_3%hdi_97%mcse_meanmcse_sdess_bulkess_tailr_hat
alpha1.8290.0851.6691.9810.0060.003202.0371.01.02
inv_sigma_h1.3610.2390.9331.7930.0420.01134.0171.01.08
rho-0.2190.108-0.419-0.0160.0180.00935.045.01.05
\n", + "
" + ], + "text/plain": [ + " mean sd hdi_3% hdi_97% mcse_mean mcse_sd ess_bulk \\\n", + "alpha 1.829 0.085 1.669 1.981 0.006 0.003 202.0 \n", + "inv_sigma_h 1.361 0.239 0.933 1.793 0.042 0.011 34.0 \n", + "rho -0.219 0.108 -0.419 -0.016 0.018 0.009 35.0 \n", + "\n", + " ess_tail r_hat \n", + "alpha 371.0 1.02 \n", + "inv_sigma_h 171.0 1.08 \n", + "rho 45.0 1.05 " + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import arviz as az\n", + "\n", + "# positions_stacked = {\n", + "# k: jnp.stack([states.position[k][100:], states2.position[k][100:]])\n", + "# for k in [\"alpha\", \"inv_sigma_h\", \"rho\"]\n", + "# }\n", + "\n", + "def _postprocess_single(i):\n", + " full = postprocess_fn(obs_times, obs_values)(\n", + " {\n", + " \"alpha\": states.position[\"alpha\"][i],\n", + " \"inv_sigma_h\": states.position[\"inv_sigma_h\"][i],\n", + " \"rho\": states.position[\"rho\"][i],\n", + " }\n", + " )\n", + " return {k: full[k] for k in [\"alpha\", \"inv_sigma_h\", \"rho\"]}\n", + "\n", + "\n", + "postprocessed = jax.jit(jax.vmap(_postprocess_single))(jnp.arange(num_sample))\n", + "posterior_samples_1 = {k: v[None, ...] for k, v in postprocessed.items()}\n", + "\n", + "def _postprocess_single(i):\n", + " full = postprocess_fn(obs_times, obs_values)(\n", + " {\n", + " \"alpha\": states2.position[\"alpha\"][i],\n", + " \"inv_sigma_h\": states2.position[\"inv_sigma_h\"][i],\n", + " \"rho\": states2.position[\"rho\"][i],\n", + " }\n", + " )\n", + " return {k: full[k] for k in [\"alpha\", \"inv_sigma_h\", \"rho\"]}\n", + "\n", + "postprocessed_2 = jax.jit(jax.vmap(_postprocess_single))(jnp.arange(num_sample))\n", + "posterior_samples_2 = {k: v[None, ...] for k, v in postprocessed_2.items()}\n", + "\n", + "num_warmup = 500\n", + "posterior_samples_stacked = {k: jnp.stack([posterior_samples_1[k][..., num_warmup:], posterior_samples_2[k][..., num_warmup:]], axis=0).squeeze(1) for k in [\"alpha\", \"inv_sigma_h\", \"rho\"]}\n", + "\n", + "az.summary(posterior_samples_stacked, var_names=[\"alpha\", \"inv_sigma_h\", \"rho\"])\n" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "323b4be3", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import arviz as az\n", + "import seaborn as sns\n", + "\n", + "fig, ax = plt.subplots(1, 3, figsize=(12, 4))\n", + "for i, v in enumerate([\"alpha\", \"inv_sigma_h\", \"rho\"]):\n", + " sns.histplot(posterior_samples_stacked[v].ravel(), ax=ax[i], label=v)\n", + " ax[i].set_title(v)\n", + " ax[i].axvline(\n", + " true_rho\n", + " if v == \"rho\"\n", + " else true_inv_sigma_h\n", + " if v == \"inv_sigma_h\"\n", + " else true_alpha,\n", + " color=\"k\",\n", + " ls=\"--\",\n", + " )\n", + "plt.legend()\n", + "plt.show()\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "107f5ddd", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": ".venv", + "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.12.10" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/dynestyx/inference/filter_configs.py b/dynestyx/inference/filter_configs.py index 6d793efb..d963db0e 100644 --- a/dynestyx/inference/filter_configs.py +++ b/dynestyx/inference/filter_configs.py @@ -9,7 +9,7 @@ ResamplingBaseMethod = Literal["systematic", "multinomial", "stratified"] ResamplingDifferentiableMethod = Literal["stop_gradient", "straight_through", "soft"] -FilterSource = Literal["cuthbert", "cd_dynamax", "dynestyx"] +FilterSource = Literal["cuthbert", "cd_dynamax", "dynestyx", "pfjax"] FilterEmissionOrder = Literal["zeroth", "first", "second"] FilterStateOrder = Literal["zeroth", "first", "second"] @@ -226,7 +226,7 @@ class PFConfig(BaseFilterConfig): ess_threshold_ratio (float): Resampling fires when the effective sample size drops below `ess_threshold_ratio * n_particles`. `1.0` → always resample; `0.0` → never. Defaults to `0.7`. - filter_source (FilterSource): Backend. Defaults to `"cuthbert"`, which is currently the only available implementation. + filter_source (FilterSource): Backend. Defaults to `"cuthbert"`. ??? note "Algorithm Reference" At each step, particles are propagated through the transition and @@ -264,6 +264,25 @@ class PFConfig(BaseFilterConfig): filter_source: FilterSource = "cuthbert" +@dataclasses.dataclass +class MarginalPFConfig(PFConfig): + r"""Marginal Particle Filter (MPF / Rao-Blackwellized PF) for discrete-time models. + + This configuration targets the PFJax marginal particle filter (`particle_filter_rb`), + which computes particle weights via mixture-based corrections and can reduce variance + relative to standard bootstrap PF in some settings. + + Attributes: + stop_proposal_gradient (bool): Whether to stop gradients through proposal + sampling and proposal log-density terms (PFJax `stop_proposal_gradient`). + Defaults to `True`. + filter_source (FilterSource): Backend. Defaults to `"pfjax"`. + """ + + stop_proposal_gradient: bool = True + filter_source: FilterSource = "pfjax" + + @dataclasses.dataclass class EKFConfig(BaseFilterConfig): """Extended Kalman Filter (EKF) for discrete-time models. @@ -602,6 +621,7 @@ class ContinuousTimeUKFConfig(UKFConfig, ContinuousTimeConfig): DiscreteTimeConfigs: tuple[type, ...] = ( EnKFConfig, PFConfig, + MarginalPFConfig, EKFConfig, KFConfig, UKFConfig, diff --git a/dynestyx/inference/filters.py b/dynestyx/inference/filters.py index 0433d46d..5460e9df 100644 --- a/dynestyx/inference/filters.py +++ b/dynestyx/inference/filters.py @@ -21,6 +21,7 @@ HMMConfig, HMMConfigs, KFConfig, + MarginalPFConfig, PFConfig, PFResamplingConfig, UKFConfig, @@ -33,6 +34,9 @@ from dynestyx.inference.integrations.cuthbert.discrete import ( run_discrete_filter as run_cuthbert_discrete, ) +from dynestyx.inference.integrations.pfjax.discrete import ( + run_discrete_filter as run_pfjax_discrete, +) from dynestyx.models import DynamicalModel from dynestyx.types import FunctionOfTime @@ -250,10 +254,10 @@ def _filter_discrete_time( ctrl_values=None, **kwargs, ) -> None: - """Discrete-time marginal likelihood via cuthbert or cd-dynamax. + """Discrete-time marginal likelihood via cuthbert, pfjax, or cd-dynamax. Filter type inferred from config class: KFConfig, EKFConfig, UKFConfig (cd-dynamax) - or EKFConfig (cuthbert), PFConfig (cuthbert). + or EKFConfig (cuthbert), PFConfig (cuthbert or pfjax). Args: name: Name of the factor. @@ -288,6 +292,18 @@ def _filter_discrete_time( ctrl_values=ctrl_values, **kwargs, ) + elif filter_config.filter_source == "pfjax": + run_pfjax_discrete( + name, + dynamics, + filter_config, + key=key, + obs_times=obs_times, + obs_values=obs_values, + ctrl_times=ctrl_times, + ctrl_values=ctrl_values, + **kwargs, + ) else: raise ValueError(f"Unknown filter source: {filter_config.filter_source}") @@ -342,6 +358,7 @@ def _filter_continuous_time( "HMMConfig", "HMMConfigs", "KFConfig", + "MarginalPFConfig", "PFConfig", "PFResamplingConfig", "UKFConfig", diff --git a/dynestyx/inference/integrations/pfjax/__init__.py b/dynestyx/inference/integrations/pfjax/__init__.py new file mode 100644 index 00000000..08f0f343 --- /dev/null +++ b/dynestyx/inference/integrations/pfjax/__init__.py @@ -0,0 +1,3 @@ +from dynestyx.inference.integrations.pfjax.discrete import run_discrete_filter + +__all__ = ["run_discrete_filter"] diff --git a/dynestyx/inference/integrations/pfjax/discrete.py b/dynestyx/inference/integrations/pfjax/discrete.py new file mode 100644 index 00000000..4a0baa40 --- /dev/null +++ b/dynestyx/inference/integrations/pfjax/discrete.py @@ -0,0 +1,397 @@ +import warnings +from typing import Any + +import jax +import jax.numpy as jnp +import numpyro +from jax import lax, random +from jax.scipy.special import logsumexp +from pfjax.particle_filter import particle_filter as pfjax_particle_filter +from pfjax.particle_filter import particle_filter_rb as pfjax_particle_filter_rb + +from dynestyx.inference.filter_configs import ( + BaseFilterConfig, + MarginalPFConfig, + PFConfig, + PFResamplingConfig, + _config_to_record_kwargs, +) +from dynestyx.models import DynamicalModel +from dynestyx.utils import ( + _should_record_field, + _validate_control_dim, + _validate_controls, +) + + +def _config_to_filter_kwargs(config: BaseFilterConfig) -> dict: + """Build filter kwargs dict from config dataclass.""" + kwargs = dict(config.extra_filter_kwargs) + if isinstance(config, PFConfig): + kwargs["n_filter_particles"] = config.n_particles + kwargs["ess_threshold"] = config.ess_threshold_ratio + if isinstance(config, MarginalPFConfig): + kwargs["stop_proposal_gradient"] = config.stop_proposal_gradient + return kwargs + + +def _tree_take(tree: Any, idx: jax.Array) -> Any: + """Index a pytree along axis 0.""" + return jax.tree.map(lambda x: x[idx], tree) + + +# TODO: Move these to a separate file, and reuse the multinomial resampling from PFJax. +def _resample_multinomial( + key: jax.Array, x_particles_prev: Any, logw: jax.Array +) -> dict[str, Any]: + n_particles = int(logw.shape[0]) + logw_norm = logw - logsumexp(logw) + prob = jnp.exp(logw_norm) + ancestors = random.choice( + key, a=jnp.arange(n_particles), shape=(n_particles,), p=prob + ) + return { + "x_particles": _tree_take(x_particles_prev, ancestors), + "ancestors": ancestors, + } + + +def _resample_systematic( + key: jax.Array, x_particles_prev: Any, logw: jax.Array +) -> dict[str, Any]: + n_particles = int(logw.shape[0]) + logw_norm = logw - logsumexp(logw) + prob = jnp.exp(logw_norm) + cdf = jnp.cumsum(prob) + u = (random.uniform(key, ()) + jnp.arange(n_particles)) / n_particles + ancestors = jnp.searchsorted(cdf, u, side="right") + ancestors = jnp.minimum(ancestors, n_particles - 1) + return { + "x_particles": _tree_take(x_particles_prev, ancestors), + "ancestors": ancestors, + } + + +def _resample_stratified( + key: jax.Array, x_particles_prev: Any, logw: jax.Array +) -> dict[str, Any]: + n_particles = int(logw.shape[0]) + logw_norm = logw - logsumexp(logw) + prob = jnp.exp(logw_norm) + cdf = jnp.cumsum(prob) + u = (jnp.arange(n_particles) + random.uniform(key, (n_particles,))) / n_particles + ancestors = jnp.searchsorted(cdf, u, side="right") + ancestors = jnp.minimum(ancestors, n_particles - 1) + return { + "x_particles": _tree_take(x_particles_prev, ancestors), + "ancestors": ancestors, + } + + +def _make_resampler( + resampling_config: PFResamplingConfig, + ess_threshold: float, +): + base_method = resampling_config.base_method + if base_method == "multinomial": + base_resampler = _resample_multinomial + elif base_method == "systematic": + base_resampler = _resample_systematic + elif base_method == "stratified": + base_resampler = _resample_stratified + else: + raise ValueError(f"Unsupported PF resampling base method: {base_method}") + + def resampler( + key: jax.Array, x_particles_prev: Any, logw: jax.Array + ) -> dict[str, Any]: + n_particles = int(logw.shape[0]) + logw_norm = logw - logsumexp(logw) + prob = jnp.exp(logw_norm) + ess = 1.0 / jnp.sum(jnp.square(prob)) + threshold = ess_threshold * n_particles + + def _do_resample(_: None) -> jax.Array: + return base_resampler( + key=key, x_particles_prev=x_particles_prev, logw=logw + )["ancestors"] + + def _skip_resample(_: None) -> jax.Array: + return jnp.arange(n_particles, dtype=jnp.int32) + + ancestors = lax.cond( + ess < threshold, _do_resample, _skip_resample, operand=None + ) + return { + "x_particles": _tree_take(x_particles_prev, ancestors), + "ancestors": ancestors, + } + + return resampler + + +def _resolve_stop_gradient(filter_config: PFConfig) -> bool: + method = filter_config.resampling_method.differential_method + if method == "stop_gradient": + return True + if method == "straight_through": + return False + raise ValueError( + "PFJax integration does not support " + "resampling_method.differential_method='soft'." + ) + + +class _PFJaxDynestyxModel: + """PFJax model adapter for dynestyx discrete-time dynamical models.""" + + def __init__(self, dynamics: DynamicalModel): + self.dynamics = dynamics + + def pf_init(self, key, y_init, theta): + del theta + x_init = self.dynamics.initial_condition.sample(key) + edist = self.dynamics.observation_model(x_init, y_init["u"], y_init["time"]) + logw = jnp.asarray(edist.log_prob(y_init["y"])).sum() + return x_init, logw + + def pf_step(self, key, x_prev, y_curr, theta): + del theta + pdist = self.dynamics.state_evolution( + x_prev, y_curr["u_prev"], y_curr["time_prev"], y_curr["time"] + ) + x_curr = pdist.sample(key) + edist = self.dynamics.observation_model(x_curr, y_curr["u"], y_curr["time"]) + logw = jnp.asarray(edist.log_prob(y_curr["y"])).sum() + return x_curr, logw + + +class _PFJaxMarginalDynestyxModel: + """PFJax marginal PF model adapter for dynestyx discrete-time models.""" + + def __init__(self, dynamics: DynamicalModel): + self.dynamics = dynamics + + def _pack_state( + self, x: jax.Array, y_step: dict[str, jax.Array] + ) -> dict[str, jax.Array]: + return { + "x": x, + "u": y_step["u"], + "u_prev": y_step["u_prev"], + "time": y_step["time"], + "time_prev": y_step["time_prev"], + } + + def pf_init(self, key, y_init, theta): + del theta + x_raw = self.dynamics.initial_condition.sample(key) + x_init = self._pack_state(x_raw, y_init) + logw = self.meas_lpdf(y_curr=y_init, x_curr=x_init, theta=jnp.zeros((0,))) + return x_init, logw + + def step_sample(self, key, x_prev, y_curr, theta): + del theta + pdist = self.dynamics.state_evolution( + x_prev["x"], y_curr["u_prev"], y_curr["time_prev"], y_curr["time"] + ) + x_raw = pdist.sample(key) + return self._pack_state(x_raw, y_curr) + + def step_lpdf(self, x_curr, x_prev, y_curr, theta): + del theta, y_curr + return self.state_lpdf(x_curr=x_curr, x_prev=x_prev, theta=jnp.zeros((0,))) + + def state_lpdf(self, x_curr, x_prev, theta): + del theta + pdist = self.dynamics.state_evolution( + x_prev["x"], x_curr["u_prev"], x_curr["time_prev"], x_curr["time"] + ) + return jnp.asarray(pdist.log_prob(x_curr["x"])).sum() + + def meas_lpdf(self, y_curr, x_curr, theta): + del theta + edist = self.dynamics.observation_model( + x_curr["x"], y_curr["u"], y_curr["time"] + ) + return jnp.asarray(edist.log_prob(y_curr["y"])).sum() + + +def _normalize_marginal_pf_out(pf_out: dict[str, Any]) -> dict[str, Any]: + out = dict(pf_out) + out["x_particles"] = pf_out["x_particles"]["x"] + out["logw"] = pf_out["logw_bar"] + return out + + +def run_discrete_filter( + name: str, + dynamics: DynamicalModel, + filter_config: BaseFilterConfig, + key: jax.Array | None = None, + *, + obs_times: jax.Array, + obs_values: jax.Array, + ctrl_times=None, + ctrl_values=None, + **kwargs, +) -> None: + """Run discrete-time particle filter via PFJax.""" + del kwargs + + if not isinstance(filter_config, (PFConfig, MarginalPFConfig)): + raise ValueError( + f"Unsupported pfjax config: {type(filter_config).__name__}. " + "Expected PFConfig or MarginalPFConfig." + ) + if key is None: + raise ValueError( + "Particle filter requires a PRNG key: set 'crn_seed' in the filter config, " + "or run inside a NumPyro seeded context (e.g., with numpyro.handlers.seed)." + ) + + filter_kwargs = _config_to_filter_kwargs(filter_config) + record_kwargs = _config_to_record_kwargs(filter_config) + + ys = obs_values + t1 = int(ys.shape[0]) + if t1 == 0: + return + + times = obs_times + _validate_controls(times, ctrl_times, ctrl_values) + _validate_control_dim(dynamics, ctrl_values) + + if ctrl_values is None: + control_dim = dynamics.control_dim + ctrl_values = jnp.zeros((t1, control_dim), dtype=ys.dtype) + + dt0 = times[1] - times[0] if t1 > 1 else jnp.asarray(1.0, dtype=times.dtype) + time_prev = jnp.concatenate([times[:1] - dt0, times[:-1]], axis=0) + u_prev = jnp.concatenate([ctrl_values[:1], ctrl_values[:-1]], axis=0) + + y_meas = { + "y": ys, + "u": ctrl_values, + "u_prev": u_prev, + "time": times, + "time_prev": time_prev, + } + + n_particles = int(filter_kwargs.pop("n_filter_particles", 1_000)) + ess_threshold = float(filter_kwargs.pop("ess_threshold", 0.7)) + + stop_gradient = _resolve_stop_gradient(filter_config) + if stop_gradient and ess_threshold < 1.0: + if filter_config.warn: + warnings.warn( + "PFJax stop-gradient mode requires resampling at every step for " + "its correction term to be valid. Overriding ess_threshold_ratio " + f"from {ess_threshold} to 1.0.", + stacklevel=2, + ) + ess_threshold = 1.0 + resampler = _make_resampler(filter_config.resampling_method, ess_threshold) + + theta = filter_kwargs.pop("theta", jnp.zeros((0,), dtype=ys.dtype)) + for reserved in ( + "model", + "key", + "y_meas", + "n_particles", + "resampler", + "history", + "stop_gradient", + ): + filter_kwargs.pop(reserved, None) + + if isinstance(filter_config, MarginalPFConfig): + stop_proposal_gradient = bool(filter_kwargs.pop("stop_proposal_gradient", True)) + model = _PFJaxMarginalDynestyxModel(dynamics) + pf_out = pfjax_particle_filter_rb( + model=model, + key=key, + y_meas=y_meas, + theta=theta, + n_particles=n_particles, + resampler=resampler, # type: ignore[arg-type] + history=True, + stop_gradient=stop_gradient, + stop_proposal_gradient=stop_proposal_gradient, + **filter_kwargs, + ) + pf_out = _normalize_marginal_pf_out(pf_out) + else: + model = _PFJaxDynestyxModel(dynamics) # type: ignore + pf_out = pfjax_particle_filter( + model=model, + key=key, + y_meas=y_meas, + theta=theta, + n_particles=n_particles, + resampler=resampler, # type: ignore[arg-type] + history=True, + stop_gradient=stop_gradient, + **filter_kwargs, + ) + + marginal_loglik = pf_out["loglik"] + numpyro.factor(f"{name}_marginal_log_likelihood", marginal_loglik) + numpyro.deterministic(f"{name}_marginal_loglik", marginal_loglik) + _add_sites_pf(name, pf_out, record_kwargs) + + +def _add_sites_pf(name: str, pf_out: dict[str, Any], record_kwargs: dict): + particles = pf_out["x_particles"] + log_weights = pf_out["logw"] + if particles.ndim == 2: + particles = particles[..., None] + + max_elems = record_kwargs["record_max_elems"] + t1, n_particles, state_dim = particles.shape + + add_particles = _should_record_field( + record_kwargs["record_filtered_particles"], particles.shape, max_elems + ) + add_log_weights = _should_record_field( + record_kwargs["record_filtered_log_weights"], log_weights.shape, max_elems + ) + add_mean = _should_record_field( + record_kwargs["record_filtered_states_mean"], (t1, state_dim), max_elems + ) + add_filtered_states_cov = _should_record_field( + record_kwargs["record_filtered_states_cov"], + (t1, state_dim, state_dim), + max_elems, + ) + add_filtered_states_cov_diag = _should_record_field( + record_kwargs["record_filtered_states_cov_diag"], (t1, state_dim), max_elems + ) + + need_filtered_moments = ( + add_mean or add_filtered_states_cov or add_filtered_states_cov_diag + ) + if need_filtered_moments: + log_weights_norm = log_weights - logsumexp(log_weights, axis=1, keepdims=True) + w = jnp.exp(log_weights_norm)[..., None] + filtered_means = jnp.sum(particles * w, axis=1) + + if add_filtered_states_cov or add_filtered_states_cov_diag: + second_mom = jnp.einsum( + "...tnj,...tnk,...tn->...tjk", particles, particles, w.squeeze(-1) + ) + filtered_covariances = second_mom - jnp.einsum( + "...tj,...tk->...tjk", filtered_means, filtered_means + ) + + if add_particles: + numpyro.deterministic(f"{name}_filtered_particles", particles) + if add_log_weights: + numpyro.deterministic(f"{name}_filtered_log_weights", log_weights) + if add_mean: + numpyro.deterministic(f"{name}_filtered_states_mean", filtered_means) + if add_filtered_states_cov: + numpyro.deterministic(f"{name}_filtered_states_cov", filtered_covariances) + if add_filtered_states_cov_diag: + diag_cov = jnp.diagonal(filtered_covariances, axis1=1, axis2=2) + numpyro.deterministic(f"{name}_filtered_states_cov_diag", diag_cov) diff --git a/pyproject.toml b/pyproject.toml index 2b26315f..a51208fa 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -7,7 +7,7 @@ name = "dynestyx" version = "0.1.0" description = "Add your description here" readme = "README.md" -requires-python = ">=3.12" +requires-python = ">=3.12,<3.14" dependencies = [ "cd-dynamax", "effectful", @@ -24,6 +24,7 @@ dependencies = [ "cuthbert>=0.0.2", "jax>=0.6.2", "jaxlib>=0.6.2", + "pfjax", ] [tool.hatch.build.targets.wheel] @@ -33,6 +34,7 @@ packages = ["dynestyx"] effectful = { git = "https://github.com/BasisResearch/effectful.git" } cuthbert = { git = "https://github.com/DanWaxman/cuthbert.git", rev = "b56783de77ef62804b8458463a7bf907c1296017", subdirectory = "pkg/cuthbert"} cd-dynamax = { git = "https://github.com/DanWaxman/cd_dynamax.git", rev = "dw-dpf" } +pfjax = { git = "https://github.com/DanWaxman/pfjax.git", rev = "dw-sg-dpf" } [dependency-groups] dev = [ @@ -45,6 +47,7 @@ dev = [ "mkdocs-jupyter>=0.25.1", "seaborn>=0.13.2", "imageio>=2.37.2", + "jax-tqdm>=0.4.0", ] [tool.ruff.lint] diff --git a/tests/test_pfjax_integration.py b/tests/test_pfjax_integration.py new file mode 100644 index 00000000..68dd6c41 --- /dev/null +++ b/tests/test_pfjax_integration.py @@ -0,0 +1,118 @@ +import jax.numpy as jnp +import jax.random as jr +import pytest +from numpyro.handlers import seed, trace +from numpyro.infer import Predictive + +from dynestyx.inference.filter_configs import ( + MarginalPFConfig, + PFConfig, + PFResamplingConfig, +) +from dynestyx.inference.filters import Filter +from dynestyx.simulators import DiscreteTimeSimulator +from tests.models import discrete_time_l63_model + + +def test_discrete_pfjax_particle_filter_records_outputs() -> None: + obs_times = jnp.arange(start=0.0, stop=1.0, step=0.1) + true_params = {"rho": jnp.array(28.0)} + + predictive = Predictive( + discrete_time_l63_model, + params=true_params, + num_samples=1, + exclude_deterministic=False, + ) + with DiscreteTimeSimulator(): + synthetic = predictive(jr.PRNGKey(0), obs_times=obs_times) + + obs_values = synthetic["observations"].squeeze(0) + + def data_conditioned_model(): + with Filter(filter_config=PFConfig(n_particles=64, filter_source="pfjax")): + return discrete_time_l63_model( + obs_times=obs_times, + obs_values=obs_values, + ) + + with trace() as tr, seed(rng_seed=jr.PRNGKey(1)): + data_conditioned_model() + + assert "f_marginal_loglik" in tr + assert jnp.isfinite(tr["f_marginal_loglik"]["value"]) + + particles = tr["f_filtered_particles"]["value"] + log_weights = tr["f_filtered_log_weights"]["value"] + assert particles.shape == (obs_times.shape[0], 64, 3) + assert log_weights.shape == (obs_times.shape[0], 64) + + +def test_discrete_pfjax_marginal_particle_filter_records_outputs() -> None: + obs_times = jnp.arange(start=0.0, stop=1.0, step=0.1) + true_params = {"rho": jnp.array(28.0)} + + predictive = Predictive( + discrete_time_l63_model, + params=true_params, + num_samples=1, + exclude_deterministic=False, + ) + with DiscreteTimeSimulator(): + synthetic = predictive(jr.PRNGKey(2), obs_times=obs_times) + + obs_values = synthetic["observations"].squeeze(0) + + def data_conditioned_model(): + with Filter(filter_config=MarginalPFConfig(n_particles=64)): + return discrete_time_l63_model( + obs_times=obs_times, + obs_values=obs_values, + ) + + with trace() as tr, seed(rng_seed=jr.PRNGKey(3)): + data_conditioned_model() + + assert "f_marginal_loglik" in tr + assert jnp.isfinite(tr["f_marginal_loglik"]["value"]) + + particles = tr["f_filtered_particles"]["value"] + log_weights = tr["f_filtered_log_weights"]["value"] + assert particles.shape == (obs_times.shape[0], 64, 3) + assert log_weights.shape == (obs_times.shape[0], 64) + + +def test_discrete_pfjax_stop_gradient_forces_always_resample() -> None: + obs_times = jnp.arange(start=0.0, stop=1.0, step=0.1) + true_params = {"rho": jnp.array(28.0)} + + predictive = Predictive( + discrete_time_l63_model, + params=true_params, + num_samples=1, + exclude_deterministic=False, + ) + with DiscreteTimeSimulator(): + synthetic = predictive(jr.PRNGKey(4), obs_times=obs_times) + + obs_values = synthetic["observations"].squeeze(0) + + def data_conditioned_model(): + with Filter( + filter_config=PFConfig( + n_particles=32, + filter_source="pfjax", + ess_threshold_ratio=0.0, + resampling_method=PFResamplingConfig( + differential_method="stop_gradient" + ), + ) + ): + return discrete_time_l63_model( + obs_times=obs_times, + obs_values=obs_values, + ) + + with pytest.warns(UserWarning, match="requires resampling at every step"): + with trace(), seed(rng_seed=jr.PRNGKey(5)): + data_conditioned_model() diff --git a/uv.lock b/uv.lock index 64d93bea..05166ce4 100644 --- a/uv.lock +++ b/uv.lock @@ -1,13 +1,10 @@ version = 1 revision = 2 -requires-python = ">=3.12" +requires-python = ">=3.12, <3.14" resolution-markers = [ - "python_full_version >= '3.14' and sys_platform == 'win32'", - "python_full_version >= '3.14' and sys_platform == 'emscripten'", - "python_full_version >= '3.14' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version == '3.13.*' and sys_platform == 'win32'", - "python_full_version == '3.13.*' and sys_platform == 'emscripten'", - "python_full_version == '3.13.*' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version >= '3.13' and sys_platform == 'win32'", + "python_full_version >= '3.13' and sys_platform == 'emscripten'", + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'", "python_full_version < '3.13' and sys_platform == 'win32'", "python_full_version < '3.13' and sys_platform == 'emscripten'", "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'", @@ -85,32 +82,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/07/7b/254cbfff260007bf107625568bd36ead430d19c688429c3565c885f37f3b/apsw-3.51.2.0-cp313-cp313-win32.whl", hash = "sha256:8fabd40376dcf6333007e0f9aef3fc2eddc802e68b2b90b47baf54ab503e52e4", size = 1620612, upload-time = "2026-01-10T16:46:38.839Z" }, { url = "https://files.pythonhosted.org/packages/dc/de/f6c33da2c11cf0a43e8349f34486ec9ba2b4921cfd33e5f04738dd49fb3a/apsw-3.51.2.0-cp313-cp313-win_amd64.whl", hash = "sha256:088e45c3a2396518904c7eed3a7bb38a3737d1122760787dad0e4f3e6418cea5", size = 1812291, upload-time = "2026-01-10T16:46:40.846Z" }, { url = "https://files.pythonhosted.org/packages/a9/71/89cfdfa3a7bfae1108bc42f066321d6742fe0fc859af3a7002697d183489/apsw-3.51.2.0-cp313-cp313-win_arm64.whl", hash = "sha256:8b31574d7e3f6e0080fb4277c242d284557cf6f101520890b329ab8ea63926db", size = 1636589, upload-time = "2026-01-10T16:46:42.449Z" }, - { url = "https://files.pythonhosted.org/packages/0d/9d/ef858f35f3e170e1128fe5780610985c5381c7b265303a6c8fcd013ff46b/apsw-3.51.2.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:a060c36d3065585b311c4fa12cb0703ded076099f8dade198b6f2f489852900c", size = 1994321, upload-time = "2026-01-10T16:46:44.063Z" }, - { url = "https://files.pythonhosted.org/packages/53/fe/80396ae220cd11573ab5fafd0f5f73029aceb1e6d1cef89a83c63c69af76/apsw-3.51.2.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:398fef5fe75de0b7e02f05bae9e60936cf56ca52c0ca4d4b5cd5a3878033bf15", size = 1924150, upload-time = "2026-01-10T16:46:45.626Z" }, - { url = "https://files.pythonhosted.org/packages/70/6b/3e68eb59d13e787bdfce866e7831a96af443382468ea409d57a7f0940e7c/apsw-3.51.2.0-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:cf06e92c758e3cec44b33b6d36679fe77c821e0a5c1102532f7a67e3b8350fbf", size = 7307263, upload-time = "2026-01-10T16:46:47.787Z" }, - { url = "https://files.pythonhosted.org/packages/6c/ee/bab98974629f5ba59e38d34a3c083ccabede296d8c2f62e91210ad18f461/apsw-3.51.2.0-cp314-cp314-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:d083e41e20f16b8cb9dd786e1e2da28a9d88d3e26bf83c4d94820fb4ea9e9424", size = 6978380, upload-time = "2026-01-10T16:46:49.594Z" }, - { url = "https://files.pythonhosted.org/packages/57/6f/813cacd12eacd6b2f1e8c357cc44b1592538255476de8637e65474749742/apsw-3.51.2.0-cp314-cp314-manylinux_2_28_i686.whl", hash = "sha256:9caa13b10ffb1c0cbf6143472fe2b3d3f942f09b48a495f48f5002490c33448c", size = 7137598, upload-time = "2026-01-10T16:46:51.428Z" }, - { url = "https://files.pythonhosted.org/packages/db/35/023d9f5335e4c1ee1490dcf2435875bb1f9f10fb54c07495ce7ceda6e5cc/apsw-3.51.2.0-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:4f9a038fd671611afc7fdea5ef4a25fd527e9b06e46c3697db4a143ce7eea520", size = 7301998, upload-time = "2026-01-10T16:46:53.522Z" }, - { url = "https://files.pythonhosted.org/packages/fb/41/7f7a2f72f8ef03629d907139f2fc4b6bd538879cfaf6f56db138a88a1ffb/apsw-3.51.2.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:25bee4c57798427b7ea2658d937d47223e782f8be1c4d3e7ea56a855b8f53034", size = 7243518, upload-time = "2026-01-10T16:46:55.375Z" }, - { url = "https://files.pythonhosted.org/packages/7b/f9/b1379f6968e9ff2e51814fa10207ceb97da66ead56f00961ccb44905bdba/apsw-3.51.2.0-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:68a13947cf921bd299d2db7f67e6d6a9a7c649fe818f2ae0483a359ebe0f2f0b", size = 7121227, upload-time = "2026-01-10T16:46:57.183Z" }, - { url = "https://files.pythonhosted.org/packages/15/be/2b1d21bbcc800cfce22433a2936ff1fed232b802de32090596a63e136c46/apsw-3.51.2.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:f9ac6eaa6a1732e2ec7febd91d8265640af5957e9a521b07b9fa5c422df00850", size = 7198826, upload-time = "2026-01-10T16:46:58.983Z" }, - { url = "https://files.pythonhosted.org/packages/b1/d4/4a9a1ea671e588686e5cc357b94b1bd110a49938ef777f32f94cba8226d5/apsw-3.51.2.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:b162b5cbb12c7c5bdb52702b97b9e6b689f3be4578ebaba55bbeac7b8f4d513f", size = 7284509, upload-time = "2026-01-10T16:47:00.937Z" }, - { url = "https://files.pythonhosted.org/packages/40/a1/9963fc7913d1d96d87f3f69b0a69d131aeaedddfa33c491bdbb473dfefb2/apsw-3.51.2.0-cp314-cp314-win32.whl", hash = "sha256:42263d3439348a6c6180ed4a08d186a8d43575f3c59f7c1707f61e3776cebe42", size = 1653873, upload-time = "2026-01-10T16:47:02.608Z" }, - { url = "https://files.pythonhosted.org/packages/61/ff/c85e5c000822cd333ed304adbb60947be7b7bf309f7aecb5d8b0dcbd3548/apsw-3.51.2.0-cp314-cp314-win_amd64.whl", hash = "sha256:65e67226c6165a569174e7355e00c2b7a79144a4ed72be26c8c4608a0a4f7668", size = 1856255, upload-time = "2026-01-10T16:47:04.154Z" }, - { url = "https://files.pythonhosted.org/packages/42/15/4d7b97063552e1a79a47c15c8956b594169053828269b675f457531a59d3/apsw-3.51.2.0-cp314-cp314-win_arm64.whl", hash = "sha256:e195c5799bf5730199507b3b8129575380c1a2c5965471edacd8aabba4cc0e98", size = 1676597, upload-time = "2026-01-10T16:47:05.918Z" }, - { url = "https://files.pythonhosted.org/packages/af/6b/ad76dd6085590004d23249ae2592fcd19c5d40c477e41df89a476a2a91fd/apsw-3.51.2.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:b6073d49be9216ac1704c5bb497db00ad6e7f11fd70303be180d242698511590", size = 2000215, upload-time = "2026-01-10T16:47:07.431Z" }, - { url = "https://files.pythonhosted.org/packages/46/27/2d00af9548d2ab87e38cf5cd48c3143260b94e6a487c452634eb72ce442d/apsw-3.51.2.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:918eff3b9152753f761b55b8adbecf07280c2a2f9f9a7c6245ccead16bda1d9e", size = 1931099, upload-time = "2026-01-10T16:47:08.937Z" }, - { url = "https://files.pythonhosted.org/packages/c8/34/c59a09d1442bc0caf1259b6cc9304cbf0f5a993d6f7b63197313c468a9fc/apsw-3.51.2.0-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:604282a709e60ed94bc421ae3bed823f0b727d70c7f0d6b41f293177da149312", size = 7304460, upload-time = "2026-01-10T16:47:10.586Z" }, - { url = "https://files.pythonhosted.org/packages/43/76/f9f4ee81828c3de952a7718cdab40f360dc24f285491785fc50563c8b47b/apsw-3.51.2.0-cp314-cp314t-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:0e8fa99233987c0d46ff155e505414a7e25ca7bd53a91db0b2db0043b75689cc", size = 6960346, upload-time = "2026-01-10T16:47:12.407Z" }, - { url = "https://files.pythonhosted.org/packages/6f/d2/8051f361cc5c7e83e67d21d07632804a65c2e12c47f16c2645c80a61e681/apsw-3.51.2.0-cp314-cp314t-manylinux_2_28_i686.whl", hash = "sha256:8a39dd4accf0522044c553ebef91347067f08f99a72a1c83017818c735035a08", size = 7113213, upload-time = "2026-01-10T16:47:14.23Z" }, - { url = "https://files.pythonhosted.org/packages/db/87/2cf7248307777d623dfe6b7ecf8240ef741673f023d4703f505f1c46f10c/apsw-3.51.2.0-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:9fdf89423fc9039cbe800765fec0e2598dd098e6ca0b7faa4b2314d50f158a4d", size = 7282208, upload-time = "2026-01-10T16:47:16.651Z" }, - { url = "https://files.pythonhosted.org/packages/62/08/4588e6f08456d9d7ca9fee712e8e6d42db4e37c367830cef6f7a8b586c11/apsw-3.51.2.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:f8b559e8981bdb44289ba90abb4c3dcf274930a1321c5d51aa1d53e307b30403", size = 7245681, upload-time = "2026-01-10T16:47:19.284Z" }, - { url = "https://files.pythonhosted.org/packages/4a/79/72f380919d4dd8b3be1005c6f371c2d135ab592d68fe0055cb7bdfa8f266/apsw-3.51.2.0-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:2a418cd6753be67ef34136be174be1d610b9f1e85676d5cfa2187715de0f65e5", size = 7087011, upload-time = "2026-01-10T16:47:21.55Z" }, - { url = "https://files.pythonhosted.org/packages/5f/76/29e3f2821a041493cfc8bde0e676ecf9ab6a6d0cf971d2686d4146087380/apsw-3.51.2.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:67075fa47e722e6d02edd9010fc1b94548eaefe65798498c062eb8f800152223", size = 7156649, upload-time = "2026-01-10T16:47:23.672Z" }, - { url = "https://files.pythonhosted.org/packages/e7/25/e32a7bb3218f6a9c95c2444b3b41be0a8490a7b6aaec0a2220ae4448b1a4/apsw-3.51.2.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:2b0618f1b06771331027ce0bf6be143f0d07690621e1a912a36884a1ea6bdea6", size = 7249634, upload-time = "2026-01-10T16:47:25.504Z" }, - { url = "https://files.pythonhosted.org/packages/60/af/4fd8ecb0403539331e80441fe013f0cf11d98114726799b2f97d405586ee/apsw-3.51.2.0-cp314-cp314t-win32.whl", hash = "sha256:bb5def09c9e8dc72f9d13fc370e3794fff76aca42309d63596437041ac88f679", size = 1666851, upload-time = "2026-01-10T16:47:27.133Z" }, - { url = "https://files.pythonhosted.org/packages/3a/40/fd019f0a57b402c8662bb6a3232c70cbe840ca6e53f441ded0b9b4b27040/apsw-3.51.2.0-cp314-cp314t-win_amd64.whl", hash = "sha256:50b4bff55f328ee905a6574ecb99d84817867d6865918cfdada5167001ff6432", size = 1872102, upload-time = "2026-01-10T16:47:28.714Z" }, - { url = "https://files.pythonhosted.org/packages/6c/29/dfb235254ae6c3d2fe14644d39567c6f33d5e9161f5db928e5fe081312f9/apsw-3.51.2.0-cp314-cp314t-win_arm64.whl", hash = "sha256:7009791d5103c028ba72c72751ec1894d8d2c1845ab433d4be61d75fa08c0279", size = 1681212, upload-time = "2026-01-10T16:47:30.64Z" }, ] [[package]] @@ -147,16 +118,6 @@ dependencies = [ ] sdist = { url = "https://files.pythonhosted.org/packages/5c/2d/db8af0df73c1cf454f71b2bbe5e356b8c1f8041c979f505b3d3186e520a9/argon2_cffi_bindings-25.1.0.tar.gz", hash = "sha256:b957f3e6ea4d55d820e40ff76f450952807013d361a65d7f28acc0acbf29229d", size = 1783441, upload-time = "2025-07-30T10:02:05.147Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/60/97/3c0a35f46e52108d4707c44b95cfe2afcafc50800b5450c197454569b776/argon2_cffi_bindings-25.1.0-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:3d3f05610594151994ca9ccb3c771115bdb4daef161976a266f0dd8aa9996b8f", size = 54393, upload-time = "2025-07-30T10:01:40.97Z" }, - { url = "https://files.pythonhosted.org/packages/9d/f4/98bbd6ee89febd4f212696f13c03ca302b8552e7dbf9c8efa11ea4a388c3/argon2_cffi_bindings-25.1.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:8b8efee945193e667a396cbc7b4fb7d357297d6234d30a489905d96caabde56b", size = 29328, upload-time = "2025-07-30T10:01:41.916Z" }, - { url = "https://files.pythonhosted.org/packages/43/24/90a01c0ef12ac91a6be05969f29944643bc1e5e461155ae6559befa8f00b/argon2_cffi_bindings-25.1.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:3c6702abc36bf3ccba3f802b799505def420a1b7039862014a65db3205967f5a", size = 31269, upload-time = "2025-07-30T10:01:42.716Z" }, - { url = "https://files.pythonhosted.org/packages/d4/d3/942aa10782b2697eee7af5e12eeff5ebb325ccfb86dd8abda54174e377e4/argon2_cffi_bindings-25.1.0-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a1c70058c6ab1e352304ac7e3b52554daadacd8d453c1752e547c76e9c99ac44", size = 86558, upload-time = "2025-07-30T10:01:43.943Z" }, - { url = "https://files.pythonhosted.org/packages/0d/82/b484f702fec5536e71836fc2dbc8c5267b3f6e78d2d539b4eaa6f0db8bf8/argon2_cffi_bindings-25.1.0-cp314-cp314t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e2fd3bfbff3c5d74fef31a722f729bf93500910db650c925c2d6ef879a7e51cb", size = 92364, upload-time = "2025-07-30T10:01:44.887Z" }, - { url = "https://files.pythonhosted.org/packages/c9/c1/a606ff83b3f1735f3759ad0f2cd9e038a0ad11a3de3b6c673aa41c24bb7b/argon2_cffi_bindings-25.1.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:c4f9665de60b1b0e99bcd6be4f17d90339698ce954cfd8d9cf4f91c995165a92", size = 85637, upload-time = "2025-07-30T10:01:46.225Z" }, - { url = "https://files.pythonhosted.org/packages/44/b4/678503f12aceb0262f84fa201f6027ed77d71c5019ae03b399b97caa2f19/argon2_cffi_bindings-25.1.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:ba92837e4a9aa6a508c8d2d7883ed5a8f6c308c89a4790e1e447a220deb79a85", size = 91934, upload-time = "2025-07-30T10:01:47.203Z" }, - { url = "https://files.pythonhosted.org/packages/f0/c7/f36bd08ef9bd9f0a9cff9428406651f5937ce27b6c5b07b92d41f91ae541/argon2_cffi_bindings-25.1.0-cp314-cp314t-win32.whl", hash = "sha256:84a461d4d84ae1295871329b346a97f68eade8c53b6ed9a7ca2d7467f3c8ff6f", size = 28158, upload-time = "2025-07-30T10:01:48.341Z" }, - { url = "https://files.pythonhosted.org/packages/b3/80/0106a7448abb24a2c467bf7d527fe5413b7fdfa4ad6d6a96a43a62ef3988/argon2_cffi_bindings-25.1.0-cp314-cp314t-win_amd64.whl", hash = "sha256:b55aec3565b65f56455eebc9b9f34130440404f27fe21c3b375bf1ea4d8fbae6", size = 32597, upload-time = "2025-07-30T10:01:49.112Z" }, - { url = "https://files.pythonhosted.org/packages/05/b8/d663c9caea07e9180b2cb662772865230715cbd573ba3b5e81793d580316/argon2_cffi_bindings-25.1.0-cp314-cp314t-win_arm64.whl", hash = "sha256:87c33a52407e4c41f3b70a9c2d3f6056d88b10dad7695be708c5021673f55623", size = 28231, upload-time = "2025-07-30T10:01:49.92Z" }, { url = "https://files.pythonhosted.org/packages/1d/57/96b8b9f93166147826da5f90376e784a10582dd39a393c99bb62cfcf52f0/argon2_cffi_bindings-25.1.0-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:aecba1723ae35330a008418a91ea6cfcedf6d31e5fbaa056a166462ff066d500", size = 54121, upload-time = "2025-07-30T10:01:50.815Z" }, { url = "https://files.pythonhosted.org/packages/0a/08/a9bebdb2e0e602dde230bdde8021b29f71f7841bd54801bcfd514acb5dcf/argon2_cffi_bindings-25.1.0-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:2630b6240b495dfab90aebe159ff784d08ea999aa4b0d17efa734055a07d2f44", size = 29177, upload-time = "2025-07-30T10:01:51.681Z" }, { url = "https://files.pythonhosted.org/packages/b6/02/d297943bcacf05e4f2a94ab6f462831dc20158614e5d067c35d4e63b9acb/argon2_cffi_bindings-25.1.0-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:7aef0c91e2c0fbca6fc68e7555aa60ef7008a739cbe045541e438373bc54d2b0", size = 31090, upload-time = "2025-07-30T10:01:53.184Z" }, @@ -251,7 +212,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/0f/f0/35240571e1b67ffb19dafb29ab34150b6f59f93f717b041082cdb1bfceb1/backrefs-6.2-py311-none-any.whl", hash = "sha256:08aa7fae530c6b2361d7bdcbda1a7c454e330cc9dbcd03f5c23205e430e5c3be", size = 392874, upload-time = "2026-02-16T19:10:06.314Z" }, { url = "https://files.pythonhosted.org/packages/e3/63/77e8c9745b4d227cce9f5e0a6f68041278c5f9b18588b35905f5f19c1beb/backrefs-6.2-py312-none-any.whl", hash = "sha256:c3f4b9cb2af8cda0d87ab4f57800b57b95428488477be164dd2b47be54db0c90", size = 398787, upload-time = "2026-02-16T19:10:08.274Z" }, { url = "https://files.pythonhosted.org/packages/c5/71/c754b1737ad99102e03fa3235acb6cb6d3ac9d6f596cbc3e5f236705abd8/backrefs-6.2-py313-none-any.whl", hash = "sha256:12df81596ab511f783b7d87c043ce26bc5b0288cf3bb03610fe76b8189282b2b", size = 400747, upload-time = "2026-02-16T19:10:09.791Z" }, - { url = "https://files.pythonhosted.org/packages/af/75/be12ba31a6eb20dccef2320cd8ccb3f7d9013b68ba4c70156259fee9e409/backrefs-6.2-py314-none-any.whl", hash = "sha256:e5f805ae09819caa1aa0623b4a83790e7028604aa2b8c73ba602c4454e665de7", size = 412602, upload-time = "2026-02-16T19:10:12.317Z" }, { url = "https://files.pythonhosted.org/packages/21/f8/d02f650c47d05034dcd6f9c8cf94f39598b7a89c00ecda0ecb2911bc27e9/backrefs-6.2-py39-none-any.whl", hash = "sha256:664e33cd88c6840b7625b826ecf2555f32d491800900f5a541f772c485f7cda7", size = 381077, upload-time = "2026-02-16T19:10:13.74Z" }, ] @@ -376,28 +336,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/eb/6d/bf9bda840d5f1dfdbf0feca87fbdb64a918a69bca42cfa0ba7b137c48cb8/cffi-2.0.0-cp313-cp313-win32.whl", hash = "sha256:74a03b9698e198d47562765773b4a8309919089150a0bb17d829ad7b44b60d27", size = 172909, upload-time = "2025-09-08T23:23:14.32Z" }, { url = "https://files.pythonhosted.org/packages/37/18/6519e1ee6f5a1e579e04b9ddb6f1676c17368a7aba48299c3759bbc3c8b3/cffi-2.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:19f705ada2530c1167abacb171925dd886168931e0a7b78f5bffcae5c6b5be75", size = 183402, upload-time = "2025-09-08T23:23:15.535Z" }, { url = "https://files.pythonhosted.org/packages/cb/0e/02ceeec9a7d6ee63bb596121c2c8e9b3a9e150936f4fbef6ca1943e6137c/cffi-2.0.0-cp313-cp313-win_arm64.whl", hash = "sha256:256f80b80ca3853f90c21b23ee78cd008713787b1b1e93eae9f3d6a7134abd91", size = 177780, upload-time = "2025-09-08T23:23:16.761Z" }, - { url = "https://files.pythonhosted.org/packages/92/c4/3ce07396253a83250ee98564f8d7e9789fab8e58858f35d07a9a2c78de9f/cffi-2.0.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:fc33c5141b55ed366cfaad382df24fe7dcbc686de5be719b207bb248e3053dc5", size = 185320, upload-time = "2025-09-08T23:23:18.087Z" }, - { url = "https://files.pythonhosted.org/packages/59/dd/27e9fa567a23931c838c6b02d0764611c62290062a6d4e8ff7863daf9730/cffi-2.0.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c654de545946e0db659b3400168c9ad31b5d29593291482c43e3564effbcee13", size = 181487, upload-time = "2025-09-08T23:23:19.622Z" }, - { url = "https://files.pythonhosted.org/packages/d6/43/0e822876f87ea8a4ef95442c3d766a06a51fc5298823f884ef87aaad168c/cffi-2.0.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:24b6f81f1983e6df8db3adc38562c83f7d4a0c36162885ec7f7b77c7dcbec97b", size = 220049, upload-time = "2025-09-08T23:23:20.853Z" }, - { url = "https://files.pythonhosted.org/packages/b4/89/76799151d9c2d2d1ead63c2429da9ea9d7aac304603de0c6e8764e6e8e70/cffi-2.0.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:12873ca6cb9b0f0d3a0da705d6086fe911591737a59f28b7936bdfed27c0d47c", size = 207793, upload-time = "2025-09-08T23:23:22.08Z" }, - { url = "https://files.pythonhosted.org/packages/bb/dd/3465b14bb9e24ee24cb88c9e3730f6de63111fffe513492bf8c808a3547e/cffi-2.0.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:d9b97165e8aed9272a6bb17c01e3cc5871a594a446ebedc996e2397a1c1ea8ef", size = 206300, upload-time = "2025-09-08T23:23:23.314Z" }, - { url = "https://files.pythonhosted.org/packages/47/d9/d83e293854571c877a92da46fdec39158f8d7e68da75bf73581225d28e90/cffi-2.0.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:afb8db5439b81cf9c9d0c80404b60c3cc9c3add93e114dcae767f1477cb53775", size = 219244, upload-time = "2025-09-08T23:23:24.541Z" }, - { url = "https://files.pythonhosted.org/packages/2b/0f/1f177e3683aead2bb00f7679a16451d302c436b5cbf2505f0ea8146ef59e/cffi-2.0.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:737fe7d37e1a1bffe70bd5754ea763a62a066dc5913ca57e957824b72a85e205", size = 222828, upload-time = "2025-09-08T23:23:26.143Z" }, - { url = "https://files.pythonhosted.org/packages/c6/0f/cafacebd4b040e3119dcb32fed8bdef8dfe94da653155f9d0b9dc660166e/cffi-2.0.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:38100abb9d1b1435bc4cc340bb4489635dc2f0da7456590877030c9b3d40b0c1", size = 220926, upload-time = "2025-09-08T23:23:27.873Z" }, - { url = "https://files.pythonhosted.org/packages/3e/aa/df335faa45b395396fcbc03de2dfcab242cd61a9900e914fe682a59170b1/cffi-2.0.0-cp314-cp314-win32.whl", hash = "sha256:087067fa8953339c723661eda6b54bc98c5625757ea62e95eb4898ad5e776e9f", size = 175328, upload-time = "2025-09-08T23:23:44.61Z" }, - { url = "https://files.pythonhosted.org/packages/bb/92/882c2d30831744296ce713f0feb4c1cd30f346ef747b530b5318715cc367/cffi-2.0.0-cp314-cp314-win_amd64.whl", hash = "sha256:203a48d1fb583fc7d78a4c6655692963b860a417c0528492a6bc21f1aaefab25", size = 185650, upload-time = "2025-09-08T23:23:45.848Z" }, - { url = "https://files.pythonhosted.org/packages/9f/2c/98ece204b9d35a7366b5b2c6539c350313ca13932143e79dc133ba757104/cffi-2.0.0-cp314-cp314-win_arm64.whl", hash = "sha256:dbd5c7a25a7cb98f5ca55d258b103a2054f859a46ae11aaf23134f9cc0d356ad", size = 180687, upload-time = "2025-09-08T23:23:47.105Z" }, - { url = "https://files.pythonhosted.org/packages/3e/61/c768e4d548bfa607abcda77423448df8c471f25dbe64fb2ef6d555eae006/cffi-2.0.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:9a67fc9e8eb39039280526379fb3a70023d77caec1852002b4da7e8b270c4dd9", size = 188773, upload-time = "2025-09-08T23:23:29.347Z" }, - { url = "https://files.pythonhosted.org/packages/2c/ea/5f76bce7cf6fcd0ab1a1058b5af899bfbef198bea4d5686da88471ea0336/cffi-2.0.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7a66c7204d8869299919db4d5069a82f1561581af12b11b3c9f48c584eb8743d", size = 185013, upload-time = "2025-09-08T23:23:30.63Z" }, - { url = "https://files.pythonhosted.org/packages/be/b4/c56878d0d1755cf9caa54ba71e5d049479c52f9e4afc230f06822162ab2f/cffi-2.0.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7cc09976e8b56f8cebd752f7113ad07752461f48a58cbba644139015ac24954c", size = 221593, upload-time = "2025-09-08T23:23:31.91Z" }, - { url = "https://files.pythonhosted.org/packages/e0/0d/eb704606dfe8033e7128df5e90fee946bbcb64a04fcdaa97321309004000/cffi-2.0.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:92b68146a71df78564e4ef48af17551a5ddd142e5190cdf2c5624d0c3ff5b2e8", size = 209354, upload-time = "2025-09-08T23:23:33.214Z" }, - { url = "https://files.pythonhosted.org/packages/d8/19/3c435d727b368ca475fb8742ab97c9cb13a0de600ce86f62eab7fa3eea60/cffi-2.0.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:b1e74d11748e7e98e2f426ab176d4ed720a64412b6a15054378afdb71e0f37dc", size = 208480, upload-time = "2025-09-08T23:23:34.495Z" }, - { url = "https://files.pythonhosted.org/packages/d0/44/681604464ed9541673e486521497406fadcc15b5217c3e326b061696899a/cffi-2.0.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:28a3a209b96630bca57cce802da70c266eb08c6e97e5afd61a75611ee6c64592", size = 221584, upload-time = "2025-09-08T23:23:36.096Z" }, - { url = "https://files.pythonhosted.org/packages/25/8e/342a504ff018a2825d395d44d63a767dd8ebc927ebda557fecdaca3ac33a/cffi-2.0.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:7553fb2090d71822f02c629afe6042c299edf91ba1bf94951165613553984512", size = 224443, upload-time = "2025-09-08T23:23:37.328Z" }, - { url = "https://files.pythonhosted.org/packages/e1/5e/b666bacbbc60fbf415ba9988324a132c9a7a0448a9a8f125074671c0f2c3/cffi-2.0.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:6c6c373cfc5c83a975506110d17457138c8c63016b563cc9ed6e056a82f13ce4", size = 223437, upload-time = "2025-09-08T23:23:38.945Z" }, - { url = "https://files.pythonhosted.org/packages/a0/1d/ec1a60bd1a10daa292d3cd6bb0b359a81607154fb8165f3ec95fe003b85c/cffi-2.0.0-cp314-cp314t-win32.whl", hash = "sha256:1fc9ea04857caf665289b7a75923f2c6ed559b8298a1b8c49e59f7dd95c8481e", size = 180487, upload-time = "2025-09-08T23:23:40.423Z" }, - { url = "https://files.pythonhosted.org/packages/bf/41/4c1168c74fac325c0c8156f04b6749c8b6a8f405bbf91413ba088359f60d/cffi-2.0.0-cp314-cp314t-win_amd64.whl", hash = "sha256:d68b6cef7827e8641e8ef16f4494edda8b36104d79773a334beaa1e3521430f6", size = 191726, upload-time = "2025-09-08T23:23:41.742Z" }, - { url = "https://files.pythonhosted.org/packages/ae/3a/dbeec9d1ee0844c679f6bb5d6ad4e9f198b1224f4e7a32825f47f6192b0c/cffi-2.0.0-cp314-cp314t-win_arm64.whl", hash = "sha256:0a1527a803f0a659de1af2e1fd700213caba79377e27e4693648c2923da066f9", size = 184195, upload-time = "2025-09-08T23:23:43.004Z" }, ] [[package]] @@ -438,22 +376,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/89/66/c7a9e1b7429be72123441bfdbaf2bc13faab3f90b933f664db506dea5915/charset_normalizer-3.4.4-cp313-cp313-win32.whl", hash = "sha256:9b35f4c90079ff2e2edc5b26c0c77925e5d2d255c42c74fdb70fb49b172726ac", size = 99404, upload-time = "2025-10-14T04:41:29.95Z" }, { url = "https://files.pythonhosted.org/packages/c4/26/b9924fa27db384bdcd97ab83b4f0a8058d96ad9626ead570674d5e737d90/charset_normalizer-3.4.4-cp313-cp313-win_amd64.whl", hash = "sha256:b435cba5f4f750aa6c0a0d92c541fb79f69a387c91e61f1795227e4ed9cece14", size = 107092, upload-time = "2025-10-14T04:41:31.188Z" }, { url = "https://files.pythonhosted.org/packages/af/8f/3ed4bfa0c0c72a7ca17f0380cd9e4dd842b09f664e780c13cff1dcf2ef1b/charset_normalizer-3.4.4-cp313-cp313-win_arm64.whl", hash = "sha256:542d2cee80be6f80247095cc36c418f7bddd14f4a6de45af91dfad36d817bba2", size = 100408, upload-time = "2025-10-14T04:41:32.624Z" }, - { url = "https://files.pythonhosted.org/packages/2a/35/7051599bd493e62411d6ede36fd5af83a38f37c4767b92884df7301db25d/charset_normalizer-3.4.4-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:da3326d9e65ef63a817ecbcc0df6e94463713b754fe293eaa03da99befb9a5bd", size = 207746, upload-time = "2025-10-14T04:41:33.773Z" }, - { url = "https://files.pythonhosted.org/packages/10/9a/97c8d48ef10d6cd4fcead2415523221624bf58bcf68a802721a6bc807c8f/charset_normalizer-3.4.4-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8af65f14dc14a79b924524b1e7fffe304517b2bff5a58bf64f30b98bbc5079eb", size = 147889, upload-time = "2025-10-14T04:41:34.897Z" }, - { url = "https://files.pythonhosted.org/packages/10/bf/979224a919a1b606c82bd2c5fa49b5c6d5727aa47b4312bb27b1734f53cd/charset_normalizer-3.4.4-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:74664978bb272435107de04e36db5a9735e78232b85b77d45cfb38f758efd33e", size = 143641, upload-time = "2025-10-14T04:41:36.116Z" }, - { url = "https://files.pythonhosted.org/packages/ba/33/0ad65587441fc730dc7bd90e9716b30b4702dc7b617e6ba4997dc8651495/charset_normalizer-3.4.4-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:752944c7ffbfdd10c074dc58ec2d5a8a4cd9493b314d367c14d24c17684ddd14", size = 160779, upload-time = "2025-10-14T04:41:37.229Z" }, - { url = "https://files.pythonhosted.org/packages/67/ed/331d6b249259ee71ddea93f6f2f0a56cfebd46938bde6fcc6f7b9a3d0e09/charset_normalizer-3.4.4-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d1f13550535ad8cff21b8d757a3257963e951d96e20ec82ab44bc64aeb62a191", size = 159035, upload-time = "2025-10-14T04:41:38.368Z" }, - { url = "https://files.pythonhosted.org/packages/67/ff/f6b948ca32e4f2a4576aa129d8bed61f2e0543bf9f5f2b7fc3758ed005c9/charset_normalizer-3.4.4-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ecaae4149d99b1c9e7b88bb03e3221956f68fd6d50be2ef061b2381b61d20838", size = 152542, upload-time = "2025-10-14T04:41:39.862Z" }, - { url = "https://files.pythonhosted.org/packages/16/85/276033dcbcc369eb176594de22728541a925b2632f9716428c851b149e83/charset_normalizer-3.4.4-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:cb6254dc36b47a990e59e1068afacdcd02958bdcce30bb50cc1700a8b9d624a6", size = 149524, upload-time = "2025-10-14T04:41:41.319Z" }, - { url = "https://files.pythonhosted.org/packages/9e/f2/6a2a1f722b6aba37050e626530a46a68f74e63683947a8acff92569f979a/charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c8ae8a0f02f57a6e61203a31428fa1d677cbe50c93622b4149d5c0f319c1d19e", size = 150395, upload-time = "2025-10-14T04:41:42.539Z" }, - { url = "https://files.pythonhosted.org/packages/60/bb/2186cb2f2bbaea6338cad15ce23a67f9b0672929744381e28b0592676824/charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:47cc91b2f4dd2833fddaedd2893006b0106129d4b94fdb6af1f4ce5a9965577c", size = 143680, upload-time = "2025-10-14T04:41:43.661Z" }, - { url = "https://files.pythonhosted.org/packages/7d/a5/bf6f13b772fbb2a90360eb620d52ed8f796f3c5caee8398c3b2eb7b1c60d/charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:82004af6c302b5d3ab2cfc4cc5f29db16123b1a8417f2e25f9066f91d4411090", size = 162045, upload-time = "2025-10-14T04:41:44.821Z" }, - { url = "https://files.pythonhosted.org/packages/df/c5/d1be898bf0dc3ef9030c3825e5d3b83f2c528d207d246cbabe245966808d/charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:2b7d8f6c26245217bd2ad053761201e9f9680f8ce52f0fcd8d0755aeae5b2152", size = 149687, upload-time = "2025-10-14T04:41:46.442Z" }, - { url = "https://files.pythonhosted.org/packages/a5/42/90c1f7b9341eef50c8a1cb3f098ac43b0508413f33affd762855f67a410e/charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:799a7a5e4fb2d5898c60b640fd4981d6a25f1c11790935a44ce38c54e985f828", size = 160014, upload-time = "2025-10-14T04:41:47.631Z" }, - { url = "https://files.pythonhosted.org/packages/76/be/4d3ee471e8145d12795ab655ece37baed0929462a86e72372fd25859047c/charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:99ae2cffebb06e6c22bdc25801d7b30f503cc87dbd283479e7b606f70aff57ec", size = 154044, upload-time = "2025-10-14T04:41:48.81Z" }, - { url = "https://files.pythonhosted.org/packages/b0/6f/8f7af07237c34a1defe7defc565a9bc1807762f672c0fde711a4b22bf9c0/charset_normalizer-3.4.4-cp314-cp314-win32.whl", hash = "sha256:f9d332f8c2a2fcbffe1378594431458ddbef721c1769d78e2cbc06280d8155f9", size = 99940, upload-time = "2025-10-14T04:41:49.946Z" }, - { url = "https://files.pythonhosted.org/packages/4b/51/8ade005e5ca5b0d80fb4aff72a3775b325bdc3d27408c8113811a7cbe640/charset_normalizer-3.4.4-cp314-cp314-win_amd64.whl", hash = "sha256:8a6562c3700cce886c5be75ade4a5db4214fda19fede41d9792d100288d8f94c", size = 107104, upload-time = "2025-10-14T04:41:51.051Z" }, - { url = "https://files.pythonhosted.org/packages/da/5f/6b8f83a55bb8278772c5ae54a577f3099025f9ade59d0136ac24a0df4bde/charset_normalizer-3.4.4-cp314-cp314-win_arm64.whl", hash = "sha256:de00632ca48df9daf77a2c65a484531649261ec9f25489917f09e455cb09ddb2", size = 100743, upload-time = "2025-10-14T04:41:52.122Z" }, { url = "https://files.pythonhosted.org/packages/0a/4c/925909008ed5a988ccbb72dcc897407e5d6d3bd72410d69e051fc0c14647/charset_normalizer-3.4.4-py3-none-any.whl", hash = "sha256:7a32c560861a02ff789ad905a2fe94e3f840803362c84fecf1851cb4cf3dc37f", size = 53402, upload-time = "2025-10-14T04:42:31.76Z" }, ] @@ -556,28 +478,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/b9/70/f308384a3ae9cd2209e0849f33c913f658d3326900d0ff5d378d6a1422d2/contourpy-1.3.3-cp313-cp313t-win32.whl", hash = "sha256:283edd842a01e3dcd435b1c5116798d661378d83d36d337b8dde1d16a5fc9ba3", size = 196157, upload-time = "2025-07-26T12:02:11.488Z" }, { url = "https://files.pythonhosted.org/packages/b2/dd/880f890a6663b84d9e34a6f88cded89d78f0091e0045a284427cb6b18521/contourpy-1.3.3-cp313-cp313t-win_amd64.whl", hash = "sha256:87acf5963fc2b34825e5b6b048f40e3635dd547f590b04d2ab317c2619ef7ae8", size = 240570, upload-time = "2025-07-26T12:02:12.754Z" }, { url = "https://files.pythonhosted.org/packages/80/99/2adc7d8ffead633234817ef8e9a87115c8a11927a94478f6bb3d3f4d4f7d/contourpy-1.3.3-cp313-cp313t-win_arm64.whl", hash = "sha256:3c30273eb2a55024ff31ba7d052dde990d7d8e5450f4bbb6e913558b3d6c2301", size = 199713, upload-time = "2025-07-26T12:02:14.4Z" }, - { url = "https://files.pythonhosted.org/packages/72/8b/4546f3ab60f78c514ffb7d01a0bd743f90de36f0019d1be84d0a708a580a/contourpy-1.3.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:fde6c716d51c04b1c25d0b90364d0be954624a0ee9d60e23e850e8d48353d07a", size = 292189, upload-time = "2025-07-26T12:02:16.095Z" }, - { url = "https://files.pythonhosted.org/packages/fd/e1/3542a9cb596cadd76fcef413f19c79216e002623158befe6daa03dbfa88c/contourpy-1.3.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:cbedb772ed74ff5be440fa8eee9bd49f64f6e3fc09436d9c7d8f1c287b121d77", size = 273251, upload-time = "2025-07-26T12:02:17.524Z" }, - { url = "https://files.pythonhosted.org/packages/b1/71/f93e1e9471d189f79d0ce2497007731c1e6bf9ef6d1d61b911430c3db4e5/contourpy-1.3.3-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:22e9b1bd7a9b1d652cd77388465dc358dafcd2e217d35552424aa4f996f524f5", size = 335810, upload-time = "2025-07-26T12:02:18.9Z" }, - { url = "https://files.pythonhosted.org/packages/91/f9/e35f4c1c93f9275d4e38681a80506b5510e9327350c51f8d4a5a724d178c/contourpy-1.3.3-cp314-cp314-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a22738912262aa3e254e4f3cb079a95a67132fc5a063890e224393596902f5a4", size = 382871, upload-time = "2025-07-26T12:02:20.418Z" }, - { url = "https://files.pythonhosted.org/packages/b5/71/47b512f936f66a0a900d81c396a7e60d73419868fba959c61efed7a8ab46/contourpy-1.3.3-cp314-cp314-manylinux_2_26_s390x.manylinux_2_28_s390x.whl", hash = "sha256:afe5a512f31ee6bd7d0dda52ec9864c984ca3d66664444f2d72e0dc4eb832e36", size = 386264, upload-time = "2025-07-26T12:02:21.916Z" }, - { url = "https://files.pythonhosted.org/packages/04/5f/9ff93450ba96b09c7c2b3f81c94de31c89f92292f1380261bd7195bea4ea/contourpy-1.3.3-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f64836de09927cba6f79dcd00fdd7d5329f3fccc633468507079c829ca4db4e3", size = 363819, upload-time = "2025-07-26T12:02:23.759Z" }, - { url = "https://files.pythonhosted.org/packages/3e/a6/0b185d4cc480ee494945cde102cb0149ae830b5fa17bf855b95f2e70ad13/contourpy-1.3.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:1fd43c3be4c8e5fd6e4f2baeae35ae18176cf2e5cced681cca908addf1cdd53b", size = 1333650, upload-time = "2025-07-26T12:02:26.181Z" }, - { url = "https://files.pythonhosted.org/packages/43/d7/afdc95580ca56f30fbcd3060250f66cedbde69b4547028863abd8aa3b47e/contourpy-1.3.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:6afc576f7b33cf00996e5c1102dc2a8f7cc89e39c0b55df93a0b78c1bd992b36", size = 1404833, upload-time = "2025-07-26T12:02:28.782Z" }, - { url = "https://files.pythonhosted.org/packages/e2/e2/366af18a6d386f41132a48f033cbd2102e9b0cf6345d35ff0826cd984566/contourpy-1.3.3-cp314-cp314-win32.whl", hash = "sha256:66c8a43a4f7b8df8b71ee1840e4211a3c8d93b214b213f590e18a1beca458f7d", size = 189692, upload-time = "2025-07-26T12:02:30.128Z" }, - { url = "https://files.pythonhosted.org/packages/7d/c2/57f54b03d0f22d4044b8afb9ca0e184f8b1afd57b4f735c2fa70883dc601/contourpy-1.3.3-cp314-cp314-win_amd64.whl", hash = "sha256:cf9022ef053f2694e31d630feaacb21ea24224be1c3ad0520b13d844274614fd", size = 232424, upload-time = "2025-07-26T12:02:31.395Z" }, - { url = "https://files.pythonhosted.org/packages/18/79/a9416650df9b525737ab521aa181ccc42d56016d2123ddcb7b58e926a42c/contourpy-1.3.3-cp314-cp314-win_arm64.whl", hash = "sha256:95b181891b4c71de4bb404c6621e7e2390745f887f2a026b2d99e92c17892339", size = 198300, upload-time = "2025-07-26T12:02:32.956Z" }, - { url = "https://files.pythonhosted.org/packages/1f/42/38c159a7d0f2b7b9c04c64ab317042bb6952b713ba875c1681529a2932fe/contourpy-1.3.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:33c82d0138c0a062380332c861387650c82e4cf1747aaa6938b9b6516762e772", size = 306769, upload-time = "2025-07-26T12:02:34.2Z" }, - { url = "https://files.pythonhosted.org/packages/c3/6c/26a8205f24bca10974e77460de68d3d7c63e282e23782f1239f226fcae6f/contourpy-1.3.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:ea37e7b45949df430fe649e5de8351c423430046a2af20b1c1961cae3afcda77", size = 287892, upload-time = "2025-07-26T12:02:35.807Z" }, - { url = "https://files.pythonhosted.org/packages/66/06/8a475c8ab718ebfd7925661747dbb3c3ee9c82ac834ccb3570be49d129f4/contourpy-1.3.3-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d304906ecc71672e9c89e87c4675dc5c2645e1f4269a5063b99b0bb29f232d13", size = 326748, upload-time = "2025-07-26T12:02:37.193Z" }, - { url = "https://files.pythonhosted.org/packages/b4/a3/c5ca9f010a44c223f098fccd8b158bb1cb287378a31ac141f04730dc49be/contourpy-1.3.3-cp314-cp314t-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ca658cd1a680a5c9ea96dc61cdbae1e85c8f25849843aa799dfd3cb370ad4fbe", size = 375554, upload-time = "2025-07-26T12:02:38.894Z" }, - { url = "https://files.pythonhosted.org/packages/80/5b/68bd33ae63fac658a4145088c1e894405e07584a316738710b636c6d0333/contourpy-1.3.3-cp314-cp314t-manylinux_2_26_s390x.manylinux_2_28_s390x.whl", hash = "sha256:ab2fd90904c503739a75b7c8c5c01160130ba67944a7b77bbf36ef8054576e7f", size = 388118, upload-time = "2025-07-26T12:02:40.642Z" }, - { url = "https://files.pythonhosted.org/packages/40/52/4c285a6435940ae25d7410a6c36bda5145839bc3f0beb20c707cda18b9d2/contourpy-1.3.3-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b7301b89040075c30e5768810bc96a8e8d78085b47d8be6e4c3f5a0b4ed478a0", size = 352555, upload-time = "2025-07-26T12:02:42.25Z" }, - { url = "https://files.pythonhosted.org/packages/24/ee/3e81e1dd174f5c7fefe50e85d0892de05ca4e26ef1c9a59c2a57e43b865a/contourpy-1.3.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:2a2a8b627d5cc6b7c41a4beff6c5ad5eb848c88255fda4a8745f7e901b32d8e4", size = 1322295, upload-time = "2025-07-26T12:02:44.668Z" }, - { url = "https://files.pythonhosted.org/packages/3c/b2/6d913d4d04e14379de429057cd169e5e00f6c2af3bb13e1710bcbdb5da12/contourpy-1.3.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:fd6ec6be509c787f1caf6b247f0b1ca598bef13f4ddeaa126b7658215529ba0f", size = 1391027, upload-time = "2025-07-26T12:02:47.09Z" }, - { url = "https://files.pythonhosted.org/packages/93/8a/68a4ec5c55a2971213d29a9374913f7e9f18581945a7a31d1a39b5d2dfe5/contourpy-1.3.3-cp314-cp314t-win32.whl", hash = "sha256:e74a9a0f5e3fff48fb5a7f2fd2b9b70a3fe014a67522f79b7cca4c0c7e43c9ae", size = 202428, upload-time = "2025-07-26T12:02:48.691Z" }, - { url = "https://files.pythonhosted.org/packages/fa/96/fd9f641ffedc4fa3ace923af73b9d07e869496c9cc7a459103e6e978992f/contourpy-1.3.3-cp314-cp314t-win_amd64.whl", hash = "sha256:13b68d6a62db8eafaebb8039218921399baf6e47bf85006fd8529f2a08ef33fc", size = 250331, upload-time = "2025-07-26T12:02:50.137Z" }, - { url = "https://files.pythonhosted.org/packages/ae/8c/469afb6465b853afff216f9528ffda78a915ff880ed58813ba4faf4ba0b6/contourpy-1.3.3-cp314-cp314t-win_arm64.whl", hash = "sha256:b7448cb5a725bb1e35ce88771b86fba35ef418952474492cf7c764059933ff8b", size = 203831, upload-time = "2025-07-26T12:02:51.449Z" }, ] [[package]] @@ -620,10 +520,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/90/83/fb33dcea789ed6018f8da20c5a9bc9d82adc65c0c990faed43f7c955da46/debugpy-1.8.20-cp313-cp313-manylinux_2_34_x86_64.whl", hash = "sha256:84562982dd7cf5ebebfdea667ca20a064e096099997b175fe204e86817f64eaf", size = 4293272, upload-time = "2026-01-29T23:03:50.169Z" }, { url = "https://files.pythonhosted.org/packages/a6/25/b1e4a01bfb824d79a6af24b99ef291e24189080c93576dfd9b1a2815cd0f/debugpy-1.8.20-cp313-cp313-win32.whl", hash = "sha256:da11dea6447b2cadbf8ce2bec59ecea87cc18d2c574980f643f2d2dfe4862393", size = 5331208, upload-time = "2026-01-29T23:03:51.547Z" }, { url = "https://files.pythonhosted.org/packages/13/f7/a0b368ce54ffff9e9028c098bd2d28cfc5b54f9f6c186929083d4c60ba58/debugpy-1.8.20-cp313-cp313-win_amd64.whl", hash = "sha256:eb506e45943cab2efb7c6eafdd65b842f3ae779f020c82221f55aca9de135ed7", size = 5372930, upload-time = "2026-01-29T23:03:53.585Z" }, - { url = "https://files.pythonhosted.org/packages/33/2e/f6cb9a8a13f5058f0a20fe09711a7b726232cd5a78c6a7c05b2ec726cff9/debugpy-1.8.20-cp314-cp314-macosx_15_0_universal2.whl", hash = "sha256:9c74df62fc064cd5e5eaca1353a3ef5a5d50da5eb8058fcef63106f7bebe6173", size = 2538066, upload-time = "2026-01-29T23:03:54.999Z" }, - { url = "https://files.pythonhosted.org/packages/c5/56/6ddca50b53624e1ca3ce1d1e49ff22db46c47ea5fb4c0cc5c9b90a616364/debugpy-1.8.20-cp314-cp314-manylinux_2_34_x86_64.whl", hash = "sha256:077a7447589ee9bc1ff0cdf443566d0ecf540ac8aa7333b775ebcb8ce9f4ecad", size = 4269425, upload-time = "2026-01-29T23:03:56.518Z" }, - { url = "https://files.pythonhosted.org/packages/c5/d9/d64199c14a0d4c476df46c82470a3ce45c8d183a6796cfb5e66533b3663c/debugpy-1.8.20-cp314-cp314-win32.whl", hash = "sha256:352036a99dd35053b37b7803f748efc456076f929c6a895556932eaf2d23b07f", size = 5331407, upload-time = "2026-01-29T23:03:58.481Z" }, - { url = "https://files.pythonhosted.org/packages/e0/d9/1f07395b54413432624d61524dfd98c1a7c7827d2abfdb8829ac92638205/debugpy-1.8.20-cp314-cp314-win_amd64.whl", hash = "sha256:a98eec61135465b062846112e5ecf2eebb855305acc1dfbae43b72903b8ab5be", size = 5372521, upload-time = "2026-01-29T23:03:59.864Z" }, { url = "https://files.pythonhosted.org/packages/e0/c3/7f67dea8ccf8fdcb9c99033bbe3e90b9e7395415843accb81428c441be2d/debugpy-1.8.20-py2.py3-none-any.whl", hash = "sha256:5be9bed9ae3be00665a06acaa48f8329d2b9632f15fd09f6a9a8c8d9907e54d7", size = 5337658, upload-time = "2026-01-29T23:04:17.404Z" }, ] @@ -724,6 +620,7 @@ dependencies = [ { name = "matplotlib" }, { name = "mkdocstrings", extra = ["python"] }, { name = "numpyro" }, + { name = "pfjax" }, { name = "pytest" }, { name = "pytkdocs-tweaks" }, ] @@ -731,6 +628,7 @@ dependencies = [ [package.dev-dependencies] dev = [ { name = "imageio" }, + { name = "jax-tqdm" }, { name = "mkdocs" }, { name = "mkdocs-jupyter" }, { name = "mkdocs-material" }, @@ -756,6 +654,7 @@ requires-dist = [ { name = "matplotlib", specifier = ">=3.10.7" }, { name = "mkdocstrings", extras = ["python"], specifier = ">=1.0.1" }, { name = "numpyro", specifier = ">=0.19.0" }, + { name = "pfjax", git = "https://github.com/DanWaxman/pfjax.git?rev=dw-sg-dpf" }, { name = "pytest", specifier = ">=9.0.1" }, { name = "pytkdocs-tweaks", specifier = ">=0.0.8" }, ] @@ -763,6 +662,7 @@ requires-dist = [ [package.metadata.requires-dev] dev = [ { name = "imageio", specifier = ">=2.37.2" }, + { name = "jax-tqdm", specifier = ">=0.4.0" }, { name = "mkdocs", specifier = ">=1.6.1" }, { name = "mkdocs-jupyter", specifier = ">=0.25.1" }, { name = "mkdocs-material", specifier = ">=9.7.1" }, @@ -918,22 +818,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/a7/01/e6ae64a0981076e8a66906fab01539799546181e32a37a0257b77e4aa88b/fonttools-4.61.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b501c862d4901792adaec7c25b1ecc749e2662543f68bb194c42ba18d6eec98d", size = 5067859, upload-time = "2025-12-12T17:30:36.593Z" }, { url = "https://files.pythonhosted.org/packages/73/aa/28e40b8d6809a9b5075350a86779163f074d2b617c15d22343fce81918db/fonttools-4.61.1-cp313-cp313-win32.whl", hash = "sha256:4d7092bb38c53bbc78e9255a59158b150bcdc115a1e3b3ce0b5f267dc35dd63c", size = 2267821, upload-time = "2025-12-12T17:30:38.478Z" }, { url = "https://files.pythonhosted.org/packages/1a/59/453c06d1d83dc0951b69ef692d6b9f1846680342927df54e9a1ca91c6f90/fonttools-4.61.1-cp313-cp313-win_amd64.whl", hash = "sha256:21e7c8d76f62ab13c9472ccf74515ca5b9a761d1bde3265152a6dc58700d895b", size = 2318169, upload-time = "2025-12-12T17:30:40.951Z" }, - { url = "https://files.pythonhosted.org/packages/32/8f/4e7bf82c0cbb738d3c2206c920ca34ca74ef9dabde779030145d28665104/fonttools-4.61.1-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:fff4f534200a04b4a36e7ae3cb74493afe807b517a09e99cb4faa89a34ed6ecd", size = 2846094, upload-time = "2025-12-12T17:30:43.511Z" }, - { url = "https://files.pythonhosted.org/packages/71/09/d44e45d0a4f3a651f23a1e9d42de43bc643cce2971b19e784cc67d823676/fonttools-4.61.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:d9203500f7c63545b4ce3799319fe4d9feb1a1b89b28d3cb5abd11b9dd64147e", size = 2396589, upload-time = "2025-12-12T17:30:45.681Z" }, - { url = "https://files.pythonhosted.org/packages/89/18/58c64cafcf8eb677a99ef593121f719e6dcbdb7d1c594ae5a10d4997ca8a/fonttools-4.61.1-cp314-cp314-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:fa646ecec9528bef693415c79a86e733c70a4965dd938e9a226b0fc64c9d2e6c", size = 4877892, upload-time = "2025-12-12T17:30:47.709Z" }, - { url = "https://files.pythonhosted.org/packages/8a/ec/9e6b38c7ba1e09eb51db849d5450f4c05b7e78481f662c3b79dbde6f3d04/fonttools-4.61.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:11f35ad7805edba3aac1a3710d104592df59f4b957e30108ae0ba6c10b11dd75", size = 4972884, upload-time = "2025-12-12T17:30:49.656Z" }, - { url = "https://files.pythonhosted.org/packages/5e/87/b5339da8e0256734ba0dbbf5b6cdebb1dd79b01dc8c270989b7bcd465541/fonttools-4.61.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:b931ae8f62db78861b0ff1ac017851764602288575d65b8e8ff1963fed419063", size = 4924405, upload-time = "2025-12-12T17:30:51.735Z" }, - { url = "https://files.pythonhosted.org/packages/0b/47/e3409f1e1e69c073a3a6fd8cb886eb18c0bae0ee13db2c8d5e7f8495e8b7/fonttools-4.61.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:b148b56f5de675ee16d45e769e69f87623a4944f7443850bf9a9376e628a89d2", size = 5035553, upload-time = "2025-12-12T17:30:54.823Z" }, - { url = "https://files.pythonhosted.org/packages/bf/b6/1f6600161b1073a984294c6c031e1a56ebf95b6164249eecf30012bb2e38/fonttools-4.61.1-cp314-cp314-win32.whl", hash = "sha256:9b666a475a65f4e839d3d10473fad6d47e0a9db14a2f4a224029c5bfde58ad2c", size = 2271915, upload-time = "2025-12-12T17:30:57.913Z" }, - { url = "https://files.pythonhosted.org/packages/52/7b/91e7b01e37cc8eb0e1f770d08305b3655e4f002fc160fb82b3390eabacf5/fonttools-4.61.1-cp314-cp314-win_amd64.whl", hash = "sha256:4f5686e1fe5fce75d82d93c47a438a25bf0d1319d2843a926f741140b2b16e0c", size = 2323487, upload-time = "2025-12-12T17:30:59.804Z" }, - { url = "https://files.pythonhosted.org/packages/39/5c/908ad78e46c61c3e3ed70c3b58ff82ab48437faf84ec84f109592cabbd9f/fonttools-4.61.1-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:e76ce097e3c57c4bcb67c5aa24a0ecdbd9f74ea9219997a707a4061fbe2707aa", size = 2929571, upload-time = "2025-12-12T17:31:02.574Z" }, - { url = "https://files.pythonhosted.org/packages/bd/41/975804132c6dea64cdbfbaa59f3518a21c137a10cccf962805b301ac6ab2/fonttools-4.61.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:9cfef3ab326780c04d6646f68d4b4742aae222e8b8ea1d627c74e38afcbc9d91", size = 2435317, upload-time = "2025-12-12T17:31:04.974Z" }, - { url = "https://files.pythonhosted.org/packages/b0/5a/aef2a0a8daf1ebaae4cfd83f84186d4a72ee08fd6a8451289fcd03ffa8a4/fonttools-4.61.1-cp314-cp314t-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:a75c301f96db737e1c5ed5fd7d77d9c34466de16095a266509e13da09751bd19", size = 4882124, upload-time = "2025-12-12T17:31:07.456Z" }, - { url = "https://files.pythonhosted.org/packages/80/33/d6db3485b645b81cea538c9d1c9219d5805f0877fda18777add4671c5240/fonttools-4.61.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:91669ccac46bbc1d09e9273546181919064e8df73488ea087dcac3e2968df9ba", size = 5100391, upload-time = "2025-12-12T17:31:09.732Z" }, - { url = "https://files.pythonhosted.org/packages/6c/d6/675ba631454043c75fcf76f0ca5463eac8eb0666ea1d7badae5fea001155/fonttools-4.61.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:c33ab3ca9d3ccd581d58e989d67554e42d8d4ded94ab3ade3508455fe70e65f7", size = 4978800, upload-time = "2025-12-12T17:31:11.681Z" }, - { url = "https://files.pythonhosted.org/packages/7f/33/d3ec753d547a8d2bdaedd390d4a814e8d5b45a093d558f025c6b990b554c/fonttools-4.61.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:664c5a68ec406f6b1547946683008576ef8b38275608e1cee6c061828171c118", size = 5006426, upload-time = "2025-12-12T17:31:13.764Z" }, - { url = "https://files.pythonhosted.org/packages/b4/40/cc11f378b561a67bea850ab50063366a0d1dd3f6d0a30ce0f874b0ad5664/fonttools-4.61.1-cp314-cp314t-win32.whl", hash = "sha256:aed04cabe26f30c1647ef0e8fbb207516fd40fe9472e9439695f5c6998e60ac5", size = 2335377, upload-time = "2025-12-12T17:31:16.49Z" }, - { url = "https://files.pythonhosted.org/packages/e4/ff/c9a2b66b39f8628531ea58b320d66d951267c98c6a38684daa8f50fb02f8/fonttools-4.61.1-cp314-cp314t-win_amd64.whl", hash = "sha256:2180f14c141d2f0f3da43f3a81bc8aa4684860f6b0e6f9e165a4831f24e6a23b", size = 2400613, upload-time = "2025-12-12T17:31:18.769Z" }, { url = "https://files.pythonhosted.org/packages/c7/4e/ce75a57ff3aebf6fc1f4e9d508b8e5810618a33d900ad6c19eb30b290b97/fonttools-4.61.1-py3-none-any.whl", hash = "sha256:17d2bf5d541add43822bcf0c43d7d847b160c9bb01d15d5007d84e2217aaa371", size = 1148996, upload-time = "2025-12-12T17:31:21.03Z" }, ] @@ -1064,14 +948,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/18/88/3eda3ef16bfe7a7dbc3d8d6836bbaa7986feb5ff091395e140dc13927bcc/h5py-3.15.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e02fe77a03f652500d8bff288cbf3675f742fc0411f5a628fa37116507dc7cc0", size = 5030639, upload-time = "2025-10-16T10:34:55.257Z" }, { url = "https://files.pythonhosted.org/packages/e5/ea/fbb258a98863f99befb10ed727152b4ae659f322e1d9c0576f8a62754e81/h5py-3.15.1-cp313-cp313-win_amd64.whl", hash = "sha256:dea78b092fd80a083563ed79a3171258d4a4d307492e7cf8b2313d464c82ba52", size = 2864363, upload-time = "2025-10-16T10:34:58.099Z" }, { url = "https://files.pythonhosted.org/packages/5d/c9/35021cc9cd2b2915a7da3026e3d77a05bed1144a414ff840953b33937fb9/h5py-3.15.1-cp313-cp313-win_arm64.whl", hash = "sha256:c256254a8a81e2bddc0d376e23e2a6d2dc8a1e8a2261835ed8c1281a0744cd97", size = 2449570, upload-time = "2025-10-16T10:35:00.473Z" }, - { url = "https://files.pythonhosted.org/packages/a0/2c/926eba1514e4d2e47d0e9eb16c784e717d8b066398ccfca9b283917b1bfb/h5py-3.15.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:5f4fb0567eb8517c3ecd6b3c02c4f4e9da220c8932604960fd04e24ee1254763", size = 3380368, upload-time = "2025-10-16T10:35:03.117Z" }, - { url = "https://files.pythonhosted.org/packages/65/4b/d715ed454d3baa5f6ae1d30b7eca4c7a1c1084f6a2edead9e801a1541d62/h5py-3.15.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:954e480433e82d3872503104f9b285d369048c3a788b2b1a00e53d1c47c98dd2", size = 2833793, upload-time = "2025-10-16T10:35:05.623Z" }, - { url = "https://files.pythonhosted.org/packages/ef/d4/ef386c28e4579314610a8bffebbee3b69295b0237bc967340b7c653c6c10/h5py-3.15.1-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fd125c131889ebbef0849f4a0e29cf363b48aba42f228d08b4079913b576bb3a", size = 4903199, upload-time = "2025-10-16T10:35:08.972Z" }, - { url = "https://files.pythonhosted.org/packages/33/5d/65c619e195e0b5e54ea5a95c1bb600c8ff8715e0d09676e4cce56d89f492/h5py-3.15.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:28a20e1a4082a479b3d7db2169f3a5034af010b90842e75ebbf2e9e49eb4183e", size = 5097224, upload-time = "2025-10-16T10:35:12.808Z" }, - { url = "https://files.pythonhosted.org/packages/30/30/5273218400bf2da01609e1292f562c94b461fcb73c7a9e27fdadd43abc0a/h5py-3.15.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:fa8df5267f545b4946df8ca0d93d23382191018e4cda2deda4c2cedf9a010e13", size = 4551207, upload-time = "2025-10-16T10:35:16.24Z" }, - { url = "https://files.pythonhosted.org/packages/d3/39/a7ef948ddf4d1c556b0b2b9559534777bccc318543b3f5a1efdf6b556c9c/h5py-3.15.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:99d374a21f7321a4c6ab327c4ab23bd925ad69821aeb53a1e75dd809d19f67fa", size = 5025426, upload-time = "2025-10-16T10:35:19.831Z" }, - { url = "https://files.pythonhosted.org/packages/b6/d8/7368679b8df6925b8415f9dcc9ab1dab01ddc384d2b2c24aac9191bd9ceb/h5py-3.15.1-cp314-cp314-win_amd64.whl", hash = "sha256:9c73d1d7cdb97d5b17ae385153472ce118bed607e43be11e9a9deefaa54e0734", size = 2865704, upload-time = "2025-10-16T10:35:22.658Z" }, - { url = "https://files.pythonhosted.org/packages/d3/b7/4a806f85d62c20157e62e58e03b27513dc9c55499768530acc4f4c5ce4be/h5py-3.15.1-cp314-cp314-win_arm64.whl", hash = "sha256:a6d8c5a05a76aca9a494b4c53ce8a9c29023b7f64f625c6ce1841e92a362ccdf", size = 2465544, upload-time = "2025-10-16T10:35:25.695Z" }, ] [[package]] @@ -1107,13 +983,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/32/4d/9dd616c38da088e3f436e9a616e1d0cc66544b8cdac405cc4e81c8679fc7/httptools-0.7.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:44c8f4347d4b31269c8a9205d8a5ee2df5322b09bbbd30f8f862185bb6b05346", size = 455517, upload-time = "2025-10-10T03:54:51.066Z" }, { url = "https://files.pythonhosted.org/packages/1d/3a/a6c595c310b7df958e739aae88724e24f9246a514d909547778d776799be/httptools-0.7.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:465275d76db4d554918aba40bf1cbebe324670f3dfc979eaffaa5d108e2ed650", size = 458337, upload-time = "2025-10-10T03:54:52.196Z" }, { url = "https://files.pythonhosted.org/packages/fd/82/88e8d6d2c51edc1cc391b6e044c6c435b6aebe97b1abc33db1b0b24cd582/httptools-0.7.1-cp313-cp313-win_amd64.whl", hash = "sha256:322d00c2068d125bd570f7bf78b2d367dad02b919d8581d7476d8b75b294e3e6", size = 85743, upload-time = "2025-10-10T03:54:53.448Z" }, - { url = "https://files.pythonhosted.org/packages/34/50/9d095fcbb6de2d523e027a2f304d4551855c2f46e0b82befd718b8b20056/httptools-0.7.1-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:c08fe65728b8d70b6923ce31e3956f859d5e1e8548e6f22ec520a962c6757270", size = 203619, upload-time = "2025-10-10T03:54:54.321Z" }, - { url = "https://files.pythonhosted.org/packages/07/f0/89720dc5139ae54b03f861b5e2c55a37dba9a5da7d51e1e824a1f343627f/httptools-0.7.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:7aea2e3c3953521c3c51106ee11487a910d45586e351202474d45472db7d72d3", size = 108714, upload-time = "2025-10-10T03:54:55.163Z" }, - { url = "https://files.pythonhosted.org/packages/b3/cb/eea88506f191fb552c11787c23f9a405f4c7b0c5799bf73f2249cd4f5228/httptools-0.7.1-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:0e68b8582f4ea9166be62926077a3334064d422cf08ab87d8b74664f8e9058e1", size = 472909, upload-time = "2025-10-10T03:54:56.056Z" }, - { url = "https://files.pythonhosted.org/packages/e0/4a/a548bdfae6369c0d078bab5769f7b66f17f1bfaa6fa28f81d6be6959066b/httptools-0.7.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:df091cf961a3be783d6aebae963cc9b71e00d57fa6f149025075217bc6a55a7b", size = 470831, upload-time = "2025-10-10T03:54:57.219Z" }, - { url = "https://files.pythonhosted.org/packages/4d/31/14df99e1c43bd132eec921c2e7e11cda7852f65619bc0fc5bdc2d0cb126c/httptools-0.7.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:f084813239e1eb403ddacd06a30de3d3e09a9b76e7894dcda2b22f8a726e9c60", size = 452631, upload-time = "2025-10-10T03:54:58.219Z" }, - { url = "https://files.pythonhosted.org/packages/22/d2/b7e131f7be8d854d48cb6d048113c30f9a46dca0c9a8b08fcb3fcd588cdc/httptools-0.7.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:7347714368fb2b335e9063bc2b96f2f87a9ceffcd9758ac295f8bbcd3ffbc0ca", size = 452910, upload-time = "2025-10-10T03:54:59.366Z" }, - { url = "https://files.pythonhosted.org/packages/53/cf/878f3b91e4e6e011eff6d1fa9ca39f7eb17d19c9d7971b04873734112f30/httptools-0.7.1-cp314-cp314-win_amd64.whl", hash = "sha256:cfabda2a5bb85aa2a904ce06d974a3f30fb36cc63d7feaddec05d2050acede96", size = 88205, upload-time = "2025-10-10T03:55:00.389Z" }, ] [[package]] @@ -1290,6 +1159,20 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/31/a8/97ef0cbb7a17143ace2643d600a7b80d6705b2266fc31078229e406bdef2/jax-0.6.2-py3-none-any.whl", hash = "sha256:bb24a82dc60ccf704dcaf6dbd07d04957f68a6c686db19630dd75260d1fb788c", size = 2722396, upload-time = "2025-06-17T23:10:25.293Z" }, ] +[[package]] +name = "jax-tqdm" +version = "0.4.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "chex" }, + { name = "jax" }, + { name = "tqdm" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/d9/dd/b132ae4a7e22604c2738dff805d151fd81f6a3e77fab36c8dcbd43003f9e/jax_tqdm-0.4.0.tar.gz", hash = "sha256:d76a7ab07286ed8024fa019add2668b4d1d6ddf3bcaa166f2e1466d9e51b99a0", size = 5589, upload-time = "2025-05-09T22:28:38.994Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1d/2d/a94edc83d0012a5968abe1a16a6dc402100a76323fb30e229afe0f75bfe3/jax_tqdm-0.4.0-py3-none-any.whl", hash = "sha256:973d81946ea22d2cad30f2a0434c072b7471ecc23baea2c42ec65e0b2bc2f41f", size = 7175, upload-time = "2025-05-09T22:28:37.957Z" }, +] + [[package]] name = "jaxlib" version = "0.6.2" @@ -1688,32 +1571,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/99/43/7320c50e4133575c66e9f7dadead35ab22d7c012a3b09bb35647792b2a6d/kiwisolver-1.4.9-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:0ab74e19f6a2b027ea4f845a78827969af45ce790e6cb3e1ebab71bdf9f215ff", size = 2594639, upload-time = "2025-08-10T21:26:57.882Z" }, { url = "https://files.pythonhosted.org/packages/65/d6/17ae4a270d4a987ef8a385b906d2bdfc9fce502d6dc0d3aea865b47f548c/kiwisolver-1.4.9-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:dba5ee5d3981160c28d5490f0d1b7ed730c22470ff7f6cc26cfcfaacb9896a07", size = 2391741, upload-time = "2025-08-10T21:26:59.237Z" }, { url = "https://files.pythonhosted.org/packages/2a/8f/8f6f491d595a9e5912971f3f863d81baddccc8a4d0c3749d6a0dd9ffc9df/kiwisolver-1.4.9-cp313-cp313t-win_arm64.whl", hash = "sha256:0749fd8f4218ad2e851e11cc4dc05c7cbc0cbc4267bdfdb31782e65aace4ee9c", size = 68646, upload-time = "2025-08-10T21:27:00.52Z" }, - { url = "https://files.pythonhosted.org/packages/6b/32/6cc0fbc9c54d06c2969faa9c1d29f5751a2e51809dd55c69055e62d9b426/kiwisolver-1.4.9-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:9928fe1eb816d11ae170885a74d074f57af3a0d65777ca47e9aeb854a1fba386", size = 123806, upload-time = "2025-08-10T21:27:01.537Z" }, - { url = "https://files.pythonhosted.org/packages/b2/dd/2bfb1d4a4823d92e8cbb420fe024b8d2167f72079b3bb941207c42570bdf/kiwisolver-1.4.9-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:d0005b053977e7b43388ddec89fa567f43d4f6d5c2c0affe57de5ebf290dc552", size = 66605, upload-time = "2025-08-10T21:27:03.335Z" }, - { url = "https://files.pythonhosted.org/packages/f7/69/00aafdb4e4509c2ca6064646cba9cd4b37933898f426756adb2cb92ebbed/kiwisolver-1.4.9-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:2635d352d67458b66fd0667c14cb1d4145e9560d503219034a18a87e971ce4f3", size = 64925, upload-time = "2025-08-10T21:27:04.339Z" }, - { url = "https://files.pythonhosted.org/packages/43/dc/51acc6791aa14e5cb6d8a2e28cefb0dc2886d8862795449d021334c0df20/kiwisolver-1.4.9-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:767c23ad1c58c9e827b649a9ab7809fd5fd9db266a9cf02b0e926ddc2c680d58", size = 1472414, upload-time = "2025-08-10T21:27:05.437Z" }, - { url = "https://files.pythonhosted.org/packages/3d/bb/93fa64a81db304ac8a246f834d5094fae4b13baf53c839d6bb6e81177129/kiwisolver-1.4.9-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:72d0eb9fba308b8311685c2268cf7d0a0639a6cd027d8128659f72bdd8a024b4", size = 1281272, upload-time = "2025-08-10T21:27:07.063Z" }, - { url = "https://files.pythonhosted.org/packages/70/e6/6df102916960fb8d05069d4bd92d6d9a8202d5a3e2444494e7cd50f65b7a/kiwisolver-1.4.9-cp314-cp314-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f68e4f3eeca8fb22cc3d731f9715a13b652795ef657a13df1ad0c7dc0e9731df", size = 1298578, upload-time = "2025-08-10T21:27:08.452Z" }, - { url = "https://files.pythonhosted.org/packages/7c/47/e142aaa612f5343736b087864dbaebc53ea8831453fb47e7521fa8658f30/kiwisolver-1.4.9-cp314-cp314-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d84cd4061ae292d8ac367b2c3fa3aad11cb8625a95d135fe93f286f914f3f5a6", size = 1345607, upload-time = "2025-08-10T21:27:10.125Z" }, - { url = "https://files.pythonhosted.org/packages/54/89/d641a746194a0f4d1a3670fb900d0dbaa786fb98341056814bc3f058fa52/kiwisolver-1.4.9-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:a60ea74330b91bd22a29638940d115df9dc00af5035a9a2a6ad9399ffb4ceca5", size = 2230150, upload-time = "2025-08-10T21:27:11.484Z" }, - { url = "https://files.pythonhosted.org/packages/aa/6b/5ee1207198febdf16ac11f78c5ae40861b809cbe0e6d2a8d5b0b3044b199/kiwisolver-1.4.9-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:ce6a3a4e106cf35c2d9c4fa17c05ce0b180db622736845d4315519397a77beaf", size = 2325979, upload-time = "2025-08-10T21:27:12.917Z" }, - { url = "https://files.pythonhosted.org/packages/fc/ff/b269eefd90f4ae14dcc74973d5a0f6d28d3b9bb1afd8c0340513afe6b39a/kiwisolver-1.4.9-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:77937e5e2a38a7b48eef0585114fe7930346993a88060d0bf886086d2aa49ef5", size = 2491456, upload-time = "2025-08-10T21:27:14.353Z" }, - { url = "https://files.pythonhosted.org/packages/fc/d4/10303190bd4d30de547534601e259a4fbf014eed94aae3e5521129215086/kiwisolver-1.4.9-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:24c175051354f4a28c5d6a31c93906dc653e2bf234e8a4bbfb964892078898ce", size = 2294621, upload-time = "2025-08-10T21:27:15.808Z" }, - { url = "https://files.pythonhosted.org/packages/28/e0/a9a90416fce5c0be25742729c2ea52105d62eda6c4be4d803c2a7be1fa50/kiwisolver-1.4.9-cp314-cp314-win_amd64.whl", hash = "sha256:0763515d4df10edf6d06a3c19734e2566368980d21ebec439f33f9eb936c07b7", size = 75417, upload-time = "2025-08-10T21:27:17.436Z" }, - { url = "https://files.pythonhosted.org/packages/1f/10/6949958215b7a9a264299a7db195564e87900f709db9245e4ebdd3c70779/kiwisolver-1.4.9-cp314-cp314-win_arm64.whl", hash = "sha256:0e4e2bf29574a6a7b7f6cb5fa69293b9f96c928949ac4a53ba3f525dffb87f9c", size = 66582, upload-time = "2025-08-10T21:27:18.436Z" }, - { url = "https://files.pythonhosted.org/packages/ec/79/60e53067903d3bc5469b369fe0dfc6b3482e2133e85dae9daa9527535991/kiwisolver-1.4.9-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:d976bbb382b202f71c67f77b0ac11244021cfa3f7dfd9e562eefcea2df711548", size = 126514, upload-time = "2025-08-10T21:27:19.465Z" }, - { url = "https://files.pythonhosted.org/packages/25/d1/4843d3e8d46b072c12a38c97c57fab4608d36e13fe47d47ee96b4d61ba6f/kiwisolver-1.4.9-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:2489e4e5d7ef9a1c300a5e0196e43d9c739f066ef23270607d45aba368b91f2d", size = 67905, upload-time = "2025-08-10T21:27:20.51Z" }, - { url = "https://files.pythonhosted.org/packages/8c/ae/29ffcbd239aea8b93108de1278271ae764dfc0d803a5693914975f200596/kiwisolver-1.4.9-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:e2ea9f7ab7fbf18fffb1b5434ce7c69a07582f7acc7717720f1d69f3e806f90c", size = 66399, upload-time = "2025-08-10T21:27:21.496Z" }, - { url = "https://files.pythonhosted.org/packages/a1/ae/d7ba902aa604152c2ceba5d352d7b62106bedbccc8e95c3934d94472bfa3/kiwisolver-1.4.9-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:b34e51affded8faee0dfdb705416153819d8ea9250bbbf7ea1b249bdeb5f1122", size = 1582197, upload-time = "2025-08-10T21:27:22.604Z" }, - { url = "https://files.pythonhosted.org/packages/f2/41/27c70d427eddb8bc7e4f16420a20fefc6f480312122a59a959fdfe0445ad/kiwisolver-1.4.9-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d8aacd3d4b33b772542b2e01beb50187536967b514b00003bdda7589722d2a64", size = 1390125, upload-time = "2025-08-10T21:27:24.036Z" }, - { url = "https://files.pythonhosted.org/packages/41/42/b3799a12bafc76d962ad69083f8b43b12bf4fe78b097b12e105d75c9b8f1/kiwisolver-1.4.9-cp314-cp314t-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:7cf974dd4e35fa315563ac99d6287a1024e4dc2077b8a7d7cd3d2fb65d283134", size = 1402612, upload-time = "2025-08-10T21:27:25.773Z" }, - { url = "https://files.pythonhosted.org/packages/d2/b5/a210ea073ea1cfaca1bb5c55a62307d8252f531beb364e18aa1e0888b5a0/kiwisolver-1.4.9-cp314-cp314t-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:85bd218b5ecfbee8c8a82e121802dcb519a86044c9c3b2e4aef02fa05c6da370", size = 1453990, upload-time = "2025-08-10T21:27:27.089Z" }, - { url = "https://files.pythonhosted.org/packages/5f/ce/a829eb8c033e977d7ea03ed32fb3c1781b4fa0433fbadfff29e39c676f32/kiwisolver-1.4.9-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:0856e241c2d3df4efef7c04a1e46b1936b6120c9bcf36dd216e3acd84bc4fb21", size = 2331601, upload-time = "2025-08-10T21:27:29.343Z" }, - { url = "https://files.pythonhosted.org/packages/e0/4b/b5e97eb142eb9cd0072dacfcdcd31b1c66dc7352b0f7c7255d339c0edf00/kiwisolver-1.4.9-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:9af39d6551f97d31a4deebeac6f45b156f9755ddc59c07b402c148f5dbb6482a", size = 2422041, upload-time = "2025-08-10T21:27:30.754Z" }, - { url = "https://files.pythonhosted.org/packages/40/be/8eb4cd53e1b85ba4edc3a9321666f12b83113a178845593307a3e7891f44/kiwisolver-1.4.9-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:bb4ae2b57fc1d8cbd1cf7b1d9913803681ffa903e7488012be5b76dedf49297f", size = 2594897, upload-time = "2025-08-10T21:27:32.803Z" }, - { url = "https://files.pythonhosted.org/packages/99/dd/841e9a66c4715477ea0abc78da039832fbb09dac5c35c58dc4c41a407b8a/kiwisolver-1.4.9-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:aedff62918805fb62d43a4aa2ecd4482c380dc76cd31bd7c8878588a61bd0369", size = 2391835, upload-time = "2025-08-10T21:27:34.23Z" }, - { url = "https://files.pythonhosted.org/packages/0c/28/4b2e5c47a0da96896fdfdb006340ade064afa1e63675d01ea5ac222b6d52/kiwisolver-1.4.9-cp314-cp314t-win_amd64.whl", hash = "sha256:1fa333e8b2ce4d9660f2cda9c0e1b6bafcfb2457a9d259faa82289e73ec24891", size = 79988, upload-time = "2025-08-10T21:27:35.587Z" }, - { url = "https://files.pythonhosted.org/packages/80/be/3578e8afd18c88cdf9cb4cffde75a96d2be38c5a903f1ed0ceec061bd09e/kiwisolver-1.4.9-cp314-cp314t-win_arm64.whl", hash = "sha256:4a48a2ce79d65d363597ef7b567ce3d14d68783d2b2263d98db3d9477805ba32", size = 70260, upload-time = "2025-08-10T21:27:36.606Z" }, ] [[package]] @@ -1757,32 +1614,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/d4/be/24f8502db11d405232ac1162eb98069ca49c3306c1d75c6ccc61d9af8789/librt-0.8.1-cp313-cp313-win32.whl", hash = "sha256:086a32dbb71336627e78cc1d6ee305a68d038ef7d4c39aaff41ae8c9aa46e91a", size = 54969, upload-time = "2026-02-17T16:12:09.633Z" }, { url = "https://files.pythonhosted.org/packages/5c/73/c9fdf6cb2a529c1a092ce769a12d88c8cca991194dfe641b6af12fa964d2/librt-0.8.1-cp313-cp313-win_amd64.whl", hash = "sha256:e11769a1dbda4da7b00a76cfffa67aa47cfa66921d2724539eee4b9ede780b79", size = 62000, upload-time = "2026-02-17T16:12:10.632Z" }, { url = "https://files.pythonhosted.org/packages/d3/97/68f80ca3ac4924f250cdfa6e20142a803e5e50fca96ef5148c52ee8c10ea/librt-0.8.1-cp313-cp313-win_arm64.whl", hash = "sha256:924817ab3141aca17893386ee13261f1d100d1ef410d70afe4389f2359fea4f0", size = 52495, upload-time = "2026-02-17T16:12:11.633Z" }, - { url = "https://files.pythonhosted.org/packages/c9/6a/907ef6800f7bca71b525a05f1839b21f708c09043b1c6aa77b6b827b3996/librt-0.8.1-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:6cfa7fe54fd4d1f47130017351a959fe5804bda7a0bc7e07a2cdbc3fdd28d34f", size = 66081, upload-time = "2026-02-17T16:12:12.766Z" }, - { url = "https://files.pythonhosted.org/packages/1b/18/25e991cd5640c9fb0f8d91b18797b29066b792f17bf8493da183bf5caabe/librt-0.8.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:228c2409c079f8c11fb2e5d7b277077f694cb93443eb760e00b3b83cb8b3176c", size = 68309, upload-time = "2026-02-17T16:12:13.756Z" }, - { url = "https://files.pythonhosted.org/packages/a4/36/46820d03f058cfb5a9de5940640ba03165ed8aded69e0733c417bb04df34/librt-0.8.1-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:7aae78ab5e3206181780e56912d1b9bb9f90a7249ce12f0e8bf531d0462dd0fc", size = 196804, upload-time = "2026-02-17T16:12:14.818Z" }, - { url = "https://files.pythonhosted.org/packages/59/18/5dd0d3b87b8ff9c061849fbdb347758d1f724b9a82241aa908e0ec54ccd0/librt-0.8.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:172d57ec04346b047ca6af181e1ea4858086c80bdf455f61994c4aa6fc3f866c", size = 206907, upload-time = "2026-02-17T16:12:16.513Z" }, - { url = "https://files.pythonhosted.org/packages/d1/96/ef04902aad1424fd7299b62d1890e803e6ab4018c3044dca5922319c4b97/librt-0.8.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6b1977c4ea97ce5eb7755a78fae68d87e4102e4aaf54985e8b56806849cc06a3", size = 221217, upload-time = "2026-02-17T16:12:17.906Z" }, - { url = "https://files.pythonhosted.org/packages/6d/ff/7e01f2dda84a8f5d280637a2e5827210a8acca9a567a54507ef1c75b342d/librt-0.8.1-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:10c42e1f6fd06733ef65ae7bebce2872bcafd8d6e6b0a08fe0a05a23b044fb14", size = 214622, upload-time = "2026-02-17T16:12:19.108Z" }, - { url = "https://files.pythonhosted.org/packages/1e/8c/5b093d08a13946034fed57619742f790faf77058558b14ca36a6e331161e/librt-0.8.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:4c8dfa264b9193c4ee19113c985c95f876fae5e51f731494fc4e0cf594990ba7", size = 221987, upload-time = "2026-02-17T16:12:20.331Z" }, - { url = "https://files.pythonhosted.org/packages/d3/cc/86b0b3b151d40920ad45a94ce0171dec1aebba8a9d72bb3fa00c73ab25dd/librt-0.8.1-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:01170b6729a438f0dedc4a26ed342e3dc4f02d1000b4b19f980e1877f0c297e6", size = 215132, upload-time = "2026-02-17T16:12:21.54Z" }, - { url = "https://files.pythonhosted.org/packages/fc/be/8588164a46edf1e69858d952654e216a9a91174688eeefb9efbb38a9c799/librt-0.8.1-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:7b02679a0d783bdae30d443025b94465d8c3dc512f32f5b5031f93f57ac32071", size = 215195, upload-time = "2026-02-17T16:12:23.073Z" }, - { url = "https://files.pythonhosted.org/packages/f5/f2/0b9279bea735c734d69344ecfe056c1ba211694a72df10f568745c899c76/librt-0.8.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:190b109bb69592a3401fe1ffdea41a2e73370ace2ffdc4a0e8e2b39cdea81b78", size = 237946, upload-time = "2026-02-17T16:12:24.275Z" }, - { url = "https://files.pythonhosted.org/packages/e9/cc/5f2a34fbc8aeb35314a3641f9956fa9051a947424652fad9882be7a97949/librt-0.8.1-cp314-cp314-win32.whl", hash = "sha256:e70a57ecf89a0f64c24e37f38d3fe217a58169d2fe6ed6d70554964042474023", size = 50689, upload-time = "2026-02-17T16:12:25.766Z" }, - { url = "https://files.pythonhosted.org/packages/a0/76/cd4d010ab2147339ca2b93e959c3686e964edc6de66ddacc935c325883d7/librt-0.8.1-cp314-cp314-win_amd64.whl", hash = "sha256:7e2f3edca35664499fbb36e4770650c4bd4a08abc1f4458eab9df4ec56389730", size = 57875, upload-time = "2026-02-17T16:12:27.465Z" }, - { url = "https://files.pythonhosted.org/packages/84/0f/2143cb3c3ca48bd3379dcd11817163ca50781927c4537345d608b5045998/librt-0.8.1-cp314-cp314-win_arm64.whl", hash = "sha256:0d2f82168e55ddefd27c01c654ce52379c0750ddc31ee86b4b266bcf4d65f2a3", size = 48058, upload-time = "2026-02-17T16:12:28.556Z" }, - { url = "https://files.pythonhosted.org/packages/d2/0e/9b23a87e37baf00311c3efe6b48d6b6c168c29902dfc3f04c338372fd7db/librt-0.8.1-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:2c74a2da57a094bd48d03fa5d196da83d2815678385d2978657499063709abe1", size = 68313, upload-time = "2026-02-17T16:12:29.659Z" }, - { url = "https://files.pythonhosted.org/packages/db/9a/859c41e5a4f1c84200a7d2b92f586aa27133c8243b6cac9926f6e54d01b9/librt-0.8.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:a355d99c4c0d8e5b770313b8b247411ed40949ca44e33e46a4789b9293a907ee", size = 70994, upload-time = "2026-02-17T16:12:31.516Z" }, - { url = "https://files.pythonhosted.org/packages/4c/28/10605366ee599ed34223ac2bf66404c6fb59399f47108215d16d5ad751a8/librt-0.8.1-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:2eb345e8b33fb748227409c9f1233d4df354d6e54091f0e8fc53acdb2ffedeb7", size = 220770, upload-time = "2026-02-17T16:12:33.294Z" }, - { url = "https://files.pythonhosted.org/packages/af/8d/16ed8fd452dafae9c48d17a6bc1ee3e818fd40ef718d149a8eff2c9f4ea2/librt-0.8.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9be2f15e53ce4e83cc08adc29b26fb5978db62ef2a366fbdf716c8a6c8901040", size = 235409, upload-time = "2026-02-17T16:12:35.443Z" }, - { url = "https://files.pythonhosted.org/packages/89/1b/7bdf3e49349c134b25db816e4a3db6b94a47ac69d7d46b1e682c2c4949be/librt-0.8.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:785ae29c1f5c6e7c2cde2c7c0e148147f4503da3abc5d44d482068da5322fd9e", size = 246473, upload-time = "2026-02-17T16:12:36.656Z" }, - { url = "https://files.pythonhosted.org/packages/4e/8a/91fab8e4fd2a24930a17188c7af5380eb27b203d72101c9cc000dbdfd95a/librt-0.8.1-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:1d3a7da44baf692f0c6aeb5b2a09c5e6fc7a703bca9ffa337ddd2e2da53f7732", size = 238866, upload-time = "2026-02-17T16:12:37.849Z" }, - { url = "https://files.pythonhosted.org/packages/b9/e0/c45a098843fc7c07e18a7f8a24ca8496aecbf7bdcd54980c6ca1aaa79a8e/librt-0.8.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:5fc48998000cbc39ec0d5311312dda93ecf92b39aaf184c5e817d5d440b29624", size = 250248, upload-time = "2026-02-17T16:12:39.445Z" }, - { url = "https://files.pythonhosted.org/packages/82/30/07627de23036640c952cce0c1fe78972e77d7d2f8fd54fa5ef4554ff4a56/librt-0.8.1-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:e96baa6820280077a78244b2e06e416480ed859bbd8e5d641cf5742919d8beb4", size = 240629, upload-time = "2026-02-17T16:12:40.889Z" }, - { url = "https://files.pythonhosted.org/packages/fb/c1/55bfe1ee3542eba055616f9098eaf6eddb966efb0ca0f44eaa4aba327307/librt-0.8.1-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:31362dbfe297b23590530007062c32c6f6176f6099646bb2c95ab1b00a57c382", size = 239615, upload-time = "2026-02-17T16:12:42.446Z" }, - { url = "https://files.pythonhosted.org/packages/2b/39/191d3d28abc26c9099b19852e6c99f7f6d400b82fa5a4e80291bd3803e19/librt-0.8.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:cc3656283d11540ab0ea01978378e73e10002145117055e03722417aeab30994", size = 263001, upload-time = "2026-02-17T16:12:43.627Z" }, - { url = "https://files.pythonhosted.org/packages/b9/eb/7697f60fbe7042ab4e88f4ee6af496b7f222fffb0a4e3593ef1f29f81652/librt-0.8.1-cp314-cp314t-win32.whl", hash = "sha256:738f08021b3142c2918c03692608baed43bc51144c29e35807682f8070ee2a3a", size = 51328, upload-time = "2026-02-17T16:12:45.148Z" }, - { url = "https://files.pythonhosted.org/packages/7c/72/34bf2eb7a15414a23e5e70ecb9440c1d3179f393d9349338a91e2781c0fb/librt-0.8.1-cp314-cp314t-win_amd64.whl", hash = "sha256:89815a22daf9c51884fb5dbe4f1ef65ee6a146e0b6a8df05f753e2e4a9359bf4", size = 58722, upload-time = "2026-02-17T16:12:46.85Z" }, - { url = "https://files.pythonhosted.org/packages/b2/c8/d148e041732d631fc76036f8b30fae4e77b027a1e95b7a84bb522481a940/librt-0.8.1-cp314-cp314t-win_arm64.whl", hash = "sha256:bf512a71a23504ed08103a13c941f763db13fb11177beb3d9244c98c29fb4a61", size = 48755, upload-time = "2026-02-17T16:12:47.943Z" }, ] [[package]] @@ -1814,10 +1645,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/0e/54/737755c0a91558364b9200702c3c9c15d70ed63f9b98a2c32f1c2aa1f3ba/llvmlite-0.46.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:6cc19b051753368a9c9f31dc041299059ee91aceec81bd57b0e385e5d5bf1a54", size = 56275176, upload-time = "2025-12-08T18:15:16.339Z" }, { url = "https://files.pythonhosted.org/packages/e6/91/14f32e1d70905c1c0aa4e6609ab5d705c3183116ca02ac6df2091868413a/llvmlite-0.46.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bca185892908f9ede48c0acd547fe4dc1bafefb8a4967d47db6cf664f9332d12", size = 55128629, upload-time = "2025-12-08T18:15:19.493Z" }, { url = "https://files.pythonhosted.org/packages/4a/a7/d526ae86708cea531935ae777b6dbcabe7db52718e6401e0fb9c5edea80e/llvmlite-0.46.0-cp313-cp313-win_amd64.whl", hash = "sha256:67438fd30e12349ebb054d86a5a1a57fd5e87d264d2451bcfafbbbaa25b82a35", size = 38138941, upload-time = "2025-12-08T18:15:22.536Z" }, - { url = "https://files.pythonhosted.org/packages/95/ae/af0ffb724814cc2ea64445acad05f71cff5f799bb7efb22e47ee99340dbc/llvmlite-0.46.0-cp314-cp314-macosx_12_0_arm64.whl", hash = "sha256:d252edfb9f4ac1fcf20652258e3f102b26b03eef738dc8a6ffdab7d7d341d547", size = 37232768, upload-time = "2025-12-08T18:15:25.055Z" }, - { url = "https://files.pythonhosted.org/packages/c9/19/5018e5352019be753b7b07f7759cdabb69ca5779fea2494be8839270df4c/llvmlite-0.46.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:379fdd1c59badeff8982cb47e4694a6143bec3bb49aa10a466e095410522064d", size = 56275173, upload-time = "2025-12-08T18:15:28.109Z" }, - { url = "https://files.pythonhosted.org/packages/9f/c9/d57877759d707e84c082163c543853245f91b70c804115a5010532890f18/llvmlite-0.46.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2e8cbfff7f6db0fa2c771ad24154e2a7e457c2444d7673e6de06b8b698c3b269", size = 55128628, upload-time = "2025-12-08T18:15:31.098Z" }, - { url = "https://files.pythonhosted.org/packages/30/a8/e61a8c2b3cc7a597073d9cde1fcbb567e9d827f1db30c93cf80422eac70d/llvmlite-0.46.0-cp314-cp314-win_amd64.whl", hash = "sha256:7821eda3ec1f18050f981819756631d60b6d7ab1a6cf806d9efefbe3f4082d61", size = 39153056, upload-time = "2025-12-08T18:15:33.938Z" }, ] [[package]] @@ -1880,28 +1707,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/80/d6/2d1b89f6ca4bff1036499b1e29a1d02d282259f3681540e16563f27ebc23/markupsafe-3.0.3-cp313-cp313t-win32.whl", hash = "sha256:69c0b73548bc525c8cb9a251cddf1931d1db4d2258e9599c28c07ef3580ef354", size = 14612, upload-time = "2025-09-27T18:37:02.639Z" }, { url = "https://files.pythonhosted.org/packages/2b/98/e48a4bfba0a0ffcf9925fe2d69240bfaa19c6f7507b8cd09c70684a53c1e/markupsafe-3.0.3-cp313-cp313t-win_amd64.whl", hash = "sha256:1b4b79e8ebf6b55351f0d91fe80f893b4743f104bff22e90697db1590e47a218", size = 15200, upload-time = "2025-09-27T18:37:03.582Z" }, { url = "https://files.pythonhosted.org/packages/0e/72/e3cc540f351f316e9ed0f092757459afbc595824ca724cbc5a5d4263713f/markupsafe-3.0.3-cp313-cp313t-win_arm64.whl", hash = "sha256:ad2cf8aa28b8c020ab2fc8287b0f823d0a7d8630784c31e9ee5edea20f406287", size = 13973, upload-time = "2025-09-27T18:37:04.929Z" }, - { url = "https://files.pythonhosted.org/packages/33/8a/8e42d4838cd89b7dde187011e97fe6c3af66d8c044997d2183fbd6d31352/markupsafe-3.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:eaa9599de571d72e2daf60164784109f19978b327a3910d3e9de8c97b5b70cfe", size = 11619, upload-time = "2025-09-27T18:37:06.342Z" }, - { url = "https://files.pythonhosted.org/packages/b5/64/7660f8a4a8e53c924d0fa05dc3a55c9cee10bbd82b11c5afb27d44b096ce/markupsafe-3.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c47a551199eb8eb2121d4f0f15ae0f923d31350ab9280078d1e5f12b249e0026", size = 12029, upload-time = "2025-09-27T18:37:07.213Z" }, - { url = "https://files.pythonhosted.org/packages/da/ef/e648bfd021127bef5fa12e1720ffed0c6cbb8310c8d9bea7266337ff06de/markupsafe-3.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f34c41761022dd093b4b6896d4810782ffbabe30f2d443ff5f083e0cbbb8c737", size = 24408, upload-time = "2025-09-27T18:37:09.572Z" }, - { url = "https://files.pythonhosted.org/packages/41/3c/a36c2450754618e62008bf7435ccb0f88053e07592e6028a34776213d877/markupsafe-3.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:457a69a9577064c05a97c41f4e65148652db078a3a509039e64d3467b9e7ef97", size = 23005, upload-time = "2025-09-27T18:37:10.58Z" }, - { url = "https://files.pythonhosted.org/packages/bc/20/b7fdf89a8456b099837cd1dc21974632a02a999ec9bf7ca3e490aacd98e7/markupsafe-3.0.3-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e8afc3f2ccfa24215f8cb28dcf43f0113ac3c37c2f0f0806d8c70e4228c5cf4d", size = 22048, upload-time = "2025-09-27T18:37:11.547Z" }, - { url = "https://files.pythonhosted.org/packages/9a/a7/591f592afdc734f47db08a75793a55d7fbcc6902a723ae4cfbab61010cc5/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:ec15a59cf5af7be74194f7ab02d0f59a62bdcf1a537677ce67a2537c9b87fcda", size = 23821, upload-time = "2025-09-27T18:37:12.48Z" }, - { url = "https://files.pythonhosted.org/packages/7d/33/45b24e4f44195b26521bc6f1a82197118f74df348556594bd2262bda1038/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:0eb9ff8191e8498cca014656ae6b8d61f39da5f95b488805da4bb029cccbfbaf", size = 21606, upload-time = "2025-09-27T18:37:13.485Z" }, - { url = "https://files.pythonhosted.org/packages/ff/0e/53dfaca23a69fbfbbf17a4b64072090e70717344c52eaaaa9c5ddff1e5f0/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:2713baf880df847f2bece4230d4d094280f4e67b1e813eec43b4c0e144a34ffe", size = 23043, upload-time = "2025-09-27T18:37:14.408Z" }, - { url = "https://files.pythonhosted.org/packages/46/11/f333a06fc16236d5238bfe74daccbca41459dcd8d1fa952e8fbd5dccfb70/markupsafe-3.0.3-cp314-cp314-win32.whl", hash = "sha256:729586769a26dbceff69f7a7dbbf59ab6572b99d94576a5592625d5b411576b9", size = 14747, upload-time = "2025-09-27T18:37:15.36Z" }, - { url = "https://files.pythonhosted.org/packages/28/52/182836104b33b444e400b14f797212f720cbc9ed6ba34c800639d154e821/markupsafe-3.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:bdc919ead48f234740ad807933cdf545180bfbe9342c2bb451556db2ed958581", size = 15341, upload-time = "2025-09-27T18:37:16.496Z" }, - { url = "https://files.pythonhosted.org/packages/6f/18/acf23e91bd94fd7b3031558b1f013adfa21a8e407a3fdb32745538730382/markupsafe-3.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:5a7d5dc5140555cf21a6fefbdbf8723f06fcd2f63ef108f2854de715e4422cb4", size = 14073, upload-time = "2025-09-27T18:37:17.476Z" }, - { url = "https://files.pythonhosted.org/packages/3c/f0/57689aa4076e1b43b15fdfa646b04653969d50cf30c32a102762be2485da/markupsafe-3.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:1353ef0c1b138e1907ae78e2f6c63ff67501122006b0f9abad68fda5f4ffc6ab", size = 11661, upload-time = "2025-09-27T18:37:18.453Z" }, - { url = "https://files.pythonhosted.org/packages/89/c3/2e67a7ca217c6912985ec766c6393b636fb0c2344443ff9d91404dc4c79f/markupsafe-3.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:1085e7fbddd3be5f89cc898938f42c0b3c711fdcb37d75221de2666af647c175", size = 12069, upload-time = "2025-09-27T18:37:19.332Z" }, - { url = "https://files.pythonhosted.org/packages/f0/00/be561dce4e6ca66b15276e184ce4b8aec61fe83662cce2f7d72bd3249d28/markupsafe-3.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1b52b4fb9df4eb9ae465f8d0c228a00624de2334f216f178a995ccdcf82c4634", size = 25670, upload-time = "2025-09-27T18:37:20.245Z" }, - { url = "https://files.pythonhosted.org/packages/50/09/c419f6f5a92e5fadde27efd190eca90f05e1261b10dbd8cbcb39cd8ea1dc/markupsafe-3.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fed51ac40f757d41b7c48425901843666a6677e3e8eb0abcff09e4ba6e664f50", size = 23598, upload-time = "2025-09-27T18:37:21.177Z" }, - { url = "https://files.pythonhosted.org/packages/22/44/a0681611106e0b2921b3033fc19bc53323e0b50bc70cffdd19f7d679bb66/markupsafe-3.0.3-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f190daf01f13c72eac4efd5c430a8de82489d9cff23c364c3ea822545032993e", size = 23261, upload-time = "2025-09-27T18:37:22.167Z" }, - { url = "https://files.pythonhosted.org/packages/5f/57/1b0b3f100259dc9fffe780cfb60d4be71375510e435efec3d116b6436d43/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e56b7d45a839a697b5eb268c82a71bd8c7f6c94d6fd50c3d577fa39a9f1409f5", size = 24835, upload-time = "2025-09-27T18:37:23.296Z" }, - { url = "https://files.pythonhosted.org/packages/26/6a/4bf6d0c97c4920f1597cc14dd720705eca0bf7c787aebc6bb4d1bead5388/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:f3e98bb3798ead92273dc0e5fd0f31ade220f59a266ffd8a4f6065e0a3ce0523", size = 22733, upload-time = "2025-09-27T18:37:24.237Z" }, - { url = "https://files.pythonhosted.org/packages/14/c7/ca723101509b518797fedc2fdf79ba57f886b4aca8a7d31857ba3ee8281f/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5678211cb9333a6468fb8d8be0305520aa073f50d17f089b5b4b477ea6e67fdc", size = 23672, upload-time = "2025-09-27T18:37:25.271Z" }, - { url = "https://files.pythonhosted.org/packages/fb/df/5bd7a48c256faecd1d36edc13133e51397e41b73bb77e1a69deab746ebac/markupsafe-3.0.3-cp314-cp314t-win32.whl", hash = "sha256:915c04ba3851909ce68ccc2b8e2cd691618c4dc4c4232fb7982bca3f41fd8c3d", size = 14819, upload-time = "2025-09-27T18:37:26.285Z" }, - { url = "https://files.pythonhosted.org/packages/1a/8a/0402ba61a2f16038b48b39bccca271134be00c5c9f0f623208399333c448/markupsafe-3.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4faffd047e07c38848ce017e8725090413cd80cbc23d86e55c587bf979e579c9", size = 15426, upload-time = "2025-09-27T18:37:27.316Z" }, - { url = "https://files.pythonhosted.org/packages/70/bc/6f1c2f612465f5fa89b95bead1f44dcb607670fd42891d8fdcd5d039f4f4/markupsafe-3.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:32001d6a8fc98c8cb5c947787c5d08b0a50663d139f1305bac5885d98d9b40fa", size = 14146, upload-time = "2025-09-27T18:37:28.327Z" }, ] [[package]] @@ -1942,20 +1747,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/c0/3d/8b94a481456dfc9dfe6e39e93b5ab376e50998cddfd23f4ae3b431708f16/matplotlib-3.10.8-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:0a33deb84c15ede243aead39f77e990469fff93ad1521163305095b77b72ce4a", size = 9614000, upload-time = "2025-12-10T22:56:05.411Z" }, { url = "https://files.pythonhosted.org/packages/bd/cd/bc06149fe5585ba800b189a6a654a75f1f127e8aab02fd2be10df7fa500c/matplotlib-3.10.8-cp313-cp313t-win_amd64.whl", hash = "sha256:3a48a78d2786784cc2413e57397981fb45c79e968d99656706018d6e62e57958", size = 8220043, upload-time = "2025-12-10T22:56:07.551Z" }, { url = "https://files.pythonhosted.org/packages/e3/de/b22cf255abec916562cc04eef457c13e58a1990048de0c0c3604d082355e/matplotlib-3.10.8-cp313-cp313t-win_arm64.whl", hash = "sha256:15d30132718972c2c074cd14638c7f4592bd98719e2308bccea40e0538bc0cb5", size = 8062075, upload-time = "2025-12-10T22:56:09.178Z" }, - { url = "https://files.pythonhosted.org/packages/3c/43/9c0ff7a2f11615e516c3b058e1e6e8f9614ddeca53faca06da267c48345d/matplotlib-3.10.8-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:b53285e65d4fa4c86399979e956235deb900be5baa7fc1218ea67fbfaeaadd6f", size = 8262481, upload-time = "2025-12-10T22:56:10.885Z" }, - { url = "https://files.pythonhosted.org/packages/6f/ca/e8ae28649fcdf039fda5ef554b40a95f50592a3c47e6f7270c9561c12b07/matplotlib-3.10.8-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:32f8dce744be5569bebe789e46727946041199030db8aeb2954d26013a0eb26b", size = 8151473, upload-time = "2025-12-10T22:56:12.377Z" }, - { url = "https://files.pythonhosted.org/packages/f1/6f/009d129ae70b75e88cbe7e503a12a4c0670e08ed748a902c2568909e9eb5/matplotlib-3.10.8-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4cf267add95b1c88300d96ca837833d4112756045364f5c734a2276038dae27d", size = 9553896, upload-time = "2025-12-10T22:56:14.432Z" }, - { url = "https://files.pythonhosted.org/packages/f5/26/4221a741eb97967bc1fd5e4c52b9aa5a91b2f4ec05b59f6def4d820f9df9/matplotlib-3.10.8-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2cf5bd12cecf46908f286d7838b2abc6c91cda506c0445b8223a7c19a00df008", size = 9824193, upload-time = "2025-12-10T22:56:16.29Z" }, - { url = "https://files.pythonhosted.org/packages/1f/f3/3abf75f38605772cf48a9daf5821cd4f563472f38b4b828c6fba6fa6d06e/matplotlib-3.10.8-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:41703cc95688f2516b480f7f339d8851a6035f18e100ee6a32bc0b8536a12a9c", size = 9615444, upload-time = "2025-12-10T22:56:18.155Z" }, - { url = "https://files.pythonhosted.org/packages/93/a5/de89ac80f10b8dc615807ee1133cd99ac74082581196d4d9590bea10690d/matplotlib-3.10.8-cp314-cp314-win_amd64.whl", hash = "sha256:83d282364ea9f3e52363da262ce32a09dfe241e4080dcedda3c0db059d3c1f11", size = 8272719, upload-time = "2025-12-10T22:56:20.366Z" }, - { url = "https://files.pythonhosted.org/packages/69/ce/b006495c19ccc0a137b48083168a37bd056392dee02f87dba0472f2797fe/matplotlib-3.10.8-cp314-cp314-win_arm64.whl", hash = "sha256:2c1998e92cd5999e295a731bcb2911c75f597d937341f3030cc24ef2733d78a8", size = 8144205, upload-time = "2025-12-10T22:56:22.239Z" }, - { url = "https://files.pythonhosted.org/packages/68/d9/b31116a3a855bd313c6fcdb7226926d59b041f26061c6c5b1be66a08c826/matplotlib-3.10.8-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:b5a2b97dbdc7d4f353ebf343744f1d1f1cca8aa8bfddb4262fcf4306c3761d50", size = 8305785, upload-time = "2025-12-10T22:56:24.218Z" }, - { url = "https://files.pythonhosted.org/packages/1e/90/6effe8103f0272685767ba5f094f453784057072f49b393e3ea178fe70a5/matplotlib-3.10.8-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:3f5c3e4da343bba819f0234186b9004faba952cc420fbc522dc4e103c1985908", size = 8198361, upload-time = "2025-12-10T22:56:26.787Z" }, - { url = "https://files.pythonhosted.org/packages/d7/65/a73188711bea603615fc0baecca1061429ac16940e2385433cc778a9d8e7/matplotlib-3.10.8-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5f62550b9a30afde8c1c3ae450e5eb547d579dd69b25c2fc7a1c67f934c1717a", size = 9561357, upload-time = "2025-12-10T22:56:28.953Z" }, - { url = "https://files.pythonhosted.org/packages/f4/3d/b5c5d5d5be8ce63292567f0e2c43dde9953d3ed86ac2de0a72e93c8f07a1/matplotlib-3.10.8-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:495672de149445ec1b772ff2c9ede9b769e3cb4f0d0aa7fa730d7f59e2d4e1c1", size = 9823610, upload-time = "2025-12-10T22:56:31.455Z" }, - { url = "https://files.pythonhosted.org/packages/4d/4b/e7beb6bbd49f6bae727a12b270a2654d13c397576d25bd6786e47033300f/matplotlib-3.10.8-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:595ba4d8fe983b88f0eec8c26a241e16d6376fe1979086232f481f8f3f67494c", size = 9614011, upload-time = "2025-12-10T22:56:33.85Z" }, - { url = "https://files.pythonhosted.org/packages/7c/e6/76f2813d31f032e65f6f797e3f2f6e4aab95b65015924b1c51370395c28a/matplotlib-3.10.8-cp314-cp314t-win_amd64.whl", hash = "sha256:25d380fe8b1dc32cf8f0b1b448470a77afb195438bafdf1d858bfb876f3edf7b", size = 8362801, upload-time = "2025-12-10T22:56:36.107Z" }, - { url = "https://files.pythonhosted.org/packages/5d/49/d651878698a0b67f23aa28e17f45a6d6dd3d3f933fa29087fa4ce5947b5a/matplotlib-3.10.8-cp314-cp314t-win_arm64.whl", hash = "sha256:113bb52413ea508ce954a02c10ffd0d565f9c3bc7f2eddc27dfe1731e71c7b5f", size = 8192560, upload-time = "2025-12-10T22:56:38.008Z" }, ] [[package]] @@ -2169,16 +1960,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/40/49/0f8c498a28c0efa5f5c95a9e374c83ec1385ca41d0e85e7cf40e5d519a21/ml_dtypes-0.5.4-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:531eff30e4d368cb6255bc2328d070e35836aa4f282a0fb5f3a0cd7260257298", size = 5366453, upload-time = "2025-11-17T22:32:07.115Z" }, { url = "https://files.pythonhosted.org/packages/8c/27/12607423d0a9c6bbbcc780ad19f1f6baa2b68b18ce4bddcdc122c4c68dc9/ml_dtypes-0.5.4-cp313-cp313t-win_amd64.whl", hash = "sha256:cb73dccfc991691c444acc8c0012bee8f2470da826a92e3a20bb333b1a7894e6", size = 225612, upload-time = "2025-11-17T22:32:08.615Z" }, { url = "https://files.pythonhosted.org/packages/e5/80/5a5929e92c72936d5b19872c5fb8fc09327c1da67b3b68c6a13139e77e20/ml_dtypes-0.5.4-cp313-cp313t-win_arm64.whl", hash = "sha256:3bbbe120b915090d9dd1375e4684dd17a20a2491ef25d640a908281da85e73f1", size = 164145, upload-time = "2025-11-17T22:32:09.782Z" }, - { url = "https://files.pythonhosted.org/packages/72/4e/1339dc6e2557a344f5ba5590872e80346f76f6cb2ac3dd16e4666e88818c/ml_dtypes-0.5.4-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:2b857d3af6ac0d39db1de7c706e69c7f9791627209c3d6dedbfca8c7e5faec22", size = 673781, upload-time = "2025-11-17T22:32:11.364Z" }, - { url = "https://files.pythonhosted.org/packages/04/f9/067b84365c7e83bda15bba2b06c6ca250ce27b20630b1128c435fb7a09aa/ml_dtypes-0.5.4-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:805cef3a38f4eafae3a5bf9ebdcdb741d0bcfd9e1bd90eb54abd24f928cd2465", size = 5036145, upload-time = "2025-11-17T22:32:12.783Z" }, - { url = "https://files.pythonhosted.org/packages/c6/bb/82c7dcf38070b46172a517e2334e665c5bf374a262f99a283ea454bece7c/ml_dtypes-0.5.4-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:14a4fd3228af936461db66faccef6e4f41c1d82fcc30e9f8d58a08916b1d811f", size = 5010230, upload-time = "2025-11-17T22:32:14.38Z" }, - { url = "https://files.pythonhosted.org/packages/e9/93/2bfed22d2498c468f6bcd0d9f56b033eaa19f33320389314c19ef6766413/ml_dtypes-0.5.4-cp314-cp314-win_amd64.whl", hash = "sha256:8c6a2dcebd6f3903e05d51960a8058d6e131fe69f952a5397e5dbabc841b6d56", size = 221032, upload-time = "2025-11-17T22:32:15.763Z" }, - { url = "https://files.pythonhosted.org/packages/76/a3/9c912fe6ea747bb10fe2f8f54d027eb265db05dfb0c6335e3e063e74e6e8/ml_dtypes-0.5.4-cp314-cp314-win_arm64.whl", hash = "sha256:5a0f68ca8fd8d16583dfa7793973feb86f2fbb56ce3966daf9c9f748f52a2049", size = 163353, upload-time = "2025-11-17T22:32:16.932Z" }, - { url = "https://files.pythonhosted.org/packages/cd/02/48aa7d84cc30ab4ee37624a2fd98c56c02326785750cd212bc0826c2f15b/ml_dtypes-0.5.4-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:bfc534409c5d4b0bf945af29e5d0ab075eae9eecbb549ff8a29280db822f34f9", size = 702085, upload-time = "2025-11-17T22:32:18.175Z" }, - { url = "https://files.pythonhosted.org/packages/5a/e7/85cb99fe80a7a5513253ec7faa88a65306be071163485e9a626fce1b6e84/ml_dtypes-0.5.4-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2314892cdc3fcf05e373d76d72aaa15fda9fb98625effa73c1d646f331fcecb7", size = 5355358, upload-time = "2025-11-17T22:32:19.7Z" }, - { url = "https://files.pythonhosted.org/packages/79/2b/a826ba18d2179a56e144aef69e57fb2ab7c464ef0b2111940ee8a3a223a2/ml_dtypes-0.5.4-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0d2ffd05a2575b1519dc928c0b93c06339eb67173ff53acb00724502cda231cf", size = 5366332, upload-time = "2025-11-17T22:32:21.193Z" }, - { url = "https://files.pythonhosted.org/packages/84/44/f4d18446eacb20ea11e82f133ea8f86e2bf2891785b67d9da8d0ab0ef525/ml_dtypes-0.5.4-cp314-cp314t-win_amd64.whl", hash = "sha256:4381fe2f2452a2d7589689693d3162e876b3ddb0a832cde7a414f8e1adf7eab1", size = 236612, upload-time = "2025-11-17T22:32:22.579Z" }, - { url = "https://files.pythonhosted.org/packages/ad/3f/3d42e9a78fe5edf792a83c074b13b9b770092a4fbf3462872f4303135f09/ml_dtypes-0.5.4-cp314-cp314t-win_arm64.whl", hash = "sha256:11942cbf2cf92157db91e5022633c0d9474d4dfd813a909383bd23ce828a4b7d", size = 168825, upload-time = "2025-11-17T22:32:23.766Z" }, ] [[package]] @@ -2205,24 +1986,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/67/32/f3cd1667028424fa7001d82e10ee35386eea1408b93d399b09fb0aa7875f/msgpack-1.1.2-cp313-cp313-win32.whl", hash = "sha256:a7787d353595c7c7e145e2331abf8b7ff1e6673a6b974ded96e6d4ec09f00c8c", size = 65037, upload-time = "2025-10-08T09:15:21.416Z" }, { url = "https://files.pythonhosted.org/packages/74/07/1ed8277f8653c40ebc65985180b007879f6a836c525b3885dcc6448ae6cb/msgpack-1.1.2-cp313-cp313-win_amd64.whl", hash = "sha256:a465f0dceb8e13a487e54c07d04ae3ba131c7c5b95e2612596eafde1dccf64a9", size = 72631, upload-time = "2025-10-08T09:15:22.431Z" }, { url = "https://files.pythonhosted.org/packages/e5/db/0314e4e2db56ebcf450f277904ffd84a7988b9e5da8d0d61ab2d057df2b6/msgpack-1.1.2-cp313-cp313-win_arm64.whl", hash = "sha256:e69b39f8c0aa5ec24b57737ebee40be647035158f14ed4b40e6f150077e21a84", size = 64118, upload-time = "2025-10-08T09:15:23.402Z" }, - { url = "https://files.pythonhosted.org/packages/22/71/201105712d0a2ff07b7873ed3c220292fb2ea5120603c00c4b634bcdafb3/msgpack-1.1.2-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:e23ce8d5f7aa6ea6d2a2b326b4ba46c985dbb204523759984430db7114f8aa00", size = 81127, upload-time = "2025-10-08T09:15:24.408Z" }, - { url = "https://files.pythonhosted.org/packages/1b/9f/38ff9e57a2eade7bf9dfee5eae17f39fc0e998658050279cbb14d97d36d9/msgpack-1.1.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:6c15b7d74c939ebe620dd8e559384be806204d73b4f9356320632d783d1f7939", size = 84981, upload-time = "2025-10-08T09:15:25.812Z" }, - { url = "https://files.pythonhosted.org/packages/8e/a9/3536e385167b88c2cc8f4424c49e28d49a6fc35206d4a8060f136e71f94c/msgpack-1.1.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:99e2cb7b9031568a2a5c73aa077180f93dd2e95b4f8d3b8e14a73ae94a9e667e", size = 411885, upload-time = "2025-10-08T09:15:27.22Z" }, - { url = "https://files.pythonhosted.org/packages/2f/40/dc34d1a8d5f1e51fc64640b62b191684da52ca469da9cd74e84936ffa4a6/msgpack-1.1.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:180759d89a057eab503cf62eeec0aa61c4ea1200dee709f3a8e9397dbb3b6931", size = 419658, upload-time = "2025-10-08T09:15:28.4Z" }, - { url = "https://files.pythonhosted.org/packages/3b/ef/2b92e286366500a09a67e03496ee8b8ba00562797a52f3c117aa2b29514b/msgpack-1.1.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:04fb995247a6e83830b62f0b07bf36540c213f6eac8e851166d8d86d83cbd014", size = 403290, upload-time = "2025-10-08T09:15:29.764Z" }, - { url = "https://files.pythonhosted.org/packages/78/90/e0ea7990abea5764e4655b8177aa7c63cdfa89945b6e7641055800f6c16b/msgpack-1.1.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:8e22ab046fa7ede9e36eeb4cfad44d46450f37bb05d5ec482b02868f451c95e2", size = 415234, upload-time = "2025-10-08T09:15:31.022Z" }, - { url = "https://files.pythonhosted.org/packages/72/4e/9390aed5db983a2310818cd7d3ec0aecad45e1f7007e0cda79c79507bb0d/msgpack-1.1.2-cp314-cp314-win32.whl", hash = "sha256:80a0ff7d4abf5fecb995fcf235d4064b9a9a8a40a3ab80999e6ac1e30b702717", size = 66391, upload-time = "2025-10-08T09:15:32.265Z" }, - { url = "https://files.pythonhosted.org/packages/6e/f1/abd09c2ae91228c5f3998dbd7f41353def9eac64253de3c8105efa2082f7/msgpack-1.1.2-cp314-cp314-win_amd64.whl", hash = "sha256:9ade919fac6a3e7260b7f64cea89df6bec59104987cbea34d34a2fa15d74310b", size = 73787, upload-time = "2025-10-08T09:15:33.219Z" }, - { url = "https://files.pythonhosted.org/packages/6a/b0/9d9f667ab48b16ad4115c1935d94023b82b3198064cb84a123e97f7466c1/msgpack-1.1.2-cp314-cp314-win_arm64.whl", hash = "sha256:59415c6076b1e30e563eb732e23b994a61c159cec44deaf584e5cc1dd662f2af", size = 66453, upload-time = "2025-10-08T09:15:34.225Z" }, - { url = "https://files.pythonhosted.org/packages/16/67/93f80545eb1792b61a217fa7f06d5e5cb9e0055bed867f43e2b8e012e137/msgpack-1.1.2-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:897c478140877e5307760b0ea66e0932738879e7aa68144d9b78ea4c8302a84a", size = 85264, upload-time = "2025-10-08T09:15:35.61Z" }, - { url = "https://files.pythonhosted.org/packages/87/1c/33c8a24959cf193966ef11a6f6a2995a65eb066bd681fd085afd519a57ce/msgpack-1.1.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:a668204fa43e6d02f89dbe79a30b0d67238d9ec4c5bd8a940fc3a004a47b721b", size = 89076, upload-time = "2025-10-08T09:15:36.619Z" }, - { url = "https://files.pythonhosted.org/packages/fc/6b/62e85ff7193663fbea5c0254ef32f0c77134b4059f8da89b958beb7696f3/msgpack-1.1.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5559d03930d3aa0f3aacb4c42c776af1a2ace2611871c84a75afe436695e6245", size = 435242, upload-time = "2025-10-08T09:15:37.647Z" }, - { url = "https://files.pythonhosted.org/packages/c1/47/5c74ecb4cc277cf09f64e913947871682ffa82b3b93c8dad68083112f412/msgpack-1.1.2-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:70c5a7a9fea7f036b716191c29047374c10721c389c21e9ffafad04df8c52c90", size = 432509, upload-time = "2025-10-08T09:15:38.794Z" }, - { url = "https://files.pythonhosted.org/packages/24/a4/e98ccdb56dc4e98c929a3f150de1799831c0a800583cde9fa022fa90602d/msgpack-1.1.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:f2cb069d8b981abc72b41aea1c580ce92d57c673ec61af4c500153a626cb9e20", size = 415957, upload-time = "2025-10-08T09:15:40.238Z" }, - { url = "https://files.pythonhosted.org/packages/da/28/6951f7fb67bc0a4e184a6b38ab71a92d9ba58080b27a77d3e2fb0be5998f/msgpack-1.1.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:d62ce1f483f355f61adb5433ebfd8868c5f078d1a52d042b0a998682b4fa8c27", size = 422910, upload-time = "2025-10-08T09:15:41.505Z" }, - { url = "https://files.pythonhosted.org/packages/f0/03/42106dcded51f0a0b5284d3ce30a671e7bd3f7318d122b2ead66ad289fed/msgpack-1.1.2-cp314-cp314t-win32.whl", hash = "sha256:1d1418482b1ee984625d88aa9585db570180c286d942da463533b238b98b812b", size = 75197, upload-time = "2025-10-08T09:15:42.954Z" }, - { url = "https://files.pythonhosted.org/packages/15/86/d0071e94987f8db59d4eeb386ddc64d0bb9b10820a8d82bcd3e53eeb2da6/msgpack-1.1.2-cp314-cp314t-win_amd64.whl", hash = "sha256:5a46bf7e831d09470ad92dff02b8b1ac92175ca36b087f904a0519857c6be3ff", size = 85772, upload-time = "2025-10-08T09:15:43.954Z" }, - { url = "https://files.pythonhosted.org/packages/81/f2/08ace4142eb281c12701fc3b93a10795e4d4dc7f753911d836675050f886/msgpack-1.1.2-cp314-cp314t-win_arm64.whl", hash = "sha256:d99ef64f349d5ec3293688e91486c5fdb925ed03807f64d98d205d2713c60b46", size = 70868, upload-time = "2025-10-08T09:15:44.959Z" }, ] [[package]] @@ -2258,12 +2021,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/d1/32/dd260d52babf67bad8e6770f8e1102021877ce0edea106e72df5626bb0ec/mypy-1.19.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c9a6538e0415310aad77cb94004ca6482330fece18036b5f360b62c45814c4ef", size = 13616252, upload-time = "2025-12-15T05:02:49.036Z" }, { url = "https://files.pythonhosted.org/packages/71/d0/5e60a9d2e3bd48432ae2b454b7ef2b62a960ab51292b1eda2a95edd78198/mypy-1.19.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:da4869fc5e7f62a88f3fe0b5c919d1d9f7ea3cef92d3689de2823fd27e40aa75", size = 13840848, upload-time = "2025-12-15T05:02:55.95Z" }, { url = "https://files.pythonhosted.org/packages/98/76/d32051fa65ecf6cc8c6610956473abdc9b4c43301107476ac03559507843/mypy-1.19.1-cp313-cp313-win_amd64.whl", hash = "sha256:016f2246209095e8eda7538944daa1d60e1e8134d98983b9fc1e92c1fc0cb8dd", size = 10135510, upload-time = "2025-12-15T05:02:58.438Z" }, - { url = "https://files.pythonhosted.org/packages/de/eb/b83e75f4c820c4247a58580ef86fcd35165028f191e7e1ba57128c52782d/mypy-1.19.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:06e6170bd5836770e8104c8fdd58e5e725cfeb309f0a6c681a811f557e97eac1", size = 13199744, upload-time = "2025-12-15T05:03:30.823Z" }, - { url = "https://files.pythonhosted.org/packages/94/28/52785ab7bfa165f87fcbb61547a93f98bb20e7f82f90f165a1f69bce7b3d/mypy-1.19.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:804bd67b8054a85447c8954215a906d6eff9cabeabe493fb6334b24f4bfff718", size = 12215815, upload-time = "2025-12-15T05:02:42.323Z" }, - { url = "https://files.pythonhosted.org/packages/0a/c6/bdd60774a0dbfb05122e3e925f2e9e846c009e479dcec4821dad881f5b52/mypy-1.19.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:21761006a7f497cb0d4de3d8ef4ca70532256688b0523eee02baf9eec895e27b", size = 12740047, upload-time = "2025-12-15T05:03:33.168Z" }, - { url = "https://files.pythonhosted.org/packages/32/2a/66ba933fe6c76bd40d1fe916a83f04fed253152f451a877520b3c4a5e41e/mypy-1.19.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:28902ee51f12e0f19e1e16fbe2f8f06b6637f482c459dd393efddd0ec7f82045", size = 13601998, upload-time = "2025-12-15T05:03:13.056Z" }, - { url = "https://files.pythonhosted.org/packages/e3/da/5055c63e377c5c2418760411fd6a63ee2b96cf95397259038756c042574f/mypy-1.19.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:481daf36a4c443332e2ae9c137dfee878fcea781a2e3f895d54bd3002a900957", size = 13807476, upload-time = "2025-12-15T05:03:17.977Z" }, - { url = "https://files.pythonhosted.org/packages/cd/09/4ebd873390a063176f06b0dbf1f7783dd87bd120eae7727fa4ae4179b685/mypy-1.19.1-cp314-cp314-win_amd64.whl", hash = "sha256:8bb5c6f6d043655e055be9b542aa5f3bdd30e4f3589163e85f93f3640060509f", size = 10281872, upload-time = "2025-12-15T05:03:05.549Z" }, { url = "https://files.pythonhosted.org/packages/8d/f4/4ce9a05ce5ded1de3ec1c1d96cf9f9504a04e54ce0ed55cfa38619a32b8d/mypy-1.19.1-py3-none-any.whl", hash = "sha256:f1235f5ea01b7db5468d53ece6aaddf1ad0b88d9e7462b86ef96fe04995d7247", size = 2471239, upload-time = "2025-12-15T05:03:07.248Z" }, ] @@ -2386,10 +2143,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/e9/6c/1e222edba1e20e6b113912caa9b1665b5809433cbcb042dfd133c6f1fd38/numba-0.63.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:53de693abe4be3bd4dee38e1c55f01c55ff644a6a3696a3670589e6e4c39cde2", size = 3809736, upload-time = "2025-12-10T02:57:25.836Z" }, { url = "https://files.pythonhosted.org/packages/76/0a/590bad11a8b3feeac30a24d01198d46bdb76ad15c70d3a530691ce3cae58/numba-0.63.1-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:81227821a72a763c3d4ac290abbb4371d855b59fdf85d5af22a47c0e86bf8c7e", size = 3508854, upload-time = "2025-12-10T02:57:27.438Z" }, { url = "https://files.pythonhosted.org/packages/4e/f5/3800384a24eed1e4d524669cdbc0b9b8a628800bb1e90d7bd676e5f22581/numba-0.63.1-cp313-cp313-win_amd64.whl", hash = "sha256:eb227b07c2ac37b09432a9bda5142047a2d1055646e089d4a240a2643e508102", size = 2750228, upload-time = "2025-12-10T02:57:30.36Z" }, - { url = "https://files.pythonhosted.org/packages/36/2f/53be2aa8a55ee2608ebe1231789cbb217f6ece7f5e1c685d2f0752e95a5b/numba-0.63.1-cp314-cp314-macosx_12_0_arm64.whl", hash = "sha256:f180883e5508940cc83de8a8bea37fc6dd20fbe4e5558d4659b8b9bef5ff4731", size = 2681153, upload-time = "2025-12-10T02:57:32.016Z" }, - { url = "https://files.pythonhosted.org/packages/13/91/53e59c86759a0648282368d42ba732c29524a745fd555ed1fb1df83febbe/numba-0.63.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f0938764afa82a47c0e895637a6c55547a42c9e1d35cac42285b1fa60a8b02bb", size = 3778718, upload-time = "2025-12-10T02:57:33.764Z" }, - { url = "https://files.pythonhosted.org/packages/6c/0c/2be19eba50b0b7636f6d1f69dfb2825530537708a234ba1ff34afc640138/numba-0.63.1-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f90a929fa5094e062d4e0368ede1f4497d5e40f800e80aa5222c4734236a2894", size = 3478712, upload-time = "2025-12-10T02:57:35.518Z" }, - { url = "https://files.pythonhosted.org/packages/0d/5f/4d0c9e756732577a52211f31da13a3d943d185f7fb90723f56d79c696caa/numba-0.63.1-cp314-cp314-win_amd64.whl", hash = "sha256:8d6d5ce85f572ed4e1a135dbb8c0114538f9dd0e3657eeb0bb64ab204cbe2a8f", size = 2752161, upload-time = "2025-12-10T02:57:37.12Z" }, ] [[package]] @@ -2431,28 +2184,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/80/e9/aff53abbdd41b0ecca94285f325aff42357c6b5abc482a3fcb4994290b18/numpy-2.3.5-cp313-cp313t-win32.whl", hash = "sha256:70b37199913c1bd300ff6e2693316c6f869c7ee16378faf10e4f5e3275b299c3", size = 6405940, upload-time = "2025-11-16T22:51:11.541Z" }, { url = "https://files.pythonhosted.org/packages/d5/81/50613fec9d4de5480de18d4f8ef59ad7e344d497edbef3cfd80f24f98461/numpy-2.3.5-cp313-cp313t-win_amd64.whl", hash = "sha256:b501b5fa195cc9e24fe102f21ec0a44dffc231d2af79950b451e0d99cea02234", size = 12920341, upload-time = "2025-11-16T22:51:14.312Z" }, { url = "https://files.pythonhosted.org/packages/bb/ab/08fd63b9a74303947f34f0bd7c5903b9c5532c2d287bead5bdf4c556c486/numpy-2.3.5-cp313-cp313t-win_arm64.whl", hash = "sha256:a80afd79f45f3c4a7d341f13acbe058d1ca8ac017c165d3fa0d3de6bc1a079d7", size = 10262507, upload-time = "2025-11-16T22:51:16.846Z" }, - { url = "https://files.pythonhosted.org/packages/ba/97/1a914559c19e32d6b2e233cf9a6a114e67c856d35b1d6babca571a3e880f/numpy-2.3.5-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:bf06bc2af43fa8d32d30fae16ad965663e966b1a3202ed407b84c989c3221e82", size = 16735706, upload-time = "2025-11-16T22:51:19.558Z" }, - { url = "https://files.pythonhosted.org/packages/57/d4/51233b1c1b13ecd796311216ae417796b88b0616cfd8a33ae4536330748a/numpy-2.3.5-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:052e8c42e0c49d2575621c158934920524f6c5da05a1d3b9bab5d8e259e045f0", size = 12264507, upload-time = "2025-11-16T22:51:22.492Z" }, - { url = "https://files.pythonhosted.org/packages/45/98/2fe46c5c2675b8306d0b4a3ec3494273e93e1226a490f766e84298576956/numpy-2.3.5-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:1ed1ec893cff7040a02c8aa1c8611b94d395590d553f6b53629a4461dc7f7b63", size = 5093049, upload-time = "2025-11-16T22:51:25.171Z" }, - { url = "https://files.pythonhosted.org/packages/ce/0e/0698378989bb0ac5f1660c81c78ab1fe5476c1a521ca9ee9d0710ce54099/numpy-2.3.5-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:2dcd0808a421a482a080f89859a18beb0b3d1e905b81e617a188bd80422d62e9", size = 6626603, upload-time = "2025-11-16T22:51:27Z" }, - { url = "https://files.pythonhosted.org/packages/5e/a6/9ca0eecc489640615642a6cbc0ca9e10df70df38c4d43f5a928ff18d8827/numpy-2.3.5-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:727fd05b57df37dc0bcf1a27767a3d9a78cbbc92822445f32cc3436ba797337b", size = 14262696, upload-time = "2025-11-16T22:51:29.402Z" }, - { url = "https://files.pythonhosted.org/packages/c8/f6/07ec185b90ec9d7217a00eeeed7383b73d7e709dae2a9a021b051542a708/numpy-2.3.5-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fffe29a1ef00883599d1dc2c51aa2e5d80afe49523c261a74933df395c15c520", size = 16597350, upload-time = "2025-11-16T22:51:32.167Z" }, - { url = "https://files.pythonhosted.org/packages/75/37/164071d1dde6a1a84c9b8e5b414fa127981bad47adf3a6b7e23917e52190/numpy-2.3.5-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:8f7f0e05112916223d3f438f293abf0727e1181b5983f413dfa2fefc4098245c", size = 16040190, upload-time = "2025-11-16T22:51:35.403Z" }, - { url = "https://files.pythonhosted.org/packages/08/3c/f18b82a406b04859eb026d204e4e1773eb41c5be58410f41ffa511d114ae/numpy-2.3.5-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:2e2eb32ddb9ccb817d620ac1d8dae7c3f641c1e5f55f531a33e8ab97960a75b8", size = 18536749, upload-time = "2025-11-16T22:51:39.698Z" }, - { url = "https://files.pythonhosted.org/packages/40/79/f82f572bf44cf0023a2fe8588768e23e1592585020d638999f15158609e1/numpy-2.3.5-cp314-cp314-win32.whl", hash = "sha256:66f85ce62c70b843bab1fb14a05d5737741e74e28c7b8b5a064de10142fad248", size = 6335432, upload-time = "2025-11-16T22:51:42.476Z" }, - { url = "https://files.pythonhosted.org/packages/a3/2e/235b4d96619931192c91660805e5e49242389742a7a82c27665021db690c/numpy-2.3.5-cp314-cp314-win_amd64.whl", hash = "sha256:e6a0bc88393d65807d751a614207b7129a310ca4fe76a74e5c7da5fa5671417e", size = 12919388, upload-time = "2025-11-16T22:51:45.275Z" }, - { url = "https://files.pythonhosted.org/packages/07/2b/29fd75ce45d22a39c61aad74f3d718e7ab67ccf839ca8b60866054eb15f8/numpy-2.3.5-cp314-cp314-win_arm64.whl", hash = "sha256:aeffcab3d4b43712bb7a60b65f6044d444e75e563ff6180af8f98dd4b905dfd2", size = 10476651, upload-time = "2025-11-16T22:51:47.749Z" }, - { url = "https://files.pythonhosted.org/packages/17/e1/f6a721234ebd4d87084cfa68d081bcba2f5cfe1974f7de4e0e8b9b2a2ba1/numpy-2.3.5-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:17531366a2e3a9e30762c000f2c43a9aaa05728712e25c11ce1dbe700c53ad41", size = 16834503, upload-time = "2025-11-16T22:51:50.443Z" }, - { url = "https://files.pythonhosted.org/packages/5c/1c/baf7ffdc3af9c356e1c135e57ab7cf8d247931b9554f55c467efe2c69eff/numpy-2.3.5-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:d21644de1b609825ede2f48be98dfde4656aefc713654eeee280e37cadc4e0ad", size = 12381612, upload-time = "2025-11-16T22:51:53.609Z" }, - { url = "https://files.pythonhosted.org/packages/74/91/f7f0295151407ddc9ba34e699013c32c3c91944f9b35fcf9281163dc1468/numpy-2.3.5-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:c804e3a5aba5460c73955c955bdbd5c08c354954e9270a2c1565f62e866bdc39", size = 5210042, upload-time = "2025-11-16T22:51:56.213Z" }, - { url = "https://files.pythonhosted.org/packages/2e/3b/78aebf345104ec50dd50a4d06ddeb46a9ff5261c33bcc58b1c4f12f85ec2/numpy-2.3.5-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:cc0a57f895b96ec78969c34f682c602bf8da1a0270b09bc65673df2e7638ec20", size = 6724502, upload-time = "2025-11-16T22:51:58.584Z" }, - { url = "https://files.pythonhosted.org/packages/02/c6/7c34b528740512e57ef1b7c8337ab0b4f0bddf34c723b8996c675bc2bc91/numpy-2.3.5-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:900218e456384ea676e24ea6a0417f030a3b07306d29d7ad843957b40a9d8d52", size = 14308962, upload-time = "2025-11-16T22:52:01.698Z" }, - { url = "https://files.pythonhosted.org/packages/80/35/09d433c5262bc32d725bafc619e095b6a6651caf94027a03da624146f655/numpy-2.3.5-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:09a1bea522b25109bf8e6f3027bd810f7c1085c64a0c7ce050c1676ad0ba010b", size = 16655054, upload-time = "2025-11-16T22:52:04.267Z" }, - { url = "https://files.pythonhosted.org/packages/7a/ab/6a7b259703c09a88804fa2430b43d6457b692378f6b74b356155283566ac/numpy-2.3.5-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:04822c00b5fd0323c8166d66c701dc31b7fbd252c100acd708c48f763968d6a3", size = 16091613, upload-time = "2025-11-16T22:52:08.651Z" }, - { url = "https://files.pythonhosted.org/packages/c2/88/330da2071e8771e60d1038166ff9d73f29da37b01ec3eb43cb1427464e10/numpy-2.3.5-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:d6889ec4ec662a1a37eb4b4fb26b6100841804dac55bd9df579e326cdc146227", size = 18591147, upload-time = "2025-11-16T22:52:11.453Z" }, - { url = "https://files.pythonhosted.org/packages/51/41/851c4b4082402d9ea860c3626db5d5df47164a712cb23b54be028b184c1c/numpy-2.3.5-cp314-cp314t-win32.whl", hash = "sha256:93eebbcf1aafdf7e2ddd44c2923e2672e1010bddc014138b229e49725b4d6be5", size = 6479806, upload-time = "2025-11-16T22:52:14.641Z" }, - { url = "https://files.pythonhosted.org/packages/90/30/d48bde1dfd93332fa557cff1972fbc039e055a52021fbef4c2c4b1eefd17/numpy-2.3.5-cp314-cp314t-win_amd64.whl", hash = "sha256:c8a9958e88b65c3b27e22ca2a076311636850b612d6bbfb76e8d156aacde2aaf", size = 13105760, upload-time = "2025-11-16T22:52:17.975Z" }, - { url = "https://files.pythonhosted.org/packages/2d/fd/4b5eb0b3e888d86aee4d198c23acec7d214baaf17ea93c1adec94c9518b9/numpy-2.3.5-cp314-cp314t-win_arm64.whl", hash = "sha256:6203fdf9f3dc5bdaed7319ad8698e685c7a3be10819f41d32a0723e611733b42", size = 10545459, upload-time = "2025-11-16T22:52:20.55Z" }, ] [[package]] @@ -2545,6 +2276,22 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/3a/85/41280ea5d6aa58d8033b2ac6ef70849dcbe37910b34b52c6195efb06ef9e/orbax_checkpoint-0.11.33-py3-none-any.whl", hash = "sha256:b8b6c40fe307d55c490c37852fcdc7ed86435613f40ff3887298454f667b58f1", size = 696815, upload-time = "2026-02-18T04:22:28.935Z" }, ] +[[package]] +name = "ott-jax" +version = "0.6.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "jax" }, + { name = "jaxopt" }, + { name = "lineax" }, + { name = "numpy" }, + { name = "optax" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/8a/46/a45f351fcfaa456a42bc318d7ee8641ff4cef758aace295ae4a27459ac3a/ott_jax-0.6.0.tar.gz", hash = "sha256:86fda8aea68a6c29c989b1be2fc8bc7e5344e6353d3e486a3edbc36364b07483", size = 233876, upload-time = "2025-11-04T18:09:27.942Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/46/78/0f66915250058498915b3944ac7eccb0da5ce1f5984664fbb6a448cf73db/ott_jax-0.6.0-py3-none-any.whl", hash = "sha256:89d7ee73ae105a56385b66a43e9acd5ae070e66d991efc56047ab47cc756f3e6", size = 309666, upload-time = "2025-11-04T18:09:26.097Z" }, +] + [[package]] name = "packaging" version = "26.0" @@ -2597,22 +2344,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/a2/61/772b2e2757855e232b7ccf7cb8079a5711becb3a97f291c953def15a833f/pandas-3.0.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6bf0603c2e30e2cafac32807b06435f28741135cb8697eae8b28c7d492fc7d76", size = 11334191, upload-time = "2026-02-17T22:19:29.411Z" }, { url = "https://files.pythonhosted.org/packages/1b/08/b16c6df3ef555d8495d1d265a7963b65be166785d28f06a350913a4fac78/pandas-3.0.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:6c426422973973cae1f4a23e51d4ae85974f44871b24844e4f7de752dd877098", size = 11782256, upload-time = "2026-02-17T22:19:32.34Z" }, { url = "https://files.pythonhosted.org/packages/55/80/178af0594890dee17e239fca96d3d8670ba0f5ff59b7d0439850924a9c09/pandas-3.0.1-cp313-cp313t-win_amd64.whl", hash = "sha256:b03f91ae8c10a85c1613102c7bef5229b5379f343030a3ccefeca8a33414cf35", size = 10485047, upload-time = "2026-02-17T22:19:34.605Z" }, - { url = "https://files.pythonhosted.org/packages/bb/8b/4bb774a998b97e6c2fd62a9e6cfdaae133b636fd1c468f92afb4ae9a447a/pandas-3.0.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:99d0f92ed92d3083d140bf6b97774f9f13863924cf3f52a70711f4e7588f9d0a", size = 10322465, upload-time = "2026-02-17T22:19:36.803Z" }, - { url = "https://files.pythonhosted.org/packages/72/3a/5b39b51c64159f470f1ca3b1c2a87da290657ca022f7cd11442606f607d1/pandas-3.0.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:3b66857e983208654294bb6477b8a63dee26b37bdd0eb34d010556e91261784f", size = 9910632, upload-time = "2026-02-17T22:19:39.001Z" }, - { url = "https://files.pythonhosted.org/packages/4e/f7/b449ffb3f68c11da12fc06fbf6d2fa3a41c41e17d0284d23a79e1c13a7e4/pandas-3.0.1-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:56cf59638bf24dc9bdf2154c81e248b3289f9a09a6d04e63608c159022352749", size = 10440535, upload-time = "2026-02-17T22:19:41.157Z" }, - { url = "https://files.pythonhosted.org/packages/55/77/6ea82043db22cb0f2bbfe7198da3544000ddaadb12d26be36e19b03a2dc5/pandas-3.0.1-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c1a9f55e0f46951874b863d1f3906dcb57df2d9be5c5847ba4dfb55b2c815249", size = 10893940, upload-time = "2026-02-17T22:19:43.493Z" }, - { url = "https://files.pythonhosted.org/packages/03/30/f1b502a72468c89412c1b882a08f6eed8a4ee9dc033f35f65d0663df6081/pandas-3.0.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:1849f0bba9c8a2fb0f691d492b834cc8dadf617e29015c66e989448d58d011ee", size = 11442711, upload-time = "2026-02-17T22:19:46.074Z" }, - { url = "https://files.pythonhosted.org/packages/0d/f0/ebb6ddd8fc049e98cabac5c2924d14d1dda26a20adb70d41ea2e428d3ec4/pandas-3.0.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:c3d288439e11b5325b02ae6e9cc83e6805a62c40c5a6220bea9beb899c073b1c", size = 11963918, upload-time = "2026-02-17T22:19:48.838Z" }, - { url = "https://files.pythonhosted.org/packages/09/f8/8ce132104074f977f907442790eaae24e27bce3b3b454e82faa3237ff098/pandas-3.0.1-cp314-cp314-win_amd64.whl", hash = "sha256:93325b0fe372d192965f4cca88d97667f49557398bbf94abdda3bf1b591dbe66", size = 9862099, upload-time = "2026-02-17T22:19:51.081Z" }, - { url = "https://files.pythonhosted.org/packages/e6/b7/6af9aac41ef2456b768ef0ae60acf8abcebb450a52043d030a65b4b7c9bd/pandas-3.0.1-cp314-cp314-win_arm64.whl", hash = "sha256:97ca08674e3287c7148f4858b01136f8bdfe7202ad25ad04fec602dd1d29d132", size = 9185333, upload-time = "2026-02-17T22:19:53.266Z" }, - { url = "https://files.pythonhosted.org/packages/66/fc/848bb6710bc6061cb0c5badd65b92ff75c81302e0e31e496d00029fe4953/pandas-3.0.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:58eeb1b2e0fb322befcf2bbc9ba0af41e616abadb3d3414a6bc7167f6cbfce32", size = 10772664, upload-time = "2026-02-17T22:19:55.806Z" }, - { url = "https://files.pythonhosted.org/packages/69/5c/866a9bbd0f79263b4b0db6ec1a341be13a1473323f05c122388e0f15b21d/pandas-3.0.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:cd9af1276b5ca9e298bd79a26bda32fa9cc87ed095b2a9a60978d2ca058eaf87", size = 10421286, upload-time = "2026-02-17T22:19:58.091Z" }, - { url = "https://files.pythonhosted.org/packages/51/a4/2058fb84fb1cfbfb2d4a6d485e1940bb4ad5716e539d779852494479c580/pandas-3.0.1-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:94f87a04984d6b63788327cd9f79dda62b7f9043909d2440ceccf709249ca988", size = 10342050, upload-time = "2026-02-17T22:20:01.376Z" }, - { url = "https://files.pythonhosted.org/packages/22/1b/674e89996cc4be74db3c4eb09240c4bb549865c9c3f5d9b086ff8fcfbf00/pandas-3.0.1-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:85fe4c4df62e1e20f9db6ebfb88c844b092c22cd5324bdcf94bfa2fc1b391221", size = 10740055, upload-time = "2026-02-17T22:20:04.328Z" }, - { url = "https://files.pythonhosted.org/packages/d0/f8/e954b750764298c22fa4614376531fe63c521ef517e7059a51f062b87dca/pandas-3.0.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:331ca75a2f8672c365ae25c0b29e46f5ac0c6551fdace8eec4cd65e4fac271ff", size = 11357632, upload-time = "2026-02-17T22:20:06.647Z" }, - { url = "https://files.pythonhosted.org/packages/6d/02/c6e04b694ffd68568297abd03588b6d30295265176a5c01b7459d3bc35a3/pandas-3.0.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:15860b1fdb1973fffade772fdb931ccf9b2f400a3f5665aef94a00445d7d8dd5", size = 11810974, upload-time = "2026-02-17T22:20:08.946Z" }, - { url = "https://files.pythonhosted.org/packages/89/41/d7dfb63d2407f12055215070c42fc6ac41b66e90a2946cdc5e759058398b/pandas-3.0.1-cp314-cp314t-win_amd64.whl", hash = "sha256:44f1364411d5670efa692b146c748f4ed013df91ee91e9bec5677fb1fd58b937", size = 10884622, upload-time = "2026-02-17T22:20:11.711Z" }, - { url = "https://files.pythonhosted.org/packages/68/b0/34937815889fa982613775e4b97fddd13250f11012d769949c5465af2150/pandas-3.0.1-cp314-cp314t-win_arm64.whl", hash = "sha256:108dd1790337a494aa80e38def654ca3f0968cf4f362c85f44c15e471667102d", size = 9452085, upload-time = "2026-02-17T22:20:14.331Z" }, ] [[package]] @@ -2654,6 +2385,16 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/9e/c3/059298687310d527a58bb01f3b1965787ee3b40dce76752eda8b44e9a2c5/pexpect-4.9.0-py2.py3-none-any.whl", hash = "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523", size = 63772, upload-time = "2023-11-25T06:56:14.81Z" }, ] +[[package]] +name = "pfjax" +version = "0.0.3rc1" +source = { git = "https://github.com/DanWaxman/pfjax.git?rev=dw-sg-dpf#99ceb4ac7d4035bc3a97710e33f7ca883377d094" } +dependencies = [ + { name = "jax" }, + { name = "jaxlib" }, + { name = "ott-jax" }, +] + [[package]] name = "pillow" version = "12.1.1" @@ -2696,31 +2437,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/83/43/6f732ff85743cf746b1361b91665d9f5155e1483817f693f8d57ea93147f/pillow-12.1.1-cp313-cp313t-win32.whl", hash = "sha256:44ce27545b6efcf0fdbdceb31c9a5bdea9333e664cda58a7e674bb74608b3986", size = 6336441, upload-time = "2026-02-11T04:21:48.22Z" }, { url = "https://files.pythonhosted.org/packages/3b/44/e865ef3986611bb75bfabdf94a590016ea327833f434558801122979cd0e/pillow-12.1.1-cp313-cp313t-win_amd64.whl", hash = "sha256:a285e3eb7a5a45a2ff504e31f4a8d1b12ef62e84e5411c6804a42197c1cf586c", size = 7045383, upload-time = "2026-02-11T04:21:50.015Z" }, { url = "https://files.pythonhosted.org/packages/a8/c6/f4fb24268d0c6908b9f04143697ea18b0379490cb74ba9e8d41b898bd005/pillow-12.1.1-cp313-cp313t-win_arm64.whl", hash = "sha256:cc7d296b5ea4d29e6570dabeaed58d31c3fea35a633a69679fb03d7664f43fb3", size = 2456104, upload-time = "2026-02-11T04:21:51.633Z" }, - { url = "https://files.pythonhosted.org/packages/03/d0/bebb3ffbf31c5a8e97241476c4cf8b9828954693ce6744b4a2326af3e16b/pillow-12.1.1-cp314-cp314-ios_13_0_arm64_iphoneos.whl", hash = "sha256:417423db963cb4be8bac3fc1204fe61610f6abeed1580a7a2cbb2fbda20f12af", size = 4062652, upload-time = "2026-02-11T04:21:53.19Z" }, - { url = "https://files.pythonhosted.org/packages/2d/c0/0e16fb0addda4851445c28f8350d8c512f09de27bbb0d6d0bbf8b6709605/pillow-12.1.1-cp314-cp314-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:b957b71c6b2387610f556a7eb0828afbe40b4a98036fc0d2acfa5a44a0c2036f", size = 4138823, upload-time = "2026-02-11T04:22:03.088Z" }, - { url = "https://files.pythonhosted.org/packages/6b/fb/6170ec655d6f6bb6630a013dd7cf7bc218423d7b5fa9071bf63dc32175ae/pillow-12.1.1-cp314-cp314-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:097690ba1f2efdeb165a20469d59d8bb03c55fb6621eb2041a060ae8ea3e9642", size = 3601143, upload-time = "2026-02-11T04:22:04.909Z" }, - { url = "https://files.pythonhosted.org/packages/59/04/dc5c3f297510ba9a6837cbb318b87dd2b8f73eb41a43cc63767f65cb599c/pillow-12.1.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:2815a87ab27848db0321fb78c7f0b2c8649dee134b7f2b80c6a45c6831d75ccd", size = 5266254, upload-time = "2026-02-11T04:22:07.656Z" }, - { url = "https://files.pythonhosted.org/packages/05/30/5db1236b0d6313f03ebf97f5e17cda9ca060f524b2fcc875149a8360b21c/pillow-12.1.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:f7ed2c6543bad5a7d5530eb9e78c53132f93dfa44a28492db88b41cdab885202", size = 4657499, upload-time = "2026-02-11T04:22:09.613Z" }, - { url = "https://files.pythonhosted.org/packages/6f/18/008d2ca0eb612e81968e8be0bbae5051efba24d52debf930126d7eaacbba/pillow-12.1.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:652a2c9ccfb556235b2b501a3a7cf3742148cd22e04b5625c5fe057ea3e3191f", size = 6232137, upload-time = "2026-02-11T04:22:11.434Z" }, - { url = "https://files.pythonhosted.org/packages/70/f1/f14d5b8eeb4b2cd62b9f9f847eb6605f103df89ef619ac68f92f748614ea/pillow-12.1.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d6e4571eedf43af33d0fc233a382a76e849badbccdf1ac438841308652a08e1f", size = 8042721, upload-time = "2026-02-11T04:22:13.321Z" }, - { url = "https://files.pythonhosted.org/packages/5a/d6/17824509146e4babbdabf04d8171491fa9d776f7061ff6e727522df9bd03/pillow-12.1.1-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b574c51cf7d5d62e9be37ba446224b59a2da26dc4c1bb2ecbe936a4fb1a7cb7f", size = 6347798, upload-time = "2026-02-11T04:22:15.449Z" }, - { url = "https://files.pythonhosted.org/packages/d1/ee/c85a38a9ab92037a75615aba572c85ea51e605265036e00c5b67dfafbfe2/pillow-12.1.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a37691702ed687799de29a518d63d4682d9016932db66d4e90c345831b02fb4e", size = 7039315, upload-time = "2026-02-11T04:22:17.24Z" }, - { url = "https://files.pythonhosted.org/packages/ec/f3/bc8ccc6e08a148290d7523bde4d9a0d6c981db34631390dc6e6ec34cacf6/pillow-12.1.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:f95c00d5d6700b2b890479664a06e754974848afaae5e21beb4d83c106923fd0", size = 6462360, upload-time = "2026-02-11T04:22:19.111Z" }, - { url = "https://files.pythonhosted.org/packages/f6/ab/69a42656adb1d0665ab051eec58a41f169ad295cf81ad45406963105408f/pillow-12.1.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:559b38da23606e68681337ad74622c4dbba02254fc9cb4488a305dd5975c7eeb", size = 7165438, upload-time = "2026-02-11T04:22:21.041Z" }, - { url = "https://files.pythonhosted.org/packages/02/46/81f7aa8941873f0f01d4b55cc543b0a3d03ec2ee30d617a0448bf6bd6dec/pillow-12.1.1-cp314-cp314-win32.whl", hash = "sha256:03edcc34d688572014ff223c125a3f77fb08091e4607e7745002fc214070b35f", size = 6431503, upload-time = "2026-02-11T04:22:22.833Z" }, - { url = "https://files.pythonhosted.org/packages/40/72/4c245f7d1044b67affc7f134a09ea619d4895333d35322b775b928180044/pillow-12.1.1-cp314-cp314-win_amd64.whl", hash = "sha256:50480dcd74fa63b8e78235957d302d98d98d82ccbfac4c7e12108ba9ecbdba15", size = 7176748, upload-time = "2026-02-11T04:22:24.64Z" }, - { url = "https://files.pythonhosted.org/packages/e4/ad/8a87bdbe038c5c698736e3348af5c2194ffb872ea52f11894c95f9305435/pillow-12.1.1-cp314-cp314-win_arm64.whl", hash = "sha256:5cb1785d97b0c3d1d1a16bc1d710c4a0049daefc4935f3a8f31f827f4d3d2e7f", size = 2544314, upload-time = "2026-02-11T04:22:26.685Z" }, - { url = "https://files.pythonhosted.org/packages/6c/9d/efd18493f9de13b87ede7c47e69184b9e859e4427225ea962e32e56a49bc/pillow-12.1.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:1f90cff8aa76835cba5769f0b3121a22bd4eb9e6884cfe338216e557a9a548b8", size = 5268612, upload-time = "2026-02-11T04:22:29.884Z" }, - { url = "https://files.pythonhosted.org/packages/f8/f1/4f42eb2b388eb2ffc660dcb7f7b556c1015c53ebd5f7f754965ef997585b/pillow-12.1.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:1f1be78ce9466a7ee64bfda57bdba0f7cc499d9794d518b854816c41bf0aa4e9", size = 4660567, upload-time = "2026-02-11T04:22:31.799Z" }, - { url = "https://files.pythonhosted.org/packages/01/54/df6ef130fa43e4b82e32624a7b821a2be1c5653a5fdad8469687a7db4e00/pillow-12.1.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:42fc1f4677106188ad9a55562bbade416f8b55456f522430fadab3cef7cd4e60", size = 6269951, upload-time = "2026-02-11T04:22:33.921Z" }, - { url = "https://files.pythonhosted.org/packages/a9/48/618752d06cc44bb4aae8ce0cd4e6426871929ed7b46215638088270d9b34/pillow-12.1.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:98edb152429ab62a1818039744d8fbb3ccab98a7c29fc3d5fcef158f3f1f68b7", size = 8074769, upload-time = "2026-02-11T04:22:35.877Z" }, - { url = "https://files.pythonhosted.org/packages/c3/bd/f1d71eb39a72fa088d938655afba3e00b38018d052752f435838961127d8/pillow-12.1.1-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d470ab1178551dd17fdba0fef463359c41aaa613cdcd7ff8373f54be629f9f8f", size = 6381358, upload-time = "2026-02-11T04:22:37.698Z" }, - { url = "https://files.pythonhosted.org/packages/64/ef/c784e20b96674ed36a5af839305f55616f8b4f8aa8eeccf8531a6e312243/pillow-12.1.1-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6408a7b064595afcab0a49393a413732a35788f2a5092fdc6266952ed67de586", size = 7068558, upload-time = "2026-02-11T04:22:39.597Z" }, - { url = "https://files.pythonhosted.org/packages/73/cb/8059688b74422ae61278202c4e1ad992e8a2e7375227be0a21c6b87ca8d5/pillow-12.1.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:5d8c41325b382c07799a3682c1c258469ea2ff97103c53717b7893862d0c98ce", size = 6493028, upload-time = "2026-02-11T04:22:42.73Z" }, - { url = "https://files.pythonhosted.org/packages/c6/da/e3c008ed7d2dd1f905b15949325934510b9d1931e5df999bb15972756818/pillow-12.1.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:c7697918b5be27424e9ce568193efd13d925c4481dd364e43f5dff72d33e10f8", size = 7191940, upload-time = "2026-02-11T04:22:44.543Z" }, - { url = "https://files.pythonhosted.org/packages/01/4a/9202e8d11714c1fc5951f2e1ef362f2d7fbc595e1f6717971d5dd750e969/pillow-12.1.1-cp314-cp314t-win32.whl", hash = "sha256:d2912fd8114fc5545aa3a4b5576512f64c55a03f3ebcca4c10194d593d43ea36", size = 6438736, upload-time = "2026-02-11T04:22:46.347Z" }, - { url = "https://files.pythonhosted.org/packages/f3/ca/cbce2327eb9885476b3957b2e82eb12c866a8b16ad77392864ad601022ce/pillow-12.1.1-cp314-cp314t-win_amd64.whl", hash = "sha256:4ceb838d4bd9dab43e06c363cab2eebf63846d6a4aeaea283bbdfd8f1a8ed58b", size = 7182894, upload-time = "2026-02-11T04:22:48.114Z" }, - { url = "https://files.pythonhosted.org/packages/ec/d2/de599c95ba0a973b94410477f8bf0b6f0b5e67360eb89bcb1ad365258beb/pillow-12.1.1-cp314-cp314t-win_arm64.whl", hash = "sha256:7b03048319bfc6170e93bd60728a1af51d3dd7704935feb228c4d4faab35d334", size = 2546446, upload-time = "2026-02-11T04:22:50.342Z" }, ] [[package]] @@ -2789,12 +2505,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/b8/b5/9182c9af3836cca61696dabe4fd1304e17bc56cb62f17439e1154f225dd3/psutil-7.2.2-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:917e891983ca3c1887b4ef36447b1e0873e70c933afc831c6b6da078ba474312", size = 184062, upload-time = "2026-01-28T18:15:04.436Z" }, { url = "https://files.pythonhosted.org/packages/16/ba/0756dca669f5a9300d0cbcbfae9a4c30e446dfc7440ffe43ded5724bfd93/psutil-7.2.2-cp313-cp313t-win_amd64.whl", hash = "sha256:ab486563df44c17f5173621c7b198955bd6b613fb87c71c161f827d3fb149a9b", size = 139893, upload-time = "2026-01-28T18:15:06.378Z" }, { url = "https://files.pythonhosted.org/packages/1c/61/8fa0e26f33623b49949346de05ec1ddaad02ed8ba64af45f40a147dbfa97/psutil-7.2.2-cp313-cp313t-win_arm64.whl", hash = "sha256:ae0aefdd8796a7737eccea863f80f81e468a1e4cf14d926bd9b6f5f2d5f90ca9", size = 135589, upload-time = "2026-01-28T18:15:08.03Z" }, - { url = "https://files.pythonhosted.org/packages/81/69/ef179ab5ca24f32acc1dac0c247fd6a13b501fd5534dbae0e05a1c48b66d/psutil-7.2.2-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:eed63d3b4d62449571547b60578c5b2c4bcccc5387148db46e0c2313dad0ee00", size = 130664, upload-time = "2026-01-28T18:15:09.469Z" }, - { url = "https://files.pythonhosted.org/packages/7b/64/665248b557a236d3fa9efc378d60d95ef56dd0a490c2cd37dafc7660d4a9/psutil-7.2.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7b6d09433a10592ce39b13d7be5a54fbac1d1228ed29abc880fb23df7cb694c9", size = 131087, upload-time = "2026-01-28T18:15:11.724Z" }, - { url = "https://files.pythonhosted.org/packages/d5/2e/e6782744700d6759ebce3043dcfa661fb61e2fb752b91cdeae9af12c2178/psutil-7.2.2-cp314-cp314t-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1fa4ecf83bcdf6e6c8f4449aff98eefb5d0604bf88cb883d7da3d8d2d909546a", size = 182383, upload-time = "2026-01-28T18:15:13.445Z" }, - { url = "https://files.pythonhosted.org/packages/57/49/0a41cefd10cb7505cdc04dab3eacf24c0c2cb158a998b8c7b1d27ee2c1f5/psutil-7.2.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e452c464a02e7dc7822a05d25db4cde564444a67e58539a00f929c51eddda0cf", size = 185210, upload-time = "2026-01-28T18:15:16.002Z" }, - { url = "https://files.pythonhosted.org/packages/dd/2c/ff9bfb544f283ba5f83ba725a3c5fec6d6b10b8f27ac1dc641c473dc390d/psutil-7.2.2-cp314-cp314t-win_amd64.whl", hash = "sha256:c7663d4e37f13e884d13994247449e9f8f574bc4655d509c3b95e9ec9e2b9dc1", size = 141228, upload-time = "2026-01-28T18:15:18.385Z" }, - { url = "https://files.pythonhosted.org/packages/f2/fc/f8d9c31db14fcec13748d373e668bc3bed94d9077dbc17fb0eebc073233c/psutil-7.2.2-cp314-cp314t-win_arm64.whl", hash = "sha256:11fe5a4f613759764e79c65cf11ebdf26e33d6dd34336f8a337aa2996d71c841", size = 136284, upload-time = "2026-01-28T18:15:19.912Z" }, { url = "https://files.pythonhosted.org/packages/e7/36/5ee6e05c9bd427237b11b3937ad82bb8ad2752d72c6969314590dd0c2f6e/psutil-7.2.2-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:ed0cace939114f62738d808fdcecd4c869222507e266e574799e9c0faa17d486", size = 129090, upload-time = "2026-01-28T18:15:22.168Z" }, { url = "https://files.pythonhosted.org/packages/80/c4/f5af4c1ca8c1eeb2e92ccca14ce8effdeec651d5ab6053c589b074eda6e1/psutil-7.2.2-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:1a7b04c10f32cc88ab39cbf606e117fd74721c831c98a27dc04578deb0c16979", size = 129859, upload-time = "2026-01-28T18:15:23.795Z" }, { url = "https://files.pythonhosted.org/packages/b5/70/5d8df3b09e25bce090399cf48e452d25c935ab72dad19406c77f4e828045/psutil-7.2.2-cp36-abi3-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:076a2d2f923fd4821644f5ba89f059523da90dc9014e85f8e45a5774ca5bc6f9", size = 155560, upload-time = "2026-01-28T18:15:25.976Z" }, @@ -2985,10 +2695,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/fd/50/724ed5c38c504d4e58a88a072776a1e880d970789deaeb2b9f7bd9a5141a/pywinpty-3.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:fe1f7911805127c94cf51f89ab14096c6f91ffdcacf993d2da6082b2142a2523", size = 234591, upload-time = "2026-02-04T21:52:29.821Z" }, { url = "https://files.pythonhosted.org/packages/f7/ad/90a110538696b12b39fd8758a06d70ded899308198ad2305ac68e361126e/pywinpty-3.0.3-cp313-cp313t-win_amd64.whl", hash = "sha256:3f07a6cf1c1d470d284e614733c3d0f726d2c85e78508ea10a403140c3c0c18a", size = 2112360, upload-time = "2026-02-04T21:55:33.397Z" }, { url = "https://files.pythonhosted.org/packages/44/0f/7ffa221757a220402bc79fda44044c3f2cc57338d878ab7d622add6f4581/pywinpty-3.0.3-cp313-cp313t-win_arm64.whl", hash = "sha256:15c7c0b6f8e9d87aabbaff76468dabf6e6121332c40fc1d83548d02a9d6a3759", size = 233107, upload-time = "2026-02-04T21:51:45.455Z" }, - { url = "https://files.pythonhosted.org/packages/28/88/2ff917caff61e55f38bcdb27de06ee30597881b2cae44fbba7627be015c4/pywinpty-3.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:d4b6b7b0fe0cdcd02e956bd57cfe9f4e5a06514eecf3b5ae174da4f951b58be9", size = 2113282, upload-time = "2026-02-04T21:52:08.188Z" }, - { url = "https://files.pythonhosted.org/packages/63/32/40a775343ace542cc43ece3f1d1fce454021521ecac41c4c4573081c2336/pywinpty-3.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:34789d685fc0d547ce0c8a65e5a70e56f77d732fa6e03c8f74fefb8cbb252019", size = 234207, upload-time = "2026-02-04T21:51:58.687Z" }, - { url = "https://files.pythonhosted.org/packages/8d/54/5d5e52f4cb75028104ca6faf36c10f9692389b1986d34471663b4ebebd6d/pywinpty-3.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:0c37e224a47a971d1a6e08649a1714dac4f63c11920780977829ed5c8cadead1", size = 2112910, upload-time = "2026-02-04T21:52:30.976Z" }, - { url = "https://files.pythonhosted.org/packages/0a/44/dcd184824e21d4620b06c7db9fbb15c3ad0a0f1fa2e6de79969fb82647ec/pywinpty-3.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:c4e9c3dff7d86ba81937438d5819f19f385a39d8f592d4e8af67148ceb4f6ab5", size = 233425, upload-time = "2026-02-04T21:51:56.754Z" }, ] [[package]] @@ -3017,24 +2723,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/de/94/980b50a6531b3019e45ddeada0626d45fa85cbe22300844a7983285bed3b/pyyaml-6.0.3-cp313-cp313-win32.whl", hash = "sha256:d0eae10f8159e8fdad514efdc92d74fd8d682c933a6dd088030f3834bc8e6b26", size = 137427, upload-time = "2025-09-25T21:32:32.58Z" }, { url = "https://files.pythonhosted.org/packages/97/c9/39d5b874e8b28845e4ec2202b5da735d0199dbe5b8fb85f91398814a9a46/pyyaml-6.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:79005a0d97d5ddabfeeea4cf676af11e647e41d81c9a7722a193022accdb6b7c", size = 154090, upload-time = "2025-09-25T21:32:33.659Z" }, { url = "https://files.pythonhosted.org/packages/73/e8/2bdf3ca2090f68bb3d75b44da7bbc71843b19c9f2b9cb9b0f4ab7a5a4329/pyyaml-6.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:5498cd1645aa724a7c71c8f378eb29ebe23da2fc0d7a08071d89469bf1d2defb", size = 140246, upload-time = "2025-09-25T21:32:34.663Z" }, - { url = "https://files.pythonhosted.org/packages/9d/8c/f4bd7f6465179953d3ac9bc44ac1a8a3e6122cf8ada906b4f96c60172d43/pyyaml-6.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:8d1fab6bb153a416f9aeb4b8763bc0f22a5586065f86f7664fc23339fc1c1fac", size = 181814, upload-time = "2025-09-25T21:32:35.712Z" }, - { url = "https://files.pythonhosted.org/packages/bd/9c/4d95bb87eb2063d20db7b60faa3840c1b18025517ae857371c4dd55a6b3a/pyyaml-6.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:34d5fcd24b8445fadc33f9cf348c1047101756fd760b4dacb5c3e99755703310", size = 173809, upload-time = "2025-09-25T21:32:36.789Z" }, - { url = "https://files.pythonhosted.org/packages/92/b5/47e807c2623074914e29dabd16cbbdd4bf5e9b2db9f8090fa64411fc5382/pyyaml-6.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:501a031947e3a9025ed4405a168e6ef5ae3126c59f90ce0cd6f2bfc477be31b7", size = 766454, upload-time = "2025-09-25T21:32:37.966Z" }, - { url = "https://files.pythonhosted.org/packages/02/9e/e5e9b168be58564121efb3de6859c452fccde0ab093d8438905899a3a483/pyyaml-6.0.3-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:b3bc83488de33889877a0f2543ade9f70c67d66d9ebb4ac959502e12de895788", size = 836355, upload-time = "2025-09-25T21:32:39.178Z" }, - { url = "https://files.pythonhosted.org/packages/88/f9/16491d7ed2a919954993e48aa941b200f38040928474c9e85ea9e64222c3/pyyaml-6.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c458b6d084f9b935061bc36216e8a69a7e293a2f1e68bf956dcd9e6cbcd143f5", size = 794175, upload-time = "2025-09-25T21:32:40.865Z" }, - { url = "https://files.pythonhosted.org/packages/dd/3f/5989debef34dc6397317802b527dbbafb2b4760878a53d4166579111411e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7c6610def4f163542a622a73fb39f534f8c101d690126992300bf3207eab9764", size = 755228, upload-time = "2025-09-25T21:32:42.084Z" }, - { url = "https://files.pythonhosted.org/packages/d7/ce/af88a49043cd2e265be63d083fc75b27b6ed062f5f9fd6cdc223ad62f03e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5190d403f121660ce8d1d2c1bb2ef1bd05b5f68533fc5c2ea899bd15f4399b35", size = 789194, upload-time = "2025-09-25T21:32:43.362Z" }, - { url = "https://files.pythonhosted.org/packages/23/20/bb6982b26a40bb43951265ba29d4c246ef0ff59c9fdcdf0ed04e0687de4d/pyyaml-6.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:4a2e8cebe2ff6ab7d1050ecd59c25d4c8bd7e6f400f5f82b96557ac0abafd0ac", size = 156429, upload-time = "2025-09-25T21:32:57.844Z" }, - { url = "https://files.pythonhosted.org/packages/f4/f4/a4541072bb9422c8a883ab55255f918fa378ecf083f5b85e87fc2b4eda1b/pyyaml-6.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:93dda82c9c22deb0a405ea4dc5f2d0cda384168e466364dec6255b293923b2f3", size = 143912, upload-time = "2025-09-25T21:32:59.247Z" }, - { url = "https://files.pythonhosted.org/packages/7c/f9/07dd09ae774e4616edf6cda684ee78f97777bdd15847253637a6f052a62f/pyyaml-6.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:02893d100e99e03eda1c8fd5c441d8c60103fd175728e23e431db1b589cf5ab3", size = 189108, upload-time = "2025-09-25T21:32:44.377Z" }, - { url = "https://files.pythonhosted.org/packages/4e/78/8d08c9fb7ce09ad8c38ad533c1191cf27f7ae1effe5bb9400a46d9437fcf/pyyaml-6.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:c1ff362665ae507275af2853520967820d9124984e0f7466736aea23d8611fba", size = 183641, upload-time = "2025-09-25T21:32:45.407Z" }, - { url = "https://files.pythonhosted.org/packages/7b/5b/3babb19104a46945cf816d047db2788bcaf8c94527a805610b0289a01c6b/pyyaml-6.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6adc77889b628398debc7b65c073bcb99c4a0237b248cacaf3fe8a557563ef6c", size = 831901, upload-time = "2025-09-25T21:32:48.83Z" }, - { url = "https://files.pythonhosted.org/packages/8b/cc/dff0684d8dc44da4d22a13f35f073d558c268780ce3c6ba1b87055bb0b87/pyyaml-6.0.3-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a80cb027f6b349846a3bf6d73b5e95e782175e52f22108cfa17876aaeff93702", size = 861132, upload-time = "2025-09-25T21:32:50.149Z" }, - { url = "https://files.pythonhosted.org/packages/b1/5e/f77dc6b9036943e285ba76b49e118d9ea929885becb0a29ba8a7c75e29fe/pyyaml-6.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:00c4bdeba853cc34e7dd471f16b4114f4162dc03e6b7afcc2128711f0eca823c", size = 839261, upload-time = "2025-09-25T21:32:51.808Z" }, - { url = "https://files.pythonhosted.org/packages/ce/88/a9db1376aa2a228197c58b37302f284b5617f56a5d959fd1763fb1675ce6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:66e1674c3ef6f541c35191caae2d429b967b99e02040f5ba928632d9a7f0f065", size = 805272, upload-time = "2025-09-25T21:32:52.941Z" }, - { url = "https://files.pythonhosted.org/packages/da/92/1446574745d74df0c92e6aa4a7b0b3130706a4142b2d1a5869f2eaa423c6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:16249ee61e95f858e83976573de0f5b2893b3677ba71c9dd36b9cf8be9ac6d65", size = 829923, upload-time = "2025-09-25T21:32:54.537Z" }, - { url = "https://files.pythonhosted.org/packages/f0/7a/1c7270340330e575b92f397352af856a8c06f230aa3e76f86b39d01b416a/pyyaml-6.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4ad1906908f2f5ae4e5a8ddfce73c320c2a1429ec52eafd27138b7f1cbe341c9", size = 174062, upload-time = "2025-09-25T21:32:55.767Z" }, - { url = "https://files.pythonhosted.org/packages/f1/12/de94a39c2ef588c7e6455cfbe7343d3b2dc9d6b6b2f40c4c6565744c873d/pyyaml-6.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:ebc55a14a21cb14062aa4162f906cd962b28e2e9ea38f9b4391244cd8de4ae0b", size = 149341, upload-time = "2025-09-25T21:32:56.828Z" }, ] [[package]] @@ -3080,16 +2768,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/4f/6f/55c10e2e49ad52d080dc24e37adb215e5b0d64990b57598abc2e3f01725b/pyzmq-27.1.0-cp313-cp313t-win32.whl", hash = "sha256:7ccc0700cfdf7bd487bea8d850ec38f204478681ea02a582a8da8171b7f90a1c", size = 574964, upload-time = "2025-09-08T23:08:37.178Z" }, { url = "https://files.pythonhosted.org/packages/87/4d/2534970ba63dd7c522d8ca80fb92777f362c0f321900667c615e2067cb29/pyzmq-27.1.0-cp313-cp313t-win_amd64.whl", hash = "sha256:8085a9fba668216b9b4323be338ee5437a235fe275b9d1610e422ccc279733e2", size = 641029, upload-time = "2025-09-08T23:08:40.595Z" }, { url = "https://files.pythonhosted.org/packages/f6/fa/f8aea7a28b0641f31d40dea42d7ef003fded31e184ef47db696bc74cd610/pyzmq-27.1.0-cp313-cp313t-win_arm64.whl", hash = "sha256:6bb54ca21bcfe361e445256c15eedf083f153811c37be87e0514934d6913061e", size = 561541, upload-time = "2025-09-08T23:08:42.668Z" }, - { url = "https://files.pythonhosted.org/packages/87/45/19efbb3000956e82d0331bafca5d9ac19ea2857722fa2caacefb6042f39d/pyzmq-27.1.0-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:ce980af330231615756acd5154f29813d553ea555485ae712c491cd483df6b7a", size = 1341197, upload-time = "2025-09-08T23:08:44.973Z" }, - { url = "https://files.pythonhosted.org/packages/48/43/d72ccdbf0d73d1343936296665826350cb1e825f92f2db9db3e61c2162a2/pyzmq-27.1.0-cp314-cp314t-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:1779be8c549e54a1c38f805e56d2a2e5c009d26de10921d7d51cfd1c8d4632ea", size = 897175, upload-time = "2025-09-08T23:08:46.601Z" }, - { url = "https://files.pythonhosted.org/packages/2f/2e/a483f73a10b65a9ef0161e817321d39a770b2acf8bcf3004a28d90d14a94/pyzmq-27.1.0-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7200bb0f03345515df50d99d3db206a0a6bee1955fbb8c453c76f5bf0e08fb96", size = 660427, upload-time = "2025-09-08T23:08:48.187Z" }, - { url = "https://files.pythonhosted.org/packages/f5/d2/5f36552c2d3e5685abe60dfa56f91169f7a2d99bbaf67c5271022ab40863/pyzmq-27.1.0-cp314-cp314t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:01c0e07d558b06a60773744ea6251f769cd79a41a97d11b8bf4ab8f034b0424d", size = 847929, upload-time = "2025-09-08T23:08:49.76Z" }, - { url = "https://files.pythonhosted.org/packages/c4/2a/404b331f2b7bf3198e9945f75c4c521f0c6a3a23b51f7a4a401b94a13833/pyzmq-27.1.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:80d834abee71f65253c91540445d37c4c561e293ba6e741b992f20a105d69146", size = 1650193, upload-time = "2025-09-08T23:08:51.7Z" }, - { url = "https://files.pythonhosted.org/packages/1c/0b/f4107e33f62a5acf60e3ded67ed33d79b4ce18de432625ce2fc5093d6388/pyzmq-27.1.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:544b4e3b7198dde4a62b8ff6685e9802a9a1ebf47e77478a5eb88eca2a82f2fd", size = 2024388, upload-time = "2025-09-08T23:08:53.393Z" }, - { url = "https://files.pythonhosted.org/packages/0d/01/add31fe76512642fd6e40e3a3bd21f4b47e242c8ba33efb6809e37076d9b/pyzmq-27.1.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:cedc4c68178e59a4046f97eca31b148ddcf51e88677de1ef4e78cf06c5376c9a", size = 1885316, upload-time = "2025-09-08T23:08:55.702Z" }, - { url = "https://files.pythonhosted.org/packages/c4/59/a5f38970f9bf07cee96128de79590bb354917914a9be11272cfc7ff26af0/pyzmq-27.1.0-cp314-cp314t-win32.whl", hash = "sha256:1f0b2a577fd770aa6f053211a55d1c47901f4d537389a034c690291485e5fe92", size = 587472, upload-time = "2025-09-08T23:08:58.18Z" }, - { url = "https://files.pythonhosted.org/packages/70/d8/78b1bad170f93fcf5e3536e70e8fadac55030002275c9a29e8f5719185de/pyzmq-27.1.0-cp314-cp314t-win_amd64.whl", hash = "sha256:19c9468ae0437f8074af379e986c5d3d7d7bfe033506af442e8c879732bedbe0", size = 661401, upload-time = "2025-09-08T23:08:59.802Z" }, - { url = "https://files.pythonhosted.org/packages/81/d6/4bfbb40c9a0b42fc53c7cf442f6385db70b40f74a783130c5d0a5aa62228/pyzmq-27.1.0-cp314-cp314t-win_arm64.whl", hash = "sha256:dc5dbf68a7857b59473f7df42650c621d7e8923fb03fa74a526890f4d33cc4d7", size = 575170, upload-time = "2025-09-08T23:09:01.418Z" }, ] [[package]] @@ -3217,35 +2895,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/6d/61/21b8c41f68e60c8cc3b2e25644f0e3681926020f11d06ab0b78e3c6bbff1/rpds_py-0.30.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:4c5f36a861bc4b7da6516dbdf302c55313afa09b81931e8280361a4f6c9a2d27", size = 555806, upload-time = "2025-11-30T20:23:22.488Z" }, { url = "https://files.pythonhosted.org/packages/f9/39/7e067bb06c31de48de3eb200f9fc7c58982a4d3db44b07e73963e10d3be9/rpds_py-0.30.0-cp313-cp313t-win32.whl", hash = "sha256:3d4a69de7a3e50ffc214ae16d79d8fbb0922972da0356dcf4d0fdca2878559c6", size = 211341, upload-time = "2025-11-30T20:23:24.449Z" }, { url = "https://files.pythonhosted.org/packages/0a/4d/222ef0b46443cf4cf46764d9c630f3fe4abaa7245be9417e56e9f52b8f65/rpds_py-0.30.0-cp313-cp313t-win_amd64.whl", hash = "sha256:f14fc5df50a716f7ece6a80b6c78bb35ea2ca47c499e422aa4463455dd96d56d", size = 225768, upload-time = "2025-11-30T20:23:25.908Z" }, - { url = "https://files.pythonhosted.org/packages/86/81/dad16382ebbd3d0e0328776d8fd7ca94220e4fa0798d1dc5e7da48cb3201/rpds_py-0.30.0-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:68f19c879420aa08f61203801423f6cd5ac5f0ac4ac82a2368a9fcd6a9a075e0", size = 362099, upload-time = "2025-11-30T20:23:27.316Z" }, - { url = "https://files.pythonhosted.org/packages/2b/60/19f7884db5d5603edf3c6bce35408f45ad3e97e10007df0e17dd57af18f8/rpds_py-0.30.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:ec7c4490c672c1a0389d319b3a9cfcd098dcdc4783991553c332a15acf7249be", size = 353192, upload-time = "2025-11-30T20:23:29.151Z" }, - { url = "https://files.pythonhosted.org/packages/bf/c4/76eb0e1e72d1a9c4703c69607cec123c29028bff28ce41588792417098ac/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f251c812357a3fed308d684a5079ddfb9d933860fc6de89f2b7ab00da481e65f", size = 384080, upload-time = "2025-11-30T20:23:30.785Z" }, - { url = "https://files.pythonhosted.org/packages/72/87/87ea665e92f3298d1b26d78814721dc39ed8d2c74b86e83348d6b48a6f31/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ac98b175585ecf4c0348fd7b29c3864bda53b805c773cbf7bfdaffc8070c976f", size = 394841, upload-time = "2025-11-30T20:23:32.209Z" }, - { url = "https://files.pythonhosted.org/packages/77/ad/7783a89ca0587c15dcbf139b4a8364a872a25f861bdb88ed99f9b0dec985/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3e62880792319dbeb7eb866547f2e35973289e7d5696c6e295476448f5b63c87", size = 516670, upload-time = "2025-11-30T20:23:33.742Z" }, - { url = "https://files.pythonhosted.org/packages/5b/3c/2882bdac942bd2172f3da574eab16f309ae10a3925644e969536553cb4ee/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4e7fc54e0900ab35d041b0601431b0a0eb495f0851a0639b6ef90f7741b39a18", size = 408005, upload-time = "2025-11-30T20:23:35.253Z" }, - { url = "https://files.pythonhosted.org/packages/ce/81/9a91c0111ce1758c92516a3e44776920b579d9a7c09b2b06b642d4de3f0f/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47e77dc9822d3ad616c3d5759ea5631a75e5809d5a28707744ef79d7a1bcfcad", size = 382112, upload-time = "2025-11-30T20:23:36.842Z" }, - { url = "https://files.pythonhosted.org/packages/cf/8e/1da49d4a107027e5fbc64daeab96a0706361a2918da10cb41769244b805d/rpds_py-0.30.0-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:b4dc1a6ff022ff85ecafef7979a2c6eb423430e05f1165d6688234e62ba99a07", size = 399049, upload-time = "2025-11-30T20:23:38.343Z" }, - { url = "https://files.pythonhosted.org/packages/df/5a/7ee239b1aa48a127570ec03becbb29c9d5a9eb092febbd1699d567cae859/rpds_py-0.30.0-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4559c972db3a360808309e06a74628b95eaccbf961c335c8fe0d590cf587456f", size = 415661, upload-time = "2025-11-30T20:23:40.263Z" }, - { url = "https://files.pythonhosted.org/packages/70/ea/caa143cf6b772f823bc7929a45da1fa83569ee49b11d18d0ada7f5ee6fd6/rpds_py-0.30.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:0ed177ed9bded28f8deb6ab40c183cd1192aa0de40c12f38be4d59cd33cb5c65", size = 565606, upload-time = "2025-11-30T20:23:42.186Z" }, - { url = "https://files.pythonhosted.org/packages/64/91/ac20ba2d69303f961ad8cf55bf7dbdb4763f627291ba3d0d7d67333cced9/rpds_py-0.30.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:ad1fa8db769b76ea911cb4e10f049d80bf518c104f15b3edb2371cc65375c46f", size = 591126, upload-time = "2025-11-30T20:23:44.086Z" }, - { url = "https://files.pythonhosted.org/packages/21/20/7ff5f3c8b00c8a95f75985128c26ba44503fb35b8e0259d812766ea966c7/rpds_py-0.30.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:46e83c697b1f1c72b50e5ee5adb4353eef7406fb3f2043d64c33f20ad1c2fc53", size = 553371, upload-time = "2025-11-30T20:23:46.004Z" }, - { url = "https://files.pythonhosted.org/packages/72/c7/81dadd7b27c8ee391c132a6b192111ca58d866577ce2d9b0ca157552cce0/rpds_py-0.30.0-cp314-cp314-win32.whl", hash = "sha256:ee454b2a007d57363c2dfd5b6ca4a5d7e2c518938f8ed3b706e37e5d470801ed", size = 215298, upload-time = "2025-11-30T20:23:47.696Z" }, - { url = "https://files.pythonhosted.org/packages/3e/d2/1aaac33287e8cfb07aab2e6b8ac1deca62f6f65411344f1433c55e6f3eb8/rpds_py-0.30.0-cp314-cp314-win_amd64.whl", hash = "sha256:95f0802447ac2d10bcc69f6dc28fe95fdf17940367b21d34e34c737870758950", size = 228604, upload-time = "2025-11-30T20:23:49.501Z" }, - { url = "https://files.pythonhosted.org/packages/e8/95/ab005315818cc519ad074cb7784dae60d939163108bd2b394e60dc7b5461/rpds_py-0.30.0-cp314-cp314-win_arm64.whl", hash = "sha256:613aa4771c99f03346e54c3f038e4cc574ac09a3ddfb0e8878487335e96dead6", size = 222391, upload-time = "2025-11-30T20:23:50.96Z" }, - { url = "https://files.pythonhosted.org/packages/9e/68/154fe0194d83b973cdedcdcc88947a2752411165930182ae41d983dcefa6/rpds_py-0.30.0-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:7e6ecfcb62edfd632e56983964e6884851786443739dbfe3582947e87274f7cb", size = 364868, upload-time = "2025-11-30T20:23:52.494Z" }, - { url = "https://files.pythonhosted.org/packages/83/69/8bbc8b07ec854d92a8b75668c24d2abcb1719ebf890f5604c61c9369a16f/rpds_py-0.30.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:a1d0bc22a7cdc173fedebb73ef81e07faef93692b8c1ad3733b67e31e1b6e1b8", size = 353747, upload-time = "2025-11-30T20:23:54.036Z" }, - { url = "https://files.pythonhosted.org/packages/ab/00/ba2e50183dbd9abcce9497fa5149c62b4ff3e22d338a30d690f9af970561/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d08f00679177226c4cb8c5265012eea897c8ca3b93f429e546600c971bcbae7", size = 383795, upload-time = "2025-11-30T20:23:55.556Z" }, - { url = "https://files.pythonhosted.org/packages/05/6f/86f0272b84926bcb0e4c972262f54223e8ecc556b3224d281e6598fc9268/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5965af57d5848192c13534f90f9dd16464f3c37aaf166cc1da1cae1fd5a34898", size = 393330, upload-time = "2025-11-30T20:23:57.033Z" }, - { url = "https://files.pythonhosted.org/packages/cb/e9/0e02bb2e6dc63d212641da45df2b0bf29699d01715913e0d0f017ee29438/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9a4e86e34e9ab6b667c27f3211ca48f73dba7cd3d90f8d5b11be56e5dbc3fb4e", size = 518194, upload-time = "2025-11-30T20:23:58.637Z" }, - { url = "https://files.pythonhosted.org/packages/ee/ca/be7bca14cf21513bdf9c0606aba17d1f389ea2b6987035eb4f62bd923f25/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e5d3e6b26f2c785d65cc25ef1e5267ccbe1b069c5c21b8cc724efee290554419", size = 408340, upload-time = "2025-11-30T20:24:00.2Z" }, - { url = "https://files.pythonhosted.org/packages/c2/c7/736e00ebf39ed81d75544c0da6ef7b0998f8201b369acf842f9a90dc8fce/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:626a7433c34566535b6e56a1b39a7b17ba961e97ce3b80ec62e6f1312c025551", size = 383765, upload-time = "2025-11-30T20:24:01.759Z" }, - { url = "https://files.pythonhosted.org/packages/4a/3f/da50dfde9956aaf365c4adc9533b100008ed31aea635f2b8d7b627e25b49/rpds_py-0.30.0-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:acd7eb3f4471577b9b5a41baf02a978e8bdeb08b4b355273994f8b87032000a8", size = 396834, upload-time = "2025-11-30T20:24:03.687Z" }, - { url = "https://files.pythonhosted.org/packages/4e/00/34bcc2565b6020eab2623349efbdec810676ad571995911f1abdae62a3a0/rpds_py-0.30.0-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fe5fa731a1fa8a0a56b0977413f8cacac1768dad38d16b3a296712709476fbd5", size = 415470, upload-time = "2025-11-30T20:24:05.232Z" }, - { url = "https://files.pythonhosted.org/packages/8c/28/882e72b5b3e6f718d5453bd4d0d9cf8df36fddeb4ddbbab17869d5868616/rpds_py-0.30.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:74a3243a411126362712ee1524dfc90c650a503502f135d54d1b352bd01f2404", size = 565630, upload-time = "2025-11-30T20:24:06.878Z" }, - { url = "https://files.pythonhosted.org/packages/3b/97/04a65539c17692de5b85c6e293520fd01317fd878ea1995f0367d4532fb1/rpds_py-0.30.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:3e8eeb0544f2eb0d2581774be4c3410356eba189529a6b3e36bbbf9696175856", size = 591148, upload-time = "2025-11-30T20:24:08.445Z" }, - { url = "https://files.pythonhosted.org/packages/85/70/92482ccffb96f5441aab93e26c4d66489eb599efdcf96fad90c14bbfb976/rpds_py-0.30.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:dbd936cde57abfee19ab3213cf9c26be06d60750e60a8e4dd85d1ab12c8b1f40", size = 556030, upload-time = "2025-11-30T20:24:10.956Z" }, - { url = "https://files.pythonhosted.org/packages/20/53/7c7e784abfa500a2b6b583b147ee4bb5a2b3747a9166bab52fec4b5b5e7d/rpds_py-0.30.0-cp314-cp314t-win32.whl", hash = "sha256:dc824125c72246d924f7f796b4f63c1e9dc810c7d9e2355864b3c3a73d59ade0", size = 211570, upload-time = "2025-11-30T20:24:12.735Z" }, - { url = "https://files.pythonhosted.org/packages/d0/02/fa464cdfbe6b26e0600b62c528b72d8608f5cc49f96b8d6e38c95d60c676/rpds_py-0.30.0-cp314-cp314t-win_amd64.whl", hash = "sha256:27f4b0e92de5bfbc6f86e43959e6edd1425c33b5e69aab0984a72047f2bcf1e3", size = 226532, upload-time = "2025-11-30T20:24:14.634Z" }, ] [[package]] @@ -3303,18 +2952,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/fe/56/a85473cd75f200c9759e3a5f0bcab2d116c92a8a02ee08ccd73b870f8bb4/scikit_learn-1.8.0-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:80832434a6cc114f5219211eec13dcbc16c2bac0e31ef64c6d346cde3cf054cb", size = 8925045, upload-time = "2025-12-10T07:08:22.11Z" }, { url = "https://files.pythonhosted.org/packages/cc/b7/64d8cfa896c64435ae57f4917a548d7ac7a44762ff9802f75a79b77cb633/scikit_learn-1.8.0-cp313-cp313t-win_amd64.whl", hash = "sha256:ee787491dbfe082d9c3013f01f5991658b0f38aa8177e4cd4bf434c58f551702", size = 8507994, upload-time = "2025-12-10T07:08:23.943Z" }, { url = "https://files.pythonhosted.org/packages/5e/37/e192ea709551799379958b4c4771ec507347027bb7c942662c7fbeba31cb/scikit_learn-1.8.0-cp313-cp313t-win_arm64.whl", hash = "sha256:bf97c10a3f5a7543f9b88cbf488d33d175e9146115a451ae34568597ba33dcde", size = 7869518, upload-time = "2025-12-10T07:08:25.71Z" }, - { url = "https://files.pythonhosted.org/packages/24/05/1af2c186174cc92dcab2233f327336058c077d38f6fe2aceb08e6ab4d509/scikit_learn-1.8.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:c22a2da7a198c28dd1a6e1136f19c830beab7fdca5b3e5c8bba8394f8a5c45b3", size = 8528667, upload-time = "2025-12-10T07:08:27.541Z" }, - { url = "https://files.pythonhosted.org/packages/a8/25/01c0af38fe969473fb292bba9dc2b8f9b451f3112ff242c647fee3d0dfe7/scikit_learn-1.8.0-cp314-cp314-macosx_12_0_arm64.whl", hash = "sha256:6b595b07a03069a2b1740dc08c2299993850ea81cce4fe19b2421e0c970de6b7", size = 8066524, upload-time = "2025-12-10T07:08:29.822Z" }, - { url = "https://files.pythonhosted.org/packages/be/ce/a0623350aa0b68647333940ee46fe45086c6060ec604874e38e9ab7d8e6c/scikit_learn-1.8.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:29ffc74089f3d5e87dfca4c2c8450f88bdc61b0fc6ed5d267f3988f19a1309f6", size = 8657133, upload-time = "2025-12-10T07:08:31.865Z" }, - { url = "https://files.pythonhosted.org/packages/b8/cb/861b41341d6f1245e6ca80b1c1a8c4dfce43255b03df034429089ca2a2c5/scikit_learn-1.8.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fb65db5d7531bccf3a4f6bec3462223bea71384e2cda41da0f10b7c292b9e7c4", size = 8923223, upload-time = "2025-12-10T07:08:34.166Z" }, - { url = "https://files.pythonhosted.org/packages/76/18/a8def8f91b18cd1ba6e05dbe02540168cb24d47e8dcf69e8d00b7da42a08/scikit_learn-1.8.0-cp314-cp314-win_amd64.whl", hash = "sha256:56079a99c20d230e873ea40753102102734c5953366972a71d5cb39a32bc40c6", size = 8096518, upload-time = "2025-12-10T07:08:36.339Z" }, - { url = "https://files.pythonhosted.org/packages/d1/77/482076a678458307f0deb44e29891d6022617b2a64c840c725495bee343f/scikit_learn-1.8.0-cp314-cp314-win_arm64.whl", hash = "sha256:3bad7565bc9cf37ce19a7c0d107742b320c1285df7aab1a6e2d28780df167242", size = 7754546, upload-time = "2025-12-10T07:08:38.128Z" }, - { url = "https://files.pythonhosted.org/packages/2d/d1/ef294ca754826daa043b2a104e59960abfab4cf653891037d19dd5b6f3cf/scikit_learn-1.8.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:4511be56637e46c25721e83d1a9cea9614e7badc7040c4d573d75fbe257d6fd7", size = 8848305, upload-time = "2025-12-10T07:08:41.013Z" }, - { url = "https://files.pythonhosted.org/packages/5b/e2/b1f8b05138ee813b8e1a4149f2f0d289547e60851fd1bb268886915adbda/scikit_learn-1.8.0-cp314-cp314t-macosx_12_0_arm64.whl", hash = "sha256:a69525355a641bf8ef136a7fa447672fb54fe8d60cab5538d9eb7c6438543fb9", size = 8432257, upload-time = "2025-12-10T07:08:42.873Z" }, - { url = "https://files.pythonhosted.org/packages/26/11/c32b2138a85dcb0c99f6afd13a70a951bfdff8a6ab42d8160522542fb647/scikit_learn-1.8.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c2656924ec73e5939c76ac4c8b026fc203b83d8900362eb2599d8aee80e4880f", size = 8678673, upload-time = "2025-12-10T07:08:45.362Z" }, - { url = "https://files.pythonhosted.org/packages/c7/57/51f2384575bdec454f4fe4e7a919d696c9ebce914590abf3e52d47607ab8/scikit_learn-1.8.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:15fc3b5d19cc2be65404786857f2e13c70c83dd4782676dd6814e3b89dc8f5b9", size = 8922467, upload-time = "2025-12-10T07:08:47.408Z" }, - { url = "https://files.pythonhosted.org/packages/35/4d/748c9e2872637a57981a04adc038dacaa16ba8ca887b23e34953f0b3f742/scikit_learn-1.8.0-cp314-cp314t-win_amd64.whl", hash = "sha256:00d6f1d66fbcf4eba6e356e1420d33cc06c70a45bb1363cd6f6a8e4ebbbdece2", size = 8774395, upload-time = "2025-12-10T07:08:49.337Z" }, - { url = "https://files.pythonhosted.org/packages/60/22/d7b2ebe4704a5e50790ba089d5c2ae308ab6bb852719e6c3bd4f04c3a363/scikit_learn-1.8.0-cp314-cp314t-win_arm64.whl", hash = "sha256:f28dd15c6bb0b66ba09728cf09fd8736c304be29409bd8445a080c1280619e8c", size = 8002647, upload-time = "2025-12-10T07:08:51.601Z" }, ] [[package]] @@ -3356,26 +2993,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/90/b8/4f0f5cf0c5ea4d7548424e6533e6b17d164f34a6e2fb2e43ffebb6697b06/scipy-1.17.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:cacbaddd91fcffde703934897c5cd2c7cb0371fac195d383f4e1f1c5d3f3bd04", size = 37438061, upload-time = "2026-01-10T21:28:19.684Z" }, { url = "https://files.pythonhosted.org/packages/f9/cc/2bd59140ed3b2fa2882fb15da0a9cb1b5a6443d67cfd0d98d4cec83a57ec/scipy-1.17.0-cp313-cp313t-win_amd64.whl", hash = "sha256:edce1a1cf66298cccdc48a1bdf8fb10a3bf58e8b58d6c3883dd1530e103f87c0", size = 36328593, upload-time = "2026-01-10T21:28:28.007Z" }, { url = "https://files.pythonhosted.org/packages/13/1b/c87cc44a0d2c7aaf0f003aef2904c3d097b422a96c7e7c07f5efd9073c1b/scipy-1.17.0-cp313-cp313t-win_arm64.whl", hash = "sha256:30509da9dbec1c2ed8f168b8d8aa853bc6723fede1dbc23c7d43a56f5ab72a67", size = 24625083, upload-time = "2026-01-10T21:28:35.188Z" }, - { url = "https://files.pythonhosted.org/packages/1a/2d/51006cd369b8e7879e1c630999a19d1fbf6f8b5ed3e33374f29dc87e53b3/scipy-1.17.0-cp314-cp314-macosx_10_14_x86_64.whl", hash = "sha256:c17514d11b78be8f7e6331b983a65a7f5ca1fd037b95e27b280921fe5606286a", size = 31346803, upload-time = "2026-01-10T21:28:57.24Z" }, - { url = "https://files.pythonhosted.org/packages/d6/2e/2349458c3ce445f53a6c93d4386b1c4c5c0c540917304c01222ff95ff317/scipy-1.17.0-cp314-cp314-macosx_12_0_arm64.whl", hash = "sha256:4e00562e519c09da34c31685f6acc3aa384d4d50604db0f245c14e1b4488bfa2", size = 27967182, upload-time = "2026-01-10T21:29:04.107Z" }, - { url = "https://files.pythonhosted.org/packages/5e/7c/df525fbfa77b878d1cfe625249529514dc02f4fd5f45f0f6295676a76528/scipy-1.17.0-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:f7df7941d71314e60a481e02d5ebcb3f0185b8d799c70d03d8258f6c80f3d467", size = 20139125, upload-time = "2026-01-10T21:29:10.179Z" }, - { url = "https://files.pythonhosted.org/packages/33/11/fcf9d43a7ed1234d31765ec643b0515a85a30b58eddccc5d5a4d12b5f194/scipy-1.17.0-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:aabf057c632798832f071a8dde013c2e26284043934f53b00489f1773b33527e", size = 22443554, upload-time = "2026-01-10T21:29:15.888Z" }, - { url = "https://files.pythonhosted.org/packages/80/5c/ea5d239cda2dd3d31399424967a24d556cf409fbea7b5b21412b0fd0a44f/scipy-1.17.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a38c3337e00be6fd8a95b4ed66b5d988bac4ec888fd922c2ea9fe5fb1603dd67", size = 32757834, upload-time = "2026-01-10T21:29:23.406Z" }, - { url = "https://files.pythonhosted.org/packages/b8/7e/8c917cc573310e5dc91cbeead76f1b600d3fb17cf0969db02c9cf92e3cfa/scipy-1.17.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:00fb5f8ec8398ad90215008d8b6009c9db9fa924fd4c7d6be307c6f945f9cd73", size = 34995775, upload-time = "2026-01-10T21:29:31.915Z" }, - { url = "https://files.pythonhosted.org/packages/c5/43/176c0c3c07b3f7df324e7cdd933d3e2c4898ca202b090bd5ba122f9fe270/scipy-1.17.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:f2a4942b0f5f7c23c7cd641a0ca1955e2ae83dedcff537e3a0259096635e186b", size = 34841240, upload-time = "2026-01-10T21:29:39.995Z" }, - { url = "https://files.pythonhosted.org/packages/44/8c/d1f5f4b491160592e7f084d997de53a8e896a3ac01cd07e59f43ca222744/scipy-1.17.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:dbf133ced83889583156566d2bdf7a07ff89228fe0c0cb727f777de92092ec6b", size = 37394463, upload-time = "2026-01-10T21:29:48.723Z" }, - { url = "https://files.pythonhosted.org/packages/9f/ec/42a6657f8d2d087e750e9a5dde0b481fd135657f09eaf1cf5688bb23c338/scipy-1.17.0-cp314-cp314-win_amd64.whl", hash = "sha256:3625c631a7acd7cfd929e4e31d2582cf00f42fcf06011f59281271746d77e061", size = 37053015, upload-time = "2026-01-10T21:30:51.418Z" }, - { url = "https://files.pythonhosted.org/packages/27/58/6b89a6afd132787d89a362d443a7bddd511b8f41336a1ae47f9e4f000dc4/scipy-1.17.0-cp314-cp314-win_arm64.whl", hash = "sha256:9244608d27eafe02b20558523ba57f15c689357c85bdcfe920b1828750aa26eb", size = 24951312, upload-time = "2026-01-10T21:30:56.771Z" }, - { url = "https://files.pythonhosted.org/packages/e9/01/f58916b9d9ae0112b86d7c3b10b9e685625ce6e8248df139d0fcb17f7397/scipy-1.17.0-cp314-cp314t-macosx_10_14_x86_64.whl", hash = "sha256:2b531f57e09c946f56ad0b4a3b2abee778789097871fc541e267d2eca081cff1", size = 31706502, upload-time = "2026-01-10T21:29:56.326Z" }, - { url = "https://files.pythonhosted.org/packages/59/8e/2912a87f94a7d1f8b38aabc0faf74b82d3b6c9e22be991c49979f0eceed8/scipy-1.17.0-cp314-cp314t-macosx_12_0_arm64.whl", hash = "sha256:13e861634a2c480bd237deb69333ac79ea1941b94568d4b0efa5db5e263d4fd1", size = 28380854, upload-time = "2026-01-10T21:30:01.554Z" }, - { url = "https://files.pythonhosted.org/packages/bd/1c/874137a52dddab7d5d595c1887089a2125d27d0601fce8c0026a24a92a0b/scipy-1.17.0-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:eb2651271135154aa24f6481cbae5cc8af1f0dd46e6533fb7b56aa9727b6a232", size = 20552752, upload-time = "2026-01-10T21:30:05.93Z" }, - { url = "https://files.pythonhosted.org/packages/3f/f0/7518d171cb735f6400f4576cf70f756d5b419a07fe1867da34e2c2c9c11b/scipy-1.17.0-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:c5e8647f60679790c2f5c76be17e2e9247dc6b98ad0d3b065861e082c56e078d", size = 22803972, upload-time = "2026-01-10T21:30:10.651Z" }, - { url = "https://files.pythonhosted.org/packages/7c/74/3498563a2c619e8a3ebb4d75457486c249b19b5b04a30600dfd9af06bea5/scipy-1.17.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5fb10d17e649e1446410895639f3385fd2bf4c3c7dfc9bea937bddcbc3d7b9ba", size = 32829770, upload-time = "2026-01-10T21:30:16.359Z" }, - { url = "https://files.pythonhosted.org/packages/48/d1/7b50cedd8c6c9d6f706b4b36fa8544d829c712a75e370f763b318e9638c1/scipy-1.17.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8547e7c57f932e7354a2319fab613981cde910631979f74c9b542bb167a8b9db", size = 35051093, upload-time = "2026-01-10T21:30:22.987Z" }, - { url = "https://files.pythonhosted.org/packages/e2/82/a2d684dfddb87ba1b3ea325df7c3293496ee9accb3a19abe9429bce94755/scipy-1.17.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:33af70d040e8af9d5e7a38b5ed3b772adddd281e3062ff23fec49e49681c38cf", size = 34909905, upload-time = "2026-01-10T21:30:28.704Z" }, - { url = "https://files.pythonhosted.org/packages/ef/5e/e565bd73991d42023eb82bb99e51c5b3d9e2c588ca9d4b3e2cc1d3ca62a6/scipy-1.17.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:f9eb55bb97d00f8b7ab95cb64f873eb0bf54d9446264d9f3609130381233483f", size = 37457743, upload-time = "2026-01-10T21:30:34.819Z" }, - { url = "https://files.pythonhosted.org/packages/58/a8/a66a75c3d8f1fb2b83f66007d6455a06a6f6cf5618c3dc35bc9b69dd096e/scipy-1.17.0-cp314-cp314t-win_amd64.whl", hash = "sha256:1ff269abf702f6c7e67a4b7aad981d42871a11b9dd83c58d2d2ea624efbd1088", size = 37098574, upload-time = "2026-01-10T21:30:40.782Z" }, - { url = "https://files.pythonhosted.org/packages/56/a5/df8f46ef7da168f1bc52cd86e09a9de5c6f19cc1da04454d51b7d4f43408/scipy-1.17.0-cp314-cp314t-win_arm64.whl", hash = "sha256:031121914e295d9791319a1875444d55079885bbae5bdc9c5e0f2ee5f09d34ff", size = 25246266, upload-time = "2026-01-10T21:30:45.923Z" }, ] [[package]] @@ -3527,15 +3144,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/00/01/3c27962f7258ad0bb552c3cd324fa2e01f746c8b6e81bd25d468f72204e8/tensorstore-0.1.81-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b218a6fe09c72c002f2c6480fc58b78cdbba8bb9c6f3a0d7dd1f70625cb37995", size = 19044489, upload-time = "2026-02-06T18:55:44.957Z" }, { url = "https://files.pythonhosted.org/packages/2c/ea/fe0f14a1da96d6e0aa6c24d6c31f3ce4b203f8e8a1a2e359489e52b33400/tensorstore-0.1.81-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f33e7c11035c14dad01aeba012051643110cbb95c239e512106fe1be692c98b6", size = 21052658, upload-time = "2026-02-06T18:55:47.138Z" }, { url = "https://files.pythonhosted.org/packages/e3/e2/cc189d799982f02c200b22405c4d3f28845df6321de2ac3a35ae087758ed/tensorstore-0.1.81-cp313-cp313-win_amd64.whl", hash = "sha256:b55126bcf084cc5fe0151bf465f3a5dedb5b5da0133d01227f75d0e71f9cfae5", size = 13226848, upload-time = "2026-02-06T18:55:49.631Z" }, - { url = "https://files.pythonhosted.org/packages/89/b0/0ca436391f832fad365977623f3c08c4fbbf553fd9a112604aa106646654/tensorstore-0.1.81-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:a48c23e4df50681d8f4f365b08a0beb114ab210accbde9f34d37fd7b45c31005", size = 16525537, upload-time = "2026-02-06T18:55:51.708Z" }, - { url = "https://files.pythonhosted.org/packages/8a/02/c10052b86cf8d47b4cf41e5f139b4003c69bb69e506759b0eb87b873d213/tensorstore-0.1.81-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:0be0ce646263820f3d4c9ba738d8e9be7da241cbe093ca2fd02e25023344347c", size = 14547490, upload-time = "2026-02-06T18:55:53.899Z" }, - { url = "https://files.pythonhosted.org/packages/01/d1/bd86c46367624522967e896ca45d77ba9085de3f15081fdad6576ba70aa9/tensorstore-0.1.81-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:93996e756dce82589f5a19e27b4e7c0b5b40221a7e41ddce46dc13d378dbd157", size = 19050938, upload-time = "2026-02-06T18:55:56.123Z" }, - { url = "https://files.pythonhosted.org/packages/11/a2/59a8e9a33cd9e17461f918bda4a20712ed3c51c52e0e42b2f673441bc90d/tensorstore-0.1.81-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:444c088919a739c20ca1f87935d72de4fd87605eb2c0f093b8d49251b7884aef", size = 21055275, upload-time = "2026-02-06T18:55:58.259Z" }, - { url = "https://files.pythonhosted.org/packages/c5/ec/2988f210729b523975b1bee030cabd64b256943c08463331598f1e03bd4f/tensorstore-0.1.81-cp314-cp314-win_amd64.whl", hash = "sha256:f7aa0a3a470c4d832faff7d77dd688b1d352b718d110c95ceba54ec637ca3ffa", size = 13614713, upload-time = "2026-02-06T18:56:00.291Z" }, - { url = "https://files.pythonhosted.org/packages/ae/5d/60e990df3f1dc57c33644375a0eccb906a79fd8a5e2d81238f856c65ad7f/tensorstore-0.1.81-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:6c36d8a827120aa15e50ec5c36dd7e73978d86ba4f46d073fb648d8dda3948e9", size = 16605091, upload-time = "2026-02-06T18:56:02.807Z" }, - { url = "https://files.pythonhosted.org/packages/85/22/f599576815227735d3e34f86f05a8b39d8b15fd979d0029383ebae23978d/tensorstore-0.1.81-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:3c31d831707c4ff3c6ecdcba129f7c39e982572837b2f93e02ccb83fc8581bca", size = 14631573, upload-time = "2026-02-06T18:56:04.892Z" }, - { url = "https://files.pythonhosted.org/packages/cb/76/b5d0b424b7af057a3d4de3f312eba9ddf8a3c750a766b42e0b7f6c2ebef0/tensorstore-0.1.81-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9fba383f108d7450bf9a03487ac7fa3bb2c3080c91cee9d2da3bb217b560846b", size = 19065251, upload-time = "2026-02-06T18:56:06.972Z" }, - { url = "https://files.pythonhosted.org/packages/54/6c/0f113eae73b1e8eb2f712cf5f1efd269452f0f0045158fae43ce7b4701b4/tensorstore-0.1.81-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f88c52f592e2982682045199cabf360462146749d48b7be2969cd640e877c6c3", size = 21066488, upload-time = "2026-02-06T18:56:10.236Z" }, ] [[package]] @@ -3721,18 +3329,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/15/c0/0be24758891ef825f2065cd5db8741aaddabe3e248ee6acc5e8a80f04005/uvloop-0.22.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0530a5fbad9c9e4ee3f2b33b148c6a64d47bbad8000ea63704fa8260f4cf728e", size = 4366890, upload-time = "2025-10-16T22:16:40.547Z" }, { url = "https://files.pythonhosted.org/packages/d2/53/8369e5219a5855869bcee5f4d317f6da0e2c669aecf0ef7d371e3d084449/uvloop-0.22.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:bc5ef13bbc10b5335792360623cc378d52d7e62c2de64660616478c32cd0598e", size = 4119472, upload-time = "2025-10-16T22:16:41.694Z" }, { url = "https://files.pythonhosted.org/packages/f8/ba/d69adbe699b768f6b29a5eec7b47dd610bd17a69de51b251126a801369ea/uvloop-0.22.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:1f38ec5e3f18c8a10ded09742f7fb8de0108796eb673f30ce7762ce1b8550cad", size = 4239051, upload-time = "2025-10-16T22:16:43.224Z" }, - { url = "https://files.pythonhosted.org/packages/90/cd/b62bdeaa429758aee8de8b00ac0dd26593a9de93d302bff3d21439e9791d/uvloop-0.22.1-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:3879b88423ec7e97cd4eba2a443aa26ed4e59b45e6b76aabf13fe2f27023a142", size = 1362067, upload-time = "2025-10-16T22:16:44.503Z" }, - { url = "https://files.pythonhosted.org/packages/0d/f8/a132124dfda0777e489ca86732e85e69afcd1ff7686647000050ba670689/uvloop-0.22.1-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:4baa86acedf1d62115c1dc6ad1e17134476688f08c6efd8a2ab076e815665c74", size = 752423, upload-time = "2025-10-16T22:16:45.968Z" }, - { url = "https://files.pythonhosted.org/packages/a3/94/94af78c156f88da4b3a733773ad5ba0b164393e357cc4bd0ab2e2677a7d6/uvloop-0.22.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:297c27d8003520596236bdb2335e6b3f649480bd09e00d1e3a99144b691d2a35", size = 4272437, upload-time = "2025-10-16T22:16:47.451Z" }, - { url = "https://files.pythonhosted.org/packages/b5/35/60249e9fd07b32c665192cec7af29e06c7cd96fa1d08b84f012a56a0b38e/uvloop-0.22.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c1955d5a1dd43198244d47664a5858082a3239766a839b2102a269aaff7a4e25", size = 4292101, upload-time = "2025-10-16T22:16:49.318Z" }, - { url = "https://files.pythonhosted.org/packages/02/62/67d382dfcb25d0a98ce73c11ed1a6fba5037a1a1d533dcbb7cab033a2636/uvloop-0.22.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:b31dc2fccbd42adc73bc4e7cdbae4fc5086cf378979e53ca5d0301838c5682c6", size = 4114158, upload-time = "2025-10-16T22:16:50.517Z" }, - { url = "https://files.pythonhosted.org/packages/f0/7a/f1171b4a882a5d13c8b7576f348acfe6074d72eaf52cccef752f748d4a9f/uvloop-0.22.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:93f617675b2d03af4e72a5333ef89450dfaa5321303ede6e67ba9c9d26878079", size = 4177360, upload-time = "2025-10-16T22:16:52.646Z" }, - { url = "https://files.pythonhosted.org/packages/79/7b/b01414f31546caf0919da80ad57cbfe24c56b151d12af68cee1b04922ca8/uvloop-0.22.1-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:37554f70528f60cad66945b885eb01f1bb514f132d92b6eeed1c90fd54ed6289", size = 1454790, upload-time = "2025-10-16T22:16:54.355Z" }, - { url = "https://files.pythonhosted.org/packages/d4/31/0bb232318dd838cad3fa8fb0c68c8b40e1145b32025581975e18b11fab40/uvloop-0.22.1-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:b76324e2dc033a0b2f435f33eb88ff9913c156ef78e153fb210e03c13da746b3", size = 796783, upload-time = "2025-10-16T22:16:55.906Z" }, - { url = "https://files.pythonhosted.org/packages/42/38/c9b09f3271a7a723a5de69f8e237ab8e7803183131bc57c890db0b6bb872/uvloop-0.22.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:badb4d8e58ee08dad957002027830d5c3b06aea446a6a3744483c2b3b745345c", size = 4647548, upload-time = "2025-10-16T22:16:57.008Z" }, - { url = "https://files.pythonhosted.org/packages/c1/37/945b4ca0ac27e3dc4952642d4c900edd030b3da6c9634875af6e13ae80e5/uvloop-0.22.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b91328c72635f6f9e0282e4a57da7470c7350ab1c9f48546c0f2866205349d21", size = 4467065, upload-time = "2025-10-16T22:16:58.206Z" }, - { url = "https://files.pythonhosted.org/packages/97/cc/48d232f33d60e2e2e0b42f4e73455b146b76ebe216487e862700457fbf3c/uvloop-0.22.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:daf620c2995d193449393d6c62131b3fbd40a63bf7b307a1527856ace637fe88", size = 4328384, upload-time = "2025-10-16T22:16:59.36Z" }, - { url = "https://files.pythonhosted.org/packages/e4/16/c1fd27e9549f3c4baf1dc9c20c456cd2f822dbf8de9f463824b0c0357e06/uvloop-0.22.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:6cde23eeda1a25c75b2e07d39970f3374105d5eafbaab2a4482be82f272d5a5e", size = 4296730, upload-time = "2025-10-16T22:17:00.744Z" }, ] [[package]] @@ -3813,29 +3409,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/e1/f7/0a4467be0a56e80447c8529c9fce5b38eab4f513cb3d9bf82e7392a5696b/watchfiles-1.1.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3f7eb7da0eb23aa2ba036d4f616d46906013a68caf61b7fdbe42fc8b25132e77", size = 455425, upload-time = "2025-10-14T15:05:23.348Z" }, { url = "https://files.pythonhosted.org/packages/8e/e0/82583485ea00137ddf69bc84a2db88bd92ab4a6e3c405e5fb878ead8d0e7/watchfiles-1.1.1-cp313-cp313t-musllinux_1_1_aarch64.whl", hash = "sha256:831a62658609f0e5c64178211c942ace999517f5770fe9436be4c2faeba0c0ef", size = 628826, upload-time = "2025-10-14T15:05:24.398Z" }, { url = "https://files.pythonhosted.org/packages/28/9a/a785356fccf9fae84c0cc90570f11702ae9571036fb25932f1242c82191c/watchfiles-1.1.1-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:f9a2ae5c91cecc9edd47e041a930490c31c3afb1f5e6d71de3dc671bfaca02bf", size = 622208, upload-time = "2025-10-14T15:05:25.45Z" }, - { url = "https://files.pythonhosted.org/packages/c3/f4/0872229324ef69b2c3edec35e84bd57a1289e7d3fe74588048ed8947a323/watchfiles-1.1.1-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:d1715143123baeeaeadec0528bb7441103979a1d5f6fd0e1f915383fea7ea6d5", size = 404315, upload-time = "2025-10-14T15:05:26.501Z" }, - { url = "https://files.pythonhosted.org/packages/7b/22/16d5331eaed1cb107b873f6ae1b69e9ced582fcf0c59a50cd84f403b1c32/watchfiles-1.1.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:39574d6370c4579d7f5d0ad940ce5b20db0e4117444e39b6d8f99db5676c52fd", size = 390869, upload-time = "2025-10-14T15:05:27.649Z" }, - { url = "https://files.pythonhosted.org/packages/b2/7e/5643bfff5acb6539b18483128fdc0ef2cccc94a5b8fbda130c823e8ed636/watchfiles-1.1.1-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7365b92c2e69ee952902e8f70f3ba6360d0d596d9299d55d7d386df84b6941fb", size = 449919, upload-time = "2025-10-14T15:05:28.701Z" }, - { url = "https://files.pythonhosted.org/packages/51/2e/c410993ba5025a9f9357c376f48976ef0e1b1aefb73b97a5ae01a5972755/watchfiles-1.1.1-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bfff9740c69c0e4ed32416f013f3c45e2ae42ccedd1167ef2d805c000b6c71a5", size = 460845, upload-time = "2025-10-14T15:05:30.064Z" }, - { url = "https://files.pythonhosted.org/packages/8e/a4/2df3b404469122e8680f0fcd06079317e48db58a2da2950fb45020947734/watchfiles-1.1.1-cp314-cp314-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b27cf2eb1dda37b2089e3907d8ea92922b673c0c427886d4edc6b94d8dfe5db3", size = 489027, upload-time = "2025-10-14T15:05:31.064Z" }, - { url = "https://files.pythonhosted.org/packages/ea/84/4587ba5b1f267167ee715b7f66e6382cca6938e0a4b870adad93e44747e6/watchfiles-1.1.1-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:526e86aced14a65a5b0ec50827c745597c782ff46b571dbfe46192ab9e0b3c33", size = 595615, upload-time = "2025-10-14T15:05:32.074Z" }, - { url = "https://files.pythonhosted.org/packages/6a/0f/c6988c91d06e93cd0bb3d4a808bcf32375ca1904609835c3031799e3ecae/watchfiles-1.1.1-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:04e78dd0b6352db95507fd8cb46f39d185cf8c74e4cf1e4fbad1d3df96faf510", size = 474836, upload-time = "2025-10-14T15:05:33.209Z" }, - { url = "https://files.pythonhosted.org/packages/b4/36/ded8aebea91919485b7bbabbd14f5f359326cb5ec218cd67074d1e426d74/watchfiles-1.1.1-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5c85794a4cfa094714fb9c08d4a218375b2b95b8ed1666e8677c349906246c05", size = 455099, upload-time = "2025-10-14T15:05:34.189Z" }, - { url = "https://files.pythonhosted.org/packages/98/e0/8c9bdba88af756a2fce230dd365fab2baf927ba42cd47521ee7498fd5211/watchfiles-1.1.1-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:74d5012b7630714b66be7b7b7a78855ef7ad58e8650c73afc4c076a1f480a8d6", size = 630626, upload-time = "2025-10-14T15:05:35.216Z" }, - { url = "https://files.pythonhosted.org/packages/2a/84/a95db05354bf2d19e438520d92a8ca475e578c647f78f53197f5a2f17aaf/watchfiles-1.1.1-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:8fbe85cb3201c7d380d3d0b90e63d520f15d6afe217165d7f98c9c649654db81", size = 622519, upload-time = "2025-10-14T15:05:36.259Z" }, - { url = "https://files.pythonhosted.org/packages/1d/ce/d8acdc8de545de995c339be67711e474c77d643555a9bb74a9334252bd55/watchfiles-1.1.1-cp314-cp314-win32.whl", hash = "sha256:3fa0b59c92278b5a7800d3ee7733da9d096d4aabcfabb9a928918bd276ef9b9b", size = 272078, upload-time = "2025-10-14T15:05:37.63Z" }, - { url = "https://files.pythonhosted.org/packages/c4/c9/a74487f72d0451524be827e8edec251da0cc1fcf111646a511ae752e1a3d/watchfiles-1.1.1-cp314-cp314-win_amd64.whl", hash = "sha256:c2047d0b6cea13b3316bdbafbfa0c4228ae593d995030fda39089d36e64fc03a", size = 287664, upload-time = "2025-10-14T15:05:38.95Z" }, - { url = "https://files.pythonhosted.org/packages/df/b8/8ac000702cdd496cdce998c6f4ee0ca1f15977bba51bdf07d872ebdfc34c/watchfiles-1.1.1-cp314-cp314-win_arm64.whl", hash = "sha256:842178b126593addc05acf6fce960d28bc5fae7afbaa2c6c1b3a7b9460e5be02", size = 277154, upload-time = "2025-10-14T15:05:39.954Z" }, - { url = "https://files.pythonhosted.org/packages/47/a8/e3af2184707c29f0f14b1963c0aace6529f9d1b8582d5b99f31bbf42f59e/watchfiles-1.1.1-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:88863fbbc1a7312972f1c511f202eb30866370ebb8493aef2812b9ff28156a21", size = 403820, upload-time = "2025-10-14T15:05:40.932Z" }, - { url = "https://files.pythonhosted.org/packages/c0/ec/e47e307c2f4bd75f9f9e8afbe3876679b18e1bcec449beca132a1c5ffb2d/watchfiles-1.1.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:55c7475190662e202c08c6c0f4d9e345a29367438cf8e8037f3155e10a88d5a5", size = 390510, upload-time = "2025-10-14T15:05:41.945Z" }, - { url = "https://files.pythonhosted.org/packages/d5/a0/ad235642118090f66e7b2f18fd5c42082418404a79205cdfca50b6309c13/watchfiles-1.1.1-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3f53fa183d53a1d7a8852277c92b967ae99c2d4dcee2bfacff8868e6e30b15f7", size = 448408, upload-time = "2025-10-14T15:05:43.385Z" }, - { url = "https://files.pythonhosted.org/packages/df/85/97fa10fd5ff3332ae17e7e40e20784e419e28521549780869f1413742e9d/watchfiles-1.1.1-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6aae418a8b323732fa89721d86f39ec8f092fc2af67f4217a2b07fd3e93c6101", size = 458968, upload-time = "2025-10-14T15:05:44.404Z" }, - { url = "https://files.pythonhosted.org/packages/47/c2/9059c2e8966ea5ce678166617a7f75ecba6164375f3b288e50a40dc6d489/watchfiles-1.1.1-cp314-cp314t-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f096076119da54a6080e8920cbdaac3dbee667eb91dcc5e5b78840b87415bd44", size = 488096, upload-time = "2025-10-14T15:05:45.398Z" }, - { url = "https://files.pythonhosted.org/packages/94/44/d90a9ec8ac309bc26db808a13e7bfc0e4e78b6fc051078a554e132e80160/watchfiles-1.1.1-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:00485f441d183717038ed2e887a7c868154f216877653121068107b227a2f64c", size = 596040, upload-time = "2025-10-14T15:05:46.502Z" }, - { url = "https://files.pythonhosted.org/packages/95/68/4e3479b20ca305cfc561db3ed207a8a1c745ee32bf24f2026a129d0ddb6e/watchfiles-1.1.1-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a55f3e9e493158d7bfdb60a1165035f1cf7d320914e7b7ea83fe22c6023b58fc", size = 473847, upload-time = "2025-10-14T15:05:47.484Z" }, - { url = "https://files.pythonhosted.org/packages/4f/55/2af26693fd15165c4ff7857e38330e1b61ab8c37d15dc79118cdba115b7a/watchfiles-1.1.1-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8c91ed27800188c2ae96d16e3149f199d62f86c7af5f5f4d2c61a3ed8cd3666c", size = 455072, upload-time = "2025-10-14T15:05:48.928Z" }, - { url = "https://files.pythonhosted.org/packages/66/1d/d0d200b10c9311ec25d2273f8aad8c3ef7cc7ea11808022501811208a750/watchfiles-1.1.1-cp314-cp314t-musllinux_1_1_aarch64.whl", hash = "sha256:311ff15a0bae3714ffb603e6ba6dbfba4065ab60865d15a6ec544133bdb21099", size = 629104, upload-time = "2025-10-14T15:05:49.908Z" }, - { url = "https://files.pythonhosted.org/packages/e3/bd/fa9bb053192491b3867ba07d2343d9f2252e00811567d30ae8d0f78136fe/watchfiles-1.1.1-cp314-cp314t-musllinux_1_1_x86_64.whl", hash = "sha256:a916a2932da8f8ab582f242c065f5c81bed3462849ca79ee357dd9551b0e9b01", size = 622112, upload-time = "2025-10-14T15:05:50.941Z" }, ] [[package]] @@ -3898,24 +3471,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/9b/67/f926bac29882894669368dc73f4da900fcdf47955d0a0185d60103df5737/websockets-16.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6e5a82b677f8f6f59e8dfc34ec06ca6b5b48bc4fcda346acd093694cc2c24d8f", size = 184920, upload-time = "2026-01-10T09:23:07.492Z" }, { url = "https://files.pythonhosted.org/packages/3c/a1/3d6ccdcd125b0a42a311bcd15a7f705d688f73b2a22d8cf1c0875d35d34a/websockets-16.0-cp313-cp313-win32.whl", hash = "sha256:abf050a199613f64c886ea10f38b47770a65154dc37181bfaff70c160f45315a", size = 178255, upload-time = "2026-01-10T09:23:09.245Z" }, { url = "https://files.pythonhosted.org/packages/6b/ae/90366304d7c2ce80f9b826096a9e9048b4bb760e44d3b873bb272cba696b/websockets-16.0-cp313-cp313-win_amd64.whl", hash = "sha256:3425ac5cf448801335d6fdc7ae1eb22072055417a96cc6b31b3861f455fbc156", size = 178689, upload-time = "2026-01-10T09:23:10.483Z" }, - { url = "https://files.pythonhosted.org/packages/f3/1d/e88022630271f5bd349ed82417136281931e558d628dd52c4d8621b4a0b2/websockets-16.0-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:8cc451a50f2aee53042ac52d2d053d08bf89bcb31ae799cb4487587661c038a0", size = 177406, upload-time = "2026-01-10T09:23:12.178Z" }, - { url = "https://files.pythonhosted.org/packages/f2/78/e63be1bf0724eeb4616efb1ae1c9044f7c3953b7957799abb5915bffd38e/websockets-16.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:daa3b6ff70a9241cf6c7fc9e949d41232d9d7d26fd3522b1ad2b4d62487e9904", size = 175085, upload-time = "2026-01-10T09:23:13.511Z" }, - { url = "https://files.pythonhosted.org/packages/bb/f4/d3c9220d818ee955ae390cf319a7c7a467beceb24f05ee7aaaa2414345ba/websockets-16.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:fd3cb4adb94a2a6e2b7c0d8d05cb94e6f1c81a0cf9dc2694fb65c7e8d94c42e4", size = 175328, upload-time = "2026-01-10T09:23:14.727Z" }, - { url = "https://files.pythonhosted.org/packages/63/bc/d3e208028de777087e6fb2b122051a6ff7bbcca0d6df9d9c2bf1dd869ae9/websockets-16.0-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:781caf5e8eee67f663126490c2f96f40906594cb86b408a703630f95550a8c3e", size = 185044, upload-time = "2026-01-10T09:23:15.939Z" }, - { url = "https://files.pythonhosted.org/packages/ad/6e/9a0927ac24bd33a0a9af834d89e0abc7cfd8e13bed17a86407a66773cc0e/websockets-16.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:caab51a72c51973ca21fa8a18bd8165e1a0183f1ac7066a182ff27107b71e1a4", size = 186279, upload-time = "2026-01-10T09:23:17.148Z" }, - { url = "https://files.pythonhosted.org/packages/b9/ca/bf1c68440d7a868180e11be653c85959502efd3a709323230314fda6e0b3/websockets-16.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:19c4dc84098e523fd63711e563077d39e90ec6702aff4b5d9e344a60cb3c0cb1", size = 185711, upload-time = "2026-01-10T09:23:18.372Z" }, - { url = "https://files.pythonhosted.org/packages/c4/f8/fdc34643a989561f217bb477cbc47a3a07212cbda91c0e4389c43c296ebf/websockets-16.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:a5e18a238a2b2249c9a9235466b90e96ae4795672598a58772dd806edc7ac6d3", size = 184982, upload-time = "2026-01-10T09:23:19.652Z" }, - { url = "https://files.pythonhosted.org/packages/dd/d1/574fa27e233764dbac9c52730d63fcf2823b16f0856b3329fc6268d6ae4f/websockets-16.0-cp314-cp314-win32.whl", hash = "sha256:a069d734c4a043182729edd3e9f247c3b2a4035415a9172fd0f1b71658a320a8", size = 177915, upload-time = "2026-01-10T09:23:21.458Z" }, - { url = "https://files.pythonhosted.org/packages/8a/f1/ae6b937bf3126b5134ce1f482365fde31a357c784ac51852978768b5eff4/websockets-16.0-cp314-cp314-win_amd64.whl", hash = "sha256:c0ee0e63f23914732c6d7e0cce24915c48f3f1512ec1d079ed01fc629dab269d", size = 178381, upload-time = "2026-01-10T09:23:22.715Z" }, - { url = "https://files.pythonhosted.org/packages/06/9b/f791d1db48403e1f0a27577a6beb37afae94254a8c6f08be4a23e4930bc0/websockets-16.0-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:a35539cacc3febb22b8f4d4a99cc79b104226a756aa7400adc722e83b0d03244", size = 177737, upload-time = "2026-01-10T09:23:24.523Z" }, - { url = "https://files.pythonhosted.org/packages/bd/40/53ad02341fa33b3ce489023f635367a4ac98b73570102ad2cdd770dacc9a/websockets-16.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:b784ca5de850f4ce93ec85d3269d24d4c82f22b7212023c974c401d4980ebc5e", size = 175268, upload-time = "2026-01-10T09:23:25.781Z" }, - { url = "https://files.pythonhosted.org/packages/74/9b/6158d4e459b984f949dcbbb0c5d270154c7618e11c01029b9bbd1bb4c4f9/websockets-16.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:569d01a4e7fba956c5ae4fc988f0d4e187900f5497ce46339c996dbf24f17641", size = 175486, upload-time = "2026-01-10T09:23:27.033Z" }, - { url = "https://files.pythonhosted.org/packages/e5/2d/7583b30208b639c8090206f95073646c2c9ffd66f44df967981a64f849ad/websockets-16.0-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:50f23cdd8343b984957e4077839841146f67a3d31ab0d00e6b824e74c5b2f6e8", size = 185331, upload-time = "2026-01-10T09:23:28.259Z" }, - { url = "https://files.pythonhosted.org/packages/45/b0/cce3784eb519b7b5ad680d14b9673a31ab8dcb7aad8b64d81709d2430aa8/websockets-16.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:152284a83a00c59b759697b7f9e9cddf4e3c7861dd0d964b472b70f78f89e80e", size = 186501, upload-time = "2026-01-10T09:23:29.449Z" }, - { url = "https://files.pythonhosted.org/packages/19/60/b8ebe4c7e89fb5f6cdf080623c9d92789a53636950f7abacfc33fe2b3135/websockets-16.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:bc59589ab64b0022385f429b94697348a6a234e8ce22544e3681b2e9331b5944", size = 186062, upload-time = "2026-01-10T09:23:31.368Z" }, - { url = "https://files.pythonhosted.org/packages/88/a8/a080593f89b0138b6cba1b28f8df5673b5506f72879322288b031337c0b8/websockets-16.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:32da954ffa2814258030e5a57bc73a3635463238e797c7375dc8091327434206", size = 185356, upload-time = "2026-01-10T09:23:32.627Z" }, - { url = "https://files.pythonhosted.org/packages/c2/b6/b9afed2afadddaf5ebb2afa801abf4b0868f42f8539bfe4b071b5266c9fe/websockets-16.0-cp314-cp314t-win32.whl", hash = "sha256:5a4b4cc550cb665dd8a47f868c8d04c8230f857363ad3c9caf7a0c3bf8c61ca6", size = 178085, upload-time = "2026-01-10T09:23:33.816Z" }, - { url = "https://files.pythonhosted.org/packages/9f/3e/28135a24e384493fa804216b79a6a6759a38cc4ff59118787b9fb693df93/websockets-16.0-cp314-cp314t-win_amd64.whl", hash = "sha256:b14dc141ed6d2dde437cddb216004bcac6a1df0935d79656387bd41632ba0bbd", size = 178531, upload-time = "2026-01-10T09:23:35.016Z" }, { url = "https://files.pythonhosted.org/packages/6f/28/258ebab549c2bf3e64d2b0217b973467394a9cea8c42f70418ca2c5d0d2e/websockets-16.0-py3-none-any.whl", hash = "sha256:1637db62fad1dc833276dded54215f2c7fa46912301a24bd94d45d46a011ceec", size = 171598, upload-time = "2026-01-10T09:23:45.395Z" }, ] @@ -3961,24 +3516,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/38/ec/67c90a7082f452964b4621e4890e9a490f1add23cdeb7483cc1706743291/wrapt-2.1.1-cp313-cp313t-win32.whl", hash = "sha256:b8af75fe20d381dd5bcc9db2e86a86d7fcfbf615383a7147b85da97c1182225b", size = 59783, upload-time = "2026-02-03T02:11:39.863Z" }, { url = "https://files.pythonhosted.org/packages/ec/08/466afe4855847d8febdfa2c57c87e991fc5820afbdef01a273683dfd15a0/wrapt-2.1.1-cp313-cp313t-win_amd64.whl", hash = "sha256:45c5631c9b6c792b78be2d7352129f776dd72c605be2c3a4e9be346be8376d83", size = 63082, upload-time = "2026-02-03T02:12:09.075Z" }, { url = "https://files.pythonhosted.org/packages/9a/62/60b629463c28b15b1eeadb3a0691e17568622b12aa5bfa7ebe9b514bfbeb/wrapt-2.1.1-cp313-cp313t-win_arm64.whl", hash = "sha256:da815b9263947ac98d088b6414ac83507809a1d385e4632d9489867228d6d81c", size = 60251, upload-time = "2026-02-03T02:11:21.794Z" }, - { url = "https://files.pythonhosted.org/packages/95/a0/1c2396e272f91efe6b16a6a8bce7ad53856c8f9ae4f34ceaa711d63ec9e1/wrapt-2.1.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:9aa1765054245bb01a37f615503290d4e207e3fd59226e78341afb587e9c1236", size = 61311, upload-time = "2026-02-03T02:12:44.41Z" }, - { url = "https://files.pythonhosted.org/packages/b0/9a/d2faba7e61072a7507b5722db63562fdb22f5a24e237d460d18755627f15/wrapt-2.1.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:feff14b63a6d86c1eee33a57f77573649f2550935981625be7ff3cb7342efe05", size = 61805, upload-time = "2026-02-03T02:11:59.905Z" }, - { url = "https://files.pythonhosted.org/packages/db/56/073989deb4b5d7d6e7ea424476a4ae4bda02140f2dbeaafb14ba4864dd60/wrapt-2.1.1-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:81fc5f22d5fcfdbabde96bb3f5379b9f4476d05c6d524d7259dc5dfb501d3281", size = 120308, upload-time = "2026-02-03T02:12:04.46Z" }, - { url = "https://files.pythonhosted.org/packages/d1/b6/84f37261295e38167a29eb82affaf1dc15948dc416925fe2091beee8e4ac/wrapt-2.1.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:951b228ecf66def855d22e006ab9a1fc12535111ae7db2ec576c728f8ddb39e8", size = 122688, upload-time = "2026-02-03T02:11:23.148Z" }, - { url = "https://files.pythonhosted.org/packages/ea/80/32db2eec6671f80c65b7ff175be61bc73d7f5223f6910b0c921bbc4bd11c/wrapt-2.1.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:0ddf582a95641b9a8c8bd643e83f34ecbbfe1b68bc3850093605e469ab680ae3", size = 121115, upload-time = "2026-02-03T02:12:39.068Z" }, - { url = "https://files.pythonhosted.org/packages/49/ef/dcd00383df0cd696614127902153bf067971a5aabcd3c9dcb2d8ef354b2a/wrapt-2.1.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:fc5c500966bf48913f795f1984704e6d452ba2414207b15e1f8c339a059d5b16", size = 119484, upload-time = "2026-02-03T02:11:48.419Z" }, - { url = "https://files.pythonhosted.org/packages/76/29/0630280cdd2bd8f86f35cb6854abee1c9d6d1a28a0c6b6417cd15d378325/wrapt-2.1.1-cp314-cp314-win32.whl", hash = "sha256:4aa4baadb1f94b71151b8e44a0c044f6af37396c3b8bcd474b78b49e2130a23b", size = 58514, upload-time = "2026-02-03T02:11:58.616Z" }, - { url = "https://files.pythonhosted.org/packages/db/19/5bed84f9089ed2065f6aeda5dfc4f043743f642bc871454b261c3d7d322b/wrapt-2.1.1-cp314-cp314-win_amd64.whl", hash = "sha256:860e9d3fd81816a9f4e40812f28be4439ab01f260603c749d14be3c0a1170d19", size = 60763, upload-time = "2026-02-03T02:12:24.553Z" }, - { url = "https://files.pythonhosted.org/packages/e4/cb/b967f2f9669e4249b4fe82e630d2a01bc6b9e362b9b12ed91bbe23ae8df4/wrapt-2.1.1-cp314-cp314-win_arm64.whl", hash = "sha256:3c59e103017a2c1ea0ddf589cbefd63f91081d7ce9d491d69ff2512bb1157e23", size = 59051, upload-time = "2026-02-03T02:11:29.602Z" }, - { url = "https://files.pythonhosted.org/packages/eb/19/6fed62be29f97eb8a56aff236c3f960a4b4a86e8379dc7046a8005901a97/wrapt-2.1.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:9fa7c7e1bee9278fc4f5dd8275bc8d25493281a8ec6c61959e37cc46acf02007", size = 63059, upload-time = "2026-02-03T02:12:06.368Z" }, - { url = "https://files.pythonhosted.org/packages/0a/1c/b757fd0adb53d91547ed8fad76ba14a5932d83dde4c994846a2804596378/wrapt-2.1.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:39c35e12e8215628984248bd9c8897ce0a474be2a773db207eb93414219d8469", size = 63618, upload-time = "2026-02-03T02:12:23.197Z" }, - { url = "https://files.pythonhosted.org/packages/10/fe/e5ae17b1480957c7988d991b93df9f2425fc51f128cf88144d6a18d0eb12/wrapt-2.1.1-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:94ded4540cac9125eaa8ddf5f651a7ec0da6f5b9f248fe0347b597098f8ec14c", size = 152544, upload-time = "2026-02-03T02:11:43.915Z" }, - { url = "https://files.pythonhosted.org/packages/3e/cc/99aed210c6b547b8a6e4cb9d1425e4466727158a6aeb833aa7997e9e08dd/wrapt-2.1.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:da0af328373f97ed9bdfea24549ac1b944096a5a71b30e41c9b8b53ab3eec04a", size = 158700, upload-time = "2026-02-03T02:12:30.684Z" }, - { url = "https://files.pythonhosted.org/packages/81/0e/d442f745f4957944d5f8ad38bc3a96620bfff3562533b87e486e979f3d99/wrapt-2.1.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:4ad839b55f0bf235f8e337ce060572d7a06592592f600f3a3029168e838469d3", size = 155561, upload-time = "2026-02-03T02:11:28.164Z" }, - { url = "https://files.pythonhosted.org/packages/51/ac/9891816280e0018c48f8dfd61b136af7b0dcb4a088895db2531acde5631b/wrapt-2.1.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:0d89c49356e5e2a50fa86b40e0510082abcd0530f926cbd71cf25bee6b9d82d7", size = 150188, upload-time = "2026-02-03T02:11:57.053Z" }, - { url = "https://files.pythonhosted.org/packages/24/98/e2f273b6d70d41f98d0739aa9a269d0b633684a5fb17b9229709375748d4/wrapt-2.1.1-cp314-cp314t-win32.whl", hash = "sha256:f4c7dd22cf7f36aafe772f3d88656559205c3af1b7900adfccb70edeb0d2abc4", size = 60425, upload-time = "2026-02-03T02:11:35.007Z" }, - { url = "https://files.pythonhosted.org/packages/1e/06/b500bfc38a4f82d89f34a13069e748c82c5430d365d9e6b75afb3ab74457/wrapt-2.1.1-cp314-cp314t-win_amd64.whl", hash = "sha256:f76bc12c583ab01e73ba0ea585465a41e48d968f6d1311b4daec4f8654e356e3", size = 63855, upload-time = "2026-02-03T02:12:15.47Z" }, - { url = "https://files.pythonhosted.org/packages/d9/cc/5f6193c32166faee1d2a613f278608e6f3b95b96589d020f0088459c46c9/wrapt-2.1.1-cp314-cp314t-win_arm64.whl", hash = "sha256:7ea74fc0bec172f1ae5f3505b6655c541786a5cabe4bbc0d9723a56ac32eb9b9", size = 60443, upload-time = "2026-02-03T02:11:30.869Z" }, { url = "https://files.pythonhosted.org/packages/c4/da/5a086bf4c22a41995312db104ec2ffeee2cf6accca9faaee5315c790377d/wrapt-2.1.1-py3-none-any.whl", hash = "sha256:3b0f4629eb954394a3d7c7a1c8cca25f0b07cefe6aa8545e862e9778152de5b7", size = 43886, upload-time = "2026-02-03T02:11:45.048Z" }, ]