From 626d91b745084a55d1f80e873430add11b38b84d Mon Sep 17 00:00:00 2001 From: Fin Griffin Date: Fri, 10 Apr 2026 15:16:58 +0100 Subject: [PATCH 01/68] feat: add pilot sweep --- cspell/library-words.txt | 6 + cspell/project-words.txt | 2 + pyproject.toml | 15 +- sweep/infer.py | 179 ++++++++++++++++++++ sweep/master_config.yaml | 100 +++++++++++ sweep/sweep.py | 357 +++++++++++++++++++++++++++++++++++++++ 6 files changed, 658 insertions(+), 1 deletion(-) create mode 100644 sweep/infer.py create mode 100644 sweep/master_config.yaml create mode 100644 sweep/sweep.py diff --git a/cspell/library-words.txt b/cspell/library-words.txt index dc8d8fa..70c464c 100644 --- a/cspell/library-words.txt +++ b/cspell/library-words.txt @@ -9,3 +9,9 @@ ylabel frameon allclose linalg +dotenv +wandb +jinja +adamw +checkpointing +proc diff --git a/cspell/project-words.txt b/cspell/project-words.txt index 43b5325..64ecef8 100644 --- a/cspell/project-words.txt +++ b/cspell/project-words.txt @@ -12,3 +12,5 @@ bonf bonferroni aeiou stylometrically +lora +resumability diff --git a/pyproject.toml b/pyproject.toml index 685ceb0..daff727 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -77,6 +77,9 @@ convention = "pep257" "ARG005", "B007", ] +"sweep/**/*.py" = [ + "ANN401", +] [tool.mypy] python_version = "3.12" @@ -103,7 +106,17 @@ module = [ "matplotlib", "matplotlib.*", "sentence_transformers", - "sentence_transformers.*" + "sentence_transformers.*", + "peft", + "peft.*", + "torch", + "torch.*", + "pandas", + "pandas.*", + "yaml", + "dotenv", + "transformers", + "transformers.*", ] ignore_missing_imports = true diff --git a/sweep/infer.py b/sweep/infer.py new file mode 100644 index 0000000..2c5f09e --- /dev/null +++ b/sweep/infer.py @@ -0,0 +1,179 @@ +"""Inference and test-loss script for a single fine-tuned checkpoint. + +Loads the base model with LoRA adapter, runs greedy generation on the Bush +test split, and computes token-weighted NLL loss over assistant turns only. + +Outputs a single JSON object to stdout:: + + {"eval_loss": float, "completions": [{messages, generated_response}, ...]} + +All progress logs go to stderr so stdout stays clean for sweep.py to parse. + +Usage:: + + python infer.py --checkpoint /path/to/checkpoint-300 +""" + +import argparse +import json +import os +import sys +from typing import Any + +import torch +from datasets import load_dataset +from dotenv import load_dotenv +from peft import PeftModel +from transformers import AutoModelForCausalLM, AutoTokenizer + +load_dotenv() + +BASE_MODEL = "meta-llama/Llama-3.1-8B-Instruct" +DATASET = "AccelerateScience/bush-dataset" +MAX_NEW_TOKENS = 512 + + +def _log(msg: str) -> None: + print(msg, file=sys.stderr, flush=True) + + +def load_model_and_tokenizer( + checkpoint: str, + hf_token: str, +) -> tuple[Any, Any]: + """Load the base model with LoRA adapter from a checkpoint directory. + + :param checkpoint: path to the epoch checkpoint directory. + :param hf_token: HuggingFace API token for private model access. + :returns: (model, tokenizer) tuple ready for inference. + """ + _log(f"Loading tokenizer from {BASE_MODEL}") + tokenizer = AutoTokenizer.from_pretrained(BASE_MODEL, token=hf_token) + if tokenizer.pad_token is None: + tokenizer.pad_token = tokenizer.eos_token + + _log("Loading base model") + base = AutoModelForCausalLM.from_pretrained( + BASE_MODEL, + torch_dtype=torch.bfloat16, + device_map="auto", + token=hf_token, + ) + + _log(f"Loading LoRA adapter from {checkpoint}") + model = PeftModel.from_pretrained(base, checkpoint) + model.eval() + return model, tokenizer + + +def compute_loss_and_generate( + model: Any, + tokenizer: Any, + examples: list[dict[str, Any]], +) -> tuple[float, list[dict[str, Any]]]: + """Compute token-level NLL loss and generate greedy completions. + + Loss is computed only over assistant tokens; system and user tokens + are masked with -100. Generation is greedy for reproducibility. + + :param model: fine-tuned model (base + LoRA adapter). + :param tokenizer: tokenizer matching the base model. + :param examples: list of dataset examples from the test split. + :returns: (token_weighted_avg_loss, completions) tuple. + """ + total_loss = 0.0 + total_tokens = 0 + completions: list[dict[str, Any]] = [] + + for i, example in enumerate(examples): + messages = example["messages"] + prompt_messages = messages[:-1] + + full_ids = tokenizer.apply_chat_template( + messages, + tokenize=True, + return_tensors="pt", + add_generation_prompt=False, + ).to(model.device) + + prompt_ids = tokenizer.apply_chat_template( + prompt_messages, + tokenize=True, + return_tensors="pt", + add_generation_prompt=True, + ).to(model.device) + + prompt_len = prompt_ids.shape[1] + labels = full_ids.clone() + labels[0, :prompt_len] = -100 + + with torch.no_grad(): + out = model(input_ids=full_ids, labels=labels) + + n_tokens = (labels[0] != -100).sum().item() + total_loss += out.loss.item() * n_tokens + total_tokens += n_tokens + + with torch.no_grad(): + generated_ids = model.generate( + prompt_ids, + max_new_tokens=MAX_NEW_TOKENS, + do_sample=False, + pad_token_id=tokenizer.eos_token_id, + ) + + new_token_ids = generated_ids[0, prompt_len:] + response = tokenizer.decode(new_token_ids, skip_special_tokens=True) + + completions.append( + { + "messages": [ + {"role": m["role"], "content": m["content"]} + for m in prompt_messages + ], + "generated_response": response, + } + ) + + if (i + 1) % 20 == 0: + _log(f" {i + 1}/{len(examples)} examples processed") + + eval_loss = total_loss / total_tokens if total_tokens > 0 else float("nan") + return eval_loss, completions + + +def main() -> None: + """Parse arguments, run inference and loss computation, print JSON. + + :returns: None + """ + parser = argparse.ArgumentParser() + parser.add_argument( + "--checkpoint", + required=True, + help="Path to epoch checkpoint directory", + ) + args = parser.parse_args() + + hf_token = ( + os.environ.get("HF_TOKEN") or os.environ.get("HUGGINGFACE_TOKEN") or "" + ) + + model, tokenizer = load_model_and_tokenizer(args.checkpoint, hf_token) + + _log(f"Loading test split from {DATASET}") + ds = load_dataset(DATASET, split="test", token=hf_token) + examples = list(ds) + _log(f"Running inference on {len(examples)} test examples") + + eval_loss, completions = compute_loss_and_generate( + model, tokenizer, examples + ) + + _log(f"eval_loss={eval_loss:.4f} n_completions={len(completions)}") + + print(json.dumps({"eval_loss": eval_loss, "completions": completions})) + + +if __name__ == "__main__": + main() diff --git a/sweep/master_config.yaml b/sweep/master_config.yaml new file mode 100644 index 0000000..e37c894 --- /dev/null +++ b/sweep/master_config.yaml @@ -0,0 +1,100 @@ +# ============================================================================= +# Master sweep configuration +# +# Two top-level sections: +# sweep: defines the hyperparameter grid (read by sweep.py) +# axolotl: shared axolotl settings merged into every per-run config +# +# sweep.py expands the grid into per-run axolotl YAML files, injecting +# per-run values (learning_rate, lora_r, lora_alpha, lora_target_modules, +# micro_batch_size, gradient_accumulation_steps, output_dir, wandb_name) +# on top of the axolotl section below. +# +# Epoch checkpoints are reused: each run trains to epoch 3 and saves a +# checkpoint after each epoch. sweep.py runs inference + eval at each +# checkpoint, yielding 3 data points per training run without re-training. +# Grid: 4 ranks × 3 LRs × 2 batch sizes × 2 target layers = 48 training +# runs → 144 data points. +# +# No validation during training. Test loss is computed post-training from +# each epoch checkpoint and used for the NLL-style correlation analysis. +# ============================================================================= + +# --- Sweep grid ------------------------------------------------------------- +sweep: + learning_rate: [1.0e-4, 5.0e-4, 1.0e-3] + lora_r: [4, 8, 16, 32] + effective_batch_size: [4, 16] # sweep.py fixes micro_batch_size=4 and + # derives gradient_accumulation_steps + target_layers: + - name: attention + modules: [q_proj, k_proj, v_proj, o_proj] + - name: attention_mlp + modules: [q_proj, k_proj, v_proj, o_proj, gate_proj, up_proj, down_proj] + +# lora_alpha is set to 2 * lora_r per run by sweep.py (not swept separately). + +# --- Shared axolotl settings ------------------------------------------------ +axolotl: + + # Model + base_model: meta-llama/Llama-3.1-8B-Instruct + + # Dataset — expects 'train' and 'test' splits only (no validation). + datasets: + - path: AccelerateScience/bush-dataset + type: chat_template + field_messages: messages + roles_to_train: + - assistant + train_on_eos: last + + hf_use_auth_token: true + + # Llama 3.1 Instruct ships with its own Jinja chat template in the + # tokenizer config; axolotl picks it up automatically. + chat_template: tokenizer_default + val_set_size: 0.0 + + # test_datasets is used only for the post-training loss pass (axolotl + # evaluate), not during training. Gives the single eval_loss per run + # used for the NLL-style correlation. + test_datasets: + - path: AccelerateScience/bush-dataset + split: test + type: chat_template + field_messages: messages + + # Sequence + # Bush answers are long (~700-900 tokens including system + question). + # 2048 gives comfortable headroom without wasting VRAM. + sequence_len: 2048 + sample_packing: true + + # Adapter — lora_r, lora_alpha, lora_target_modules injected per run. + adapter: lora + lora_dropout: 0.0 + + # Precision & performance (H100) + bf16: true + tf32: true + flash_attention: true + gradient_checkpointing: true + + # Optimiser + optimizer: adamw_torch_fused + lr_scheduler: cosine + warmup_ratio: 0.03 + weight_decay: 0.0 + + # No evaluation during training — test loss computed post-training only. + eval_strategy: no + + # Keep all epoch checkpoints (up to 3) so sweep.py can run inference at + # each epoch without re-training. 48 training runs × 3 epochs = 144 rows. + save_strategy: epoch + save_total_limit: 3 + + # W&B — wandb_name injected per run by sweep.py. + use_wandb: true + wandb_project: VOICE diff --git a/sweep/sweep.py b/sweep/sweep.py new file mode 100644 index 0000000..b89598e --- /dev/null +++ b/sweep/sweep.py @@ -0,0 +1,357 @@ +"""Sweep orchestrator for the Llama 3.1 8B stylometric pilot. + +Reads master_config.yaml, expands the hyperparameter grid, and for each run: + 1. Writes a per-run axolotl config YAML + 2. Trains with axolotl (always 3 epochs, saving a checkpoint each epoch) + 3. For each epoch checkpoint: runs infer.py to get completions + test loss + 4. Appends 3 rows to outputs/results.parquet + 5. Updates state.json for resumability + +Usage (inside tmux on the H100):: + + python sweep.py + python sweep.py --dry-run # print grid without training +""" + +import argparse +import itertools +import json +import logging +import subprocess +import sys +from pathlib import Path +from typing import Any, cast + +import pandas as pd +import yaml + +# --------------------------------------------------------------------------- +# Paths +# --------------------------------------------------------------------------- +SWEEP_DIR = Path(__file__).parent +CONFIGS_DIR = SWEEP_DIR / "configs" +CHECKPOINTS_DIR = SWEEP_DIR / "checkpoints" +OUTPUTS_DIR = SWEEP_DIR / "outputs" +STATE_FILE = SWEEP_DIR / "state.json" +MASTER_CONFIG = SWEEP_DIR / "master_config.yaml" +LOG_FILE = SWEEP_DIR / "sweep.log" + +# Fixed micro batch size; gradient_accumulation_steps derived from +# the effective_batch_size sweep axis. +MICRO_BATCH_SIZE: int = 4 + +log = logging.getLogger(__name__) + + +# --------------------------------------------------------------------------- +# Logging +# --------------------------------------------------------------------------- +def setup_logging() -> None: + """Configure logging to both stdout and sweep.log. + + :returns: None + """ + fmt = "%(asctime)s [%(levelname)s] %(message)s" + logging.basicConfig( + level=logging.INFO, + format=fmt, + handlers=[ + logging.StreamHandler(sys.stdout), + logging.FileHandler(LOG_FILE), + ], + ) + + +# --------------------------------------------------------------------------- +# Grid expansion +# --------------------------------------------------------------------------- +def expand_grid(sweep_cfg: dict[str, Any]) -> list[dict[str, Any]]: + """Expand the sweep section into a flat list of per-run configs. + + :param sweep_cfg: the ``sweep`` section of master_config.yaml. + :returns: list of run config dicts, one per hyperparameter combination. + """ + runs: list[dict[str, Any]] = [] + combos = itertools.product( + sweep_cfg["learning_rate"], + sweep_cfg["lora_r"], + sweep_cfg["effective_batch_size"], + sweep_cfg["target_layers"], + ) + for idx, (lr, rank, bs, tl) in enumerate(combos): + lr_str = f"{lr:.0e}".replace("e-0", "e-").replace("e+0", "e") + run_name = f"run_{idx:03d}_lr{lr_str}_r{rank}_bs{bs}_{tl['name']}" + runs.append( + { + "run_idx": idx, + "run_name": run_name, + "learning_rate": lr, + "lora_r": rank, + "lora_alpha": rank, + "effective_batch_size": bs, + "target_layers_name": tl["name"], + "lora_target_modules": tl["modules"], + "micro_batch_size": MICRO_BATCH_SIZE, + "gradient_accumulation_steps": bs // MICRO_BATCH_SIZE, + } + ) + return runs + + +# --------------------------------------------------------------------------- +# State management +# --------------------------------------------------------------------------- +def load_state() -> dict[str, Any]: + """Load sweep state from state.json, or return a fresh state dict. + + :returns: state dict with ``completed`` and ``failed`` keys. + """ + if STATE_FILE.exists(): + return cast(dict[str, Any], json.loads(STATE_FILE.read_text())) + return {"completed": [], "failed": {}} + + +def save_state(state: dict[str, Any]) -> None: + """Persist sweep state to state.json. + + :param state: state dict to serialise. + :returns: None + """ + STATE_FILE.write_text(json.dumps(state, indent=2)) + + +# --------------------------------------------------------------------------- +# Per-run axolotl config +# --------------------------------------------------------------------------- +def write_run_config( + run: dict[str, Any], + axolotl_base: dict[str, Any], +) -> Path: + """Merge shared axolotl settings with per-run values and write a YAML. + + :param run: per-run hyperparameter dict from expand_grid. + :param axolotl_base: shared axolotl settings from master_config.yaml. + :returns: path to the written per-run config YAML. + """ + config = dict(axolotl_base) + config.update( + { + "learning_rate": run["learning_rate"], + "lora_r": run["lora_r"], + "lora_alpha": run["lora_alpha"], + "lora_target_modules": run["lora_target_modules"], + "num_epochs": 3, + "micro_batch_size": run["micro_batch_size"], + "gradient_accumulation_steps": ( + run["gradient_accumulation_steps"] + ), + "output_dir": str(CHECKPOINTS_DIR / run["run_name"]), + "wandb_name": run["run_name"], + } + ) + config_path = CONFIGS_DIR / f"{run['run_name']}.yaml" + with open(config_path, "w") as f: + yaml.dump(config, f, default_flow_style=False, sort_keys=False) + return config_path + + +# --------------------------------------------------------------------------- +# Checkpoint discovery +# --------------------------------------------------------------------------- +def find_epoch_checkpoints(run_name: str) -> dict[int, Path]: + """Map epoch numbers to checkpoint paths via trainer_state.json. + + :param run_name: name of the run, used to locate the checkpoint dir. + :returns: dict mapping epoch int to the corresponding checkpoint Path. + """ + checkpoint_dir = CHECKPOINTS_DIR / run_name + epoch_map: dict[int, Path] = {} + for ckpt in sorted(checkpoint_dir.glob("checkpoint-*")): + state_file = ckpt / "trainer_state.json" + if not state_file.exists(): + continue + trainer_state = json.loads(state_file.read_text()) + epoch = round(trainer_state["epoch"]) + epoch_map[epoch] = ckpt + return epoch_map + + +# --------------------------------------------------------------------------- +# Training +# --------------------------------------------------------------------------- +def run_training(config_path: Path) -> None: + """Launch axolotl training for the given config. + + :param config_path: path to the per-run axolotl YAML config. + :returns: None + """ + log.info(f"Training: axolotl train {config_path.name}") + subprocess.run( + ["python", "-m", "axolotl.cli.train", str(config_path)], + check=True, + ) + + +# --------------------------------------------------------------------------- +# Inference + loss +# --------------------------------------------------------------------------- +def run_inference(checkpoint_path: Path) -> dict[str, Any]: + """Run infer.py for a checkpoint and return eval_loss + completions. + + :param checkpoint_path: path to the epoch checkpoint directory. + :returns: dict with ``eval_loss`` (float) and ``completions`` (list). + """ + proc = subprocess.run( + [ + sys.executable, + str(SWEEP_DIR / "infer.py"), + "--checkpoint", + str(checkpoint_path), + ], + capture_output=True, + text=True, + check=True, + ) + if proc.stderr: + for line in proc.stderr.strip().splitlines(): + log.info(f" [infer] {line}") + return cast(dict[str, Any], json.loads(proc.stdout)) + + +# --------------------------------------------------------------------------- +# Output +# --------------------------------------------------------------------------- +def append_results(rows: list[dict[str, Any]]) -> None: + """Atomically append rows to outputs/results.parquet. + + :param rows: list of result row dicts to append. + :returns: None + """ + out_path = OUTPUTS_DIR / "results.parquet" + new_df = pd.DataFrame(rows) + if out_path.exists(): + existing = pd.read_parquet(out_path) + new_df = pd.concat([existing, new_df], ignore_index=True) + tmp = out_path.with_suffix(".tmp.parquet") + new_df.to_parquet(tmp, index=False) + tmp.rename(out_path) + + +# --------------------------------------------------------------------------- +# Per-run helpers (private — extracted to keep main() complexity low) +# --------------------------------------------------------------------------- +def _collect_rows( + run: dict[str, Any], + epoch_map: dict[int, Path], +) -> list[dict[str, Any]]: + rows: list[dict[str, Any]] = [] + for epoch in sorted(epoch_map): + ckpt_path = epoch_map[epoch] + log.info(f" [INFER] epoch {epoch} — {ckpt_path.name}") + result = run_inference(ckpt_path) + loss_val = result["eval_loss"] + n_comp = len(result["completions"]) + rows.append( + { + "run_name": run["run_name"], + "epoch": epoch, + "learning_rate": run["learning_rate"], + "lora_r": run["lora_r"], + "lora_alpha": run["lora_alpha"], + "effective_batch_size": run["effective_batch_size"], + "target_layers": run["target_layers_name"], + "eval_loss": loss_val, + "completions": json.dumps(result["completions"]), + } + ) + log.info(f" eval_loss={loss_val:.4f} n_completions={n_comp}") + return rows + + +def _execute_run( + run: dict[str, Any], + axolotl_base: dict[str, Any], + state: dict[str, Any], +) -> None: + name = run["run_name"] + try: + config_path = write_run_config(run, axolotl_base) + run_training(config_path) + epoch_map = find_epoch_checkpoints(name) + if not epoch_map: + raise RuntimeError("No epoch checkpoints found after training") + log.info(f"Found checkpoints for epochs: {sorted(epoch_map)}") + rows = _collect_rows(run, epoch_map) + append_results(rows) + state["completed"].append(name) + state["failed"].pop(name, None) + save_state(state) + log.info(f"[DONE] {name}") + except Exception as exc: # noqa: BLE001 + log.error(f"[FAIL] {name}: {exc}") + state["failed"][name] = str(exc) + save_state(state) + + +# --------------------------------------------------------------------------- +# Main +# --------------------------------------------------------------------------- +def main() -> None: + """Parse arguments, expand the grid, and run the sweep. + + :returns: None + """ + parser = argparse.ArgumentParser() + parser.add_argument( + "--dry-run", + action="store_true", + help="Print the full grid without training", + ) + args = parser.parse_args() + + setup_logging() + + CONFIGS_DIR.mkdir(exist_ok=True) + CHECKPOINTS_DIR.mkdir(exist_ok=True) + OUTPUTS_DIR.mkdir(exist_ok=True) + + master = yaml.safe_load(MASTER_CONFIG.read_text()) + runs = expand_grid(master["sweep"]) + axolotl_base = master["axolotl"] + + n_runs = len(runs) + log.info(f"Grid: {n_runs} training runs -> {n_runs * 3} data points") + + if args.dry_run: + for r in runs: + log.info( + f" {r['run_name']} lr={r['learning_rate']}" + f" r={r['lora_r']} bs={r['effective_batch_size']}" + f" layers={r['target_layers_name']}" + ) + return + + state = load_state() + log.info( + f"Resuming: {len(state['completed'])} completed, " + f"{len(state['failed'])} failed" + ) + + for run in runs: + name = run["run_name"] + if name in state["completed"]: + log.info(f"[SKIP] {name}") + continue + log.info(f"\n{'=' * 60}") + log.info(f"[START] {name}") + log.info(f"{'=' * 60}") + _execute_run(run, axolotl_base, state) + + n_done = len(state["completed"]) + log.info(f"\nSweep complete: {n_done}/{n_runs} runs succeeded.") + if state["failed"]: + log.warning(f"Failed runs: {list(state['failed'])}") + + +if __name__ == "__main__": + main() From 530f45f1374eff869e21fb840b2e63eeb45fa124 Mon Sep 17 00:00:00 2001 From: Fin Griffin Date: Fri, 10 Apr 2026 15:20:34 +0100 Subject: [PATCH 02/68] feat: add README --- cspell/library-words.txt | 2 ++ sweep/README.md | 76 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 78 insertions(+) create mode 100644 sweep/README.md diff --git a/cspell/library-words.txt b/cspell/library-words.txt index 70c464c..ed50a9b 100644 --- a/cspell/library-words.txt +++ b/cspell/library-words.txt @@ -15,3 +15,5 @@ jinja adamw checkpointing proc +peft +pyyaml diff --git a/sweep/README.md b/sweep/README.md new file mode 100644 index 0000000..55ec0c4 --- /dev/null +++ b/sweep/README.md @@ -0,0 +1,76 @@ +# Llama 3.1 8B Stylometric Pilot Sweep + +48 training runs × 3 epoch checkpoints = 144 data points across a grid of +LoRA rank, learning rate, batch size, and target layer configurations. + +## Setup on the H100 + +**1. Clone the repo and install dependencies** + +```bash +git clone && cd voice +pip install axolotl accelerate peft transformers datasets pandas pyyaml python-dotenv wandb +``` + +**2. Set environment variables** + +Create a `.env` file in the `sweep/` directory (or export directly): + +```bash +HF_TOKEN=hf_... +WANDB_API_KEY=... +``` + +**3. Log in to Hugging Face and W&B** + +```bash +huggingface-cli login +wandb login +``` + +**4. Verify the grid looks correct** + +```bash +cd sweep +python sweep.py --dry-run +``` + +## Running the sweep + +Start a tmux session so the sweep survives SSH disconnection: + +```bash +tmux new -s sweep +cd sweep +python sweep.py +# Ctrl+B, D → detach (safe to close laptop) +# tmux attach -t sweep → reconnect later +``` + +Progress is logged to `sweep.log` and to the W&B project `VOICE`. + +## Resuming after failure + +`state.json` tracks completed and failed runs. Simply re-run `sweep.py` and +it will skip completed runs and retry failed ones: + +```bash +python sweep.py +``` + +## Outputs + +Results are written to `outputs/results.parquet` after each training run +completes. Schema mirrors `pilot_results.parquet` used in the notebooks: + +| Column | Description | +|---|---| +| `run_name` | Unique run identifier | +| `epoch` | Epoch number (1, 2, or 3) | +| `learning_rate` | LoRA learning rate | +| `lora_r` | LoRA rank | +| `lora_alpha` | LoRA alpha (= rank) | +| `effective_batch_size` | Effective batch size | +| `target_layers` | `attention` or `attention_mlp` | +| `eval_loss` | Test NLL loss at this checkpoint | +| `completions` | JSON list of generated responses on the test split | From 1b75325e2eeacd4e776a8300e96dc6fe06d3d4e2 Mon Sep 17 00:00:00 2001 From: Fin Griffin Date: Fri, 10 Apr 2026 15:44:37 +0100 Subject: [PATCH 03/68] chore: update README to select single gpu --- sweep/README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sweep/README.md b/sweep/README.md index 55ec0c4..92002df 100644 --- a/sweep/README.md +++ b/sweep/README.md @@ -32,7 +32,7 @@ wandb login ```bash cd sweep -python sweep.py --dry-run +CUDA_VISIBLE_DEVICES=3 python sweep.py --dry-run ``` ## Running the sweep @@ -42,7 +42,7 @@ Start a tmux session so the sweep survives SSH disconnection: ```bash tmux new -s sweep cd sweep -python sweep.py +CUDA_VISIBLE_DEVICES=3 python sweep.py # Ctrl+B, D → detach (safe to close laptop) # tmux attach -t sweep → reconnect later ``` @@ -55,7 +55,7 @@ Progress is logged to `sweep.log` and to the W&B project `VOICE`. it will skip completed runs and retry failed ones: ```bash -python sweep.py +CUDA_VISIBLE_DEVICES=3 python sweep.py ``` ## Outputs From dfa44e84660e8efc0be3f4aed49910d4f064a8d0 Mon Sep 17 00:00:00 2001 From: Fin Griffin Date: Mon, 13 Apr 2026 09:00:53 +0100 Subject: [PATCH 04/68] chore: migrate all sweep deps to uv --- pyproject.toml | 12 +- sweep/README.md | 14 +- sweep/sweep.py | 15 +- uv.lock | 3275 ++++++++++++++++++++++++++++++++++------------- 4 files changed, 2398 insertions(+), 918 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index daff727..0d3cad6 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -3,17 +3,27 @@ name = "voice" version = "0.1.0" description = "Fine-tuning for stylistic fidelity" readme = "README.md" -requires-python = ">=3.12" +requires-python = ">=3.12,<3.14" dependencies = [ + "accelerate", + "axolotl>=0.16.1 ; sys_platform == 'linux'", "datasets>=4.5.0", "dotenv>=0.9.9", "huggingface-hub>=1.4.1", "matplotlib>=3.10.8", + "pandas", + "peft", + "pyyaml>=6.0.3", "scipy>=1.17.0", "seaborn>=0.13.2", "sentence-transformers>=5.3.0", + "transformers", + "wandb>=0.25.1", ] +[tool.uv] +required-environments = ["sys_platform == 'linux'"] + [build-system] requires = ["setuptools>=68", "wheel"] build-backend = "setuptools.build_meta" diff --git a/sweep/README.md b/sweep/README.md index 92002df..e74af0e 100644 --- a/sweep/README.md +++ b/sweep/README.md @@ -9,7 +9,7 @@ LoRA rank, learning rate, batch size, and target layer configurations. ```bash git clone && cd voice -pip install axolotl accelerate peft transformers datasets pandas pyyaml python-dotenv wandb +uv sync ``` **2. Set environment variables** @@ -24,15 +24,15 @@ WANDB_API_KEY=... **3. Log in to Hugging Face and W&B** ```bash -huggingface-cli login -wandb login +uv run huggingface-cli login +uv run wandb login ``` **4. Verify the grid looks correct** ```bash cd sweep -CUDA_VISIBLE_DEVICES=3 python sweep.py --dry-run +uv run python sweep.py --dry-run ``` ## Running the sweep @@ -42,7 +42,9 @@ Start a tmux session so the sweep survives SSH disconnection: ```bash tmux new -s sweep cd sweep -CUDA_VISIBLE_DEVICES=3 python sweep.py +uv run python sweep.py +# Override GPU if needed (default is device 3): +# uv run python sweep.py --device 0 # Ctrl+B, D → detach (safe to close laptop) # tmux attach -t sweep → reconnect later ``` @@ -55,7 +57,7 @@ Progress is logged to `sweep.log` and to the W&B project `VOICE`. it will skip completed runs and retry failed ones: ```bash -CUDA_VISIBLE_DEVICES=3 python sweep.py +uv run python sweep.py ``` ## Outputs diff --git a/sweep/sweep.py b/sweep/sweep.py index b89598e..df5052d 100644 --- a/sweep/sweep.py +++ b/sweep/sweep.py @@ -9,14 +9,16 @@ Usage (inside tmux on the H100):: - python sweep.py - python sweep.py --dry-run # print grid without training + uv run python sweep.py + uv run python sweep.py --dry-run # print grid without training + uv run python sweep.py --device 0 # override GPU (default: 3) """ import argparse import itertools import json import logging +import os import subprocess import sys from pathlib import Path @@ -187,7 +189,7 @@ def run_training(config_path: Path) -> None: """ log.info(f"Training: axolotl train {config_path.name}") subprocess.run( - ["python", "-m", "axolotl.cli.train", str(config_path)], + [sys.executable, "-m", "axolotl.cli.train", str(config_path)], check=True, ) @@ -307,8 +309,15 @@ def main() -> None: action="store_true", help="Print the full grid without training", ) + parser.add_argument( + "--device", + default="3", + help="CUDA device index (default: 3)", + ) args = parser.parse_args() + os.environ.setdefault("CUDA_VISIBLE_DEVICES", args.device) + setup_logging() CONFIGS_DIR.mkdir(exist_ok=True) diff --git a/uv.lock b/uv.lock index dd1c64b..ce89714 100644 --- a/uv.lock +++ b/uv.lock @@ -1,13 +1,87 @@ version = 1 revision = 3 -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.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'", +] +required-markers = [ + "sys_platform == 'linux'", +] + +[[package]] +name = "absl-py" +version = "2.4.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/64/c7/8de93764ad66968d19329a7e0c147a2bb3c7054c554d4a119111b8f9440f/absl_py-2.4.0.tar.gz", hash = "sha256:8c6af82722b35cf71e0f4d1d47dcaebfff286e27110a99fc359349b247dfb5d4", size = 116543, upload-time = "2026-01-28T10:17:05.322Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/18/a6/907a406bb7d359e6a63f99c313846d9eec4f7e6f7437809e03aa00fa3074/absl_py-2.4.0-py3-none-any.whl", hash = "sha256:88476fd881ca8aab94ffa78b7b6c632a782ab3ba1cd19c9bd423abc4fb4cd28d", size = 135750, upload-time = "2026-01-28T10:17:04.19Z" }, +] + +[[package]] +name = "accelerate" +version = "1.13.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "huggingface-hub" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.13'" }, + { name = "numpy", version = "2.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.13'" }, + { name = "packaging" }, + { name = "psutil" }, + { name = "pyyaml" }, + { name = "safetensors" }, + { name = "torch" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ca/14/787e5498cd062640f0f3d92ef4ae4063174f76f9afd29d13fc52a319daae/accelerate-1.13.0.tar.gz", hash = "sha256:d631b4e0f5b3de4aff2d7e9e6857d164810dfc3237d54d017f075122d057b236", size = 402835, upload-time = "2026-03-04T19:34:12.359Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7e/46/02ac5e262d4af18054b3e922b2baedbb2a03289ee792162de60a865defc5/accelerate-1.13.0-py3-none-any.whl", hash = "sha256:cf1a3efb96c18f7b152eb0fa7490f3710b19c3f395699358f08decca2b8b62e0", size = 383744, upload-time = "2026-03-04T19:34:10.313Z" }, +] + +[[package]] +name = "addict" +version = "2.4.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/85/ef/fd7649da8af11d93979831e8f1f8097e85e82d5bfeabc8c68b39175d8e75/addict-2.4.0.tar.gz", hash = "sha256:b3b2210e0e067a281f5646c8c5db92e99b7231ea8b0eb5f74dbdf9e259d4e494", size = 9186, upload-time = "2020-11-21T16:21:31.416Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6a/00/b08f23b7d7e1e14ce01419a467b583edbb93c6cdb8654e54a9cc579cd61f/addict-2.4.0-py3-none-any.whl", hash = "sha256:249bb56bbfd3cdc2a004ea0ff4c2b6ddc84d53bc2194761636eb314d5cfa5dfc", size = 3832, upload-time = "2020-11-21T16:21:29.588Z" }, +] + +[[package]] +name = "adlfs" +version = "2026.4.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "azure-core", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "azure-datalake-store", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "azure-identity", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "azure-storage-blob", extra = ["aio"], marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "fsspec", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ca/51/c766cea8a00f84f224aa672ea0f20e4f24091eb90ce56104accd003c7405/adlfs-2026.4.0.tar.gz", hash = "sha256:84c6f0fc28403629ef6d6d90f0d1a35a3302179f65ce4686c939a42ad0496d8d", size = 54730, upload-time = "2026-04-09T17:35:54.837Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/71/45/6e6061498d2cd7fecfcaa6e17c2057bfcac3578c656b9646c343c7021c6e/adlfs-2026.4.0-py3-none-any.whl", hash = "sha256:a12a420583ae2d86d1b02902db147b7da5cf3e6eef40ee53024756a781d5d84f", size = 46249, upload-time = "2026-04-09T17:35:53.891Z" }, +] + +[[package]] +name = "aiobotocore" +version = "2.26.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "aiohttp", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "aioitertools", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "botocore", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "jmespath", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "multidict", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "python-dateutil", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "wrapt", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/4d/f8/99fa90d9c25b78292899fd4946fce97b6353838b5ecc139ad8ba1436e70c/aiobotocore-2.26.0.tar.gz", hash = "sha256:50567feaf8dfe2b653570b4491f5bc8c6e7fb9622479d66442462c021db4fadc", size = 122026, upload-time = "2025-11-28T07:54:59.956Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b7/58/3bf0b7d474607dc7fd67dd1365c4e0f392c8177eaf4054e5ddee3ebd53b5/aiobotocore-2.26.0-py3-none-any.whl", hash = "sha256:a793db51c07930513b74ea7a95bd79aaa42f545bdb0f011779646eafa216abec", size = 87333, upload-time = "2025-11-28T07:54:58.457Z" }, ] [[package]] @@ -68,40 +142,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/e8/35/4a3daeb8b9fab49240d21c04d50732313295e4bd813a465d840236dd0ce1/aiohttp-3.13.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8057c98e0c8472d8846b9c79f56766bcc57e3e8ac7bfd510482332366c56c591", size = 1721120, upload-time = "2026-01-03T17:31:12.575Z" }, { url = "https://files.pythonhosted.org/packages/bc/9f/d643bb3c5fb99547323e635e251c609fbbc660d983144cfebec529e09264/aiohttp-3.13.3-cp313-cp313-win32.whl", hash = "sha256:1449ceddcdbcf2e0446957863af03ebaaa03f94c090f945411b61269e2cb5daf", size = 427383, upload-time = "2026-01-03T17:31:14.382Z" }, { url = "https://files.pythonhosted.org/packages/4e/f1/ab0395f8a79933577cdd996dd2f9aa6014af9535f65dddcf88204682fe62/aiohttp-3.13.3-cp313-cp313-win_amd64.whl", hash = "sha256:693781c45a4033d31d4187d2436f5ac701e7bbfe5df40d917736108c1cc7436e", size = 453899, upload-time = "2026-01-03T17:31:15.958Z" }, - { url = "https://files.pythonhosted.org/packages/99/36/5b6514a9f5d66f4e2597e40dea2e3db271e023eb7a5d22defe96ba560996/aiohttp-3.13.3-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:ea37047c6b367fd4bd632bff8077449b8fa034b69e812a18e0132a00fae6e808", size = 737238, upload-time = "2026-01-03T17:31:17.909Z" }, - { url = "https://files.pythonhosted.org/packages/f7/49/459327f0d5bcd8c6c9ca69e60fdeebc3622861e696490d8674a6d0cb90a6/aiohttp-3.13.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:6fc0e2337d1a4c3e6acafda6a78a39d4c14caea625124817420abceed36e2415", size = 492292, upload-time = "2026-01-03T17:31:19.919Z" }, - { url = "https://files.pythonhosted.org/packages/e8/0b/b97660c5fd05d3495b4eb27f2d0ef18dc1dc4eff7511a9bf371397ff0264/aiohttp-3.13.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c685f2d80bb67ca8c3837823ad76196b3694b0159d232206d1e461d3d434666f", size = 493021, upload-time = "2026-01-03T17:31:21.636Z" }, - { url = "https://files.pythonhosted.org/packages/54/d4/438efabdf74e30aeceb890c3290bbaa449780583b1270b00661126b8aae4/aiohttp-3.13.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:48e377758516d262bde50c2584fc6c578af272559c409eecbdd2bae1601184d6", size = 1717263, upload-time = "2026-01-03T17:31:23.296Z" }, - { url = "https://files.pythonhosted.org/packages/71/f2/7bddc7fd612367d1459c5bcf598a9e8f7092d6580d98de0e057eb42697ad/aiohttp-3.13.3-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:34749271508078b261c4abb1767d42b8d0c0cc9449c73a4df494777dc55f0687", size = 1669107, upload-time = "2026-01-03T17:31:25.334Z" }, - { url = "https://files.pythonhosted.org/packages/00/5a/1aeaecca40e22560f97610a329e0e5efef5e0b5afdf9f857f0d93839ab2e/aiohttp-3.13.3-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:82611aeec80eb144416956ec85b6ca45a64d76429c1ed46ae1b5f86c6e0c9a26", size = 1760196, upload-time = "2026-01-03T17:31:27.394Z" }, - { url = "https://files.pythonhosted.org/packages/f8/f8/0ff6992bea7bd560fc510ea1c815f87eedd745fe035589c71ce05612a19a/aiohttp-3.13.3-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:2fff83cfc93f18f215896e3a190e8e5cb413ce01553901aca925176e7568963a", size = 1843591, upload-time = "2026-01-03T17:31:29.238Z" }, - { url = "https://files.pythonhosted.org/packages/e3/d1/e30e537a15f53485b61f5be525f2157da719819e8377298502aebac45536/aiohttp-3.13.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bbe7d4cecacb439e2e2a8a1a7b935c25b812af7a5fd26503a66dadf428e79ec1", size = 1720277, upload-time = "2026-01-03T17:31:31.053Z" }, - { url = "https://files.pythonhosted.org/packages/84/45/23f4c451d8192f553d38d838831ebbc156907ea6e05557f39563101b7717/aiohttp-3.13.3-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:b928f30fe49574253644b1ca44b1b8adbd903aa0da4b9054a6c20fc7f4092a25", size = 1548575, upload-time = "2026-01-03T17:31:32.87Z" }, - { url = "https://files.pythonhosted.org/packages/6a/ed/0a42b127a43712eda7807e7892c083eadfaf8429ca8fb619662a530a3aab/aiohttp-3.13.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7b5e8fe4de30df199155baaf64f2fcd604f4c678ed20910db8e2c66dc4b11603", size = 1679455, upload-time = "2026-01-03T17:31:34.76Z" }, - { url = "https://files.pythonhosted.org/packages/2e/b5/c05f0c2b4b4fe2c9d55e73b6d3ed4fd6c9dc2684b1d81cbdf77e7fad9adb/aiohttp-3.13.3-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:8542f41a62bcc58fc7f11cf7c90e0ec324ce44950003feb70640fc2a9092c32a", size = 1687417, upload-time = "2026-01-03T17:31:36.699Z" }, - { url = "https://files.pythonhosted.org/packages/c9/6b/915bc5dad66aef602b9e459b5a973529304d4e89ca86999d9d75d80cbd0b/aiohttp-3.13.3-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:5e1d8c8b8f1d91cd08d8f4a3c2b067bfca6ec043d3ff36de0f3a715feeedf926", size = 1729968, upload-time = "2026-01-03T17:31:38.622Z" }, - { url = "https://files.pythonhosted.org/packages/11/3b/e84581290a9520024a08640b63d07673057aec5ca548177a82026187ba73/aiohttp-3.13.3-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:90455115e5da1c3c51ab619ac57f877da8fd6d73c05aacd125c5ae9819582aba", size = 1545690, upload-time = "2026-01-03T17:31:40.57Z" }, - { url = "https://files.pythonhosted.org/packages/f5/04/0c3655a566c43fd647c81b895dfe361b9f9ad6d58c19309d45cff52d6c3b/aiohttp-3.13.3-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:042e9e0bcb5fba81886c8b4fbb9a09d6b8a00245fd8d88e4d989c1f96c74164c", size = 1746390, upload-time = "2026-01-03T17:31:42.857Z" }, - { url = "https://files.pythonhosted.org/packages/1f/53/71165b26978f719c3419381514c9690bd5980e764a09440a10bb816ea4ab/aiohttp-3.13.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:2eb752b102b12a76ca02dff751a801f028b4ffbbc478840b473597fc91a9ed43", size = 1702188, upload-time = "2026-01-03T17:31:44.984Z" }, - { url = "https://files.pythonhosted.org/packages/29/a7/cbe6c9e8e136314fa1980da388a59d2f35f35395948a08b6747baebb6aa6/aiohttp-3.13.3-cp314-cp314-win32.whl", hash = "sha256:b556c85915d8efaed322bf1bdae9486aa0f3f764195a0fb6ee962e5c71ef5ce1", size = 433126, upload-time = "2026-01-03T17:31:47.463Z" }, - { url = "https://files.pythonhosted.org/packages/de/56/982704adea7d3b16614fc5936014e9af85c0e34b58f9046655817f04306e/aiohttp-3.13.3-cp314-cp314-win_amd64.whl", hash = "sha256:9bf9f7a65e7aa20dd764151fb3d616c81088f91f8df39c3893a536e279b4b984", size = 459128, upload-time = "2026-01-03T17:31:49.2Z" }, - { url = "https://files.pythonhosted.org/packages/6c/2a/3c79b638a9c3d4658d345339d22070241ea341ed4e07b5ac60fb0f418003/aiohttp-3.13.3-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:05861afbbec40650d8a07ea324367cb93e9e8cc7762e04dd4405df99fa65159c", size = 769512, upload-time = "2026-01-03T17:31:51.134Z" }, - { url = "https://files.pythonhosted.org/packages/29/b9/3e5014d46c0ab0db8707e0ac2711ed28c4da0218c358a4e7c17bae0d8722/aiohttp-3.13.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:2fc82186fadc4a8316768d61f3722c230e2c1dcab4200d52d2ebdf2482e47592", size = 506444, upload-time = "2026-01-03T17:31:52.85Z" }, - { url = "https://files.pythonhosted.org/packages/90/03/c1d4ef9a054e151cd7839cdc497f2638f00b93cbe8043983986630d7a80c/aiohttp-3.13.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:0add0900ff220d1d5c5ebbf99ed88b0c1bbf87aa7e4262300ed1376a6b13414f", size = 510798, upload-time = "2026-01-03T17:31:54.91Z" }, - { url = "https://files.pythonhosted.org/packages/ea/76/8c1e5abbfe8e127c893fe7ead569148a4d5a799f7cf958d8c09f3eedf097/aiohttp-3.13.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:568f416a4072fbfae453dcf9a99194bbb8bdeab718e08ee13dfa2ba0e4bebf29", size = 1868835, upload-time = "2026-01-03T17:31:56.733Z" }, - { url = "https://files.pythonhosted.org/packages/8e/ac/984c5a6f74c363b01ff97adc96a3976d9c98940b8969a1881575b279ac5d/aiohttp-3.13.3-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:add1da70de90a2569c5e15249ff76a631ccacfe198375eead4aadf3b8dc849dc", size = 1720486, upload-time = "2026-01-03T17:31:58.65Z" }, - { url = "https://files.pythonhosted.org/packages/b2/9a/b7039c5f099c4eb632138728828b33428585031a1e658d693d41d07d89d1/aiohttp-3.13.3-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:10b47b7ba335d2e9b1239fa571131a87e2d8ec96b333e68b2a305e7a98b0bae2", size = 1847951, upload-time = "2026-01-03T17:32:00.989Z" }, - { url = "https://files.pythonhosted.org/packages/3c/02/3bec2b9a1ba3c19ff89a43a19324202b8eb187ca1e928d8bdac9bbdddebd/aiohttp-3.13.3-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:3dd4dce1c718e38081c8f35f323209d4c1df7d4db4bab1b5c88a6b4d12b74587", size = 1941001, upload-time = "2026-01-03T17:32:03.122Z" }, - { url = "https://files.pythonhosted.org/packages/37/df/d879401cedeef27ac4717f6426c8c36c3091c6e9f08a9178cc87549c537f/aiohttp-3.13.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:34bac00a67a812570d4a460447e1e9e06fae622946955f939051e7cc895cfab8", size = 1797246, upload-time = "2026-01-03T17:32:05.255Z" }, - { url = "https://files.pythonhosted.org/packages/8d/15/be122de1f67e6953add23335c8ece6d314ab67c8bebb3f181063010795a7/aiohttp-3.13.3-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:a19884d2ee70b06d9204b2727a7b9f983d0c684c650254679e716b0b77920632", size = 1627131, upload-time = "2026-01-03T17:32:07.607Z" }, - { url = "https://files.pythonhosted.org/packages/12/12/70eedcac9134cfa3219ab7af31ea56bc877395b1ac30d65b1bc4b27d0438/aiohttp-3.13.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:5f8ca7f2bb6ba8348a3614c7918cc4bb73268c5ac2a207576b7afea19d3d9f64", size = 1795196, upload-time = "2026-01-03T17:32:09.59Z" }, - { url = "https://files.pythonhosted.org/packages/32/11/b30e1b1cd1f3054af86ebe60df96989c6a414dd87e27ad16950eee420bea/aiohttp-3.13.3-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:b0d95340658b9d2f11d9697f59b3814a9d3bb4b7a7c20b131df4bcef464037c0", size = 1782841, upload-time = "2026-01-03T17:32:11.445Z" }, - { url = "https://files.pythonhosted.org/packages/88/0d/d98a9367b38912384a17e287850f5695c528cff0f14f791ce8ee2e4f7796/aiohttp-3.13.3-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:a1e53262fd202e4b40b70c3aff944a8155059beedc8a89bba9dc1f9ef06a1b56", size = 1795193, upload-time = "2026-01-03T17:32:13.705Z" }, - { url = "https://files.pythonhosted.org/packages/43/a5/a2dfd1f5ff5581632c7f6a30e1744deda03808974f94f6534241ef60c751/aiohttp-3.13.3-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:d60ac9663f44168038586cab2157e122e46bdef09e9368b37f2d82d354c23f72", size = 1621979, upload-time = "2026-01-03T17:32:15.965Z" }, - { url = "https://files.pythonhosted.org/packages/fa/f0/12973c382ae7c1cccbc4417e129c5bf54c374dfb85af70893646e1f0e749/aiohttp-3.13.3-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:90751b8eed69435bac9ff4e3d2f6b3af1f57e37ecb0fbeee59c0174c9e2d41df", size = 1822193, upload-time = "2026-01-03T17:32:18.219Z" }, - { url = "https://files.pythonhosted.org/packages/3c/5f/24155e30ba7f8c96918af1350eb0663e2430aad9e001c0489d89cd708ab1/aiohttp-3.13.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:fc353029f176fd2b3ec6cfc71be166aba1936fe5d73dd1992ce289ca6647a9aa", size = 1769801, upload-time = "2026-01-03T17:32:20.25Z" }, - { url = "https://files.pythonhosted.org/packages/eb/f8/7314031ff5c10e6ece114da79b338ec17eeff3a079e53151f7e9f43c4723/aiohttp-3.13.3-cp314-cp314t-win32.whl", hash = "sha256:2e41b18a58da1e474a057b3d35248d8320029f61d70a37629535b16a0c8f3767", size = 466523, upload-time = "2026-01-03T17:32:22.215Z" }, - { url = "https://files.pythonhosted.org/packages/b4/63/278a98c715ae467624eafe375542d8ba9b4383a016df8fdefe0ae28382a7/aiohttp-3.13.3-cp314-cp314t-win_amd64.whl", hash = "sha256:44531a36aa2264a1860089ffd4dce7baf875ee5a6079d5fb42e261c704ef7344", size = 499694, upload-time = "2026-01-03T17:32:24.546Z" }, +] + +[[package]] +name = "aioitertools" +version = "0.13.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/fd/3c/53c4a17a05fb9ea2313ee1777ff53f5e001aefd5cc85aa2f4c2d982e1e38/aioitertools-0.13.0.tar.gz", hash = "sha256:620bd241acc0bbb9ec819f1ab215866871b4bbd1f73836a55f799200ee86950c", size = 19322, upload-time = "2025-11-06T22:17:07.609Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/10/a1/510b0a7fadc6f43a6ce50152e69dbd86415240835868bb0bd9b5b88b1e06/aioitertools-0.13.0-py3-none-any.whl", hash = "sha256:0be0292b856f08dfac90e31f4739432f4cb6d7520ab9eb73e143f4f2fa5259be", size = 24182, upload-time = "2025-11-06T22:17:06.502Z" }, ] [[package]] @@ -126,6 +175,24 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/1e/d3/26bf1008eb3d2daa8ef4cacc7f3bfdc11818d111f7e2d0201bc6e3b49d45/annotated_doc-0.0.4-py3-none-any.whl", hash = "sha256:571ac1dc6991c450b25a9c2d84a3705e2ae7a53467b5d111c24fa8baabbed320", size = 5303, upload-time = "2025-11-10T22:07:40.673Z" }, ] +[[package]] +name = "annotated-types" +version = "0.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ee/67/531ea369ba64dcff5ec9c3402f9f51bf748cec26dde048a2f973a4eea7f5/annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89", size = 16081, upload-time = "2024-05-20T21:33:25.928Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53", size = 13643, upload-time = "2024-05-20T21:33:24.1Z" }, +] + +[[package]] +name = "antlr4-python3-runtime" +version = "4.13.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/33/5f/2cdf6f7aca3b20d3f316e9f505292e1f256a32089bd702034c29ebde6242/antlr4_python3_runtime-4.13.2.tar.gz", hash = "sha256:909b647e1d2fc2b70180ac586df3933e38919c85f98ccc656a96cd3f25ef3916", size = 117467, upload-time = "2024-08-03T19:00:12.757Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/89/03/a851e84fcbb85214dc637b6378121ef9a0dd61b4c65264675d8a5c9b1ae7/antlr4_python3_runtime-4.13.2-py3-none-any.whl", hash = "sha256:fe3835eb8d33daece0e799090eda89719dbccee7aa39ef94eed3818cafa5a7e8", size = 144462, upload-time = "2024-08-03T19:00:11.134Z" }, +] + [[package]] name = "anyio" version = "4.12.1" @@ -169,16 +236,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" }, @@ -204,6 +261,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/ed/c9/d7977eaacb9df673210491da99e6a247e93df98c715fc43fd136ce1d3d33/arrow-1.4.0-py3-none-any.whl", hash = "sha256:749f0769958ebdc79c173ff0b0670d59051a535fa26e8eba02953dc19eb43205", size = 68797, upload-time = "2025-10-18T17:46:45.663Z" }, ] +[[package]] +name = "art" +version = "6.5" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d4/7d/7d80509bbd19fb747edef94ba487dbadd2747944774ccc0528ad0d005a36/art-6.5.tar.gz", hash = "sha256:a98d77b42c278697ec6cf4b5bdcdfd997f6b2425332da078d4e31e31377d1844", size = 672902, upload-time = "2025-04-12T17:02:20.279Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/67/29/57b06fdb3abdf52c621d3ca3caea735e2db4c8d48288ebd26af448e8e247/art-6.5-py3-none-any.whl", hash = "sha256:70706408144c45c666caab690627d5c74aea7b6c7ce8cc968408ddeef8d84afd", size = 610382, upload-time = "2025-04-12T17:02:21.97Z" }, +] + [[package]] name = "asttokens" version = "3.0.1" @@ -231,6 +297,201 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/3a/2a/7cc015f5b9f5db42b7d48157e23356022889fc354a2813c15934b7cb5c0e/attrs-25.4.0-py3-none-any.whl", hash = "sha256:adcf7e2a1fb3b36ac48d97835bb6d8ade15b8dcce26aba8bf1d14847b57a3373", size = 67615, upload-time = "2025-10-06T13:54:43.17Z" }, ] +[[package]] +name = "audioop-lts" +version = "0.2.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/38/53/946db57842a50b2da2e0c1e34bd37f36f5aadba1a929a3971c5d7841dbca/audioop_lts-0.2.2.tar.gz", hash = "sha256:64d0c62d88e67b98a1a5e71987b7aa7b5bcffc7dcee65b635823dbdd0a8dbbd0", size = 30686, upload-time = "2025-08-05T16:43:17.409Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b8/3b/e8964210b5e216e5041593b7d33e97ee65967f17c282e8510d19c666dab4/audioop_lts-0.2.2-cp313-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:51c916108c56aa6e426ce611946f901badac950ee2ddaf302b7ed35d9958970d", size = 85844, upload-time = "2025-08-05T16:42:25.208Z" }, + { url = "https://files.pythonhosted.org/packages/c7/2e/0a1c52faf10d51def20531a59ce4c706cb7952323b11709e10de324d6493/audioop_lts-0.2.2-cp313-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:47eba38322370347b1c47024defbd36374a211e8dd5b0dcbce7b34fdb6f8847b", size = 85056, upload-time = "2025-08-05T16:42:26.559Z" }, + { url = "https://files.pythonhosted.org/packages/75/e8/cd95eef479656cb75ab05dfece8c1f8c395d17a7c651d88f8e6e291a63ab/audioop_lts-0.2.2-cp313-abi3-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ba7c3a7e5f23e215cb271516197030c32aef2e754252c4c70a50aaff7031a2c8", size = 93892, upload-time = "2025-08-05T16:42:27.902Z" }, + { url = "https://files.pythonhosted.org/packages/5c/1e/a0c42570b74f83efa5cca34905b3eef03f7ab09fe5637015df538a7f3345/audioop_lts-0.2.2-cp313-abi3-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:def246fe9e180626731b26e89816e79aae2276f825420a07b4a647abaa84becc", size = 96660, upload-time = "2025-08-05T16:42:28.9Z" }, + { url = "https://files.pythonhosted.org/packages/50/d5/8a0ae607ca07dbb34027bac8db805498ee7bfecc05fd2c148cc1ed7646e7/audioop_lts-0.2.2-cp313-abi3-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e160bf9df356d841bb6c180eeeea1834085464626dc1b68fa4e1d59070affdc3", size = 79143, upload-time = "2025-08-05T16:42:29.929Z" }, + { url = "https://files.pythonhosted.org/packages/12/17/0d28c46179e7910bfb0bb62760ccb33edb5de973052cb2230b662c14ca2e/audioop_lts-0.2.2-cp313-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:4b4cd51a57b698b2d06cb9993b7ac8dfe89a3b2878e96bc7948e9f19ff51dba6", size = 84313, upload-time = "2025-08-05T16:42:30.949Z" }, + { url = "https://files.pythonhosted.org/packages/84/ba/bd5d3806641564f2024e97ca98ea8f8811d4e01d9b9f9831474bc9e14f9e/audioop_lts-0.2.2-cp313-abi3-musllinux_1_2_ppc64le.whl", hash = "sha256:4a53aa7c16a60a6857e6b0b165261436396ef7293f8b5c9c828a3a203147ed4a", size = 93044, upload-time = "2025-08-05T16:42:31.959Z" }, + { url = "https://files.pythonhosted.org/packages/f9/5e/435ce8d5642f1f7679540d1e73c1c42d933331c0976eb397d1717d7f01a3/audioop_lts-0.2.2-cp313-abi3-musllinux_1_2_riscv64.whl", hash = "sha256:3fc38008969796f0f689f1453722a0f463da1b8a6fbee11987830bfbb664f623", size = 78766, upload-time = "2025-08-05T16:42:33.302Z" }, + { url = "https://files.pythonhosted.org/packages/ae/3b/b909e76b606cbfd53875693ec8c156e93e15a1366a012f0b7e4fb52d3c34/audioop_lts-0.2.2-cp313-abi3-musllinux_1_2_s390x.whl", hash = "sha256:15ab25dd3e620790f40e9ead897f91e79c0d3ce65fe193c8ed6c26cffdd24be7", size = 87640, upload-time = "2025-08-05T16:42:34.854Z" }, + { url = "https://files.pythonhosted.org/packages/30/e7/8f1603b4572d79b775f2140d7952f200f5e6c62904585d08a01f0a70393a/audioop_lts-0.2.2-cp313-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:03f061a1915538fd96272bac9551841859dbb2e3bf73ebe4a23ef043766f5449", size = 86052, upload-time = "2025-08-05T16:42:35.839Z" }, + { url = "https://files.pythonhosted.org/packages/84/52/0022f93d56d85eec5da6b9da6a958a1ef09e80c39f2cc0a590c6af81dcbb/audioop_lts-0.2.2-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:143fad0311e8209ece30a8dbddab3b65ab419cbe8c0dde6e8828da25999be911", size = 92407, upload-time = "2025-08-05T16:42:44.336Z" }, + { url = "https://files.pythonhosted.org/packages/87/1d/48a889855e67be8718adbc7a01f3c01d5743c325453a5e81cf3717664aad/audioop_lts-0.2.2-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:dfbbc74ec68a0fd08cfec1f4b5e8cca3d3cd7de5501b01c4b5d209995033cde9", size = 91811, upload-time = "2025-08-05T16:42:45.325Z" }, + { url = "https://files.pythonhosted.org/packages/98/a6/94b7213190e8077547ffae75e13ed05edc488653c85aa5c41472c297d295/audioop_lts-0.2.2-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:cfcac6aa6f42397471e4943e0feb2244549db5c5d01efcd02725b96af417f3fe", size = 100470, upload-time = "2025-08-05T16:42:46.468Z" }, + { url = "https://files.pythonhosted.org/packages/e9/e9/78450d7cb921ede0cfc33426d3a8023a3bda755883c95c868ee36db8d48d/audioop_lts-0.2.2-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:752d76472d9804ac60f0078c79cdae8b956f293177acd2316cd1e15149aee132", size = 103878, upload-time = "2025-08-05T16:42:47.576Z" }, + { url = "https://files.pythonhosted.org/packages/4f/e2/cd5439aad4f3e34ae1ee852025dc6aa8f67a82b97641e390bf7bd9891d3e/audioop_lts-0.2.2-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:83c381767e2cc10e93e40281a04852facc4cd9334550e0f392f72d1c0a9c5753", size = 84867, upload-time = "2025-08-05T16:42:49.003Z" }, + { url = "https://files.pythonhosted.org/packages/68/4b/9d853e9076c43ebba0d411e8d2aa19061083349ac695a7d082540bad64d0/audioop_lts-0.2.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:c0022283e9556e0f3643b7c3c03f05063ca72b3063291834cca43234f20c60bb", size = 90001, upload-time = "2025-08-05T16:42:50.038Z" }, + { url = "https://files.pythonhosted.org/packages/58/26/4bae7f9d2f116ed5593989d0e521d679b0d583973d203384679323d8fa85/audioop_lts-0.2.2-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:a2d4f1513d63c795e82948e1305f31a6d530626e5f9f2605408b300ae6095093", size = 99046, upload-time = "2025-08-05T16:42:51.111Z" }, + { url = "https://files.pythonhosted.org/packages/b2/67/a9f4fb3e250dda9e9046f8866e9fa7d52664f8985e445c6b4ad6dfb55641/audioop_lts-0.2.2-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:c9c8e68d8b4a56fda8c025e538e639f8c5953f5073886b596c93ec9b620055e7", size = 84788, upload-time = "2025-08-05T16:42:52.198Z" }, + { url = "https://files.pythonhosted.org/packages/70/f7/3de86562db0121956148bcb0fe5b506615e3bcf6e63c4357a612b910765a/audioop_lts-0.2.2-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:96f19de485a2925314f5020e85911fb447ff5fbef56e8c7c6927851b95533a1c", size = 94472, upload-time = "2025-08-05T16:42:53.59Z" }, + { url = "https://files.pythonhosted.org/packages/f1/32/fd772bf9078ae1001207d2df1eef3da05bea611a87dd0e8217989b2848fa/audioop_lts-0.2.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:e541c3ef484852ef36545f66209444c48b28661e864ccadb29daddb6a4b8e5f5", size = 92279, upload-time = "2025-08-05T16:42:54.632Z" }, +] + +[[package]] +name = "authlib" +version = "1.6.9" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cryptography", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/af/98/00d3dd826d46959ad8e32af2dbb2398868fd9fd0683c26e56d0789bd0e68/authlib-1.6.9.tar.gz", hash = "sha256:d8f2421e7e5980cc1ddb4e32d3f5fa659cfaf60d8eaf3281ebed192e4ab74f04", size = 165134, upload-time = "2026-03-02T07:44:01.998Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/53/23/b65f568ed0c22f1efacb744d2db1a33c8068f384b8c9b482b52ebdbc3ef6/authlib-1.6.9-py2.py3-none-any.whl", hash = "sha256:f08b4c14e08f0861dc18a32357b33fbcfd2ea86cfe3fe149484b4d764c4a0ac3", size = 244197, upload-time = "2026-03-02T07:44:00.307Z" }, +] + +[[package]] +name = "axolotl" +version = "0.16.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "accelerate", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "addict", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "adlfs", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "antlr4-python3-runtime", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "art", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "axolotl-contribs-lgpl", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "axolotl-contribs-mit", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "bitsandbytes", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "colorama", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "datasets", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "einops", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "evaluate", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "fastcore", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "fire", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "fla-core", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "flash-linear-attention", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "gcsfs", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "gradio", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "hf-transfer", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "hf-xet", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "huggingface-hub", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "immutabledict", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "kernels", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "langdetect", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "liger-kernel", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "lm-eval", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "mistral-common", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "modal", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "numba", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "numpy", version = "2.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "nvidia-ml-py", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "ocifs", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "openenv-core", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "optimum", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "packaging", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "peft", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "posthog", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "pydantic", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "python-dotenv", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "pyyaml", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "requests", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "s3fs", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "schedulefree", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "scipy", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "sentencepiece", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "tensorboard", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "tokenizers", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "torch", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "torchao", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "trackio", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "transformers", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "triton", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "trl", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "typing-extensions", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "wandb", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "xformers", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "zstandard", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/d4/8d/1e3263a1fc108b5ac1c6035b892d4939147f4766a1af10e8fa644c0d7c60/axolotl-0.16.1.tar.gz", hash = "sha256:0c3f279db8c8799de638fc3d0a7860e55446b539a1d455c727c4ca531571bee9", size = 717631, upload-time = "2026-04-02T21:51:20.244Z" } + +[[package]] +name = "axolotl-contribs-lgpl" +version = "0.0.7" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "datasets", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "numpy", version = "2.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "torch", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/09/60/d9687c5057dfc0ebbccd7c6996cf0f6337794c04a501a92eb6f37709e26b/axolotl_contribs_lgpl-0.0.7.tar.gz", hash = "sha256:f797b3fd0adb5cbf93ed7070c8de61f90fd2f42cb93713e394970ab0e0a77a4d", size = 10922, upload-time = "2025-10-29T17:46:16.215Z" } + +[[package]] +name = "axolotl-contribs-mit" +version = "0.0.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "torch", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f5/d7/6e3154627508b94dff912280935af8e1afa72883074d2e51e75c7efa2bb3/axolotl_contribs_mit-0.0.6.tar.gz", hash = "sha256:f48a63f5878269cd85e5a78b5f3bb44aabe9ffd0143664c91c5841d8ecefdf26", size = 25895, upload-time = "2025-12-09T16:43:55.021Z" } + +[[package]] +name = "azure-core" +version = "1.39.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "requests", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "typing-extensions", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/34/83/bbde3faa84ddcb8eb0eca4b3ffb3221252281db4ce351300fe248c5c70b1/azure_core-1.39.0.tar.gz", hash = "sha256:8a90a562998dd44ce84597590fff6249701b98c0e8797c95fcdd695b54c35d74", size = 367531, upload-time = "2026-03-19T01:31:29.461Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7e/d6/8ebcd05b01a580f086ac9a97fb9fac65c09a4b012161cc97c21a336e880b/azure_core-1.39.0-py3-none-any.whl", hash = "sha256:4ac7b70fab5438c3f68770649a78daf97833caa83827f91df9c14e0e0ea7d34f", size = 218318, upload-time = "2026-03-19T01:31:31.25Z" }, +] + +[package.optional-dependencies] +aio = [ + { name = "aiohttp", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] + +[[package]] +name = "azure-datalake-store" +version = "0.0.53" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cffi", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "msal", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "requests", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/22/ff/61369d06422b5ac48067215ff404841342651b14a89b46c8d8e1507c8f17/azure-datalake-store-0.0.53.tar.gz", hash = "sha256:05b6de62ee3f2a0a6e6941e6933b792b800c3e7f6ffce2fc324bc19875757393", size = 71430, upload-time = "2023-05-10T21:17:05.665Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/88/2a/75f56b14f115189155cf12e46b366ad1fe3357af5a1a7c09f7446662d617/azure_datalake_store-0.0.53-py2.py3-none-any.whl", hash = "sha256:a30c902a6e360aa47d7f69f086b426729784e71c536f330b691647a51dc42b2b", size = 55308, upload-time = "2023-05-10T21:17:02.629Z" }, +] + +[[package]] +name = "azure-identity" +version = "1.25.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "azure-core", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "cryptography", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "msal", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "msal-extensions", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "typing-extensions", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c5/0e/3a63efb48aa4a5ae2cfca61ee152fbcb668092134d3eb8bfda472dd5c617/azure_identity-1.25.3.tar.gz", hash = "sha256:ab23c0d63015f50b630ef6c6cf395e7262f439ce06e5d07a64e874c724f8d9e6", size = 286304, upload-time = "2026-03-13T01:12:20.892Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/49/9a/417b3a533e01953a7c618884df2cb05a71e7b68bdbce4fbdb62349d2a2e8/azure_identity-1.25.3-py3-none-any.whl", hash = "sha256:f4d0b956a8146f30333e071374171f3cfa7bdb8073adb8c3814b65567aa7447c", size = 192138, upload-time = "2026-03-13T01:12:22.951Z" }, +] + +[[package]] +name = "azure-storage-blob" +version = "12.28.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "azure-core", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "cryptography", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "isodate", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "typing-extensions", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/71/24/072ba8e27b0e2d8fec401e9969b429d4f5fc4c8d4f0f05f4661e11f7234a/azure_storage_blob-12.28.0.tar.gz", hash = "sha256:e7d98ea108258d29aa0efbfd591b2e2075fa1722a2fae8699f0b3c9de11eff41", size = 604225, upload-time = "2026-01-06T23:48:57.282Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d8/3a/6ef2047a072e54e1142718d433d50e9514c999a58f51abfff7902f3a72f8/azure_storage_blob-12.28.0-py3-none-any.whl", hash = "sha256:00fb1db28bf6a7b7ecaa48e3b1d5c83bfadacc5a678b77826081304bd87d6461", size = 431499, upload-time = "2026-01-06T23:48:58.995Z" }, +] + +[package.optional-dependencies] +aio = [ + { name = "azure-core", extra = ["aio"], marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] + [[package]] name = "babel" version = "2.18.0" @@ -240,6 +501,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/77/f5/21d2de20e8b8b0408f0681956ca2c69f1320a3848ac50e6e7f39c6159675/babel-2.18.0-py3-none-any.whl", hash = "sha256:e2b422b277c2b9a9630c1d7903c2a00d0830c409c59ac8cae9081c92f1aeba35", size = 10196845, upload-time = "2026-02-01T12:30:53.445Z" }, ] +[[package]] +name = "backoff" +version = "2.2.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/47/d7/5bbeb12c44d7c4f2fb5b56abce497eb5ed9f34d85701de869acedd602619/backoff-2.2.1.tar.gz", hash = "sha256:03f829f5bb1923180821643f8753b0502c3b682293992485b0eef2807afa5cba", size = 17001, upload-time = "2022-10-05T19:19:32.061Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/df/73/b6e24bd22e6720ca8ee9a85a0c4a2971af8497d8f3193fa05390cbd46e09/backoff-2.2.1-py3-none-any.whl", hash = "sha256:63579f9a0628e06278f7e47b7d7d5b6ce20dc65c5e96a6f3ca99a6adca0396e8", size = 15148, upload-time = "2022-10-05T19:19:30.546Z" }, +] + [[package]] name = "beautifulsoup4" version = "4.14.3" @@ -253,6 +523,21 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/1a/39/47f9197bdd44df24d67ac8893641e16f386c984a0619ef2ee4c51fbbc019/beautifulsoup4-4.14.3-py3-none-any.whl", hash = "sha256:0918bfe44902e6ad8d57732ba310582e98da931428d231a5ecb9e7c703a735bb", size = 107721, upload-time = "2025-11-30T15:08:24.087Z" }, ] +[[package]] +name = "bitsandbytes" +version = "0.49.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "numpy", version = "2.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "packaging", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "torch", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/11/dd/5820e09213a3f7c0ee5aff20fce8b362ce935f9dd9958827274de4eaeec6/bitsandbytes-0.49.1-py3-none-manylinux_2_24_aarch64.whl", hash = "sha256:acd4730a0db3762d286707f4a3bc1d013d21dd5f0e441900da57ec4198578d4e", size = 31065659, upload-time = "2026-01-08T14:31:28.676Z" }, + { url = "https://files.pythonhosted.org/packages/1d/4f/02d3cb62a1b0b5a1ca7ff03dce3606be1bf3ead4744f47eb762dbf471069/bitsandbytes-0.49.1-py3-none-manylinux_2_24_x86_64.whl", hash = "sha256:e7940bf32457dc2e553685285b2a86e82f5ec10b2ae39776c408714f9ae6983c", size = 59054193, upload-time = "2026-01-08T14:31:31.743Z" }, +] + [[package]] name = "bleach" version = "6.3.0" @@ -270,6 +555,57 @@ css = [ { name = "tinycss2" }, ] +[[package]] +name = "botocore" +version = "1.41.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "jmespath", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "python-dateutil", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "urllib3", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/90/22/7fe08c726a2e3b11a0aef8bf177e83891c9cb2dc1809d35c9ed91a9e60e6/botocore-1.41.5.tar.gz", hash = "sha256:0367622b811597d183bfcaab4a350f0d3ede712031ce792ef183cabdee80d3bf", size = 14668152, upload-time = "2025-11-26T20:27:38.026Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4e/4e/21cd0b8f365449f1576f93de1ec8718ed18a7a3bc086dfbdeb79437bba7a/botocore-1.41.5-py3-none-any.whl", hash = "sha256:3fef7fcda30c82c27202d232cfdbd6782cb27f20f8e7e21b20606483e66ee73a", size = 14337008, upload-time = "2025-11-26T20:27:35.208Z" }, +] + +[[package]] +name = "brotli" +version = "1.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f7/16/c92ca344d646e71a43b8bb353f0a6490d7f6e06210f8554c8f874e454285/brotli-1.2.0.tar.gz", hash = "sha256:e310f77e41941c13340a95976fe66a8a95b01e783d430eeaf7a2f87e0a57dd0a", size = 7388632, upload-time = "2025-11-05T18:39:42.86Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3d/6f/feba03130d5fceadfa3a1bb102cb14650798c848b1df2a808356f939bb16/brotli-1.2.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:acec55bb7c90f1dfc476126f9711a8e81c9af7fb617409a9ee2953115343f08d", size = 1528071, upload-time = "2025-11-05T18:38:26.081Z" }, + { url = "https://files.pythonhosted.org/packages/2b/38/f3abb554eee089bd15471057ba85f47e53a44a462cfce265d9bf7088eb09/brotli-1.2.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:260d3692396e1895c5034f204f0db022c056f9e2ac841593a4cf9426e2a3faca", size = 1626913, upload-time = "2025-11-05T18:38:27.284Z" }, + { url = "https://files.pythonhosted.org/packages/03/a7/03aa61fbc3c5cbf99b44d158665f9b0dd3d8059be16c460208d9e385c837/brotli-1.2.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:072e7624b1fc4d601036ab3f4f27942ef772887e876beff0301d261210bca97f", size = 1419762, upload-time = "2025-11-05T18:38:28.295Z" }, + { url = "https://files.pythonhosted.org/packages/21/1b/0374a89ee27d152a5069c356c96b93afd1b94eae83f1e004b57eb6ce2f10/brotli-1.2.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:adedc4a67e15327dfdd04884873c6d5a01d3e3b6f61406f99b1ed4865a2f6d28", size = 1484494, upload-time = "2025-11-05T18:38:29.29Z" }, + { url = "https://files.pythonhosted.org/packages/cf/57/69d4fe84a67aef4f524dcd075c6eee868d7850e85bf01d778a857d8dbe0a/brotli-1.2.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:7a47ce5c2288702e09dc22a44d0ee6152f2c7eda97b3c8482d826a1f3cfc7da7", size = 1593302, upload-time = "2025-11-05T18:38:30.639Z" }, + { url = "https://files.pythonhosted.org/packages/d5/3b/39e13ce78a8e9a621c5df3aeb5fd181fcc8caba8c48a194cd629771f6828/brotli-1.2.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:af43b8711a8264bb4e7d6d9a6d004c3a2019c04c01127a868709ec29962b6036", size = 1487913, upload-time = "2025-11-05T18:38:31.618Z" }, + { url = "https://files.pythonhosted.org/packages/2e/b6/fe84227c56a865d16a6614e2c4722864b380cb14b13f3e6bef441e73a85a/brotli-1.2.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c8565e3cdc1808b1a34714b553b262c5de5fbda202285782173ec137fd13709f", size = 1528076, upload-time = "2025-11-05T18:38:36.639Z" }, + { url = "https://files.pythonhosted.org/packages/55/de/de4ae0aaca06c790371cf6e7ee93a024f6b4bb0568727da8c3de112e726c/brotli-1.2.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:26e8d3ecb0ee458a9804f47f21b74845cc823fd1bb19f02272be70774f56e2a6", size = 1626880, upload-time = "2025-11-05T18:38:37.623Z" }, + { url = "https://files.pythonhosted.org/packages/5f/16/a1b22cbea436642e071adcaf8d4b350a2ad02f5e0ad0da879a1be16188a0/brotli-1.2.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:67a91c5187e1eec76a61625c77a6c8c785650f5b576ca732bd33ef58b0dff49c", size = 1419737, upload-time = "2025-11-05T18:38:38.729Z" }, + { url = "https://files.pythonhosted.org/packages/46/63/c968a97cbb3bdbf7f974ef5a6ab467a2879b82afbc5ffb65b8acbb744f95/brotli-1.2.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4ecdb3b6dc36e6d6e14d3a1bdc6c1057c8cbf80db04031d566eb6080ce283a48", size = 1484440, upload-time = "2025-11-05T18:38:39.916Z" }, + { url = "https://files.pythonhosted.org/packages/06/9d/102c67ea5c9fc171f423e8399e585dabea29b5bc79b05572891e70013cdd/brotli-1.2.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:3e1b35d56856f3ed326b140d3c6d9db91740f22e14b06e840fe4bb1923439a18", size = 1593313, upload-time = "2025-11-05T18:38:41.24Z" }, + { url = "https://files.pythonhosted.org/packages/9e/4a/9526d14fa6b87bc827ba1755a8440e214ff90de03095cacd78a64abe2b7d/brotli-1.2.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:54a50a9dad16b32136b2241ddea9e4df159b41247b2ce6aac0b3276a66a8f1e5", size = 1487945, upload-time = "2025-11-05T18:38:42.277Z" }, +] + +[[package]] +name = "cbor2" +version = "5.9.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/bd/cb/09939728be094d155b5d4ac262e39877875f5f7e36eea66beb359f647bd0/cbor2-5.9.0.tar.gz", hash = "sha256:85c7a46279ac8f226e1059275221e6b3d0e370d2bb6bd0500f9780781615bcea", size = 111231, upload-time = "2026-03-22T15:56:50.638Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/09/fd/7ddf3d3153b54c69c3be77172b8d9aa3a9d74f62a7fbde614d53eaeed9a4/cbor2-5.9.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ae6c706ac1d85a0b3cb3395308fd0c4d55e3202b4760773675957e93cdff45fc", size = 287865, upload-time = "2026-03-22T15:56:14.813Z" }, + { url = "https://files.pythonhosted.org/packages/db/9d/7ede2cc42f9bb4260492e7d29d2aab781eacbbcfb09d983de1e695077199/cbor2-5.9.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4cd43d8fc374b31643b2830910f28177a606a7bc84975a62675dd3f2e320fc7b", size = 288246, upload-time = "2026-03-22T15:56:16.113Z" }, + { url = "https://files.pythonhosted.org/packages/ce/9d/588ebc7c5bc5843f609b05fe07be8575c7dec987735b0bbc908ac9c1264a/cbor2-5.9.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:4aa07b392cc3d76fb31c08a46a226b58c320d1c172ff3073e864409ced7bc50f", size = 280214, upload-time = "2026-03-22T15:56:17.519Z" }, + { url = "https://files.pythonhosted.org/packages/f7/a1/6fc8f4b15c6a27e7fbb7966c30c2b4b18c274a3221fa2f5e6235502d34bc/cbor2-5.9.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:971d425b3a23b75953d8853d5f9911bdeefa09d759ee3b5e6b07b5ff3cbd9073", size = 282162, upload-time = "2026-03-22T15:56:18.975Z" }, + { url = "https://files.pythonhosted.org/packages/1b/10/df643a381aebc3f05486de4813662bc58accb640fc3275cb276a75e89694/cbor2-5.9.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ac684fe195c39821fca70d18afbf748f728aefbfbf88456018d299e559b8cae0", size = 287682, upload-time = "2026-03-22T15:56:24.024Z" }, + { url = "https://files.pythonhosted.org/packages/c6/0c/8aa6b766059ae4a0ca1ec3ff96fe3823a69a7be880dba2e249f7fbe2700b/cbor2-5.9.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2a54fbb32cb828c214f7f333a707e4aec61182e7efdc06ea5d9596d3ecee624a", size = 288009, upload-time = "2026-03-22T15:56:25.305Z" }, + { url = "https://files.pythonhosted.org/packages/74/07/6236bc25c183a9cf7e8062e5dddf9eae9b0b14ebf14a58a69fe5a1e872c6/cbor2-5.9.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4753a6d1bc71054d9179557bc65740860f185095ccb401d46637fff028a5b3ec", size = 280437, upload-time = "2026-03-22T15:56:26.479Z" }, + { url = "https://files.pythonhosted.org/packages/4e/0a/84328d23c3c68874ac6497edb9b1900579a1028efa54734df3f1762bbc15/cbor2-5.9.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:380e534482b843e43442b87d8777a7bf9bed20cb7526f89b780c3400f617304b", size = 282247, upload-time = "2026-03-22T15:56:28.644Z" }, + { url = "https://files.pythonhosted.org/packages/42/ff/b83492b096fbef26e9cb62c1a4bf2d3cef579ea7b33138c6c37c4ae66f67/cbor2-5.9.0-py3-none-any.whl", hash = "sha256:27695cbd70c90b8de5c4a284642c2836449b14e2c2e07e3ffe0744cb7669a01b", size = 24627, upload-time = "2026-03-22T15:56:48.847Z" }, +] + [[package]] name = "certifi" version = "2026.1.4" @@ -312,28 +648,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]] @@ -345,6 +659,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/db/3c/33bac158f8ab7f89b2e59426d5fe2e4f63f7ed25df84c036890172b412b5/cfgv-3.5.0-py2.py3-none-any.whl", hash = "sha256:a8dc6b26ad22ff227d2634a65cb388215ce6cc96bbcc5cfde7641ae87e8dacc0", size = 7445, upload-time = "2025-11-19T20:55:50.744Z" }, ] +[[package]] +name = "chardet" +version = "5.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f3/0d/f7b6ab21ec75897ed80c17d79b15951a719226b9fababf1e40ea74d69079/chardet-5.2.0.tar.gz", hash = "sha256:1b3b6ff479a8c414bc3fa2c0852995695c4a026dcd6d0633b2dd092ca39c1cf7", size = 2069618, upload-time = "2023-08-01T19:23:02.662Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/38/6f/f5fbc992a329ee4e0f288c1fe0e2ad9485ed064cac731ed2fe47dcc38cbf/chardet-5.2.0-py3-none-any.whl", hash = "sha256:e1cf59446890a00105fe7b7912492ea04b6e6f06d4b742b2c788469e34c82970", size = 199385, upload-time = "2023-08-01T19:23:00.661Z" }, +] + [[package]] name = "charset-normalizer" version = "3.4.4" @@ -383,25 +706,18 @@ 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" }, ] +[[package]] +name = "circuitbreaker" +version = "2.1.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/df/ac/de7a92c4ed39cba31fe5ad9203b76a25ca67c530797f6bb420fff5f65ccb/circuitbreaker-2.1.3.tar.gz", hash = "sha256:1a4baee510f7bea3c91b194dcce7c07805fe96c4423ed5594b75af438531d084", size = 10787, upload-time = "2025-03-31T08:12:08.963Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ae/34/15f08edd4628f65217de1fc3c1a27c82e46fe357d60c217fc9881e12ebcc/circuitbreaker-2.1.3-py3-none-any.whl", hash = "sha256:87ba6a3ed03fdc7032bc175561c2b04d52ade9d5faf94ca2b035fbdc5e6b1dd1", size = 7737, upload-time = "2025-03-31T08:12:07.802Z" }, +] + [[package]] name = "click" version = "8.3.1" @@ -432,6 +748,18 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" }, ] +[[package]] +name = "coloredlogs" +version = "15.0.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "humanfriendly", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/cc/c7/eed8f27100517e8c0e6b923d5f0845d0cb99763da6fdee00478f91db7325/coloredlogs-15.0.1.tar.gz", hash = "sha256:7c991aa71a4577af2f82600d8f8f3a89f936baeaf9b50a9c197da014e5bf16b0", size = 278520, upload-time = "2021-06-11T10:22:45.202Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a7/06/3d6badcf13db419e25b07041d9c7b4a2c331d3f4e7134445ec5df57714cd/coloredlogs-15.0.1-py2.py3-none-any.whl", hash = "sha256:612ee75c546f53e92e70049c9dbfcc18c935a2b9a53b66085ce9ef6a6e5c0934", size = 46018, upload-time = "2021-06-11T10:22:42.561Z" }, +] + [[package]] name = "comm" version = "0.2.3" @@ -446,7 +774,8 @@ name = "contourpy" version = "1.3.3" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "numpy" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.13'" }, + { name = "numpy", version = "2.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.13'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/58/01/1253e6698a07380cd31a736d248a3f2a50a7c88779a1813da27503cadc2a/contourpy-1.3.3.tar.gz", hash = "sha256:083e12155b210502d0bca491432bb04d56dc3432f95a979b429f2848c3dbe880", size = 13466174, upload-time = "2025-07-26T12:03:12.549Z" } wheels = [ @@ -483,28 +812,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]] @@ -552,111 +859,62 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/1e/19/a5f2b96262977e82fb9aabbe19b4d83561f5d063f18dde3e72f34ffc3b2f/coverage-7.13.3-cp313-cp313t-win32.whl", hash = "sha256:dfb428e41377e6b9ba1b0a32df6db5409cb089a0ed1d0a672dc4953ec110d84f", size = 222679, upload-time = "2026-02-03T14:01:28.553Z" }, { url = "https://files.pythonhosted.org/packages/81/82/ef1747b88c87a5c7d7edc3704799ebd650189a9158e680a063308b6125ef/coverage-7.13.3-cp313-cp313t-win_amd64.whl", hash = "sha256:5badd7e596e6b0c89aa8ec6d37f4473e4357f982ce57f9a2942b0221cd9cf60c", size = 223740, upload-time = "2026-02-03T14:01:30.776Z" }, { url = "https://files.pythonhosted.org/packages/1c/4c/a67c7bb5b560241c22736a9cb2f14c5034149ffae18630323fde787339e4/coverage-7.13.3-cp313-cp313t-win_arm64.whl", hash = "sha256:989aa158c0eb19d83c76c26f4ba00dbb272485c56e452010a3450bdbc9daafd9", size = 221996, upload-time = "2026-02-03T14:01:32.495Z" }, - { url = "https://files.pythonhosted.org/packages/5e/b3/677bb43427fed9298905106f39c6520ac75f746f81b8f01104526a8026e4/coverage-7.13.3-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:c6f6169bbdbdb85aab8ac0392d776948907267fcc91deeacf6f9d55f7a83ae3b", size = 219513, upload-time = "2026-02-03T14:01:34.29Z" }, - { url = "https://files.pythonhosted.org/packages/42/53/290046e3bbf8986cdb7366a42dab3440b9983711eaff044a51b11006c67b/coverage-7.13.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:2f5e731627a3d5ef11a2a35aa0c6f7c435867c7ccbc391268eb4f2ca5dbdcc10", size = 219850, upload-time = "2026-02-03T14:01:35.984Z" }, - { url = "https://files.pythonhosted.org/packages/ea/2b/ab41f10345ba2e49d5e299be8663be2b7db33e77ac1b85cd0af985ea6406/coverage-7.13.3-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:9db3a3285d91c0b70fab9f39f0a4aa37d375873677efe4e71e58d8321e8c5d39", size = 250886, upload-time = "2026-02-03T14:01:38.287Z" }, - { url = "https://files.pythonhosted.org/packages/72/2d/b3f6913ee5a1d5cdd04106f257e5fac5d048992ffc2d9995d07b0f17739f/coverage-7.13.3-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:06e49c5897cb12e3f7ecdc111d44e97c4f6d0557b81a7a0204ed70a8b038f86f", size = 253393, upload-time = "2026-02-03T14:01:40.118Z" }, - { url = "https://files.pythonhosted.org/packages/f0/f6/b1f48810ffc6accf49a35b9943636560768f0812330f7456aa87dc39aff5/coverage-7.13.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fb25061a66802df9fc13a9ba1967d25faa4dae0418db469264fd9860a921dde4", size = 254740, upload-time = "2026-02-03T14:01:42.413Z" }, - { url = "https://files.pythonhosted.org/packages/57/d0/e59c54f9be0b61808f6bc4c8c4346bd79f02dd6bbc3f476ef26124661f20/coverage-7.13.3-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:99fee45adbb1caeb914da16f70e557fb7ff6ddc9e4b14de665bd41af631367ef", size = 250905, upload-time = "2026-02-03T14:01:44.163Z" }, - { url = "https://files.pythonhosted.org/packages/d5/f7/5291bcdf498bafbee3796bb32ef6966e9915aebd4d0954123c8eae921c32/coverage-7.13.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:318002f1fd819bdc1651c619268aa5bc853c35fa5cc6d1e8c96bd9cd6c828b75", size = 252753, upload-time = "2026-02-03T14:01:45.974Z" }, - { url = "https://files.pythonhosted.org/packages/a0/a9/1dcafa918c281554dae6e10ece88c1add82db685be123e1b05c2056ff3fb/coverage-7.13.3-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:71295f2d1d170b9977dc386d46a7a1b7cbb30e5405492529b4c930113a33f895", size = 250716, upload-time = "2026-02-03T14:01:48.844Z" }, - { url = "https://files.pythonhosted.org/packages/44/bb/4ea4eabcce8c4f6235df6e059fbc5db49107b24c4bdffc44aee81aeca5a8/coverage-7.13.3-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:5b1ad2e0dc672625c44bc4fe34514602a9fd8b10d52ddc414dc585f74453516c", size = 250530, upload-time = "2026-02-03T14:01:50.793Z" }, - { url = "https://files.pythonhosted.org/packages/6d/31/4a6c9e6a71367e6f923b27b528448c37f4e959b7e4029330523014691007/coverage-7.13.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:b2beb64c145593a50d90db5c7178f55daeae129123b0d265bdb3cbec83e5194a", size = 252186, upload-time = "2026-02-03T14:01:52.607Z" }, - { url = "https://files.pythonhosted.org/packages/27/92/e1451ef6390a4f655dc42da35d9971212f7abbbcad0bdb7af4407897eb76/coverage-7.13.3-cp314-cp314-win32.whl", hash = "sha256:3d1aed4f4e837a832df2f3b4f68a690eede0de4560a2dbc214ea0bc55aabcdb4", size = 222253, upload-time = "2026-02-03T14:01:55.071Z" }, - { url = "https://files.pythonhosted.org/packages/8a/98/78885a861a88de020c32a2693487c37d15a9873372953f0c3c159d575a43/coverage-7.13.3-cp314-cp314-win_amd64.whl", hash = "sha256:9f9efbbaf79f935d5fbe3ad814825cbce4f6cdb3054384cb49f0c0f496125fa0", size = 223069, upload-time = "2026-02-03T14:01:56.95Z" }, - { url = "https://files.pythonhosted.org/packages/eb/fb/3784753a48da58a5337972abf7ca58b1fb0f1bda21bc7b4fae992fd28e47/coverage-7.13.3-cp314-cp314-win_arm64.whl", hash = "sha256:31b6e889c53d4e6687ca63706148049494aace140cffece1c4dc6acadb70a7b3", size = 221633, upload-time = "2026-02-03T14:01:58.758Z" }, - { url = "https://files.pythonhosted.org/packages/40/f9/75b732d9674d32cdbffe801ed5f770786dd1c97eecedef2125b0d25102dc/coverage-7.13.3-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:c5e9787cec750793a19a28df7edd85ac4e49d3fb91721afcdc3b86f6c08d9aa8", size = 220243, upload-time = "2026-02-03T14:02:01.109Z" }, - { url = "https://files.pythonhosted.org/packages/cf/7e/2868ec95de5a65703e6f0c87407ea822d1feb3619600fbc3c1c4fa986090/coverage-7.13.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:e5b86db331c682fd0e4be7098e6acee5e8a293f824d41487c667a93705d415ca", size = 220515, upload-time = "2026-02-03T14:02:02.862Z" }, - { url = "https://files.pythonhosted.org/packages/7d/eb/9f0d349652fced20bcaea0f67fc5777bd097c92369f267975732f3dc5f45/coverage-7.13.3-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:edc7754932682d52cf6e7a71806e529ecd5ce660e630e8bd1d37109a2e5f63ba", size = 261874, upload-time = "2026-02-03T14:02:04.727Z" }, - { url = "https://files.pythonhosted.org/packages/ee/a5/6619bc4a6c7b139b16818149a3e74ab2e21599ff9a7b6811b6afde99f8ec/coverage-7.13.3-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:d3a16d6398666510a6886f67f43d9537bfd0e13aca299688a19daa84f543122f", size = 264004, upload-time = "2026-02-03T14:02:06.634Z" }, - { url = "https://files.pythonhosted.org/packages/29/b7/90aa3fc645a50c6f07881fca4fd0ba21e3bfb6ce3a7078424ea3a35c74c9/coverage-7.13.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:303d38b19626c1981e1bb067a9928236d88eb0e4479b18a74812f05a82071508", size = 266408, upload-time = "2026-02-03T14:02:09.037Z" }, - { url = "https://files.pythonhosted.org/packages/62/55/08bb2a1e4dcbae384e638f0effef486ba5987b06700e481691891427d879/coverage-7.13.3-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:284e06eadfe15ddfee2f4ee56631f164ef897a7d7d5a15bca5f0bb88889fc5ba", size = 260977, upload-time = "2026-02-03T14:02:11.755Z" }, - { url = "https://files.pythonhosted.org/packages/9b/76/8bd4ae055a42d8fb5dd2230e5cf36ff2e05f85f2427e91b11a27fea52ed7/coverage-7.13.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:d401f0864a1d3198422816878e4e84ca89ec1c1bf166ecc0ae01380a39b888cd", size = 263868, upload-time = "2026-02-03T14:02:13.565Z" }, - { url = "https://files.pythonhosted.org/packages/e3/f9/ba000560f11e9e32ec03df5aa8477242c2d95b379c99ac9a7b2e7fbacb1a/coverage-7.13.3-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:3f379b02c18a64de78c4ccdddf1c81c2c5ae1956c72dacb9133d7dd7809794ab", size = 261474, upload-time = "2026-02-03T14:02:16.069Z" }, - { url = "https://files.pythonhosted.org/packages/90/4b/4de4de8f9ca7af4733bfcf4baa440121b7dbb3856daf8428ce91481ff63b/coverage-7.13.3-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:7a482f2da9086971efb12daca1d6547007ede3674ea06e16d7663414445c683e", size = 260317, upload-time = "2026-02-03T14:02:17.996Z" }, - { url = "https://files.pythonhosted.org/packages/05/71/5cd8436e2c21410ff70be81f738c0dddea91bcc3189b1517d26e0102ccb3/coverage-7.13.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:562136b0d401992118d9b49fbee5454e16f95f85b120a4226a04d816e33fe024", size = 262635, upload-time = "2026-02-03T14:02:20.405Z" }, - { url = "https://files.pythonhosted.org/packages/e7/f8/2834bb45bdd70b55a33ec354b8b5f6062fc90e5bb787e14385903a979503/coverage-7.13.3-cp314-cp314t-win32.whl", hash = "sha256:ca46e5c3be3b195098dd88711890b8011a9fa4feca942292bb84714ce5eab5d3", size = 223035, upload-time = "2026-02-03T14:02:22.323Z" }, - { url = "https://files.pythonhosted.org/packages/26/75/f8290f0073c00d9ae14056d2b84ab92dff21d5370e464cb6cb06f52bf580/coverage-7.13.3-cp314-cp314t-win_amd64.whl", hash = "sha256:06d316dbb3d9fd44cca05b2dbcfbef22948493d63a1f28e828d43e6cc505fed8", size = 224142, upload-time = "2026-02-03T14:02:24.143Z" }, - { url = "https://files.pythonhosted.org/packages/03/01/43ac78dfea8946c4a9161bbc034b5549115cb2b56781a4b574927f0d141a/coverage-7.13.3-cp314-cp314t-win_arm64.whl", hash = "sha256:299d66e9218193f9dc6e4880629ed7c4cd23486005166247c283fb98531656c3", size = 222166, upload-time = "2026-02-03T14:02:26.005Z" }, { url = "https://files.pythonhosted.org/packages/7d/fb/70af542d2d938c778c9373ce253aa4116dbe7c0a5672f78b2b2ae0e1b94b/coverage-7.13.3-py3-none-any.whl", hash = "sha256:90a8af9dba6429b2573199622d72e0ebf024d6276f16abce394ad4d181bb0910", size = 211237, upload-time = "2026-02-03T14:02:27.986Z" }, ] [[package]] -name = "cuda-bindings" -version = "13.2.0" +name = "cryptography" +version = "46.0.7" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "cuda-pathfinder", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, -] -wheels = [ - { url = "https://files.pythonhosted.org/packages/52/c8/b2589d68acf7e3d63e2be330b84bc25712e97ed799affbca7edd7eae25d6/cuda_bindings-13.2.0-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e865447abfb83d6a98ad5130ed3c70b1fc295ae3eeee39fd07b4ddb0671b6788", size = 5722404, upload-time = "2026-03-11T00:12:44.041Z" }, - { url = "https://files.pythonhosted.org/packages/1f/92/f899f7bbb5617bb65ec52a6eac1e9a1447a86b916c4194f8a5001b8cde0c/cuda_bindings-13.2.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:46d8776a55d6d5da9dd6e9858fba2efcda2abe6743871dee47dd06eb8cb6d955", size = 6320619, upload-time = "2026-03-11T00:12:45.939Z" }, - { url = "https://files.pythonhosted.org/packages/df/93/eef988860a3ca985f82c4f3174fc0cdd94e07331ba9a92e8e064c260337f/cuda_bindings-13.2.0-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6629ca2df6f795b784752409bcaedbd22a7a651b74b56a165ebc0c9dcbd504d0", size = 5614610, upload-time = "2026-03-11T00:12:50.337Z" }, - { url = "https://files.pythonhosted.org/packages/18/23/6db3aba46864aee357ab2415135b3fe3da7e9f1fa0221fa2a86a5968099c/cuda_bindings-13.2.0-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7dca0da053d3b4cc4869eff49c61c03f3c5dbaa0bcd712317a358d5b8f3f385d", size = 6149914, upload-time = "2026-03-11T00:12:52.374Z" }, - { url = "https://files.pythonhosted.org/packages/c0/87/87a014f045b77c6de5c8527b0757fe644417b184e5367db977236a141602/cuda_bindings-13.2.0-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a6464b30f46692d6c7f65d4a0e0450d81dd29de3afc1bb515653973d01c2cd6e", size = 5685673, upload-time = "2026-03-11T00:12:56.371Z" }, - { url = "https://files.pythonhosted.org/packages/ee/5e/c0fe77a73aaefd3fff25ffaccaac69c5a63eafdf8b9a4c476626ef0ac703/cuda_bindings-13.2.0-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f4af9f3e1be603fa12d5ad6cfca7844c9d230befa9792b5abdf7dd79979c3626", size = 6191386, upload-time = "2026-03-11T00:12:58.965Z" }, - { url = "https://files.pythonhosted.org/packages/5f/58/ed2c3b39c8dd5f96aa7a4abef0d47a73932c7a988e30f5fa428f00ed0da1/cuda_bindings-13.2.0-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:df850a1ff8ce1b3385257b08e47b70e959932f5f432d0a4e46a355962b4e4771", size = 5507469, upload-time = "2026-03-11T00:13:04.063Z" }, - { url = "https://files.pythonhosted.org/packages/1f/01/0c941b112ceeb21439b05895eace78ca1aa2eaaf695c8521a068fd9b4c00/cuda_bindings-13.2.0-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e8a16384c6494e5485f39314b0b4afb04bee48d49edb16d5d8593fd35bbd231b", size = 6059693, upload-time = "2026-03-11T00:13:06.003Z" }, + { name = "cffi", marker = "platform_python_implementation != 'PyPy' and sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/47/93/ac8f3d5ff04d54bc814e961a43ae5b0b146154c89c61b47bb07557679b18/cryptography-46.0.7.tar.gz", hash = "sha256:e4cfd68c5f3e0bfdad0d38e023239b96a2fe84146481852dffbcca442c245aa5", size = 750652, upload-time = "2026-04-08T01:57:54.692Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5f/45/6d80dc379b0bbc1f9d1e429f42e4cb9e1d319c7a8201beffd967c516ea01/cryptography-46.0.7-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:b36a4695e29fe69215d75960b22577197aca3f7a25b9cf9d165dcfe9d80bc325", size = 4275492, upload-time = "2026-04-08T01:56:19.36Z" }, + { url = "https://files.pythonhosted.org/packages/4a/9a/1765afe9f572e239c3469f2cb429f3ba7b31878c893b246b4b2994ffe2fe/cryptography-46.0.7-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:5ad9ef796328c5e3c4ceed237a183f5d41d21150f972455a9d926593a1dcb308", size = 4426670, upload-time = "2026-04-08T01:56:21.415Z" }, + { url = "https://files.pythonhosted.org/packages/8f/3e/af9246aaf23cd4ee060699adab1e47ced3f5f7e7a8ffdd339f817b446462/cryptography-46.0.7-cp311-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:73510b83623e080a2c35c62c15298096e2a5dc8d51c3b4e1740211839d0dea77", size = 4280275, upload-time = "2026-04-08T01:56:23.539Z" }, + { url = "https://files.pythonhosted.org/packages/0f/54/6bbbfc5efe86f9d71041827b793c24811a017c6ac0fd12883e4caa86b8ed/cryptography-46.0.7-cp311-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:cbd5fb06b62bd0721e1170273d3f4d5a277044c47ca27ee257025146c34cbdd1", size = 4928402, upload-time = "2026-04-08T01:56:25.624Z" }, + { url = "https://files.pythonhosted.org/packages/2d/cf/054b9d8220f81509939599c8bdbc0c408dbd2bdd41688616a20731371fe0/cryptography-46.0.7-cp311-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:420b1e4109cc95f0e5700eed79908cef9268265c773d3a66f7af1eef53d409ef", size = 4459985, upload-time = "2026-04-08T01:56:27.309Z" }, + { url = "https://files.pythonhosted.org/packages/f9/46/4e4e9c6040fb01c7467d47217d2f882daddeb8828f7df800cb806d8a2288/cryptography-46.0.7-cp311-abi3-manylinux_2_31_armv7l.whl", hash = "sha256:24402210aa54baae71d99441d15bb5a1919c195398a87b563df84468160a65de", size = 3990652, upload-time = "2026-04-08T01:56:29.095Z" }, + { url = "https://files.pythonhosted.org/packages/36/5f/313586c3be5a2fbe87e4c9a254207b860155a8e1f3cca99f9910008e7d08/cryptography-46.0.7-cp311-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:8a469028a86f12eb7d2fe97162d0634026d92a21f3ae0ac87ed1c4a447886c83", size = 4279805, upload-time = "2026-04-08T01:56:30.928Z" }, + { url = "https://files.pythonhosted.org/packages/69/33/60dfc4595f334a2082749673386a4d05e4f0cf4df8248e63b2c3437585f2/cryptography-46.0.7-cp311-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:9694078c5d44c157ef3162e3bf3946510b857df5a3955458381d1c7cfc143ddb", size = 4892883, upload-time = "2026-04-08T01:56:32.614Z" }, + { url = "https://files.pythonhosted.org/packages/c7/0b/333ddab4270c4f5b972f980adef4faa66951a4aaf646ca067af597f15563/cryptography-46.0.7-cp311-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:42a1e5f98abb6391717978baf9f90dc28a743b7d9be7f0751a6f56a75d14065b", size = 4459756, upload-time = "2026-04-08T01:56:34.306Z" }, + { url = "https://files.pythonhosted.org/packages/d2/14/633913398b43b75f1234834170947957c6b623d1701ffc7a9600da907e89/cryptography-46.0.7-cp311-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:91bbcb08347344f810cbe49065914fe048949648f6bd5c2519f34619142bbe85", size = 4410244, upload-time = "2026-04-08T01:56:35.977Z" }, + { url = "https://files.pythonhosted.org/packages/10/f2/19ceb3b3dc14009373432af0c13f46aa08e3ce334ec6eff13492e1812ccd/cryptography-46.0.7-cp311-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:5d1c02a14ceb9148cc7816249f64f623fbfee39e8c03b3650d842ad3f34d637e", size = 4674868, upload-time = "2026-04-08T01:56:38.034Z" }, + { url = "https://files.pythonhosted.org/packages/a5/d0/36a49f0262d2319139d2829f773f1b97ef8aef7f97e6e5bd21455e5a8fb5/cryptography-46.0.7-cp38-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:84d4cced91f0f159a7ddacad249cc077e63195c36aac40b4150e7a57e84fffe7", size = 4270628, upload-time = "2026-04-08T01:57:12.885Z" }, + { url = "https://files.pythonhosted.org/packages/8a/6c/1a42450f464dda6ffbe578a911f773e54dd48c10f9895a23a7e88b3e7db5/cryptography-46.0.7-cp38-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:128c5edfe5e5938b86b03941e94fac9ee793a94452ad1365c9fc3f4f62216832", size = 4415405, upload-time = "2026-04-08T01:57:14.923Z" }, + { url = "https://files.pythonhosted.org/packages/9a/92/4ed714dbe93a066dc1f4b4581a464d2d7dbec9046f7c8b7016f5286329e2/cryptography-46.0.7-cp38-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:5e51be372b26ef4ba3de3c167cd3d1022934bc838ae9eaad7e644986d2a3d163", size = 4272715, upload-time = "2026-04-08T01:57:16.638Z" }, + { url = "https://files.pythonhosted.org/packages/b7/e6/a26b84096eddd51494bba19111f8fffe976f6a09f132706f8f1bf03f51f7/cryptography-46.0.7-cp38-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:cdf1a610ef82abb396451862739e3fc93b071c844399e15b90726ef7470eeaf2", size = 4918400, upload-time = "2026-04-08T01:57:19.021Z" }, + { url = "https://files.pythonhosted.org/packages/c7/08/ffd537b605568a148543ac3c2b239708ae0bd635064bab41359252ef88ed/cryptography-46.0.7-cp38-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:1d25aee46d0c6f1a501adcddb2d2fee4b979381346a78558ed13e50aa8a59067", size = 4450634, upload-time = "2026-04-08T01:57:21.185Z" }, + { url = "https://files.pythonhosted.org/packages/16/01/0cd51dd86ab5b9befe0d031e276510491976c3a80e9f6e31810cce46c4ad/cryptography-46.0.7-cp38-abi3-manylinux_2_31_armv7l.whl", hash = "sha256:cdfbe22376065ffcf8be74dc9a909f032df19bc58a699456a21712d6e5eabfd0", size = 3985233, upload-time = "2026-04-08T01:57:22.862Z" }, + { url = "https://files.pythonhosted.org/packages/92/49/819d6ed3a7d9349c2939f81b500a738cb733ab62fbecdbc1e38e83d45e12/cryptography-46.0.7-cp38-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:abad9dac36cbf55de6eb49badd4016806b3165d396f64925bf2999bcb67837ba", size = 4271955, upload-time = "2026-04-08T01:57:24.814Z" }, + { url = "https://files.pythonhosted.org/packages/80/07/ad9b3c56ebb95ed2473d46df0847357e01583f4c52a85754d1a55e29e4d0/cryptography-46.0.7-cp38-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:935ce7e3cfdb53e3536119a542b839bb94ec1ad081013e9ab9b7cfd478b05006", size = 4879888, upload-time = "2026-04-08T01:57:26.88Z" }, + { url = "https://files.pythonhosted.org/packages/b8/c7/201d3d58f30c4c2bdbe9b03844c291feb77c20511cc3586daf7edc12a47b/cryptography-46.0.7-cp38-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:35719dc79d4730d30f1c2b6474bd6acda36ae2dfae1e3c16f2051f215df33ce0", size = 4449961, upload-time = "2026-04-08T01:57:29.068Z" }, + { url = "https://files.pythonhosted.org/packages/a5/ef/649750cbf96f3033c3c976e112265c33906f8e462291a33d77f90356548c/cryptography-46.0.7-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:7bbc6ccf49d05ac8f7d7b5e2e2c33830d4fe2061def88210a126d130d7f71a85", size = 4401696, upload-time = "2026-04-08T01:57:31.029Z" }, + { url = "https://files.pythonhosted.org/packages/41/52/a8908dcb1a389a459a29008c29966c1d552588d4ae6d43f3a1a4512e0ebe/cryptography-46.0.7-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:a1529d614f44b863a7b480c6d000fe93b59acee9c82ffa027cfadc77521a9f5e", size = 4664256, upload-time = "2026-04-08T01:57:33.144Z" }, ] [[package]] -name = "cuda-pathfinder" -version = "1.5.2" +name = "cycler" +version = "0.12.1" source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a9/95/a3dbbb5028f35eafb79008e7522a75244477d2838f38cbb722248dabc2a8/cycler-0.12.1.tar.gz", hash = "sha256:88bb128f02ba341da8ef447245a9e138fae777f6a23943da4540077d3601eb1c", size = 7615, upload-time = "2023-10-07T05:32:18.335Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/f2/f9/1b9b60a30fc463c14cdea7a77228131a0ccc89572e8df9cb86c9648271ab/cuda_pathfinder-1.5.2-py3-none-any.whl", hash = "sha256:0c5f160a7756c5b072723cbbd6d861e38917ef956c68150b02f0b6e9271c71fa", size = 49988, upload-time = "2026-04-06T23:01:05.17Z" }, + { url = "https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl", hash = "sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30", size = 8321, upload-time = "2023-10-07T05:32:16.783Z" }, ] [[package]] -name = "cuda-toolkit" -version = "13.0.2" +name = "dataproperty" +version = "1.1.0" source = { registry = "https://pypi.org/simple" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/57/b2/453099f5f3b698d7d0eab38916aac44c7f76229f451709e2eb9db6615dcd/cuda_toolkit-13.0.2-py2.py3-none-any.whl", hash = "sha256:b198824cf2f54003f50d64ada3a0f184b42ca0846c1c94192fa269ecd97a66eb", size = 2364, upload-time = "2025-12-19T23:24:07.328Z" }, -] - -[package.optional-dependencies] -cublas = [ - { name = "nvidia-cublas", marker = "sys_platform == 'linux'" }, -] -cudart = [ - { name = "nvidia-cuda-runtime", marker = "sys_platform == 'linux'" }, -] -cufft = [ - { name = "nvidia-cufft", marker = "sys_platform == 'linux'" }, -] -cufile = [ - { name = "nvidia-cufile", marker = "sys_platform == 'linux'" }, -] -cupti = [ - { name = "nvidia-cuda-cupti", marker = "sys_platform == 'linux'" }, -] -curand = [ - { name = "nvidia-curand", marker = "sys_platform == 'linux'" }, -] -cusolver = [ - { name = "nvidia-cusolver", marker = "sys_platform == 'linux'" }, -] -cusparse = [ - { name = "nvidia-cusparse", marker = "sys_platform == 'linux'" }, -] -nvjitlink = [ - { name = "nvidia-nvjitlink", marker = "sys_platform == 'linux'" }, -] -nvrtc = [ - { name = "nvidia-cuda-nvrtc", marker = "sys_platform == 'linux'" }, -] -nvtx = [ - { name = "nvidia-nvtx", marker = "sys_platform == 'linux'" }, +dependencies = [ + { name = "mbstrdecoder", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "typepy", extra = ["datetime"], marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, ] - -[[package]] -name = "cycler" -version = "0.12.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a9/95/a3dbbb5028f35eafb79008e7522a75244477d2838f38cbb722248dabc2a8/cycler-0.12.1.tar.gz", hash = "sha256:88bb128f02ba341da8ef447245a9e138fae777f6a23943da4540077d3601eb1c", size = 7615, upload-time = "2023-10-07T05:32:18.335Z" } +sdist = { url = "https://files.pythonhosted.org/packages/0b/81/8c8b64ae873cb9014815214c07b63b12e3b18835780fb342223cfe3fe7d8/dataproperty-1.1.0.tar.gz", hash = "sha256:b038437a4097d1a1c497695c3586ea34bea67fdd35372b9a50f30bf044d77d04", size = 42574, upload-time = "2024-12-31T14:37:26.033Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl", hash = "sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30", size = 8321, upload-time = "2023-10-07T05:32:16.783Z" }, + { url = "https://files.pythonhosted.org/packages/21/c2/e12e95e289e6081a40454199ab213139ef16a528c7c86432de545b05a23a/DataProperty-1.1.0-py3-none-any.whl", hash = "sha256:c61fcb2e2deca35e6d1eb1f251a7f22f0dcde63e80e61f0cc18c19f42abfd25b", size = 27581, upload-time = "2024-12-31T14:37:22.657Z" }, ] [[package]] @@ -670,7 +928,8 @@ dependencies = [ { name = "httpx" }, { name = "huggingface-hub" }, { name = "multiprocess" }, - { name = "numpy" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.13'" }, + { name = "numpy", version = "2.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.13'" }, { name = "packaging" }, { name = "pandas" }, { name = "pyarrow" }, @@ -698,10 +957,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" }, ] @@ -754,6 +1009,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.whl", hash = "sha256:9659f7d87e46584a30b5780e43ac7a2143098441670ff0a49d5f9034c54a6c16", size = 469047, upload-time = "2025-07-17T16:51:58.613Z" }, ] +[[package]] +name = "distro" +version = "1.9.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/fc/f8/98eea607f65de6527f8a2e8885fc8015d3e6f5775df186e443e0964a11c3/distro-1.9.0.tar.gz", hash = "sha256:2fa77c6fd8940f116ee1d6b94a2f90b13b5ea8d019b98bc8bafdcabcdd9bdbed", size = 60722, upload-time = "2023-12-24T09:54:32.31Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/12/b3/231ffd4ab1fc9d679809f356cebee130ac7daa00d6d6f3206dd4fd137e9e/distro-1.9.0-py3-none-any.whl", hash = "sha256:7bffd925d65168f85027d8da9af6bddab658135b840670a223589bc0c8ef02b2", size = 20277, upload-time = "2023-12-24T09:54:30.421Z" }, +] + [[package]] name = "docstring-parser-fork" version = "0.0.14" @@ -774,6 +1038,39 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/b2/b7/545d2c10c1fc15e48653c91efde329a790f2eecfbbf2bd16003b5db2bab0/dotenv-0.9.9-py2.py3-none-any.whl", hash = "sha256:29cf74a087b31dafdb5a446b6d7e11cbce8ed2741540e2339c69fbef92c94ce9", size = 1892, upload-time = "2025-02-19T22:15:01.647Z" }, ] +[[package]] +name = "einops" +version = "0.8.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/2c/77/850bef8d72ffb9219f0b1aac23fbc1bf7d038ee6ea666f331fa273031aa2/einops-0.8.2.tar.gz", hash = "sha256:609da665570e5e265e27283aab09e7f279ade90c4f01bcfca111f3d3e13f2827", size = 56261, upload-time = "2026-01-26T04:13:17.638Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2a/09/f8d8f8f31e4483c10a906437b4ce31bdf3d6d417b73fe33f1a8b59e34228/einops-0.8.2-py3-none-any.whl", hash = "sha256:54058201ac7087911181bfec4af6091bb59380360f069276601256a76af08193", size = 65638, upload-time = "2026-01-26T04:13:18.546Z" }, +] + +[[package]] +name = "evaluate" +version = "0.4.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "datasets", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "dill", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "fsspec", extra = ["http"], marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "huggingface-hub", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "multiprocess", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "numpy", version = "2.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "packaging", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "pandas", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "requests", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "responses", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "tqdm", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "xxhash", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ee/55/198d8bef9179e9f4f8ed34580cec0706abe1a3c98659bce551734eff6b8f/evaluate-0.4.1.tar.gz", hash = "sha256:d721d9f2059ced79770d8a0509e954fbd1bbac96a8f9160e29888d8073cda3d9", size = 66212, upload-time = "2023-10-13T15:54:48.616Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/70/63/7644a1eb7b0297e585a6adec98ed9e575309bb973c33b394dae66bc35c69/evaluate-0.4.1-py3-none-any.whl", hash = "sha256:3ff079ab09572c0a2c1e6d749887c19f6783ab993320412cd39f6fe501d28510", size = 84132, upload-time = "2023-10-13T15:54:47.358Z" }, +] + [[package]] name = "executing" version = "2.2.1" @@ -783,6 +1080,31 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/c1/ea/53f2148663b321f21b5a606bd5f191517cf40b7072c0497d3c92c4a13b1e/executing-2.2.1-py2.py3-none-any.whl", hash = "sha256:760643d3452b4d777d295bb167ccc74c64a81df23fb5e08eff250c425a4b2017", size = 28317, upload-time = "2025-09-01T09:48:08.5Z" }, ] +[[package]] +name = "fastapi" +version = "0.135.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "annotated-doc", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "pydantic", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "starlette", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "typing-extensions", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "typing-inspection", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f7/e6/7adb4c5fa231e82c35b8f5741a9f2d055f520c29af5546fd70d3e8e1cd2e/fastapi-0.135.3.tar.gz", hash = "sha256:bd6d7caf1a2bdd8d676843cdcd2287729572a1ef524fc4d65c17ae002a1be654", size = 396524, upload-time = "2026-04-01T16:23:58.188Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/84/a4/5caa2de7f917a04ada20018eccf60d6cc6145b0199d55ca3711b0fc08312/fastapi-0.135.3-py3-none-any.whl", hash = "sha256:9b0f590c813acd13d0ab43dd8494138eb58e484bfac405db1f3187cfc5810d98", size = 117734, upload-time = "2026-04-01T16:23:59.328Z" }, +] + +[[package]] +name = "fastcore" +version = "1.12.38" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e9/1b/3a154001b183ef685c4916840893f95f75313b405a5f8b9297173a645125/fastcore-1.12.38.tar.gz", hash = "sha256:2ef7a1373b088f2df4b4921746696e18abc2121b3b2ea5ece854a6412c9bd60c", size = 97692, upload-time = "2026-04-10T22:28:59.728Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8b/ae/8b4b1e6a9fb5aad36dc00f1807793183f348a8a32bbe39f2325009d7be78/fastcore-1.12.38-py3-none-any.whl", hash = "sha256:4a8730e091f2e0e171fd0c8c42c67073a939858e613351782f88f66e6b2a7bc9", size = 102326, upload-time = "2026-04-10T22:28:57.776Z" }, +] + [[package]] name = "fastjsonschema" version = "2.21.2" @@ -801,6 +1123,31 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/b5/36/7fb70f04bf00bc646cd5bb45aa9eddb15e19437a28b8fb2b4a5249fac770/filelock-3.20.3-py3-none-any.whl", hash = "sha256:4b0dda527ee31078689fc205ec4f1c1bf7d56cf88b6dc9426c4f230e46c2dce1", size = 16701, upload-time = "2026-01-09T17:55:04.334Z" }, ] +[[package]] +name = "fire" +version = "0.7.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "termcolor", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c0/00/f8d10588d2019d6d6452653def1ee807353b21983db48550318424b5ff18/fire-0.7.1.tar.gz", hash = "sha256:3b208f05c736de98fb343310d090dcc4d8c78b2a89ea4f32b837c586270a9cbf", size = 88720, upload-time = "2025-08-16T20:20:24.175Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e5/4c/93d0f85318da65923e4b91c1c2ff03d8a458cbefebe3bc612a6693c7906d/fire-0.7.1-py3-none-any.whl", hash = "sha256:e43fd8a5033a9001e7e2973bab96070694b9f12f2e0ecf96d4683971b5ab1882", size = 115945, upload-time = "2025-08-16T20:20:22.87Z" }, +] + +[[package]] +name = "fla-core" +version = "0.4.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "einops", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "torch", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f1/de/0d6bd5664ba2e711cabdde11ccb41ddcdd866c531e40900af3601bd7b8c6/fla_core-0.4.1.tar.gz", hash = "sha256:38ab28966eeadc2141b29e87c2bf72a8a4851e00af9d25bbbc3596b1fb53450d", size = 319608, upload-time = "2025-12-24T18:07:37.669Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f6/43/945ef69eb48a14c30fd7323d3e0b560c821ae71e6d3ef979e06a901bc3b9/fla_core-0.4.1-py3-none-any.whl", hash = "sha256:93c6afe4c80fc7bc705fa8aeea6a46d2cf2d77383f9619a41863c7114c801bab", size = 437282, upload-time = "2025-12-24T18:07:34.41Z" }, +] + [[package]] name = "flake8" version = "7.3.0" @@ -825,6 +1172,19 @@ dependencies = [ ] sdist = { url = "https://files.pythonhosted.org/packages/e7/d6/2bb09fab21521424d5afc836aa0057d15a92f5e738e506a3e3cb035be517/flake8_cognitive_complexity-0.1.0.tar.gz", hash = "sha256:f202df054e4f6ff182b659c261922b9c684628a47beb19cb0973c50d6a7831c1", size = 3061, upload-time = "2020-08-01T05:49:18.353Z" } +[[package]] +name = "flash-linear-attention" +version = "0.4.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "fla-core", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "transformers", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/46/83/7d8ec7ffb5229080b1c9b772338ff588cbd63282ac355ede2a12a6e174a8/flash_linear_attention-0.4.1.tar.gz", hash = "sha256:127ee7273ed15ac17f72bcf4c75e1051719d8fbe0a2d1d047e59406f36d81ee2", size = 158280, upload-time = "2025-12-24T18:07:38.812Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/63/d5/6327559a9d5b9243b10c3984f1bcef256ed2ad06d105a3bb8f7b2979659c/flash_linear_attention-0.4.1-py3-none-any.whl", hash = "sha256:d18bdfe9d1f4b424676444eac9d50fb8433b70e5d4e0e0878b20bcbcdbea57ce", size = 287415, upload-time = "2025-12-24T18:07:35.815Z" }, +] + [[package]] name = "fonttools" version = "4.61.1" @@ -847,22 +1207,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" }, ] @@ -929,38 +1273,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/fd/00/04ca1c3a7a124b6de4f8a9a17cc2fcad138b4608e7a3fc5877804b8715d7/frozenlist-1.8.0-cp313-cp313t-win32.whl", hash = "sha256:0f96534f8bfebc1a394209427d0f8a63d343c9779cda6fc25e8e121b5fd8555b", size = 43492, upload-time = "2025-10-06T05:37:04.915Z" }, { url = "https://files.pythonhosted.org/packages/59/5e/c69f733a86a94ab10f68e496dc6b7e8bc078ebb415281d5698313e3af3a1/frozenlist-1.8.0-cp313-cp313t-win_amd64.whl", hash = "sha256:5d63a068f978fc69421fb0e6eb91a9603187527c86b7cd3f534a5b77a592b888", size = 48034, upload-time = "2025-10-06T05:37:06.343Z" }, { url = "https://files.pythonhosted.org/packages/16/6c/be9d79775d8abe79b05fa6d23da99ad6e7763a1d080fbae7290b286093fd/frozenlist-1.8.0-cp313-cp313t-win_arm64.whl", hash = "sha256:bf0a7e10b077bf5fb9380ad3ae8ce20ef919a6ad93b4552896419ac7e1d8e042", size = 41749, upload-time = "2025-10-06T05:37:07.431Z" }, - { url = "https://files.pythonhosted.org/packages/f1/c8/85da824b7e7b9b6e7f7705b2ecaf9591ba6f79c1177f324c2735e41d36a2/frozenlist-1.8.0-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:cee686f1f4cadeb2136007ddedd0aaf928ab95216e7691c63e50a8ec066336d0", size = 86127, upload-time = "2025-10-06T05:37:08.438Z" }, - { url = "https://files.pythonhosted.org/packages/8e/e8/a1185e236ec66c20afd72399522f142c3724c785789255202d27ae992818/frozenlist-1.8.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:119fb2a1bd47307e899c2fac7f28e85b9a543864df47aa7ec9d3c1b4545f096f", size = 49698, upload-time = "2025-10-06T05:37:09.48Z" }, - { url = "https://files.pythonhosted.org/packages/a1/93/72b1736d68f03fda5fdf0f2180fb6caaae3894f1b854d006ac61ecc727ee/frozenlist-1.8.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:4970ece02dbc8c3a92fcc5228e36a3e933a01a999f7094ff7c23fbd2beeaa67c", size = 49749, upload-time = "2025-10-06T05:37:10.569Z" }, - { url = "https://files.pythonhosted.org/packages/a7/b2/fabede9fafd976b991e9f1b9c8c873ed86f202889b864756f240ce6dd855/frozenlist-1.8.0-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:cba69cb73723c3f329622e34bdbf5ce1f80c21c290ff04256cff1cd3c2036ed2", size = 231298, upload-time = "2025-10-06T05:37:11.993Z" }, - { url = "https://files.pythonhosted.org/packages/3a/3b/d9b1e0b0eed36e70477ffb8360c49c85c8ca8ef9700a4e6711f39a6e8b45/frozenlist-1.8.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:778a11b15673f6f1df23d9586f83c4846c471a8af693a22e066508b77d201ec8", size = 232015, upload-time = "2025-10-06T05:37:13.194Z" }, - { url = "https://files.pythonhosted.org/packages/dc/94/be719d2766c1138148564a3960fc2c06eb688da592bdc25adcf856101be7/frozenlist-1.8.0-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:0325024fe97f94c41c08872db482cf8ac4800d80e79222c6b0b7b162d5b13686", size = 225038, upload-time = "2025-10-06T05:37:14.577Z" }, - { url = "https://files.pythonhosted.org/packages/e4/09/6712b6c5465f083f52f50cf74167b92d4ea2f50e46a9eea0523d658454ae/frozenlist-1.8.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:97260ff46b207a82a7567b581ab4190bd4dfa09f4db8a8b49d1a958f6aa4940e", size = 240130, upload-time = "2025-10-06T05:37:15.781Z" }, - { url = "https://files.pythonhosted.org/packages/f8/d4/cd065cdcf21550b54f3ce6a22e143ac9e4836ca42a0de1022da8498eac89/frozenlist-1.8.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:54b2077180eb7f83dd52c40b2750d0a9f175e06a42e3213ce047219de902717a", size = 242845, upload-time = "2025-10-06T05:37:17.037Z" }, - { url = "https://files.pythonhosted.org/packages/62/c3/f57a5c8c70cd1ead3d5d5f776f89d33110b1addae0ab010ad774d9a44fb9/frozenlist-1.8.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:2f05983daecab868a31e1da44462873306d3cbfd76d1f0b5b69c473d21dbb128", size = 229131, upload-time = "2025-10-06T05:37:18.221Z" }, - { url = "https://files.pythonhosted.org/packages/6c/52/232476fe9cb64f0742f3fde2b7d26c1dac18b6d62071c74d4ded55e0ef94/frozenlist-1.8.0-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:33f48f51a446114bc5d251fb2954ab0164d5be02ad3382abcbfe07e2531d650f", size = 240542, upload-time = "2025-10-06T05:37:19.771Z" }, - { url = "https://files.pythonhosted.org/packages/5f/85/07bf3f5d0fb5414aee5f47d33c6f5c77bfe49aac680bfece33d4fdf6a246/frozenlist-1.8.0-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:154e55ec0655291b5dd1b8731c637ecdb50975a2ae70c606d100750a540082f7", size = 237308, upload-time = "2025-10-06T05:37:20.969Z" }, - { url = "https://files.pythonhosted.org/packages/11/99/ae3a33d5befd41ac0ca2cc7fd3aa707c9c324de2e89db0e0f45db9a64c26/frozenlist-1.8.0-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:4314debad13beb564b708b4a496020e5306c7333fa9a3ab90374169a20ffab30", size = 238210, upload-time = "2025-10-06T05:37:22.252Z" }, - { url = "https://files.pythonhosted.org/packages/b2/60/b1d2da22f4970e7a155f0adde9b1435712ece01b3cd45ba63702aea33938/frozenlist-1.8.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:073f8bf8becba60aa931eb3bc420b217bb7d5b8f4750e6f8b3be7f3da85d38b7", size = 231972, upload-time = "2025-10-06T05:37:23.5Z" }, - { url = "https://files.pythonhosted.org/packages/3f/ab/945b2f32de889993b9c9133216c068b7fcf257d8595a0ac420ac8677cab0/frozenlist-1.8.0-cp314-cp314-win32.whl", hash = "sha256:bac9c42ba2ac65ddc115d930c78d24ab8d4f465fd3fc473cdedfccadb9429806", size = 40536, upload-time = "2025-10-06T05:37:25.581Z" }, - { url = "https://files.pythonhosted.org/packages/59/ad/9caa9b9c836d9ad6f067157a531ac48b7d36499f5036d4141ce78c230b1b/frozenlist-1.8.0-cp314-cp314-win_amd64.whl", hash = "sha256:3e0761f4d1a44f1d1a47996511752cf3dcec5bbdd9cc2b4fe595caf97754b7a0", size = 44330, upload-time = "2025-10-06T05:37:26.928Z" }, - { url = "https://files.pythonhosted.org/packages/82/13/e6950121764f2676f43534c555249f57030150260aee9dcf7d64efda11dd/frozenlist-1.8.0-cp314-cp314-win_arm64.whl", hash = "sha256:d1eaff1d00c7751b7c6662e9c5ba6eb2c17a2306ba5e2a37f24ddf3cc953402b", size = 40627, upload-time = "2025-10-06T05:37:28.075Z" }, - { url = "https://files.pythonhosted.org/packages/c0/c7/43200656ecc4e02d3f8bc248df68256cd9572b3f0017f0a0c4e93440ae23/frozenlist-1.8.0-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:d3bb933317c52d7ea5004a1c442eef86f426886fba134ef8cf4226ea6ee1821d", size = 89238, upload-time = "2025-10-06T05:37:29.373Z" }, - { url = "https://files.pythonhosted.org/packages/d1/29/55c5f0689b9c0fb765055629f472c0de484dcaf0acee2f7707266ae3583c/frozenlist-1.8.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:8009897cdef112072f93a0efdce29cd819e717fd2f649ee3016efd3cd885a7ed", size = 50738, upload-time = "2025-10-06T05:37:30.792Z" }, - { url = "https://files.pythonhosted.org/packages/ba/7d/b7282a445956506fa11da8c2db7d276adcbf2b17d8bb8407a47685263f90/frozenlist-1.8.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:2c5dcbbc55383e5883246d11fd179782a9d07a986c40f49abe89ddf865913930", size = 51739, upload-time = "2025-10-06T05:37:32.127Z" }, - { url = "https://files.pythonhosted.org/packages/62/1c/3d8622e60d0b767a5510d1d3cf21065b9db874696a51ea6d7a43180a259c/frozenlist-1.8.0-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:39ecbc32f1390387d2aa4f5a995e465e9e2f79ba3adcac92d68e3e0afae6657c", size = 284186, upload-time = "2025-10-06T05:37:33.21Z" }, - { url = "https://files.pythonhosted.org/packages/2d/14/aa36d5f85a89679a85a1d44cd7a6657e0b1c75f61e7cad987b203d2daca8/frozenlist-1.8.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:92db2bf818d5cc8d9c1f1fc56b897662e24ea5adb36ad1f1d82875bd64e03c24", size = 292196, upload-time = "2025-10-06T05:37:36.107Z" }, - { url = "https://files.pythonhosted.org/packages/05/23/6bde59eb55abd407d34f77d39a5126fb7b4f109a3f611d3929f14b700c66/frozenlist-1.8.0-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:2dc43a022e555de94c3b68a4ef0b11c4f747d12c024a520c7101709a2144fb37", size = 273830, upload-time = "2025-10-06T05:37:37.663Z" }, - { url = "https://files.pythonhosted.org/packages/d2/3f/22cff331bfad7a8afa616289000ba793347fcd7bc275f3b28ecea2a27909/frozenlist-1.8.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:cb89a7f2de3602cfed448095bab3f178399646ab7c61454315089787df07733a", size = 294289, upload-time = "2025-10-06T05:37:39.261Z" }, - { url = "https://files.pythonhosted.org/packages/a4/89/5b057c799de4838b6c69aa82b79705f2027615e01be996d2486a69ca99c4/frozenlist-1.8.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:33139dc858c580ea50e7e60a1b0ea003efa1fd42e6ec7fdbad78fff65fad2fd2", size = 300318, upload-time = "2025-10-06T05:37:43.213Z" }, - { url = "https://files.pythonhosted.org/packages/30/de/2c22ab3eb2a8af6d69dc799e48455813bab3690c760de58e1bf43b36da3e/frozenlist-1.8.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:168c0969a329b416119507ba30b9ea13688fafffac1b7822802537569a1cb0ef", size = 282814, upload-time = "2025-10-06T05:37:45.337Z" }, - { url = "https://files.pythonhosted.org/packages/59/f7/970141a6a8dbd7f556d94977858cfb36fa9b66e0892c6dd780d2219d8cd8/frozenlist-1.8.0-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:28bd570e8e189d7f7b001966435f9dac6718324b5be2990ac496cf1ea9ddb7fe", size = 291762, upload-time = "2025-10-06T05:37:46.657Z" }, - { url = "https://files.pythonhosted.org/packages/c1/15/ca1adae83a719f82df9116d66f5bb28bb95557b3951903d39135620ef157/frozenlist-1.8.0-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:b2a095d45c5d46e5e79ba1e5b9cb787f541a8dee0433836cea4b96a2c439dcd8", size = 289470, upload-time = "2025-10-06T05:37:47.946Z" }, - { url = "https://files.pythonhosted.org/packages/ac/83/dca6dc53bf657d371fbc88ddeb21b79891e747189c5de990b9dfff2ccba1/frozenlist-1.8.0-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:eab8145831a0d56ec9c4139b6c3e594c7a83c2c8be25d5bcf2d86136a532287a", size = 289042, upload-time = "2025-10-06T05:37:49.499Z" }, - { url = "https://files.pythonhosted.org/packages/96/52/abddd34ca99be142f354398700536c5bd315880ed0a213812bc491cff5e4/frozenlist-1.8.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:974b28cf63cc99dfb2188d8d222bc6843656188164848c4f679e63dae4b0708e", size = 283148, upload-time = "2025-10-06T05:37:50.745Z" }, - { url = "https://files.pythonhosted.org/packages/af/d3/76bd4ed4317e7119c2b7f57c3f6934aba26d277acc6309f873341640e21f/frozenlist-1.8.0-cp314-cp314t-win32.whl", hash = "sha256:342c97bf697ac5480c0a7ec73cd700ecfa5a8a40ac923bd035484616efecc2df", size = 44676, upload-time = "2025-10-06T05:37:52.222Z" }, - { url = "https://files.pythonhosted.org/packages/89/76/c615883b7b521ead2944bb3480398cbb07e12b7b4e4d073d3752eb721558/frozenlist-1.8.0-cp314-cp314t-win_amd64.whl", hash = "sha256:06be8f67f39c8b1dc671f5d83aaefd3358ae5cdcf8314552c57e7ed3e6475bdd", size = 49451, upload-time = "2025-10-06T05:37:53.425Z" }, - { url = "https://files.pythonhosted.org/packages/e0/a3/5982da14e113d07b325230f95060e2169f5311b1017ea8af2a29b374c289/frozenlist-1.8.0-cp314-cp314t-win_arm64.whl", hash = "sha256:102e6314ca4da683dca92e3b1355490fed5f313b768500084fbe6371fddfdb79", size = 42507, upload-time = "2025-10-06T05:37:54.513Z" }, { url = "https://files.pythonhosted.org/packages/9a/9a/e35b4a917281c0b8419d4207f4334c8e8c5dbf4f3f5f9ada73958d937dcc/frozenlist-1.8.0-py3-none-any.whl", hash = "sha256:0c18a16eab41e82c295618a77502e17b195883241c563b00f0aa5106fc4eaa0d", size = 13409, upload-time = "2025-10-06T05:38:16.721Z" }, ] @@ -978,6 +1290,265 @@ http = [ { name = "aiohttp" }, ] +[[package]] +name = "gcsfs" +version = "2025.10.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "aiohttp", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "decorator", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "fsspec", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "google-auth", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "google-auth-oauthlib", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "google-cloud-storage", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "requests", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/27/62/e3131f4cb0e0a9b8d5a0586ba2cbef3a5ec05b5352d9bad50e1eb1417fed/gcsfs-2025.10.0.tar.gz", hash = "sha256:7ac9b16a145bcb1a69fa9cf770ccd3cee7b9a09236911dd586c1d9911b71583d", size = 85595, upload-time = "2025-10-30T15:16:30.08Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7d/f3/393d486f33bf78ce8af4ced1814e936d0e71c630e8d98c1257a06e511c9a/gcsfs-2025.10.0-py2.py3-none-any.whl", hash = "sha256:654457af3a524e03d86658c5d8c6f3887689d6aa0c2c6b1c3b2d8e1fe2b77c09", size = 36911, upload-time = "2025-10-30T15:16:29.044Z" }, +] + +[[package]] +name = "gitdb" +version = "4.0.12" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "smmap" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/72/94/63b0fc47eb32792c7ba1fe1b694daec9a63620db1e313033d18140c2320a/gitdb-4.0.12.tar.gz", hash = "sha256:5ef71f855d191a3326fcfbc0d5da835f26b13fbcba60c32c21091c349ffdb571", size = 394684, upload-time = "2025-01-02T07:20:46.413Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a0/61/5c78b91c3143ed5c14207f463aecfc8f9dbb5092fb2869baf37c273b2705/gitdb-4.0.12-py3-none-any.whl", hash = "sha256:67073e15955400952c6565cc3e707c554a4eea2e428946f7a4c162fab9bd9bcf", size = 62794, upload-time = "2025-01-02T07:20:43.624Z" }, +] + +[[package]] +name = "gitpython" +version = "3.1.46" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "gitdb" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/df/b5/59d16470a1f0dfe8c793f9ef56fd3826093fc52b3bd96d6b9d6c26c7e27b/gitpython-3.1.46.tar.gz", hash = "sha256:400124c7d0ef4ea03f7310ac2fbf7151e09ff97f2a3288d64a440c584a29c37f", size = 215371, upload-time = "2026-01-01T15:37:32.073Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6a/09/e21df6aef1e1ffc0c816f0522ddc3f6dcded766c3261813131c78a704470/gitpython-3.1.46-py3-none-any.whl", hash = "sha256:79812ed143d9d25b6d176a10bb511de0f9c67b1fa641d82097b0ab90398a2058", size = 208620, upload-time = "2026-01-01T15:37:30.574Z" }, +] + +[[package]] +name = "google-api-core" +version = "2.30.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "google-auth", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "googleapis-common-protos", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "proto-plus", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "protobuf", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "requests", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/16/ce/502a57fb0ec752026d24df1280b162294b22a0afb98a326084f9a979138b/google_api_core-2.30.3.tar.gz", hash = "sha256:e601a37f148585319b26db36e219df68c5d07b6382cff2d580e83404e44d641b", size = 177001, upload-time = "2026-04-10T00:41:28.035Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/03/15/e56f351cf6ef1cfea58e6ac226a7318ed1deb2218c4b3cc9bd9e4b786c5a/google_api_core-2.30.3-py3-none-any.whl", hash = "sha256:a85761ba72c444dad5d611c2220633480b2b6be2521eca69cca2dbb3ffd6bfe8", size = 173274, upload-time = "2026-04-09T22:57:16.198Z" }, +] + +[[package]] +name = "google-auth" +version = "2.49.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cryptography", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "pyasn1-modules", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c6/fc/e925290a1ad95c975c459e2df070fac2b90954e13a0370ac505dff78cb99/google_auth-2.49.2.tar.gz", hash = "sha256:c1ae38500e73065dcae57355adb6278cf8b5c8e391994ae9cbadbcb9631ab409", size = 333958, upload-time = "2026-04-10T00:41:21.888Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/73/76/d241a5c927433420507215df6cac1b1fa4ac0ba7a794df42a84326c68da8/google_auth-2.49.2-py3-none-any.whl", hash = "sha256:c2720924dfc82dedb962c9f52cabb2ab16714fd0a6a707e40561d217574ed6d5", size = 240638, upload-time = "2026-04-10T00:41:14.501Z" }, +] + +[[package]] +name = "google-auth-oauthlib" +version = "1.3.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "google-auth", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "requests-oauthlib", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a6/82/62482931dcbe5266a2680d0da17096f2aab983ecb320277d9556700ce00e/google_auth_oauthlib-1.3.1.tar.gz", hash = "sha256:14c22c7b3dd3d06dbe44264144409039465effdd1eef94f7ce3710e486cc4bfa", size = 21663, upload-time = "2026-03-30T22:49:56.408Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2a/e0/cb454a95f460903e39f101e950038ec24a072ca69d0a294a6df625cc1627/google_auth_oauthlib-1.3.1-py3-none-any.whl", hash = "sha256:1a139ef23f1318756805b0e95f655c238bffd29655329a2978218248da4ee7f8", size = 19247, upload-time = "2026-03-30T20:02:23.894Z" }, +] + +[[package]] +name = "google-cloud-core" +version = "2.5.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "google-api-core", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "google-auth", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/dc/24/6ca08b0a03c7b0c620427503ab00353a4ae806b848b93bcea18b6b76fde6/google_cloud_core-2.5.1.tar.gz", hash = "sha256:3dc94bdec9d05a31d9f355045ed0f369fbc0d8c665076c734f065d729800f811", size = 36078, upload-time = "2026-03-30T22:50:08.057Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/73/d9/5bb050cb32826466aa9b25f79e2ca2879fe66cb76782d4ed798dd7506151/google_cloud_core-2.5.1-py3-none-any.whl", hash = "sha256:ea62cdf502c20e3e14be8a32c05ed02113d7bef454e40ff3fab6fe1ec9f1f4e7", size = 29452, upload-time = "2026-03-30T22:48:31.567Z" }, +] + +[[package]] +name = "google-cloud-storage" +version = "3.10.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "google-api-core", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "google-auth", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "google-cloud-core", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "google-crc32c", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "google-resumable-media", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "requests", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/4c/47/205eb8e9a1739b5345843e5a425775cbdc472cc38e7eda082ba5b8d02450/google_cloud_storage-3.10.1.tar.gz", hash = "sha256:97db9aa4460727982040edd2bd13ff3d5e2260b5331ad22895802da1fc2a5286", size = 17309950, upload-time = "2026-03-23T09:35:23.409Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ad/ff/ca9ab2417fa913d75aae38bf40bf856bb2749a604b2e0f701b37cfcd23cc/google_cloud_storage-3.10.1-py3-none-any.whl", hash = "sha256:a72f656759b7b99bda700f901adcb3425a828d4a29f911bc26b3ea79c5b1217f", size = 324453, upload-time = "2026-03-23T09:35:21.368Z" }, +] + +[[package]] +name = "google-crc32c" +version = "1.8.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/03/41/4b9c02f99e4c5fb477122cd5437403b552873f014616ac1d19ac8221a58d/google_crc32c-1.8.0.tar.gz", hash = "sha256:a428e25fb7691024de47fecfbff7ff957214da51eddded0da0ae0e0f03a2cf79", size = 14192, upload-time = "2025-12-16T00:35:25.142Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ce/a9/a780cc66f86335a6019f557a8aaca8fbb970728f0efd2430d15ff1beae0e/google_crc32c-1.8.0-cp312-cp312-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:14f87e04d613dfa218d6135e81b78272c3b904e2a7053b841481b38a7d901411", size = 33364, upload-time = "2025-12-16T00:40:22.96Z" }, + { url = "https://files.pythonhosted.org/packages/21/3f/3457ea803db0198c9aaca2dd373750972ce28a26f00544b6b85088811939/google_crc32c-1.8.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:cb5c869c2923d56cb0c8e6bcdd73c009c36ae39b652dbe46a05eb4ef0ad01454", size = 33740, upload-time = "2025-12-16T00:40:23.96Z" }, + { url = "https://files.pythonhosted.org/packages/ce/42/b468aec74a0354b34c8cbf748db20d6e350a68a2b0912e128cabee49806c/google_crc32c-1.8.0-cp313-cp313-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:3b9776774b24ba76831609ffbabce8cdf6fa2bd5e9df37b594221c7e333a81fa", size = 33344, upload-time = "2025-12-16T00:40:24.742Z" }, + { url = "https://files.pythonhosted.org/packages/1c/e8/b33784d6fc77fb5062a8a7854e43e1e618b87d5ddf610a88025e4de6226e/google_crc32c-1.8.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:89c17d53d75562edfff86679244830599ee0a48efc216200691de8b02ab6b2b8", size = 33694, upload-time = "2025-12-16T00:40:25.505Z" }, +] + +[[package]] +name = "google-resumable-media" +version = "2.8.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "google-crc32c", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/3f/d1/b1ea14b93b6b78f57fc580125de44e9f593ab88dd2460f1a8a8d18f74754/google_resumable_media-2.8.2.tar.gz", hash = "sha256:f3354a182ebd193ae3f42e3ef95e6c9b10f128320de23ac7637236713b1acd70", size = 2164510, upload-time = "2026-03-30T23:34:25.369Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5e/f8/50bfaf4658431ff9de45c5c3935af7ab01157a4903c603cd0eee6e78e087/google_resumable_media-2.8.2-py3-none-any.whl", hash = "sha256:82b6d8ccd11765268cdd2a2123f417ec806b8eef3000a9a38dfe3033da5fb220", size = 81511, upload-time = "2026-03-30T23:34:09.671Z" }, +] + +[[package]] +name = "googleapis-common-protos" +version = "1.74.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "protobuf", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/20/18/a746c8344152d368a5aac738d4c857012f2c5d1fd2eac7e17b647a7861bd/googleapis_common_protos-1.74.0.tar.gz", hash = "sha256:57971e4eeeba6aad1163c1f0fc88543f965bb49129b8bb55b2b7b26ecab084f1", size = 151254, upload-time = "2026-04-02T21:23:26.679Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b6/b0/be5d3329badb9230b765de6eea66b73abd5944bdeb5afb3562ddcd80ae84/googleapis_common_protos-1.74.0-py3-none-any.whl", hash = "sha256:702216f78610bb510e3f12ac3cafd281b7ac45cc5d86e90ad87e4d301a3426b5", size = 300743, upload-time = "2026-04-02T21:22:49.108Z" }, +] + +[[package]] +name = "gradio" +version = "6.12.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "audioop-lts", marker = "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "brotli", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "fastapi", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "gradio-client", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "groovy", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "hf-gradio", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "httpx", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "huggingface-hub", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "jinja2", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "markupsafe", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "numpy", version = "2.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "orjson", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "packaging", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "pandas", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "pillow", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "pydantic", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "pydub", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "python-multipart", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "pytz", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "pyyaml", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "safehttpx", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "semantic-version", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "starlette", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "tomlkit", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "typer", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "typing-extensions", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "uvicorn", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9c/a3/d7b0f752d010a9ccf7ab938d787c912d7ebb43cd3424754e0266a53b4273/gradio-6.12.0.tar.gz", hash = "sha256:5a7808e7ef82cdcb711608275d6779d3368072f93777d649661ffae968af8107", size = 35955906, upload-time = "2026-04-10T20:57:02.335Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/dd/30/d7c61ec8c3f4ad337e20090d771c20d4b61e84aede8d92dc784ab32efa3c/gradio-6.12.0-py3-none-any.whl", hash = "sha256:5587f9ab7b8bfb757e0de9dffebadc63bb354dec5dde22fd7f0266df4b8bd271", size = 19633159, upload-time = "2026-04-10T20:56:59.084Z" }, +] + +[package.optional-dependencies] +oauth = [ + { name = "authlib", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "itsdangerous", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] + +[[package]] +name = "gradio-client" +version = "2.4.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "fsspec", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "httpx", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "huggingface-hub", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "packaging", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "typing-extensions", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/5f/5f/d480fb5e61cf47eaae6c4de2c84a5f130ebcaa2a0a4f36f9f494f53eea35/gradio_client-2.4.1.tar.gz", hash = "sha256:c08783eb3dbdfd6d567bfd912a432fd8ab37b9e633b03e794cc1a0fa105a6d31", size = 58611, upload-time = "2026-04-10T20:57:13.174Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/68/72/a4611ed242a7936d38bd5262c6071fff8dda86cab1c06172a1e372783772/gradio_client-2.4.1-py3-none-any.whl", hash = "sha256:e6cef91ddee06e6a10788c5119977a35aee987968e7a87b0c4716809172c33d4", size = 59563, upload-time = "2026-04-10T20:57:11.774Z" }, +] + +[[package]] +name = "groovy" +version = "0.1.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/52/36/bbdede67400277bef33d3ec0e6a31750da972c469f75966b4930c753218f/groovy-0.1.2.tar.gz", hash = "sha256:25c1dc09b3f9d7e292458aa762c6beb96ea037071bf5e917fc81fb78d2231083", size = 17325, upload-time = "2025-02-28T20:24:56.068Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/28/27/3d6dcadc8a3214d8522c1e7f6a19554e33659be44546d44a2f7572ac7d2a/groovy-0.1.2-py3-none-any.whl", hash = "sha256:7f7975bab18c729a257a8b1ae9dcd70b7cafb1720481beae47719af57c35fa64", size = 14090, upload-time = "2025-02-28T20:24:55.152Z" }, +] + +[[package]] +name = "grpcio" +version = "1.80.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b7/48/af6173dbca4454f4637a4678b67f52ca7e0c1ed7d5894d89d434fecede05/grpcio-1.80.0.tar.gz", hash = "sha256:29aca15edd0688c22ba01d7cc01cb000d72b2033f4a3c72a81a19b56fd143257", size = 12978905, upload-time = "2026-03-30T08:49:10.502Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5c/e8/a2b749265eb3415abc94f2e619bbd9e9707bebdda787e61c593004ec927a/grpcio-1.80.0-cp312-cp312-linux_armv7l.whl", hash = "sha256:c624cc9f1008361014378c9d776de7182b11fe8b2e5a81bc69f23a295f2a1ad0", size = 6015616, upload-time = "2026-03-30T08:47:13.428Z" }, + { url = "https://files.pythonhosted.org/packages/6e/5e/d319c6e997b50c155ac5a8cb12f5173d5b42677510e886d250d50264949d/grpcio-1.80.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d334591df610ab94714048e0d5b4f3dd5ad1bee74dfec11eee344220077a79de", size = 6563866, upload-time = "2026-03-30T08:47:18.588Z" }, + { url = "https://files.pythonhosted.org/packages/ae/f6/fdd975a2cb4d78eb67769a7b3b3830970bfa2e919f1decf724ae4445f42c/grpcio-1.80.0-cp312-cp312-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:0cb517eb1d0d0aaf1d87af7cc5b801d686557c1d88b2619f5e31fab3c2315921", size = 7273060, upload-time = "2026-03-30T08:47:21.113Z" }, + { url = "https://files.pythonhosted.org/packages/db/f0/a3deb5feba60d9538a962913e37bd2e69a195f1c3376a3dd44fe0427e996/grpcio-1.80.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:4e78c4ac0d97dc2e569b2f4bcbbb447491167cb358d1a389fc4af71ab6f70411", size = 6782121, upload-time = "2026-03-30T08:47:23.827Z" }, + { url = "https://files.pythonhosted.org/packages/ca/84/36c6dcfddc093e108141f757c407902a05085e0c328007cb090d56646cdf/grpcio-1.80.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2ed770b4c06984f3b47eb0517b1c69ad0b84ef3f40128f51448433be904634cd", size = 7383811, upload-time = "2026-03-30T08:47:26.517Z" }, + { url = "https://files.pythonhosted.org/packages/7c/ef/f3a77e3dc5b471a0ec86c564c98d6adfa3510d38f8ee99010410858d591e/grpcio-1.80.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:256507e2f524092f1473071a05e65a5b10d84b82e3ff24c5b571513cfaa61e2f", size = 8393860, upload-time = "2026-03-30T08:47:29.439Z" }, + { url = "https://files.pythonhosted.org/packages/9b/8d/9d4d27ed7f33d109c50d6b5ce578a9914aa68edab75d65869a17e630a8d1/grpcio-1.80.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:9a6284a5d907c37db53350645567c522be314bac859a64a7a5ca63b77bb7958f", size = 7830132, upload-time = "2026-03-30T08:47:33.254Z" }, + { url = "https://files.pythonhosted.org/packages/2f/3a/7c3c25789e3f069e581dc342e03613c5b1cb012c4e8c7d9d5cf960a75856/grpcio-1.80.0-cp313-cp313-linux_armv7l.whl", hash = "sha256:e9e408fc016dffd20661f0126c53d8a31c2821b5c13c5d67a0f5ed5de93319ad", size = 6017243, upload-time = "2026-03-30T08:47:40.075Z" }, + { url = "https://files.pythonhosted.org/packages/18/3a/23347d35f76f639e807fb7a36fad3068aed100996849a33809591f26eca6/grpcio-1.80.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:8ac393b58aa16991a2f1144ec578084d544038c12242da3a215966b512904d0f", size = 6567644, upload-time = "2026-03-30T08:47:46.806Z" }, + { url = "https://files.pythonhosted.org/packages/ff/40/96e07ecb604a6a67ae6ab151e3e35b132875d98bc68ec65f3e5ab3e781d7/grpcio-1.80.0-cp313-cp313-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:68e5851ac4b9afe07e7f84483803ad167852570d65326b34d54ca560bfa53fb6", size = 7277830, upload-time = "2026-03-30T08:47:49.643Z" }, + { url = "https://files.pythonhosted.org/packages/9b/e2/da1506ecea1f34a5e365964644b35edef53803052b763ca214ba3870c856/grpcio-1.80.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:873ff5d17d68992ef6605330127425d2fc4e77e612fa3c3e0ed4e668685e3140", size = 6783216, upload-time = "2026-03-30T08:47:52.817Z" }, + { url = "https://files.pythonhosted.org/packages/44/83/3b20ff58d0c3b7f6caaa3af9a4174d4023701df40a3f39f7f1c8e7c48f9d/grpcio-1.80.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:2bea16af2750fd0a899bf1abd9022244418b55d1f37da2202249ba4ba673838d", size = 7385866, upload-time = "2026-03-30T08:47:55.687Z" }, + { url = "https://files.pythonhosted.org/packages/47/45/55c507599c5520416de5eefecc927d6a0d7af55e91cfffb2e410607e5744/grpcio-1.80.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ba0db34f7e1d803a878284cd70e4c63cb6ae2510ba51937bf8f45ba997cefcf7", size = 8391602, upload-time = "2026-03-30T08:47:58.303Z" }, + { url = "https://files.pythonhosted.org/packages/10/bb/dd06f4c24c01db9cf11341b547d0a016b2c90ed7dbbb086a5710df7dd1d7/grpcio-1.80.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8eb613f02d34721f1acf3626dfdb3545bd3c8505b0e52bf8b5710a28d02e8aa7", size = 7826752, upload-time = "2026-03-30T08:48:01.311Z" }, +] + +[[package]] +name = "grpclib" +version = "0.4.9" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "h2", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "multidict", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/5b/28/5a2c299ec82a876a252c5919aa895a6f1d1d35c96417c5ce4a4660dc3a80/grpclib-0.4.9.tar.gz", hash = "sha256:cc589c330fa81004c6400a52a566407574498cb5b055fa927013361e21466c46", size = 84798, upload-time = "2025-12-14T22:23:14.349Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5c/90/b0cbbd9efcc82816c58f31a34963071aa19fb792a212a5d9caf8e0fc3097/grpclib-0.4.9-py3-none-any.whl", hash = "sha256:7762ec1c8ed94dfad597475152dd35cbd11aecaaca2f243e29702435ca24cf0e", size = 77063, upload-time = "2025-12-14T22:23:13.224Z" }, +] + [[package]] name = "h11" version = "0.16.0" @@ -987,33 +1558,89 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl", hash = "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86", size = 37515, upload-time = "2025-04-24T03:35:24.344Z" }, ] +[[package]] +name = "h2" +version = "4.3.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "hpack", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "hyperframe", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/1d/17/afa56379f94ad0fe8defd37d6eb3f89a25404ffc71d4d848893d270325fc/h2-4.3.0.tar.gz", hash = "sha256:6c59efe4323fa18b47a632221a1888bd7fde6249819beda254aeca909f221bf1", size = 2152026, upload-time = "2025-08-23T18:12:19.778Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/69/b2/119f6e6dcbd96f9069ce9a2665e0146588dc9f88f29549711853645e736a/h2-4.3.0-py3-none-any.whl", hash = "sha256:c438f029a25f7945c69e0ccf0fb951dc3f73a5f6412981daee861431b70e2bdd", size = 61779, upload-time = "2025-08-23T18:12:17.779Z" }, +] + +[[package]] +name = "hf-gradio" +version = "0.3.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "gradio-client", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "typer", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/48/d8/1771d6f1591099ecd10776782d08c6f87e7c2501f9e9e6ffb7c2ecc07d0c/hf_gradio-0.3.0.tar.gz", hash = "sha256:e74a0f9eab14a1d6f54c523c2192aa5283ca51f01605f661b2542387da5b9fc0", size = 6235, upload-time = "2026-03-27T13:13:43.9Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4c/52/04816d2a15691a63cec3187e3e592c4493448eb4834492eadd532972b035/hf_gradio-0.3.0-py3-none-any.whl", hash = "sha256:159d33d1f0affae8164d29c0c51a63dfcc0bbc90803b07c6f139137206a796ae", size = 4154, upload-time = "2026-03-23T19:50:08.586Z" }, +] + +[[package]] +name = "hf-transfer" +version = "0.1.9" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/1a/eb/8fc64f40388c29ce8ce3b2b180a089d4d6b25b1d0d232d016704cb852104/hf_transfer-0.1.9.tar.gz", hash = "sha256:035572865dab29d17e783fbf1e84cf1cb24f3fcf8f1b17db1cfc7fdf139f02bf", size = 25201, upload-time = "2025-01-07T10:05:12.947Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fb/38/130a5ac3747f104033591bcac1c961cb1faadfdc91704f59b09c0b465ff2/hf_transfer-0.1.9-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8674026f21ed369aa2a0a4b46000aca850fc44cd2b54af33a172ce5325b4fc82", size = 3726676, upload-time = "2025-01-07T10:04:11.539Z" }, + { url = "https://files.pythonhosted.org/packages/15/a1/f4e27c5ad17aac616ae0849e2aede5aae31db8267a948c6b3eeb9fd96446/hf_transfer-0.1.9-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3a736dfbb2c84f5a2c975478ad200c0c8bfcb58a25a35db402678fb87ce17fa4", size = 3062920, upload-time = "2025-01-07T10:04:16.297Z" }, + { url = "https://files.pythonhosted.org/packages/8d/0d/727abdfba39bc3f1132cfa4c970588c2c0bb0d82fe2d645cc10f4e2f8e0b/hf_transfer-0.1.9-cp313-cp313t-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:504b8427fd785dd8546d53b9fafe6e436bd7a3adf76b9dce556507650a7b4567", size = 3578681, upload-time = "2025-01-07T10:04:29.702Z" }, + { url = "https://files.pythonhosted.org/packages/50/d0/2b213eb1ea8b1252ccaf1a6c804d0aba03fea38aae4124df6a3acb70511a/hf_transfer-0.1.9-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2c7fc1b85f4d0f76e452765d7648c9f4bfd0aedb9ced2ae1ebfece2d8cfaf8e2", size = 3398837, upload-time = "2025-01-07T10:04:22.778Z" }, + { url = "https://files.pythonhosted.org/packages/8c/8a/79dbce9006e0bd6b74516f97451a7b7c64dbbb426df15d901dd438cfeee3/hf_transfer-0.1.9-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0d991376f0eac70a60f0cbc95602aa708a6f7c8617f28b4945c1431d67b8e3c8", size = 3546986, upload-time = "2025-01-07T10:04:36.415Z" }, + { url = "https://files.pythonhosted.org/packages/a9/f7/9ac239b6ee6fe0bad130325d987a93ea58c4118e50479f0786f1733b37e8/hf_transfer-0.1.9-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:e6ac4eddcd99575ed3735ed911ddf9d1697e2bd13aa3f0ad7e3904dd4863842e", size = 4071715, upload-time = "2025-01-07T10:04:53.224Z" }, + { url = "https://files.pythonhosted.org/packages/d8/a3/0ed697279f5eeb7a40f279bd783cf50e6d0b91f24120dcf66ef2cf8822b4/hf_transfer-0.1.9-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:57fd9880da1ee0f47250f735f791fab788f0aa1ee36afc49f761349869c8b4d9", size = 3388081, upload-time = "2025-01-07T10:04:57.818Z" }, + { url = "https://files.pythonhosted.org/packages/dc/eb/47e477bdf1d784f31c7540db6cc8c354b777e51a186897a7abda34517f36/hf_transfer-0.1.9-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:5d561f0520f493c66b016d99ceabe69c23289aa90be38dd802d2aef279f15751", size = 3658654, upload-time = "2025-01-07T10:05:03.168Z" }, + { url = "https://files.pythonhosted.org/packages/45/07/6661e43fbee09594a8a5e9bb778107d95fe38dac4c653982afe03d32bd4d/hf_transfer-0.1.9-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:a5b366d34cd449fe9b20ef25941e6eef0460a2f74e7389f02e673e1f88ebd538", size = 3690551, upload-time = "2025-01-07T10:05:09.238Z" }, + { url = "https://files.pythonhosted.org/packages/8e/a2/cd7885bc9959421065a6fae0fe67b6c55becdeda4e69b873e52976f9a9f0/hf_transfer-0.1.9-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8fd0167c4407a3bc4cdd0307e65ada2294ec04f1813d8a69a5243e379b22e9d8", size = 3728604, upload-time = "2025-01-07T10:04:14.173Z" }, + { url = "https://files.pythonhosted.org/packages/f6/2e/a072cf196edfeda3310c9a5ade0a0fdd785e6154b3ce24fc738c818da2a7/hf_transfer-0.1.9-cp38-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ee8b10afedcb75f71091bcc197c526a6ebf5c58bbbadb34fdeee6160f55f619f", size = 3064995, upload-time = "2025-01-07T10:04:18.663Z" }, + { url = "https://files.pythonhosted.org/packages/c2/84/aec9ef4c0fab93c1ea2b1badff38c78b4b2f86f0555b26d2051dbc920cde/hf_transfer-0.1.9-cp38-abi3-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5828057e313de59300dd1abb489444bc452efe3f479d3c55b31a8f680936ba42", size = 3580908, upload-time = "2025-01-07T10:04:32.834Z" }, + { url = "https://files.pythonhosted.org/packages/29/63/b560d39651a56603d64f1a0212d0472a44cbd965db2fa62b99d99cb981bf/hf_transfer-0.1.9-cp38-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fc6bd19e1cc177c66bdef15ef8636ad3bde79d5a4f608c158021153b4573509d", size = 3400839, upload-time = "2025-01-07T10:04:26.122Z" }, + { url = "https://files.pythonhosted.org/packages/d6/d8/f87ea6f42456254b48915970ed98e993110521e9263472840174d32c880d/hf_transfer-0.1.9-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cdca9bfb89e6f8f281890cc61a8aff2d3cecaff7e1a4d275574d96ca70098557", size = 3552664, upload-time = "2025-01-07T10:04:40.123Z" }, + { url = "https://files.pythonhosted.org/packages/d6/56/1267c39b65fc8f4e2113b36297320f102718bf5799b544a6cbe22013aa1d/hf_transfer-0.1.9-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:89a23f58b7b7effbc047b8ca286f131b17728c99a9f972723323003ffd1bb916", size = 4073732, upload-time = "2025-01-07T10:04:55.624Z" }, + { url = "https://files.pythonhosted.org/packages/82/1a/9c748befbe3decf7cb415e34f8a0c3789a0a9c55910dea73d581e48c0ce5/hf_transfer-0.1.9-cp38-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:dc7fff1345980d6c0ebb92c811d24afa4b98b3e07ed070c8e38cc91fd80478c5", size = 3390096, upload-time = "2025-01-07T10:04:59.98Z" }, + { url = "https://files.pythonhosted.org/packages/72/85/4c03da147b6b4b7cb12e074d3d44eee28604a387ed0eaf7eaaead5069c57/hf_transfer-0.1.9-cp38-abi3-musllinux_1_2_i686.whl", hash = "sha256:1a6bd16c667ebe89a069ca163060127a794fa3a3525292c900b8c8cc47985b0d", size = 3664743, upload-time = "2025-01-07T10:05:05.416Z" }, + { url = "https://files.pythonhosted.org/packages/e7/6e/e597b04f753f1b09e6893075d53a82a30c13855cbaa791402695b01e369f/hf_transfer-0.1.9-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:d2fde99d502093ade3ab1b53f80da18480e9902aa960dab7f74fb1b9e5bc5746", size = 3695243, upload-time = "2025-01-07T10:05:11.411Z" }, +] + [[package]] name = "hf-xet" -version = "1.2.0" +version = "1.3.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/5e/6e/0f11bacf08a67f7fb5ee09740f2ca54163863b07b70d579356e9222ce5d8/hf_xet-1.2.0.tar.gz", hash = "sha256:a8c27070ca547293b6890c4bf389f713f80e8c478631432962bb7f4bc0bd7d7f", size = 506020, upload-time = "2025-10-24T19:04:32.129Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/9e/a5/85ef910a0aa034a2abcfadc360ab5ac6f6bc4e9112349bd40ca97551cff0/hf_xet-1.2.0-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:ceeefcd1b7aed4956ae8499e2199607765fbd1c60510752003b6cc0b8413b649", size = 2861870, upload-time = "2025-10-24T19:04:11.422Z" }, - { url = "https://files.pythonhosted.org/packages/ea/40/e2e0a7eb9a51fe8828ba2d47fe22a7e74914ea8a0db68a18c3aa7449c767/hf_xet-1.2.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:b70218dd548e9840224df5638fdc94bd033552963cfa97f9170829381179c813", size = 2717584, upload-time = "2025-10-24T19:04:09.586Z" }, - { url = "https://files.pythonhosted.org/packages/a5/7d/daf7f8bc4594fdd59a8a596f9e3886133fdc68e675292218a5e4c1b7e834/hf_xet-1.2.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7d40b18769bb9a8bc82a9ede575ce1a44c75eb80e7375a01d76259089529b5dc", size = 3315004, upload-time = "2025-10-24T19:04:00.314Z" }, - { url = "https://files.pythonhosted.org/packages/b1/ba/45ea2f605fbf6d81c8b21e4d970b168b18a53515923010c312c06cd83164/hf_xet-1.2.0-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:cd3a6027d59cfb60177c12d6424e31f4b5ff13d8e3a1247b3a584bf8977e6df5", size = 3222636, upload-time = "2025-10-24T19:03:58.111Z" }, - { url = "https://files.pythonhosted.org/packages/4a/1d/04513e3cab8f29ab8c109d309ddd21a2705afab9d52f2ba1151e0c14f086/hf_xet-1.2.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6de1fc44f58f6dd937956c8d304d8c2dea264c80680bcfa61ca4a15e7b76780f", size = 3408448, upload-time = "2025-10-24T19:04:20.951Z" }, - { url = "https://files.pythonhosted.org/packages/f0/7c/60a2756d7feec7387db3a1176c632357632fbe7849fce576c5559d4520c7/hf_xet-1.2.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:f182f264ed2acd566c514e45da9f2119110e48a87a327ca271027904c70c5832", size = 3503401, upload-time = "2025-10-24T19:04:22.549Z" }, - { url = "https://files.pythonhosted.org/packages/4e/64/48fffbd67fb418ab07451e4ce641a70de1c40c10a13e25325e24858ebe5a/hf_xet-1.2.0-cp313-cp313t-win_amd64.whl", hash = "sha256:293a7a3787e5c95d7be1857358a9130694a9c6021de3f27fa233f37267174382", size = 2900866, upload-time = "2025-10-24T19:04:33.461Z" }, - { url = "https://files.pythonhosted.org/packages/e2/51/f7e2caae42f80af886db414d4e9885fac959330509089f97cccb339c6b87/hf_xet-1.2.0-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:10bfab528b968c70e062607f663e21e34e2bba349e8038db546646875495179e", size = 2861861, upload-time = "2025-10-24T19:04:19.01Z" }, - { url = "https://files.pythonhosted.org/packages/6e/1d/a641a88b69994f9371bd347f1dd35e5d1e2e2460a2e350c8d5165fc62005/hf_xet-1.2.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:2a212e842647b02eb6a911187dc878e79c4aa0aa397e88dd3b26761676e8c1f8", size = 2717699, upload-time = "2025-10-24T19:04:17.306Z" }, - { url = "https://files.pythonhosted.org/packages/df/e0/e5e9bba7d15f0318955f7ec3f4af13f92e773fbb368c0b8008a5acbcb12f/hf_xet-1.2.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:30e06daccb3a7d4c065f34fc26c14c74f4653069bb2b194e7f18f17cbe9939c0", size = 3314885, upload-time = "2025-10-24T19:04:07.642Z" }, - { url = "https://files.pythonhosted.org/packages/21/90/b7fe5ff6f2b7b8cbdf1bd56145f863c90a5807d9758a549bf3d916aa4dec/hf_xet-1.2.0-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:29c8fc913a529ec0a91867ce3d119ac1aac966e098cf49501800c870328cc090", size = 3221550, upload-time = "2025-10-24T19:04:05.55Z" }, - { url = "https://files.pythonhosted.org/packages/6f/cb/73f276f0a7ce46cc6a6ec7d6c7d61cbfe5f2e107123d9bbd0193c355f106/hf_xet-1.2.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:66e159cbfcfbb29f920db2c09ed8b660eb894640d284f102ada929b6e3dc410a", size = 3408010, upload-time = "2025-10-24T19:04:28.598Z" }, - { url = "https://files.pythonhosted.org/packages/b8/1e/d642a12caa78171f4be64f7cd9c40e3ca5279d055d0873188a58c0f5fbb9/hf_xet-1.2.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:9c91d5ae931510107f148874e9e2de8a16052b6f1b3ca3c1b12f15ccb491390f", size = 3503264, upload-time = "2025-10-24T19:04:30.397Z" }, - { url = "https://files.pythonhosted.org/packages/17/b5/33764714923fa1ff922770f7ed18c2daae034d21ae6e10dbf4347c854154/hf_xet-1.2.0-cp314-cp314t-win_amd64.whl", hash = "sha256:210d577732b519ac6ede149d2f2f34049d44e8622bf14eb3d63bbcd2d4b332dc", size = 2901071, upload-time = "2025-10-24T19:04:37.463Z" }, - { url = "https://files.pythonhosted.org/packages/96/2d/22338486473df5923a9ab7107d375dbef9173c338ebef5098ef593d2b560/hf_xet-1.2.0-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:46740d4ac024a7ca9b22bebf77460ff43332868b661186a8e46c227fdae01848", size = 2866099, upload-time = "2025-10-24T19:04:15.366Z" }, - { url = "https://files.pythonhosted.org/packages/7f/8c/c5becfa53234299bc2210ba314eaaae36c2875e0045809b82e40a9544f0c/hf_xet-1.2.0-cp37-abi3-macosx_11_0_arm64.whl", hash = "sha256:27df617a076420d8845bea087f59303da8be17ed7ec0cd7ee3b9b9f579dff0e4", size = 2722178, upload-time = "2025-10-24T19:04:13.695Z" }, - { url = "https://files.pythonhosted.org/packages/9a/92/cf3ab0b652b082e66876d08da57fcc6fa2f0e6c70dfbbafbd470bb73eb47/hf_xet-1.2.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3651fd5bfe0281951b988c0facbe726aa5e347b103a675f49a3fa8144c7968fd", size = 3320214, upload-time = "2025-10-24T19:04:03.596Z" }, - { url = "https://files.pythonhosted.org/packages/46/92/3f7ec4a1b6a65bf45b059b6d4a5d38988f63e193056de2f420137e3c3244/hf_xet-1.2.0-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:d06fa97c8562fb3ee7a378dd9b51e343bc5bc8190254202c9771029152f5e08c", size = 3229054, upload-time = "2025-10-24T19:04:01.949Z" }, - { url = "https://files.pythonhosted.org/packages/0b/dd/7ac658d54b9fb7999a0ccb07ad863b413cbaf5cf172f48ebcd9497ec7263/hf_xet-1.2.0-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:4c1428c9ae73ec0939410ec73023c4f842927f39db09b063b9482dac5a3bb737", size = 3413812, upload-time = "2025-10-24T19:04:24.585Z" }, - { url = "https://files.pythonhosted.org/packages/92/68/89ac4e5b12a9ff6286a12174c8538a5930e2ed662091dd2572bbe0a18c8a/hf_xet-1.2.0-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:a55558084c16b09b5ed32ab9ed38421e2d87cf3f1f89815764d1177081b99865", size = 3508920, upload-time = "2025-10-24T19:04:26.927Z" }, - { url = "https://files.pythonhosted.org/packages/cb/44/870d44b30e1dcfb6a65932e3e1506c103a8a5aea9103c337e7a53180322c/hf_xet-1.2.0-cp37-abi3-win_amd64.whl", hash = "sha256:e6584a52253f72c9f52f9e549d5895ca7a471608495c4ecaa6cc73dba2b24d69", size = 2905735, upload-time = "2025-10-24T19:04:35.928Z" }, +sdist = { url = "https://files.pythonhosted.org/packages/8b/cb/9bb543bd987ffa1ee48202cc96a756951b734b79a542335c566148ade36c/hf_xet-1.3.2.tar.gz", hash = "sha256:e130ee08984783d12717444e538587fa2119385e5bd8fc2bb9f930419b73a7af", size = 643646, upload-time = "2026-02-27T17:26:08.051Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/49/75/462285971954269432aad2e7938c5c7ff9ec7d60129cec542ab37121e3d6/hf_xet-1.3.2-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:335a8f36c55fd35a92d0062f4e9201b4015057e62747b7e7001ffb203c0ee1d2", size = 3761019, upload-time = "2026-02-27T17:25:49.441Z" }, + { url = "https://files.pythonhosted.org/packages/35/56/987b0537ddaf88e17192ea09afa8eca853e55f39a4721578be436f8409df/hf_xet-1.3.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:c1ae4d3a716afc774e66922f3cac8206bfa707db13f6a7e62dfff74bfc95c9a8", size = 3521565, upload-time = "2026-02-27T17:25:47.469Z" }, + { url = "https://files.pythonhosted.org/packages/a8/5c/7e4a33a3d689f77761156cc34558047569e54af92e4d15a8f493229f6767/hf_xet-1.3.2-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d6dbdf231efac0b9b39adcf12a07f0c030498f9212a18e8c50224d0e84ab803d", size = 4176494, upload-time = "2026-02-27T17:25:40.247Z" }, + { url = "https://files.pythonhosted.org/packages/6b/b3/71e856bf9d9a69b3931837e8bf22e095775f268c8edcd4a9e8c355f92484/hf_xet-1.3.2-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:c1980abfb68ecf6c1c7983379ed7b1e2b49a1aaf1a5aca9acc7d48e5e2e0a961", size = 3955601, upload-time = "2026-02-27T17:25:38.376Z" }, + { url = "https://files.pythonhosted.org/packages/63/d7/aecf97b3f0a981600a67ff4db15e2d433389d698a284bb0ea5d8fcdd6f7f/hf_xet-1.3.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:1c88fbd90ad0d27c46b77a445f0a436ebaa94e14965c581123b68b1c52f5fd30", size = 4154770, upload-time = "2026-02-27T17:25:56.756Z" }, + { url = "https://files.pythonhosted.org/packages/e2/e1/3af961f71a40e09bf5ee909842127b6b00f5ab4ee3817599dc0771b79893/hf_xet-1.3.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:35b855024ca37f2dd113ac1c08993e997fbe167b9d61f9ef66d3d4f84015e508", size = 4394161, upload-time = "2026-02-27T17:25:58.111Z" }, + { url = "https://files.pythonhosted.org/packages/a1/c3/859509bade9178e21b8b1db867b8e10e9f817ab9ac1de77cb9f461ced765/hf_xet-1.3.2-cp313-cp313t-win_amd64.whl", hash = "sha256:31612ba0629046e425ba50375685a2586e11fb9144270ebabd75878c3eaf6378", size = 3637377, upload-time = "2026-02-27T17:26:10.611Z" }, + { url = "https://files.pythonhosted.org/packages/05/7f/724cfbef4da92d577b71f68bf832961c8919f36c60d28d289a9fc9d024d4/hf_xet-1.3.2-cp313-cp313t-win_arm64.whl", hash = "sha256:433c77c9f4e132b562f37d66c9b22c05b5479f243a1f06a120c1c06ce8b1502a", size = 3497875, upload-time = "2026-02-27T17:26:09.034Z" }, + { url = "https://files.pythonhosted.org/packages/d8/28/dbb024e2e3907f6f3052847ca7d1a2f7a3972fafcd53ff79018977fcb3e4/hf_xet-1.3.2-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:f93b7595f1d8fefddfede775c18b5c9256757824f7f6832930b49858483cd56f", size = 3763961, upload-time = "2026-02-27T17:25:52.537Z" }, + { url = "https://files.pythonhosted.org/packages/e4/71/b99aed3823c9d1795e4865cf437d651097356a3f38c7d5877e4ac544b8e4/hf_xet-1.3.2-cp37-abi3-macosx_11_0_arm64.whl", hash = "sha256:a85d3d43743174393afe27835bde0cd146e652b5fcfdbcd624602daef2ef3259", size = 3526171, upload-time = "2026-02-27T17:25:50.968Z" }, + { url = "https://files.pythonhosted.org/packages/9d/ca/907890ce6ef5598b5920514f255ed0a65f558f820515b18db75a51b2f878/hf_xet-1.3.2-cp37-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7c2a054a97c44e136b1f7f5a78f12b3efffdf2eed3abc6746fc5ea4b39511633", size = 4180750, upload-time = "2026-02-27T17:25:43.125Z" }, + { url = "https://files.pythonhosted.org/packages/8c/ad/bc7f41f87173d51d0bce497b171c4ee0cbde1eed2d7b4216db5d0ada9f50/hf_xet-1.3.2-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:06b724a361f670ae557836e57801b82c75b534812e351a87a2c739f77d1e0635", size = 3961035, upload-time = "2026-02-27T17:25:41.837Z" }, + { url = "https://files.pythonhosted.org/packages/73/38/600f4dda40c4a33133404d9fe644f1d35ff2d9babb4d0435c646c63dd107/hf_xet-1.3.2-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:305f5489d7241a47e0458ef49334be02411d1d0f480846363c1c8084ed9916f7", size = 4161378, upload-time = "2026-02-27T17:26:00.365Z" }, + { url = "https://files.pythonhosted.org/packages/00/b3/7bc1ff91d1ac18420b7ad1e169b618b27c00001b96310a89f8a9294fe509/hf_xet-1.3.2-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:06cdbde243c85f39a63b28e9034321399c507bcd5e7befdd17ed2ccc06dfe14e", size = 4398020, upload-time = "2026-02-27T17:26:03.977Z" }, + { url = "https://files.pythonhosted.org/packages/2b/0b/99bfd948a3ed3620ab709276df3ad3710dcea61976918cce8706502927af/hf_xet-1.3.2-cp37-abi3-win_amd64.whl", hash = "sha256:9298b47cce6037b7045ae41482e703c471ce36b52e73e49f71226d2e8e5685a1", size = 3641624, upload-time = "2026-02-27T17:26:13.542Z" }, + { url = "https://files.pythonhosted.org/packages/cc/02/9a6e4ca1f3f73a164c0cd48e41b3cc56585dcc37e809250de443d673266f/hf_xet-1.3.2-cp37-abi3-win_arm64.whl", hash = "sha256:83d8ec273136171431833a6957e8f3af496bee227a0fe47c7b8b39c106d1749a", size = 3503976, upload-time = "2026-02-27T17:26:12.123Z" }, +] + +[[package]] +name = "hpack" +version = "4.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/2c/48/71de9ed269fdae9c8057e5a4c0aa7402e8bb16f2c6e90b3aa53327b113f8/hpack-4.1.0.tar.gz", hash = "sha256:ec5eca154f7056aa06f196a557655c5b009b382873ac8d1e66e79e87535f1dca", size = 51276, upload-time = "2025-01-22T21:44:58.347Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/07/c6/80c95b1b2b94682a72cbdbfb85b81ae2daffa4291fbfa1b1464502ede10d/hpack-4.1.0-py3-none-any.whl", hash = "sha256:157ac792668d995c657d93111f46b4535ed114f0c9c8d672271bbec7eae1b496", size = 34357, upload-time = "2025-01-22T21:44:56.92Z" }, ] [[package]] @@ -1046,7 +1673,7 @@ wheels = [ [[package]] name = "huggingface-hub" -version = "1.4.1" +version = "1.7.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "filelock" }, @@ -1055,14 +1682,31 @@ dependencies = [ { name = "httpx" }, { name = "packaging" }, { name = "pyyaml" }, - { name = "shellingham" }, { name = "tqdm" }, - { name = "typer-slim" }, + { name = "typer" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/c4/fc/eb9bc06130e8bbda6a616e1b80a7aa127681c448d6b49806f61db2670b61/huggingface_hub-1.4.1.tar.gz", hash = "sha256:b41131ec35e631e7383ab26d6146b8d8972abc8b6309b963b306fbcca87f5ed5", size = 642156, upload-time = "2026-02-06T09:20:03.013Z" } +sdist = { url = "https://files.pythonhosted.org/packages/95/67/026701deb88aaaf06f96e3ea3cbe6899ce9977c61f1ca0a36647ba88495e/huggingface_hub-1.7.0.tar.gz", hash = "sha256:d6566dc88ee63cc23dbbc8f5c5e8d35e74d1833ca50e27efedbb5cf30ef485f1", size = 721657, upload-time = "2026-03-13T08:51:04.437Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/50/84/02f65e48d0605cee6ffc76bdaa3e32cd68a60dbe131e0f5f10706fe69ae5/huggingface_hub-1.7.0-py3-none-any.whl", hash = "sha256:12941ccd312b2b4c0c23abb4506c93de08f0495e041a237192cce378b9d9f108", size = 616275, upload-time = "2026-03-13T08:51:02.894Z" }, +] + +[[package]] +name = "humanfriendly" +version = "10.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/cc/3f/2c29224acb2e2df4d2046e4c73ee2662023c58ff5b113c4c1adac0886c43/humanfriendly-10.0.tar.gz", hash = "sha256:6b0b831ce8f15f7300721aa49829fc4e83921a9a301cc7f606be6686a2288ddc", size = 360702, upload-time = "2021-09-17T21:40:43.31Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f0/0f/310fb31e39e2d734ccaa2c0fb981ee41f7bd5056ce9bc29b2248bd569169/humanfriendly-10.0-py2.py3-none-any.whl", hash = "sha256:1697e1a8a8f550fd43c2865cd84542fc175a61dcb779b6fee18cf6b6ccba1477", size = 86794, upload-time = "2021-09-17T21:40:39.897Z" }, +] + +[[package]] +name = "hyperframe" +version = "6.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/02/e7/94f8232d4a74cc99514c13a9f995811485a6903d48e5d952771ef6322e30/hyperframe-6.1.0.tar.gz", hash = "sha256:f630908a00854a7adeabd6382b43923a4c4cd4b821fcb527e6ab9e15382a3b08", size = 26566, upload-time = "2025-01-22T21:41:49.302Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/d5/ae/2f6d96b4e6c5478d87d606a1934b5d436c4a2bce6bb7c6fdece891c128e3/huggingface_hub-1.4.1-py3-none-any.whl", hash = "sha256:9931d075fb7a79af5abc487106414ec5fba2c0ae86104c0c62fd6cae38873d18", size = 553326, upload-time = "2026-02-06T09:20:00.728Z" }, + { url = "https://files.pythonhosted.org/packages/48/30/47d0bf6072f7252e6521f3447ccfa40b421b6824517f82854703d0f5a98b/hyperframe-6.1.0-py3-none-any.whl", hash = "sha256:b03380493a519fce58ea5af42e4a42317bf9bd425596f7a0835ffce80f1a42e5", size = 13007, upload-time = "2025-01-22T21:41:47.295Z" }, ] [[package]] @@ -1083,6 +1727,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl", hash = "sha256:771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea", size = 71008, upload-time = "2025-10-12T14:55:18.883Z" }, ] +[[package]] +name = "immutabledict" +version = "4.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/55/f4/710c84db4d77767176342913ac6b25f43aaed6d0a0bdb9168a8d2936d9c7/immutabledict-4.2.0.tar.gz", hash = "sha256:e003fd81aad2377a5a758bf7e1086cf3b70b63e9a5cc2f46bce8d0a2b4727c5f", size = 6165, upload-time = "2024-03-06T18:46:46.235Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e2/13/3cf4ac5b3403f3456e645c4533883ef67b1bb0c72e56b79c707715f57a74/immutabledict-4.2.0-py3-none-any.whl", hash = "sha256:d728b2c2410d698d95e6200237feb50a695584d20289ad3379a439aa3d90baba", size = 4702, upload-time = "2024-03-06T18:46:44.991Z" }, +] + [[package]] name = "iniconfig" version = "2.3.0" @@ -1149,6 +1802,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/d9/33/1f075bf72b0b747cb3288d011319aaf64083cf2efef8354174e3ed4540e2/ipython_pygments_lexers-1.1.1-py3-none-any.whl", hash = "sha256:a9462224a505ade19a605f71f8fa63c2048833ce50abc86768a0d81d876dc81c", size = 8074, upload-time = "2025-01-17T11:24:33.271Z" }, ] +[[package]] +name = "isodate" +version = "0.7.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/54/4d/e940025e2ce31a8ce1202635910747e5a87cc3a6a6bb2d00973375014749/isodate-0.7.2.tar.gz", hash = "sha256:4cd1aa0f43ca76f4a6c6c0292a85f40b35ec2e43e315b59f06e6d32171a953e6", size = 29705, upload-time = "2024-10-08T23:04:11.5Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/15/aa/0aca39a37d3c7eb941ba736ede56d689e7be91cab5d9ca846bde3999eba6/isodate-0.7.2-py3-none-any.whl", hash = "sha256:28009937d8031054830160fce6d409ed342816b543597cece116d966c6d99e15", size = 22320, upload-time = "2024-10-08T23:04:09.501Z" }, +] + [[package]] name = "isoduration" version = "20.11.0" @@ -1170,6 +1832,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/7f/ed/e3705d6d02b4f7aea715a353c8ce193efd0b5db13e204df895d38734c244/isort-7.0.0-py3-none-any.whl", hash = "sha256:1bcabac8bc3c36c7fb7b98a76c8abb18e0f841a3ba81decac7691008592499c1", size = 94672, upload-time = "2025-10-11T13:30:57.665Z" }, ] +[[package]] +name = "itsdangerous" +version = "2.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/9c/cb/8ac0172223afbccb63986cc25049b154ecfb5e85932587206f42317be31d/itsdangerous-2.2.0.tar.gz", hash = "sha256:e0050c0b7da1eea53ffaf149c0cfbb5c6e2e2b69c4bef22c81fa6eb73e5f6173", size = 54410, upload-time = "2024-04-16T21:28:15.614Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/04/96/92447566d16df59b2a776c0fb82dbc4d9e07cd95062562af01e408583fc4/itsdangerous-2.2.0-py3-none-any.whl", hash = "sha256:c6242fc49e35958c8b15141343aa660db5fc54d4f13a1db01a3f5891b98700ef", size = 16234, upload-time = "2024-04-16T21:28:14.499Z" }, +] + [[package]] name = "jedi" version = "0.19.2" @@ -1194,6 +1865,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67", size = 134899, upload-time = "2025-03-05T20:05:00.369Z" }, ] +[[package]] +name = "jmespath" +version = "1.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d3/59/322338183ecda247fb5d1763a6cbe46eff7222eaeebafd9fa65d4bf5cb11/jmespath-1.1.0.tar.gz", hash = "sha256:472c87d80f36026ae83c6ddd0f1d05d4e510134ed462851fd5f754c8c3cbb88d", size = 27377, upload-time = "2026-01-22T16:35:26.279Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/14/2f/967ba146e6d58cf6a652da73885f52fc68001525b4197effc174321d70b4/jmespath-1.1.0-py3-none-any.whl", hash = "sha256:a5663118de4908c91729bea0acadca56526eb2698e83de10cd116ae0f4e97c64", size = 20419, upload-time = "2026-01-22T16:35:24.919Z" }, +] + [[package]] name = "joblib" version = "1.5.3" @@ -1212,6 +1892,18 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/d7/9e/038522f50ceb7e74f1f991bf1b699f24b0c2bbe7c390dd36ad69f4582258/json5-0.13.0-py3-none-any.whl", hash = "sha256:9a08e1dd65f6a4d4c6fa82d216cf2477349ec2346a38fd70cc11d2557499fbcc", size = 36163, upload-time = "2026-01-01T19:42:13.962Z" }, ] +[[package]] +name = "jsonlines" +version = "4.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "attrs", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/35/87/bcda8e46c88d0e34cad2f09ee2d0c7f5957bccdb9791b0b934ec84d84be4/jsonlines-4.0.0.tar.gz", hash = "sha256:0c6d2c09117550c089995247f605ae4cf77dd1533041d366351f6f298822ea74", size = 11359, upload-time = "2023-09-01T12:34:44.187Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f8/62/d9ba6323b9202dd2fe166beab8a86d29465c41a0288cbe229fac60c1ab8d/jsonlines-4.0.0-py3-none-any.whl", hash = "sha256:185b334ff2ca5a91362993f42e83588a360cf95ce4b71a73548502bda52a7c55", size = 8701, upload-time = "2023-09-01T12:34:42.563Z" }, +] + [[package]] name = "jsonpointer" version = "3.0.0" @@ -1414,6 +2106,20 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/e0/07/a000fe835f76b7e1143242ab1122e6362ef1c03f23f83a045c38859c2ae0/jupyterlab_server-2.28.0-py3-none-any.whl", hash = "sha256:e4355b148fdcf34d312bbbc80f22467d6d20460e8b8736bf235577dd18506968", size = 59830, upload-time = "2025-10-22T13:59:16.767Z" }, ] +[[package]] +name = "kernels" +version = "0.12.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "huggingface-hub", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "packaging", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "pyyaml", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a9/07/d2b635e965b232cae1aa873c6e0458947196be8dca7bb02e64d3cd6e8d19/kernels-0.12.2.tar.gz", hash = "sha256:812fc43c2814f046cee655cbebf3918cddd489715773670bdb38cca3f5203b5b", size = 57108, upload-time = "2026-03-04T10:03:00.379Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/08/be/f5d6758b48633e4f6a28198fcf4bf9f763cc6a82e2335d9fe8802a5cb440/kernels-0.12.2-py3-none-any.whl", hash = "sha256:1289261804748cf3cf8e3afab80b505b0f1b28e4ec88379cdf08dc31e64964b8", size = 55205, upload-time = "2026-03-04T10:02:59.305Z" }, +] + [[package]] name = "kiwisolver" version = "1.4.9" @@ -1458,34 +2164,17 @@ 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]] +name = "langdetect" +version = "1.0.9" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "six", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/0e/72/a3add0e4eec4eb9e2569554f7c70f4a3c27712f40e3284d483e88094cc0e/langdetect-1.0.9.tar.gz", hash = "sha256:cbc1fef89f8d062739774bd51eda3da3274006b3661d199c2655f6b3f6d605a0", size = 981474, upload-time = "2021-05-07T07:54:13.562Z" } + [[package]] name = "lark" version = "1.3.1" @@ -1523,28 +2212,101 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/d9/83/b2cfe8e76ff5c1c77f8a53da3d5de62d04b5ebf7cf913e37f8bca43b5d07/librt-0.7.8-cp313-cp313-win32.whl", hash = "sha256:b09c52ed43a461994716082ee7d87618096851319bf695d57ec123f2ab708951", size = 44126, upload-time = "2026-01-14T12:55:31.44Z" }, { url = "https://files.pythonhosted.org/packages/a9/0b/c59d45de56a51bd2d3a401fc63449c0ac163e4ef7f523ea8b0c0dee86ec5/librt-0.7.8-cp313-cp313-win_amd64.whl", hash = "sha256:f8f4a901a3fa28969d6e4519deceab56c55a09d691ea7b12ca830e2fa3461e34", size = 50262, upload-time = "2026-01-14T12:55:33.01Z" }, { url = "https://files.pythonhosted.org/packages/fc/b9/973455cec0a1ec592395250c474164c4a58ebf3e0651ee920fef1a2623f1/librt-0.7.8-cp313-cp313-win_arm64.whl", hash = "sha256:43d4e71b50763fcdcf64725ac680d8cfa1706c928b844794a7aa0fa9ac8e5f09", size = 43600, upload-time = "2026-01-14T12:55:34.054Z" }, - { url = "https://files.pythonhosted.org/packages/1a/73/fa8814c6ce2d49c3827829cadaa1589b0bf4391660bd4510899393a23ebc/librt-0.7.8-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:be927c3c94c74b05128089a955fba86501c3b544d1d300282cc1b4bd370cb418", size = 57049, upload-time = "2026-01-14T12:55:35.056Z" }, - { url = "https://files.pythonhosted.org/packages/53/fe/f6c70956da23ea235fd2e3cc16f4f0b4ebdfd72252b02d1164dd58b4e6c3/librt-0.7.8-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:7b0803e9008c62a7ef79058233db7ff6f37a9933b8f2573c05b07ddafa226611", size = 58689, upload-time = "2026-01-14T12:55:36.078Z" }, - { url = "https://files.pythonhosted.org/packages/1f/4d/7a2481444ac5fba63050d9abe823e6bc16896f575bfc9c1e5068d516cdce/librt-0.7.8-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:79feb4d00b2a4e0e05c9c56df707934f41fcb5fe53fd9efb7549068d0495b758", size = 166808, upload-time = "2026-01-14T12:55:37.595Z" }, - { url = "https://files.pythonhosted.org/packages/ac/3c/10901d9e18639f8953f57c8986796cfbf4c1c514844a41c9197cf87cb707/librt-0.7.8-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b9122094e3f24aa759c38f46bd8863433820654927370250f460ae75488b66ea", size = 175614, upload-time = "2026-01-14T12:55:38.756Z" }, - { url = "https://files.pythonhosted.org/packages/db/01/5cbdde0951a5090a80e5ba44e6357d375048123c572a23eecfb9326993a7/librt-0.7.8-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7e03bea66af33c95ce3addf87a9bf1fcad8d33e757bc479957ddbc0e4f7207ac", size = 189955, upload-time = "2026-01-14T12:55:39.939Z" }, - { url = "https://files.pythonhosted.org/packages/6a/b4/e80528d2f4b7eaf1d437fcbd6fc6ba4cbeb3e2a0cb9ed5a79f47c7318706/librt-0.7.8-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:f1ade7f31675db00b514b98f9ab9a7698c7282dad4be7492589109471852d398", size = 189370, upload-time = "2026-01-14T12:55:41.057Z" }, - { url = "https://files.pythonhosted.org/packages/c1/ab/938368f8ce31a9787ecd4becb1e795954782e4312095daf8fd22420227c8/librt-0.7.8-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:a14229ac62adcf1b90a15992f1ab9c69ae8b99ffb23cb64a90878a6e8a2f5b81", size = 183224, upload-time = "2026-01-14T12:55:42.328Z" }, - { url = "https://files.pythonhosted.org/packages/3c/10/559c310e7a6e4014ac44867d359ef8238465fb499e7eb31b6bfe3e3f86f5/librt-0.7.8-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5bcaaf624fd24e6a0cb14beac37677f90793a96864c67c064a91458611446e83", size = 203541, upload-time = "2026-01-14T12:55:43.501Z" }, - { url = "https://files.pythonhosted.org/packages/f8/db/a0db7acdb6290c215f343835c6efda5b491bb05c3ddc675af558f50fdba3/librt-0.7.8-cp314-cp314-win32.whl", hash = "sha256:7aa7d5457b6c542ecaed79cec4ad98534373c9757383973e638ccced0f11f46d", size = 40657, upload-time = "2026-01-14T12:55:44.668Z" }, - { url = "https://files.pythonhosted.org/packages/72/e0/4f9bdc2a98a798511e81edcd6b54fe82767a715e05d1921115ac70717f6f/librt-0.7.8-cp314-cp314-win_amd64.whl", hash = "sha256:3d1322800771bee4a91f3b4bd4e49abc7d35e65166821086e5afd1e6c0d9be44", size = 46835, upload-time = "2026-01-14T12:55:45.655Z" }, - { url = "https://files.pythonhosted.org/packages/f9/3d/59c6402e3dec2719655a41ad027a7371f8e2334aa794ed11533ad5f34969/librt-0.7.8-cp314-cp314-win_arm64.whl", hash = "sha256:5363427bc6a8c3b1719f8f3845ea53553d301382928a86e8fab7984426949bce", size = 39885, upload-time = "2026-01-14T12:55:47.138Z" }, - { url = "https://files.pythonhosted.org/packages/4e/9c/2481d80950b83085fb14ba3c595db56330d21bbc7d88a19f20165f3538db/librt-0.7.8-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:ca916919793a77e4a98d4a1701e345d337ce53be4a16620f063191f7322ac80f", size = 59161, upload-time = "2026-01-14T12:55:48.45Z" }, - { url = "https://files.pythonhosted.org/packages/96/79/108df2cfc4e672336765d54e3ff887294c1cc36ea4335c73588875775527/librt-0.7.8-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:54feb7b4f2f6706bb82325e836a01be805770443e2400f706e824e91f6441dde", size = 61008, upload-time = "2026-01-14T12:55:49.527Z" }, - { url = "https://files.pythonhosted.org/packages/46/f2/30179898f9994a5637459d6e169b6abdc982012c0a4b2d4c26f50c06f911/librt-0.7.8-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:39a4c76fee41007070f872b648cc2f711f9abf9a13d0c7162478043377b52c8e", size = 187199, upload-time = "2026-01-14T12:55:50.587Z" }, - { url = "https://files.pythonhosted.org/packages/b4/da/f7563db55cebdc884f518ba3791ad033becc25ff68eb70902b1747dc0d70/librt-0.7.8-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ac9c8a458245c7de80bc1b9765b177055efff5803f08e548dd4bb9ab9a8d789b", size = 198317, upload-time = "2026-01-14T12:55:51.991Z" }, - { url = "https://files.pythonhosted.org/packages/b3/6c/4289acf076ad371471fa86718c30ae353e690d3de6167f7db36f429272f1/librt-0.7.8-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:95b67aa7eff150f075fda09d11f6bfb26edffd300f6ab1666759547581e8f666", size = 210334, upload-time = "2026-01-14T12:55:53.682Z" }, - { url = "https://files.pythonhosted.org/packages/4a/7f/377521ac25b78ac0a5ff44127a0360ee6d5ddd3ce7327949876a30533daa/librt-0.7.8-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:535929b6eff670c593c34ff435d5440c3096f20fa72d63444608a5aef64dd581", size = 211031, upload-time = "2026-01-14T12:55:54.827Z" }, - { url = "https://files.pythonhosted.org/packages/c5/b1/e1e96c3e20b23d00cf90f4aad48f0deb4cdfec2f0ed8380d0d85acf98bbf/librt-0.7.8-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:63937bd0f4d1cb56653dc7ae900d6c52c41f0015e25aaf9902481ee79943b33a", size = 204581, upload-time = "2026-01-14T12:55:56.811Z" }, - { url = "https://files.pythonhosted.org/packages/43/71/0f5d010e92ed9747e14bef35e91b6580533510f1e36a8a09eb79ee70b2f0/librt-0.7.8-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:cf243da9e42d914036fd362ac3fa77d80a41cadcd11ad789b1b5eec4daaf67ca", size = 224731, upload-time = "2026-01-14T12:55:58.175Z" }, - { url = "https://files.pythonhosted.org/packages/22/f0/07fb6ab5c39a4ca9af3e37554f9d42f25c464829254d72e4ebbd81da351c/librt-0.7.8-cp314-cp314t-win32.whl", hash = "sha256:171ca3a0a06c643bd0a2f62a8944e1902c94aa8e5da4db1ea9a8daf872685365", size = 41173, upload-time = "2026-01-14T12:55:59.315Z" }, - { url = "https://files.pythonhosted.org/packages/24/d4/7e4be20993dc6a782639625bd2f97f3c66125c7aa80c82426956811cfccf/librt-0.7.8-cp314-cp314t-win_amd64.whl", hash = "sha256:445b7304145e24c60288a2f172b5ce2ca35c0f81605f5299f3fa567e189d2e32", size = 47668, upload-time = "2026-01-14T12:56:00.261Z" }, - { url = "https://files.pythonhosted.org/packages/fc/85/69f92b2a7b3c0f88ffe107c86b952b397004b5b8ea5a81da3d9c04c04422/librt-0.7.8-cp314-cp314t-win_arm64.whl", hash = "sha256:8766ece9de08527deabcd7cb1b4f1a967a385d26e33e536d6d8913db6ef74f06", size = 40550, upload-time = "2026-01-14T12:56:01.542Z" }, +] + +[[package]] +name = "liger-kernel" +version = "0.7.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "torch", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "triton", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/73/f8/a25ab6549dd80c5055e84f0ee9be6ecf4a7c85ade448110607f4807ab2ef/liger_kernel-0.7.0.tar.gz", hash = "sha256:48c25648974c7d07d47591117b94188d1059999b7fb652e89e8ba50b21183cb3", size = 3780796, upload-time = "2026-02-12T22:01:00.101Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f7/c6/66c6a3c59b53f4cfbfa0c9e8c573c8843fb1d83cf3c2eb79e39109b76c17/liger_kernel-0.7.0-py3-none-any.whl", hash = "sha256:d2185d94362c069f508eb8aff5e7016c6669613265d5702733d674af4c616a56", size = 276512, upload-time = "2026-02-12T22:00:58.565Z" }, +] + +[[package]] +name = "llvmlite" +version = "0.47.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/01/88/a8952b6d5c21e74cbf158515b779666f692846502623e9e3c39d8e8ba25f/llvmlite-0.47.0.tar.gz", hash = "sha256:62031ce968ec74e95092184d4b0e857e444f8fdff0b8f9213707699570c33ccc", size = 193614, upload-time = "2026-03-31T18:29:53.497Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e6/4b/e3f2cd17822cf772a4a51a0a8080b0032e6d37b2dbe8cfb724eac4e31c52/llvmlite-0.47.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:5853bf26160857c0c2573415ff4efe01c4c651e59e2c55c2a088740acfee51cd", size = 56275178, upload-time = "2026-03-31T18:28:48.342Z" }, + { url = "https://files.pythonhosted.org/packages/b6/55/a3b4a543185305a9bdf3d9759d53646ed96e55e7dfd43f53e7a421b8fbae/llvmlite-0.47.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:003bcf7fa579e14db59c1a1e113f93ab8a06b56a4be31c7f08264d1d4072d077", size = 55128632, upload-time = "2026-03-31T18:28:52.901Z" }, + { url = "https://files.pythonhosted.org/packages/31/b8/69f5565f1a280d032525878a86511eebed0645818492feeb169dfb20ae8e/llvmlite-0.47.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:2699a74321189e812d476a43d6d7f652f51811e7b5aad9d9bba842a1c7927acb", size = 56275178, upload-time = "2026-03-31T18:29:05.748Z" }, + { url = "https://files.pythonhosted.org/packages/d6/da/b32cafcb926fb0ce2aa25553bf32cb8764af31438f40e2481df08884c947/llvmlite-0.47.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6c6951e2b29930227963e53ee152441f0e14be92e9d4231852102d986c761e40", size = 55128632, upload-time = "2026-03-31T18:29:11.235Z" }, +] + +[[package]] +name = "lm-eval" +version = "0.4.11" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "datasets", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "dill", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "evaluate", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "jinja2", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "jsonlines", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "more-itertools", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "numpy", version = "2.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "pytablewriter", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "rouge-score", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "sacrebleu", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "scikit-learn", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "sqlitedict", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "typing-extensions", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "word2number", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "zstandard", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/18/40/ad60ae17f97902ba4ee67914a94c159552f8643fb4598d1d2430a571f0a2/lm_eval-0.4.11.tar.gz", hash = "sha256:a3891d6d0b4ad17892f2ca1046094554ce3ab6cb522759e4a453858e45649916", size = 3246509, upload-time = "2026-02-13T20:22:59.494Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/df/b3/8c2923ad4c4d911307e20ab9c7d7869d3811b5a76fe6dbe53678aafbeb04/lm_eval-0.4.11-py3-none-any.whl", hash = "sha256:9c9945475a715558649a38ffcb90f46e7bd23a849524a5e838f249161b030517", size = 8744826, upload-time = "2026-02-13T20:22:56.317Z" }, +] + +[[package]] +name = "lxml" +version = "6.0.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ce/08/1217ca4043f55c3c92993b283a7dbfa456a2058d8b57bbb416cc96b6efff/lxml-6.0.4.tar.gz", hash = "sha256:4137516be2a90775f99d8ef80ec0283f8d78b5d8bd4630ff20163b72e7e9abf2", size = 4237780, upload-time = "2026-04-12T16:28:24.182Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f1/cf/f9b6c9bf9d8c63d923ef893915141767cea4cea71774f20c36d0c14e1585/lxml-6.0.4-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:8da4d4840c1bc07da6fcd647784f7fbaf538eeb7a57ce6b2487acc54c5e33330", size = 4929471, upload-time = "2026-04-12T16:24:15.453Z" }, + { url = "https://files.pythonhosted.org/packages/e5/53/3117f988c9e20be4156d2b8e1bda82ae06878d11aeb820dea111a7cfa4e3/lxml-6.0.4-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:fb04a997588c3980894ded9172c10c5a3e45d3f1c5410472733626d268683806", size = 5092355, upload-time = "2026-04-12T16:24:17.876Z" }, + { url = "https://files.pythonhosted.org/packages/4e/ca/05c6ac773a2bd3edb48fa8a5c5101e927ce044c4a8aed1a85ff00fab20a5/lxml-6.0.4-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ca449642a08a6ceddf6e6775b874b6aee1b6242ed80aea84124497aba28e5384", size = 5004520, upload-time = "2026-04-12T16:24:20.184Z" }, + { url = "https://files.pythonhosted.org/packages/f1/db/d8aa5aa3a51d0aa6706ef85f85027f7c972cd840fe69ba058ecaf32d093d/lxml-6.0.4-cp312-cp312-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:35b3ccdd137e62033662787dd4d2b8be900c686325d6b91e3b1ff6213d05ba11", size = 5629961, upload-time = "2026-04-12T16:24:22.242Z" }, + { url = "https://files.pythonhosted.org/packages/9d/75/8fff4444e0493aeb15ab0f4a55c767b5baed9074cf67a1835dc1161f3a1f/lxml-6.0.4-cp312-cp312-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:45dc690c54b1341fec01743caed02e5f1ea49d7cfb81e3ba48903e5e844ed68a", size = 5237561, upload-time = "2026-04-12T16:24:24.572Z" }, + { url = "https://files.pythonhosted.org/packages/2a/9f/6d6cd73014f2dbf47a8aa7accd9712726f46ef4891e1c126bc285cfb94e4/lxml-6.0.4-cp312-cp312-manylinux_2_28_i686.whl", hash = "sha256:15ae922e8f74b05798a0e88cee46c0244aaec6a66b5e00be7d18648fed8c432e", size = 5349197, upload-time = "2026-04-12T16:24:26.805Z" }, + { url = "https://files.pythonhosted.org/packages/2d/43/e3e9a126e166234d1659d1dd9004dc1dd50cdc3c68575b071b0a1524b4de/lxml-6.0.4-cp312-cp312-manylinux_2_31_armv7l.whl", hash = "sha256:ebd816653707fbf10c65e3dee3bc24dac6b691654c21533b1ae49287433f4db0", size = 4693123, upload-time = "2026-04-12T16:24:28.812Z" }, + { url = "https://files.pythonhosted.org/packages/6c/98/b146dd123a4a7b69b571ff23ea8e8c68de8d8c1b03e23d01c6374d4fd835/lxml-6.0.4-cp312-cp312-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:21284cf36b95dd8be774eb06c304b440cf49ee811800a30080ce6d93700f0383", size = 5242967, upload-time = "2026-04-12T16:24:30.811Z" }, + { url = "https://files.pythonhosted.org/packages/7e/60/8c275584452b55a902c883e8ab63d755c5ef35d7ad1f06f9e6559095521d/lxml-6.0.4-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:0c08a2a9d0c4028ef5fc5a513b2e1e51af069a83c5b4206139edd08b3b8c2926", size = 5046810, upload-time = "2026-04-12T16:24:33.289Z" }, + { url = "https://files.pythonhosted.org/packages/19/aa/19ec216147e1105e5403fe73657c693a6e91bde855a13242dd6031e829e5/lxml-6.0.4-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:1bc2f0f417112cf1a428599dd58125ab74d8e1c66893efd9b907cbb4a5db6e44", size = 4776383, upload-time = "2026-04-12T16:24:36.008Z" }, + { url = "https://files.pythonhosted.org/packages/41/c8/90afdb838705a736268fcffd2698c05e9a129144ce215d5e14db3bdfc295/lxml-6.0.4-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:c0d86e328405529bc93913add9ff377e8b8ea9be878e611f19dbac7766a84483", size = 5643497, upload-time = "2026-04-12T16:24:38.276Z" }, + { url = "https://files.pythonhosted.org/packages/32/ec/1135261ec9822dafb90be0ff6fb0ec79cee0b7fe878833dfe5f2b8c393bd/lxml-6.0.4-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:3cce9420fe8f91eae5d457582599d282195c958cb670aa4bea313a79103ba33f", size = 5232185, upload-time = "2026-04-12T16:24:40.516Z" }, + { url = "https://files.pythonhosted.org/packages/13/f2/7380b11cae6943720f525e5a28ad9dbead96ac710417e556b7c03f3a8af3/lxml-6.0.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:96214985ec194ce97b9028414e179cfb21230cba4e2413aee7e249461bb84f4d", size = 5259968, upload-time = "2026-04-12T16:24:42.917Z" }, + { url = "https://files.pythonhosted.org/packages/b5/ed/91e443366063d3fb7640ae2badd5d7b65be4095ac6d849788e39c043baae/lxml-6.0.4-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d385141b186cc39ebe4863c1e41936282c65df19b2d06a701dedc2a898877d6a", size = 4922791, upload-time = "2026-04-12T16:24:56.381Z" }, + { url = "https://files.pythonhosted.org/packages/30/4b/2243260b70974aca9ba0cc71bd668c0c3a79644d80ddcabbfbdb4b131848/lxml-6.0.4-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:0132bb040e9bb5a199302e12bf942741defbc52922a2a06ce9ff7be0d0046483", size = 5080972, upload-time = "2026-04-12T16:24:58.823Z" }, + { url = "https://files.pythonhosted.org/packages/f8/c3/54c53c4f772341bc12331557f8b0882a426f53133926306cbe6d7f0ee7e4/lxml-6.0.4-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:26aee5321e4aa1f07c9090a35f6ab8b703903fb415c6c823cfdb20ee0d779855", size = 4992236, upload-time = "2026-04-12T16:25:01.099Z" }, + { url = "https://files.pythonhosted.org/packages/be/0f/416de42e22f287585abee610eb0d1c2638c9fe24cee7e15136e0b5e138f8/lxml-6.0.4-cp313-cp313-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:b5652455de198ff76e02cfa57d5efc5f834fa45521aaf3fcc13d6b5a88bde23d", size = 5612398, upload-time = "2026-04-12T16:25:03.517Z" }, + { url = "https://files.pythonhosted.org/packages/7d/63/29a3fa79b8a182f5bd5b5bdcb6f625f49f08f41d60a26ca25482820a1b99/lxml-6.0.4-cp313-cp313-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:75842801fb48aea73f4c281b923a010dfb39bad75edf8ceb2198ec30c27f01cc", size = 5227480, upload-time = "2026-04-12T16:25:06.119Z" }, + { url = "https://files.pythonhosted.org/packages/7c/4a/44d1843de599b1c6dbe578e4248c2f15e7fac90c5c86eb26775eaeac0fe0/lxml-6.0.4-cp313-cp313-manylinux_2_28_i686.whl", hash = "sha256:94a1f74607a5a049ff6ff8de429fec922e643e32b5b08ec7a4fe49e8de76e17c", size = 5341001, upload-time = "2026-04-12T16:25:08.563Z" }, + { url = "https://files.pythonhosted.org/packages/0d/52/c8aebde49f169e4e3452e7756be35be1cb2903e30d961cb57aa65a27055f/lxml-6.0.4-cp313-cp313-manylinux_2_31_armv7l.whl", hash = "sha256:173cc246d3d3b6d3b6491f0b3aaf22ebdf2eed616879482acad8bd84d73eb231", size = 4699105, upload-time = "2026-04-12T16:25:10.757Z" }, + { url = "https://files.pythonhosted.org/packages/78/60/76fc3735c31c28b70220d99452fb72052e84b618693ca2524da96f0131d8/lxml-6.0.4-cp313-cp313-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f0f2ee1be1b72e9890da87e4e422f2f703ff4638fd5ec5383055db431e8e30e9", size = 5231095, upload-time = "2026-04-12T16:25:13.305Z" }, + { url = "https://files.pythonhosted.org/packages/e5/60/448f01c52110102f23df5f07b3f4fde57c8e13e497e182a743d125324c0b/lxml-6.0.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c51a274b7e8b9ce394c3f8b471eb0b23c1914eec64fdccf674e082daf72abf11", size = 5042411, upload-time = "2026-04-12T16:25:15.541Z" }, + { url = "https://files.pythonhosted.org/packages/4a/2a/90612a001fa4fa0ff0443ebb0256a542670fe35473734c559720293e7aff/lxml-6.0.4-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:210ea934cba1a1ec42f88c4190c4d5c67b2d14321a8faed9b39e8378198ff99d", size = 4768431, upload-time = "2026-04-12T16:25:17.581Z" }, + { url = "https://files.pythonhosted.org/packages/84/d8/572845a7d741c8a8ffeaf928185263e14d97fbd355de164677340951d7a5/lxml-6.0.4-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:14fe654a59eebe16368c51778caeb0c8fda6f897adcd9afe828d87d13b5d5e51", size = 5634972, upload-time = "2026-04-12T16:25:20.111Z" }, + { url = "https://files.pythonhosted.org/packages/d7/1d/392b8c9f8cf1d502bbec50dee137c7af3dd5def5e5cd84572fbf0ba0541c/lxml-6.0.4-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:ec160a2b7e2b3cb71ec35010b19a1adea05785d19ba5c9c5f986b64b78fef564", size = 5222909, upload-time = "2026-04-12T16:25:22.243Z" }, + { url = "https://files.pythonhosted.org/packages/21/ab/949fc96f825cf083612aee65d5a02eacc5eaeb2815561220e33e1e160677/lxml-6.0.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:d305b86ef10b23cf3a6d62a2ad23fa296f76495183ee623f64d2600f65ffe09c", size = 5249096, upload-time = "2026-04-12T16:25:24.781Z" }, +] + +[[package]] +name = "markdown" +version = "3.10.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/2b/f4/69fa6ed85ae003c2378ffa8f6d2e3234662abd02c10d216c0ba96081a238/markdown-3.10.2.tar.gz", hash = "sha256:994d51325d25ad8aa7ce4ebaec003febcce822c3f8c911e3b17c52f7f589f950", size = 368805, upload-time = "2026-02-09T14:57:26.942Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/de/1f/77fa3081e4f66ca3576c896ae5d31c3002ac6607f9747d2e3aa49227e464/markdown-3.10.2-py3-none-any.whl", hash = "sha256:e91464b71ae3ee7afd3017d9f358ef0baf158fd9a298db92f1d4761133824c36", size = 108180, upload-time = "2026-02-09T14:57:25.787Z" }, ] [[package]] @@ -1598,28 +2360,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]] @@ -1631,7 +2371,8 @@ dependencies = [ { name = "cycler" }, { name = "fonttools" }, { name = "kiwisolver" }, - { name = "numpy" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.13'" }, + { name = "numpy", version = "2.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.13'" }, { name = "packaging" }, { name = "pillow" }, { name = "pyparsing" }, @@ -1660,20 +2401,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]] @@ -1688,6 +2415,18 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/af/33/ee4519fa02ed11a94aef9559552f3b17bb863f2ecfe1a35dc7f548cde231/matplotlib_inline-0.2.1-py3-none-any.whl", hash = "sha256:d56ce5156ba6085e00a9d54fead6ed29a9c47e215cd1bba2e976ef39f5710a76", size = 9516, upload-time = "2025-10-23T09:00:20.675Z" }, ] +[[package]] +name = "mbstrdecoder" +version = "1.1.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "chardet", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/31/ab/05ae008357c8bdb6245ebf8a101d99f26c096e0ea20800b318153da23796/mbstrdecoder-1.1.4.tar.gz", hash = "sha256:8105ef9cf6b7d7d69fe7fd6b68a2d8f281ca9b365d7a9b670be376b2e6c81b21", size = 14527, upload-time = "2025-01-18T10:07:31.089Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/30/ac/5ce64a1d4cce00390beab88622a290420401f1cabf05caf2fc0995157c21/mbstrdecoder-1.1.4-py3-none-any.whl", hash = "sha256:03dae4ec50ec0d2ff4743e63fdbd5e0022815857494d35224b60775d3d934a8c", size = 7933, upload-time = "2025-01-18T10:07:29.562Z" }, +] + [[package]] name = "mccabe" version = "0.7.0" @@ -1706,6 +2445,26 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979, upload-time = "2022-08-14T12:40:09.779Z" }, ] +[[package]] +name = "mistral-common" +version = "1.11.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "jsonschema", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "numpy", version = "2.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "pillow", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "pydantic", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "pydantic-extra-types", extra = ["pycountry"], marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "requests", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "tiktoken", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "typing-extensions", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/61/97/753c85b5c0a19f4331ac99e0300ac8da06d4b29b629c9cb03064b38561bd/mistral_common-1.11.0.tar.gz", hash = "sha256:439b7fa38f9c3f020154af51bdf30eb81def507643017d8ce9f798384ec47ec3", size = 6355512, upload-time = "2026-04-01T13:54:12.36Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/60/e4/73ad3c27e3fb613c3ce0953c928202c46cddebac3989b87be1b6f305a9f6/mistral_common-1.11.0-py3-none-any.whl", hash = "sha256:1d3ecaf7c3aa7338cb37b596fd0fb294485753958ee8e7254a6cc23eb30b249b", size = 6531513, upload-time = "2026-04-01T13:54:16.536Z" }, +] + [[package]] name = "mistune" version = "3.2.0" @@ -1715,6 +2474,40 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/9b/f7/4a5e785ec9fbd65146a27b6b70b6cdc161a66f2024e4b04ac06a67f5578b/mistune-3.2.0-py3-none-any.whl", hash = "sha256:febdc629a3c78616b94393c6580551e0e34cc289987ec6c35ed3f4be42d0eee1", size = 53598, upload-time = "2025-12-23T11:36:33.211Z" }, ] +[[package]] +name = "modal" +version = "1.3.0.post1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "aiohttp", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "cbor2", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "certifi", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "click", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "grpclib", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "protobuf", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "rich", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "synchronicity", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "toml", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "typer", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "types-certifi", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "types-toml", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "typing-extensions", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "watchfiles", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/3f/28/4a6befa42cfa62eedb572b0bbc26edb76b664bf546ee1f9fca566448da8d/modal-1.3.0.post1.tar.gz", hash = "sha256:e86b62c6cfd5c4b40fdf7bcf078d24e4ed7730d2d0b7c70dc3225a36e85067a4", size = 649508, upload-time = "2025-12-20T02:47:56.237Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7c/87/3c4c9136c2d553307d8547e39bb2ed755e165b8a8272b6990af9912fef5c/modal-1.3.0.post1-py3-none-any.whl", hash = "sha256:98d338aade676bafd7c80645ef7b4302a6a7219338124ef8b210854a043ec7ed", size = 744342, upload-time = "2025-12-20T02:47:53.726Z" }, +] + +[[package]] +name = "more-itertools" +version = "11.0.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a2/f7/139d22fef48ac78127d18e01d80cf1be40236ae489769d17f35c3d425293/more_itertools-11.0.2.tar.gz", hash = "sha256:392a9e1e362cbc106a2457d37cabf9b36e5e12efd4ebff1654630e76597df804", size = 144659, upload-time = "2026-04-09T15:01:33.297Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cb/98/6af411189d9413534c3eb691182bff1f5c6d44ed2f93f2edfe52a1bbceb8/more_itertools-11.0.2-py3-none-any.whl", hash = "sha256:6e35b35f818b01f691643c6c611bc0902f2e92b46c18fffa77ae1e7c46e912e4", size = 71939, upload-time = "2026-04-09T15:01:32.21Z" }, +] + [[package]] name = "mpmath" version = "1.3.0" @@ -1724,6 +2517,32 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl", hash = "sha256:a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c", size = 536198, upload-time = "2023-03-07T16:47:09.197Z" }, ] +[[package]] +name = "msal" +version = "1.36.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cryptography", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "pyjwt", extra = ["crypto"], marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "requests", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/de/cb/b02b0f748ac668922364ccb3c3bff5b71628a05f5adfec2ba2a5c3031483/msal-1.36.0.tar.gz", hash = "sha256:3f6a4af2b036b476a4215111c4297b4e6e236ed186cd804faefba23e4990978b", size = 174217, upload-time = "2026-04-09T10:20:33.525Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2a/d3/414d1f0a5f6f4fe5313c2b002c54e78a3332970feb3f5fed14237aa17064/msal-1.36.0-py3-none-any.whl", hash = "sha256:36ecac30e2ff4322d956029aabce3c82301c29f0acb1ad89b94edcabb0e58ec4", size = 121547, upload-time = "2026-04-09T10:20:32.336Z" }, +] + +[[package]] +name = "msal-extensions" +version = "1.3.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "msal", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/01/99/5d239b6156eddf761a636bded1118414d161bd6b7b37a9335549ed159396/msal_extensions-1.3.1.tar.gz", hash = "sha256:c5b0fd10f65ef62b5f1d62f4251d51cbcaf003fcedae8c91b040a488614be1a4", size = 23315, upload-time = "2025-03-14T23:51:03.902Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5e/75/bd9b7bb966668920f06b200e84454c8f3566b102183bc55c5473d96cb2b9/msal_extensions-1.3.1-py3-none-any.whl", hash = "sha256:96d3de4d034504e969ac5e85bae8106c8373b5c6568e4c8fa7af2eca9dbe6bca", size = 20583, upload-time = "2025-03-14T23:51:03.016Z" }, +] + [[package]] name = "multidict" version = "6.7.1" @@ -1784,42 +2603,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/dc/1d/b31650eab6c5778aceed46ba735bd97f7c7d2f54b319fa916c0f96e7805b/multidict-6.7.1-cp313-cp313t-win32.whl", hash = "sha256:df9f19c28adcb40b6aae30bbaa1478c389efd50c28d541d76760199fc1037c32", size = 47770, upload-time = "2026-01-26T02:45:06.754Z" }, { url = "https://files.pythonhosted.org/packages/ac/5b/2d2d1d522e51285bd61b1e20df8f47ae1a9d80839db0b24ea783b3832832/multidict-6.7.1-cp313-cp313t-win_amd64.whl", hash = "sha256:d54ecf9f301853f2c5e802da559604b3e95bb7a3b01a9c295c6ee591b9882de8", size = 53109, upload-time = "2026-01-26T02:45:08.044Z" }, { url = "https://files.pythonhosted.org/packages/3d/a3/cc409ba012c83ca024a308516703cf339bdc4b696195644a7215a5164a24/multidict-6.7.1-cp313-cp313t-win_arm64.whl", hash = "sha256:5a37ca18e360377cfda1d62f5f382ff41f2b8c4ccb329ed974cc2e1643440118", size = 45573, upload-time = "2026-01-26T02:45:09.349Z" }, - { url = "https://files.pythonhosted.org/packages/91/cc/db74228a8be41884a567e88a62fd589a913708fcf180d029898c17a9a371/multidict-6.7.1-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:8f333ec9c5eb1b7105e3b84b53141e66ca05a19a605368c55450b6ba208cb9ee", size = 75190, upload-time = "2026-01-26T02:45:10.651Z" }, - { url = "https://files.pythonhosted.org/packages/d5/22/492f2246bb5b534abd44804292e81eeaf835388901f0c574bac4eeec73c5/multidict-6.7.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:a407f13c188f804c759fc6a9f88286a565c242a76b27626594c133b82883b5c2", size = 44486, upload-time = "2026-01-26T02:45:11.938Z" }, - { url = "https://files.pythonhosted.org/packages/f1/4f/733c48f270565d78b4544f2baddc2fb2a245e5a8640254b12c36ac7ac68e/multidict-6.7.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:0e161ddf326db5577c3a4cc2d8648f81456e8a20d40415541587a71620d7a7d1", size = 43219, upload-time = "2026-01-26T02:45:14.346Z" }, - { url = "https://files.pythonhosted.org/packages/24/bb/2c0c2287963f4259c85e8bcbba9182ced8d7fca65c780c38e99e61629d11/multidict-6.7.1-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:1e3a8bb24342a8201d178c3b4984c26ba81a577c80d4d525727427460a50c22d", size = 245132, upload-time = "2026-01-26T02:45:15.712Z" }, - { url = "https://files.pythonhosted.org/packages/a7/f9/44d4b3064c65079d2467888794dea218d1601898ac50222ab8a9a8094460/multidict-6.7.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:97231140a50f5d447d3164f994b86a0bed7cd016e2682f8650d6a9158e14fd31", size = 252420, upload-time = "2026-01-26T02:45:17.293Z" }, - { url = "https://files.pythonhosted.org/packages/8b/13/78f7275e73fa17b24c9a51b0bd9d73ba64bb32d0ed51b02a746eb876abe7/multidict-6.7.1-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:6b10359683bd8806a200fd2909e7c8ca3a7b24ec1d8132e483d58e791d881048", size = 233510, upload-time = "2026-01-26T02:45:19.356Z" }, - { url = "https://files.pythonhosted.org/packages/4b/25/8167187f62ae3cbd52da7893f58cb036b47ea3fb67138787c76800158982/multidict-6.7.1-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:283ddac99f7ac25a4acadbf004cb5ae34480bbeb063520f70ce397b281859362", size = 264094, upload-time = "2026-01-26T02:45:20.834Z" }, - { url = "https://files.pythonhosted.org/packages/a1/e7/69a3a83b7b030cf283fb06ce074a05a02322359783424d7edf0f15fe5022/multidict-6.7.1-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:538cec1e18c067d0e6103aa9a74f9e832904c957adc260e61cd9d8cf0c3b3d37", size = 260786, upload-time = "2026-01-26T02:45:22.818Z" }, - { url = "https://files.pythonhosted.org/packages/fe/3b/8ec5074bcfc450fe84273713b4b0a0dd47c0249358f5d82eb8104ffe2520/multidict-6.7.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7eee46ccb30ff48a1e35bb818cc90846c6be2b68240e42a78599166722cea709", size = 248483, upload-time = "2026-01-26T02:45:24.368Z" }, - { url = "https://files.pythonhosted.org/packages/48/5a/d5a99e3acbca0e29c5d9cba8f92ceb15dce78bab963b308ae692981e3a5d/multidict-6.7.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:fa263a02f4f2dd2d11a7b1bb4362aa7cb1049f84a9235d31adf63f30143469a0", size = 248403, upload-time = "2026-01-26T02:45:25.982Z" }, - { url = "https://files.pythonhosted.org/packages/35/48/e58cd31f6c7d5102f2a4bf89f96b9cf7e00b6c6f3d04ecc44417c00a5a3c/multidict-6.7.1-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:2e1425e2f99ec5bd36c15a01b690a1a2456209c5deed58f95469ffb46039ccbb", size = 240315, upload-time = "2026-01-26T02:45:27.487Z" }, - { url = "https://files.pythonhosted.org/packages/94/33/1cd210229559cb90b6786c30676bb0c58249ff42f942765f88793b41fdce/multidict-6.7.1-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:497394b3239fc6f0e13a78a3e1b61296e72bf1c5f94b4c4eb80b265c37a131cd", size = 245528, upload-time = "2026-01-26T02:45:28.991Z" }, - { url = "https://files.pythonhosted.org/packages/64/f2/6e1107d226278c876c783056b7db43d800bb64c6131cec9c8dfb6903698e/multidict-6.7.1-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:233b398c29d3f1b9676b4b6f75c518a06fcb2ea0b925119fb2c1bc35c05e1601", size = 258784, upload-time = "2026-01-26T02:45:30.503Z" }, - { url = "https://files.pythonhosted.org/packages/4d/c1/11f664f14d525e4a1b5327a82d4de61a1db604ab34c6603bb3c2cc63ad34/multidict-6.7.1-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:93b1818e4a6e0930454f0f2af7dfce69307ca03cdcfb3739bf4d91241967b6c1", size = 251980, upload-time = "2026-01-26T02:45:32.603Z" }, - { url = "https://files.pythonhosted.org/packages/e1/9f/75a9ac888121d0c5bbd4ecf4eead45668b1766f6baabfb3b7f66a410e231/multidict-6.7.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:f33dc2a3abe9249ea5d8360f969ec7f4142e7ac45ee7014d8f8d5acddf178b7b", size = 243602, upload-time = "2026-01-26T02:45:34.043Z" }, - { url = "https://files.pythonhosted.org/packages/9a/e7/50bf7b004cc8525d80dbbbedfdc7aed3e4c323810890be4413e589074032/multidict-6.7.1-cp314-cp314-win32.whl", hash = "sha256:3ab8b9d8b75aef9df299595d5388b14530839f6422333357af1339443cff777d", size = 40930, upload-time = "2026-01-26T02:45:36.278Z" }, - { url = "https://files.pythonhosted.org/packages/e0/bf/52f25716bbe93745595800f36fb17b73711f14da59ed0bb2eba141bc9f0f/multidict-6.7.1-cp314-cp314-win_amd64.whl", hash = "sha256:5e01429a929600e7dab7b166062d9bb54a5eed752384c7384c968c2afab8f50f", size = 45074, upload-time = "2026-01-26T02:45:37.546Z" }, - { url = "https://files.pythonhosted.org/packages/97/ab/22803b03285fa3a525f48217963da3a65ae40f6a1b6f6cf2768879e208f9/multidict-6.7.1-cp314-cp314-win_arm64.whl", hash = "sha256:4885cb0e817aef5d00a2e8451d4665c1808378dc27c2705f1bf4ef8505c0d2e5", size = 42471, upload-time = "2026-01-26T02:45:38.889Z" }, - { url = "https://files.pythonhosted.org/packages/e0/6d/f9293baa6146ba9507e360ea0292b6422b016907c393e2f63fc40ab7b7b5/multidict-6.7.1-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:0458c978acd8e6ea53c81eefaddbbee9c6c5e591f41b3f5e8e194780fe026581", size = 82401, upload-time = "2026-01-26T02:45:40.254Z" }, - { url = "https://files.pythonhosted.org/packages/7a/68/53b5494738d83558d87c3c71a486504d8373421c3e0dbb6d0db48ad42ee0/multidict-6.7.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:c0abd12629b0af3cf590982c0b413b1e7395cd4ec026f30986818ab95bfaa94a", size = 48143, upload-time = "2026-01-26T02:45:41.635Z" }, - { url = "https://files.pythonhosted.org/packages/37/e8/5284c53310dcdc99ce5d66563f6e5773531a9b9fe9ec7a615e9bc306b05f/multidict-6.7.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:14525a5f61d7d0c94b368a42cff4c9a4e7ba2d52e2672a7b23d84dc86fb02b0c", size = 46507, upload-time = "2026-01-26T02:45:42.99Z" }, - { url = "https://files.pythonhosted.org/packages/e4/fc/6800d0e5b3875568b4083ecf5f310dcf91d86d52573160834fb4bfcf5e4f/multidict-6.7.1-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:17307b22c217b4cf05033dabefe68255a534d637c6c9b0cc8382718f87be4262", size = 239358, upload-time = "2026-01-26T02:45:44.376Z" }, - { url = "https://files.pythonhosted.org/packages/41/75/4ad0973179361cdf3a113905e6e088173198349131be2b390f9fa4da5fc6/multidict-6.7.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7a7e590ff876a3eaf1c02a4dfe0724b6e69a9e9de6d8f556816f29c496046e59", size = 246884, upload-time = "2026-01-26T02:45:47.167Z" }, - { url = "https://files.pythonhosted.org/packages/c3/9c/095bb28b5da139bd41fb9a5d5caff412584f377914bd8787c2aa98717130/multidict-6.7.1-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:5fa6a95dfee63893d80a34758cd0e0c118a30b8dcb46372bf75106c591b77889", size = 225878, upload-time = "2026-01-26T02:45:48.698Z" }, - { url = "https://files.pythonhosted.org/packages/07/d0/c0a72000243756e8f5a277b6b514fa005f2c73d481b7d9e47cd4568aa2e4/multidict-6.7.1-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a0543217a6a017692aa6ae5cc39adb75e587af0f3a82288b1492eb73dd6cc2a4", size = 253542, upload-time = "2026-01-26T02:45:50.164Z" }, - { url = "https://files.pythonhosted.org/packages/c0/6b/f69da15289e384ecf2a68837ec8b5ad8c33e973aa18b266f50fe55f24b8c/multidict-6.7.1-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f99fe611c312b3c1c0ace793f92464d8cd263cc3b26b5721950d977b006b6c4d", size = 252403, upload-time = "2026-01-26T02:45:51.779Z" }, - { url = "https://files.pythonhosted.org/packages/a2/76/b9669547afa5a1a25cd93eaca91c0da1c095b06b6d2d8ec25b713588d3a1/multidict-6.7.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9004d8386d133b7e6135679424c91b0b854d2d164af6ea3f289f8f2761064609", size = 244889, upload-time = "2026-01-26T02:45:53.27Z" }, - { url = "https://files.pythonhosted.org/packages/7e/a9/a50d2669e506dad33cfc45b5d574a205587b7b8a5f426f2fbb2e90882588/multidict-6.7.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e628ef0e6859ffd8273c69412a2465c4be4a9517d07261b33334b5ec6f3c7489", size = 241982, upload-time = "2026-01-26T02:45:54.919Z" }, - { url = "https://files.pythonhosted.org/packages/c5/bb/1609558ad8b456b4827d3c5a5b775c93b87878fd3117ed3db3423dfbce1b/multidict-6.7.1-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:841189848ba629c3552035a6a7f5bf3b02eb304e9fea7492ca220a8eda6b0e5c", size = 232415, upload-time = "2026-01-26T02:45:56.981Z" }, - { url = "https://files.pythonhosted.org/packages/d8/59/6f61039d2aa9261871e03ab9dc058a550d240f25859b05b67fd70f80d4b3/multidict-6.7.1-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:ce1bbd7d780bb5a0da032e095c951f7014d6b0a205f8318308140f1a6aba159e", size = 240337, upload-time = "2026-01-26T02:45:58.698Z" }, - { url = "https://files.pythonhosted.org/packages/a1/29/fdc6a43c203890dc2ae9249971ecd0c41deaedfe00d25cb6564b2edd99eb/multidict-6.7.1-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:b26684587228afed0d50cf804cc71062cc9c1cdf55051c4c6345d372947b268c", size = 248788, upload-time = "2026-01-26T02:46:00.862Z" }, - { url = "https://files.pythonhosted.org/packages/a9/14/a153a06101323e4cf086ecee3faadba52ff71633d471f9685c42e3736163/multidict-6.7.1-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:9f9af11306994335398293f9958071019e3ab95e9a707dc1383a35613f6abcb9", size = 242842, upload-time = "2026-01-26T02:46:02.824Z" }, - { url = "https://files.pythonhosted.org/packages/41/5f/604ae839e64a4a6efc80db94465348d3b328ee955e37acb24badbcd24d83/multidict-6.7.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:b4938326284c4f1224178a560987b6cf8b4d38458b113d9b8c1db1a836e640a2", size = 240237, upload-time = "2026-01-26T02:46:05.898Z" }, - { url = "https://files.pythonhosted.org/packages/5f/60/c3a5187bf66f6fb546ff4ab8fb5a077cbdd832d7b1908d4365c7f74a1917/multidict-6.7.1-cp314-cp314t-win32.whl", hash = "sha256:98655c737850c064a65e006a3df7c997cd3b220be4ec8fe26215760b9697d4d7", size = 48008, upload-time = "2026-01-26T02:46:07.468Z" }, - { url = "https://files.pythonhosted.org/packages/0c/f7/addf1087b860ac60e6f382240f64fb99f8bfb532bb06f7c542b83c29ca61/multidict-6.7.1-cp314-cp314t-win_amd64.whl", hash = "sha256:497bde6223c212ba11d462853cfa4f0ae6ef97465033e7dc9940cdb3ab5b48e5", size = 53542, upload-time = "2026-01-26T02:46:08.809Z" }, - { url = "https://files.pythonhosted.org/packages/4c/81/4629d0aa32302ef7b2ec65c75a728cc5ff4fa410c50096174c1632e70b3e/multidict-6.7.1-cp314-cp314t-win_arm64.whl", hash = "sha256:2bbd113e0d4af5db41d5ebfe9ccaff89de2120578164f86a5d17d5a576d1e5b2", size = 44719, upload-time = "2026-01-26T02:46:11.146Z" }, { url = "https://files.pythonhosted.org/packages/81/08/7036c080d7117f28a4af526d794aab6a84463126db031b007717c1a6676e/multidict-6.7.1-py3-none-any.whl", hash = "sha256:55d97cc6dae627efa6a6e548885712d4864b81110ac76fa4e534c03819fa4a56", size = 12319, upload-time = "2026-01-26T02:46:44.004Z" }, ] @@ -1864,12 +2647,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" }, ] @@ -1882,6 +2659,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/79/7b/2c79738432f5c924bef5071f933bcc9efd0473bac3b4aa584a6f7c1c8df8/mypy_extensions-1.1.0-py3-none-any.whl", hash = "sha256:1be4cccdb0f2482337c4743e60421de3a356cd97508abadd57d47403e94f5505", size = 4963, upload-time = "2025-04-22T14:54:22.983Z" }, ] +[[package]] +name = "narwhals" +version = "2.19.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/4e/1a/bd3317c0bdbcd9ffb710ddf5250b32898f8f2c240be99494fe137feb77a7/narwhals-2.19.0.tar.gz", hash = "sha256:14fd7040b5ff211d415a82e4827b9d04c354e213e72a6d0730205ffd72e3b7ff", size = 623698, upload-time = "2026-04-06T15:50:58.786Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/37/72/e61e3091e0e00fae9d3a8ef85ece9d2cd4b5966058e1f2901ce42679eebf/narwhals-2.19.0-py3-none-any.whl", hash = "sha256:1f8dfa4a33a6dbff878c3e9be4c3b455dfcaf2a9322f1357db00e4e92e95b84b", size = 446991, upload-time = "2026-04-06T15:50:57.046Z" }, +] + [[package]] name = "nbclient" version = "0.10.4" @@ -1955,6 +2741,21 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl", hash = "sha256:d47fbf302e7d9cbbb9e2555a0d267983d2aa476bac30e90dfbe5669bd57f3762", size = 2068504, upload-time = "2025-12-08T17:02:38.159Z" }, ] +[[package]] +name = "nltk" +version = "3.9.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "joblib", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "regex", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "tqdm", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/74/a1/b3b4adf15585a5bc4c357adde150c01ebeeb642173ded4d871e89468767c/nltk-3.9.4.tar.gz", hash = "sha256:ed03bc098a40481310320808b2db712d95d13ca65b27372f8a403949c8b523d0", size = 2946864, upload-time = "2026-03-24T06:13:40.641Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9d/91/04e965f8e717ba0ab4bdca5c112deeab11c9e750d94c4d4602f050295d39/nltk-3.9.4-py3-none-any.whl", hash = "sha256:f2fa301c3a12718ce4a0e9305c5675299da5ad9e26068218b69d692fda84828f", size = 1552087, upload-time = "2026-03-24T06:13:38.47Z" }, +] + [[package]] name = "nodeenv" version = "1.10.0" @@ -1992,10 +2793,78 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/f9/33/bd5b9137445ea4b680023eb0469b2bb969d61303dedb2aac6560ff3d14a1/notebook_shim-0.2.4-py3-none-any.whl", hash = "sha256:411a5be4e9dc882a074ccbcae671eda64cceb068767e9a3419096986560e1cef", size = 13307, upload-time = "2024-02-14T23:35:16.286Z" }, ] +[[package]] +name = "numba" +version = "0.65.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "llvmlite", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "numpy", version = "2.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/49/61/7299643b9c18d669e04be7c5bcb64d985070d07553274817b45b049e7bfe/numba-0.65.0.tar.gz", hash = "sha256:edad0d9f6682e93624c00125a471ae4df186175d71fd604c983c377cdc03e68b", size = 2764131, upload-time = "2026-04-01T03:52:01.946Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/73/36/88406bd58600cc696417b8e5dd6a056478da808f3eaf48d18e2421e0c2d9/numba-0.65.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:a52d92ffd297c10364bce60cd1fcb88f99284ab5df085f2c6bcd1cb33b529a6f", size = 3801411, upload-time = "2026-04-01T03:51:34.321Z" }, + { url = "https://files.pythonhosted.org/packages/0c/61/ce753a1d7646dd477e16d15e89473703faebb8995d2f71d7ad69a540b565/numba-0.65.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:da8e371e328c06d0010c3d8b44b21858652831b85bcfba78cb22c042e22dbd8e", size = 3501622, upload-time = "2026-04-01T03:51:36.348Z" }, + { url = "https://files.pythonhosted.org/packages/1b/8f/3d116e4b8e92f6abace431afa4b2b944f4d65bdee83af886f5c4b263df95/numba-0.65.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:b8a9008411615c69d083d1dcf477f75a5aa727b30beb16e139799e2be945cdfd", size = 3809537, upload-time = "2026-04-01T03:51:41.42Z" }, + { url = "https://files.pythonhosted.org/packages/b5/2c/6a3ca4128e253cb67affe06deb47688f51ce968f5111e2a06d010e6f1fa6/numba-0.65.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:af96c0cba53664efcb361528b8c75e011a6556c859c7e08424c2715201c6cf7a", size = 3508615, upload-time = "2026-04-01T03:51:43.444Z" }, +] + +[[package]] +name = "numpy" +version = "2.3.5" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "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'", +] +sdist = { url = "https://files.pythonhosted.org/packages/76/65/21b3bc86aac7b8f2862db1e808f1ea22b028e30a225a34a5ede9bf8678f2/numpy-2.3.5.tar.gz", hash = "sha256:784db1dcdab56bf0517743e746dfb0f885fc68d948aba86eeec2cba234bdf1c0", size = 20584950, upload-time = "2025-11-16T22:52:42.067Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/44/37/e669fe6cbb2b96c62f6bbedc6a81c0f3b7362f6a59230b23caa673a85721/numpy-2.3.5-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:74ae7b798248fe62021dbf3c914245ad45d1a6b0cb4a29ecb4b31d0bfbc4cc3e", size = 16733873, upload-time = "2025-11-16T22:49:49.84Z" }, + { url = "https://files.pythonhosted.org/packages/c5/65/df0db6c097892c9380851ab9e44b52d4f7ba576b833996e0080181c0c439/numpy-2.3.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ee3888d9ff7c14604052b2ca5535a30216aa0a58e948cdd3eeb8d3415f638769", size = 12259838, upload-time = "2025-11-16T22:49:52.863Z" }, + { url = "https://files.pythonhosted.org/packages/5b/e1/1ee06e70eb2136797abe847d386e7c0e830b67ad1d43f364dd04fa50d338/numpy-2.3.5-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:612a95a17655e213502f60cfb9bf9408efdc9eb1d5f50535cc6eb365d11b42b5", size = 5088378, upload-time = "2025-11-16T22:49:55.055Z" }, + { url = "https://files.pythonhosted.org/packages/6d/9c/1ca85fb86708724275103b81ec4cf1ac1d08f465368acfc8da7ab545bdae/numpy-2.3.5-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:3101e5177d114a593d79dd79658650fe28b5a0d8abeb8ce6f437c0e6df5be1a4", size = 6628559, upload-time = "2025-11-16T22:49:57.371Z" }, + { url = "https://files.pythonhosted.org/packages/74/78/fcd41e5a0ce4f3f7b003da85825acddae6d7ecb60cf25194741b036ca7d6/numpy-2.3.5-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8b973c57ff8e184109db042c842423ff4f60446239bd585a5131cc47f06f789d", size = 14250702, upload-time = "2025-11-16T22:49:59.632Z" }, + { url = "https://files.pythonhosted.org/packages/b6/23/2a1b231b8ff672b4c450dac27164a8b2ca7d9b7144f9c02d2396518352eb/numpy-2.3.5-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0d8163f43acde9a73c2a33605353a4f1bc4798745a8b1d73183b28e5b435ae28", size = 16606086, upload-time = "2025-11-16T22:50:02.127Z" }, + { url = "https://files.pythonhosted.org/packages/a0/c5/5ad26fbfbe2012e190cc7d5003e4d874b88bb18861d0829edc140a713021/numpy-2.3.5-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:51c1e14eb1e154ebd80e860722f9e6ed6ec89714ad2db2d3aa33c31d7c12179b", size = 16025985, upload-time = "2025-11-16T22:50:04.536Z" }, + { url = "https://files.pythonhosted.org/packages/d2/fa/dd48e225c46c819288148d9d060b047fd2a6fb1eb37eae25112ee4cb4453/numpy-2.3.5-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b46b4ec24f7293f23adcd2d146960559aaf8020213de8ad1909dba6c013bf89c", size = 18542976, upload-time = "2025-11-16T22:50:07.557Z" }, + { url = "https://files.pythonhosted.org/packages/05/79/ccbd23a75862d95af03d28b5c6901a1b7da4803181513d52f3b86ed9446e/numpy-2.3.5-cp312-cp312-win32.whl", hash = "sha256:3997b5b3c9a771e157f9aae01dd579ee35ad7109be18db0e85dbdbe1de06e952", size = 6285274, upload-time = "2025-11-16T22:50:10.746Z" }, + { url = "https://files.pythonhosted.org/packages/2d/57/8aeaf160312f7f489dea47ab61e430b5cb051f59a98ae68b7133ce8fa06a/numpy-2.3.5-cp312-cp312-win_amd64.whl", hash = "sha256:86945f2ee6d10cdfd67bcb4069c1662dd711f7e2a4343db5cecec06b87cf31aa", size = 12782922, upload-time = "2025-11-16T22:50:12.811Z" }, + { url = "https://files.pythonhosted.org/packages/78/a6/aae5cc2ca78c45e64b9ef22f089141d661516856cf7c8a54ba434576900d/numpy-2.3.5-cp312-cp312-win_arm64.whl", hash = "sha256:f28620fe26bee16243be2b7b874da327312240a7cdc38b769a697578d2100013", size = 10194667, upload-time = "2025-11-16T22:50:16.16Z" }, + { url = "https://files.pythonhosted.org/packages/db/69/9cde09f36da4b5a505341180a3f2e6fadc352fd4d2b7096ce9778db83f1a/numpy-2.3.5-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:d0f23b44f57077c1ede8c5f26b30f706498b4862d3ff0a7298b8411dd2f043ff", size = 16728251, upload-time = "2025-11-16T22:50:19.013Z" }, + { url = "https://files.pythonhosted.org/packages/79/fb/f505c95ceddd7027347b067689db71ca80bd5ecc926f913f1a23e65cf09b/numpy-2.3.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:aa5bc7c5d59d831d9773d1170acac7893ce3a5e130540605770ade83280e7188", size = 12254652, upload-time = "2025-11-16T22:50:21.487Z" }, + { url = "https://files.pythonhosted.org/packages/78/da/8c7738060ca9c31b30e9301ee0cf6c5ffdbf889d9593285a1cead337f9a5/numpy-2.3.5-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:ccc933afd4d20aad3c00bcef049cb40049f7f196e0397f1109dba6fed63267b0", size = 5083172, upload-time = "2025-11-16T22:50:24.562Z" }, + { url = "https://files.pythonhosted.org/packages/a4/b4/ee5bb2537fb9430fd2ef30a616c3672b991a4129bb1c7dcc42aa0abbe5d7/numpy-2.3.5-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:afaffc4393205524af9dfa400fa250143a6c3bc646c08c9f5e25a9f4b4d6a903", size = 6622990, upload-time = "2025-11-16T22:50:26.47Z" }, + { url = "https://files.pythonhosted.org/packages/95/03/dc0723a013c7d7c19de5ef29e932c3081df1c14ba582b8b86b5de9db7f0f/numpy-2.3.5-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9c75442b2209b8470d6d5d8b1c25714270686f14c749028d2199c54e29f20b4d", size = 14248902, upload-time = "2025-11-16T22:50:28.861Z" }, + { url = "https://files.pythonhosted.org/packages/f5/10/ca162f45a102738958dcec8023062dad0cbc17d1ab99d68c4e4a6c45fb2b/numpy-2.3.5-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:11e06aa0af8c0f05104d56450d6093ee639e15f24ecf62d417329d06e522e017", size = 16597430, upload-time = "2025-11-16T22:50:31.56Z" }, + { url = "https://files.pythonhosted.org/packages/2a/51/c1e29be863588db58175175f057286900b4b3327a1351e706d5e0f8dd679/numpy-2.3.5-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ed89927b86296067b4f81f108a2271d8926467a8868e554eaf370fc27fa3ccaf", size = 16024551, upload-time = "2025-11-16T22:50:34.242Z" }, + { url = "https://files.pythonhosted.org/packages/83/68/8236589d4dbb87253d28259d04d9b814ec0ecce7cb1c7fed29729f4c3a78/numpy-2.3.5-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:51c55fe3451421f3a6ef9a9c1439e82101c57a2c9eab9feb196a62b1a10b58ce", size = 18533275, upload-time = "2025-11-16T22:50:37.651Z" }, + { url = "https://files.pythonhosted.org/packages/40/56/2932d75b6f13465239e3b7b7e511be27f1b8161ca2510854f0b6e521c395/numpy-2.3.5-cp313-cp313-win32.whl", hash = "sha256:1978155dd49972084bd6ef388d66ab70f0c323ddee6f693d539376498720fb7e", size = 6277637, upload-time = "2025-11-16T22:50:40.11Z" }, + { url = "https://files.pythonhosted.org/packages/0c/88/e2eaa6cffb115b85ed7c7c87775cb8bcf0816816bc98ca8dbfa2ee33fe6e/numpy-2.3.5-cp313-cp313-win_amd64.whl", hash = "sha256:00dc4e846108a382c5869e77c6ed514394bdeb3403461d25a829711041217d5b", size = 12779090, upload-time = "2025-11-16T22:50:42.503Z" }, + { url = "https://files.pythonhosted.org/packages/8f/88/3f41e13a44ebd4034ee17baa384acac29ba6a4fcc2aca95f6f08ca0447d1/numpy-2.3.5-cp313-cp313-win_arm64.whl", hash = "sha256:0472f11f6ec23a74a906a00b48a4dcf3849209696dff7c189714511268d103ae", size = 10194710, upload-time = "2025-11-16T22:50:44.971Z" }, + { url = "https://files.pythonhosted.org/packages/13/cb/71744144e13389d577f867f745b7df2d8489463654a918eea2eeb166dfc9/numpy-2.3.5-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:414802f3b97f3c1eef41e530aaba3b3c1620649871d8cb38c6eaff034c2e16bd", size = 16827292, upload-time = "2025-11-16T22:50:47.715Z" }, + { url = "https://files.pythonhosted.org/packages/71/80/ba9dc6f2a4398e7f42b708a7fdc841bb638d353be255655498edbf9a15a8/numpy-2.3.5-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:5ee6609ac3604fa7780e30a03e5e241a7956f8e2fcfe547d51e3afa5247ac47f", size = 12378897, upload-time = "2025-11-16T22:50:51.327Z" }, + { url = "https://files.pythonhosted.org/packages/2e/6d/db2151b9f64264bcceccd51741aa39b50150de9b602d98ecfe7e0c4bff39/numpy-2.3.5-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:86d835afea1eaa143012a2d7a3f45a3adce2d7adc8b4961f0b362214d800846a", size = 5207391, upload-time = "2025-11-16T22:50:54.542Z" }, + { url = "https://files.pythonhosted.org/packages/80/ae/429bacace5ccad48a14c4ae5332f6aa8ab9f69524193511d60ccdfdc65fa/numpy-2.3.5-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:30bc11310e8153ca664b14c5f1b73e94bd0503681fcf136a163de856f3a50139", size = 6721275, upload-time = "2025-11-16T22:50:56.794Z" }, + { url = "https://files.pythonhosted.org/packages/74/5b/1919abf32d8722646a38cd527bc3771eb229a32724ee6ba340ead9b92249/numpy-2.3.5-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1062fde1dcf469571705945b0f221b73928f34a20c904ffb45db101907c3454e", size = 14306855, upload-time = "2025-11-16T22:50:59.208Z" }, + { url = "https://files.pythonhosted.org/packages/a5/87/6831980559434973bebc30cd9c1f21e541a0f2b0c280d43d3afd909b66d0/numpy-2.3.5-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ce581db493ea1a96c0556360ede6607496e8bf9b3a8efa66e06477267bc831e9", size = 16657359, upload-time = "2025-11-16T22:51:01.991Z" }, + { url = "https://files.pythonhosted.org/packages/dd/91/c797f544491ee99fd00495f12ebb7802c440c1915811d72ac5b4479a3356/numpy-2.3.5-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:cc8920d2ec5fa99875b670bb86ddeb21e295cb07aa331810d9e486e0b969d946", size = 16093374, upload-time = "2025-11-16T22:51:05.291Z" }, + { url = "https://files.pythonhosted.org/packages/74/a6/54da03253afcbe7a72785ec4da9c69fb7a17710141ff9ac5fcb2e32dbe64/numpy-2.3.5-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:9ee2197ef8c4f0dfe405d835f3b6a14f5fee7782b5de51ba06fb65fc9b36e9f1", size = 18594587, upload-time = "2025-11-16T22:51:08.585Z" }, + { 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" }, +] + [[package]] name = "numpy" version = "2.4.2" source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "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'", +] sdist = { url = "https://files.pythonhosted.org/packages/57/fd/0005efbd0af48e55eb3c7208af93f2862d4b1a56cd78e84309a2d959208d/numpy-2.4.2.tar.gz", hash = "sha256:659a6107e31a83c4e33f763942275fd278b21d095094044eb35569e86a21ddae", size = 20723651, upload-time = "2026-01-31T23:13:10.135Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/51/6e/6f394c9c77668153e14d4da83bcc247beb5952f6ead7699a1a2992613bea/numpy-2.4.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:21982668592194c609de53ba4933a7471880ccbaadcc52352694a59ecc860b3a", size = 16667963, upload-time = "2026-01-31T23:10:52.147Z" }, @@ -2030,176 +2899,244 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/40/62/48f99ae172a4b63d981babe683685030e8a3df4f246c893ea5c6ef99f018/numpy-2.4.2-cp313-cp313t-win32.whl", hash = "sha256:52b913ec40ff7ae845687b0b34d8d93b60cb66dcee06996dd5c99f2fc9328657", size = 6082433, upload-time = "2026-01-31T23:11:58.096Z" }, { url = "https://files.pythonhosted.org/packages/07/38/e054a61cfe48ad9f1ed0d188e78b7e26859d0b60ef21cd9de4897cdb5326/numpy-2.4.2-cp313-cp313t-win_amd64.whl", hash = "sha256:5eea80d908b2c1f91486eb95b3fb6fab187e569ec9752ab7d9333d2e66bf2d6b", size = 12451181, upload-time = "2026-01-31T23:11:59.782Z" }, { url = "https://files.pythonhosted.org/packages/6e/a4/a05c3a6418575e185dd84d0b9680b6bb2e2dc3e4202f036b7b4e22d6e9dc/numpy-2.4.2-cp313-cp313t-win_arm64.whl", hash = "sha256:fd49860271d52127d61197bb50b64f58454e9f578cb4b2c001a6de8b1f50b0b1", size = 10290756, upload-time = "2026-01-31T23:12:02.438Z" }, - { url = "https://files.pythonhosted.org/packages/18/88/b7df6050bf18fdcfb7046286c6535cabbdd2064a3440fca3f069d319c16e/numpy-2.4.2-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:444be170853f1f9d528428eceb55f12918e4fda5d8805480f36a002f1415e09b", size = 16663092, upload-time = "2026-01-31T23:12:04.521Z" }, - { url = "https://files.pythonhosted.org/packages/25/7a/1fee4329abc705a469a4afe6e69b1ef7e915117747886327104a8493a955/numpy-2.4.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:d1240d50adff70c2a88217698ca844723068533f3f5c5fa6ee2e3220e3bdb000", size = 14698770, upload-time = "2026-01-31T23:12:06.96Z" }, - { url = "https://files.pythonhosted.org/packages/fb/0b/f9e49ba6c923678ad5bc38181c08ac5e53b7a5754dbca8e581aa1a56b1ff/numpy-2.4.2-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:7cdde6de52fb6664b00b056341265441192d1291c130e99183ec0d4b110ff8b1", size = 5208562, upload-time = "2026-01-31T23:12:09.632Z" }, - { url = "https://files.pythonhosted.org/packages/7d/12/d7de8f6f53f9bb76997e5e4c069eda2051e3fe134e9181671c4391677bb2/numpy-2.4.2-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:cda077c2e5b780200b6b3e09d0b42205a3d1c68f30c6dceb90401c13bff8fe74", size = 6543710, upload-time = "2026-01-31T23:12:11.969Z" }, - { url = "https://files.pythonhosted.org/packages/09/63/c66418c2e0268a31a4cf8a8b512685748200f8e8e8ec6c507ce14e773529/numpy-2.4.2-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d30291931c915b2ab5717c2974bb95ee891a1cf22ebc16a8006bd59cd210d40a", size = 15677205, upload-time = "2026-01-31T23:12:14.33Z" }, - { url = "https://files.pythonhosted.org/packages/5d/6c/7f237821c9642fb2a04d2f1e88b4295677144ca93285fd76eff3bcba858d/numpy-2.4.2-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bba37bc29d4d85761deed3954a1bc62be7cf462b9510b51d367b769a8c8df325", size = 16611738, upload-time = "2026-01-31T23:12:16.525Z" }, - { url = "https://files.pythonhosted.org/packages/c2/a7/39c4cdda9f019b609b5c473899d87abff092fc908cfe4d1ecb2fcff453b0/numpy-2.4.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:b2f0073ed0868db1dcd86e052d37279eef185b9c8db5bf61f30f46adac63c909", size = 17028888, upload-time = "2026-01-31T23:12:19.306Z" }, - { url = "https://files.pythonhosted.org/packages/da/b3/e84bb64bdfea967cc10950d71090ec2d84b49bc691df0025dddb7c26e8e3/numpy-2.4.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:7f54844851cdb630ceb623dcec4db3240d1ac13d4990532446761baede94996a", size = 18339556, upload-time = "2026-01-31T23:12:21.816Z" }, - { url = "https://files.pythonhosted.org/packages/88/f5/954a291bc1192a27081706862ac62bb5920fbecfbaa302f64682aa90beed/numpy-2.4.2-cp314-cp314-win32.whl", hash = "sha256:12e26134a0331d8dbd9351620f037ec470b7c75929cb8a1537f6bfe411152a1a", size = 6006899, upload-time = "2026-01-31T23:12:24.14Z" }, - { url = "https://files.pythonhosted.org/packages/05/cb/eff72a91b2efdd1bc98b3b8759f6a1654aa87612fc86e3d87d6fe4f948c4/numpy-2.4.2-cp314-cp314-win_amd64.whl", hash = "sha256:068cdb2d0d644cdb45670810894f6a0600797a69c05f1ac478e8d31670b8ee75", size = 12443072, upload-time = "2026-01-31T23:12:26.33Z" }, - { url = "https://files.pythonhosted.org/packages/37/75/62726948db36a56428fce4ba80a115716dc4fad6a3a4352487f8bb950966/numpy-2.4.2-cp314-cp314-win_arm64.whl", hash = "sha256:6ed0be1ee58eef41231a5c943d7d1375f093142702d5723ca2eb07db9b934b05", size = 10494886, upload-time = "2026-01-31T23:12:28.488Z" }, - { url = "https://files.pythonhosted.org/packages/36/2f/ee93744f1e0661dc267e4b21940870cabfae187c092e1433b77b09b50ac4/numpy-2.4.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:98f16a80e917003a12c0580f97b5f875853ebc33e2eaa4bccfc8201ac6869308", size = 14818567, upload-time = "2026-01-31T23:12:30.709Z" }, - { url = "https://files.pythonhosted.org/packages/a7/24/6535212add7d76ff938d8bdc654f53f88d35cddedf807a599e180dcb8e66/numpy-2.4.2-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:20abd069b9cda45874498b245c8015b18ace6de8546bf50dfa8cea1696ed06ef", size = 5328372, upload-time = "2026-01-31T23:12:32.962Z" }, - { url = "https://files.pythonhosted.org/packages/5e/9d/c48f0a035725f925634bf6b8994253b43f2047f6778a54147d7e213bc5a7/numpy-2.4.2-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:e98c97502435b53741540a5717a6749ac2ada901056c7db951d33e11c885cc7d", size = 6649306, upload-time = "2026-01-31T23:12:34.797Z" }, - { url = "https://files.pythonhosted.org/packages/81/05/7c73a9574cd4a53a25907bad38b59ac83919c0ddc8234ec157f344d57d9a/numpy-2.4.2-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:da6cad4e82cb893db4b69105c604d805e0c3ce11501a55b5e9f9083b47d2ffe8", size = 15722394, upload-time = "2026-01-31T23:12:36.565Z" }, - { url = "https://files.pythonhosted.org/packages/35/fa/4de10089f21fc7d18442c4a767ab156b25c2a6eaf187c0db6d9ecdaeb43f/numpy-2.4.2-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9e4424677ce4b47fe73c8b5556d876571f7c6945d264201180db2dc34f676ab5", size = 16653343, upload-time = "2026-01-31T23:12:39.188Z" }, - { url = "https://files.pythonhosted.org/packages/b8/f9/d33e4ffc857f3763a57aa85650f2e82486832d7492280ac21ba9efda80da/numpy-2.4.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:2b8f157c8a6f20eb657e240f8985cc135598b2b46985c5bccbde7616dc9c6b1e", size = 17078045, upload-time = "2026-01-31T23:12:42.041Z" }, - { url = "https://files.pythonhosted.org/packages/c8/b8/54bdb43b6225badbea6389fa038c4ef868c44f5890f95dd530a218706da3/numpy-2.4.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5daf6f3914a733336dab21a05cdec343144600e964d2fcdabaac0c0269874b2a", size = 18380024, upload-time = "2026-01-31T23:12:44.331Z" }, - { url = "https://files.pythonhosted.org/packages/a5/55/6e1a61ded7af8df04016d81b5b02daa59f2ea9252ee0397cb9f631efe9e5/numpy-2.4.2-cp314-cp314t-win32.whl", hash = "sha256:8c50dd1fc8826f5b26a5ee4d77ca55d88a895f4e4819c7ecc2a9f5905047a443", size = 6153937, upload-time = "2026-01-31T23:12:47.229Z" }, - { url = "https://files.pythonhosted.org/packages/45/aa/fa6118d1ed6d776b0983f3ceac9b1a5558e80df9365b1c3aa6d42bf9eee4/numpy-2.4.2-cp314-cp314t-win_amd64.whl", hash = "sha256:fcf92bee92742edd401ba41135185866f7026c502617f422eb432cfeca4fe236", size = 12631844, upload-time = "2026-01-31T23:12:48.997Z" }, - { url = "https://files.pythonhosted.org/packages/32/0a/2ec5deea6dcd158f254a7b372fb09cfba5719419c8d66343bab35237b3fb/numpy-2.4.2-cp314-cp314t-win_arm64.whl", hash = "sha256:1f92f53998a17265194018d1cc321b2e96e900ca52d54c7c77837b71b9465181", size = 10565379, upload-time = "2026-01-31T23:12:51.345Z" }, ] [[package]] -name = "nvidia-cublas" -version = "13.1.0.3" +name = "nvidia-cublas-cu12" +version = "12.8.4.1" source = { registry = "https://pypi.org/simple" } wheels = [ - { url = "https://files.pythonhosted.org/packages/e1/a5/fce49e2ae977e0ccc084e5adafceb4f0ac0c8333cb6863501618a7277f67/nvidia_cublas-13.1.0.3-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:c86fc7f7ae36d7528288c5d88098edcb7b02c633d262e7ddbb86b0ad91be5df2", size = 542851226, upload-time = "2025-10-09T08:59:04.818Z" }, - { url = "https://files.pythonhosted.org/packages/e7/44/423ac00af4dd95a5aeb27207e2c0d9b7118702149bf4704c3ddb55bb7429/nvidia_cublas-13.1.0.3-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:ee8722c1f0145ab246bccb9e452153b5e0515fd094c3678df50b2a0888b8b171", size = 423133236, upload-time = "2025-10-09T08:59:32.536Z" }, + { url = "https://files.pythonhosted.org/packages/dc/61/e24b560ab2e2eaeb3c839129175fb330dfcfc29e5203196e5541a4c44682/nvidia_cublas_cu12-12.8.4.1-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:8ac4e771d5a348c551b2a426eda6193c19aa630236b418086020df5ba9667142", size = 594346921, upload-time = "2025-03-07T01:44:31.254Z" }, ] [[package]] -name = "nvidia-cuda-cupti" -version = "13.0.85" +name = "nvidia-cuda-cupti-cu12" +version = "12.8.90" source = { registry = "https://pypi.org/simple" } wheels = [ - { url = "https://files.pythonhosted.org/packages/2a/2a/80353b103fc20ce05ef51e928daed4b6015db4aaa9162ed0997090fe2250/nvidia_cuda_cupti-13.0.85-py3-none-manylinux_2_25_aarch64.whl", hash = "sha256:796bd679890ee55fb14a94629b698b6db54bcfd833d391d5e94017dd9d7d3151", size = 10310827, upload-time = "2025-09-04T08:26:42.012Z" }, - { url = "https://files.pythonhosted.org/packages/33/6d/737d164b4837a9bbd202f5ae3078975f0525a55730fe871d8ed4e3b952b0/nvidia_cuda_cupti-13.0.85-py3-none-manylinux_2_25_x86_64.whl", hash = "sha256:4eb01c08e859bf924d222250d2e8f8b8ff6d3db4721288cf35d14252a4d933c8", size = 10715597, upload-time = "2025-09-04T08:26:51.312Z" }, + { url = "https://files.pythonhosted.org/packages/f8/02/2adcaa145158bf1a8295d83591d22e4103dbfd821bcaf6f3f53151ca4ffa/nvidia_cuda_cupti_cu12-12.8.90-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:ea0cb07ebda26bb9b29ba82cda34849e73c166c18162d3913575b0c9db9a6182", size = 10248621, upload-time = "2025-03-07T01:40:21.213Z" }, ] [[package]] -name = "nvidia-cuda-nvrtc" -version = "13.0.88" +name = "nvidia-cuda-nvrtc-cu12" +version = "12.8.93" source = { registry = "https://pypi.org/simple" } wheels = [ - { url = "https://files.pythonhosted.org/packages/c3/68/483a78f5e8f31b08fb1bb671559968c0ca3a065ac7acabfc7cee55214fd6/nvidia_cuda_nvrtc-13.0.88-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl", hash = "sha256:ad9b6d2ead2435f11cbb6868809d2adeeee302e9bb94bcf0539c7a40d80e8575", size = 90215200, upload-time = "2025-09-04T08:28:44.204Z" }, - { url = "https://files.pythonhosted.org/packages/b7/dc/6bb80850e0b7edd6588d560758f17e0550893a1feaf436807d64d2da040f/nvidia_cuda_nvrtc-13.0.88-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d27f20a0ca67a4bb34268a5e951033496c5b74870b868bacd046b1b8e0c3267b", size = 43015449, upload-time = "2025-09-04T08:28:20.239Z" }, + { url = "https://files.pythonhosted.org/packages/05/6b/32f747947df2da6994e999492ab306a903659555dddc0fbdeb9d71f75e52/nvidia_cuda_nvrtc_cu12-12.8.93-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl", hash = "sha256:a7756528852ef889772a84c6cd89d41dfa74667e24cca16bb31f8f061e3e9994", size = 88040029, upload-time = "2025-03-07T01:42:13.562Z" }, ] [[package]] -name = "nvidia-cuda-runtime" -version = "13.0.96" +name = "nvidia-cuda-runtime-cu12" +version = "12.8.90" source = { registry = "https://pypi.org/simple" } wheels = [ - { url = "https://files.pythonhosted.org/packages/87/4f/17d7b9b8e285199c58ce28e31b5c5bbaa4d8271af06a89b6405258245de2/nvidia_cuda_runtime-13.0.96-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ef9bcbe90493a2b9d810e43d249adb3d02e98dd30200d86607d8d02687c43f55", size = 2261060, upload-time = "2025-10-09T08:55:15.78Z" }, - { url = "https://files.pythonhosted.org/packages/2e/24/d1558f3b68b1d26e706813b1d10aa1d785e4698c425af8db8edc3dced472/nvidia_cuda_runtime-13.0.96-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7f82250d7782aa23b6cfe765ecc7db554bd3c2870c43f3d1821f1d18aebf0548", size = 2243632, upload-time = "2025-10-09T08:55:36.117Z" }, + { url = "https://files.pythonhosted.org/packages/0d/9b/a997b638fcd068ad6e4d53b8551a7d30fe8b404d6f1804abf1df69838932/nvidia_cuda_runtime_cu12-12.8.90-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:adade8dcbd0edf427b7204d480d6066d33902cab2a4707dcfc48a2d0fd44ab90", size = 954765, upload-time = "2025-03-07T01:40:01.615Z" }, ] [[package]] -name = "nvidia-cudnn-cu13" -version = "9.19.0.56" +name = "nvidia-cudnn-cu12" +version = "9.10.2.21" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "nvidia-cublas", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "nvidia-cublas-cu12", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, ] wheels = [ - { url = "https://files.pythonhosted.org/packages/f1/84/26025437c1e6b61a707442184fa0c03d083b661adf3a3eecfd6d21677740/nvidia_cudnn_cu13-9.19.0.56-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:6ed29ffaee1176c612daf442e4dd6cfeb6a0caa43ddcbeb59da94953030b1be4", size = 433781201, upload-time = "2026-02-03T20:40:53.805Z" }, - { url = "https://files.pythonhosted.org/packages/a3/22/0b4b932655d17a6da1b92fa92ab12844b053bb2ac2475e179ba6f043da1e/nvidia_cudnn_cu13-9.19.0.56-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:d20e1734305e9d68889a96e3f35094d733ff1f83932ebe462753973e53a572bf", size = 366066321, upload-time = "2026-02-03T20:44:52.837Z" }, + { url = "https://files.pythonhosted.org/packages/ba/51/e123d997aa098c61d029f76663dedbfb9bc8dcf8c60cbd6adbe42f76d049/nvidia_cudnn_cu12-9.10.2.21-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:949452be657fa16687d0930933f032835951ef0892b37d2d53824d1a84dc97a8", size = 706758467, upload-time = "2025-06-06T21:54:08.597Z" }, ] [[package]] -name = "nvidia-cufft" -version = "12.0.0.61" +name = "nvidia-cufft-cu12" +version = "11.3.3.83" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "nvidia-nvjitlink", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "nvidia-nvjitlink-cu12", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, ] wheels = [ - { url = "https://files.pythonhosted.org/packages/8b/ae/f417a75c0259e85c1d2f83ca4e960289a5f814ed0cea74d18c353d3e989d/nvidia_cufft-12.0.0.61-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:2708c852ef8cd89d1d2068bdbece0aa188813a0c934db3779b9b1faa8442e5f5", size = 214053554, upload-time = "2025-09-04T08:31:38.196Z" }, - { url = "https://files.pythonhosted.org/packages/a8/2f/7b57e29836ea8714f81e9898409196f47d772d5ddedddf1592eadb8ab743/nvidia_cufft-12.0.0.61-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:6c44f692dce8fd5ffd3e3df134b6cdb9c2f72d99cf40b62c32dde45eea9ddad3", size = 214085489, upload-time = "2025-09-04T08:31:56.044Z" }, + { url = "https://files.pythonhosted.org/packages/1f/13/ee4e00f30e676b66ae65b4f08cb5bcbb8392c03f54f2d5413ea99a5d1c80/nvidia_cufft_cu12-11.3.3.83-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:4d2dd21ec0b88cf61b62e6b43564355e5222e4a3fb394cac0db101f2dd0d4f74", size = 193118695, upload-time = "2025-03-07T01:45:27.821Z" }, ] [[package]] -name = "nvidia-cufile" -version = "1.15.1.6" +name = "nvidia-cufile-cu12" +version = "1.13.1.3" source = { registry = "https://pypi.org/simple" } wheels = [ - { url = "https://files.pythonhosted.org/packages/3f/70/4f193de89a48b71714e74602ee14d04e4019ad36a5a9f20c425776e72cd6/nvidia_cufile-1.15.1.6-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:08a3ecefae5a01c7f5117351c64f17c7c62efa5fffdbe24fc7d298da19cd0b44", size = 1223672, upload-time = "2025-09-04T08:32:22.779Z" }, - { url = "https://files.pythonhosted.org/packages/ab/73/cc4a14c9813a8a0d509417cf5f4bdaba76e924d58beb9864f5a7baceefbf/nvidia_cufile-1.15.1.6-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:bdc0deedc61f548bddf7733bdc216456c2fdb101d020e1ab4b88d232d5e2f6d1", size = 1136992, upload-time = "2025-09-04T08:32:14.119Z" }, + { url = "https://files.pythonhosted.org/packages/bb/fe/1bcba1dfbfb8d01be8d93f07bfc502c93fa23afa6fd5ab3fc7c1df71038a/nvidia_cufile_cu12-1.13.1.3-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:1d069003be650e131b21c932ec3d8969c1715379251f8d23a1860554b1cb24fc", size = 1197834, upload-time = "2025-03-07T01:45:50.723Z" }, ] [[package]] -name = "nvidia-curand" -version = "10.4.0.35" +name = "nvidia-curand-cu12" +version = "10.3.9.90" source = { registry = "https://pypi.org/simple" } wheels = [ - { url = "https://files.pythonhosted.org/packages/1e/72/7c2ae24fb6b63a32e6ae5d241cc65263ea18d08802aaae087d9f013335a2/nvidia_curand-10.4.0.35-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:133df5a7509c3e292aaa2b477afd0194f06ce4ea24d714d616ff36439cee349a", size = 61962106, upload-time = "2025-08-04T10:21:41.128Z" }, - { url = "https://files.pythonhosted.org/packages/a5/9f/be0a41ca4a4917abf5cb9ae0daff1a6060cc5de950aec0396de9f3b52bc5/nvidia_curand-10.4.0.35-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:1aee33a5da6e1db083fe2b90082def8915f30f3248d5896bcec36a579d941bfc", size = 59544258, upload-time = "2025-08-04T10:22:03.992Z" }, + { url = "https://files.pythonhosted.org/packages/fb/aa/6584b56dc84ebe9cf93226a5cde4d99080c8e90ab40f0c27bda7a0f29aa1/nvidia_curand_cu12-10.3.9.90-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:b32331d4f4df5d6eefa0554c565b626c7216f87a06a4f56fab27c3b68a830ec9", size = 63619976, upload-time = "2025-03-07T01:46:23.323Z" }, ] [[package]] -name = "nvidia-cusolver" -version = "12.0.4.66" +name = "nvidia-cusolver-cu12" +version = "11.7.3.90" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "nvidia-cublas", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, - { name = "nvidia-cusparse", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, - { name = "nvidia-nvjitlink", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "nvidia-cublas-cu12", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "nvidia-cusparse-cu12", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "nvidia-nvjitlink-cu12", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, ] wheels = [ - { url = "https://files.pythonhosted.org/packages/c8/c3/b30c9e935fc01e3da443ec0116ed1b2a009bb867f5324d3f2d7e533e776b/nvidia_cusolver-12.0.4.66-py3-none-manylinux_2_27_aarch64.whl", hash = "sha256:02c2457eaa9e39de20f880f4bd8820e6a1cfb9f9a34f820eb12a155aa5bc92d2", size = 223467760, upload-time = "2025-09-04T08:33:04.222Z" }, - { url = "https://files.pythonhosted.org/packages/5f/67/cba3777620cdacb99102da4042883709c41c709f4b6323c10781a9c3aa34/nvidia_cusolver-12.0.4.66-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:0a759da5dea5c0ea10fd307de75cdeb59e7ea4fcb8add0924859b944babf1112", size = 200941980, upload-time = "2025-09-04T08:33:22.767Z" }, + { url = "https://files.pythonhosted.org/packages/85/48/9a13d2975803e8cf2777d5ed57b87a0b6ca2cc795f9a4f59796a910bfb80/nvidia_cusolver_cu12-11.7.3.90-py3-none-manylinux_2_27_x86_64.whl", hash = "sha256:4376c11ad263152bd50ea295c05370360776f8c3427b30991df774f9fb26c450", size = 267506905, upload-time = "2025-03-07T01:47:16.273Z" }, ] [[package]] -name = "nvidia-cusparse" -version = "12.6.3.3" +name = "nvidia-cusparse-cu12" +version = "12.5.8.93" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "nvidia-nvjitlink", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "nvidia-nvjitlink-cu12", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/c2/f5/e1854cb2f2bcd4280c44736c93550cc300ff4b8c95ebe370d0aa7d2b473d/nvidia_cusparse_cu12-12.5.8.93-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:1ec05d76bbbd8b61b06a80e1eaf8cf4959c3d4ce8e711b65ebd0443bb0ebb13b", size = 288216466, upload-time = "2025-03-07T01:48:13.779Z" }, +] + +[[package]] +name = "nvidia-cusparselt-cu12" +version = "0.7.1" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/56/79/12978b96bd44274fe38b5dde5cfb660b1d114f70a65ef962bcbbed99b549/nvidia_cusparselt_cu12-0.7.1-py3-none-manylinux2014_x86_64.whl", hash = "sha256:f1bb701d6b930d5a7cea44c19ceb973311500847f81b634d802b7b539dc55623", size = 287193691, upload-time = "2025-02-26T00:15:44.104Z" }, +] + +[[package]] +name = "nvidia-ml-py" +version = "12.560.30" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/53/10/5f34de4a71db8b2b7ec4269f4a33287f24c23e2857ea3187c977b7bc3604/nvidia-ml-py-12.560.30.tar.gz", hash = "sha256:f0254dc7400647680a072ee02509bfd46102b60bdfeca321576d4d4817e7fe97", size = 39194, upload-time = "2024-08-14T16:27:12.647Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b7/f3/a69ce0b1a1e12fbf6b2ad9f4c14c9999fdbdf15f2478d210f0fd501ddc98/nvidia_ml_py-12.560.30-py3-none-any.whl", hash = "sha256:fea371c94d63e38a611c17bbb85fe400e9c8ddb9e8684a9cd0e47786a4bc3c73", size = 40526, upload-time = "2024-08-14T16:27:11.379Z" }, +] + +[[package]] +name = "nvidia-nccl-cu12" +version = "2.27.3" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5c/5b/4e4fff7bad39adf89f735f2bc87248c81db71205b62bcc0d5ca5b606b3c3/nvidia_nccl_cu12-2.27.3-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:adf27ccf4238253e0b826bce3ff5fa532d65fc42322c8bfdfaf28024c0fbe039", size = 322364134, upload-time = "2025-06-03T21:58:04.013Z" }, ] + +[[package]] +name = "nvidia-nvjitlink-cu12" +version = "12.8.93" +source = { registry = "https://pypi.org/simple" } wheels = [ - { url = "https://files.pythonhosted.org/packages/f8/94/5c26f33738ae35276672f12615a64bd008ed5be6d1ebcb23579285d960a9/nvidia_cusparse-12.6.3.3-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:80bcc4662f23f1054ee334a15c72b8940402975e0eab63178fc7e670aa59472c", size = 162155568, upload-time = "2025-09-04T08:33:42.864Z" }, - { url = "https://files.pythonhosted.org/packages/fa/18/623c77619c31d62efd55302939756966f3ecc8d724a14dab2b75f1508850/nvidia_cusparse-12.6.3.3-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:2b3c89c88d01ee0e477cb7f82ef60a11a4bcd57b6b87c33f789350b59759360b", size = 145942937, upload-time = "2025-09-04T08:33:58.029Z" }, + { url = "https://files.pythonhosted.org/packages/f6/74/86a07f1d0f42998ca31312f998bd3b9a7eff7f52378f4f270c8679c77fb9/nvidia_nvjitlink_cu12-12.8.93-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl", hash = "sha256:81ff63371a7ebd6e6451970684f916be2eab07321b73c9d244dc2b4da7f73b88", size = 39254836, upload-time = "2025-03-07T01:49:55.661Z" }, ] [[package]] -name = "nvidia-cusparselt-cu13" -version = "0.8.0" +name = "nvidia-nvtx-cu12" +version = "12.8.90" source = { registry = "https://pypi.org/simple" } wheels = [ - { url = "https://files.pythonhosted.org/packages/46/10/8dcd1175260706a2fc92a16a52e306b71d4c1ea0b0cc4a9484183399818a/nvidia_cusparselt_cu13-0.8.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:400c6ed1cf6780fc6efedd64ec9f1345871767e6a1a0a552a1ea0578117ea77c", size = 220791277, upload-time = "2025-08-13T19:22:40.982Z" }, - { url = "https://files.pythonhosted.org/packages/fd/53/43b0d71f4e702fa9733f8b4571fdca50a8813f1e450b656c239beff12315/nvidia_cusparselt_cu13-0.8.0-py3-none-manylinux2014_x86_64.whl", hash = "sha256:25e30a8a7323935d4ad0340b95a0b69926eee755767e8e0b1cf8dd85b197d3fd", size = 169884119, upload-time = "2025-08-13T19:23:41.967Z" }, + { url = "https://files.pythonhosted.org/packages/a2/eb/86626c1bbc2edb86323022371c39aa48df6fd8b0a1647bc274577f72e90b/nvidia_nvtx_cu12-12.8.90-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:5b17e2001cc0d751a5bc2c6ec6d26ad95913324a4adb86788c944f8ce9ba441f", size = 89954, upload-time = "2025-03-07T01:42:44.131Z" }, ] [[package]] -name = "nvidia-nccl-cu13" -version = "2.28.9" +name = "oauthlib" +version = "3.3.1" source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/0b/5f/19930f824ffeb0ad4372da4812c50edbd1434f678c90c2733e1188edfc63/oauthlib-3.3.1.tar.gz", hash = "sha256:0f0f8aa759826a193cf66c12ea1af1637f87b9b4622d46e866952bb022e538c9", size = 185918, upload-time = "2025-06-19T22:48:08.269Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/39/55/1920646a2e43ffd4fc958536b276197ed740e9e0c54105b4bb3521591fc7/nvidia_nccl_cu13-2.28.9-py3-none-manylinux_2_18_aarch64.whl", hash = "sha256:01c873ba1626b54caa12272ed228dc5b2781545e0ae8ba3f432a8ef1c6d78643", size = 196561677, upload-time = "2025-11-18T05:49:03.45Z" }, - { url = "https://files.pythonhosted.org/packages/b0/b4/878fefaad5b2bcc6fcf8d474a25e3e3774bc5133e4b58adff4d0bca238bc/nvidia_nccl_cu13-2.28.9-py3-none-manylinux_2_18_x86_64.whl", hash = "sha256:e4553a30f34195f3fa1da02a6da3d6337d28f2003943aa0a3d247bbc25fefc42", size = 196493177, upload-time = "2025-11-18T05:49:17.677Z" }, + { url = "https://files.pythonhosted.org/packages/be/9c/92789c596b8df838baa98fa71844d84283302f7604ed565dafe5a6b5041a/oauthlib-3.3.1-py3-none-any.whl", hash = "sha256:88119c938d2b8fb88561af5f6ee0eec8cc8d552b7bb1f712743136eb7523b7a1", size = 160065, upload-time = "2025-06-19T22:48:06.508Z" }, ] [[package]] -name = "nvidia-nvjitlink" -version = "13.0.88" +name = "oci" +version = "2.170.0" source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "circuitbreaker", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "cryptography", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "pyopenssl", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "python-dateutil", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "pytz", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "urllib3", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/39/9a/6cc66cf3012e8f7e699d88f09ce9b2364afce8bcbc9fb7473a8aa9225e15/oci-2.170.0.tar.gz", hash = "sha256:1e205a395e856b6514501d34595dd1e8e261415aaaab2c97f77fd2fc9618dcc3", size = 17014345, upload-time = "2026-04-07T07:38:00.103Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/56/7a/123e033aaff487c77107195fa5a2b8686795ca537935a24efae476c41f05/nvidia_nvjitlink-13.0.88-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl", hash = "sha256:13a74f429e23b921c1109976abefacc69835f2f433ebd323d3946e11d804e47b", size = 40713933, upload-time = "2025-09-04T08:35:43.553Z" }, - { url = "https://files.pythonhosted.org/packages/ab/2c/93c5250e64df4f894f1cbb397c6fd71f79813f9fd79d7cd61de3f97b3c2d/nvidia_nvjitlink-13.0.88-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:e931536ccc7d467a98ba1d8b89ff7fa7f1fa3b13f2b0069118cd7f47bff07d0c", size = 38768748, upload-time = "2025-09-04T08:35:20.008Z" }, + { url = "https://files.pythonhosted.org/packages/a6/a1/bc99b0809c49c1cac99250446ddd4f3e5cab8442a256ceb9ee59ddedca0d/oci-2.170.0-py3-none-any.whl", hash = "sha256:49adf0ffaf754c07c43194d19d2e11f5e1b602a95bb365bb384d939ff365b1b4", size = 34700441, upload-time = "2026-04-07T07:37:52.151Z" }, ] [[package]] -name = "nvidia-nvshmem-cu13" -version = "3.4.5" +name = "ocifs" +version = "1.3.2" source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "fsspec", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "oci", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "requests", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/1c/3e/87cd3abb40114bf46cb7de4d75fc987851fae09f4568b08769e0708f3933/ocifs-1.3.2.tar.gz", hash = "sha256:5e8c28c5d654cbef3e2c6a11f3baa312b2caf922007db05e08c26d8299a952c7", size = 57344, upload-time = "2025-02-18T20:21:34.534Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/dc/0f/05cc9c720236dcd2db9c1ab97fff629e96821be2e63103569da0c9b72f19/nvidia_nvshmem_cu13-3.4.5-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:6dc2a197f38e5d0376ad52cd1a2a3617d3cdc150fd5966f4aee9bcebb1d68fe9", size = 60215947, upload-time = "2025-09-06T00:32:20.022Z" }, - { url = "https://files.pythonhosted.org/packages/3c/35/a9bf80a609e74e3b000fef598933235c908fcefcef9026042b8e6dfde2a9/nvidia_nvshmem_cu13-3.4.5-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:290f0a2ee94c9f3687a02502f3b9299a9f9fe826e6d0287ee18482e78d495b80", size = 60412546, upload-time = "2025-09-06T00:32:41.564Z" }, + { url = "https://files.pythonhosted.org/packages/f5/fb/f6a64b519ae6685fc60b0b54dc7aeae89c91394387f760f4efcdef814cb6/ocifs-1.3.2-py3-none-any.whl", hash = "sha256:2702cf1574f04f3b9405c7068a111af325409d9332cc010d2cd9e62f99262e62", size = 67797, upload-time = "2025-02-18T20:21:32.382Z" }, ] [[package]] -name = "nvidia-nvtx" -version = "13.0.85" +name = "openenv-core" +version = "0.1.0" source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "fastapi", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "requests", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "uvicorn", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/7f/18/74d2aedbf099a86de772364260827a12b4b4a56711db4caa3caa078588d7/openenv_core-0.1.0.tar.gz", hash = "sha256:3a4e8bf4f2f3b7eba1c3a212e6e2dc7d980b8350015ae6c250a3ce93000f1d7c", size = 26512, upload-time = "2025-10-21T20:00:24.29Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/c2/f3/d86c845465a2723ad7e1e5c36dcd75ddb82898b3f53be47ebd429fb2fa5d/nvidia_nvtx-13.0.85-py3-none-manylinux1_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:4936d1d6780fbe68db454f5e72a42ff64d1fd6397df9f363ae786930fd5c1cd4", size = 148047, upload-time = "2025-09-04T08:29:01.761Z" }, - { url = "https://files.pythonhosted.org/packages/a8/64/3708a90d1ebe202ffdeb7185f878a3c84d15c2b2c31858da2ce0583e2def/nvidia_nvtx-13.0.85-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:cb7780edb6b14107373c835bf8b72e7a178bac7367e23da7acb108f973f157a6", size = 148878, upload-time = "2025-09-04T08:28:53.627Z" }, + { url = "https://files.pythonhosted.org/packages/3a/48/85afcd090eeaadf00e6f88ac92a866cb9238eaf6246820d1bc6564f5bc97/openenv_core-0.1.0-py3-none-any.whl", hash = "sha256:8d02513f26518f98ab1f35a875f7493d2983cf87f8b0e4b0af6634ec63edfd4b", size = 30607, upload-time = "2025-10-21T20:00:22.183Z" }, +] + +[[package]] +name = "optimum" +version = "1.16.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "coloredlogs", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "datasets", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "huggingface-hub", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "numpy", version = "2.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "packaging", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "sympy", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "torch", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "transformers", extra = ["sentencepiece"], marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/d1/4b/92b2308f4e7a2f355699e62e1779456ad0bff5e66a96b75bb628ca9e032a/optimum-1.16.2.tar.gz", hash = "sha256:0ac278c94b94888ea3b68f6a426c836900621d29db1d176587a584fd43600ba9", size = 309154, upload-time = "2024-01-19T15:46:53.144Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cc/a8/9b311809c51d5c9bc5a495edc6c8873c92db69cfecf69d4ec3c845e9804f/optimum-1.16.2-py3-none-any.whl", hash = "sha256:29ad8fe53b565646bb06d8779c398e0149d220570654acdf5e3790eb1aef790d", size = 402480, upload-time = "2024-01-19T15:46:49.984Z" }, +] + +[[package]] +name = "orjson" +version = "3.11.8" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/9d/1b/2024d06792d0779f9dbc51531b61c24f76c75b9f4ce05e6f3377a1814cea/orjson-3.11.8.tar.gz", hash = "sha256:96163d9cdc5a202703e9ad1b9ae757d5f0ca62f4fa0cc93d1f27b0e180cc404e", size = 5603832, upload-time = "2026-03-31T16:16:27.878Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/27/d2/1f8682ae50d5c6897a563cb96bc106da8c9cb5b7b6e81a52e4cc086679b9/orjson-3.11.8-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76070a76e9c5ae661e2d9848f216980d8d533e0f8143e6ed462807b242e3c5e8", size = 131946, upload-time = "2026-03-31T16:15:15.607Z" }, + { url = "https://files.pythonhosted.org/packages/52/4b/5500f76f0eece84226e0689cb48dcde081104c2fa6e2483d17ca13685ffb/orjson-3.11.8-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:54153d21520a71a4c82a0dbb4523e468941d549d221dc173de0f019678cf3813", size = 130368, upload-time = "2026-03-31T16:15:17.066Z" }, + { url = "https://files.pythonhosted.org/packages/da/4e/58b927e08fbe9840e6c920d9e299b051ea667463b1f39a56e668669f8508/orjson-3.11.8-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:469ac2125611b7c5741a0b3798cd9e5786cbad6345f9f400c77212be89563bec", size = 135540, upload-time = "2026-03-31T16:15:18.404Z" }, + { url = "https://files.pythonhosted.org/packages/56/7c/ba7cb871cba1bcd5cd02ee34f98d894c6cea96353ad87466e5aef2429c60/orjson-3.11.8-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:14778ffd0f6896aa613951a7fbf4690229aa7a543cb2bfbe9f358e08aafa9546", size = 146877, upload-time = "2026-03-31T16:15:19.833Z" }, + { url = "https://files.pythonhosted.org/packages/0b/5d/eb9c25fc1386696c6a342cd361c306452c75e0b55e86ad602dd4827a7fd7/orjson-3.11.8-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ea56a955056a6d6c550cf18b3348656a9d9a4f02e2d0c02cabf3c73f1055d506", size = 132837, upload-time = "2026-03-31T16:15:21.282Z" }, + { url = "https://files.pythonhosted.org/packages/37/87/5ddeb7fc1fbd9004aeccab08426f34c81a5b4c25c7061281862b015fce2b/orjson-3.11.8-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:53a0f57e59a530d18a142f4d4ba6dfc708dc5fdedce45e98ff06b44930a2a48f", size = 133624, upload-time = "2026-03-31T16:15:22.641Z" }, + { url = "https://files.pythonhosted.org/packages/22/09/90048793db94ee4b2fcec4ac8e5ddb077367637d6650be896b3494b79bb7/orjson-3.11.8-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:9b48e274f8824567d74e2158199e269597edf00823a1b12b63d48462bbf5123e", size = 141904, upload-time = "2026-03-31T16:15:24.435Z" }, + { url = "https://files.pythonhosted.org/packages/c0/cf/eb284847487821a5d415e54149a6449ba9bfc5872ce63ab7be41b8ec401c/orjson-3.11.8-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:3f262401086a3960586af06c054609365e98407151f5ea24a62893a40d80dbbb", size = 423742, upload-time = "2026-03-31T16:15:26.155Z" }, + { url = "https://files.pythonhosted.org/packages/44/09/e12423d327071c851c13e76936f144a96adacfc037394dec35ac3fc8d1e8/orjson-3.11.8-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:8e8c6218b614badf8e229b697865df4301afa74b791b6c9ade01d19a9953a942", size = 147806, upload-time = "2026-03-31T16:15:27.909Z" }, + { url = "https://files.pythonhosted.org/packages/b3/6d/37c2589ba864e582ffe7611643314785c6afb1f83c701654ef05daa8fcc7/orjson-3.11.8-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:093d489fa039ddade2db541097dbb484999fcc65fc2b0ff9819141e2ab364f25", size = 136485, upload-time = "2026-03-31T16:15:29.749Z" }, + { url = "https://files.pythonhosted.org/packages/42/3d/27d65b6d11e63f133781425f132807aef793ed25075fec686fc8e46dd528/orjson-3.11.8-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:97c8f5d3b62380b70c36ffacb2a356b7c6becec86099b177f73851ba095ef623", size = 131877, upload-time = "2026-03-31T16:15:39.484Z" }, + { url = "https://files.pythonhosted.org/packages/dd/cc/faee30cd8f00421999e40ef0eba7332e3a625ce91a58200a2f52c7fef235/orjson-3.11.8-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:436c4922968a619fb7fef1ccd4b8b3a76c13b67d607073914d675026e911a65c", size = 130361, upload-time = "2026-03-31T16:15:41.274Z" }, + { url = "https://files.pythonhosted.org/packages/5c/bb/a6c55896197f97b6d4b4e7c7fd77e7235517c34f5d6ad5aadd43c54c6d7c/orjson-3.11.8-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1ab359aff0436d80bfe8a23b46b5fea69f1e18aaf1760a709b4787f1318b317f", size = 135521, upload-time = "2026-03-31T16:15:42.758Z" }, + { url = "https://files.pythonhosted.org/packages/9c/7c/ca3a3525aa32ff636ebb1778e77e3587b016ab2edb1b618b36ba96f8f2c0/orjson-3.11.8-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f89b6d0b3a8d81e1929d3ab3d92bbc225688bd80a770c49432543928fe09ac55", size = 146862, upload-time = "2026-03-31T16:15:44.341Z" }, + { url = "https://files.pythonhosted.org/packages/3c/0c/18a9d7f18b5edd37344d1fd5be17e94dc652c67826ab749c6e5948a78112/orjson-3.11.8-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:29c009e7a2ca9ad0ed1376ce20dd692146a5d9fe4310848904b6b4fee5c5c137", size = 132847, upload-time = "2026-03-31T16:15:46.368Z" }, + { url = "https://files.pythonhosted.org/packages/23/91/7e722f352ad67ca573cee44de2a58fb810d0f4eb4e33276c6a557979fd8a/orjson-3.11.8-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:705b895b781b3e395c067129d8551655642dfe9437273211d5404e87ac752b53", size = 133637, upload-time = "2026-03-31T16:15:48.123Z" }, + { url = "https://files.pythonhosted.org/packages/af/04/32845ce13ac5bd1046ddb02ac9432ba856cc35f6d74dde95864fe0ad5523/orjson-3.11.8-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:88006eda83858a9fdf73985ce3804e885c2befb2f506c9a3723cdeb5a2880e3e", size = 141906, upload-time = "2026-03-31T16:15:49.626Z" }, + { url = "https://files.pythonhosted.org/packages/02/5e/c551387ddf2d7106d9039369862245c85738b828844d13b99ccb8d61fd06/orjson-3.11.8-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:55120759e61309af7fcf9e961c6f6af3dde5921cdb3ee863ef63fd9db126cae6", size = 423722, upload-time = "2026-03-31T16:15:51.176Z" }, + { url = "https://files.pythonhosted.org/packages/00/a3/ecfe62434096f8a794d4976728cb59bcfc4a643977f21c2040545d37eb4c/orjson-3.11.8-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:98bdc6cb889d19bed01de46e67574a2eab61f5cc6b768ed50e8ac68e9d6ffab6", size = 147801, upload-time = "2026-03-31T16:15:52.939Z" }, + { url = "https://files.pythonhosted.org/packages/18/6d/0dce10b9f6643fdc59d99333871a38fa5a769d8e2fc34a18e5d2bfdee900/orjson-3.11.8-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:708c95f925a43ab9f34625e45dcdadf09ec8a6e7b664a938f2f8d5650f6c090b", size = 136460, upload-time = "2026-03-31T16:15:54.431Z" }, ] [[package]] @@ -2213,54 +3150,37 @@ wheels = [ [[package]] name = "pandas" -version = "3.0.0" +version = "2.3.3" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "numpy" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.13'" }, + { name = "numpy", version = "2.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.13'" }, { name = "python-dateutil" }, - { name = "tzdata", marker = "sys_platform == 'emscripten' or sys_platform == 'win32'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/de/da/b1dc0481ab8d55d0f46e343cfe67d4551a0e14fcee52bd38ca1bd73258d8/pandas-3.0.0.tar.gz", hash = "sha256:0facf7e87d38f721f0af46fe70d97373a37701b1c09f7ed7aeeb292ade5c050f", size = 4633005, upload-time = "2026-01-21T15:52:04.726Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/0b/38/db33686f4b5fa64d7af40d96361f6a4615b8c6c8f1b3d334eee46ae6160e/pandas-3.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:9803b31f5039b3c3b10cc858c5e40054adb4b29b4d81cb2fd789f4121c8efbcd", size = 10334013, upload-time = "2026-01-21T15:50:34.771Z" }, - { url = "https://files.pythonhosted.org/packages/a5/7b/9254310594e9774906bacdd4e732415e1f86ab7dbb4b377ef9ede58cd8ec/pandas-3.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:14c2a4099cd38a1d18ff108168ea417909b2dea3bd1ebff2ccf28ddb6a74d740", size = 9874154, upload-time = "2026-01-21T15:50:36.67Z" }, - { url = "https://files.pythonhosted.org/packages/63/d4/726c5a67a13bc66643e66d2e9ff115cead482a44fc56991d0c4014f15aaf/pandas-3.0.0-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d257699b9a9960e6125686098d5714ac59d05222bef7a5e6af7a7fd87c650801", size = 10384433, upload-time = "2026-01-21T15:50:39.132Z" }, - { url = "https://files.pythonhosted.org/packages/bf/2e/9211f09bedb04f9832122942de8b051804b31a39cfbad199a819bb88d9f3/pandas-3.0.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:69780c98f286076dcafca38d8b8eee1676adf220199c0a39f0ecbf976b68151a", size = 10864519, upload-time = "2026-01-21T15:50:41.043Z" }, - { url = "https://files.pythonhosted.org/packages/00/8d/50858522cdc46ac88b9afdc3015e298959a70a08cd21e008a44e9520180c/pandas-3.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:4a66384f017240f3858a4c8a7cf21b0591c3ac885cddb7758a589f0f71e87ebb", size = 11394124, upload-time = "2026-01-21T15:50:43.377Z" }, - { url = "https://files.pythonhosted.org/packages/86/3f/83b2577db02503cd93d8e95b0f794ad9d4be0ba7cb6c8bcdcac964a34a42/pandas-3.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:be8c515c9bc33989d97b89db66ea0cececb0f6e3c2a87fcc8b69443a6923e95f", size = 11920444, upload-time = "2026-01-21T15:50:45.932Z" }, - { url = "https://files.pythonhosted.org/packages/64/2d/4f8a2f192ed12c90a0aab47f5557ece0e56b0370c49de9454a09de7381b2/pandas-3.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:a453aad8c4f4e9f166436994a33884442ea62aa8b27d007311e87521b97246e1", size = 9730970, upload-time = "2026-01-21T15:50:47.962Z" }, - { url = "https://files.pythonhosted.org/packages/d4/64/ff571be435cf1e643ca98d0945d76732c0b4e9c37191a89c8550b105eed1/pandas-3.0.0-cp312-cp312-win_arm64.whl", hash = "sha256:da768007b5a33057f6d9053563d6b74dd6d029c337d93c6d0d22a763a5c2ecc0", size = 9041950, upload-time = "2026-01-21T15:50:50.422Z" }, - { url = "https://files.pythonhosted.org/packages/6f/fa/7f0ac4ca8877c57537aaff2a842f8760e630d8e824b730eb2e859ffe96ca/pandas-3.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:b78d646249b9a2bc191040988c7bb524c92fa8534fb0898a0741d7e6f2ffafa6", size = 10307129, upload-time = "2026-01-21T15:50:52.877Z" }, - { url = "https://files.pythonhosted.org/packages/6f/11/28a221815dcea4c0c9414dfc845e34a84a6a7dabc6da3194498ed5ba4361/pandas-3.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:bc9cba7b355cb4162442a88ce495e01cb605f17ac1e27d6596ac963504e0305f", size = 9850201, upload-time = "2026-01-21T15:50:54.807Z" }, - { url = "https://files.pythonhosted.org/packages/ba/da/53bbc8c5363b7e5bd10f9ae59ab250fc7a382ea6ba08e4d06d8694370354/pandas-3.0.0-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3c9a1a149aed3b6c9bf246033ff91e1b02d529546c5d6fb6b74a28fea0cf4c70", size = 10354031, upload-time = "2026-01-21T15:50:57.463Z" }, - { url = "https://files.pythonhosted.org/packages/f7/a3/51e02ebc2a14974170d51e2410dfdab58870ea9bcd37cda15bd553d24dc4/pandas-3.0.0-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:95683af6175d884ee89471842acfca29172a85031fccdabc35e50c0984470a0e", size = 10861165, upload-time = "2026-01-21T15:50:59.32Z" }, - { url = "https://files.pythonhosted.org/packages/a5/fe/05a51e3cac11d161472b8297bd41723ea98013384dd6d76d115ce3482f9b/pandas-3.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:1fbbb5a7288719e36b76b4f18d46ede46e7f916b6c8d9915b756b0a6c3f792b3", size = 11359359, upload-time = "2026-01-21T15:51:02.014Z" }, - { url = "https://files.pythonhosted.org/packages/ee/56/ba620583225f9b85a4d3e69c01df3e3870659cc525f67929b60e9f21dcd1/pandas-3.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8e8b9808590fa364416b49b2a35c1f4cf2785a6c156935879e57f826df22038e", size = 11912907, upload-time = "2026-01-21T15:51:05.175Z" }, - { url = "https://files.pythonhosted.org/packages/c9/8c/c6638d9f67e45e07656b3826405c5cc5f57f6fd07c8b2572ade328c86e22/pandas-3.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:98212a38a709feb90ae658cb6227ea3657c22ba8157d4b8f913cd4c950de5e7e", size = 9732138, upload-time = "2026-01-21T15:51:07.569Z" }, - { url = "https://files.pythonhosted.org/packages/7b/bf/bd1335c3bf1770b6d8fed2799993b11c4971af93bb1b729b9ebbc02ca2ec/pandas-3.0.0-cp313-cp313-win_arm64.whl", hash = "sha256:177d9df10b3f43b70307a149d7ec49a1229a653f907aa60a48f1877d0e6be3be", size = 9033568, upload-time = "2026-01-21T15:51:09.484Z" }, - { url = "https://files.pythonhosted.org/packages/8e/c6/f5e2171914d5e29b9171d495344097d54e3ffe41d2d85d8115baba4dc483/pandas-3.0.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:2713810ad3806767b89ad3b7b69ba153e1c6ff6d9c20f9c2140379b2a98b6c98", size = 10741936, upload-time = "2026-01-21T15:51:11.693Z" }, - { url = "https://files.pythonhosted.org/packages/51/88/9a0164f99510a1acb9f548691f022c756c2314aad0d8330a24616c14c462/pandas-3.0.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:15d59f885ee5011daf8335dff47dcb8a912a27b4ad7826dc6cbe809fd145d327", size = 10393884, upload-time = "2026-01-21T15:51:14.197Z" }, - { url = "https://files.pythonhosted.org/packages/e0/53/b34d78084d88d8ae2b848591229da8826d1e65aacf00b3abe34023467648/pandas-3.0.0-cp313-cp313t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:24e6547fb64d2c92665dd2adbfa4e85fa4fd70a9c070e7cfb03b629a0bbab5eb", size = 10310740, upload-time = "2026-01-21T15:51:16.093Z" }, - { url = "https://files.pythonhosted.org/packages/5b/d3/bee792e7c3d6930b74468d990604325701412e55d7aaf47460a22311d1a5/pandas-3.0.0-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:48ee04b90e2505c693d3f8e8f524dab8cb8aaf7ddcab52c92afa535e717c4812", size = 10700014, upload-time = "2026-01-21T15:51:18.818Z" }, - { url = "https://files.pythonhosted.org/packages/55/db/2570bc40fb13aaed1cbc3fbd725c3a60ee162477982123c3adc8971e7ac1/pandas-3.0.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:66f72fb172959af42a459e27a8d8d2c7e311ff4c1f7db6deb3b643dbc382ae08", size = 11323737, upload-time = "2026-01-21T15:51:20.784Z" }, - { url = "https://files.pythonhosted.org/packages/bc/2e/297ac7f21c8181b62a4cccebad0a70caf679adf3ae5e83cb676194c8acc3/pandas-3.0.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:4a4a400ca18230976724a5066f20878af785f36c6756e498e94c2a5e5d57779c", size = 11771558, upload-time = "2026-01-21T15:51:22.977Z" }, - { url = "https://files.pythonhosted.org/packages/0a/46/e1c6876d71c14332be70239acce9ad435975a80541086e5ffba2f249bcf6/pandas-3.0.0-cp313-cp313t-win_amd64.whl", hash = "sha256:940eebffe55528074341a5a36515f3e4c5e25e958ebbc764c9502cfc35ba3faa", size = 10473771, upload-time = "2026-01-21T15:51:25.285Z" }, - { url = "https://files.pythonhosted.org/packages/c0/db/0270ad9d13c344b7a36fa77f5f8344a46501abf413803e885d22864d10bf/pandas-3.0.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:597c08fb9fef0edf1e4fa2f9828dd27f3d78f9b8c9b4a748d435ffc55732310b", size = 10312075, upload-time = "2026-01-21T15:51:28.5Z" }, - { url = "https://files.pythonhosted.org/packages/09/9f/c176f5e9717f7c91becfe0f55a52ae445d3f7326b4a2cf355978c51b7913/pandas-3.0.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:447b2d68ac5edcbf94655fe909113a6dba6ef09ad7f9f60c80477825b6c489fe", size = 9900213, upload-time = "2026-01-21T15:51:30.955Z" }, - { url = "https://files.pythonhosted.org/packages/d9/e7/63ad4cc10b257b143e0a5ebb04304ad806b4e1a61c5da25f55896d2ca0f4/pandas-3.0.0-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:debb95c77ff3ed3ba0d9aa20c3a2f19165cc7956362f9873fce1ba0a53819d70", size = 10428768, upload-time = "2026-01-21T15:51:33.018Z" }, - { url = "https://files.pythonhosted.org/packages/9e/0e/4e4c2d8210f20149fd2248ef3fff26623604922bd564d915f935a06dd63d/pandas-3.0.0-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fedabf175e7cd82b69b74c30adbaa616de301291a5231138d7242596fc296a8d", size = 10882954, upload-time = "2026-01-21T15:51:35.287Z" }, - { url = "https://files.pythonhosted.org/packages/c6/60/c9de8ac906ba1f4d2250f8a951abe5135b404227a55858a75ad26f84db47/pandas-3.0.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:412d1a89aab46889f3033a386912efcdfa0f1131c5705ff5b668dda88305e986", size = 11430293, upload-time = "2026-01-21T15:51:37.57Z" }, - { url = "https://files.pythonhosted.org/packages/a1/69/806e6637c70920e5787a6d6896fd707f8134c2c55cd761e7249a97b7dc5a/pandas-3.0.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:e979d22316f9350c516479dd3a92252be2937a9531ed3a26ec324198a99cdd49", size = 11952452, upload-time = "2026-01-21T15:51:39.618Z" }, - { url = "https://files.pythonhosted.org/packages/cb/de/918621e46af55164c400ab0ef389c9d969ab85a43d59ad1207d4ddbe30a5/pandas-3.0.0-cp314-cp314-win_amd64.whl", hash = "sha256:083b11415b9970b6e7888800c43c82e81a06cd6b06755d84804444f0007d6bb7", size = 9851081, upload-time = "2026-01-21T15:51:41.758Z" }, - { url = "https://files.pythonhosted.org/packages/91/a1/3562a18dd0bd8c73344bfa26ff90c53c72f827df119d6d6b1dacc84d13e3/pandas-3.0.0-cp314-cp314-win_arm64.whl", hash = "sha256:5db1e62cb99e739fa78a28047e861b256d17f88463c76b8dafc7c1338086dca8", size = 9174610, upload-time = "2026-01-21T15:51:44.312Z" }, - { url = "https://files.pythonhosted.org/packages/ce/26/430d91257eaf366f1737d7a1c158677caaf6267f338ec74e3a1ec444111c/pandas-3.0.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:697b8f7d346c68274b1b93a170a70974cdc7d7354429894d5927c1effdcccd73", size = 10761999, upload-time = "2026-01-21T15:51:46.899Z" }, - { url = "https://files.pythonhosted.org/packages/ec/1a/954eb47736c2b7f7fe6a9d56b0cb6987773c00faa3c6451a43db4beb3254/pandas-3.0.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:8cb3120f0d9467ed95e77f67a75e030b67545bcfa08964e349252d674171def2", size = 10410279, upload-time = "2026-01-21T15:51:48.89Z" }, - { url = "https://files.pythonhosted.org/packages/20/fc/b96f3a5a28b250cd1b366eb0108df2501c0f38314a00847242abab71bb3a/pandas-3.0.0-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:33fd3e6baa72899746b820c31e4b9688c8e1b7864d7aec2de7ab5035c285277a", size = 10330198, upload-time = "2026-01-21T15:51:51.015Z" }, - { url = "https://files.pythonhosted.org/packages/90/b3/d0e2952f103b4fbef1ef22d0c2e314e74fc9064b51cee30890b5e3286ee6/pandas-3.0.0-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a8942e333dc67ceda1095227ad0febb05a3b36535e520154085db632c40ad084", size = 10728513, upload-time = "2026-01-21T15:51:53.387Z" }, - { url = "https://files.pythonhosted.org/packages/76/81/832894f286df828993dc5fd61c63b231b0fb73377e99f6c6c369174cf97e/pandas-3.0.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:783ac35c4d0fe0effdb0d67161859078618b1b6587a1af15928137525217a721", size = 11345550, upload-time = "2026-01-21T15:51:55.329Z" }, - { url = "https://files.pythonhosted.org/packages/34/a0/ed160a00fb4f37d806406bc0a79a8b62fe67f29d00950f8d16203ff3409b/pandas-3.0.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:125eb901e233f155b268bbef9abd9afb5819db74f0e677e89a61b246228c71ac", size = 11799386, upload-time = "2026-01-21T15:51:57.457Z" }, - { url = "https://files.pythonhosted.org/packages/36/c8/2ac00d7255252c5e3cf61b35ca92ca25704b0188f7454ca4aec08a33cece/pandas-3.0.0-cp314-cp314t-win_amd64.whl", hash = "sha256:b86d113b6c109df3ce0ad5abbc259fe86a1bd4adfd4a31a89da42f84f65509bb", size = 10873041, upload-time = "2026-01-21T15:52:00.034Z" }, - { url = "https://files.pythonhosted.org/packages/e6/3f/a80ac00acbc6b35166b42850e98a4f466e2c0d9c64054161ba9620f95680/pandas-3.0.0-cp314-cp314t-win_arm64.whl", hash = "sha256:1c39eab3ad38f2d7a249095f0a3d8f8c22cc0f847e98ccf5bbe732b272e2d9fa", size = 9441003, upload-time = "2026-01-21T15:52:02.281Z" }, + { name = "pytz" }, + { name = "tzdata" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/33/01/d40b85317f86cf08d853a4f495195c73815fdf205eef3993821720274518/pandas-2.3.3.tar.gz", hash = "sha256:e05e1af93b977f7eafa636d043f9f94c7ee3ac81af99c13508215942e64c993b", size = 4495223, upload-time = "2025-09-29T23:34:51.853Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9c/fb/231d89e8637c808b997d172b18e9d4a4bc7bf31296196c260526055d1ea0/pandas-2.3.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6d21f6d74eb1725c2efaa71a2bfc661a0689579b58e9c0ca58a739ff0b002b53", size = 11597846, upload-time = "2025-09-29T23:19:48.856Z" }, + { url = "https://files.pythonhosted.org/packages/5c/bd/bf8064d9cfa214294356c2d6702b716d3cf3bb24be59287a6a21e24cae6b/pandas-2.3.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3fd2f887589c7aa868e02632612ba39acb0b8948faf5cc58f0850e165bd46f35", size = 10729618, upload-time = "2025-09-29T23:39:08.659Z" }, + { url = "https://files.pythonhosted.org/packages/57/56/cf2dbe1a3f5271370669475ead12ce77c61726ffd19a35546e31aa8edf4e/pandas-2.3.3-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ecaf1e12bdc03c86ad4a7ea848d66c685cb6851d807a26aa245ca3d2017a1908", size = 11737212, upload-time = "2025-09-29T23:19:59.765Z" }, + { url = "https://files.pythonhosted.org/packages/e5/63/cd7d615331b328e287d8233ba9fdf191a9c2d11b6af0c7a59cfcec23de68/pandas-2.3.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b3d11d2fda7eb164ef27ffc14b4fcab16a80e1ce67e9f57e19ec0afaf715ba89", size = 12362693, upload-time = "2025-09-29T23:20:14.098Z" }, + { url = "https://files.pythonhosted.org/packages/a6/de/8b1895b107277d52f2b42d3a6806e69cfef0d5cf1d0ba343470b9d8e0a04/pandas-2.3.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a68e15f780eddf2b07d242e17a04aa187a7ee12b40b930bfdd78070556550e98", size = 12771002, upload-time = "2025-09-29T23:20:26.76Z" }, + { url = "https://files.pythonhosted.org/packages/87/21/84072af3187a677c5893b170ba2c8fbe450a6ff911234916da889b698220/pandas-2.3.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:371a4ab48e950033bcf52b6527eccb564f52dc826c02afd9a1bc0ab731bba084", size = 13450971, upload-time = "2025-09-29T23:20:41.344Z" }, + { url = "https://files.pythonhosted.org/packages/86/41/585a168330ff063014880a80d744219dbf1dd7a1c706e75ab3425a987384/pandas-2.3.3-cp312-cp312-win_amd64.whl", hash = "sha256:a16dcec078a01eeef8ee61bf64074b4e524a2a3f4b3be9326420cabe59c4778b", size = 10992722, upload-time = "2025-09-29T23:20:54.139Z" }, + { url = "https://files.pythonhosted.org/packages/cd/4b/18b035ee18f97c1040d94debd8f2e737000ad70ccc8f5513f4eefad75f4b/pandas-2.3.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:56851a737e3470de7fa88e6131f41281ed440d29a9268dcbf0002da5ac366713", size = 11544671, upload-time = "2025-09-29T23:21:05.024Z" }, + { url = "https://files.pythonhosted.org/packages/31/94/72fac03573102779920099bcac1c3b05975c2cb5f01eac609faf34bed1ca/pandas-2.3.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:bdcd9d1167f4885211e401b3036c0c8d9e274eee67ea8d0758a256d60704cfe8", size = 10680807, upload-time = "2025-09-29T23:21:15.979Z" }, + { url = "https://files.pythonhosted.org/packages/16/87/9472cf4a487d848476865321de18cc8c920b8cab98453ab79dbbc98db63a/pandas-2.3.3-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e32e7cc9af0f1cc15548288a51a3b681cc2a219faa838e995f7dc53dbab1062d", size = 11709872, upload-time = "2025-09-29T23:21:27.165Z" }, + { url = "https://files.pythonhosted.org/packages/15/07/284f757f63f8a8d69ed4472bfd85122bd086e637bf4ed09de572d575a693/pandas-2.3.3-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:318d77e0e42a628c04dc56bcef4b40de67918f7041c2b061af1da41dcff670ac", size = 12306371, upload-time = "2025-09-29T23:21:40.532Z" }, + { url = "https://files.pythonhosted.org/packages/33/81/a3afc88fca4aa925804a27d2676d22dcd2031c2ebe08aabd0ae55b9ff282/pandas-2.3.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4e0a175408804d566144e170d0476b15d78458795bb18f1304fb94160cabf40c", size = 12765333, upload-time = "2025-09-29T23:21:55.77Z" }, + { url = "https://files.pythonhosted.org/packages/8d/0f/b4d4ae743a83742f1153464cf1a8ecfafc3ac59722a0b5c8602310cb7158/pandas-2.3.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:93c2d9ab0fc11822b5eece72ec9587e172f63cff87c00b062f6e37448ced4493", size = 13418120, upload-time = "2025-09-29T23:22:10.109Z" }, + { url = "https://files.pythonhosted.org/packages/4f/c7/e54682c96a895d0c808453269e0b5928a07a127a15704fedb643e9b0a4c8/pandas-2.3.3-cp313-cp313-win_amd64.whl", hash = "sha256:f8bfc0e12dc78f777f323f55c58649591b2cd0c43534e8355c51d3fede5f4dee", size = 10993991, upload-time = "2025-09-29T23:25:04.889Z" }, + { url = "https://files.pythonhosted.org/packages/f9/ca/3f8d4f49740799189e1395812f3bf23b5e8fc7c190827d55a610da72ce55/pandas-2.3.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:75ea25f9529fdec2d2e93a42c523962261e567d250b0013b16210e1d40d7c2e5", size = 12048227, upload-time = "2025-09-29T23:22:24.343Z" }, + { url = "https://files.pythonhosted.org/packages/0e/5a/f43efec3e8c0cc92c4663ccad372dbdff72b60bdb56b2749f04aa1d07d7e/pandas-2.3.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:74ecdf1d301e812db96a465a525952f4dde225fdb6d8e5a521d47e1f42041e21", size = 11411056, upload-time = "2025-09-29T23:22:37.762Z" }, + { url = "https://files.pythonhosted.org/packages/46/b1/85331edfc591208c9d1a63a06baa67b21d332e63b7a591a5ba42a10bb507/pandas-2.3.3-cp313-cp313t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6435cb949cb34ec11cc9860246ccb2fdc9ecd742c12d3304989017d53f039a78", size = 11645189, upload-time = "2025-09-29T23:22:51.688Z" }, + { url = "https://files.pythonhosted.org/packages/44/23/78d645adc35d94d1ac4f2a3c4112ab6f5b8999f4898b8cdf01252f8df4a9/pandas-2.3.3-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:900f47d8f20860de523a1ac881c4c36d65efcb2eb850e6948140fa781736e110", size = 12121912, upload-time = "2025-09-29T23:23:05.042Z" }, + { url = "https://files.pythonhosted.org/packages/53/da/d10013df5e6aaef6b425aa0c32e1fc1f3e431e4bcabd420517dceadce354/pandas-2.3.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:a45c765238e2ed7d7c608fc5bc4a6f88b642f2f01e70c0c23d2224dd21829d86", size = 12712160, upload-time = "2025-09-29T23:23:28.57Z" }, + { url = "https://files.pythonhosted.org/packages/bd/17/e756653095a083d8a37cbd816cb87148debcfcd920129b25f99dd8d04271/pandas-2.3.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:c4fc4c21971a1a9f4bdb4c73978c7f7256caa3e62b323f70d6cb80db583350bc", size = 13199233, upload-time = "2025-09-29T23:24:24.876Z" }, ] [[package]] @@ -2290,6 +3210,37 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/ef/3c/2c197d226f9ea224a9ab8d197933f9da0ae0aac5b6e0f884e2b8d9c8e9f7/pathspec-1.0.4-py3-none-any.whl", hash = "sha256:fb6ae2fd4e7c921a165808a552060e722767cfa526f99ca5156ed2ce45a5c723", size = 55206, upload-time = "2026-01-27T03:59:45.137Z" }, ] +[[package]] +name = "pathvalidate" +version = "3.3.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/fa/2a/52a8da6fe965dea6192eb716b357558e103aea0a1e9a8352ad575a8406ca/pathvalidate-3.3.1.tar.gz", hash = "sha256:b18c07212bfead624345bb8e1d6141cdcf15a39736994ea0b94035ad2b1ba177", size = 63262, upload-time = "2025-06-15T09:07:20.736Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9a/70/875f4a23bfc4731703a5835487d0d2fb999031bd415e7d17c0ae615c18b7/pathvalidate-3.3.1-py3-none-any.whl", hash = "sha256:5263baab691f8e1af96092fa5137ee17df5bdfbd6cff1fcac4d6ef4bc2e1735f", size = 24305, upload-time = "2025-06-15T09:07:19.117Z" }, +] + +[[package]] +name = "peft" +version = "0.18.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "accelerate" }, + { name = "huggingface-hub" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.13'" }, + { name = "numpy", version = "2.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.13'" }, + { name = "packaging" }, + { name = "psutil" }, + { name = "pyyaml" }, + { name = "safetensors" }, + { name = "torch" }, + { name = "tqdm" }, + { name = "transformers" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/d8/48/147b3ea999560b40a34fd78724c7777aa9d18409c2250bdcaf9c4f2db7fc/peft-0.18.1.tar.gz", hash = "sha256:2dd0d6bfce936d1850e48aaddbd250941c5c02fc8ef3237cd8fd5aac35e0bae2", size = 635030, upload-time = "2026-01-09T13:08:01.136Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b3/14/b4e3f574acf349ae6f61f9c000a77f97a3b315b4bb6ad03791e79ae4a568/peft-0.18.1-py3-none-any.whl", hash = "sha256:0bf06847a3551e3019fc58c440cffc9a6b73e6e2962c95b52e224f77bbdb50f1", size = 556960, upload-time = "2026-01-09T13:07:55.865Z" }, +] + [[package]] name = "pexpect" version = "4.9.0" @@ -2304,71 +3255,46 @@ wheels = [ [[package]] name = "pillow" -version = "12.1.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/1f/42/5c74462b4fd957fcd7b13b04fb3205ff8349236ea74c7c375766d6c82288/pillow-12.1.1.tar.gz", hash = "sha256:9ad8fa5937ab05218e2b6a4cff30295ad35afd2f83ac592e68c0d871bb0fdbc4", size = 46980264, upload-time = "2026-02-11T04:23:07.146Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/07/d3/8df65da0d4df36b094351dce696f2989bec731d4f10e743b1c5f4da4d3bf/pillow-12.1.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:ab323b787d6e18b3d91a72fc99b1a2c28651e4358749842b8f8dfacd28ef2052", size = 5262803, upload-time = "2026-02-11T04:20:47.653Z" }, - { url = "https://files.pythonhosted.org/packages/d6/71/5026395b290ff404b836e636f51d7297e6c83beceaa87c592718747e670f/pillow-12.1.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:adebb5bee0f0af4909c30db0d890c773d1a92ffe83da908e2e9e720f8edf3984", size = 4657601, upload-time = "2026-02-11T04:20:49.328Z" }, - { url = "https://files.pythonhosted.org/packages/b1/2e/1001613d941c67442f745aff0f7cc66dd8df9a9c084eb497e6a543ee6f7e/pillow-12.1.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:bb66b7cc26f50977108790e2456b7921e773f23db5630261102233eb355a3b79", size = 6234995, upload-time = "2026-02-11T04:20:51.032Z" }, - { url = "https://files.pythonhosted.org/packages/07/26/246ab11455b2549b9233dbd44d358d033a2f780fa9007b61a913c5b2d24e/pillow-12.1.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:aee2810642b2898bb187ced9b349e95d2a7272930796e022efaf12e99dccd293", size = 8045012, upload-time = "2026-02-11T04:20:52.882Z" }, - { url = "https://files.pythonhosted.org/packages/b2/8b/07587069c27be7535ac1fe33874e32de118fbd34e2a73b7f83436a88368c/pillow-12.1.1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a0b1cd6232e2b618adcc54d9882e4e662a089d5768cd188f7c245b4c8c44a397", size = 6349638, upload-time = "2026-02-11T04:20:54.444Z" }, - { url = "https://files.pythonhosted.org/packages/ff/79/6df7b2ee763d619cda2fb4fea498e5f79d984dae304d45a8999b80d6cf5c/pillow-12.1.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7aac39bcf8d4770d089588a2e1dd111cbaa42df5a94be3114222057d68336bd0", size = 7041540, upload-time = "2026-02-11T04:20:55.97Z" }, - { url = "https://files.pythonhosted.org/packages/2c/5e/2ba19e7e7236d7529f4d873bdaf317a318896bac289abebd4bb00ef247f0/pillow-12.1.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:ab174cd7d29a62dd139c44bf74b698039328f45cb03b4596c43473a46656b2f3", size = 6462613, upload-time = "2026-02-11T04:20:57.542Z" }, - { url = "https://files.pythonhosted.org/packages/03/03/31216ec124bb5c3dacd74ce8efff4cc7f52643653bad4825f8f08c697743/pillow-12.1.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:339ffdcb7cbeaa08221cd401d517d4b1fe7a9ed5d400e4a8039719238620ca35", size = 7166745, upload-time = "2026-02-11T04:20:59.196Z" }, - { url = "https://files.pythonhosted.org/packages/1f/e7/7c4552d80052337eb28653b617eafdef39adfb137c49dd7e831b8dc13bc5/pillow-12.1.1-cp312-cp312-win32.whl", hash = "sha256:5d1f9575a12bed9e9eedd9a4972834b08c97a352bd17955ccdebfeca5913fa0a", size = 6328823, upload-time = "2026-02-11T04:21:01.385Z" }, - { url = "https://files.pythonhosted.org/packages/3d/17/688626d192d7261bbbf98846fc98995726bddc2c945344b65bec3a29d731/pillow-12.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:21329ec8c96c6e979cd0dfd29406c40c1d52521a90544463057d2aaa937d66a6", size = 7033367, upload-time = "2026-02-11T04:21:03.536Z" }, - { url = "https://files.pythonhosted.org/packages/ed/fe/a0ef1f73f939b0eca03ee2c108d0043a87468664770612602c63266a43c4/pillow-12.1.1-cp312-cp312-win_arm64.whl", hash = "sha256:af9a332e572978f0218686636610555ae3defd1633597be015ed50289a03c523", size = 2453811, upload-time = "2026-02-11T04:21:05.116Z" }, - { url = "https://files.pythonhosted.org/packages/d5/11/6db24d4bd7685583caeae54b7009584e38da3c3d4488ed4cd25b439de486/pillow-12.1.1-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:d242e8ac078781f1de88bf823d70c1a9b3c7950a44cdf4b7c012e22ccbcd8e4e", size = 4062689, upload-time = "2026-02-11T04:21:06.804Z" }, - { url = "https://files.pythonhosted.org/packages/33/c0/ce6d3b1fe190f0021203e0d9b5b99e57843e345f15f9ef22fcd43842fd21/pillow-12.1.1-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:02f84dfad02693676692746df05b89cf25597560db2857363a208e393429f5e9", size = 4138535, upload-time = "2026-02-11T04:21:08.452Z" }, - { url = "https://files.pythonhosted.org/packages/a0/c6/d5eb6a4fb32a3f9c21a8c7613ec706534ea1cf9f4b3663e99f0d83f6fca8/pillow-12.1.1-cp313-cp313-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:e65498daf4b583091ccbb2556c7000abf0f3349fcd57ef7adc9a84a394ed29f6", size = 3601364, upload-time = "2026-02-11T04:21:10.194Z" }, - { url = "https://files.pythonhosted.org/packages/14/a1/16c4b823838ba4c9c52c0e6bbda903a3fe5a1bdbf1b8eb4fff7156f3e318/pillow-12.1.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:6c6db3b84c87d48d0088943bf33440e0c42370b99b1c2a7989216f7b42eede60", size = 5262561, upload-time = "2026-02-11T04:21:11.742Z" }, - { url = "https://files.pythonhosted.org/packages/bb/ad/ad9dc98ff24f485008aa5cdedaf1a219876f6f6c42a4626c08bc4e80b120/pillow-12.1.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:8b7e5304e34942bf62e15184219a7b5ad4ff7f3bb5cca4d984f37df1a0e1aee2", size = 4657460, upload-time = "2026-02-11T04:21:13.786Z" }, - { url = "https://files.pythonhosted.org/packages/9e/1b/f1a4ea9a895b5732152789326202a82464d5254759fbacae4deea3069334/pillow-12.1.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:18e5bddd742a44b7e6b1e773ab5db102bd7a94c32555ba656e76d319d19c3850", size = 6232698, upload-time = "2026-02-11T04:21:15.949Z" }, - { url = "https://files.pythonhosted.org/packages/95/f4/86f51b8745070daf21fd2e5b1fe0eb35d4db9ca26e6d58366562fb56a743/pillow-12.1.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:fc44ef1f3de4f45b50ccf9136999d71abb99dca7706bc75d222ed350b9fd2289", size = 8041706, upload-time = "2026-02-11T04:21:17.723Z" }, - { url = "https://files.pythonhosted.org/packages/29/9b/d6ecd956bb1266dd1045e995cce9b8d77759e740953a1c9aad9502a0461e/pillow-12.1.1-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5a8eb7ed8d4198bccbd07058416eeec51686b498e784eda166395a23eb99138e", size = 6346621, upload-time = "2026-02-11T04:21:19.547Z" }, - { url = "https://files.pythonhosted.org/packages/71/24/538bff45bde96535d7d998c6fed1a751c75ac7c53c37c90dc2601b243893/pillow-12.1.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:47b94983da0c642de92ced1702c5b6c292a84bd3a8e1d1702ff923f183594717", size = 7038069, upload-time = "2026-02-11T04:21:21.378Z" }, - { url = "https://files.pythonhosted.org/packages/94/0e/58cb1a6bc48f746bc4cb3adb8cabff73e2742c92b3bf7a220b7cf69b9177/pillow-12.1.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:518a48c2aab7ce596d3bf79d0e275661b846e86e4d0e7dec34712c30fe07f02a", size = 6460040, upload-time = "2026-02-11T04:21:23.148Z" }, - { url = "https://files.pythonhosted.org/packages/6c/57/9045cb3ff11eeb6c1adce3b2d60d7d299d7b273a2e6c8381a524abfdc474/pillow-12.1.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a550ae29b95c6dc13cf69e2c9dc5747f814c54eeb2e32d683e5e93af56caa029", size = 7164523, upload-time = "2026-02-11T04:21:25.01Z" }, - { url = "https://files.pythonhosted.org/packages/73/f2/9be9cb99f2175f0d4dbadd6616ce1bf068ee54a28277ea1bf1fbf729c250/pillow-12.1.1-cp313-cp313-win32.whl", hash = "sha256:a003d7422449f6d1e3a34e3dd4110c22148336918ddbfc6a32581cd54b2e0b2b", size = 6332552, upload-time = "2026-02-11T04:21:27.238Z" }, - { url = "https://files.pythonhosted.org/packages/3f/eb/b0834ad8b583d7d9d42b80becff092082a1c3c156bb582590fcc973f1c7c/pillow-12.1.1-cp313-cp313-win_amd64.whl", hash = "sha256:344cf1e3dab3be4b1fa08e449323d98a2a3f819ad20f4b22e77a0ede31f0faa1", size = 7040108, upload-time = "2026-02-11T04:21:29.462Z" }, - { url = "https://files.pythonhosted.org/packages/d5/7d/fc09634e2aabdd0feabaff4a32f4a7d97789223e7c2042fd805ea4b4d2c2/pillow-12.1.1-cp313-cp313-win_arm64.whl", hash = "sha256:5c0dd1636633e7e6a0afe7bf6a51a14992b7f8e60de5789018ebbdfae55b040a", size = 2453712, upload-time = "2026-02-11T04:21:31.072Z" }, - { url = "https://files.pythonhosted.org/packages/19/2a/b9d62794fc8a0dd14c1943df68347badbd5511103e0d04c035ffe5cf2255/pillow-12.1.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0330d233c1a0ead844fc097a7d16c0abff4c12e856c0b325f231820fee1f39da", size = 5264880, upload-time = "2026-02-11T04:21:32.865Z" }, - { url = "https://files.pythonhosted.org/packages/26/9d/e03d857d1347fa5ed9247e123fcd2a97b6220e15e9cb73ca0a8d91702c6e/pillow-12.1.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:5dae5f21afb91322f2ff791895ddd8889e5e947ff59f71b46041c8ce6db790bc", size = 4660616, upload-time = "2026-02-11T04:21:34.97Z" }, - { url = "https://files.pythonhosted.org/packages/f7/ec/8a6d22afd02570d30954e043f09c32772bfe143ba9285e2fdb11284952cd/pillow-12.1.1-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:2e0c664be47252947d870ac0d327fea7e63985a08794758aa8af5b6cb6ec0c9c", size = 6269008, upload-time = "2026-02-11T04:21:36.623Z" }, - { url = "https://files.pythonhosted.org/packages/3d/1d/6d875422c9f28a4a361f495a5f68d9de4a66941dc2c619103ca335fa6446/pillow-12.1.1-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:691ab2ac363b8217f7d31b3497108fb1f50faab2f75dfb03284ec2f217e87bf8", size = 8073226, upload-time = "2026-02-11T04:21:38.585Z" }, - { url = "https://files.pythonhosted.org/packages/a1/cd/134b0b6ee5eda6dc09e25e24b40fdafe11a520bc725c1d0bbaa5e00bf95b/pillow-12.1.1-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e9e8064fb1cc019296958595f6db671fba95209e3ceb0c4734c9baf97de04b20", size = 6380136, upload-time = "2026-02-11T04:21:40.562Z" }, - { url = "https://files.pythonhosted.org/packages/7a/a9/7628f013f18f001c1b98d8fffe3452f306a70dc6aba7d931019e0492f45e/pillow-12.1.1-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:472a8d7ded663e6162dafdf20015c486a7009483ca671cece7a9279b512fcb13", size = 7067129, upload-time = "2026-02-11T04:21:42.521Z" }, - { url = "https://files.pythonhosted.org/packages/1e/f8/66ab30a2193b277785601e82ee2d49f68ea575d9637e5e234faaa98efa4c/pillow-12.1.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:89b54027a766529136a06cfebeecb3a04900397a3590fd252160b888479517bf", size = 6491807, upload-time = "2026-02-11T04:21:44.22Z" }, - { url = "https://files.pythonhosted.org/packages/da/0b/a877a6627dc8318fdb84e357c5e1a758c0941ab1ddffdafd231983788579/pillow-12.1.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:86172b0831b82ce4f7877f280055892b31179e1576aa00d0df3bb1bbf8c3e524", size = 7190954, upload-time = "2026-02-11T04:21:46.114Z" }, - { 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" }, +version = "11.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f3/0d/d0d6dea55cd152ce3d6767bb38a8fc10e33796ba4ba210cbab9354b6d238/pillow-11.3.0.tar.gz", hash = "sha256:3828ee7586cd0b2091b6209e5ad53e20d0649bbe87164a459d0676e035e8f523", size = 47113069, upload-time = "2025-07-01T09:16:30.666Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/40/fe/1bc9b3ee13f68487a99ac9529968035cca2f0a51ec36892060edcc51d06a/pillow-11.3.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:fdae223722da47b024b867c1ea0be64e0df702c5e0a60e27daad39bf960dd1e4", size = 5278800, upload-time = "2025-07-01T09:14:17.648Z" }, + { url = "https://files.pythonhosted.org/packages/2c/32/7e2ac19b5713657384cec55f89065fb306b06af008cfd87e572035b27119/pillow-11.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:921bd305b10e82b4d1f5e802b6850677f965d8394203d182f078873851dada69", size = 4686296, upload-time = "2025-07-01T09:14:19.828Z" }, + { url = "https://files.pythonhosted.org/packages/8e/1e/b9e12bbe6e4c2220effebc09ea0923a07a6da1e1f1bfbc8d7d29a01ce32b/pillow-11.3.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:eb76541cba2f958032d79d143b98a3a6b3ea87f0959bbe256c0b5e416599fd5d", size = 5871726, upload-time = "2025-07-03T13:10:04.448Z" }, + { url = "https://files.pythonhosted.org/packages/8d/33/e9200d2bd7ba00dc3ddb78df1198a6e80d7669cce6c2bdbeb2530a74ec58/pillow-11.3.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:67172f2944ebba3d4a7b54f2e95c786a3a50c21b88456329314caaa28cda70f6", size = 7644652, upload-time = "2025-07-03T13:10:10.391Z" }, + { url = "https://files.pythonhosted.org/packages/41/f1/6f2427a26fc683e00d985bc391bdd76d8dd4e92fac33d841127eb8fb2313/pillow-11.3.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:97f07ed9f56a3b9b5f49d3661dc9607484e85c67e27f3e8be2c7d28ca032fec7", size = 5977787, upload-time = "2025-07-01T09:14:21.63Z" }, + { url = "https://files.pythonhosted.org/packages/e4/c9/06dd4a38974e24f932ff5f98ea3c546ce3f8c995d3f0985f8e5ba48bba19/pillow-11.3.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:676b2815362456b5b3216b4fd5bd89d362100dc6f4945154ff172e206a22c024", size = 6645236, upload-time = "2025-07-01T09:14:23.321Z" }, + { url = "https://files.pythonhosted.org/packages/40/e7/848f69fb79843b3d91241bad658e9c14f39a32f71a301bcd1d139416d1be/pillow-11.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3e184b2f26ff146363dd07bde8b711833d7b0202e27d13540bfe2e35a323a809", size = 6086950, upload-time = "2025-07-01T09:14:25.237Z" }, + { url = "https://files.pythonhosted.org/packages/0b/1a/7cff92e695a2a29ac1958c2a0fe4c0b2393b60aac13b04a4fe2735cad52d/pillow-11.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:6be31e3fc9a621e071bc17bb7de63b85cbe0bfae91bb0363c893cbe67247780d", size = 6723358, upload-time = "2025-07-01T09:14:27.053Z" }, + { url = "https://files.pythonhosted.org/packages/26/7d/73699ad77895f69edff76b0f332acc3d497f22f5d75e5360f78cbcaff248/pillow-11.3.0-cp312-cp312-win32.whl", hash = "sha256:7b161756381f0918e05e7cb8a371fff367e807770f8fe92ecb20d905d0e1c149", size = 6275079, upload-time = "2025-07-01T09:14:30.104Z" }, + { url = "https://files.pythonhosted.org/packages/8c/ce/e7dfc873bdd9828f3b6e5c2bbb74e47a98ec23cc5c74fc4e54462f0d9204/pillow-11.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:a6444696fce635783440b7f7a9fc24b3ad10a9ea3f0ab66c5905be1c19ccf17d", size = 6986324, upload-time = "2025-07-01T09:14:31.899Z" }, + { url = "https://files.pythonhosted.org/packages/16/8f/b13447d1bf0b1f7467ce7d86f6e6edf66c0ad7cf44cf5c87a37f9bed9936/pillow-11.3.0-cp312-cp312-win_arm64.whl", hash = "sha256:2aceea54f957dd4448264f9bf40875da0415c83eb85f55069d89c0ed436e3542", size = 2423067, upload-time = "2025-07-01T09:14:33.709Z" }, + { url = "https://files.pythonhosted.org/packages/1e/93/0952f2ed8db3a5a4c7a11f91965d6184ebc8cd7cbb7941a260d5f018cd2d/pillow-11.3.0-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:1c627742b539bba4309df89171356fcb3cc5a9178355b2727d1b74a6cf155fbd", size = 2128328, upload-time = "2025-07-01T09:14:35.276Z" }, + { url = "https://files.pythonhosted.org/packages/4b/e8/100c3d114b1a0bf4042f27e0f87d2f25e857e838034e98ca98fe7b8c0a9c/pillow-11.3.0-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:30b7c02f3899d10f13d7a48163c8969e4e653f8b43416d23d13d1bbfdc93b9f8", size = 2170652, upload-time = "2025-07-01T09:14:37.203Z" }, + { url = "https://files.pythonhosted.org/packages/aa/86/3f758a28a6e381758545f7cdb4942e1cb79abd271bea932998fc0db93cb6/pillow-11.3.0-cp313-cp313-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:7859a4cc7c9295f5838015d8cc0a9c215b77e43d07a25e460f35cf516df8626f", size = 2227443, upload-time = "2025-07-01T09:14:39.344Z" }, + { url = "https://files.pythonhosted.org/packages/01/f4/91d5b3ffa718df2f53b0dc109877993e511f4fd055d7e9508682e8aba092/pillow-11.3.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:ec1ee50470b0d050984394423d96325b744d55c701a439d2bd66089bff963d3c", size = 5278474, upload-time = "2025-07-01T09:14:41.843Z" }, + { url = "https://files.pythonhosted.org/packages/f9/0e/37d7d3eca6c879fbd9dba21268427dffda1ab00d4eb05b32923d4fbe3b12/pillow-11.3.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:7db51d222548ccfd274e4572fdbf3e810a5e66b00608862f947b163e613b67dd", size = 4686038, upload-time = "2025-07-01T09:14:44.008Z" }, + { url = "https://files.pythonhosted.org/packages/ff/b0/3426e5c7f6565e752d81221af9d3676fdbb4f352317ceafd42899aaf5d8a/pillow-11.3.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:2d6fcc902a24ac74495df63faad1884282239265c6839a0a6416d33faedfae7e", size = 5864407, upload-time = "2025-07-03T13:10:15.628Z" }, + { url = "https://files.pythonhosted.org/packages/fc/c1/c6c423134229f2a221ee53f838d4be9d82bab86f7e2f8e75e47b6bf6cd77/pillow-11.3.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f0f5d8f4a08090c6d6d578351a2b91acf519a54986c055af27e7a93feae6d3f1", size = 7639094, upload-time = "2025-07-03T13:10:21.857Z" }, + { url = "https://files.pythonhosted.org/packages/ba/c9/09e6746630fe6372c67c648ff9deae52a2bc20897d51fa293571977ceb5d/pillow-11.3.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c37d8ba9411d6003bba9e518db0db0c58a680ab9fe5179f040b0463644bc9805", size = 5973503, upload-time = "2025-07-01T09:14:45.698Z" }, + { url = "https://files.pythonhosted.org/packages/d5/1c/a2a29649c0b1983d3ef57ee87a66487fdeb45132df66ab30dd37f7dbe162/pillow-11.3.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:13f87d581e71d9189ab21fe0efb5a23e9f28552d5be6979e84001d3b8505abe8", size = 6642574, upload-time = "2025-07-01T09:14:47.415Z" }, + { url = "https://files.pythonhosted.org/packages/36/de/d5cc31cc4b055b6c6fd990e3e7f0f8aaf36229a2698501bcb0cdf67c7146/pillow-11.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:023f6d2d11784a465f09fd09a34b150ea4672e85fb3d05931d89f373ab14abb2", size = 6084060, upload-time = "2025-07-01T09:14:49.636Z" }, + { url = "https://files.pythonhosted.org/packages/d5/ea/502d938cbaeec836ac28a9b730193716f0114c41325db428e6b280513f09/pillow-11.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:45dfc51ac5975b938e9809451c51734124e73b04d0f0ac621649821a63852e7b", size = 6721407, upload-time = "2025-07-01T09:14:51.962Z" }, + { url = "https://files.pythonhosted.org/packages/45/9c/9c5e2a73f125f6cbc59cc7087c8f2d649a7ae453f83bd0362ff7c9e2aee2/pillow-11.3.0-cp313-cp313-win32.whl", hash = "sha256:a4d336baed65d50d37b88ca5b60c0fa9d81e3a87d4a7930d3880d1624d5b31f3", size = 6273841, upload-time = "2025-07-01T09:14:54.142Z" }, + { url = "https://files.pythonhosted.org/packages/23/85/397c73524e0cd212067e0c969aa245b01d50183439550d24d9f55781b776/pillow-11.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:0bce5c4fd0921f99d2e858dc4d4d64193407e1b99478bc5cacecba2311abde51", size = 6978450, upload-time = "2025-07-01T09:14:56.436Z" }, + { url = "https://files.pythonhosted.org/packages/17/d2/622f4547f69cd173955194b78e4d19ca4935a1b0f03a302d655c9f6aae65/pillow-11.3.0-cp313-cp313-win_arm64.whl", hash = "sha256:1904e1264881f682f02b7f8167935cce37bc97db457f8e7849dc3a6a52b99580", size = 2423055, upload-time = "2025-07-01T09:14:58.072Z" }, + { url = "https://files.pythonhosted.org/packages/dd/80/a8a2ac21dda2e82480852978416cfacd439a4b490a501a288ecf4fe2532d/pillow-11.3.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:4c834a3921375c48ee6b9624061076bc0a32a60b5532b322cc0ea64e639dd50e", size = 5281110, upload-time = "2025-07-01T09:14:59.79Z" }, + { url = "https://files.pythonhosted.org/packages/44/d6/b79754ca790f315918732e18f82a8146d33bcd7f4494380457ea89eb883d/pillow-11.3.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:5e05688ccef30ea69b9317a9ead994b93975104a677a36a8ed8106be9260aa6d", size = 4689547, upload-time = "2025-07-01T09:15:01.648Z" }, + { url = "https://files.pythonhosted.org/packages/49/20/716b8717d331150cb00f7fdd78169c01e8e0c219732a78b0e59b6bdb2fd6/pillow-11.3.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:1019b04af07fc0163e2810167918cb5add8d74674b6267616021ab558dc98ced", size = 5901554, upload-time = "2025-07-03T13:10:27.018Z" }, + { url = "https://files.pythonhosted.org/packages/74/cf/a9f3a2514a65bb071075063a96f0a5cf949c2f2fce683c15ccc83b1c1cab/pillow-11.3.0-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f944255db153ebb2b19c51fe85dd99ef0ce494123f21b9db4877ffdfc5590c7c", size = 7669132, upload-time = "2025-07-03T13:10:33.01Z" }, + { url = "https://files.pythonhosted.org/packages/98/3c/da78805cbdbee9cb43efe8261dd7cc0b4b93f2ac79b676c03159e9db2187/pillow-11.3.0-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1f85acb69adf2aaee8b7da124efebbdb959a104db34d3a2cb0f3793dbae422a8", size = 6005001, upload-time = "2025-07-01T09:15:03.365Z" }, + { url = "https://files.pythonhosted.org/packages/6c/fa/ce044b91faecf30e635321351bba32bab5a7e034c60187fe9698191aef4f/pillow-11.3.0-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:05f6ecbeff5005399bb48d198f098a9b4b6bdf27b8487c7f38ca16eeb070cd59", size = 6668814, upload-time = "2025-07-01T09:15:05.655Z" }, + { url = "https://files.pythonhosted.org/packages/7b/51/90f9291406d09bf93686434f9183aba27b831c10c87746ff49f127ee80cb/pillow-11.3.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:a7bc6e6fd0395bc052f16b1a8670859964dbd7003bd0af2ff08342eb6e442cfe", size = 6113124, upload-time = "2025-07-01T09:15:07.358Z" }, + { url = "https://files.pythonhosted.org/packages/cd/5a/6fec59b1dfb619234f7636d4157d11fb4e196caeee220232a8d2ec48488d/pillow-11.3.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:83e1b0161c9d148125083a35c1c5a89db5b7054834fd4387499e06552035236c", size = 6747186, upload-time = "2025-07-01T09:15:09.317Z" }, + { url = "https://files.pythonhosted.org/packages/49/6b/00187a044f98255225f172de653941e61da37104a9ea60e4f6887717e2b5/pillow-11.3.0-cp313-cp313t-win32.whl", hash = "sha256:2a3117c06b8fb646639dce83694f2f9eac405472713fcb1ae887469c0d4f6788", size = 6277546, upload-time = "2025-07-01T09:15:11.311Z" }, + { url = "https://files.pythonhosted.org/packages/e8/5c/6caaba7e261c0d75bab23be79f1d06b5ad2a2ae49f028ccec801b0e853d6/pillow-11.3.0-cp313-cp313t-win_amd64.whl", hash = "sha256:857844335c95bea93fb39e0fa2726b4d9d758850b34075a7e3ff4f4fa3aa3b31", size = 6985102, upload-time = "2025-07-01T09:15:13.164Z" }, + { url = "https://files.pythonhosted.org/packages/f3/7e/b623008460c09a0cb38263c93b828c666493caee2eb34ff67f778b87e58c/pillow-11.3.0-cp313-cp313t-win_arm64.whl", hash = "sha256:8797edc41f3e8536ae4b10897ee2f637235c94f27404cac7297f7b607dd0716e", size = 2424803, upload-time = "2025-07-01T09:15:15.695Z" }, ] [[package]] @@ -2380,6 +3306,19 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/cb/28/3bfe2fa5a7b9c46fe7e13c97bda14c895fb10fa2ebf1d0abb90e0cea7ee1/platformdirs-4.5.1-py3-none-any.whl", hash = "sha256:d03afa3963c806a9bed9d5125c8f4cb2fdaf74a55ab60e5d59b3fde758104d31", size = 18731, upload-time = "2025-12-05T13:52:56.823Z" }, ] +[[package]] +name = "plotly" +version = "6.7.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "narwhals", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "packaging", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/3a/7f/0f100df1172aadf88a929a9dbb902656b0880ba4b960fe5224867159d8f4/plotly-6.7.0.tar.gz", hash = "sha256:45eea0ff27e2a23ccd62776f77eb43aa1ca03df4192b76036e380bb479b892c6", size = 6911286, upload-time = "2026-04-09T20:36:45.738Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/90/ad/cba91b3bcf04073e4d1655a5c1710ef3f457f56f7d1b79dcc3d72f4dd912/plotly-6.7.0-py3-none-any.whl", hash = "sha256:ac8aca1c25c663a59b5b9140a549264a5badde2e057d79b8c772ae2920e32ff0", size = 9898444, upload-time = "2026-04-09T20:36:39.812Z" }, +] + [[package]] name = "pluggy" version = "1.6.0" @@ -2389,6 +3328,32 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746", size = 20538, upload-time = "2025-05-15T12:30:06.134Z" }, ] +[[package]] +name = "portalocker" +version = "3.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/5e/77/65b857a69ed876e1951e88aaba60f5ce6120c33703f7cb61a3c894b8c1b6/portalocker-3.2.0.tar.gz", hash = "sha256:1f3002956a54a8c3730586c5c77bf18fae4149e07eaf1c29fc3faf4d5a3f89ac", size = 95644, upload-time = "2025-06-14T13:20:40.03Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4b/a6/38c8e2f318bf67d338f4d629e93b0b4b9af331f455f0390ea8ce4a099b26/portalocker-3.2.0-py3-none-any.whl", hash = "sha256:3cdc5f565312224bc570c49337bd21428bba0ef363bbcf58b9ef4a9f11779968", size = 22424, upload-time = "2025-06-14T13:20:38.083Z" }, +] + +[[package]] +name = "posthog" +version = "6.7.11" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "backoff", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "distro", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "python-dateutil", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "requests", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "six", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "typing-extensions", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/cb/32/3668d5e0f8b852fad81770743ee17893854fd8e5f7cea897a0a9199b0370/posthog-6.7.11.tar.gz", hash = "sha256:62db3e97cbd95351fe081c1ea8805393293de6fabad6d2e9024bf940aca4ddbf", size = 120407, upload-time = "2025-10-28T13:06:18.335Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8c/00/bf284e0aae5dec7c217c176f291867cfac2f7bfd5692c9ce041e80986fa7/posthog-6.7.11-py3-none-any.whl", hash = "sha256:31421a88437cef2ce20f60c14ee8d298b2e765a6de0617cb95d1fcef54170749", size = 138713, upload-time = "2025-10-28T13:06:17.018Z" }, +] + [[package]] name = "pre-commit" version = "4.5.1" @@ -2477,39 +3442,36 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/92/f7/1d4ec5841505f423469efbfc381d64b7b467438cd5a4bbcbb063f3b73d27/propcache-0.4.1-cp313-cp313t-win32.whl", hash = "sha256:2ad890caa1d928c7c2965b48f3a3815c853180831d0e5503d35cf00c472f4717", size = 41396, upload-time = "2025-10-08T19:47:47.202Z" }, { url = "https://files.pythonhosted.org/packages/48/f0/615c30622316496d2cbbc29f5985f7777d3ada70f23370608c1d3e081c1f/propcache-0.4.1-cp313-cp313t-win_amd64.whl", hash = "sha256:f7ee0e597f495cf415bcbd3da3caa3bd7e816b74d0d52b8145954c5e6fd3ff37", size = 44897, upload-time = "2025-10-08T19:47:48.336Z" }, { url = "https://files.pythonhosted.org/packages/fd/ca/6002e46eccbe0e33dcd4069ef32f7f1c9e243736e07adca37ae8c4830ec3/propcache-0.4.1-cp313-cp313t-win_arm64.whl", hash = "sha256:929d7cbe1f01bb7baffb33dc14eb5691c95831450a26354cd210a8155170c93a", size = 39789, upload-time = "2025-10-08T19:47:49.876Z" }, - { url = "https://files.pythonhosted.org/packages/8e/5c/bca52d654a896f831b8256683457ceddd490ec18d9ec50e97dfd8fc726a8/propcache-0.4.1-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:3f7124c9d820ba5548d431afb4632301acf965db49e666aa21c305cbe8c6de12", size = 78152, upload-time = "2025-10-08T19:47:51.051Z" }, - { url = "https://files.pythonhosted.org/packages/65/9b/03b04e7d82a5f54fb16113d839f5ea1ede58a61e90edf515f6577c66fa8f/propcache-0.4.1-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:c0d4b719b7da33599dfe3b22d3db1ef789210a0597bc650b7cee9c77c2be8c5c", size = 44869, upload-time = "2025-10-08T19:47:52.594Z" }, - { url = "https://files.pythonhosted.org/packages/b2/fa/89a8ef0468d5833a23fff277b143d0573897cf75bd56670a6d28126c7d68/propcache-0.4.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:9f302f4783709a78240ebc311b793f123328716a60911d667e0c036bc5dcbded", size = 46596, upload-time = "2025-10-08T19:47:54.073Z" }, - { url = "https://files.pythonhosted.org/packages/86/bd/47816020d337f4a746edc42fe8d53669965138f39ee117414c7d7a340cfe/propcache-0.4.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c80ee5802e3fb9ea37938e7eecc307fb984837091d5fd262bb37238b1ae97641", size = 206981, upload-time = "2025-10-08T19:47:55.715Z" }, - { url = "https://files.pythonhosted.org/packages/df/f6/c5fa1357cc9748510ee55f37173eb31bfde6d94e98ccd9e6f033f2fc06e1/propcache-0.4.1-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ed5a841e8bb29a55fb8159ed526b26adc5bdd7e8bd7bf793ce647cb08656cdf4", size = 211490, upload-time = "2025-10-08T19:47:57.499Z" }, - { url = "https://files.pythonhosted.org/packages/80/1e/e5889652a7c4a3846683401a48f0f2e5083ce0ec1a8a5221d8058fbd1adf/propcache-0.4.1-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:55c72fd6ea2da4c318e74ffdf93c4fe4e926051133657459131a95c846d16d44", size = 215371, upload-time = "2025-10-08T19:47:59.317Z" }, - { url = "https://files.pythonhosted.org/packages/b2/f2/889ad4b2408f72fe1a4f6a19491177b30ea7bf1a0fd5f17050ca08cfc882/propcache-0.4.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8326e144341460402713f91df60ade3c999d601e7eb5ff8f6f7862d54de0610d", size = 201424, upload-time = "2025-10-08T19:48:00.67Z" }, - { url = "https://files.pythonhosted.org/packages/27/73/033d63069b57b0812c8bd19f311faebeceb6ba31b8f32b73432d12a0b826/propcache-0.4.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:060b16ae65bc098da7f6d25bf359f1f31f688384858204fe5d652979e0015e5b", size = 197566, upload-time = "2025-10-08T19:48:02.604Z" }, - { url = "https://files.pythonhosted.org/packages/dc/89/ce24f3dc182630b4e07aa6d15f0ff4b14ed4b9955fae95a0b54c58d66c05/propcache-0.4.1-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:89eb3fa9524f7bec9de6e83cf3faed9d79bffa560672c118a96a171a6f55831e", size = 193130, upload-time = "2025-10-08T19:48:04.499Z" }, - { url = "https://files.pythonhosted.org/packages/a9/24/ef0d5fd1a811fb5c609278d0209c9f10c35f20581fcc16f818da959fc5b4/propcache-0.4.1-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:dee69d7015dc235f526fe80a9c90d65eb0039103fe565776250881731f06349f", size = 202625, upload-time = "2025-10-08T19:48:06.213Z" }, - { url = "https://files.pythonhosted.org/packages/f5/02/98ec20ff5546f68d673df2f7a69e8c0d076b5abd05ca882dc7ee3a83653d/propcache-0.4.1-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:5558992a00dfd54ccbc64a32726a3357ec93825a418a401f5cc67df0ac5d9e49", size = 204209, upload-time = "2025-10-08T19:48:08.432Z" }, - { url = "https://files.pythonhosted.org/packages/a0/87/492694f76759b15f0467a2a93ab68d32859672b646aa8a04ce4864e7932d/propcache-0.4.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:c9b822a577f560fbd9554812526831712c1436d2c046cedee4c3796d3543b144", size = 197797, upload-time = "2025-10-08T19:48:09.968Z" }, - { url = "https://files.pythonhosted.org/packages/ee/36/66367de3575db1d2d3f3d177432bd14ee577a39d3f5d1b3d5df8afe3b6e2/propcache-0.4.1-cp314-cp314-win32.whl", hash = "sha256:ab4c29b49d560fe48b696cdcb127dd36e0bc2472548f3bf56cc5cb3da2b2984f", size = 38140, upload-time = "2025-10-08T19:48:11.232Z" }, - { url = "https://files.pythonhosted.org/packages/0c/2a/a758b47de253636e1b8aef181c0b4f4f204bf0dd964914fb2af90a95b49b/propcache-0.4.1-cp314-cp314-win_amd64.whl", hash = "sha256:5a103c3eb905fcea0ab98be99c3a9a5ab2de60228aa5aceedc614c0281cf6153", size = 41257, upload-time = "2025-10-08T19:48:12.707Z" }, - { url = "https://files.pythonhosted.org/packages/34/5e/63bd5896c3fec12edcbd6f12508d4890d23c265df28c74b175e1ef9f4f3b/propcache-0.4.1-cp314-cp314-win_arm64.whl", hash = "sha256:74c1fb26515153e482e00177a1ad654721bf9207da8a494a0c05e797ad27b992", size = 38097, upload-time = "2025-10-08T19:48:13.923Z" }, - { url = "https://files.pythonhosted.org/packages/99/85/9ff785d787ccf9bbb3f3106f79884a130951436f58392000231b4c737c80/propcache-0.4.1-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:824e908bce90fb2743bd6b59db36eb4f45cd350a39637c9f73b1c1ea66f5b75f", size = 81455, upload-time = "2025-10-08T19:48:15.16Z" }, - { url = "https://files.pythonhosted.org/packages/90/85/2431c10c8e7ddb1445c1f7c4b54d886e8ad20e3c6307e7218f05922cad67/propcache-0.4.1-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:c2b5e7db5328427c57c8e8831abda175421b709672f6cfc3d630c3b7e2146393", size = 46372, upload-time = "2025-10-08T19:48:16.424Z" }, - { url = "https://files.pythonhosted.org/packages/01/20/b0972d902472da9bcb683fa595099911f4d2e86e5683bcc45de60dd05dc3/propcache-0.4.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:6f6ff873ed40292cd4969ef5310179afd5db59fdf055897e282485043fc80ad0", size = 48411, upload-time = "2025-10-08T19:48:17.577Z" }, - { url = "https://files.pythonhosted.org/packages/e2/e3/7dc89f4f21e8f99bad3d5ddb3a3389afcf9da4ac69e3deb2dcdc96e74169/propcache-0.4.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:49a2dc67c154db2c1463013594c458881a069fcf98940e61a0569016a583020a", size = 275712, upload-time = "2025-10-08T19:48:18.901Z" }, - { url = "https://files.pythonhosted.org/packages/20/67/89800c8352489b21a8047c773067644e3897f02ecbbd610f4d46b7f08612/propcache-0.4.1-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:005f08e6a0529984491e37d8dbc3dd86f84bd78a8ceb5fa9a021f4c48d4984be", size = 273557, upload-time = "2025-10-08T19:48:20.762Z" }, - { url = "https://files.pythonhosted.org/packages/e2/a1/b52b055c766a54ce6d9c16d9aca0cad8059acd9637cdf8aa0222f4a026ef/propcache-0.4.1-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5c3310452e0d31390da9035c348633b43d7e7feb2e37be252be6da45abd1abcc", size = 280015, upload-time = "2025-10-08T19:48:22.592Z" }, - { url = "https://files.pythonhosted.org/packages/48/c8/33cee30bd890672c63743049f3c9e4be087e6780906bfc3ec58528be59c1/propcache-0.4.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4c3c70630930447f9ef1caac7728c8ad1c56bc5015338b20fed0d08ea2480b3a", size = 262880, upload-time = "2025-10-08T19:48:23.947Z" }, - { url = "https://files.pythonhosted.org/packages/0c/b1/8f08a143b204b418285c88b83d00edbd61afbc2c6415ffafc8905da7038b/propcache-0.4.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:8e57061305815dfc910a3634dcf584f08168a8836e6999983569f51a8544cd89", size = 260938, upload-time = "2025-10-08T19:48:25.656Z" }, - { url = "https://files.pythonhosted.org/packages/cf/12/96e4664c82ca2f31e1c8dff86afb867348979eb78d3cb8546a680287a1e9/propcache-0.4.1-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:521a463429ef54143092c11a77e04056dd00636f72e8c45b70aaa3140d639726", size = 247641, upload-time = "2025-10-08T19:48:27.207Z" }, - { url = "https://files.pythonhosted.org/packages/18/ed/e7a9cfca28133386ba52278136d42209d3125db08d0a6395f0cba0c0285c/propcache-0.4.1-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:120c964da3fdc75e3731aa392527136d4ad35868cc556fd09bb6d09172d9a367", size = 262510, upload-time = "2025-10-08T19:48:28.65Z" }, - { url = "https://files.pythonhosted.org/packages/f5/76/16d8bf65e8845dd62b4e2b57444ab81f07f40caa5652b8969b87ddcf2ef6/propcache-0.4.1-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:d8f353eb14ee3441ee844ade4277d560cdd68288838673273b978e3d6d2c8f36", size = 263161, upload-time = "2025-10-08T19:48:30.133Z" }, - { url = "https://files.pythonhosted.org/packages/e7/70/c99e9edb5d91d5ad8a49fa3c1e8285ba64f1476782fed10ab251ff413ba1/propcache-0.4.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:ab2943be7c652f09638800905ee1bab2c544e537edb57d527997a24c13dc1455", size = 257393, upload-time = "2025-10-08T19:48:31.567Z" }, - { url = "https://files.pythonhosted.org/packages/08/02/87b25304249a35c0915d236575bc3574a323f60b47939a2262b77632a3ee/propcache-0.4.1-cp314-cp314t-win32.whl", hash = "sha256:05674a162469f31358c30bcaa8883cb7829fa3110bf9c0991fe27d7896c42d85", size = 42546, upload-time = "2025-10-08T19:48:32.872Z" }, - { url = "https://files.pythonhosted.org/packages/cb/ef/3c6ecf8b317aa982f309835e8f96987466123c6e596646d4e6a1dfcd080f/propcache-0.4.1-cp314-cp314t-win_amd64.whl", hash = "sha256:990f6b3e2a27d683cb7602ed6c86f15ee6b43b1194736f9baaeb93d0016633b1", size = 46259, upload-time = "2025-10-08T19:48:34.226Z" }, - { url = "https://files.pythonhosted.org/packages/c4/2d/346e946d4951f37eca1e4f55be0f0174c52cd70720f84029b02f296f4a38/propcache-0.4.1-cp314-cp314t-win_arm64.whl", hash = "sha256:ecef2343af4cc68e05131e45024ba34f6095821988a9d0a02aa7c73fcc448aa9", size = 40428, upload-time = "2025-10-08T19:48:35.441Z" }, { url = "https://files.pythonhosted.org/packages/5b/5a/bc7b4a4ef808fa59a816c17b20c4bef6884daebbdf627ff2a161da67da19/propcache-0.4.1-py3-none-any.whl", hash = "sha256:af2a6052aeb6cf17d3e46ee169099044fd8224cbaf75c76a2ef596e8163e2237", size = 13305, upload-time = "2025-10-08T19:49:00.792Z" }, ] +[[package]] +name = "proto-plus" +version = "1.27.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "protobuf", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/81/0d/94dfe80193e79d55258345901acd2917523d56e8381bc4dee7fd38e3868a/proto_plus-1.27.2.tar.gz", hash = "sha256:b2adde53adadf75737c44d3dcb0104fde65250dfc83ad59168b4aa3e574b6a24", size = 57204, upload-time = "2026-03-26T22:18:57.174Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/84/f3/1fba73eeffafc998a25d59703b63f8be4fe8a5cb12eaff7386a0ba0f7125/proto_plus-1.27.2-py3-none-any.whl", hash = "sha256:6432f75893d3b9e70b9c412f1d2f03f65b11fb164b793d14ae2ca01821d22718", size = 50450, upload-time = "2026-03-26T22:13:42.927Z" }, +] + +[[package]] +name = "protobuf" +version = "6.33.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/66/70/e908e9c5e52ef7c3a6c7902c9dfbb34c7e29c25d2f81ade3856445fd5c94/protobuf-6.33.6.tar.gz", hash = "sha256:a6768d25248312c297558af96a9f9c929e8c4cee0659cb07e780731095f38135", size = 444531, upload-time = "2026-03-18T19:05:00.988Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fc/9f/2f509339e89cfa6f6a4c4ff50438db9ca488dec341f7e454adad60150b00/protobuf-6.33.6-cp310-abi3-win32.whl", hash = "sha256:7d29d9b65f8afef196f8334e80d6bc1d5d4adedb449971fefd3723824e6e77d3", size = 425739, upload-time = "2026-03-18T19:04:48.373Z" }, + { url = "https://files.pythonhosted.org/packages/76/5d/683efcd4798e0030c1bab27374fd13a89f7c2515fb1f3123efdfaa5eab57/protobuf-6.33.6-cp310-abi3-win_amd64.whl", hash = "sha256:0cd27b587afca21b7cfa59a74dcbd48a50f0a6400cfb59391340ad729d91d326", size = 437089, upload-time = "2026-03-18T19:04:50.381Z" }, + { url = "https://files.pythonhosted.org/packages/5c/01/a3c3ed5cd186f39e7880f8303cc51385a198a81469d53d0fdecf1f64d929/protobuf-6.33.6-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:9720e6961b251bde64edfdab7d500725a2af5280f3f4c87e57c0208376aa8c3a", size = 427737, upload-time = "2026-03-18T19:04:51.866Z" }, + { url = "https://files.pythonhosted.org/packages/ee/90/b3c01fdec7d2f627b3a6884243ba328c1217ed2d978def5c12dc50d328a3/protobuf-6.33.6-cp39-abi3-manylinux2014_aarch64.whl", hash = "sha256:e2afbae9b8e1825e3529f88d514754e094278bb95eadc0e199751cdd9a2e82a2", size = 324610, upload-time = "2026-03-18T19:04:53.096Z" }, + { url = "https://files.pythonhosted.org/packages/9b/ca/25afc144934014700c52e05103c2421997482d561f3101ff352e1292fb81/protobuf-6.33.6-cp39-abi3-manylinux2014_s390x.whl", hash = "sha256:c96c37eec15086b79762ed265d59ab204dabc53056e3443e702d2681f4b39ce3", size = 339381, upload-time = "2026-03-18T19:04:54.616Z" }, + { url = "https://files.pythonhosted.org/packages/16/92/d1e32e3e0d894fe00b15ce28ad4944ab692713f2e7f0a99787405e43533a/protobuf-6.33.6-cp39-abi3-manylinux2014_x86_64.whl", hash = "sha256:e9db7e292e0ab79dd108d7f1a94fe31601ce1ee3f7b79e0692043423020b0593", size = 323436, upload-time = "2026-03-18T19:04:55.768Z" }, + { url = "https://files.pythonhosted.org/packages/c4/72/02445137af02769918a93807b2b7890047c32bfb9f90371cbc12688819eb/protobuf-6.33.6-py3-none-any.whl", hash = "sha256:77179e006c476e69bf8e8ce866640091ec42e1beb80b213c3900006ecfba6901", size = 170656, upload-time = "2026-03-18T19:04:59.826Z" }, +] + [[package]] name = "psutil" version = "7.2.2" @@ -2522,12 +3484,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" }, @@ -2583,20 +3539,27 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/5a/90/f3342553b7ac9879413aed46500f1637296f3c8222107523a43a1c08b42a/pyarrow-23.0.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:15a414f710dc927132dd67c361f78c194447479555af57317066ee5116b90e9e", size = 48210401, upload-time = "2026-01-18T16:17:42.012Z" }, { url = "https://files.pythonhosted.org/packages/f3/da/9862ade205ecc46c172b6ce5038a74b5151c7401e36255f15975a45878b2/pyarrow-23.0.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:3e0d2e6915eca7d786be6a77bf227fbc06d825a75b5b5fe9bcbef121dec32685", size = 50579677, upload-time = "2026-01-18T16:17:50.241Z" }, { url = "https://files.pythonhosted.org/packages/c2/4c/f11f371f5d4740a5dafc2e11c76bcf42d03dfdb2d68696da97de420b6963/pyarrow-23.0.0-cp313-cp313t-win_amd64.whl", hash = "sha256:4b317ea6e800b5704e5e5929acb6e2dc13e9276b708ea97a39eb8b345aa2658b", size = 27631889, upload-time = "2026-01-18T16:17:56.55Z" }, - { url = "https://files.pythonhosted.org/packages/97/bb/15aec78bcf43a0c004067bd33eb5352836a29a49db8581fc56f2b6ca88b7/pyarrow-23.0.0-cp314-cp314-macosx_12_0_arm64.whl", hash = "sha256:20b187ed9550d233a872074159f765f52f9d92973191cd4b93f293a19efbe377", size = 34213265, upload-time = "2026-01-18T16:18:07.904Z" }, - { url = "https://files.pythonhosted.org/packages/f6/6c/deb2c594bbba41c37c5d9aa82f510376998352aa69dfcb886cb4b18ad80f/pyarrow-23.0.0-cp314-cp314-macosx_12_0_x86_64.whl", hash = "sha256:18ec84e839b493c3886b9b5e06861962ab4adfaeb79b81c76afbd8d84c7d5fda", size = 35819211, upload-time = "2026-01-18T16:18:13.94Z" }, - { url = "https://files.pythonhosted.org/packages/e0/e5/ee82af693cb7b5b2b74f6524cdfede0e6ace779d7720ebca24d68b57c36b/pyarrow-23.0.0-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:e438dd3f33894e34fd02b26bd12a32d30d006f5852315f611aa4add6c7fab4bc", size = 44502313, upload-time = "2026-01-18T16:18:20.367Z" }, - { url = "https://files.pythonhosted.org/packages/9c/86/95c61ad82236495f3c31987e85135926ba3ec7f3819296b70a68d8066b49/pyarrow-23.0.0-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:a244279f240c81f135631be91146d7fa0e9e840e1dfed2aba8483eba25cd98e6", size = 47585886, upload-time = "2026-01-18T16:18:27.544Z" }, - { url = "https://files.pythonhosted.org/packages/bb/6e/a72d901f305201802f016d015de1e05def7706fff68a1dedefef5dc7eff7/pyarrow-23.0.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c4692e83e42438dba512a570c6eaa42be2f8b6c0f492aea27dec54bdc495103a", size = 48207055, upload-time = "2026-01-18T16:18:35.425Z" }, - { url = "https://files.pythonhosted.org/packages/f9/e5/5de029c537630ca18828db45c30e2a78da03675a70ac6c3528203c416fe3/pyarrow-23.0.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:ae7f30f898dfe44ea69654a35c93e8da4cef6606dc4c72394068fd95f8e9f54a", size = 50619812, upload-time = "2026-01-18T16:18:43.553Z" }, - { url = "https://files.pythonhosted.org/packages/59/8d/2af846cd2412e67a087f5bda4a8e23dfd4ebd570f777db2e8686615dafc1/pyarrow-23.0.0-cp314-cp314-win_amd64.whl", hash = "sha256:5b86bb649e4112fb0614294b7d0a175c7513738876b89655605ebb87c804f861", size = 28263851, upload-time = "2026-01-18T16:19:38.567Z" }, - { url = "https://files.pythonhosted.org/packages/7b/7f/caab863e587041156f6786c52e64151b7386742c8c27140f637176e9230e/pyarrow-23.0.0-cp314-cp314t-macosx_12_0_arm64.whl", hash = "sha256:ebc017d765d71d80a3f8584ca0566b53e40464586585ac64176115baa0ada7d3", size = 34463240, upload-time = "2026-01-18T16:18:49.755Z" }, - { url = "https://files.pythonhosted.org/packages/c9/fa/3a5b8c86c958e83622b40865e11af0857c48ec763c11d472c87cd518283d/pyarrow-23.0.0-cp314-cp314t-macosx_12_0_x86_64.whl", hash = "sha256:0800cc58a6d17d159df823f87ad66cefebf105b982493d4bad03ee7fab84b993", size = 35935712, upload-time = "2026-01-18T16:18:55.626Z" }, - { url = "https://files.pythonhosted.org/packages/c5/08/17a62078fc1a53decb34a9aa79cf9009efc74d63d2422e5ade9fed2f99e3/pyarrow-23.0.0-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:3a7c68c722da9bb5b0f8c10e3eae71d9825a4b429b40b32709df5d1fa55beb3d", size = 44503523, upload-time = "2026-01-18T16:19:03.958Z" }, - { url = "https://files.pythonhosted.org/packages/cc/70/84d45c74341e798aae0323d33b7c39194e23b1abc439ceaf60a68a7a969a/pyarrow-23.0.0-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:bd5556c24622df90551063ea41f559b714aa63ca953db884cfb958559087a14e", size = 47542490, upload-time = "2026-01-18T16:19:11.208Z" }, - { url = "https://files.pythonhosted.org/packages/61/d9/d1274b0e6f19e235de17441e53224f4716574b2ca837022d55702f24d71d/pyarrow-23.0.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:54810f6e6afc4ffee7c2e0051b61722fbea9a4961b46192dcfae8ea12fa09059", size = 48233605, upload-time = "2026-01-18T16:19:19.544Z" }, - { url = "https://files.pythonhosted.org/packages/39/07/e4e2d568cb57543d84482f61e510732820cddb0f47c4bb7df629abfed852/pyarrow-23.0.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:14de7d48052cf4b0ed174533eafa3cfe0711b8076ad70bede32cf59f744f0d7c", size = 50603979, upload-time = "2026-01-18T16:19:26.717Z" }, - { url = "https://files.pythonhosted.org/packages/72/9c/47693463894b610f8439b2e970b82ef81e9599c757bf2049365e40ff963c/pyarrow-23.0.0-cp314-cp314t-win_amd64.whl", hash = "sha256:427deac1f535830a744a4f04a6ac183a64fcac4341b3f618e693c41b7b98d2b0", size = 28338905, upload-time = "2026-01-18T16:19:32.93Z" }, +] + +[[package]] +name = "pyasn1" +version = "0.6.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/5c/5f/6583902b6f79b399c9c40674ac384fd9cd77805f9e6205075f828ef11fb2/pyasn1-0.6.3.tar.gz", hash = "sha256:697a8ecd6d98891189184ca1fa05d1bb00e2f84b5977c481452050549c8a72cf", size = 148685, upload-time = "2026-03-17T01:06:53.382Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5d/a0/7d793dce3fa811fe047d6ae2431c672364b462850c6235ae306c0efd025f/pyasn1-0.6.3-py3-none-any.whl", hash = "sha256:a80184d120f0864a52a073acc6fc642847d0be408e7c7252f31390c0f4eadcde", size = 83997, upload-time = "2026-03-17T01:06:52.036Z" }, +] + +[[package]] +name = "pyasn1-modules" +version = "0.4.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pyasn1", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e9/e6/78ebbb10a8c8e4b61a59249394a4a594c1a7af95593dc933a349c8d00964/pyasn1_modules-0.4.2.tar.gz", hash = "sha256:677091de870a80aae844b1ca6134f54652fa2c8c5a52aa396440ac3106e941e6", size = 307892, upload-time = "2025-03-28T02:41:22.17Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/47/8d/d529b5d697919ba8c11ad626e835d4039be708a35b0d22de83a269a6682c/pyasn1_modules-0.4.2-py3-none-any.whl", hash = "sha256:29253a9207ce32b64c3ac6600edc75368f98473906e8fd1043bd6b5b1de2c14a", size = 181259, upload-time = "2025-03-28T02:41:19.028Z" }, ] [[package]] @@ -2608,6 +3571,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/d7/27/a58ddaf8c588a3ef080db9d0b7e0b97215cee3a45df74f3a94dbbf5c893a/pycodestyle-2.14.0-py2.py3-none-any.whl", hash = "sha256:dd6bf7cb4ee77f8e016f9c8e74a35ddd9f67e1d5fd4184d86c3b98e07099f42d", size = 31594, upload-time = "2025-06-20T18:49:47.491Z" }, ] +[[package]] +name = "pycountry" +version = "26.2.16" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/de/1d/061b9e7a48b85cfd69f33c33d2ef784a531c359399ad764243399673c8f5/pycountry-26.2.16.tar.gz", hash = "sha256:5b6027d453fcd6060112b951dd010f01f168b51b4bf8a1f1fc8c95c8d94a0801", size = 7711342, upload-time = "2026-02-17T03:42:52.367Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9c/42/7703bd45b62fecd44cd7d3495423097e2f7d28bc2e99e7c1af68892ab157/pycountry-26.2.16-py3-none-any.whl", hash = "sha256:115c4baf7cceaa30f59a4694d79483c9167dbce7a9de4d3d571c5f3ea77c305a", size = 8044600, upload-time = "2026-02-17T03:42:49.777Z" }, +] + [[package]] name = "pycparser" version = "3.0" @@ -2617,6 +3589,82 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/0c/c3/44f3fbbfa403ea2a7c779186dc20772604442dde72947e7d01069cbe98e3/pycparser-3.0-py3-none-any.whl", hash = "sha256:b727414169a36b7d524c1c3e31839a521725078d7b2ff038656844266160a992", size = 48172, upload-time = "2026-01-21T14:26:50.693Z" }, ] +[[package]] +name = "pydantic" +version = "2.12.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "annotated-types" }, + { name = "pydantic-core" }, + { name = "typing-extensions" }, + { name = "typing-inspection" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/69/44/36f1a6e523abc58ae5f928898e4aca2e0ea509b5aa6f6f392a5d882be928/pydantic-2.12.5.tar.gz", hash = "sha256:4d351024c75c0f085a9febbb665ce8c0c6ec5d30e903bdb6394b7ede26aebb49", size = 821591, upload-time = "2025-11-26T15:11:46.471Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5a/87/b70ad306ebb6f9b585f114d0ac2137d792b48be34d732d60e597c2f8465a/pydantic-2.12.5-py3-none-any.whl", hash = "sha256:e561593fccf61e8a20fc46dfc2dfe075b8be7d0188df33f221ad1f0139180f9d", size = 463580, upload-time = "2025-11-26T15:11:44.605Z" }, +] + +[[package]] +name = "pydantic-core" +version = "2.41.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/71/70/23b021c950c2addd24ec408e9ab05d59b035b39d97cdc1130e1bce647bb6/pydantic_core-2.41.5.tar.gz", hash = "sha256:08daa51ea16ad373ffd5e7606252cc32f07bc72b28284b6bc9c6df804816476e", size = 460952, upload-time = "2025-11-04T13:43:49.098Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5f/5d/5f6c63eebb5afee93bcaae4ce9a898f3373ca23df3ccaef086d0233a35a7/pydantic_core-2.41.5-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:f41a7489d32336dbf2199c8c0a215390a751c5b014c2c1c5366e817202e9cdf7", size = 2110990, upload-time = "2025-11-04T13:39:58.079Z" }, + { url = "https://files.pythonhosted.org/packages/aa/32/9c2e8ccb57c01111e0fd091f236c7b371c1bccea0fa85247ac55b1e2b6b6/pydantic_core-2.41.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:070259a8818988b9a84a449a2a7337c7f430a22acc0859c6b110aa7212a6d9c0", size = 1896003, upload-time = "2025-11-04T13:39:59.956Z" }, + { url = "https://files.pythonhosted.org/packages/68/b8/a01b53cb0e59139fbc9e4fda3e9724ede8de279097179be4ff31f1abb65a/pydantic_core-2.41.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e96cea19e34778f8d59fe40775a7a574d95816eb150850a85a7a4c8f4b94ac69", size = 1919200, upload-time = "2025-11-04T13:40:02.241Z" }, + { url = "https://files.pythonhosted.org/packages/38/de/8c36b5198a29bdaade07b5985e80a233a5ac27137846f3bc2d3b40a47360/pydantic_core-2.41.5-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ed2e99c456e3fadd05c991f8f437ef902e00eedf34320ba2b0842bd1c3ca3a75", size = 2052578, upload-time = "2025-11-04T13:40:04.401Z" }, + { url = "https://files.pythonhosted.org/packages/00/b5/0e8e4b5b081eac6cb3dbb7e60a65907549a1ce035a724368c330112adfdd/pydantic_core-2.41.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:65840751b72fbfd82c3c640cff9284545342a4f1eb1586ad0636955b261b0b05", size = 2208504, upload-time = "2025-11-04T13:40:06.072Z" }, + { url = "https://files.pythonhosted.org/packages/77/56/87a61aad59c7c5b9dc8caad5a41a5545cba3810c3e828708b3d7404f6cef/pydantic_core-2.41.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e536c98a7626a98feb2d3eaf75944ef6f3dbee447e1f841eae16f2f0a72d8ddc", size = 2335816, upload-time = "2025-11-04T13:40:07.835Z" }, + { url = "https://files.pythonhosted.org/packages/0d/76/941cc9f73529988688a665a5c0ecff1112b3d95ab48f81db5f7606f522d3/pydantic_core-2.41.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eceb81a8d74f9267ef4081e246ffd6d129da5d87e37a77c9bde550cb04870c1c", size = 2075366, upload-time = "2025-11-04T13:40:09.804Z" }, + { url = "https://files.pythonhosted.org/packages/d3/43/ebef01f69baa07a482844faaa0a591bad1ef129253ffd0cdaa9d8a7f72d3/pydantic_core-2.41.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d38548150c39b74aeeb0ce8ee1d8e82696f4a4e16ddc6de7b1d8823f7de4b9b5", size = 2171698, upload-time = "2025-11-04T13:40:12.004Z" }, + { url = "https://files.pythonhosted.org/packages/b1/87/41f3202e4193e3bacfc2c065fab7706ebe81af46a83d3e27605029c1f5a6/pydantic_core-2.41.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:c23e27686783f60290e36827f9c626e63154b82b116d7fe9adba1fda36da706c", size = 2132603, upload-time = "2025-11-04T13:40:13.868Z" }, + { url = "https://files.pythonhosted.org/packages/49/7d/4c00df99cb12070b6bccdef4a195255e6020a550d572768d92cc54dba91a/pydantic_core-2.41.5-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:482c982f814460eabe1d3bb0adfdc583387bd4691ef00b90575ca0d2b6fe2294", size = 2329591, upload-time = "2025-11-04T13:40:15.672Z" }, + { url = "https://files.pythonhosted.org/packages/cc/6a/ebf4b1d65d458f3cda6a7335d141305dfa19bdc61140a884d165a8a1bbc7/pydantic_core-2.41.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:bfea2a5f0b4d8d43adf9d7b8bf019fb46fdd10a2e5cde477fbcb9d1fa08c68e1", size = 2319068, upload-time = "2025-11-04T13:40:17.532Z" }, + { url = "https://files.pythonhosted.org/packages/49/3b/774f2b5cd4192d5ab75870ce4381fd89cf218af999515baf07e7206753f0/pydantic_core-2.41.5-cp312-cp312-win32.whl", hash = "sha256:b74557b16e390ec12dca509bce9264c3bbd128f8a2c376eaa68003d7f327276d", size = 1985908, upload-time = "2025-11-04T13:40:19.309Z" }, + { url = "https://files.pythonhosted.org/packages/86/45/00173a033c801cacf67c190fef088789394feaf88a98a7035b0e40d53dc9/pydantic_core-2.41.5-cp312-cp312-win_amd64.whl", hash = "sha256:1962293292865bca8e54702b08a4f26da73adc83dd1fcf26fbc875b35d81c815", size = 2020145, upload-time = "2025-11-04T13:40:21.548Z" }, + { url = "https://files.pythonhosted.org/packages/f9/22/91fbc821fa6d261b376a3f73809f907cec5ca6025642c463d3488aad22fb/pydantic_core-2.41.5-cp312-cp312-win_arm64.whl", hash = "sha256:1746d4a3d9a794cacae06a5eaaccb4b8643a131d45fbc9af23e353dc0a5ba5c3", size = 1976179, upload-time = "2025-11-04T13:40:23.393Z" }, + { url = "https://files.pythonhosted.org/packages/87/06/8806241ff1f70d9939f9af039c6c35f2360cf16e93c2ca76f184e76b1564/pydantic_core-2.41.5-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:941103c9be18ac8daf7b7adca8228f8ed6bb7a1849020f643b3a14d15b1924d9", size = 2120403, upload-time = "2025-11-04T13:40:25.248Z" }, + { url = "https://files.pythonhosted.org/packages/94/02/abfa0e0bda67faa65fef1c84971c7e45928e108fe24333c81f3bfe35d5f5/pydantic_core-2.41.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:112e305c3314f40c93998e567879e887a3160bb8689ef3d2c04b6cc62c33ac34", size = 1896206, upload-time = "2025-11-04T13:40:27.099Z" }, + { url = "https://files.pythonhosted.org/packages/15/df/a4c740c0943e93e6500f9eb23f4ca7ec9bf71b19e608ae5b579678c8d02f/pydantic_core-2.41.5-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0cbaad15cb0c90aa221d43c00e77bb33c93e8d36e0bf74760cd00e732d10a6a0", size = 1919307, upload-time = "2025-11-04T13:40:29.806Z" }, + { url = "https://files.pythonhosted.org/packages/9a/e3/6324802931ae1d123528988e0e86587c2072ac2e5394b4bc2bc34b61ff6e/pydantic_core-2.41.5-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:03ca43e12fab6023fc79d28ca6b39b05f794ad08ec2feccc59a339b02f2b3d33", size = 2063258, upload-time = "2025-11-04T13:40:33.544Z" }, + { url = "https://files.pythonhosted.org/packages/c9/d4/2230d7151d4957dd79c3044ea26346c148c98fbf0ee6ebd41056f2d62ab5/pydantic_core-2.41.5-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dc799088c08fa04e43144b164feb0c13f9a0bc40503f8df3e9fde58a3c0c101e", size = 2214917, upload-time = "2025-11-04T13:40:35.479Z" }, + { url = "https://files.pythonhosted.org/packages/e6/9f/eaac5df17a3672fef0081b6c1bb0b82b33ee89aa5cec0d7b05f52fd4a1fa/pydantic_core-2.41.5-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:97aeba56665b4c3235a0e52b2c2f5ae9cd071b8a8310ad27bddb3f7fb30e9aa2", size = 2332186, upload-time = "2025-11-04T13:40:37.436Z" }, + { url = "https://files.pythonhosted.org/packages/cf/4e/35a80cae583a37cf15604b44240e45c05e04e86f9cfd766623149297e971/pydantic_core-2.41.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:406bf18d345822d6c21366031003612b9c77b3e29ffdb0f612367352aab7d586", size = 2073164, upload-time = "2025-11-04T13:40:40.289Z" }, + { url = "https://files.pythonhosted.org/packages/bf/e3/f6e262673c6140dd3305d144d032f7bd5f7497d3871c1428521f19f9efa2/pydantic_core-2.41.5-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b93590ae81f7010dbe380cdeab6f515902ebcbefe0b9327cc4804d74e93ae69d", size = 2179146, upload-time = "2025-11-04T13:40:42.809Z" }, + { url = "https://files.pythonhosted.org/packages/75/c7/20bd7fc05f0c6ea2056a4565c6f36f8968c0924f19b7d97bbfea55780e73/pydantic_core-2.41.5-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:01a3d0ab748ee531f4ea6c3e48ad9dac84ddba4b0d82291f87248f2f9de8d740", size = 2137788, upload-time = "2025-11-04T13:40:44.752Z" }, + { url = "https://files.pythonhosted.org/packages/3a/8d/34318ef985c45196e004bc46c6eab2eda437e744c124ef0dbe1ff2c9d06b/pydantic_core-2.41.5-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:6561e94ba9dacc9c61bce40e2d6bdc3bfaa0259d3ff36ace3b1e6901936d2e3e", size = 2340133, upload-time = "2025-11-04T13:40:46.66Z" }, + { url = "https://files.pythonhosted.org/packages/9c/59/013626bf8c78a5a5d9350d12e7697d3d4de951a75565496abd40ccd46bee/pydantic_core-2.41.5-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:915c3d10f81bec3a74fbd4faebe8391013ba61e5a1a8d48c4455b923bdda7858", size = 2324852, upload-time = "2025-11-04T13:40:48.575Z" }, + { url = "https://files.pythonhosted.org/packages/1a/d9/c248c103856f807ef70c18a4f986693a46a8ffe1602e5d361485da502d20/pydantic_core-2.41.5-cp313-cp313-win32.whl", hash = "sha256:650ae77860b45cfa6e2cdafc42618ceafab3a2d9a3811fcfbd3bbf8ac3c40d36", size = 1994679, upload-time = "2025-11-04T13:40:50.619Z" }, + { url = "https://files.pythonhosted.org/packages/9e/8b/341991b158ddab181cff136acd2552c9f35bd30380422a639c0671e99a91/pydantic_core-2.41.5-cp313-cp313-win_amd64.whl", hash = "sha256:79ec52ec461e99e13791ec6508c722742ad745571f234ea6255bed38c6480f11", size = 2019766, upload-time = "2025-11-04T13:40:52.631Z" }, + { url = "https://files.pythonhosted.org/packages/73/7d/f2f9db34af103bea3e09735bb40b021788a5e834c81eedb541991badf8f5/pydantic_core-2.41.5-cp313-cp313-win_arm64.whl", hash = "sha256:3f84d5c1b4ab906093bdc1ff10484838aca54ef08de4afa9de0f5f14d69639cd", size = 1981005, upload-time = "2025-11-04T13:40:54.734Z" }, + { url = "https://files.pythonhosted.org/packages/09/32/59b0c7e63e277fa7911c2fc70ccfb45ce4b98991e7ef37110663437005af/pydantic_core-2.41.5-graalpy312-graalpy250_312_native-macosx_10_12_x86_64.whl", hash = "sha256:7da7087d756b19037bc2c06edc6c170eeef3c3bafcb8f532ff17d64dc427adfd", size = 2110495, upload-time = "2025-11-04T13:42:49.689Z" }, + { url = "https://files.pythonhosted.org/packages/aa/81/05e400037eaf55ad400bcd318c05bb345b57e708887f07ddb2d20e3f0e98/pydantic_core-2.41.5-graalpy312-graalpy250_312_native-macosx_11_0_arm64.whl", hash = "sha256:aabf5777b5c8ca26f7824cb4a120a740c9588ed58df9b2d196ce92fba42ff8dc", size = 1915388, upload-time = "2025-11-04T13:42:52.215Z" }, + { url = "https://files.pythonhosted.org/packages/6e/0d/e3549b2399f71d56476b77dbf3cf8937cec5cd70536bdc0e374a421d0599/pydantic_core-2.41.5-graalpy312-graalpy250_312_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c007fe8a43d43b3969e8469004e9845944f1a80e6acd47c150856bb87f230c56", size = 1942879, upload-time = "2025-11-04T13:42:56.483Z" }, + { url = "https://files.pythonhosted.org/packages/f7/07/34573da085946b6a313d7c42f82f16e8920bfd730665de2d11c0c37a74b5/pydantic_core-2.41.5-graalpy312-graalpy250_312_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:76d0819de158cd855d1cbb8fcafdf6f5cf1eb8e470abe056d5d161106e38062b", size = 2139017, upload-time = "2025-11-04T13:42:59.471Z" }, +] + +[[package]] +name = "pydantic-extra-types" +version = "2.11.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pydantic", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "typing-extensions", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/41/d3/3be31542180c0300b6860129ff1e3a428f3ef580727616ce22462626129b/pydantic_extra_types-2.11.2.tar.gz", hash = "sha256:3a2b83b61fe920925688e7838b59caa90a45637d1dbba2b1364b8d1f7ff72a0a", size = 203929, upload-time = "2026-04-05T20:50:51.556Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/92/a4/7b6ab05c18d6c6e682382a0f0235301684452c4131a869f45961d1d032c9/pydantic_extra_types-2.11.2-py3-none-any.whl", hash = "sha256:683b8943252543e49760f89733b1519bc62f31d1a287ebbdc5a7b7959fb4acfd", size = 82851, upload-time = "2026-04-05T20:50:50.036Z" }, +] + +[package.optional-dependencies] +pycountry = [ + { name = "pycountry", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] + [[package]] name = "pydoclint" version = "0.8.3" @@ -2630,6 +3678,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/87/6f/cc2b231dc78d8c3aaa674a676db190b8f8071c50134af8f8cf39b9b8e8df/pydoclint-0.8.3-py3-none-any.whl", hash = "sha256:5fc9b82d0d515afce0908cb70e8ff695a68b19042785c248c4f227ad66b4a164", size = 79075, upload-time = "2025-11-26T06:53:42.129Z" }, ] +[[package]] +name = "pydub" +version = "0.25.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/fe/9a/e6bca0eed82db26562c73b5076539a4a08d3cffd19c3cc5913a3e61145fd/pydub-0.25.1.tar.gz", hash = "sha256:980a33ce9949cab2a569606b65674d748ecbca4f0796887fd6f46173a7b0d30f", size = 38326, upload-time = "2021-03-10T02:09:54.659Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a6/53/d78dc063216e62fc55f6b2eebb447f6a4b0a59f55c8406376f76bf959b08/pydub-0.25.1-py2.py3-none-any.whl", hash = "sha256:65617e33033874b59d87db603aa1ed450633288aefead953b30bded59cb599a6", size = 32327, upload-time = "2021-03-10T02:09:53.503Z" }, +] + [[package]] name = "pyflakes" version = "3.4.0" @@ -2648,6 +3705,33 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl", hash = "sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b", size = 1225217, upload-time = "2025-06-21T13:39:07.939Z" }, ] +[[package]] +name = "pyjwt" +version = "2.12.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c2/27/a3b6e5bf6ff856d2509292e95c8f57f0df7017cf5394921fc4e4ef40308a/pyjwt-2.12.1.tar.gz", hash = "sha256:c74a7a2adf861c04d002db713dd85f84beb242228e671280bf709d765b03672b", size = 102564, upload-time = "2026-03-13T19:27:37.25Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e5/7a/8dd906bd22e79e47397a61742927f6747fe93242ef86645ee9092e610244/pyjwt-2.12.1-py3-none-any.whl", hash = "sha256:28ca37c070cad8ba8cd9790cd940535d40274d22f80ab87f3ac6a713e6e8454c", size = 29726, upload-time = "2026-03-13T19:27:35.677Z" }, +] + +[package.optional-dependencies] +crypto = [ + { name = "cryptography", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] + +[[package]] +name = "pyopenssl" +version = "26.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cryptography", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "typing-extensions", marker = "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/8e/11/a62e1d33b373da2b2c2cd9eb508147871c80f12b1cacde3c5d314922afdd/pyopenssl-26.0.0.tar.gz", hash = "sha256:f293934e52936f2e3413b89c6ce36df66a0b34ae1ea3a053b8c5020ff2f513fc", size = 185534, upload-time = "2026-03-15T14:28:26.353Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fb/7d/d4f7d908fa8415571771b30669251d57c3cf313b36a856e6d7548ae01619/pyopenssl-26.0.0-py3-none-any.whl", hash = "sha256:df94d28498848b98cc1c0ffb8ef1e71e40210d3b0a8064c9d29571ed2904bf81", size = 57969, upload-time = "2026-03-15T14:28:24.864Z" }, +] + [[package]] name = "pyparsing" version = "3.3.2" @@ -2657,6 +3741,24 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-py3-none-any.whl", hash = "sha256:850ba148bd908d7e2411587e247a1e4f0327839c40e2e5e6d05a007ecc69911d", size = 122781, upload-time = "2026-01-21T03:57:55.912Z" }, ] +[[package]] +name = "pytablewriter" +version = "1.2.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "dataproperty", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "mbstrdecoder", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "pathvalidate", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "setuptools", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "tabledata", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "tcolorpy", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "typepy", extra = ["datetime"], marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f6/a1/617730f290f04d347103ab40bf67d317df6691b14746f6e1ea039fb57062/pytablewriter-1.2.1.tar.gz", hash = "sha256:7bd0f4f397e070e3b8a34edcf1b9257ccbb18305493d8350a5dbc9957fced959", size = 619241, upload-time = "2025-01-01T15:37:00.04Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/21/4c/c199512f01c845dfe5a7840ab3aae6c60463b5dc2a775be72502dfd9170a/pytablewriter-1.2.1-py3-none-any.whl", hash = "sha256:e906ff7ff5151d70a5f66e0f7b75642a7f2dce8d893c265b79cc9cf6bc04ddb4", size = 91083, upload-time = "2025-01-01T15:36:55.63Z" }, +] + [[package]] name = "pytest" version = "9.0.2" @@ -2701,11 +3803,11 @@ wheels = [ [[package]] name = "python-dotenv" -version = "1.2.1" +version = "1.0.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f0/26/19cadc79a718c5edbec86fd4919a6b6d3f681039a2f6d66d14be94e75fb9/python_dotenv-1.2.1.tar.gz", hash = "sha256:42667e897e16ab0d66954af0e60a9caa94f0fd4ecf3aaf6d2d260eec1aa36ad6", size = 44221, upload-time = "2025-10-26T15:12:10.434Z" } +sdist = { url = "https://files.pythonhosted.org/packages/bc/57/e84d88dfe0aec03b7a2d4327012c1627ab5f03652216c63d49846d7a6c58/python-dotenv-1.0.1.tar.gz", hash = "sha256:e324ee90a023d808f1959c46bcbc04446a10ced277783dc6ee09987c37ec10ca", size = 39115, upload-time = "2024-01-23T06:33:00.505Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/14/1b/a298b06749107c305e1fe0f814c6c74aea7b2f1e10989cb30f544a1b3253/python_dotenv-1.2.1-py3-none-any.whl", hash = "sha256:b81ee9561e9ca4004139c6cbba3a238c32b03e4894671e181b671e8cb8425d61", size = 21230, upload-time = "2025-10-26T15:12:09.109Z" }, + { url = "https://files.pythonhosted.org/packages/6a/3e/b68c118422ec867fa7ab88444e1274aa40681c606d59ac27de5a5588f082/python_dotenv-1.0.1-py3-none-any.whl", hash = "sha256:f7b63ef50f1b690dddf550d03497b66d609393b40b564ed0d674909a68ebf16a", size = 19863, upload-time = "2024-01-23T06:32:58.246Z" }, ] [[package]] @@ -2717,6 +3819,24 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/51/e5/fecf13f06e5e5f67e8837d777d1bc43fac0ed2b77a676804df5c34744727/python_json_logger-4.0.0-py3-none-any.whl", hash = "sha256:af09c9daf6a813aa4cc7180395f50f2a9e5fa056034c9953aec92e381c5ba1e2", size = 15548, upload-time = "2025-10-06T04:15:17.553Z" }, ] +[[package]] +name = "python-multipart" +version = "0.0.26" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/88/71/b145a380824a960ebd60e1014256dbb7d2253f2316ff2d73dfd8928ec2c3/python_multipart-0.0.26.tar.gz", hash = "sha256:08fadc45918cd615e26846437f50c5d6d23304da32c341f289a617127b081f17", size = 43501, upload-time = "2026-04-10T14:09:59.473Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9a/22/f1925cdda983ab66fc8ec6ec8014b959262747e58bdca26a4e3d1da29d56/python_multipart-0.0.26-py3-none-any.whl", hash = "sha256:c0b169f8c4484c13b0dcf2ef0ec3a4adb255c4b7d18d8e420477d2b1dd03f185", size = 28847, upload-time = "2026-04-10T14:09:58.131Z" }, +] + +[[package]] +name = "pytz" +version = "2026.1.post1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/56/db/b8721d71d945e6a8ac63c0fc900b2067181dbb50805958d4d4661cf7d277/pytz-2026.1.post1.tar.gz", hash = "sha256:3378dde6a0c3d26719182142c56e60c7f9af7e968076f31aae569d72a0358ee1", size = 321088, upload-time = "2026-03-03T07:47:50.683Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/10/99/781fe0c827be2742bcc775efefccb3b048a3a9c6ce9aec0cbf4a101677e5/pytz-2026.1.post1-py2.py3-none-any.whl", hash = "sha256:f2fd16142fda348286a75e1a524be810bb05d444e5a081f37f7affc635035f7a", size = 510489, upload-time = "2026-03-03T07:47:49.167Z" }, +] + [[package]] name = "pywinpty" version = "3.0.3" @@ -2729,10 +3849,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]] @@ -2761,24 +3877,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]] @@ -2812,16 +3910,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]] @@ -2892,53 +3980,47 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/2a/5c/83e3b1d89fa4f6e5a1bc97b4abd4a9a97b3c1ac7854164f694f5f0ba98a0/regex-2026.4.4-cp313-cp313t-win32.whl", hash = "sha256:e014a797de43d1847df957c0a2a8e861d1c17547ee08467d1db2c370b7568baa", size = 269921, upload-time = "2026-04-03T20:55:09.62Z" }, { url = "https://files.pythonhosted.org/packages/28/07/077c387121f42cdb4d92b1301133c0d93b5709d096d1669ab847dda9fe2e/regex-2026.4.4-cp313-cp313t-win_amd64.whl", hash = "sha256:b15b88b0d52b179712632832c1d6e58e5774f93717849a41096880442da41ab0", size = 281240, upload-time = "2026-04-03T20:55:11.521Z" }, { url = "https://files.pythonhosted.org/packages/9d/22/ead4a4abc7c59a4d882662aa292ca02c8b617f30b6e163bc1728879e9353/regex-2026.4.4-cp313-cp313t-win_arm64.whl", hash = "sha256:586b89cdadf7d67bf86ae3342a4dcd2b8d70a832d90c18a0ae955105caf34dbe", size = 272440, upload-time = "2026-04-03T20:55:13.365Z" }, - { url = "https://files.pythonhosted.org/packages/f0/f5/ed97c2dc47b5fbd4b73c0d7d75f9ebc8eca139f2bbef476bba35f28c0a77/regex-2026.4.4-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:2da82d643fa698e5e5210e54af90181603d5853cf469f5eedf9bfc8f59b4b8c7", size = 490343, upload-time = "2026-04-03T20:55:15.241Z" }, - { url = "https://files.pythonhosted.org/packages/80/e9/de4828a7385ec166d673a5790ad06ac48cdaa98bc0960108dd4b9cc1aef7/regex-2026.4.4-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:54a1189ad9d9357760557c91103d5e421f0a2dabe68a5cdf9103d0dcf4e00752", size = 291909, upload-time = "2026-04-03T20:55:17.558Z" }, - { url = "https://files.pythonhosted.org/packages/b4/d6/5cfbfc97f3201a4d24b596a77957e092030dcc4205894bc035cedcfce62f/regex-2026.4.4-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:76d67d5afb1fe402d10a6403bae668d000441e2ab115191a804287d53b772951", size = 289692, upload-time = "2026-04-03T20:55:20.561Z" }, - { url = "https://files.pythonhosted.org/packages/8e/ac/f2212d9fd56fe897e36d0110ba30ba2d247bd6410c5bd98499c7e5a1e1f2/regex-2026.4.4-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e7cd3e4ee8d80447a83bbc9ab0c8459781fa77087f856c3e740d7763be0df27f", size = 796979, upload-time = "2026-04-03T20:55:22.56Z" }, - { url = "https://files.pythonhosted.org/packages/c9/e3/a016c12675fbac988a60c7e1c16e67823ff0bc016beb27bd7a001dbdabc6/regex-2026.4.4-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2e19e18c568d2866d8b6a6dfad823db86193503f90823a8f66689315ba28fbe8", size = 866744, upload-time = "2026-04-03T20:55:24.646Z" }, - { url = "https://files.pythonhosted.org/packages/af/a4/0b90ca4cf17adc3cb43de80ec71018c37c88ad64987e8d0d481a95ca60b5/regex-2026.4.4-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:7698a6f38730fd1385d390d1ed07bb13dce39aa616aca6a6d89bea178464b9a4", size = 911613, upload-time = "2026-04-03T20:55:27.033Z" }, - { url = "https://files.pythonhosted.org/packages/8e/3b/2b3dac0b82d41ab43aa87c6ecde63d71189d03fe8854b8ca455a315edac3/regex-2026.4.4-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:173a66f3651cdb761018078e2d9487f4cf971232c990035ec0eb1cdc6bf929a9", size = 800551, upload-time = "2026-04-03T20:55:29.532Z" }, - { url = "https://files.pythonhosted.org/packages/25/fe/5365eb7aa0e753c4b5957815c321519ecab033c279c60e1b1ae2367fa810/regex-2026.4.4-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:fa7922bbb2cc84fa062d37723f199d4c0cd200245ce269c05db82d904db66b83", size = 776911, upload-time = "2026-04-03T20:55:31.526Z" }, - { url = "https://files.pythonhosted.org/packages/aa/b3/7fb0072156bba065e3b778a7bc7b0a6328212be5dd6a86fd207e0c4f2dab/regex-2026.4.4-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:59f67cd0a0acaf0e564c20bbd7f767286f23e91e2572c5703bf3e56ea7557edb", size = 785751, upload-time = "2026-04-03T20:55:33.797Z" }, - { url = "https://files.pythonhosted.org/packages/02/1a/9f83677eb699273e56e858f7bd95acdbee376d42f59e8bfca2fd80d79df3/regex-2026.4.4-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:475e50f3f73f73614f7cba5524d6de49dee269df00272a1b85e3d19f6d498465", size = 860484, upload-time = "2026-04-03T20:55:35.745Z" }, - { url = "https://files.pythonhosted.org/packages/3b/7a/93937507b61cfcff8b4c5857f1b452852b09f741daa9acae15c971d8554e/regex-2026.4.4-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:a1c0c7d67b64d85ac2e1879923bad2f08a08f3004055f2f406ef73c850114bd4", size = 765939, upload-time = "2026-04-03T20:55:37.972Z" }, - { url = "https://files.pythonhosted.org/packages/86/ea/81a7f968a351c6552b1670ead861e2a385be730ee28402233020c67f9e0f/regex-2026.4.4-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:1371c2ccbb744d66ee63631cc9ca12aa233d5749972626b68fe1a649dd98e566", size = 851417, upload-time = "2026-04-03T20:55:39.92Z" }, - { url = "https://files.pythonhosted.org/packages/4c/7e/323c18ce4b5b8f44517a36342961a0306e931e499febbd876bb149d900f0/regex-2026.4.4-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:59968142787042db793348a3f5b918cf24ced1f23247328530e063f89c128a95", size = 789056, upload-time = "2026-04-03T20:55:42.303Z" }, - { url = "https://files.pythonhosted.org/packages/c0/af/e7510f9b11b1913b0cd44eddb784b2d650b2af6515bfce4cffcc5bfd1d38/regex-2026.4.4-cp314-cp314-win32.whl", hash = "sha256:59efe72d37fd5a91e373e5146f187f921f365f4abc1249a5ab446a60f30dd5f8", size = 272130, upload-time = "2026-04-03T20:55:44.995Z" }, - { url = "https://files.pythonhosted.org/packages/9a/51/57dae534c915e2d3a21490e88836fa2ae79dde3b66255ecc0c0a155d2c10/regex-2026.4.4-cp314-cp314-win_amd64.whl", hash = "sha256:e0aab3ff447845049d676827d2ff714aab4f73f340e155b7de7458cf53baa5a4", size = 280992, upload-time = "2026-04-03T20:55:47.316Z" }, - { url = "https://files.pythonhosted.org/packages/0a/5e/abaf9f4c3792e34edb1434f06717fae2b07888d85cb5cec29f9204931bf8/regex-2026.4.4-cp314-cp314-win_arm64.whl", hash = "sha256:a7a5bb6aa0cf62208bb4fa079b0c756734f8ad0e333b425732e8609bd51ee22f", size = 273563, upload-time = "2026-04-03T20:55:49.273Z" }, - { url = "https://files.pythonhosted.org/packages/ff/06/35da85f9f217b9538b99cbb170738993bcc3b23784322decb77619f11502/regex-2026.4.4-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:97850d0638391bdc7d35dc1c1039974dcb921eaafa8cc935ae4d7f272b1d60b3", size = 494191, upload-time = "2026-04-03T20:55:51.258Z" }, - { url = "https://files.pythonhosted.org/packages/54/5b/1bc35f479eef8285c4baf88d8c002023efdeebb7b44a8735b36195486ae7/regex-2026.4.4-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:ee7337f88f2a580679f7bbfe69dc86c043954f9f9c541012f49abc554a962f2e", size = 293877, upload-time = "2026-04-03T20:55:53.214Z" }, - { url = "https://files.pythonhosted.org/packages/39/5b/f53b9ad17480b3ddd14c90da04bfb55ac6894b129e5dea87bcaf7d00e336/regex-2026.4.4-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7429f4e6192c11d659900c0648ba8776243bf396ab95558b8c51a345afeddde6", size = 292410, upload-time = "2026-04-03T20:55:55.736Z" }, - { url = "https://files.pythonhosted.org/packages/bb/56/52377f59f60a7c51aa4161eecf0b6032c20b461805aca051250da435ffc9/regex-2026.4.4-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:dc4f10fbd5dd13dcf4265b4cc07d69ca70280742870c97ae10093e3d66000359", size = 811831, upload-time = "2026-04-03T20:55:57.802Z" }, - { url = "https://files.pythonhosted.org/packages/dd/63/8026310bf066f702a9c361f83a8c9658f3fe4edb349f9c1e5d5273b7c40c/regex-2026.4.4-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a152560af4f9742b96f3827090f866eeec5becd4765c8e0d3473d9d280e76a5a", size = 871199, upload-time = "2026-04-03T20:56:00.333Z" }, - { url = "https://files.pythonhosted.org/packages/20/9f/a514bbb00a466dbb506d43f187a04047f7be1505f10a9a15615ead5080ee/regex-2026.4.4-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:54170b3e95339f415d54651f97df3bff7434a663912f9358237941bbf9143f55", size = 917649, upload-time = "2026-04-03T20:56:02.445Z" }, - { url = "https://files.pythonhosted.org/packages/cb/6b/8399f68dd41a2030218839b9b18360d79b86d22b9fab5ef477c7f23ca67c/regex-2026.4.4-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:07f190d65f5a72dcb9cf7106bfc3d21e7a49dd2879eda2207b683f32165e4d99", size = 816388, upload-time = "2026-04-03T20:56:04.595Z" }, - { url = "https://files.pythonhosted.org/packages/1e/9c/103963f47c24339a483b05edd568594c2be486188f688c0170fd504b2948/regex-2026.4.4-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:9a2741ce5a29d3c84b0b94261ba630ab459a1b847a0d6beca7d62d188175c790", size = 785746, upload-time = "2026-04-03T20:56:07.13Z" }, - { url = "https://files.pythonhosted.org/packages/fa/ee/7f6054c0dec0cee3463c304405e4ff42e27cff05bf36fcb34be549ab17bd/regex-2026.4.4-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:b26c30df3a28fd9793113dac7385a4deb7294a06c0f760dd2b008bd49a9139bc", size = 801483, upload-time = "2026-04-03T20:56:09.365Z" }, - { url = "https://files.pythonhosted.org/packages/30/c2/51d3d941cf6070dc00c3338ecf138615fc3cce0421c3df6abe97a08af61a/regex-2026.4.4-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:421439d1bee44b19f4583ccf42670ca464ffb90e9fdc38d37f39d1ddd1e44f1f", size = 866331, upload-time = "2026-04-03T20:56:12.039Z" }, - { url = "https://files.pythonhosted.org/packages/16/e8/76d50dcc122ac33927d939f350eebcfe3dbcbda96913e03433fc36de5e63/regex-2026.4.4-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:b40379b53ecbc747fd9bdf4a0ea14eb8188ca1bd0f54f78893a39024b28f4863", size = 772673, upload-time = "2026-04-03T20:56:14.558Z" }, - { url = "https://files.pythonhosted.org/packages/a5/6e/5f6bf75e20ea6873d05ba4ec78378c375cbe08cdec571c83fbb01606e563/regex-2026.4.4-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:08c55c13d2eef54f73eeadc33146fb0baaa49e7335eb1aff6ae1324bf0ddbe4a", size = 857146, upload-time = "2026-04-03T20:56:16.663Z" }, - { url = "https://files.pythonhosted.org/packages/0b/33/3c76d9962949e487ebba353a18e89399f292287204ac8f2f4cfc3a51c233/regex-2026.4.4-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:9776b85f510062f5a75ef112afe5f494ef1635607bf1cc220c1391e9ac2f5e81", size = 803463, upload-time = "2026-04-03T20:56:18.923Z" }, - { url = "https://files.pythonhosted.org/packages/19/eb/ef32dcd2cb69b69bc0c3e55205bce94a7def48d495358946bc42186dcccc/regex-2026.4.4-cp314-cp314t-win32.whl", hash = "sha256:385edaebde5db5be103577afc8699fea73a0e36a734ba24870be7ffa61119d74", size = 275709, upload-time = "2026-04-03T20:56:20.996Z" }, - { url = "https://files.pythonhosted.org/packages/a0/86/c291bf740945acbf35ed7dbebf8e2eea2f3f78041f6bd7cdab80cb274dc0/regex-2026.4.4-cp314-cp314t-win_amd64.whl", hash = "sha256:5d354b18839328927832e2fa5f7c95b7a3ccc39e7a681529e1685898e6436d45", size = 285622, upload-time = "2026-04-03T20:56:23.641Z" }, - { url = "https://files.pythonhosted.org/packages/d5/e7/ec846d560ae6a597115153c02ca6138a7877a1748b2072d9521c10a93e58/regex-2026.4.4-cp314-cp314t-win_arm64.whl", hash = "sha256:af0384cb01a33600c49505c27c6c57ab0b27bf84a74e28524c92ca897ebdac9d", size = 275773, upload-time = "2026-04-03T20:56:26.07Z" }, ] [[package]] -name = "requests" -version = "2.32.5" +name = "requests" +version = "2.32.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi" }, + { name = "charset-normalizer" }, + { name = "idna" }, + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c9/74/b3ff8e6c8446842c3f5c837e9c3dfcfe2018ea6ecef224c710c85ef728f4/requests-2.32.5.tar.gz", hash = "sha256:dbba0bac56e100853db0ea71b82b4dfd5fe2bf6d3754a8893c3af500cec7d7cf", size = 134517, upload-time = "2025-08-18T20:46:02.573Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1e/db/4254e3eabe8020b458f1a747140d32277ec7a271daf1d235b70dc0b4e6e3/requests-2.32.5-py3-none-any.whl", hash = "sha256:2462f94637a34fd532264295e186976db0f5d453d1cdd31473c85a6a161affb6", size = 64738, upload-time = "2025-08-18T20:46:00.542Z" }, +] + +[[package]] +name = "requests-oauthlib" +version = "2.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "oauthlib", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "requests", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/42/f2/05f29bc3913aea15eb670be136045bf5c5bbf4b99ecb839da9b422bb2c85/requests-oauthlib-2.0.0.tar.gz", hash = "sha256:b3dffaebd884d8cd778494369603a9e7b58d29111bf6b41bdc2dcd87203af4e9", size = 55650, upload-time = "2024-03-22T20:32:29.939Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3b/5d/63d4ae3b9daea098d5d6f5da83984853c1bbacd5dc826764b249fe119d24/requests_oauthlib-2.0.0-py2.py3-none-any.whl", hash = "sha256:7dd8a5c40426b779b0868c404bdef9768deccf22749cde15852df527e6269b36", size = 24179, upload-time = "2024-03-22T20:32:28.055Z" }, +] + +[[package]] +name = "responses" +version = "0.18.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "certifi" }, - { name = "charset-normalizer" }, - { name = "idna" }, - { name = "urllib3" }, + { name = "requests", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "urllib3", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/c9/74/b3ff8e6c8446842c3f5c837e9c3dfcfe2018ea6ecef224c710c85ef728f4/requests-2.32.5.tar.gz", hash = "sha256:dbba0bac56e100853db0ea71b82b4dfd5fe2bf6d3754a8893c3af500cec7d7cf", size = 134517, upload-time = "2025-08-18T20:46:02.573Z" } +sdist = { url = "https://files.pythonhosted.org/packages/03/a5/186653e51cb20fe3ac793403334d4d077fbb7bb18a9c5c2fce8304d5a2e2/responses-0.18.0.tar.gz", hash = "sha256:380cad4c1c1dc942e5e8a8eaae0b4d4edf708f4f010db8b7bcfafad1fcd254ff", size = 45885, upload-time = "2022-02-02T19:59:52.834Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/1e/db/4254e3eabe8020b458f1a747140d32277ec7a271daf1d235b70dc0b4e6e3/requests-2.32.5-py3-none-any.whl", hash = "sha256:2462f94637a34fd532264295e186976db0f5d453d1cdd31473c85a6a161affb6", size = 64738, upload-time = "2025-08-18T20:46:00.542Z" }, + { url = "https://files.pythonhosted.org/packages/79/f3/2b3a6dc5986303b3dd1bbbcf482022acb2583c428cd23f0b6d37b1a1a519/responses-0.18.0-py3-none-any.whl", hash = "sha256:15c63ad16de13ee8e7182d99c9334f64fd81f1ee79f90748d527c28f7ca9dd51", size = 38735, upload-time = "2022-02-02T19:59:52.833Z" }, ] [[package]] @@ -2987,6 +4069,19 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/14/25/b208c5683343959b670dc001595f2f3737e051da617f66c31f7c4fa93abc/rich-14.3.3-py3-none-any.whl", hash = "sha256:793431c1f8619afa7d3b52b2cdec859562b950ea0d4b6b505397612db8d5362d", size = 310458, upload-time = "2026-02-19T17:23:13.732Z" }, ] +[[package]] +name = "rouge-score" +version = "0.1.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "absl-py", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "nltk", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "numpy", version = "2.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "six", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e2/c5/9136736c37022a6ad27fea38f3111eb8f02fe75d067f9a985cc358653102/rouge_score-0.1.2.tar.gz", hash = "sha256:c7d4da2683e68c9abf0135ef915d63a46643666f848e558a1b9f7ead17ff0f04", size = 17400, upload-time = "2022-07-22T22:46:22.909Z" } + [[package]] name = "rpds-py" version = "0.30.0" @@ -3037,35 +4132,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]] @@ -3094,6 +4160,50 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/9e/6a/40fee331a52339926a92e17ae748827270b288a35ef4a15c9c8f2ec54715/ruff-0.14.14-py3-none-win_arm64.whl", hash = "sha256:56e6981a98b13a32236a72a8da421d7839221fa308b223b9283312312e5ac76c", size = 10920448, upload-time = "2026-01-22T22:30:15.417Z" }, ] +[[package]] +name = "s3fs" +version = "2025.10.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "aiobotocore", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "aiohttp", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "fsspec", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/bb/ee/7cf7de3b17ef6db10b027cc9f8a1108ceb6333e267943e666a35882b1474/s3fs-2025.10.0.tar.gz", hash = "sha256:e8be6cddc77aceea1681ece0f472c3a7f8ef71a0d2acddb1cc92bb6afa3e9e4f", size = 80383, upload-time = "2025-10-30T15:06:04.647Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2d/fc/56cba14af8ad8fd020c85b6e44328520ac55939bb1f9d01444ad470504cb/s3fs-2025.10.0-py3-none-any.whl", hash = "sha256:da7ef25efc1541f5fca8e1116361e49ea1081f83f4e8001fbd77347c625da28a", size = 30357, upload-time = "2025-10-30T15:06:03.48Z" }, +] + +[[package]] +name = "sacrebleu" +version = "2.6.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "lxml", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "numpy", version = "2.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "portalocker", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "regex", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "tabulate", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/d3/ed/d7acddcff74d690c56fe26a1f7828bdde548262828d0743414ea916c40c1/sacrebleu-2.6.0.tar.gz", hash = "sha256:91499b6cd46138d95154fff1e863c2f9be57e82f0c719d8dd718d0006cf6c566", size = 1893419, upload-time = "2026-01-12T17:17:20.799Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/06/f2/6c90ccf3ad1d09a7d662a405b274f3c93b92df59c8d6a025d26aaf34d302/sacrebleu-2.6.0-py3-none-any.whl", hash = "sha256:3edc1531575cfe4ad04ce53491a9307e234af1c3f805a1f491cbec844229a8a8", size = 100785, upload-time = "2026-01-12T17:17:18.868Z" }, +] + +[[package]] +name = "safehttpx" +version = "0.1.7" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "httpx", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/89/d1/4282284d9cf1ee873607a46442da977fc3c985059315ab23610be31d5885/safehttpx-0.1.7.tar.gz", hash = "sha256:db201c0978c41eddb8bb480f3eee59dd67304fdd91646035e9d9a720049a9d23", size = 10385, upload-time = "2025-10-24T18:30:09.783Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2e/a3/0f0b7d78e2f1eb9e8e1afbff1d2bff8d60144aee17aca51c065b516743dd/safehttpx-0.1.7-py3-none-any.whl", hash = "sha256:c4f4a162db6993464d7ca3d7cc4af0ffc6515a606dfd220b9f82c6945d869cde", size = 8959, upload-time = "2025-10-24T18:30:08.733Z" }, +] + [[package]] name = "safetensors" version = "0.7.0" @@ -3116,13 +4226,27 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/5d/e6/ec8471c8072382cb91233ba7267fd931219753bb43814cbc71757bfd4dab/safetensors-0.7.0-cp38-abi3-win_amd64.whl", hash = "sha256:d1239932053f56f3456f32eb9625590cc7582e905021f94636202a864d470755", size = 341380, upload-time = "2025-11-19T15:18:44.427Z" }, ] +[[package]] +name = "schedulefree" +version = "1.4.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "torch", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "typing-extensions", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/bd/51/d78369c32b0f3818ee7f5a04e77ed02a6bd0ba8642462f780623af0010f5/schedulefree-1.4.1.tar.gz", hash = "sha256:69ef25601d1fc0d8dd00cb36f9af78833f88b7846f1bb6ddecc9f144f3e9f7cb", size = 29281, upload-time = "2025-03-24T17:32:37.996Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/93/ef/aac74263f0252806b46f0fd5a52566ee06129744572d0958cd0a77d22b0a/schedulefree-1.4.1-py3-none-any.whl", hash = "sha256:21602d3a0d35ee190152e3d56f547ea725d316310bd198fa6108f8039386b242", size = 55068, upload-time = "2025-03-24T20:32:10.525Z" }, +] + [[package]] name = "scikit-learn" version = "1.8.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "joblib" }, - { name = "numpy" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.13'" }, + { name = "numpy", version = "2.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.13'" }, { name = "scipy" }, { name = "threadpoolctl" }, ] @@ -3146,18 +4270,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]] @@ -3165,7 +4277,8 @@ name = "scipy" version = "1.17.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "numpy" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.13'" }, + { name = "numpy", version = "2.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.13'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/56/3e/9cca699f3486ce6bc12ff46dc2031f1ec8eb9ccc9a320fdaf925f1417426/scipy-1.17.0.tar.gz", hash = "sha256:2591060c8e648d8b96439e111ac41fd8342fdeff1876be2e19dea3fe8930454e", size = 30396830, upload-time = "2026-01-10T21:34:23.009Z" } wheels = [ @@ -3199,26 +4312,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]] @@ -3227,7 +4320,8 @@ version = "0.13.2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "matplotlib" }, - { name = "numpy" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.13'" }, + { name = "numpy", version = "2.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.13'" }, { name = "pandas" }, ] sdist = { url = "https://files.pythonhosted.org/packages/86/59/a451d7420a77ab0b98f7affa3a1d78a313d2f7281a57afb1a34bae8ab412/seaborn-0.13.2.tar.gz", hash = "sha256:93e60a40988f4d65e9f4885df477e2fdaff6b73a9ded434c1ab356dd57eefff7", size = 1457696, upload-time = "2024-01-25T13:21:52.551Z" } @@ -3235,6 +4329,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/83/11/00d3c3dfc25ad54e731d91449895a79e4bf2384dc3ac01809010ba88f6d5/seaborn-0.13.2-py3-none-any.whl", hash = "sha256:636f8336facf092165e27924f223d3c62ca560b1f2bb5dff7ab7fad265361987", size = 294914, upload-time = "2024-01-25T13:21:49.598Z" }, ] +[[package]] +name = "semantic-version" +version = "2.10.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7d/31/f2289ce78b9b473d582568c234e104d2a342fd658cc288a7553d83bb8595/semantic_version-2.10.0.tar.gz", hash = "sha256:bdabb6d336998cbb378d4b9db3a4b56a1e3235701dc05ea2690d9a997ed5041c", size = 52289, upload-time = "2022-05-26T13:35:23.454Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6a/23/8146aad7d88f4fcb3a6218f41a60f6c2d4e3a72de72da1825dc7c8f7877c/semantic_version-2.10.0-py2.py3-none-any.whl", hash = "sha256:de78a3b8e0feda74cabc54aab2da702113e33ac9d9eb9d2389bcf1f58b7d9177", size = 15552, upload-time = "2022-05-26T13:35:21.206Z" }, +] + [[package]] name = "send2trash" version = "2.1.0" @@ -3250,7 +4353,8 @@ version = "5.3.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "huggingface-hub" }, - { name = "numpy" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.13'" }, + { name = "numpy", version = "2.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.13'" }, { name = "scikit-learn" }, { name = "scipy" }, { name = "torch" }, @@ -3263,6 +4367,33 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/e2/9c/2fa7224058cad8df68d84bafee21716f30892cecc7ad1ad73bde61d23754/sentence_transformers-5.3.0-py3-none-any.whl", hash = "sha256:dca6b98db790274a68185d27a65801b58b4caf653a4e556b5f62827509347c7d", size = 512390, upload-time = "2026-03-12T14:53:39.035Z" }, ] +[[package]] +name = "sentencepiece" +version = "0.2.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/15/15/2e7a025fc62d764b151ae6d0f2a92f8081755ebe8d4a64099accc6f77ba6/sentencepiece-0.2.1.tar.gz", hash = "sha256:8138cec27c2f2282f4a34d9a016e3374cd40e5c6e9cb335063db66a0a3b71fad", size = 3228515, upload-time = "2025-08-12T07:00:51.718Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/89/fa/d3d5ebcba3cb9e6d3775a096251860c41a6bc53a1b9461151df83fe93255/sentencepiece-0.2.1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:99f955df238021bf11f0fc37cdb54fd5e5b5f7fd30ecc3d93fb48b6815437167", size = 1316273, upload-time = "2025-08-12T06:59:44.476Z" }, + { url = "https://files.pythonhosted.org/packages/04/88/14f2f4a2b922d8b39be45bf63d79e6cd3a9b2f248b2fcb98a69b12af12f5/sentencepiece-0.2.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0cdfecef430d985f1c2bcbfff3defd1d95dae876fbd0173376012d2d7d24044b", size = 1387881, upload-time = "2025-08-12T06:59:46.09Z" }, + { url = "https://files.pythonhosted.org/packages/2c/d2/f552be5928105588f4f4d66ee37dd4c61460d8097e62d0e2e0eec41bc61d/sentencepiece-0.2.1-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d7b670879c370d350557edabadbad1f6561a9e6968126e6debca4029e5547820", size = 1316271, upload-time = "2025-08-12T06:59:58.109Z" }, + { url = "https://files.pythonhosted.org/packages/96/df/0cfe748ace5485be740fed9476dee7877f109da32ed0d280312c94ec259f/sentencepiece-0.2.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c7f0fd2f2693309e6628aeeb2e2faf6edd221134dfccac3308ca0de01f8dab47", size = 1387882, upload-time = "2025-08-12T07:00:00.701Z" }, + { url = "https://files.pythonhosted.org/packages/bc/85/c72fd1f3c7a6010544d6ae07f8ddb38b5e2a7e33bd4318f87266c0bbafbf/sentencepiece-0.2.1-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b81a24733726e3678d2db63619acc5a8dccd074f7aa7a54ecd5ca33ca6d2d596", size = 1315722, upload-time = "2025-08-12T07:00:12.989Z" }, + { url = "https://files.pythonhosted.org/packages/4a/e8/661e5bd82a8aa641fd6c1020bd0e890ef73230a2b7215ddf9c8cd8e941c2/sentencepiece-0.2.1-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0a81799d0a68d618e89063fb423c3001a034c893069135ffe51fee439ae474d6", size = 1387452, upload-time = "2025-08-12T07:00:15.088Z" }, +] + +[[package]] +name = "sentry-sdk" +version = "2.57.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi" }, + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/4f/87/46c0406d8b5ddd026f73adaf5ab75ce144219c41a4830b52df4b9ab55f7f/sentry_sdk-2.57.0.tar.gz", hash = "sha256:4be8d1e71c32fb27f79c577a337ac8912137bba4bcbc64a4ec1da4d6d8dc5199", size = 435288, upload-time = "2026-03-31T09:39:29.264Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c9/64/982e07b93219cb52e1cca5d272cb579e2f3eb001956c9e7a9a6d106c9473/sentry_sdk-2.57.0-py2.py3-none-any.whl", hash = "sha256:812c8bf5ff3d2f0e89c82f5ce80ab3a6423e102729c4706af7413fd1eb480585", size = 456489, upload-time = "2026-03-31T09:39:27.524Z" }, +] + [[package]] name = "setuptools" version = "80.10.2" @@ -3290,6 +4421,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050, upload-time = "2024-12-04T17:35:26.475Z" }, ] +[[package]] +name = "smmap" +version = "5.0.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/1f/ea/49c993d6dfdd7338c9b1000a0f36817ed7ec84577ae2e52f890d1a4ff909/smmap-5.0.3.tar.gz", hash = "sha256:4d9debb8b99007ae47165abc08670bd74cb74b5227dda7f643eccc4e9eb5642c", size = 22506, upload-time = "2026-03-09T03:43:26.1Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c1/d4/59e74daffcb57a07668852eeeb6035af9f32cbfd7a1d2511f17d2fe6a738/smmap-5.0.3-py3-none-any.whl", hash = "sha256:c106e05d5a61449cf6ba9a1e650227ecfb141590d2a98412103ff35d89fc7b2f", size = 24390, upload-time = "2026-03-09T03:43:24.361Z" }, +] + [[package]] name = "soupsieve" version = "2.8.3" @@ -3299,6 +4439,12 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/46/2c/1462b1d0a634697ae9e55b3cecdcb64788e8b7d63f54d923fcd0bb140aed/soupsieve-2.8.3-py3-none-any.whl", hash = "sha256:ed64f2ba4eebeab06cc4962affce381647455978ffc1e36bb79a545b91f45a95", size = 37016, upload-time = "2026-01-20T04:27:01.012Z" }, ] +[[package]] +name = "sqlitedict" +version = "2.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/12/9a/7620d1e9dcb02839ed6d4b14064e609cdd7a8ae1e47289aa0456796dd9ca/sqlitedict-2.1.0.tar.gz", hash = "sha256:03d9cfb96d602996f1d4c2db2856f1224b96a9c431bdd16e78032a72940f9e8c", size = 21846, upload-time = "2022-12-03T13:39:13.102Z" } + [[package]] name = "stack-data" version = "0.6.3" @@ -3313,6 +4459,19 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/f1/7b/ce1eafaf1a76852e2ec9b22edecf1daa58175c090266e9f6c64afcd81d91/stack_data-0.6.3-py3-none-any.whl", hash = "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695", size = 24521, upload-time = "2023-09-30T13:58:03.53Z" }, ] +[[package]] +name = "starlette" +version = "1.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "typing-extensions", marker = "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/81/69/17425771797c36cded50b7fe44e850315d039f28b15901ab44839e70b593/starlette-1.0.0.tar.gz", hash = "sha256:6a4beaf1f81bb472fd19ea9b918b50dc3a77a6f2e190a12954b25e6ed5eea149", size = 2655289, upload-time = "2026-03-22T18:29:46.779Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0b/c9/584bc9651441b4ba60cc4d557d8a547b5aff901af35bda3a4ee30c819b82/starlette-1.0.0-py3-none-any.whl", hash = "sha256:d3ec55e0bb321692d275455ddfd3df75fff145d009685eb40dc91fc66b03d38b", size = 72651, upload-time = "2026-03-22T18:29:45.111Z" }, +] + [[package]] name = "sympy" version = "1.14.0" @@ -3325,6 +4484,88 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/a2/09/77d55d46fd61b4a135c444fc97158ef34a095e5681d0a6c10b75bf356191/sympy-1.14.0-py3-none-any.whl", hash = "sha256:e091cc3e99d2141a0ba2847328f5479b05d94a6635cb96148ccb3f34671bd8f5", size = 6299353, upload-time = "2025-04-27T18:04:59.103Z" }, ] +[[package]] +name = "synchronicity" +version = "0.11.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a3/26/8874d34755691994266d4a844ba8d53d10c2690ec67f246ca4d6b6f34cbb/synchronicity-0.11.1.tar.gz", hash = "sha256:3628df9ab34bd7be89b729104114841c62612c5d5ec43b76f4b7b243185ec1a8", size = 58131, upload-time = "2025-12-19T18:28:42.291Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3f/b9/71153db12f4ad029cfe9b7fbf9792ef3fc9ade4485d31a13470b52954e62/synchronicity-0.11.1-py3-none-any.whl", hash = "sha256:53959c7f8b9b852fb5ea4d3d290a47a04310ede483a4cf0f8452cb4b5fa09db2", size = 40399, upload-time = "2025-12-19T18:28:40.972Z" }, +] + +[[package]] +name = "tabledata" +version = "1.3.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "dataproperty", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "typepy", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b2/35/171c8977162f1163368406deddde4c59673b62bd0cb2f34948a02effb075/tabledata-1.3.4.tar.gz", hash = "sha256:e9649cab129d718f3bff4150083b77f8a78c30f6634a30caf692b10fdc60cb97", size = 25074, upload-time = "2024-12-31T14:12:31.198Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/08/64/fa4160151976ee4b2cf0c1217a99443ffaeb991956feddfeac9eee9952f8/tabledata-1.3.4-py3-none-any.whl", hash = "sha256:1f56e433bfdeb89f4487abfa48c4603a3b07c5d3a3c7e05ff73dd018c24bd0d4", size = 11820, upload-time = "2024-12-31T14:12:28.584Z" }, +] + +[[package]] +name = "tabulate" +version = "0.10.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/46/58/8c37dea7bbf769b20d58e7ace7e5edfe65b849442b00ffcdd56be88697c6/tabulate-0.10.0.tar.gz", hash = "sha256:e2cfde8f79420f6deeffdeda9aaec3b6bc5abce947655d17ac662b126e48a60d", size = 91754, upload-time = "2026-03-04T18:55:34.402Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/99/55/db07de81b5c630da5cbf5c7df646580ca26dfaefa593667fc6f2fe016d2e/tabulate-0.10.0-py3-none-any.whl", hash = "sha256:f0b0622e567335c8fabaaa659f1b33bcb6ddfe2e496071b743aa113f8774f2d3", size = 39814, upload-time = "2026-03-04T18:55:31.284Z" }, +] + +[[package]] +name = "tcolorpy" +version = "0.1.7" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/80/cc/44f2d81d8f9093aad81c3467a5bf5718d2b5f786e887b6e4adcfc17ec6b9/tcolorpy-0.1.7.tar.gz", hash = "sha256:0fbf6bf238890bbc2e32662aa25736769a29bf6d880328f310c910a327632614", size = 299437, upload-time = "2024-12-29T15:24:23.847Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/05/a2/ed023f2edd1e011b4d99b6727bce8253842d66c3fbf9ed0a26fc09a92571/tcolorpy-0.1.7-py3-none-any.whl", hash = "sha256:26a59d52027e175a37e0aba72efc99dda43f074db71f55b316d3de37d3251378", size = 8096, upload-time = "2024-12-29T15:24:21.33Z" }, +] + +[[package]] +name = "tensorboard" +version = "2.20.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "absl-py", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "grpcio", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "markdown", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "numpy", version = "2.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "packaging", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "pillow", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "protobuf", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "setuptools", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "tensorboard-data-server", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "werkzeug", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/9c/d9/a5db55f88f258ac669a92858b70a714bbbd5acd993820b41ec4a96a4d77f/tensorboard-2.20.0-py3-none-any.whl", hash = "sha256:9dc9f978cb84c0723acf9a345d96c184f0293d18f166bb8d59ee098e6cfaaba6", size = 5525680, upload-time = "2025-07-17T19:20:49.638Z" }, +] + +[[package]] +name = "tensorboard-data-server" +version = "0.7.2" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7a/13/e503968fefabd4c6b2650af21e110aa8466fe21432cd7c43a84577a89438/tensorboard_data_server-0.7.2-py3-none-any.whl", hash = "sha256:7e0610d205889588983836ec05dc098e80f97b7e7bbff7e994ebb78f578d0ddb", size = 2356, upload-time = "2023-10-23T21:23:32.16Z" }, + { url = "https://files.pythonhosted.org/packages/73/c6/825dab04195756cf8ff2e12698f22513b3db2f64925bdd41671bfb33aaa5/tensorboard_data_server-0.7.2-py3-none-manylinux_2_31_x86_64.whl", hash = "sha256:ef687163c24185ae9754ed5650eb5bc4d84ff257aabdc33f0cc6f74d8ba54530", size = 6590363, upload-time = "2023-10-23T21:23:35.583Z" }, +] + +[[package]] +name = "termcolor" +version = "3.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/46/79/cf31d7a93a8fdc6aa0fbb665be84426a8c5a557d9240b6239e9e11e35fc5/termcolor-3.3.0.tar.gz", hash = "sha256:348871ca648ec6a9a983a13ab626c0acce02f515b9e1983332b17af7979521c5", size = 14434, upload-time = "2025-12-29T12:55:21.882Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/33/d1/8bb87d21e9aeb323cc03034f5eaf2c8f69841e40e4853c2627edf8111ed3/termcolor-3.3.0-py3-none-any.whl", hash = "sha256:cf642efadaf0a8ebbbf4bc7a31cec2f9b5f21a9f726f4ccbb08192c9c26f43a5", size = 7734, upload-time = "2025-12-29T12:55:20.718Z" }, +] + [[package]] name = "terminado" version = "0.18.1" @@ -3348,6 +4589,30 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/32/d5/f9a850d79b0851d1d4ef6456097579a9005b31fea68726a4ae5f2d82ddd9/threadpoolctl-3.6.0-py3-none-any.whl", hash = "sha256:43a0b8fd5a2928500110039e43a5eed8480b918967083ea48dc3ab9f13c4a7fb", size = 18638, upload-time = "2025-03-13T13:49:21.846Z" }, ] +[[package]] +name = "tiktoken" +version = "0.12.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "regex", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "requests", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/7d/ab/4d017d0f76ec3171d469d80fc03dfbb4e48a4bcaddaa831b31d526f05edc/tiktoken-0.12.0.tar.gz", hash = "sha256:b18ba7ee2b093863978fcb14f74b3707cdc8d4d4d3836853ce7ec60772139931", size = 37806, upload-time = "2025-10-06T20:22:45.419Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/66/c5/ed88504d2f4a5fd6856990b230b56d85a777feab84e6129af0822f5d0f70/tiktoken-0.12.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:65b26c7a780e2139e73acc193e5c63ac754021f160df919add909c1492c0fb37", size = 1129008, upload-time = "2025-10-06T20:21:54.832Z" }, + { url = "https://files.pythonhosted.org/packages/f4/90/3dae6cc5436137ebd38944d396b5849e167896fc2073da643a49f372dc4f/tiktoken-0.12.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:edde1ec917dfd21c1f2f8046b86348b0f54a2c0547f68149d8600859598769ad", size = 1152665, upload-time = "2025-10-06T20:21:56.129Z" }, + { url = "https://files.pythonhosted.org/packages/a3/fe/26df24ce53ffde419a42f5f53d755b995c9318908288c17ec3f3448313a3/tiktoken-0.12.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:35a2f8ddd3824608b3d650a000c1ef71f730d0c56486845705a8248da00f9fe5", size = 1194230, upload-time = "2025-10-06T20:21:57.546Z" }, + { url = "https://files.pythonhosted.org/packages/20/cc/b064cae1a0e9fac84b0d2c46b89f4e57051a5f41324e385d10225a984c24/tiktoken-0.12.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:83d16643edb7fa2c99eff2ab7733508aae1eebb03d5dfc46f5565862810f24e3", size = 1254688, upload-time = "2025-10-06T20:21:58.619Z" }, + { url = "https://files.pythonhosted.org/packages/a0/70/5163fe5359b943f8db9946b62f19be2305de8c3d78a16f629d4165e2f40e/tiktoken-0.12.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:01d99484dc93b129cd0964f9d34eee953f2737301f18b3c7257bf368d7615baa", size = 1128948, upload-time = "2025-10-06T20:22:03.814Z" }, + { url = "https://files.pythonhosted.org/packages/0c/da/c028aa0babf77315e1cef357d4d768800c5f8a6de04d0eac0f377cb619fa/tiktoken-0.12.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:4a1a4fcd021f022bfc81904a911d3df0f6543b9e7627b51411da75ff2fe7a1be", size = 1151986, upload-time = "2025-10-06T20:22:05.173Z" }, + { url = "https://files.pythonhosted.org/packages/a0/5a/886b108b766aa53e295f7216b509be95eb7d60b166049ce2c58416b25f2a/tiktoken-0.12.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:981a81e39812d57031efdc9ec59fa32b2a5a5524d20d4776574c4b4bd2e9014a", size = 1194222, upload-time = "2025-10-06T20:22:06.265Z" }, + { url = "https://files.pythonhosted.org/packages/f4/f8/4db272048397636ac7a078d22773dd2795b1becee7bc4922fe6207288d57/tiktoken-0.12.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9baf52f84a3f42eef3ff4e754a0db79a13a27921b457ca9832cf944c6be4f8f3", size = 1255097, upload-time = "2025-10-06T20:22:07.403Z" }, + { url = "https://files.pythonhosted.org/packages/72/90/13da56f664286ffbae9dbcfadcc625439142675845baa62715e49b87b68b/tiktoken-0.12.0-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:fc530a28591a2d74bce821d10b418b26a094bf33839e69042a6e86ddb7a7fb27", size = 1128725, upload-time = "2025-10-06T20:22:13.541Z" }, + { url = "https://files.pythonhosted.org/packages/05/df/4f80030d44682235bdaecd7346c90f67ae87ec8f3df4a3442cb53834f7e4/tiktoken-0.12.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:06a9f4f49884139013b138920a4c393aa6556b2f8f536345f11819389c703ebb", size = 1151875, upload-time = "2025-10-06T20:22:14.559Z" }, + { url = "https://files.pythonhosted.org/packages/22/1f/ae535223a8c4ef4c0c1192e3f9b82da660be9eb66b9279e95c99288e9dab/tiktoken-0.12.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:04f0e6a985d95913cabc96a741c5ffec525a2c72e9df086ff17ebe35985c800e", size = 1194451, upload-time = "2025-10-06T20:22:15.545Z" }, + { url = "https://files.pythonhosted.org/packages/78/a7/f8ead382fce0243cb625c4f266e66c27f65ae65ee9e77f59ea1653b6d730/tiktoken-0.12.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:0ee8f9ae00c41770b5f9b0bb1235474768884ae157de3beb5439ca0fd70f3e25", size = 1253794, upload-time = "2025-10-06T20:22:16.624Z" }, +] + [[package]] name = "tinycss2" version = "1.4.0" @@ -3386,47 +4651,74 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/72/f4/0de46cfa12cdcbcd464cc59fde36912af405696f687e53a091fb432f694c/tokenizers-0.22.2-cp39-abi3-win_arm64.whl", hash = "sha256:9ce725d22864a1e965217204946f830c37876eee3b2ba6fc6255e8e903d5fcbc", size = 2612133, upload-time = "2026-01-05T10:45:17.232Z" }, ] +[[package]] +name = "toml" +version = "0.10.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/be/ba/1f744cdc819428fc6b5084ec34d9b30660f6f9daaf70eead706e3203ec3c/toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f", size = 22253, upload-time = "2020-11-01T01:40:22.204Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/44/6f/7120676b6d73228c96e17f1f794d8ab046fc910d781c8d151120c3f1569e/toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b", size = 16588, upload-time = "2020-11-01T01:40:20.672Z" }, +] + +[[package]] +name = "tomlkit" +version = "0.14.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c3/af/14b24e41977adb296d6bd1fb59402cf7d60ce364f90c890bd2ec65c43b5a/tomlkit-0.14.0.tar.gz", hash = "sha256:cf00efca415dbd57575befb1f6634c4f42d2d87dbba376128adb42c121b87064", size = 187167, upload-time = "2026-01-13T01:14:53.304Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b5/11/87d6d29fb5d237229d67973a6c9e06e048f01cf4994dee194ab0ea841814/tomlkit-0.14.0-py3-none-any.whl", hash = "sha256:592064ed85b40fa213469f81ac584f67a4f2992509a7c3ea2d632208623a3680", size = 39310, upload-time = "2026-01-13T01:14:51.965Z" }, +] + [[package]] name = "torch" -version = "2.11.0" +version = "2.8.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "cuda-bindings", marker = "sys_platform == 'linux'" }, - { name = "cuda-toolkit", extra = ["cublas", "cudart", "cufft", "cufile", "cupti", "curand", "cusolver", "cusparse", "nvjitlink", "nvrtc", "nvtx"], marker = "sys_platform == 'linux'" }, { name = "filelock" }, { name = "fsspec" }, { name = "jinja2" }, { name = "networkx" }, - { name = "nvidia-cudnn-cu13", marker = "sys_platform == 'linux'" }, - { name = "nvidia-cusparselt-cu13", marker = "sys_platform == 'linux'" }, - { name = "nvidia-nccl-cu13", marker = "sys_platform == 'linux'" }, - { name = "nvidia-nvshmem-cu13", marker = "sys_platform == 'linux'" }, + { name = "nvidia-cublas-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-cuda-cupti-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-cuda-nvrtc-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-cuda-runtime-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-cudnn-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-cufft-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-cufile-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-curand-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-cusolver-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-cusparse-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-cusparselt-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-nccl-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-nvjitlink-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "nvidia-nvtx-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, { name = "setuptools" }, { name = "sympy" }, - { name = "triton", marker = "sys_platform == 'linux'" }, + { name = "triton", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, { name = "typing-extensions" }, ] wheels = [ - { url = "https://files.pythonhosted.org/packages/6f/8b/69e3008d78e5cee2b30183340cc425081b78afc5eff3d080daab0adda9aa/torch-2.11.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4b5866312ee6e52ea625cd211dcb97d6a2cdc1131a5f15cc0d87eec948f6dd34", size = 80606338, upload-time = "2026-03-23T18:11:34.781Z" }, - { url = "https://files.pythonhosted.org/packages/13/16/42e5915ebe4868caa6bac83a8ed59db57f12e9a61b7d749d584776ed53d5/torch-2.11.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:f99924682ef0aa6a4ab3b1b76f40dc6e273fca09f367d15a524266db100a723f", size = 419731115, upload-time = "2026-03-23T18:11:06.944Z" }, - { url = "https://files.pythonhosted.org/packages/1a/c9/82638ef24d7877510f83baf821f5619a61b45568ce21c0a87a91576510aa/torch-2.11.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:0f68f4ac6d95d12e896c3b7a912b5871619542ec54d3649cf48cc1edd4dd2756", size = 530712279, upload-time = "2026-03-23T18:10:31.481Z" }, - { url = "https://files.pythonhosted.org/packages/1c/ff/6756f1c7ee302f6d202120e0f4f05b432b839908f9071157302cedfc5232/torch-2.11.0-cp312-cp312-win_amd64.whl", hash = "sha256:fbf39280699d1b869f55eac536deceaa1b60bd6788ba74f399cc67e60a5fab10", size = 114556047, upload-time = "2026-03-23T18:10:55.931Z" }, - { url = "https://files.pythonhosted.org/packages/87/89/5ea6722763acee56b045435fb84258db7375c48165ec8be7880ab2b281c5/torch-2.11.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:1e6debd97ccd3205bbb37eb806a9d8219e1139d15419982c09e23ef7d4369d18", size = 80606801, upload-time = "2026-03-23T18:10:18.649Z" }, - { url = "https://files.pythonhosted.org/packages/32/d1/8ed2173589cbfe744ed54e5a73efc107c0085ba5777ee93a5f4c1ab90553/torch-2.11.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:63a68fa59de8f87acc7e85a5478bb2dddbb3392b7593ec3e78827c793c4b73fd", size = 419732382, upload-time = "2026-03-23T18:08:30.835Z" }, - { url = "https://files.pythonhosted.org/packages/3d/e1/b73f7c575a4b8f87a5928f50a1e35416b5e27295d8be9397d5293e7e8d4c/torch-2.11.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:cc89b9b173d9adfab59fd227f0ab5e5516d9a52b658ae41d64e59d2e55a418db", size = 530711509, upload-time = "2026-03-23T18:08:47.213Z" }, - { url = "https://files.pythonhosted.org/packages/66/82/3e3fcdd388fbe54e29fd3f991f36846ff4ac90b0d0181e9c8f7236565f82/torch-2.11.0-cp313-cp313-win_amd64.whl", hash = "sha256:4dda3b3f52d121063a731ddb835f010dc137b920d7fec2778e52f60d8e4bf0cd", size = 114555842, upload-time = "2026-03-23T18:09:52.111Z" }, - { url = "https://files.pythonhosted.org/packages/db/38/8ac78069621b8c2b4979c2f96dc8409ef5e9c4189f6aac629189a78677ca/torch-2.11.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:8b394322f49af4362d4f80e424bcaca7efcd049619af03a4cf4501520bdf0fb4", size = 80959574, upload-time = "2026-03-23T18:10:14.214Z" }, - { url = "https://files.pythonhosted.org/packages/6d/6c/56bfb37073e7136e6dd86bfc6af7339946dd684e0ecf2155ac0eee687ae1/torch-2.11.0-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:2658f34ce7e2dabf4ec73b45e2ca68aedad7a5be87ea756ad656eaf32bf1e1ea", size = 419732324, upload-time = "2026-03-23T18:09:36.604Z" }, - { url = "https://files.pythonhosted.org/packages/07/f4/1b666b6d61d3394cca306ea543ed03a64aad0a201b6cd159f1d41010aeb1/torch-2.11.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:98bb213c3084cfe176302949bdc360074b18a9da7ab59ef2edc9d9f742504778", size = 530596026, upload-time = "2026-03-23T18:09:20.842Z" }, - { url = "https://files.pythonhosted.org/packages/48/6b/30d1459fa7e4b67e9e3fe1685ca1d8bb4ce7c62ef436c3a615963c6c866c/torch-2.11.0-cp313-cp313t-win_amd64.whl", hash = "sha256:a97b94bbf62992949b4730c6cd2cc9aee7b335921ee8dc207d930f2ed09ae2db", size = 114793702, upload-time = "2026-03-23T18:09:47.304Z" }, - { url = "https://files.pythonhosted.org/packages/26/0d/8603382f61abd0db35841148ddc1ffd607bf3100b11c6e1dab6d2fc44e72/torch-2.11.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:01018087326984a33b64e04c8cb5c2795f9120e0d775ada1f6638840227b04d7", size = 80573442, upload-time = "2026-03-23T18:09:10.117Z" }, - { url = "https://files.pythonhosted.org/packages/c7/86/7cd7c66cb9cec6be330fff36db5bd0eef386d80c031b581ec81be1d4b26c/torch-2.11.0-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:2bb3cc54bd0dea126b0060bb1ec9de0f9c7f7342d93d436646516b0330cd5be7", size = 419749385, upload-time = "2026-03-23T18:07:33.77Z" }, - { url = "https://files.pythonhosted.org/packages/47/e8/b98ca2d39b2e0e4730c0ee52537e488e7008025bc77ca89552ff91021f7c/torch-2.11.0-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:4dc8b3809469b6c30b411bb8c4cad3828efd26236153d9beb6a3ec500f211a60", size = 530716756, upload-time = "2026-03-23T18:07:50.02Z" }, - { url = "https://files.pythonhosted.org/packages/78/88/d4a4cda8362f8a30d1ed428564878c3cafb0d87971fbd3947d4c84552095/torch-2.11.0-cp314-cp314-win_amd64.whl", hash = "sha256:2b4e811728bd0cc58fb2b0948fe939a1ee2bf1422f6025be2fca4c7bd9d79718", size = 114552300, upload-time = "2026-03-23T18:09:05.617Z" }, - { url = "https://files.pythonhosted.org/packages/bf/46/4419098ed6d801750f26567b478fc185c3432e11e2cad712bc6b4c2ab0d0/torch-2.11.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:8245477871c3700d4370352ffec94b103cfcb737229445cf9946cddb7b2ca7cd", size = 80959460, upload-time = "2026-03-23T18:09:00.818Z" }, - { url = "https://files.pythonhosted.org/packages/fd/66/54a56a4a6ceaffb567231994a9745821d3af922a854ed33b0b3a278e0a99/torch-2.11.0-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:ab9a8482f475f9ba20e12db84b0e55e2f58784bdca43a854a6ccd3fd4b9f75e6", size = 419735835, upload-time = "2026-03-23T18:07:18.974Z" }, - { url = "https://files.pythonhosted.org/packages/b1/e7/0b6665f533aa9e337662dc190425abc0af1fe3234088f4454c52393ded61/torch-2.11.0-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:563ed3d25542d7e7bbc5b235ccfacfeb97fb470c7fee257eae599adb8005c8a2", size = 530613405, upload-time = "2026-03-23T18:08:07.014Z" }, - { url = "https://files.pythonhosted.org/packages/cf/bf/c8d12a2c86dbfd7f40fb2f56fbf5a505ccf2d9ce131eb559dfc7c51e1a04/torch-2.11.0-cp314-cp314t-win_amd64.whl", hash = "sha256:b2a43985ff5ef6ddd923bbcf99943e5f58059805787c5c9a2622bf05ca2965b0", size = 114792991, upload-time = "2026-03-23T18:08:19.216Z" }, + { url = "https://files.pythonhosted.org/packages/49/0c/2fd4df0d83a495bb5e54dca4474c4ec5f9c62db185421563deeb5dabf609/torch-2.8.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:e2fab4153768d433f8ed9279c8133a114a034a61e77a3a104dcdf54388838705", size = 101906089, upload-time = "2025-08-06T14:53:52.631Z" }, + { url = "https://files.pythonhosted.org/packages/99/a8/6acf48d48838fb8fe480597d98a0668c2beb02ee4755cc136de92a0a956f/torch-2.8.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:b2aca0939fb7e4d842561febbd4ffda67a8e958ff725c1c27e244e85e982173c", size = 887913624, upload-time = "2025-08-06T14:56:44.33Z" }, + { url = "https://files.pythonhosted.org/packages/af/8a/5c87f08e3abd825c7dfecef5a0f1d9aa5df5dd0e3fd1fa2f490a8e512402/torch-2.8.0-cp312-cp312-win_amd64.whl", hash = "sha256:2f4ac52f0130275d7517b03a33d2493bab3693c83dcfadf4f81688ea82147d2e", size = 241326087, upload-time = "2025-08-06T14:53:46.503Z" }, + { url = "https://files.pythonhosted.org/packages/be/66/5c9a321b325aaecb92d4d1855421e3a055abd77903b7dab6575ca07796db/torch-2.8.0-cp312-none-macosx_11_0_arm64.whl", hash = "sha256:619c2869db3ada2c0105487ba21b5008defcc472d23f8b80ed91ac4a380283b0", size = 73630478, upload-time = "2025-08-06T14:53:57.144Z" }, + { url = "https://files.pythonhosted.org/packages/10/4e/469ced5a0603245d6a19a556e9053300033f9c5baccf43a3d25ba73e189e/torch-2.8.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:2b2f96814e0345f5a5aed9bf9734efa913678ed19caf6dc2cddb7930672d6128", size = 101936856, upload-time = "2025-08-06T14:54:01.526Z" }, + { url = "https://files.pythonhosted.org/packages/16/82/3948e54c01b2109238357c6f86242e6ecbf0c63a1af46906772902f82057/torch-2.8.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:65616ca8ec6f43245e1f5f296603e33923f4c30f93d65e103d9e50c25b35150b", size = 887922844, upload-time = "2025-08-06T14:55:50.78Z" }, + { url = "https://files.pythonhosted.org/packages/e3/54/941ea0a860f2717d86a811adf0c2cd01b3983bdd460d0803053c4e0b8649/torch-2.8.0-cp313-cp313-win_amd64.whl", hash = "sha256:659df54119ae03e83a800addc125856effda88b016dfc54d9f65215c3975be16", size = 241330968, upload-time = "2025-08-06T14:54:45.293Z" }, + { url = "https://files.pythonhosted.org/packages/de/69/8b7b13bba430f5e21d77708b616f767683629fc4f8037564a177d20f90ed/torch-2.8.0-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:1a62a1ec4b0498930e2543535cf70b1bef8c777713de7ceb84cd79115f553767", size = 73915128, upload-time = "2025-08-06T14:54:34.769Z" }, + { url = "https://files.pythonhosted.org/packages/15/0e/8a800e093b7f7430dbaefa80075aee9158ec22e4c4fc3c1a66e4fb96cb4f/torch-2.8.0-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:83c13411a26fac3d101fe8035a6b0476ae606deb8688e904e796a3534c197def", size = 102020139, upload-time = "2025-08-06T14:54:39.047Z" }, + { url = "https://files.pythonhosted.org/packages/4a/15/5e488ca0bc6162c86a33b58642bc577c84ded17c7b72d97e49b5833e2d73/torch-2.8.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:8f0a9d617a66509ded240add3754e462430a6c1fc5589f86c17b433dd808f97a", size = 887990692, upload-time = "2025-08-06T14:56:18.286Z" }, + { url = "https://files.pythonhosted.org/packages/b4/a8/6a04e4b54472fc5dba7ca2341ab219e529f3c07b6941059fbf18dccac31f/torch-2.8.0-cp313-cp313t-win_amd64.whl", hash = "sha256:a7242b86f42be98ac674b88a4988643b9bc6145437ec8f048fea23f72feb5eca", size = 241603453, upload-time = "2025-08-06T14:55:22.945Z" }, + { url = "https://files.pythonhosted.org/packages/04/6e/650bb7f28f771af0cb791b02348db8b7f5f64f40f6829ee82aa6ce99aabe/torch-2.8.0-cp313-none-macosx_11_0_arm64.whl", hash = "sha256:7b677e17f5a3e69fdef7eb3b9da72622f8d322692930297e4ccb52fefc6c8211", size = 73632395, upload-time = "2025-08-06T14:55:28.645Z" }, +] + +[[package]] +name = "torchao" +version = "0.17.0" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/32/fe/a4036a8e80fa800c92dbcbf75f541cd4c106248b6b579db6dab1800f616a/torchao-0.17.0-cp310-abi3-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:87a418ce0ec064a821ceab83c921b501acef0ce9a6ccd1be358fcd16c3ae8c58", size = 3206172, upload-time = "2026-03-30T22:25:52.974Z" }, + { url = "https://files.pythonhosted.org/packages/c9/37/ef37ca885265e5f79a168616767dd416a3cea1cc3b28bb6b503ce4a5b652/torchao-0.17.0-py3-none-any.whl", hash = "sha256:02eba449036715b9ae784fbaa1a6f97994bb7b0421ce92d1d5d1c08e5bd6d349", size = 1200680, upload-time = "2026-03-30T22:25:54.457Z" }, ] [[package]] @@ -3460,6 +4752,25 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/16/e1/3079a9ff9b8e11b846c6ac5c8b5bfb7ff225eee721825310c91b3b50304f/tqdm-4.67.3-py3-none-any.whl", hash = "sha256:ee1e4c0e59148062281c49d80b25b67771a127c85fc9676d3be5f243206826bf", size = 78374, upload-time = "2026-02-03T17:35:50.982Z" }, ] +[[package]] +name = "trackio" +version = "0.20.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "gradio", extra = ["oauth"], marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "huggingface-hub", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "numpy", version = "2.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "orjson", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "pandas", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "pillow", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "plotly", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "pydub", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/44/24/6f76a40dad6cfd420943b04a9c6d45ff05ebfa1f7203d0771a2abc3de317/trackio-0.20.2-py3-none-any.whl", hash = "sha256:8934715dca1e3ab8f4e9fe0dcf837a4393ab24f7d576e5f22dd65dc139482098", size = 1484134, upload-time = "2026-03-30T18:17:42.345Z" }, +] + [[package]] name = "traitlets" version = "5.14.3" @@ -3471,11 +4782,12 @@ wheels = [ [[package]] name = "transformers" -version = "5.3.0" +version = "5.5.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "huggingface-hub" }, - { name = "numpy" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.13'" }, + { name = "numpy", version = "2.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.13'" }, { name = "packaging" }, { name = "pyyaml" }, { name = "regex" }, @@ -3484,26 +4796,62 @@ dependencies = [ { name = "tqdm" }, { name = "typer" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/fc/1a/70e830d53ecc96ce69cfa8de38f163712d2b43ac52fbd743f39f56025c31/transformers-5.3.0.tar.gz", hash = "sha256:009555b364029da9e2946d41f1c5de9f15e6b1df46b189b7293f33a161b9c557", size = 8830831, upload-time = "2026-03-04T17:41:46.119Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ff/9d/fb46e729b461985f41a5740167688b924a4019141e5c164bea77548d3d9e/transformers-5.5.0.tar.gz", hash = "sha256:c8db656cf51c600cd8c75f06b20ef85c72e8b8ff9abc880c5d3e8bc70e0ddcbd", size = 8237745, upload-time = "2026-04-02T16:13:08.113Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/b8/88/ae8320064e32679a5429a2c9ebbc05c2bf32cefb6e076f9b07f6d685a9b4/transformers-5.3.0-py3-none-any.whl", hash = "sha256:50ac8c89c3c7033444fb3f9f53138096b997ebb70d4b5e50a2e810bf12d3d29a", size = 10661827, upload-time = "2026-03-04T17:41:42.722Z" }, + { url = "https://files.pythonhosted.org/packages/e7/28/35f7411ff80a3640c1f4fc907dcbb6a65061ebb82f66950e38bfc9f7f740/transformers-5.5.0-py3-none-any.whl", hash = "sha256:821a9ff0961abbb29eb1eb686d78df1c85929fdf213a3fe49dc6bd94f9efa944", size = 10245591, upload-time = "2026-04-02T16:13:03.462Z" }, +] + +[package.optional-dependencies] +sentencepiece = [ + { name = "protobuf", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "sentencepiece", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, ] [[package]] name = "triton" -version = "3.6.0" +version = "3.4.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "setuptools", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/d0/66/b1eb52839f563623d185f0927eb3530ee4d5ffe9d377cdaf5346b306689e/triton-3.4.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:31c1d84a5c0ec2c0f8e8a072d7fd150cab84a9c239eaddc6706c081bfae4eb04", size = 155560068, upload-time = "2025-07-30T19:58:37.081Z" }, + { url = "https://files.pythonhosted.org/packages/30/7b/0a685684ed5322d2af0bddefed7906674f67974aa88b0fae6e82e3b766f6/triton-3.4.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:00be2964616f4c619193cb0d1b29a99bd4b001d7dc333816073f92cf2a8ccdeb", size = 155569223, upload-time = "2025-07-30T19:58:44.017Z" }, + { url = "https://files.pythonhosted.org/packages/20/63/8cb444ad5cdb25d999b7d647abac25af0ee37d292afc009940c05b82dda0/triton-3.4.0-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7936b18a3499ed62059414d7df563e6c163c5e16c3773678a3ee3d417865035d", size = 155659780, upload-time = "2025-07-30T19:58:51.171Z" }, +] + +[[package]] +name = "trl" +version = "0.29.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "accelerate", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "datasets", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "packaging", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "transformers", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/69/5c/6f6d35b509e9107c9dbb6cbeee9db306c23bfcf75aaaa347b451c8bb2ecc/trl-0.29.0.tar.gz", hash = "sha256:b1c9f756a3d73c5457b7025b0c7bb9792873a87a2f3841cccf4f9d4f0e9ab273", size = 451314, upload-time = "2026-02-25T21:56:55.513Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4b/7d/ffada7c1ac6628b2fa9962207543910813a6732820a556abc13907a77823/trl-0.29.0-py3-none-any.whl", hash = "sha256:7d49cb1526c55cc1d798d921d9d91bb84a35ad5c645d6277441ffb7a30a233aa", size = 528757, upload-time = "2026-02-25T21:56:54.022Z" }, +] + +[[package]] +name = "typepy" +version = "1.3.4" source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "mbstrdecoder", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/79/59/4c39942077d7de285f762a91024dbda731be693591732977358f77d120fb/typepy-1.3.4.tar.gz", hash = "sha256:89c1f66de6c6133209c43a94d23431d320ba03ef5db18f241091ea594035d9de", size = 39558, upload-time = "2024-12-29T09:18:15.774Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/17/5d/08201db32823bdf77a0e2b9039540080b2e5c23a20706ddba942924ebcd6/triton-3.6.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:374f52c11a711fd062b4bfbb201fd9ac0a5febd28a96fb41b4a0f51dde3157f4", size = 176128243, upload-time = "2026-01-20T16:16:07.857Z" }, - { url = "https://files.pythonhosted.org/packages/ab/a8/cdf8b3e4c98132f965f88c2313a4b493266832ad47fb52f23d14d4f86bb5/triton-3.6.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:74caf5e34b66d9f3a429af689c1c7128daba1d8208df60e81106b115c00d6fca", size = 188266850, upload-time = "2026-01-20T16:00:43.041Z" }, - { url = "https://files.pythonhosted.org/packages/3c/12/34d71b350e89a204c2c7777a9bba0dcf2f19a5bfdd70b57c4dbc5ffd7154/triton-3.6.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:448e02fe6dc898e9e5aa89cf0ee5c371e99df5aa5e8ad976a80b93334f3494fd", size = 176133521, upload-time = "2026-01-20T16:16:13.321Z" }, - { url = "https://files.pythonhosted.org/packages/f9/0b/37d991d8c130ce81a8728ae3c25b6e60935838e9be1b58791f5997b24a54/triton-3.6.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:10c7f76c6e72d2ef08df639e3d0d30729112f47a56b0c81672edc05ee5116ac9", size = 188289450, upload-time = "2026-01-20T16:00:49.136Z" }, - { url = "https://files.pythonhosted.org/packages/ce/4e/41b0c8033b503fd3cfcd12392cdd256945026a91ff02452bef40ec34bee7/triton-3.6.0-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1722e172d34e32abc3eb7711d0025bb69d7959ebea84e3b7f7a341cd7ed694d6", size = 176276087, upload-time = "2026-01-20T16:16:18.989Z" }, - { url = "https://files.pythonhosted.org/packages/35/f8/9c66bfc55361ec6d0e4040a0337fb5924ceb23de4648b8a81ae9d33b2b38/triton-3.6.0-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d002e07d7180fd65e622134fbd980c9a3d4211fb85224b56a0a0efbd422ab72f", size = 188400296, upload-time = "2026-01-20T16:00:56.042Z" }, - { url = "https://files.pythonhosted.org/packages/49/55/5ecf0dcaa0f2fbbd4420f7ef227ee3cb172e91e5fede9d0ecaddc43363b4/triton-3.6.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ef5523241e7d1abca00f1d240949eebdd7c673b005edbbce0aca95b8191f1d43", size = 176138577, upload-time = "2026-01-20T16:16:25.426Z" }, - { url = "https://files.pythonhosted.org/packages/df/3d/9e7eee57b37c80cec63322c0231bb6da3cfe535a91d7a4d64896fcb89357/triton-3.6.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a17a5d5985f0ac494ed8a8e54568f092f7057ef60e1b0fa09d3fd1512064e803", size = 188273063, upload-time = "2026-01-20T16:01:07.278Z" }, - { url = "https://files.pythonhosted.org/packages/48/db/56ee649cab5eaff4757541325aca81f52d02d4a7cd3506776cad2451e060/triton-3.6.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0b3a97e8ed304dfa9bd23bb41ca04cdf6b2e617d5e782a8653d616037a5d537d", size = 176274804, upload-time = "2026-01-20T16:16:31.528Z" }, - { url = "https://files.pythonhosted.org/packages/f6/56/6113c23ff46c00aae423333eb58b3e60bdfe9179d542781955a5e1514cb3/triton-3.6.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:46bd1c1af4b6704e554cad2eeb3b0a6513a980d470ccfa63189737340c7746a7", size = 188397994, upload-time = "2026-01-20T16:01:14.236Z" }, + { url = "https://files.pythonhosted.org/packages/ee/31/e393c3830bdedd01735bd195c85ac3034b6bcaf6c18142bab60a4047ca36/typepy-1.3.4-py3-none-any.whl", hash = "sha256:d5ed3e0c7f49521bff0603dd08cf8d453371cf68d65a29d3d0038552ccc46e2e", size = 31449, upload-time = "2024-12-29T09:18:13.135Z" }, +] + +[package.optional-dependencies] +datetime = [ + { name = "packaging", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "python-dateutil", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "pytz", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, ] [[package]] @@ -3522,16 +4870,21 @@ wheels = [ ] [[package]] -name = "typer-slim" -version = "0.21.1" +name = "types-certifi" +version = "2021.10.8.3" source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "click" }, - { name = "typing-extensions" }, +sdist = { url = "https://files.pythonhosted.org/packages/52/68/943c3aeaf14624712a0357c4a67814dba5cea36d194f5c764dad7959a00c/types-certifi-2021.10.8.3.tar.gz", hash = "sha256:72cf7798d165bc0b76e1c10dd1ea3097c7063c42c21d664523b928e88b554a4f", size = 2095, upload-time = "2022-06-09T15:19:05.244Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b5/63/2463d89481e811f007b0e1cd0a91e52e141b47f9de724d20db7b861dcfec/types_certifi-2021.10.8.3-py3-none-any.whl", hash = "sha256:b2d1e325e69f71f7c78e5943d410e650b4707bb0ef32e4ddf3da37f54176e88a", size = 2136, upload-time = "2022-06-09T15:19:03.127Z" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/17/d4/064570dec6358aa9049d4708e4a10407d74c99258f8b2136bb8702303f1a/typer_slim-0.21.1.tar.gz", hash = "sha256:73495dd08c2d0940d611c5a8c04e91c2a0a98600cbd4ee19192255a233b6dbfd", size = 110478, upload-time = "2026-01-06T11:21:11.176Z" } + +[[package]] +name = "types-toml" +version = "0.10.8.20260408" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/71/9b/887564a51a84c96ba08b715570e546f0ea793df6372b736bfbc596ca5536/types_toml-0.10.8.20260408.tar.gz", hash = "sha256:6b30b031235565a12febb1388900b129f1adeabfcfa594da46d0372b2ac107ad", size = 9341, upload-time = "2026-04-08T04:27:54.394Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/c8/0a/4aca634faf693e33004796b6cee0ae2e1dba375a800c16ab8d3eff4bb800/typer_slim-0.21.1-py3-none-any.whl", hash = "sha256:6e6c31047f171ac93cc5a973c9e617dbc5ab2bddc4d0a3135dc161b4e2020e0d", size = 47444, upload-time = "2026-01-06T11:21:12.441Z" }, + { url = "https://files.pythonhosted.org/packages/56/f1/942d95ba026779bc6e3064f8b094216588dc3276cc328cf8e03a0541918d/types_toml-0.10.8.20260408-py3-none-any.whl", hash = "sha256:e958d4c660385e548705a298f17dc162baf44c8b6d6aff79aeefe75f4f77ac87", size = 9677, upload-time = "2026-04-08T04:27:53.526Z" }, ] [[package]] @@ -3543,6 +4896,18 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl", hash = "sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548", size = 44614, upload-time = "2025-08-25T13:49:24.86Z" }, ] +[[package]] +name = "typing-inspection" +version = "0.4.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/55/e3/70399cb7dd41c10ac53367ae42139cf4b1ca5f36bb3dc6c9d33acdb43655/typing_inspection-0.4.2.tar.gz", hash = "sha256:ba561c48a67c5958007083d386c3295464928b01faa735ab8547c5692e87f464", size = 75949, upload-time = "2025-10-01T02:14:41.687Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl", hash = "sha256:4ed1cacbdc298c220f1bd249ed5287caa16f34d44ef4e9c3d0cbad5b521545e7", size = 14611, upload-time = "2025-10-01T02:14:40.154Z" }, +] + [[package]] name = "tzdata" version = "2025.3" @@ -3570,6 +4935,19 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl", hash = "sha256:bf272323e553dfb2e87d9bfd225ca7b0f467b919d7bbd355436d3fd37cb0acd4", size = 131584, upload-time = "2026-01-07T16:24:42.685Z" }, ] +[[package]] +name = "uvicorn" +version = "0.44.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "h11", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/5e/da/6eee1ff8b6cbeed47eeb5229749168e81eb4b7b999a1a15a7176e51410c9/uvicorn-0.44.0.tar.gz", hash = "sha256:6c942071b68f07e178264b9152f1f16dfac5da85880c4ce06366a96d70d4f31e", size = 86947, upload-time = "2026-04-06T09:23:22.826Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b7/23/a5bbd9600dd607411fa644c06ff4951bec3a4d82c4b852374024359c19c0/uvicorn-0.44.0-py3-none-any.whl", hash = "sha256:ce937c99a2cc70279556967274414c087888e8cec9f9c94644dfca11bd3ced89", size = 69425, upload-time = "2026-04-06T09:23:21.524Z" }, +] + [[package]] name = "virtualenv" version = "20.36.1" @@ -3589,13 +4967,20 @@ name = "voice" version = "0.1.0" source = { editable = "." } dependencies = [ + { name = "accelerate" }, + { name = "axolotl", marker = "sys_platform == 'linux'" }, { name = "datasets" }, { name = "dotenv" }, { name = "huggingface-hub" }, { name = "matplotlib" }, + { name = "pandas" }, + { name = "peft" }, + { name = "pyyaml" }, { name = "scipy" }, { name = "seaborn" }, { name = "sentence-transformers" }, + { name = "transformers" }, + { name = "wandb" }, ] [package.dev-dependencies] @@ -3615,13 +5000,20 @@ dev = [ [package.metadata] requires-dist = [ + { name = "accelerate" }, + { name = "axolotl", marker = "sys_platform == 'linux'", specifier = ">=0.16.1" }, { name = "datasets", specifier = ">=4.5.0" }, { name = "dotenv", specifier = ">=0.9.9" }, { name = "huggingface-hub", specifier = ">=1.4.1" }, { name = "matplotlib", specifier = ">=3.10.8" }, + { name = "pandas" }, + { name = "peft" }, + { name = "pyyaml", specifier = ">=6.0.3" }, { name = "scipy", specifier = ">=1.17.0" }, { name = "seaborn", specifier = ">=0.13.2" }, { name = "sentence-transformers", specifier = ">=5.3.0" }, + { name = "transformers" }, + { name = "wandb", specifier = ">=0.25.1" }, ] [package.metadata.requires-dev] @@ -3639,6 +5031,70 @@ dev = [ { name = "ruff", specifier = ">=0.14.14" }, ] +[[package]] +name = "wandb" +version = "0.25.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click" }, + { name = "gitpython" }, + { name = "packaging" }, + { name = "platformdirs" }, + { name = "protobuf" }, + { name = "pydantic" }, + { name = "pyyaml" }, + { name = "requests" }, + { name = "sentry-sdk" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/60/bb/eb579bf9abac70934a014a9d4e45346aab307994f3021d201bebe5fa25ec/wandb-0.25.1.tar.gz", hash = "sha256:b2a95cd777ecbe7499599a43158834983448a0048329bc7210ef46ca18d21994", size = 43983308, upload-time = "2026-03-10T23:51:44.227Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e7/d8/873553b6818499d1b1de314067d528b892897baf0dc81fedc0e845abc2dd/wandb-0.25.1-py3-none-macosx_12_0_arm64.whl", hash = "sha256:9bb0679a3e2dcd96db9d9b6d3e17d046241d8d122974b24facb85cc93309a8c9", size = 23615900, upload-time = "2026-03-10T23:51:06.278Z" }, + { url = "https://files.pythonhosted.org/packages/71/ea/b131f319aaa5d0bf7572b6bfcff3dd89e1cf92b17eee443bbab71d12d74c/wandb-0.25.1-py3-none-macosx_12_0_x86_64.whl", hash = "sha256:0fb13ed18914027523e7b4fc20380c520e0d10da0ee452f924a13f84509fbe12", size = 25576144, upload-time = "2026-03-10T23:51:11.527Z" }, + { url = "https://files.pythonhosted.org/packages/70/5f/81508581f0bb77b0495665c1c78e77606a48e66e855ca71ba7c8ae29efa4/wandb-0.25.1-py3-none-manylinux_2_28_aarch64.whl", hash = "sha256:cc4521eb5223429ddab5e8eee9b42fdf4caabdf0bc4e0e809042720e5fbef0ed", size = 23070425, upload-time = "2026-03-10T23:51:15.71Z" }, + { url = "https://files.pythonhosted.org/packages/f2/c7/445155ef010e2e35d190797d7c36ff441e062a5b566a6da4778e22233395/wandb-0.25.1-py3-none-manylinux_2_28_x86_64.whl", hash = "sha256:e73b4c55b947edae349232d5845204d30fac88e18eb4ad1d4b96bf7cf898405a", size = 25628142, upload-time = "2026-03-10T23:51:19.326Z" }, + { url = "https://files.pythonhosted.org/packages/d5/63/f5c55ee00cf481ef1ccd3c385a0585ad52e7840d08419d4f82ddbeeea959/wandb-0.25.1-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:22b84065aa398e1624d2e5ad79e08bc4d2af41a6db61697b03b3aaba332977c6", size = 23123172, upload-time = "2026-03-10T23:51:23.418Z" }, + { url = "https://files.pythonhosted.org/packages/3e/d9/19eb7974c0e9253bcbaee655222c0f0e1a52e63e9479ee711b4208f8ac31/wandb-0.25.1-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:005c4c6b5126ef8f4b4110e5372d950918b00637d6dc4b615ad17445f9739478", size = 25714479, upload-time = "2026-03-10T23:51:27.421Z" }, + { url = "https://files.pythonhosted.org/packages/11/19/466c1d03323a4a0ed7d4036a59b18d6b6f67cb5032e444205927e226b18d/wandb-0.25.1-py3-none-win32.whl", hash = "sha256:8f2d04f16b88d65bfba9d79fb945f6c64e2686215469a841936e0972be8ec6a5", size = 24967338, upload-time = "2026-03-10T23:51:31.833Z" }, + { url = "https://files.pythonhosted.org/packages/89/22/680d34c1587f3a979c701b66d71aa7c42b4ef2fdf0774f67034e618e834e/wandb-0.25.1-py3-none-win_amd64.whl", hash = "sha256:62db5166de14456156d7a85953a58733a631228e6d4248a753605f75f75fb845", size = 24967343, upload-time = "2026-03-10T23:51:36.026Z" }, + { url = "https://files.pythonhosted.org/packages/c4/e8/76836b75d401ff5912aaf513176e64557ceaec4c4946bfd38a698ff84d48/wandb-0.25.1-py3-none-win_arm64.whl", hash = "sha256:cc7c34b70cf4b7be4d395541e82e325fd9d2be978d62c9ec01f1a7141523b6bb", size = 22080774, upload-time = "2026-03-10T23:51:40.196Z" }, +] + +[[package]] +name = "watchfiles" +version = "1.1.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c2/c9/8869df9b2a2d6c59d79220a4db37679e74f807c559ffe5265e08b227a210/watchfiles-1.1.1.tar.gz", hash = "sha256:a173cb5c16c4f40ab19cecf48a534c409f7ea983ab8fed0741304a1c0a31b3f2", size = 94440, upload-time = "2025-10-14T15:06:21.08Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4b/5b/d3b460364aeb8da471c1989238ea0e56bec24b6042a68046adf3d9ddb01c/watchfiles-1.1.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8526e8f916bb5b9a0a777c8317c23ce65de259422bba5b31325a6fa6029d33af", size = 449374, upload-time = "2025-10-14T15:04:49.179Z" }, + { url = "https://files.pythonhosted.org/packages/b9/44/5769cb62d4ed055cb17417c0a109a92f007114a4e07f30812a73a4efdb11/watchfiles-1.1.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2edc3553362b1c38d9f06242416a5d8e9fe235c204a4072e988ce2e5bb1f69f6", size = 459485, upload-time = "2025-10-14T15:04:50.155Z" }, + { url = "https://files.pythonhosted.org/packages/19/0c/286b6301ded2eccd4ffd0041a1b726afda999926cf720aab63adb68a1e36/watchfiles-1.1.1-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:30f7da3fb3f2844259cba4720c3fc7138eb0f7b659c38f3bfa65084c7fc7abce", size = 488813, upload-time = "2025-10-14T15:04:51.059Z" }, + { url = "https://files.pythonhosted.org/packages/c7/2b/8530ed41112dd4a22f4dcfdb5ccf6a1baad1ff6eed8dc5a5f09e7e8c41c7/watchfiles-1.1.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f8979280bdafff686ba5e4d8f97840f929a87ed9cdf133cbbd42f7766774d2aa", size = 594816, upload-time = "2025-10-14T15:04:52.031Z" }, + { url = "https://files.pythonhosted.org/packages/ce/d2/f5f9fb49489f184f18470d4f99f4e862a4b3e9ac2865688eb2099e3d837a/watchfiles-1.1.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dcc5c24523771db3a294c77d94771abcfcb82a0e0ee8efd910c37c59ec1b31bb", size = 475186, upload-time = "2025-10-14T15:04:53.064Z" }, + { url = "https://files.pythonhosted.org/packages/cf/68/5707da262a119fb06fbe214d82dd1fe4a6f4af32d2d14de368d0349eb52a/watchfiles-1.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1db5d7ae38ff20153d542460752ff397fcf5c96090c1230803713cf3147a6803", size = 456812, upload-time = "2025-10-14T15:04:55.174Z" }, + { url = "https://files.pythonhosted.org/packages/66/ab/3cbb8756323e8f9b6f9acb9ef4ec26d42b2109bce830cc1f3468df20511d/watchfiles-1.1.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:28475ddbde92df1874b6c5c8aaeb24ad5be47a11f87cde5a28ef3835932e3e94", size = 630196, upload-time = "2025-10-14T15:04:56.22Z" }, + { url = "https://files.pythonhosted.org/packages/78/46/7152ec29b8335f80167928944a94955015a345440f524d2dfe63fc2f437b/watchfiles-1.1.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:36193ed342f5b9842edd3532729a2ad55c4160ffcfa3700e0d54be496b70dd43", size = 622657, upload-time = "2025-10-14T15:04:57.521Z" }, + { url = "https://files.pythonhosted.org/packages/bc/11/fc2502457e0bea39a5c958d86d2cb69e407a4d00b85735ca724bfa6e0d1a/watchfiles-1.1.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:14e0b1fe858430fc0251737ef3824c54027bedb8c37c38114488b8e131cf8219", size = 449279, upload-time = "2025-10-14T15:05:04.004Z" }, + { url = "https://files.pythonhosted.org/packages/e3/1f/d66bc15ea0b728df3ed96a539c777acfcad0eb78555ad9efcaa1274688f0/watchfiles-1.1.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f27db948078f3823a6bb3b465180db8ebecf26dd5dae6f6180bd87383b6b4428", size = 459405, upload-time = "2025-10-14T15:05:04.942Z" }, + { url = "https://files.pythonhosted.org/packages/be/90/9f4a65c0aec3ccf032703e6db02d89a157462fbb2cf20dd415128251cac0/watchfiles-1.1.1-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:059098c3a429f62fc98e8ec62b982230ef2c8df68c79e826e37b895bc359a9c0", size = 488976, upload-time = "2025-10-14T15:05:05.905Z" }, + { url = "https://files.pythonhosted.org/packages/37/57/ee347af605d867f712be7029bb94c8c071732a4b44792e3176fa3c612d39/watchfiles-1.1.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bfb5862016acc9b869bb57284e6cb35fdf8e22fe59f7548858e2f971d045f150", size = 595506, upload-time = "2025-10-14T15:05:06.906Z" }, + { url = "https://files.pythonhosted.org/packages/a8/78/cc5ab0b86c122047f75e8fc471c67a04dee395daf847d3e59381996c8707/watchfiles-1.1.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:319b27255aacd9923b8a276bb14d21a5f7ff82564c744235fc5eae58d95422ae", size = 474936, upload-time = "2025-10-14T15:05:07.906Z" }, + { url = "https://files.pythonhosted.org/packages/62/da/def65b170a3815af7bd40a3e7010bf6ab53089ef1b75d05dd5385b87cf08/watchfiles-1.1.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c755367e51db90e75b19454b680903631d41f9e3607fbd941d296a020c2d752d", size = 456147, upload-time = "2025-10-14T15:05:09.138Z" }, + { url = "https://files.pythonhosted.org/packages/57/99/da6573ba71166e82d288d4df0839128004c67d2778d3b566c138695f5c0b/watchfiles-1.1.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:c22c776292a23bfc7237a98f791b9ad3144b02116ff10d820829ce62dff46d0b", size = 630007, upload-time = "2025-10-14T15:05:10.117Z" }, + { url = "https://files.pythonhosted.org/packages/a8/51/7439c4dd39511368849eb1e53279cd3454b4a4dbace80bab88feeb83c6b5/watchfiles-1.1.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:3a476189be23c3686bc2f4321dd501cb329c0a0469e77b7b534ee10129ae6374", size = 622280, upload-time = "2025-10-14T15:05:11.146Z" }, + { url = "https://files.pythonhosted.org/packages/27/0d/7c315d4bd5f2538910491a0393c56bf70d333d51bc5b34bee8e68e8cea19/watchfiles-1.1.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ce70f96a46b894b36eba678f153f052967a0d06d5b5a19b336ab0dbbd029f73e", size = 448114, upload-time = "2025-10-14T15:05:17.876Z" }, + { url = "https://files.pythonhosted.org/packages/c3/24/9e096de47a4d11bc4df41e9d1e61776393eac4cb6eb11b3e23315b78b2cc/watchfiles-1.1.1-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:cb467c999c2eff23a6417e58d75e5828716f42ed8289fe6b77a7e5a91036ca70", size = 460264, upload-time = "2025-10-14T15:05:18.962Z" }, + { url = "https://files.pythonhosted.org/packages/cc/0f/e8dea6375f1d3ba5fcb0b3583e2b493e77379834c74fd5a22d66d85d6540/watchfiles-1.1.1-cp313-cp313t-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:836398932192dae4146c8f6f737d74baeac8b70ce14831a239bdb1ca882fc261", size = 487877, upload-time = "2025-10-14T15:05:20.094Z" }, + { url = "https://files.pythonhosted.org/packages/ac/5b/df24cfc6424a12deb41503b64d42fbea6b8cb357ec62ca84a5a3476f654a/watchfiles-1.1.1-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:743185e7372b7bc7c389e1badcc606931a827112fbbd37f14c537320fca08620", size = 595176, upload-time = "2025-10-14T15:05:21.134Z" }, + { url = "https://files.pythonhosted.org/packages/8f/b5/853b6757f7347de4e9b37e8cc3289283fb983cba1ab4d2d7144694871d9c/watchfiles-1.1.1-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:afaeff7696e0ad9f02cbb8f56365ff4686ab205fcf9c4c5b6fdfaaa16549dd04", size = 473577, upload-time = "2025-10-14T15:05:22.306Z" }, + { 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" }, +] + [[package]] name = "wcwidth" version = "0.6.0" @@ -3675,6 +5131,55 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/34/db/b10e48aa8fff7407e67470363eac595018441cf32d5e1001567a7aeba5d2/websocket_client-1.9.0-py3-none-any.whl", hash = "sha256:af248a825037ef591efbf6ed20cc5faa03d3b47b9e5a2230a529eeee1c1fc3ef", size = 82616, upload-time = "2025-10-07T21:16:34.951Z" }, ] +[[package]] +name = "werkzeug" +version = "3.1.8" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markupsafe", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/dd/b2/381be8cfdee792dd117872481b6e378f85c957dd7c5bca38897b08f765fd/werkzeug-3.1.8.tar.gz", hash = "sha256:9bad61a4268dac112f1c5cd4630a56ede601b6ed420300677a869083d70a4c44", size = 875852, upload-time = "2026-04-02T18:49:14.268Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/93/8c/2e650f2afeb7ee576912636c23ddb621c91ac6a98e66dc8d29c3c69446e1/werkzeug-3.1.8-py3-none-any.whl", hash = "sha256:63a77fb8892bf28ebc3178683445222aa500e48ebad5ec77b0ad80f8726b1f50", size = 226459, upload-time = "2026-04-02T18:49:12.72Z" }, +] + +[[package]] +name = "word2number" +version = "1.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/4a/29/a31940c848521f0725f0df6b25dca8917f13a2025b0e8fcbe5d0457e45e6/word2number-1.1.zip", hash = "sha256:70e27a5d387f67b04c71fbb7621c05930b19bfd26efd6851e6e0f9969dcde7d0", size = 9723, upload-time = "2017-06-02T15:45:14.488Z" } + +[[package]] +name = "wrapt" +version = "1.17.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/95/8f/aeb76c5b46e273670962298c23e7ddde79916cb74db802131d49a85e4b7d/wrapt-1.17.3.tar.gz", hash = "sha256:f66eb08feaa410fe4eebd17f2a2c8e2e46d3476e9f8c783daa8e09e0faa666d0", size = 55547, upload-time = "2025-08-12T05:53:21.714Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9f/81/5d931d78d0eb732b95dc3ddaeeb71c8bb572fb01356e9133916cd729ecdd/wrapt-1.17.3-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:042ec3bb8f319c147b1301f2393bc19dba6e176b7da446853406d041c36c7828", size = 88036, upload-time = "2025-08-12T05:52:34.784Z" }, + { url = "https://files.pythonhosted.org/packages/ca/38/2e1785df03b3d72d34fc6252d91d9d12dc27a5c89caef3335a1bbb8908ca/wrapt-1.17.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3af60380ba0b7b5aeb329bc4e402acd25bd877e98b3727b0135cb5c2efdaefe9", size = 88156, upload-time = "2025-08-12T05:52:13.599Z" }, + { url = "https://files.pythonhosted.org/packages/b3/8b/48cdb60fe0603e34e05cffda0b2a4adab81fd43718e11111a4b0100fd7c1/wrapt-1.17.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:0b02e424deef65c9f7326d8c19220a2c9040c51dc165cddb732f16198c168396", size = 87102, upload-time = "2025-08-12T05:52:14.56Z" }, + { url = "https://files.pythonhosted.org/packages/3c/51/d81abca783b58f40a154f1b2c56db1d2d9e0d04fa2d4224e357529f57a57/wrapt-1.17.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:74afa28374a3c3a11b3b5e5fca0ae03bef8450d6aa3ab3a1e2c30e3a75d023dc", size = 87732, upload-time = "2025-08-12T05:52:36.165Z" }, + { url = "https://files.pythonhosted.org/packages/0c/37/6faf15cfa41bf1f3dba80cd3f5ccc6622dfccb660ab26ed79f0178c7497f/wrapt-1.17.3-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:6fd1ad24dc235e4ab88cda009e19bf347aabb975e44fd5c2fb22a3f6e4141277", size = 88072, upload-time = "2025-08-12T05:52:37.53Z" }, + { url = "https://files.pythonhosted.org/packages/78/f2/efe19ada4a38e4e15b6dff39c3e3f3f73f5decf901f66e6f72fe79623a06/wrapt-1.17.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0ed61b7c2d49cee3c027372df5809a59d60cf1b6c2f81ee980a091f3afed6a2d", size = 88214, upload-time = "2025-08-12T05:52:15.886Z" }, + { url = "https://files.pythonhosted.org/packages/40/90/ca86701e9de1622b16e09689fc24b76f69b06bb0150990f6f4e8b0eeb576/wrapt-1.17.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:423ed5420ad5f5529db9ce89eac09c8a2f97da18eb1c870237e84c5a5c2d60aa", size = 87105, upload-time = "2025-08-12T05:52:17.914Z" }, + { url = "https://files.pythonhosted.org/packages/fd/e0/d10bd257c9a3e15cbf5523025252cc14d77468e8ed644aafb2d6f54cb95d/wrapt-1.17.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e01375f275f010fcbf7f643b4279896d04e571889b8a5b3f848423d91bf07050", size = 87766, upload-time = "2025-08-12T05:52:39.243Z" }, + { url = "https://files.pythonhosted.org/packages/1f/f6/a933bd70f98e9cf3e08167fc5cd7aaaca49147e48411c0bd5ae701bb2194/wrapt-1.17.3-py3-none-any.whl", hash = "sha256:7171ae35d2c33d326ac19dd8facb1e82e5fd04ef8c6c0e394d7af55a55051c22", size = 23591, upload-time = "2025-08-12T05:53:20.674Z" }, +] + +[[package]] +name = "xformers" +version = "0.0.32.post2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "numpy", version = "2.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "torch", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/47/99/68d2e7a17b65a08180d6b120d1d293d5855a0c5999cb30a79fb466b49642/xformers-0.0.32.post2.tar.gz", hash = "sha256:9538be803969c6e1ca16a3ece921e472c24f79970b10be1087a389dcb66e412a", size = 12105990, upload-time = "2025-08-15T11:48:56.584Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ce/16/4ed2fbf7c20ba20565d9a1fc544c2bef39d409c8eca1949654c6ff9f8452/xformers-0.0.32.post2-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:3d1fefe0006eb00a730b3b197ff41aab085f1209b50419baab6152445f09e508", size = 117196673, upload-time = "2025-08-15T11:48:46.726Z" }, +] + [[package]] name = "xxhash" version = "3.6.0" @@ -3726,36 +5231,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/19/fa/0172e350361d61febcea941b0cc541d6e6c8d65d153e85f850a7b256ff8a/xxhash-3.6.0-cp313-cp313t-win32.whl", hash = "sha256:1244460adc3a9be84731d72b8e80625788e5815b68da3da8b83f78115a40a7ec", size = 30916, upload-time = "2025-10-02T14:35:35.107Z" }, { url = "https://files.pythonhosted.org/packages/ad/e6/e8cf858a2b19d6d45820f072eff1bea413910592ff17157cabc5f1227a16/xxhash-3.6.0-cp313-cp313t-win_amd64.whl", hash = "sha256:b1e420ef35c503869c4064f4a2f2b08ad6431ab7b229a05cce39d74268bca6b8", size = 31799, upload-time = "2025-10-02T14:35:36.165Z" }, { url = "https://files.pythonhosted.org/packages/56/15/064b197e855bfb7b343210e82490ae672f8bc7cdf3ddb02e92f64304ee8a/xxhash-3.6.0-cp313-cp313t-win_arm64.whl", hash = "sha256:ec44b73a4220623235f67a996c862049f375df3b1052d9899f40a6382c32d746", size = 28044, upload-time = "2025-10-02T14:35:37.195Z" }, - { url = "https://files.pythonhosted.org/packages/7e/5e/0138bc4484ea9b897864d59fce9be9086030825bc778b76cb5a33a906d37/xxhash-3.6.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:a40a3d35b204b7cc7643cbcf8c9976d818cb47befcfac8bbefec8038ac363f3e", size = 32754, upload-time = "2025-10-02T14:35:38.245Z" }, - { url = "https://files.pythonhosted.org/packages/18/d7/5dac2eb2ec75fd771957a13e5dda560efb2176d5203f39502a5fc571f899/xxhash-3.6.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:a54844be970d3fc22630b32d515e79a90d0a3ddb2644d8d7402e3c4c8da61405", size = 30846, upload-time = "2025-10-02T14:35:39.6Z" }, - { url = "https://files.pythonhosted.org/packages/fe/71/8bc5be2bb00deb5682e92e8da955ebe5fa982da13a69da5a40a4c8db12fb/xxhash-3.6.0-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:016e9190af8f0a4e3741343777710e3d5717427f175adfdc3e72508f59e2a7f3", size = 194343, upload-time = "2025-10-02T14:35:40.69Z" }, - { url = "https://files.pythonhosted.org/packages/e7/3b/52badfb2aecec2c377ddf1ae75f55db3ba2d321c5e164f14461c90837ef3/xxhash-3.6.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4f6f72232f849eb9d0141e2ebe2677ece15adfd0fa599bc058aad83c714bb2c6", size = 213074, upload-time = "2025-10-02T14:35:42.29Z" }, - { url = "https://files.pythonhosted.org/packages/a2/2b/ae46b4e9b92e537fa30d03dbc19cdae57ed407e9c26d163895e968e3de85/xxhash-3.6.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:63275a8aba7865e44b1813d2177e0f5ea7eadad3dd063a21f7cf9afdc7054063", size = 212388, upload-time = "2025-10-02T14:35:43.929Z" }, - { url = "https://files.pythonhosted.org/packages/f5/80/49f88d3afc724b4ac7fbd664c8452d6db51b49915be48c6982659e0e7942/xxhash-3.6.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:3cd01fa2aa00d8b017c97eb46b9a794fbdca53fc14f845f5a328c71254b0abb7", size = 445614, upload-time = "2025-10-02T14:35:45.216Z" }, - { url = "https://files.pythonhosted.org/packages/ed/ba/603ce3961e339413543d8cd44f21f2c80e2a7c5cfe692a7b1f2cccf58f3c/xxhash-3.6.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0226aa89035b62b6a86d3c68df4d7c1f47a342b8683da2b60cedcddb46c4d95b", size = 194024, upload-time = "2025-10-02T14:35:46.959Z" }, - { url = "https://files.pythonhosted.org/packages/78/d1/8e225ff7113bf81545cfdcd79eef124a7b7064a0bba53605ff39590b95c2/xxhash-3.6.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c6e193e9f56e4ca4923c61238cdaced324f0feac782544eb4c6d55ad5cc99ddd", size = 210541, upload-time = "2025-10-02T14:35:48.301Z" }, - { url = "https://files.pythonhosted.org/packages/6f/58/0f89d149f0bad89def1a8dd38feb50ccdeb643d9797ec84707091d4cb494/xxhash-3.6.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:9176dcaddf4ca963d4deb93866d739a343c01c969231dbe21680e13a5d1a5bf0", size = 198305, upload-time = "2025-10-02T14:35:49.584Z" }, - { url = "https://files.pythonhosted.org/packages/11/38/5eab81580703c4df93feb5f32ff8fa7fe1e2c51c1f183ee4e48d4bb9d3d7/xxhash-3.6.0-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:c1ce4009c97a752e682b897aa99aef84191077a9433eb237774689f14f8ec152", size = 210848, upload-time = "2025-10-02T14:35:50.877Z" }, - { url = "https://files.pythonhosted.org/packages/5e/6b/953dc4b05c3ce678abca756416e4c130d2382f877a9c30a20d08ee6a77c0/xxhash-3.6.0-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:8cb2f4f679b01513b7adbb9b1b2f0f9cdc31b70007eaf9d59d0878809f385b11", size = 414142, upload-time = "2025-10-02T14:35:52.15Z" }, - { url = "https://files.pythonhosted.org/packages/08/a9/238ec0d4e81a10eb5026d4a6972677cbc898ba6c8b9dbaec12ae001b1b35/xxhash-3.6.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:653a91d7c2ab54a92c19ccf43508b6a555440b9be1bc8be553376778be7f20b5", size = 191547, upload-time = "2025-10-02T14:35:53.547Z" }, - { url = "https://files.pythonhosted.org/packages/f1/ee/3cf8589e06c2164ac77c3bf0aa127012801128f1feebf2a079272da5737c/xxhash-3.6.0-cp314-cp314-win32.whl", hash = "sha256:a756fe893389483ee8c394d06b5ab765d96e68fbbfe6fde7aa17e11f5720559f", size = 31214, upload-time = "2025-10-02T14:35:54.746Z" }, - { url = "https://files.pythonhosted.org/packages/02/5d/a19552fbc6ad4cb54ff953c3908bbc095f4a921bc569433d791f755186f1/xxhash-3.6.0-cp314-cp314-win_amd64.whl", hash = "sha256:39be8e4e142550ef69629c9cd71b88c90e9a5db703fecbcf265546d9536ca4ad", size = 32290, upload-time = "2025-10-02T14:35:55.791Z" }, - { url = "https://files.pythonhosted.org/packages/b1/11/dafa0643bc30442c887b55baf8e73353a344ee89c1901b5a5c54a6c17d39/xxhash-3.6.0-cp314-cp314-win_arm64.whl", hash = "sha256:25915e6000338999236f1eb68a02a32c3275ac338628a7eaa5a269c401995679", size = 28795, upload-time = "2025-10-02T14:35:57.162Z" }, - { url = "https://files.pythonhosted.org/packages/2c/db/0e99732ed7f64182aef4a6fb145e1a295558deec2a746265dcdec12d191e/xxhash-3.6.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:c5294f596a9017ca5a3e3f8884c00b91ab2ad2933cf288f4923c3fd4346cf3d4", size = 32955, upload-time = "2025-10-02T14:35:58.267Z" }, - { url = "https://files.pythonhosted.org/packages/55/f4/2a7c3c68e564a099becfa44bb3d398810cc0ff6749b0d3cb8ccb93f23c14/xxhash-3.6.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:1cf9dcc4ab9cff01dfbba78544297a3a01dafd60f3bde4e2bfd016cf7e4ddc67", size = 31072, upload-time = "2025-10-02T14:35:59.382Z" }, - { url = "https://files.pythonhosted.org/packages/c6/d9/72a29cddc7250e8a5819dad5d466facb5dc4c802ce120645630149127e73/xxhash-3.6.0-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:01262da8798422d0685f7cef03b2bd3f4f46511b02830861df548d7def4402ad", size = 196579, upload-time = "2025-10-02T14:36:00.838Z" }, - { url = "https://files.pythonhosted.org/packages/63/93/b21590e1e381040e2ca305a884d89e1c345b347404f7780f07f2cdd47ef4/xxhash-3.6.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:51a73fb7cb3a3ead9f7a8b583ffd9b8038e277cdb8cb87cf890e88b3456afa0b", size = 215854, upload-time = "2025-10-02T14:36:02.207Z" }, - { url = "https://files.pythonhosted.org/packages/ce/b8/edab8a7d4fa14e924b29be877d54155dcbd8b80be85ea00d2be3413a9ed4/xxhash-3.6.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:b9c6df83594f7df8f7f708ce5ebeacfc69f72c9fbaaababf6cf4758eaada0c9b", size = 214965, upload-time = "2025-10-02T14:36:03.507Z" }, - { url = "https://files.pythonhosted.org/packages/27/67/dfa980ac7f0d509d54ea0d5a486d2bb4b80c3f1bb22b66e6a05d3efaf6c0/xxhash-3.6.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:627f0af069b0ea56f312fd5189001c24578868643203bca1abbc2c52d3a6f3ca", size = 448484, upload-time = "2025-10-02T14:36:04.828Z" }, - { url = "https://files.pythonhosted.org/packages/8c/63/8ffc2cc97e811c0ca5d00ab36604b3ea6f4254f20b7bc658ca825ce6c954/xxhash-3.6.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:aa912c62f842dfd013c5f21a642c9c10cd9f4c4e943e0af83618b4a404d9091a", size = 196162, upload-time = "2025-10-02T14:36:06.182Z" }, - { url = "https://files.pythonhosted.org/packages/4b/77/07f0e7a3edd11a6097e990f6e5b815b6592459cb16dae990d967693e6ea9/xxhash-3.6.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:b465afd7909db30168ab62afe40b2fcf79eedc0b89a6c0ab3123515dc0df8b99", size = 213007, upload-time = "2025-10-02T14:36:07.733Z" }, - { url = "https://files.pythonhosted.org/packages/ae/d8/bc5fa0d152837117eb0bef6f83f956c509332ce133c91c63ce07ee7c4873/xxhash-3.6.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:a881851cf38b0a70e7c4d3ce81fc7afd86fbc2a024f4cfb2a97cf49ce04b75d3", size = 200956, upload-time = "2025-10-02T14:36:09.106Z" }, - { url = "https://files.pythonhosted.org/packages/26/a5/d749334130de9411783873e9b98ecc46688dad5db64ca6e04b02acc8b473/xxhash-3.6.0-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:9b3222c686a919a0f3253cfc12bb118b8b103506612253b5baeaac10d8027cf6", size = 213401, upload-time = "2025-10-02T14:36:10.585Z" }, - { url = "https://files.pythonhosted.org/packages/89/72/abed959c956a4bfc72b58c0384bb7940663c678127538634d896b1195c10/xxhash-3.6.0-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:c5aa639bc113e9286137cec8fadc20e9cd732b2cc385c0b7fa673b84fc1f2a93", size = 417083, upload-time = "2025-10-02T14:36:12.276Z" }, - { url = "https://files.pythonhosted.org/packages/0c/b3/62fd2b586283b7d7d665fb98e266decadf31f058f1cf6c478741f68af0cb/xxhash-3.6.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5c1343d49ac102799905e115aee590183c3921d475356cb24b4de29a4bc56518", size = 193913, upload-time = "2025-10-02T14:36:14.025Z" }, - { url = "https://files.pythonhosted.org/packages/9a/9a/c19c42c5b3f5a4aad748a6d5b4f23df3bed7ee5445accc65a0fb3ff03953/xxhash-3.6.0-cp314-cp314t-win32.whl", hash = "sha256:5851f033c3030dd95c086b4a36a2683c2ff4a799b23af60977188b057e467119", size = 31586, upload-time = "2025-10-02T14:36:15.603Z" }, - { url = "https://files.pythonhosted.org/packages/03/d6/4cc450345be9924fd5dc8c590ceda1db5b43a0a889587b0ae81a95511360/xxhash-3.6.0-cp314-cp314t-win_amd64.whl", hash = "sha256:0444e7967dac37569052d2409b00a8860c2135cff05502df4da80267d384849f", size = 32526, upload-time = "2025-10-02T14:36:16.708Z" }, - { url = "https://files.pythonhosted.org/packages/0f/c9/7243eb3f9eaabd1a88a5a5acadf06df2d83b100c62684b7425c6a11bcaa8/xxhash-3.6.0-cp314-cp314t-win_arm64.whl", hash = "sha256:bb79b1e63f6fd84ec778a4b1916dfe0a7c3fdb986c06addd5db3a0d413819d95", size = 28898, upload-time = "2025-10-02T14:36:17.843Z" }, ] [[package]] @@ -3817,37 +5292,21 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/e0/e5/11f140a58bf4c6ad7aca69a892bff0ee638c31bea4206748fc0df4ebcb3a/yarl-1.22.0-cp313-cp313t-win32.whl", hash = "sha256:1834bb90991cc2999f10f97f5f01317f99b143284766d197e43cd5b45eb18d03", size = 86943, upload-time = "2025-10-06T14:11:10.284Z" }, { url = "https://files.pythonhosted.org/packages/31/74/8b74bae38ed7fe6793d0c15a0c8207bbb819cf287788459e5ed230996cdd/yarl-1.22.0-cp313-cp313t-win_amd64.whl", hash = "sha256:ff86011bd159a9d2dfc89c34cfd8aff12875980e3bd6a39ff097887520e60249", size = 93715, upload-time = "2025-10-06T14:11:11.739Z" }, { url = "https://files.pythonhosted.org/packages/69/66/991858aa4b5892d57aef7ee1ba6b4d01ec3b7eb3060795d34090a3ca3278/yarl-1.22.0-cp313-cp313t-win_arm64.whl", hash = "sha256:7861058d0582b847bc4e3a4a4c46828a410bca738673f35a29ba3ca5db0b473b", size = 83857, upload-time = "2025-10-06T14:11:13.586Z" }, - { url = "https://files.pythonhosted.org/packages/46/b3/e20ef504049f1a1c54a814b4b9bed96d1ac0e0610c3b4da178f87209db05/yarl-1.22.0-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:34b36c2c57124530884d89d50ed2c1478697ad7473efd59cfd479945c95650e4", size = 140520, upload-time = "2025-10-06T14:11:15.465Z" }, - { url = "https://files.pythonhosted.org/packages/e4/04/3532d990fdbab02e5ede063676b5c4260e7f3abea2151099c2aa745acc4c/yarl-1.22.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:0dd9a702591ca2e543631c2a017e4a547e38a5c0f29eece37d9097e04a7ac683", size = 93504, upload-time = "2025-10-06T14:11:17.106Z" }, - { url = "https://files.pythonhosted.org/packages/11/63/ff458113c5c2dac9a9719ac68ee7c947cb621432bcf28c9972b1c0e83938/yarl-1.22.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:594fcab1032e2d2cc3321bb2e51271e7cd2b516c7d9aee780ece81b07ff8244b", size = 94282, upload-time = "2025-10-06T14:11:19.064Z" }, - { url = "https://files.pythonhosted.org/packages/a7/bc/315a56aca762d44a6aaaf7ad253f04d996cb6b27bad34410f82d76ea8038/yarl-1.22.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f3d7a87a78d46a2e3d5b72587ac14b4c16952dd0887dbb051451eceac774411e", size = 372080, upload-time = "2025-10-06T14:11:20.996Z" }, - { url = "https://files.pythonhosted.org/packages/3f/3f/08e9b826ec2e099ea6e7c69a61272f4f6da62cb5b1b63590bb80ca2e4a40/yarl-1.22.0-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:852863707010316c973162e703bddabec35e8757e67fcb8ad58829de1ebc8590", size = 338696, upload-time = "2025-10-06T14:11:22.847Z" }, - { url = "https://files.pythonhosted.org/packages/e3/9f/90360108e3b32bd76789088e99538febfea24a102380ae73827f62073543/yarl-1.22.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:131a085a53bfe839a477c0845acf21efc77457ba2bcf5899618136d64f3303a2", size = 387121, upload-time = "2025-10-06T14:11:24.889Z" }, - { url = "https://files.pythonhosted.org/packages/98/92/ab8d4657bd5b46a38094cfaea498f18bb70ce6b63508fd7e909bd1f93066/yarl-1.22.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:078a8aefd263f4d4f923a9677b942b445a2be970ca24548a8102689a3a8ab8da", size = 394080, upload-time = "2025-10-06T14:11:27.307Z" }, - { url = "https://files.pythonhosted.org/packages/f5/e7/d8c5a7752fef68205296201f8ec2bf718f5c805a7a7e9880576c67600658/yarl-1.22.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bca03b91c323036913993ff5c738d0842fc9c60c4648e5c8d98331526df89784", size = 372661, upload-time = "2025-10-06T14:11:29.387Z" }, - { url = "https://files.pythonhosted.org/packages/b6/2e/f4d26183c8db0bb82d491b072f3127fb8c381a6206a3a56332714b79b751/yarl-1.22.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:68986a61557d37bb90d3051a45b91fa3d5c516d177dfc6dd6f2f436a07ff2b6b", size = 364645, upload-time = "2025-10-06T14:11:31.423Z" }, - { url = "https://files.pythonhosted.org/packages/80/7c/428e5812e6b87cd00ee8e898328a62c95825bf37c7fa87f0b6bb2ad31304/yarl-1.22.0-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:4792b262d585ff0dff6bcb787f8492e40698443ec982a3568c2096433660c694", size = 355361, upload-time = "2025-10-06T14:11:33.055Z" }, - { url = "https://files.pythonhosted.org/packages/ec/2a/249405fd26776f8b13c067378ef4d7dd49c9098d1b6457cdd152a99e96a9/yarl-1.22.0-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:ebd4549b108d732dba1d4ace67614b9545b21ece30937a63a65dd34efa19732d", size = 381451, upload-time = "2025-10-06T14:11:35.136Z" }, - { url = "https://files.pythonhosted.org/packages/67/a8/fb6b1adbe98cf1e2dd9fad71003d3a63a1bc22459c6e15f5714eb9323b93/yarl-1.22.0-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:f87ac53513d22240c7d59203f25cc3beac1e574c6cd681bbfd321987b69f95fd", size = 383814, upload-time = "2025-10-06T14:11:37.094Z" }, - { url = "https://files.pythonhosted.org/packages/d9/f9/3aa2c0e480fb73e872ae2814c43bc1e734740bb0d54e8cb2a95925f98131/yarl-1.22.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:22b029f2881599e2f1b06f8f1db2ee63bd309e2293ba2d566e008ba12778b8da", size = 370799, upload-time = "2025-10-06T14:11:38.83Z" }, - { url = "https://files.pythonhosted.org/packages/50/3c/af9dba3b8b5eeb302f36f16f92791f3ea62e3f47763406abf6d5a4a3333b/yarl-1.22.0-cp314-cp314-win32.whl", hash = "sha256:6a635ea45ba4ea8238463b4f7d0e721bad669f80878b7bfd1f89266e2ae63da2", size = 82990, upload-time = "2025-10-06T14:11:40.624Z" }, - { url = "https://files.pythonhosted.org/packages/ac/30/ac3a0c5bdc1d6efd1b41fa24d4897a4329b3b1e98de9449679dd327af4f0/yarl-1.22.0-cp314-cp314-win_amd64.whl", hash = "sha256:0d6e6885777af0f110b0e5d7e5dda8b704efed3894da26220b7f3d887b839a79", size = 88292, upload-time = "2025-10-06T14:11:42.578Z" }, - { url = "https://files.pythonhosted.org/packages/df/0a/227ab4ff5b998a1b7410abc7b46c9b7a26b0ca9e86c34ba4b8d8bc7c63d5/yarl-1.22.0-cp314-cp314-win_arm64.whl", hash = "sha256:8218f4e98d3c10d683584cb40f0424f4b9fd6e95610232dd75e13743b070ee33", size = 82888, upload-time = "2025-10-06T14:11:44.863Z" }, - { url = "https://files.pythonhosted.org/packages/06/5e/a15eb13db90abd87dfbefb9760c0f3f257ac42a5cac7e75dbc23bed97a9f/yarl-1.22.0-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:45c2842ff0e0d1b35a6bf1cd6c690939dacb617a70827f715232b2e0494d55d1", size = 146223, upload-time = "2025-10-06T14:11:46.796Z" }, - { url = "https://files.pythonhosted.org/packages/18/82/9665c61910d4d84f41a5bf6837597c89e665fa88aa4941080704645932a9/yarl-1.22.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:d947071e6ebcf2e2bee8fce76e10faca8f7a14808ca36a910263acaacef08eca", size = 95981, upload-time = "2025-10-06T14:11:48.845Z" }, - { url = "https://files.pythonhosted.org/packages/5d/9a/2f65743589809af4d0a6d3aa749343c4b5f4c380cc24a8e94a3c6625a808/yarl-1.22.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:334b8721303e61b00019474cc103bdac3d7b1f65e91f0bfedeec2d56dfe74b53", size = 97303, upload-time = "2025-10-06T14:11:50.897Z" }, - { url = "https://files.pythonhosted.org/packages/b0/ab/5b13d3e157505c43c3b43b5a776cbf7b24a02bc4cccc40314771197e3508/yarl-1.22.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1e7ce67c34138a058fd092f67d07a72b8e31ff0c9236e751957465a24b28910c", size = 361820, upload-time = "2025-10-06T14:11:52.549Z" }, - { url = "https://files.pythonhosted.org/packages/fb/76/242a5ef4677615cf95330cfc1b4610e78184400699bdda0acb897ef5e49a/yarl-1.22.0-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:d77e1b2c6d04711478cb1c4ab90db07f1609ccf06a287d5607fcd90dc9863acf", size = 323203, upload-time = "2025-10-06T14:11:54.225Z" }, - { url = "https://files.pythonhosted.org/packages/8c/96/475509110d3f0153b43d06164cf4195c64d16999e0c7e2d8a099adcd6907/yarl-1.22.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c4647674b6150d2cae088fc07de2738a84b8bcedebef29802cf0b0a82ab6face", size = 363173, upload-time = "2025-10-06T14:11:56.069Z" }, - { url = "https://files.pythonhosted.org/packages/c9/66/59db471aecfbd559a1fd48aedd954435558cd98c7d0da8b03cc6c140a32c/yarl-1.22.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:efb07073be061c8f79d03d04139a80ba33cbd390ca8f0297aae9cce6411e4c6b", size = 373562, upload-time = "2025-10-06T14:11:58.783Z" }, - { url = "https://files.pythonhosted.org/packages/03/1f/c5d94abc91557384719da10ff166b916107c1b45e4d0423a88457071dd88/yarl-1.22.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e51ac5435758ba97ad69617e13233da53908beccc6cfcd6c34bbed8dcbede486", size = 339828, upload-time = "2025-10-06T14:12:00.686Z" }, - { url = "https://files.pythonhosted.org/packages/5f/97/aa6a143d3afba17b6465733681c70cf175af89f76ec8d9286e08437a7454/yarl-1.22.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:33e32a0dd0c8205efa8e83d04fc9f19313772b78522d1bdc7d9aed706bfd6138", size = 347551, upload-time = "2025-10-06T14:12:02.628Z" }, - { url = "https://files.pythonhosted.org/packages/43/3c/45a2b6d80195959239a7b2a8810506d4eea5487dce61c2a3393e7fc3c52e/yarl-1.22.0-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:bf4a21e58b9cde0e401e683ebd00f6ed30a06d14e93f7c8fd059f8b6e8f87b6a", size = 334512, upload-time = "2025-10-06T14:12:04.871Z" }, - { url = "https://files.pythonhosted.org/packages/86/a0/c2ab48d74599c7c84cb104ebd799c5813de252bea0f360ffc29d270c2caa/yarl-1.22.0-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:e4b582bab49ac33c8deb97e058cd67c2c50dac0dd134874106d9c774fd272529", size = 352400, upload-time = "2025-10-06T14:12:06.624Z" }, - { url = "https://files.pythonhosted.org/packages/32/75/f8919b2eafc929567d3d8411f72bdb1a2109c01caaab4ebfa5f8ffadc15b/yarl-1.22.0-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:0b5bcc1a9c4839e7e30b7b30dd47fe5e7e44fb7054ec29b5bb8d526aa1041093", size = 357140, upload-time = "2025-10-06T14:12:08.362Z" }, - { url = "https://files.pythonhosted.org/packages/cf/72/6a85bba382f22cf78add705d8c3731748397d986e197e53ecc7835e76de7/yarl-1.22.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:c0232bce2170103ec23c454e54a57008a9a72b5d1c3105dc2496750da8cfa47c", size = 341473, upload-time = "2025-10-06T14:12:10.994Z" }, - { url = "https://files.pythonhosted.org/packages/35/18/55e6011f7c044dc80b98893060773cefcfdbf60dfefb8cb2f58b9bacbd83/yarl-1.22.0-cp314-cp314t-win32.whl", hash = "sha256:8009b3173bcd637be650922ac455946197d858b3630b6d8787aa9e5c4564533e", size = 89056, upload-time = "2025-10-06T14:12:13.317Z" }, - { url = "https://files.pythonhosted.org/packages/f9/86/0f0dccb6e59a9e7f122c5afd43568b1d31b8ab7dda5f1b01fb5c7025c9a9/yarl-1.22.0-cp314-cp314t-win_amd64.whl", hash = "sha256:9fb17ea16e972c63d25d4a97f016d235c78dd2344820eb35bc034bc32012ee27", size = 96292, upload-time = "2025-10-06T14:12:15.398Z" }, - { url = "https://files.pythonhosted.org/packages/48/b7/503c98092fb3b344a179579f55814b613c1fbb1c23b3ec14a7b008a66a6e/yarl-1.22.0-cp314-cp314t-win_arm64.whl", hash = "sha256:9f6d73c1436b934e3f01df1e1b21ff765cd1d28c77dfb9ace207f746d4610ee1", size = 85171, upload-time = "2025-10-06T14:12:16.935Z" }, { url = "https://files.pythonhosted.org/packages/73/ae/b48f95715333080afb75a4504487cbe142cae1268afc482d06692d605ae6/yarl-1.22.0-py3-none-any.whl", hash = "sha256:1380560bdba02b6b6c90de54133c81c9f2a453dee9912fe58c1dcced1edb7cff", size = 46814, upload-time = "2025-10-06T14:12:53.872Z" }, ] + +[[package]] +name = "zstandard" +version = "0.22.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cffi", marker = "platform_python_implementation == 'PyPy' and sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/5d/91/2162ab4239b3bd6743e8e407bc2442fca0d326e2d77b3f4a88d90ad5a1fa/zstandard-0.22.0.tar.gz", hash = "sha256:8226a33c542bcb54cd6bd0a366067b610b41713b64c9abec1bc4533d69f51e70", size = 660738, upload-time = "2023-11-01T06:57:31.719Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/47/44/be2d67304ba9bf4694ffcaa99d146814d70c4cb0bfc00e0e86fdfae66a31/zstandard-0.22.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a88b7df61a292603e7cd662d92565d915796b094ffb3d206579aaebac6b85d5f", size = 4918778, upload-time = "2023-11-01T06:51:53.663Z" }, + { url = "https://files.pythonhosted.org/packages/e5/01/080939755ca12ebbb7fc38b6f4ddecd5e8c416d571d4927ece1360baba2c/zstandard-0.22.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:466e6ad8caefb589ed281c076deb6f0cd330e8bc13c5035854ffb9c2014b118c", size = 5426393, upload-time = "2023-11-01T06:52:14.784Z" }, + { url = "https://files.pythonhosted.org/packages/e1/68/66f1edfa9760213e9a85cf70a6c78a9db1a9d9bf0a36c7fdf9ed117bf163/zstandard-0.22.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a1d67d0d53d2a138f9e29d8acdabe11310c185e36f0a848efa104d4e40b808e4", size = 4845899, upload-time = "2023-11-01T06:52:35.365Z" }, + { url = "https://files.pythonhosted.org/packages/cb/c5/d5f4521c5444f3d1e8bd0dc32b40766b0de1950eee46c734a3a98ddc8f96/zstandard-0.22.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:39b2853efc9403927f9065cc48c9980649462acbdf81cd4f0cb773af2fd734bc", size = 4920875, upload-time = "2023-11-01T06:52:55.355Z" }, + { url = "https://files.pythonhosted.org/packages/f9/7a/2702eb29c3851a04f42e63443420520b392e432bdb30cb21c11dac1f5eb3/zstandard-0.22.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8a1b2effa96a5f019e72874969394edd393e2fbd6414a8208fea363a22803b45", size = 5451783, upload-time = "2023-11-01T06:53:15.066Z" }, +] From c411fdb02abe92cbff63700ce90d062a39cdebb6 Mon Sep 17 00:00:00 2001 From: Fin Griffin Date: Mon, 13 Apr 2026 09:08:24 +0100 Subject: [PATCH 05/68] chore: add hf cli --- sweep/README.md | 15 ++++++++------- sweep/sweep.py | 6 +++--- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/sweep/README.md b/sweep/README.md index e74af0e..fb7fd54 100644 --- a/sweep/README.md +++ b/sweep/README.md @@ -5,11 +5,12 @@ LoRA rank, learning rate, batch size, and target layer configurations. ## Setup on the H100 -**1. Clone the repo and install dependencies** +**1. Clone the repo, install dependencies, and activate the venv** ```bash git clone && cd voice uv sync +source .venv/bin/activate ``` **2. Set environment variables** @@ -24,15 +25,15 @@ WANDB_API_KEY=... **3. Log in to Hugging Face and W&B** ```bash -uv run huggingface-cli login -uv run wandb login +huggingface-cli login +wandb login ``` **4. Verify the grid looks correct** ```bash cd sweep -uv run python sweep.py --dry-run +python sweep.py --dry-run ``` ## Running the sweep @@ -42,9 +43,9 @@ Start a tmux session so the sweep survives SSH disconnection: ```bash tmux new -s sweep cd sweep -uv run python sweep.py +python sweep.py # Override GPU if needed (default is device 3): -# uv run python sweep.py --device 0 +# python sweep.py --device 0 # Ctrl+B, D → detach (safe to close laptop) # tmux attach -t sweep → reconnect later ``` @@ -57,7 +58,7 @@ Progress is logged to `sweep.log` and to the W&B project `VOICE`. it will skip completed runs and retry failed ones: ```bash -uv run python sweep.py +python sweep.py ``` ## Outputs diff --git a/sweep/sweep.py b/sweep/sweep.py index df5052d..6a81a9b 100644 --- a/sweep/sweep.py +++ b/sweep/sweep.py @@ -9,9 +9,9 @@ Usage (inside tmux on the H100):: - uv run python sweep.py - uv run python sweep.py --dry-run # print grid without training - uv run python sweep.py --device 0 # override GPU (default: 3) + python sweep.py + python sweep.py --dry-run # print grid without training + python sweep.py --device 0 # override GPU (default: 3) """ import argparse From 7df07a6f7e4aa29fbdfbbf1a7da38705dfe1b42c Mon Sep 17 00:00:00 2001 From: Fin Griffin Date: Mon, 13 Apr 2026 09:15:32 +0100 Subject: [PATCH 06/68] chore: update README.md --- sweep/README.md | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/sweep/README.md b/sweep/README.md index fb7fd54..6653835 100644 --- a/sweep/README.md +++ b/sweep/README.md @@ -13,20 +13,13 @@ uv sync source .venv/bin/activate ``` -**2. Set environment variables** - -Create a `.env` file in the `sweep/` directory (or export directly): - -```bash -HF_TOKEN=hf_... -WANDB_API_KEY=... -``` - -**3. Log in to Hugging Face and W&B** +**2. Set environment variables and log in** ```bash -huggingface-cli login -wandb login +export HF_TOKEN=hf_... +export WANDB_API_KEY=... +hf auth login --token $HF_TOKEN +wandb login $WANDB_API_KEY ``` **4. Verify the grid looks correct** From 61e88f28f0ee75fb0ff5fed451be979bb1b7cf01 Mon Sep 17 00:00:00 2001 From: Fin Griffin Date: Mon, 13 Apr 2026 09:28:40 +0100 Subject: [PATCH 07/68] chore: add typer as dep --- pyproject.toml | 1 + uv.lock | 2 ++ 2 files changed, 3 insertions(+) diff --git a/pyproject.toml b/pyproject.toml index 0d3cad6..ebe6a78 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -10,6 +10,7 @@ dependencies = [ "datasets>=4.5.0", "dotenv>=0.9.9", "huggingface-hub>=1.4.1", + "typer>=0.9.0", "matplotlib>=3.10.8", "pandas", "peft", diff --git a/uv.lock b/uv.lock index ce89714..5eabfe7 100644 --- a/uv.lock +++ b/uv.lock @@ -4980,6 +4980,7 @@ dependencies = [ { name = "seaborn" }, { name = "sentence-transformers" }, { name = "transformers" }, + { name = "typer" }, { name = "wandb" }, ] @@ -5013,6 +5014,7 @@ requires-dist = [ { name = "seaborn", specifier = ">=0.13.2" }, { name = "sentence-transformers", specifier = ">=5.3.0" }, { name = "transformers" }, + { name = "typer", specifier = ">=0.9.0" }, { name = "wandb", specifier = ">=0.25.1" }, ] From 2aef161dab1db5fd1a4061b08f385058a72cff17 Mon Sep 17 00:00:00 2001 From: Fin Griffin Date: Mon, 13 Apr 2026 09:42:44 +0100 Subject: [PATCH 08/68] chore: update axolotl dep to download from source --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index ebe6a78..eab2a8b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -6,7 +6,7 @@ readme = "README.md" requires-python = ">=3.12,<3.14" dependencies = [ "accelerate", - "axolotl>=0.16.1 ; sys_platform == 'linux'", + "axolotl @ git+https://github.com/axolotl-ai-cloud/axolotl.git@v0.16.1 ; sys_platform == 'linux'", "datasets>=4.5.0", "dotenv>=0.9.9", "huggingface-hub>=1.4.1", From 14876841b010c64b0f3cf3e87b805fcffd52b392 Mon Sep 17 00:00:00 2001 From: Fin Griffin Date: Mon, 13 Apr 2026 09:48:55 +0100 Subject: [PATCH 09/68] chore: update eval strategy to be a string rather than reserved boolean --- sweep/master_config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sweep/master_config.yaml b/sweep/master_config.yaml index e37c894..33b9c7c 100644 --- a/sweep/master_config.yaml +++ b/sweep/master_config.yaml @@ -88,7 +88,7 @@ axolotl: weight_decay: 0.0 # No evaluation during training — test loss computed post-training only. - eval_strategy: no + eval_strategy: "no" # Keep all epoch checkpoints (up to 3) so sweep.py can run inference at # each epoch without re-training. 48 training runs × 3 epochs = 144 rows. From 38ac1292e9370b2188fab88e65e73f3d020b2619 Mon Sep 17 00:00:00 2001 From: Fin Griffin Date: Mon, 13 Apr 2026 10:00:28 +0100 Subject: [PATCH 10/68] fix: update chat template during inference --- sweep/infer.py | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/sweep/infer.py b/sweep/infer.py index 2c5f09e..0eea8f6 100644 --- a/sweep/infer.py +++ b/sweep/infer.py @@ -55,7 +55,7 @@ def load_model_and_tokenizer( _log("Loading base model") base = AutoModelForCausalLM.from_pretrained( BASE_MODEL, - torch_dtype=torch.bfloat16, + dtype=torch.bfloat16, device_map="auto", token=hf_token, ) @@ -94,14 +94,20 @@ def compute_loss_and_generate( tokenize=True, return_tensors="pt", add_generation_prompt=False, - ).to(model.device) + ) + if hasattr(full_ids, "input_ids"): + full_ids = full_ids.input_ids + full_ids = full_ids.to(model.device) prompt_ids = tokenizer.apply_chat_template( prompt_messages, tokenize=True, return_tensors="pt", add_generation_prompt=True, - ).to(model.device) + ) + if hasattr(prompt_ids, "input_ids"): + prompt_ids = prompt_ids.input_ids + prompt_ids = prompt_ids.to(model.device) prompt_len = prompt_ids.shape[1] labels = full_ids.clone() From 87d23a8cc617b7608dfca2276f7cd97880c66cd4 Mon Sep 17 00:00:00 2001 From: Fin Griffin Date: Mon, 13 Apr 2026 10:06:34 +0100 Subject: [PATCH 11/68] fix: update infer.py to manually compute loss --- sweep/infer.py | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/sweep/infer.py b/sweep/infer.py index 0eea8f6..9c04788 100644 --- a/sweep/infer.py +++ b/sweep/infer.py @@ -114,10 +114,21 @@ def compute_loss_and_generate( labels[0, :prompt_len] = -100 with torch.no_grad(): - out = model(input_ids=full_ids, labels=labels) - - n_tokens = (labels[0] != -100).sum().item() - total_loss += out.loss.item() * n_tokens + logits = model(input_ids=full_ids).logits + + # Shift to align predictions with targets (same as transformers internals) + shift_logits = logits[..., :-1, :].contiguous() + shift_labels = labels[..., 1:].contiguous().view(-1) + valid = shift_labels != -100 + n_tokens = valid.sum().item() + if n_tokens > 0: + loss_val = torch.nn.functional.cross_entropy( + shift_logits.view(-1, shift_logits.size(-1))[valid], + shift_labels[valid], + ).item() + else: + loss_val = float("nan") + total_loss += loss_val * n_tokens total_tokens += n_tokens with torch.no_grad(): From 4caf6a971c03a8106325cb4b9de350dbf0bfdfc5 Mon Sep 17 00:00:00 2001 From: Fin Griffin Date: Mon, 13 Apr 2026 10:18:31 +0100 Subject: [PATCH 12/68] fix: force inference to pin to same GPU as training --- sweep/sweep.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sweep/sweep.py b/sweep/sweep.py index 6a81a9b..3138c58 100644 --- a/sweep/sweep.py +++ b/sweep/sweep.py @@ -316,7 +316,7 @@ def main() -> None: ) args = parser.parse_args() - os.environ.setdefault("CUDA_VISIBLE_DEVICES", args.device) + os.environ["CUDA_VISIBLE_DEVICES"] = args.device setup_logging() From 4c9122d31d13b859d542b85a372d8796dbd61f38 Mon Sep 17 00:00:00 2001 From: Fin Griffin Date: Mon, 13 Apr 2026 10:34:45 +0100 Subject: [PATCH 13/68] chore: add vllm --- pyproject.toml | 1 + sweep/infer.py | 224 +++++----- uv.lock | 1150 +++++++++++++++++++++++++++++++++++++++++------- 3 files changed, 1114 insertions(+), 261 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index eab2a8b..cd8cc3e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -20,6 +20,7 @@ dependencies = [ "sentence-transformers>=5.3.0", "transformers", "wandb>=0.25.1", + "vllm>=0.11.0 ; sys_platform == 'linux'", ] [tool.uv] diff --git a/sweep/infer.py b/sweep/infer.py index 9c04788..3531e83 100644 --- a/sweep/infer.py +++ b/sweep/infer.py @@ -1,7 +1,8 @@ """Inference and test-loss script for a single fine-tuned checkpoint. -Loads the base model with LoRA adapter, runs greedy generation on the Bush -test split, and computes token-weighted NLL loss over assistant turns only. +Uses vLLM for batched generation and prompt logprobs for NLL loss. +All 200 test examples are processed in two bulk passes (generation + loss), +making this dramatically faster than sequential per-example inference. Outputs a single JSON object to stdout:: @@ -20,147 +21,100 @@ import sys from typing import Any -import torch from datasets import load_dataset from dotenv import load_dotenv -from peft import PeftModel -from transformers import AutoModelForCausalLM, AutoTokenizer +from vllm import LLM, SamplingParams +from vllm.lora.request import LoRARequest load_dotenv() BASE_MODEL = "meta-llama/Llama-3.1-8B-Instruct" DATASET = "AccelerateScience/bush-dataset" MAX_NEW_TOKENS = 512 +# Must be >= the largest lora_r in the sweep grid (32). +MAX_LORA_RANK = 32 def _log(msg: str) -> None: print(msg, file=sys.stderr, flush=True) -def load_model_and_tokenizer( - checkpoint: str, - hf_token: str, -) -> tuple[Any, Any]: - """Load the base model with LoRA adapter from a checkpoint directory. - - :param checkpoint: path to the epoch checkpoint directory. - :param hf_token: HuggingFace API token for private model access. - :returns: (model, tokenizer) tuple ready for inference. - """ - _log(f"Loading tokenizer from {BASE_MODEL}") - tokenizer = AutoTokenizer.from_pretrained(BASE_MODEL, token=hf_token) - if tokenizer.pad_token is None: - tokenizer.pad_token = tokenizer.eos_token - - _log("Loading base model") - base = AutoModelForCausalLM.from_pretrained( - BASE_MODEL, - dtype=torch.bfloat16, - device_map="auto", - token=hf_token, - ) - - _log(f"Loading LoRA adapter from {checkpoint}") - model = PeftModel.from_pretrained(base, checkpoint) - model.eval() - return model, tokenizer - - -def compute_loss_and_generate( - model: Any, - tokenizer: Any, +def build_token_ids( examples: list[dict[str, Any]], -) -> tuple[float, list[dict[str, Any]]]: - """Compute token-level NLL loss and generate greedy completions. - - Loss is computed only over assistant tokens; system and user tokens - are masked with -100. Generation is greedy for reproducibility. + tokenizer: Any, +) -> tuple[list[list[int]], list[list[int]], list[int]]: + """Tokenize all examples into full and prompt token ID lists. - :param model: fine-tuned model (base + LoRA adapter). - :param tokenizer: tokenizer matching the base model. :param examples: list of dataset examples from the test split. - :returns: (token_weighted_avg_loss, completions) tuple. + :param tokenizer: tokenizer matching the base model. + :returns: (full_token_ids, prompt_token_ids, prompt_lens) where + full_token_ids includes the assistant completion and + prompt_token_ids ends with the generation prompt. """ - total_loss = 0.0 - total_tokens = 0 - completions: list[dict[str, Any]] = [] + full_token_ids: list[list[int]] = [] + prompt_token_ids: list[list[int]] = [] + prompt_lens: list[int] = [] - for i, example in enumerate(examples): - messages = example["messages"] + for example in examples: + messages: list[dict[str, Any]] = example["messages"] prompt_messages = messages[:-1] full_ids = tokenizer.apply_chat_template( messages, tokenize=True, - return_tensors="pt", add_generation_prompt=False, ) if hasattr(full_ids, "input_ids"): - full_ids = full_ids.input_ids - full_ids = full_ids.to(model.device) + full_ids = list(full_ids.input_ids[0]) - prompt_ids = tokenizer.apply_chat_template( + p_ids = tokenizer.apply_chat_template( prompt_messages, tokenize=True, - return_tensors="pt", add_generation_prompt=True, ) - if hasattr(prompt_ids, "input_ids"): - prompt_ids = prompt_ids.input_ids - prompt_ids = prompt_ids.to(model.device) - - prompt_len = prompt_ids.shape[1] - labels = full_ids.clone() - labels[0, :prompt_len] = -100 - - with torch.no_grad(): - logits = model(input_ids=full_ids).logits - - # Shift to align predictions with targets (same as transformers internals) - shift_logits = logits[..., :-1, :].contiguous() - shift_labels = labels[..., 1:].contiguous().view(-1) - valid = shift_labels != -100 - n_tokens = valid.sum().item() - if n_tokens > 0: - loss_val = torch.nn.functional.cross_entropy( - shift_logits.view(-1, shift_logits.size(-1))[valid], - shift_labels[valid], - ).item() - else: - loss_val = float("nan") - total_loss += loss_val * n_tokens - total_tokens += n_tokens - - with torch.no_grad(): - generated_ids = model.generate( - prompt_ids, - max_new_tokens=MAX_NEW_TOKENS, - do_sample=False, - pad_token_id=tokenizer.eos_token_id, - ) - - new_token_ids = generated_ids[0, prompt_len:] - response = tokenizer.decode(new_token_ids, skip_special_tokens=True) + if hasattr(p_ids, "input_ids"): + p_ids = list(p_ids.input_ids[0]) + + full_token_ids.append(list(full_ids)) + prompt_token_ids.append(list(p_ids)) + prompt_lens.append(len(p_ids)) + + return full_token_ids, prompt_token_ids, prompt_lens - completions.append( - { - "messages": [ - {"role": m["role"], "content": m["content"]} - for m in prompt_messages - ], - "generated_response": response, - } - ) - if (i + 1) % 20 == 0: - _log(f" {i + 1}/{len(examples)} examples processed") +def compute_nll( + loss_outputs: list[Any], + full_token_ids: list[list[int]], + prompt_lens: list[int], +) -> float: + """Compute token-weighted NLL loss from vLLM prompt logprobs. - eval_loss = total_loss / total_tokens if total_tokens > 0 else float("nan") - return eval_loss, completions + :param loss_outputs: vLLM RequestOutput list from the loss pass. + :param full_token_ids: tokenised full sequences (prompt + completion). + :param prompt_lens: length of the prompt portion for each example. + :returns: token-weighted average NLL loss across all examples. + """ + total_loss = 0.0 + total_tokens = 0 + + for i, out in enumerate(loss_outputs): + pl = out.prompt_logprobs # List[Optional[Dict[int, Logprob]]] + full_ids = full_token_ids[i] + p_len = prompt_lens[i] + + for j in range(p_len, len(full_ids)): + if pl is None or j >= len(pl) or pl[j] is None: + continue + token_id = full_ids[j] + if token_id in pl[j]: + total_loss += -pl[j][token_id].logprob + total_tokens += 1 + + return total_loss / total_tokens if total_tokens > 0 else float("nan") def main() -> None: - """Parse arguments, run inference and loss computation, print JSON. + """Parse arguments, run batched inference and loss, print JSON. :returns: None """ @@ -175,20 +129,68 @@ def main() -> None: hf_token = ( os.environ.get("HF_TOKEN") or os.environ.get("HUGGINGFACE_TOKEN") or "" ) - - model, tokenizer = load_model_and_tokenizer(args.checkpoint, hf_token) + if hf_token: + os.environ["HF_TOKEN"] = hf_token _log(f"Loading test split from {DATASET}") ds = load_dataset(DATASET, split="test", token=hf_token) examples = list(ds) - _log(f"Running inference on {len(examples)} test examples") + _log(f"{len(examples)} test examples") + + _log("Initialising vLLM engine") + llm = LLM( + model=BASE_MODEL, + enable_lora=True, + max_model_len=2048, + dtype="bfloat16", + gpu_memory_utilization=0.9, + max_lora_rank=MAX_LORA_RANK, + ) + lora_request = LoRARequest("adapter", 1, args.checkpoint) + tokenizer = llm.get_tokenizer() - eval_loss, completions = compute_loss_and_generate( - model, tokenizer, examples + _log("Tokenising examples") + full_token_ids, prompt_token_ids, prompt_lens = build_token_ids( + examples, tokenizer ) - _log(f"eval_loss={eval_loss:.4f} n_completions={len(completions)}") + _log("Batched generation pass") + gen_outputs = llm.generate( + prompt_token_ids=prompt_token_ids, + sampling_params=SamplingParams( + max_tokens=MAX_NEW_TOKENS, + temperature=0, + ), + lora_request=lora_request, + ) + + _log("Batched loss pass (prompt logprobs)") + loss_outputs = llm.generate( + prompt_token_ids=full_token_ids, + sampling_params=SamplingParams( + max_tokens=1, + temperature=0, + prompt_logprobs=1, + ), + lora_request=lora_request, + ) + eval_loss = compute_nll(loss_outputs, full_token_ids, prompt_lens) + + completions: list[dict[str, Any]] = [] + for example, gen_out in zip(examples, gen_outputs): + prompt_messages = example["messages"][:-1] + completions.append( + { + "messages": [ + {"role": m["role"], "content": m["content"]} + for m in prompt_messages + ], + "generated_response": gen_out.outputs[0].text, + } + ) + + _log(f"eval_loss={eval_loss:.4f} n_completions={len(completions)}") print(json.dumps({"eval_loss": eval_loss, "completions": completions})) diff --git a/uv.lock b/uv.lock index 5eabfe7..4dc9c12 100644 --- a/uv.lock +++ b/uv.lock @@ -28,8 +28,9 @@ version = "1.13.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "huggingface-hub" }, - { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.13'" }, - { name = "numpy", version = "2.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.13'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.13' and sys_platform == 'emscripten') or (python_full_version < '3.13' and sys_platform == 'win32')" }, + { name = "numpy", version = "2.4.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.13' and sys_platform == 'emscripten') or (python_full_version >= '3.13' and sys_platform == 'win32')" }, { name = "packaging" }, { name = "psutil" }, { name = "pyyaml" }, @@ -270,6 +271,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/67/29/57b06fdb3abdf52c621d3ca3caea735e2db4c8d48288ebd26af448e8e247/art-6.5-py3-none-any.whl", hash = "sha256:70706408144c45c666caab690627d5c74aea7b6c7ce8cc968408ddeef8d84afd", size = 610382, upload-time = "2025-04-12T17:02:21.97Z" }, ] +[[package]] +name = "astor" +version = "0.8.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/5a/21/75b771132fee241dfe601d39ade629548a9626d1d39f333fde31bc46febe/astor-0.8.1.tar.gz", hash = "sha256:6a6effda93f4e1ce9f618779b2dd1d9d84f1e32812c23a29b3fff6fd7f63fa5e", size = 35090, upload-time = "2019-12-10T01:50:35.51Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c3/88/97eef84f48fa04fbd6750e62dcceafba6c63c81b7ac1420856c8dcc0a3f9/astor-0.8.1-py2.py3-none-any.whl", hash = "sha256:070a54e890cefb5b3739d19f30f5a5ec840ffc9c50ffa7d23cc9fc1a38ebbfc5", size = 27488, upload-time = "2019-12-10T01:50:33.628Z" }, +] + [[package]] name = "asttokens" version = "3.0.1" @@ -339,8 +349,8 @@ wheels = [ [[package]] name = "axolotl" -version = "0.16.1" -source = { registry = "https://pypi.org/simple" } +version = "0.16.0.dev0" +source = { git = "https://github.com/axolotl-ai-cloud/axolotl.git?rev=v0.16.1#08fc7de87e79f38c367f6776c5111b40a914062e" } dependencies = [ { name = "accelerate", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, { name = "addict", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, @@ -349,7 +359,6 @@ dependencies = [ { name = "art", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, { name = "axolotl-contribs-lgpl", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, { name = "axolotl-contribs-mit", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, - { name = "bitsandbytes", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, { name = "colorama", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, { name = "datasets", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, { name = "einops", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, @@ -366,13 +375,11 @@ dependencies = [ { name = "immutabledict", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, { name = "kernels", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, { name = "langdetect", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, - { name = "liger-kernel", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, { name = "lm-eval", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, { name = "mistral-common", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, { name = "modal", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, { name = "numba", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, - { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'" }, - { name = "numpy", version = "2.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, { name = "nvidia-ml-py", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, { name = "ocifs", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, { name = "openenv-core", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, @@ -390,18 +397,14 @@ dependencies = [ { name = "sentencepiece", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, { name = "tensorboard", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, { name = "tokenizers", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, - { name = "torch", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, { name = "torchao", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, { name = "trackio", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, { name = "transformers", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, - { name = "triton", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, { name = "trl", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, { name = "typing-extensions", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, { name = "wandb", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, - { name = "xformers", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, { name = "zstandard", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/d4/8d/1e3263a1fc108b5ac1c6035b892d4939147f4766a1af10e8fa644c0d7c60/axolotl-0.16.1.tar.gz", hash = "sha256:0c3f279db8c8799de638fc3d0a7860e55446b539a1d455c727c4ca531571bee9", size = 717631, upload-time = "2026-04-02T21:51:20.244Z" } [[package]] name = "axolotl-contribs-lgpl" @@ -409,8 +412,7 @@ version = "0.0.7" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "datasets", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, - { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'" }, - { name = "numpy", version = "2.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, { name = "torch", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/09/60/d9687c5057dfc0ebbccd7c6996cf0f6337794c04a501a92eb6f37709e26b/axolotl_contribs_lgpl-0.0.7.tar.gz", hash = "sha256:f797b3fd0adb5cbf93ed7070c8de61f90fd2f42cb93713e394970ab0e0a77a4d", size = 10922, upload-time = "2025-10-29T17:46:16.215Z" } @@ -524,18 +526,35 @@ wheels = [ ] [[package]] -name = "bitsandbytes" -version = "0.49.1" +name = "blake3" +version = "1.0.8" source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'" }, - { name = "numpy", version = "2.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'" }, - { name = "packaging", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, - { name = "torch", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, -] +sdist = { url = "https://files.pythonhosted.org/packages/75/aa/abcd75e9600987a0bc6cfe9b6b2ff3f0e2cb08c170addc6e76035b5c4cb3/blake3-1.0.8.tar.gz", hash = "sha256:513cc7f0f5a7c035812604c2c852a0c1468311345573de647e310aca4ab165ba", size = 117308, upload-time = "2025-10-14T06:47:48.83Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/11/dd/5820e09213a3f7c0ee5aff20fce8b362ce935f9dd9958827274de4eaeec6/bitsandbytes-0.49.1-py3-none-manylinux_2_24_aarch64.whl", hash = "sha256:acd4730a0db3762d286707f4a3bc1d013d21dd5f0e441900da57ec4198578d4e", size = 31065659, upload-time = "2026-01-08T14:31:28.676Z" }, - { url = "https://files.pythonhosted.org/packages/1d/4f/02d3cb62a1b0b5a1ca7ff03dce3606be1bf3ead4744f47eb762dbf471069/bitsandbytes-0.49.1-py3-none-manylinux_2_24_x86_64.whl", hash = "sha256:e7940bf32457dc2e553685285b2a86e82f5ec10b2ae39776c408714f9ae6983c", size = 59054193, upload-time = "2026-01-08T14:31:31.743Z" }, + { url = "https://files.pythonhosted.org/packages/ee/7d/85a4c0782f613de23d114a7a78fcce270f75b193b3ff3493a0de24ba104a/blake3-1.0.8-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:269f255b110840e52b6ce9db02217e39660ebad3e34ddd5bca8b8d378a77e4e1", size = 371296, upload-time = "2025-10-14T06:45:49.674Z" }, + { url = "https://files.pythonhosted.org/packages/e3/20/488475254976ed93fab57c67aa80d3b40df77f7d9db6528c9274bff53e08/blake3-1.0.8-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:66ca28a673025c40db3eba21a9cac52f559f83637efa675b3f6bd8683f0415f3", size = 374516, upload-time = "2025-10-14T06:45:51.23Z" }, + { url = "https://files.pythonhosted.org/packages/7b/21/2a1c47fedb77fb396512677ec6d46caf42ac6e9a897db77edd0a2a46f7bb/blake3-1.0.8-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bcb04966537777af56c1f399b35525aa70a1225816e121ff95071c33c0f7abca", size = 447911, upload-time = "2025-10-14T06:45:52.637Z" }, + { url = "https://files.pythonhosted.org/packages/cb/7d/db0626df16029713e7e61b67314c4835e85c296d82bd907c21c6ea271da2/blake3-1.0.8-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e5b5da177d62cc4b7edf0cea08fe4dec960c9ac27f916131efa890a01f747b93", size = 505420, upload-time = "2025-10-14T06:45:54.445Z" }, + { url = "https://files.pythonhosted.org/packages/5b/55/6e737850c2d58a6d9de8a76dad2ae0f75b852a23eb4ecb07a0b165e6e436/blake3-1.0.8-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:38209b10482c97e151681ea3e91cc7141f56adbbf4820a7d701a923124b41e6a", size = 394189, upload-time = "2025-10-14T06:45:55.719Z" }, + { url = "https://files.pythonhosted.org/packages/5b/94/eafaa5cdddadc0c9c603a6a6d8339433475e1a9f60c8bb9c2eed2d8736b6/blake3-1.0.8-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:504d1399b7fb91dfe5c25722d2807990493185faa1917456455480c36867adb5", size = 388001, upload-time = "2025-10-14T06:45:57.067Z" }, + { url = "https://files.pythonhosted.org/packages/17/81/735fa00d13de7f68b25e1b9cb36ff08c6f165e688d85d8ec2cbfcdedccc5/blake3-1.0.8-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:c84af132aa09abeadf9a0118c8fb26f4528f3f42c10ef8be0fcf31c478774ec4", size = 550302, upload-time = "2025-10-14T06:45:58.657Z" }, + { url = "https://files.pythonhosted.org/packages/0e/c6/d1fe8bdea4a6088bd54b5a58bc40aed89a4e784cd796af7722a06f74bae7/blake3-1.0.8-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a25db3d36b55f5ed6a86470155cc749fc9c5b91c949b8d14f48658f9d960d9ec", size = 554211, upload-time = "2025-10-14T06:46:00.269Z" }, + { url = "https://files.pythonhosted.org/packages/77/57/e8a85fa261894bf7ce7af928ff3408aab60287ab8d58b55d13a3f700b619/blake3-1.0.8-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:19fc6f2b7edab8acff6895fc6e38c19bd79f4c089e21153020c75dfc7397d52d", size = 370994, upload-time = "2025-10-14T06:46:07.398Z" }, + { url = "https://files.pythonhosted.org/packages/62/cd/765b76bb48b8b294fea94c9008b0d82b4cfa0fa2f3c6008d840d01a597e4/blake3-1.0.8-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4f54cff7f15d91dc78a63a2dd02a3dccdc932946f271e2adb4130e0b4cf608ba", size = 374372, upload-time = "2025-10-14T06:46:08.698Z" }, + { url = "https://files.pythonhosted.org/packages/36/7a/32084eadbb28592bb07298f0de316d2da586c62f31500a6b1339a7e7b29b/blake3-1.0.8-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e7e12a777f6b798eb8d06f875d6e108e3008bd658d274d8c676dcf98e0f10537", size = 447627, upload-time = "2025-10-14T06:46:10.002Z" }, + { url = "https://files.pythonhosted.org/packages/a7/f4/3788a1d86e17425eea147e28d7195d7053565fc279236a9fd278c2ec495e/blake3-1.0.8-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ddfc59b0176fb31168f08d5dd536e69b1f4f13b5a0f4b0c3be1003efd47f9308", size = 507536, upload-time = "2025-10-14T06:46:11.614Z" }, + { url = "https://files.pythonhosted.org/packages/fe/01/4639cba48513b94192681b4da472cdec843d3001c5344d7051ee5eaef606/blake3-1.0.8-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a2336d5b2a801a7256da21150348f41610a6c21dae885a3acb1ebbd7333d88d8", size = 394105, upload-time = "2025-10-14T06:46:12.808Z" }, + { url = "https://files.pythonhosted.org/packages/21/ae/6e55c19c8460fada86cd1306a390a09b0c5a2e2e424f9317d2edacea439f/blake3-1.0.8-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4072196547484c95a5a09adbb952e9bb501949f03f9e2a85e7249ef85faaba8", size = 386928, upload-time = "2025-10-14T06:46:16.284Z" }, + { url = "https://files.pythonhosted.org/packages/ee/6c/05b7a5a907df1be53a8f19e7828986fc6b608a44119641ef9c0804fbef15/blake3-1.0.8-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:0eab3318ec02f8e16fe549244791ace2ada2c259332f0c77ab22cf94dfff7130", size = 550003, upload-time = "2025-10-14T06:46:17.791Z" }, + { url = "https://files.pythonhosted.org/packages/b4/03/f0ea4adfedc1717623be6460b3710fcb725ca38082c14274369803f727e1/blake3-1.0.8-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:a33b9a1fb6d1d559a8e0d04b041e99419a6bb771311c774f6ff57ed7119c70ed", size = 553857, upload-time = "2025-10-14T06:46:19.088Z" }, + { url = "https://files.pythonhosted.org/packages/13/da/722cebca11238f3b24d3cefd2361c9c9ea47cfa0ad9288eeb4d1e0b7cf93/blake3-1.0.8-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ef153c5860d5bf1cc71aece69b28097d2a392913eb323d6b52555c875d0439fc", size = 370441, upload-time = "2025-10-14T06:46:26.29Z" }, + { url = "https://files.pythonhosted.org/packages/2e/d5/2f7440c8e41c0af995bad3a159e042af0f4ed1994710af5b4766ca918f65/blake3-1.0.8-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e8ae3689f0c7bfa6ce6ae45cab110e4c3442125c4c23b28f1f097856de26e4d1", size = 374312, upload-time = "2025-10-14T06:46:27.451Z" }, + { url = "https://files.pythonhosted.org/packages/a6/6c/fb6a7812e60ce3e110bcbbb11f167caf3e975c589572c41e1271f35f2c41/blake3-1.0.8-cp313-cp313t-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3fb83532f7456ddeb68dae1b36e1f7c52f9cb72852ac01159bbcb1a12b0f8be0", size = 447007, upload-time = "2025-10-14T06:46:29.056Z" }, + { url = "https://files.pythonhosted.org/packages/13/3b/c99b43fae5047276ea9d944077c190fc1e5f22f57528b9794e21f7adedc6/blake3-1.0.8-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6ae7754c7d96e92a70a52e07c732d594cf9924d780f49fffd3a1e9235e0f5ba7", size = 507323, upload-time = "2025-10-14T06:46:30.661Z" }, + { url = "https://files.pythonhosted.org/packages/fc/bb/ba90eddd592f8c074a0694cb0a744b6bd76bfe67a14c2b490c8bdfca3119/blake3-1.0.8-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4bacaae75e98dee3b7da6c5ee3b81ee21a3352dd2477d6f1d1dbfd38cdbf158a", size = 393449, upload-time = "2025-10-14T06:46:31.805Z" }, + { url = "https://files.pythonhosted.org/packages/25/ed/58a2acd0b9e14459cdaef4344db414d4a36e329b9720921b442a454dd443/blake3-1.0.8-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9456c829601d72852d8ba0af8dae0610f7def1d59f5942efde1e2ef93e8a8b57", size = 386844, upload-time = "2025-10-14T06:46:33.195Z" }, + { url = "https://files.pythonhosted.org/packages/4a/04/fed09845b18d90862100c8e48308261e2f663aab25d3c71a6a0bdda6618b/blake3-1.0.8-cp313-cp313t-musllinux_1_1_aarch64.whl", hash = "sha256:497ef8096ec4ac1ffba9a66152cee3992337cebf8ea434331d8fd9ce5423d227", size = 549550, upload-time = "2025-10-14T06:46:35.23Z" }, + { url = "https://files.pythonhosted.org/packages/d6/65/1859fddfabc1cc72548c2269d988819aad96d854e25eae00531517925901/blake3-1.0.8-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:511133bab85ff60ed143424ce484d08c60894ff7323f685d7a6095f43f0c85c3", size = 553805, upload-time = "2025-10-14T06:46:36.532Z" }, ] [[package]] @@ -589,6 +608,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/9e/4a/9526d14fa6b87bc827ba1755a8440e214ff90de03095cacd78a64abe2b7d/brotli-1.2.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:54a50a9dad16b32136b2241ddea9e4df159b41247b2ce6aac0b3276a66a8f1e5", size = 1487945, upload-time = "2025-11-05T18:38:42.277Z" }, ] +[[package]] +name = "cachetools" +version = "7.0.5" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/af/dd/57fe3fdb6e65b25a5987fd2cdc7e22db0aef508b91634d2e57d22928d41b/cachetools-7.0.5.tar.gz", hash = "sha256:0cd042c24377200c1dcd225f8b7b12b0ca53cc2c961b43757e774ebe190fd990", size = 37367, upload-time = "2026-03-09T20:51:29.451Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/06/f3/39cf3367b8107baa44f861dc802cbf16263c945b62d8265d36034fc07bea/cachetools-7.0.5-py3-none-any.whl", hash = "sha256:46bc8ebefbe485407621d0a4264b23c080cedd913921bad7ac3ed2f26c183114", size = 13918, upload-time = "2026-03-09T20:51:27.33Z" }, +] + [[package]] name = "cbor2" version = "5.9.0" @@ -730,12 +758,22 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/98/78/01c019cdb5d6498122777c1a43056ebb3ebfeef2076d9d026bfe15583b2b/click-8.3.1-py3-none-any.whl", hash = "sha256:981153a64e25f12d547d3426c367a4857371575ee7ad18df2a6183ab0545b2a6", size = 108274, upload-time = "2025-11-15T20:45:41.139Z" }, ] +[[package]] +name = "cloudpickle" +version = "3.1.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/27/fb/576f067976d320f5f0114a8d9fa1215425441bb35627b1993e5afd8111e5/cloudpickle-3.1.2.tar.gz", hash = "sha256:7fda9eb655c9c230dab534f1983763de5835249750e85fbcef43aaa30a9a2414", size = 22330, upload-time = "2025-11-03T09:25:26.604Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl", hash = "sha256:9acb47f6afd73f60dc1df93bb801b472f05ff42fa6c84167d25cb206be1fbf4a", size = 22228, upload-time = "2025-11-03T09:25:25.534Z" }, +] + [[package]] name = "cognitive-complexity" version = "1.3.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "setuptools" }, + { name = "setuptools", version = "79.0.1", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "setuptools", version = "80.10.2", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform == 'emscripten' or sys_platform == 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/6a/ff/3cd46792fcbf742458083527407bc336efe382b168595583a06c70bf8e54/cognitive_complexity-1.3.0.tar.gz", hash = "sha256:a0cfbd47dee0b19f4056f892389f501694b205c3af69fb703cc744541e03dde5", size = 5650, upload-time = "2022-08-09T07:07:52.952Z" } @@ -769,13 +807,29 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/60/97/891a0971e1e4a8c5d2b20bbe0e524dc04548d2307fee33cdeba148fd4fc7/comm-0.2.3-py3-none-any.whl", hash = "sha256:c615d91d75f7f04f095b30d1c1711babd43bdc6419c1be9886a85f2f4e489417", size = 7294, upload-time = "2025-07-25T14:02:02.896Z" }, ] +[[package]] +name = "compressed-tensors" +version = "0.11.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "frozendict", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "pydantic", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "torch", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "transformers", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b8/99/3fdabfc95609d6efdf02fa7f1ed0245524cb1209d3d4a17109d3205d2eed/compressed_tensors-0.11.0.tar.gz", hash = "sha256:95ddf19699f775df6494dd864e5f52e8a24f8015496520190c1a22c6cfc44b1f", size = 187566, upload-time = "2025-08-19T18:59:31.854Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d2/81/e3073017a8f5c75169e79108eda209e6089e3f96c9f197d307cbda7df71c/compressed_tensors-0.11.0-py3-none-any.whl", hash = "sha256:e1cbc46e1ae032b7ceea915fe18c8d2de5a54d3a50a607969b6bdfe703b6cb83", size = 179951, upload-time = "2025-08-19T18:59:29.308Z" }, +] + [[package]] name = "contourpy" version = "1.3.3" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.13'" }, - { name = "numpy", version = "2.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.13'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.13' and sys_platform == 'emscripten') or (python_full_version < '3.13' and sys_platform == 'win32')" }, + { name = "numpy", version = "2.4.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.13' and sys_platform == 'emscripten') or (python_full_version >= '3.13' and sys_platform == 'win32')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/58/01/1253e6698a07380cd31a736d248a3f2a50a7c88779a1813da27503cadc2a/contourpy-1.3.3.tar.gz", hash = "sha256:083e12155b210502d0bca491432bb04d56dc3432f95a979b429f2848c3dbe880", size = 13466174, upload-time = "2025-07-26T12:03:12.549Z" } wheels = [ @@ -895,6 +949,29 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/41/52/a8908dcb1a389a459a29008c29966c1d552588d4ae6d43f3a1a4512e0ebe/cryptography-46.0.7-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:a1529d614f44b863a7b480c6d000fe93b59acee9c82ffa027cfadc77521a9f5e", size = 4664256, upload-time = "2026-04-08T01:57:33.144Z" }, ] +[[package]] +name = "cuda-pathfinder" +version = "1.5.2" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f2/f9/1b9b60a30fc463c14cdea7a77228131a0ccc89572e8df9cb86c9648271ab/cuda_pathfinder-1.5.2-py3-none-any.whl", hash = "sha256:0c5f160a7756c5b072723cbbd6d861e38917ef956c68150b02f0b6e9271c71fa", size = 49988, upload-time = "2026-04-06T23:01:05.17Z" }, +] + +[[package]] +name = "cupy-cuda12x" +version = "14.0.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cuda-pathfinder", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/38/ca/b93ef9fca1471a65f136a73e10819634c0b83427362fc08fc9f29f935bf0/cupy_cuda12x-14.0.1-cp312-cp312-manylinux2014_aarch64.whl", hash = "sha256:f244bc14fad6f1ef0c74abd98afa4b82d2534aecdba911197810ec0047f0d1f3", size = 145578614, upload-time = "2026-02-20T10:22:49.108Z" }, + { url = "https://files.pythonhosted.org/packages/5a/a6/944406223a190815d9df156a1d66f3b0352bd8827dc4a8c752196d616dbc/cupy_cuda12x-14.0.1-cp312-cp312-manylinux2014_x86_64.whl", hash = "sha256:9f0c81c3509f77be3ae8444759d5b314201b2dfcbbf2ae0d0b5fb7a61f20893c", size = 134613763, upload-time = "2026-02-20T10:22:56.792Z" }, + { url = "https://files.pythonhosted.org/packages/99/67/f967c5aff77bd6ae6765faf20580db80bb8a7e2574e999166de1d4e50146/cupy_cuda12x-14.0.1-cp313-cp313-manylinux2014_aarch64.whl", hash = "sha256:9d9b1bdcf9fa777593017867e8733192c071b94639a1b3e8b2ee99eb3f3ea760", size = 145128055, upload-time = "2026-02-20T10:23:08.765Z" }, + { url = "https://files.pythonhosted.org/packages/80/53/037c931731151c504cfc00069eb295c903927c92145115623f13bd2ea076/cupy_cuda12x-14.0.1-cp313-cp313-manylinux2014_x86_64.whl", hash = "sha256:21fcb4e917e43237edcc5e3a1a1241e2a2946ba9e577ce36fd580bd9856f91e8", size = 134227269, upload-time = "2026-02-20T10:23:16.147Z" }, +] + [[package]] name = "cycler" version = "0.12.1" @@ -928,8 +1005,9 @@ dependencies = [ { name = "httpx" }, { name = "huggingface-hub" }, { name = "multiprocess" }, - { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.13'" }, - { name = "numpy", version = "2.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.13'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.13' and sys_platform == 'emscripten') or (python_full_version < '3.13' and sys_platform == 'win32')" }, + { name = "numpy", version = "2.4.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.13' and sys_platform == 'emscripten') or (python_full_version >= '3.13' and sys_platform == 'win32')" }, { name = "packaging" }, { name = "pandas" }, { name = "pyarrow" }, @@ -978,6 +1056,19 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/07/6c/aa3f2f849e01cb6a001cd8554a88d4c77c5c1a31c95bdf1cf9301e6d9ef4/defusedxml-0.7.1-py2.py3-none-any.whl", hash = "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61", size = 25604, upload-time = "2021-03-08T10:59:24.45Z" }, ] +[[package]] +name = "depyf" +version = "0.19.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "astor", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "dill", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/19/38/69157d711be575f1b9cf3177b64ef4ade44373fc02839f183fdd98ec2dd6/depyf-0.19.0.tar.gz", hash = "sha256:afed0916b32d141cc90fa6220df01885eda442ca43b297d5050eeb90b4a5cb44", size = 6171405, upload-time = "2025-04-20T08:07:41.224Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/28/4d/1192acbcdc5e843f5e5d51f6e8788f2b60a9fe0b578ac385ded67a0b0b26/depyf-0.19.0-py3-none-any.whl", hash = "sha256:040b35fc0997d49df024b7d094f2a7836f91e9ed02f49982dd37e70aa3285ad5", size = 39034, upload-time = "2025-04-20T08:07:37.036Z" }, +] + [[package]] name = "detect-secrets" version = "1.5.0" @@ -1000,6 +1091,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/50/3d/9373ad9c56321fdab5b41197068e1d8c25883b3fea29dd361f9b55116869/dill-0.4.0-py3-none-any.whl", hash = "sha256:44f54bf6412c2c8464c14e8243eb163690a9800dbe2c367330883b19c7561049", size = 119668, upload-time = "2025-04-16T00:41:47.671Z" }, ] +[[package]] +name = "diskcache" +version = "5.6.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/3f/21/1c1ffc1a039ddcc459db43cc108658f32c57d271d7289a2794e401d0fdb6/diskcache-5.6.3.tar.gz", hash = "sha256:2c3a3fa2743d8535d832ec61c2054a1641f41775aa7c556758a109941e33e4fc", size = 67916, upload-time = "2023-08-31T06:12:00.316Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3f/27/4570e78fc0bf5ea0ca45eb1de3818a23787af9b390c0b0a0033a1b8236f9/diskcache-5.6.3-py3-none-any.whl", hash = "sha256:5e31b2d5fbad117cc363ebaf6b689474db18a1f6438bc82358b024abd4c2ca19", size = 45550, upload-time = "2023-08-31T06:11:58.822Z" }, +] + [[package]] name = "distlib" version = "0.4.0" @@ -1018,6 +1118,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/12/b3/231ffd4ab1fc9d679809f356cebee130ac7daa00d6d6f3206dd4fd137e9e/distro-1.9.0-py3-none-any.whl", hash = "sha256:7bffd925d65168f85027d8da9af6bddab658135b840670a223589bc0c8ef02b2", size = 20277, upload-time = "2023-12-24T09:54:30.421Z" }, ] +[[package]] +name = "dnspython" +version = "2.8.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/8c/8b/57666417c0f90f08bcafa776861060426765fdb422eb10212086fb811d26/dnspython-2.8.0.tar.gz", hash = "sha256:181d3c6996452cb1189c4046c61599b84a5a86e099562ffde77d26984ff26d0f", size = 368251, upload-time = "2025-09-07T18:58:00.022Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ba/5a/18ad964b0086c6e62e2e7500f7edc89e3faa45033c71c1893d34eed2b2de/dnspython-2.8.0-py3-none-any.whl", hash = "sha256:01d9bbc4a2d76bf0db7c1f729812ded6d912bd318d3b1cf81d30c0f845dbf3af", size = 331094, upload-time = "2025-09-07T18:57:58.071Z" }, +] + [[package]] name = "docstring-parser-fork" version = "0.0.14" @@ -1047,6 +1156,19 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/2a/09/f8d8f8f31e4483c10a906437b4ce31bdf3d6d417b73fe33f1a8b59e34228/einops-0.8.2-py3-none-any.whl", hash = "sha256:54058201ac7087911181bfec4af6091bb59380360f069276601256a76af08193", size = 65638, upload-time = "2026-01-26T04:13:18.546Z" }, ] +[[package]] +name = "email-validator" +version = "2.3.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "dnspython", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "idna", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f5/22/900cb125c76b7aaa450ce02fd727f452243f2e91a61af068b40adba60ea9/email_validator-2.3.0.tar.gz", hash = "sha256:9fc05c37f2f6cf439ff414f8fc46d917929974a82244c20eb10231ba60c54426", size = 51238, upload-time = "2025-08-26T13:09:06.831Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/de/15/545e2b6cf2e3be84bc1ed85613edd75b8aea69807a71c26f4ca6a9258e82/email_validator-2.3.0-py3-none-any.whl", hash = "sha256:80f13f623413e6b197ae73bb10bf4eb0908faf509ad8362c5edeb0be7fd450b4", size = 35604, upload-time = "2025-08-26T13:09:05.858Z" }, +] + [[package]] name = "evaluate" version = "0.4.1" @@ -1057,8 +1179,7 @@ dependencies = [ { name = "fsspec", extra = ["http"], marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, { name = "huggingface-hub", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, { name = "multiprocess", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, - { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'" }, - { name = "numpy", version = "2.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, { name = "packaging", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, { name = "pandas", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, { name = "requests", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, @@ -1096,6 +1217,87 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/84/a4/5caa2de7f917a04ada20018eccf60d6cc6145b0199d55ca3711b0fc08312/fastapi-0.135.3-py3-none-any.whl", hash = "sha256:9b0f590c813acd13d0ab43dd8494138eb58e484bfac405db1f3187cfc5810d98", size = 117734, upload-time = "2026-04-01T16:23:59.328Z" }, ] +[package.optional-dependencies] +standard = [ + { name = "email-validator", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "fastapi-cli", extra = ["standard"], marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "httpx", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "jinja2", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "pydantic-extra-types", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "pydantic-settings", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "python-multipart", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "uvicorn", extra = ["standard"], marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] + +[[package]] +name = "fastapi-cli" +version = "0.0.24" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "rich-toolkit", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "typer", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "uvicorn", extra = ["standard"], marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/6e/58/74797ae9e4610cfa0c6b34c8309096d3b20bb29be3b8b5fbf1004d10fa5f/fastapi_cli-0.0.24.tar.gz", hash = "sha256:1afc9c9e21d7ebc8a3ca5e31790cd8d837742be7e4f8b9236e99cb3451f0de00", size = 19043, upload-time = "2026-02-24T10:45:10.476Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c7/4b/68f9fe268e535d79c76910519530026a4f994ce07189ac0dded45c6af825/fastapi_cli-0.0.24-py3-none-any.whl", hash = "sha256:4a1f78ed798f106b4fee85ca93b85d8fe33c0a3570f775964d37edb80b8f0edc", size = 12304, upload-time = "2026-02-24T10:45:09.552Z" }, +] + +[package.optional-dependencies] +standard = [ + { name = "fastapi-cloud-cli", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "uvicorn", extra = ["standard"], marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] + +[[package]] +name = "fastapi-cloud-cli" +version = "0.16.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "fastar", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "httpx", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "pydantic", extra = ["email"], marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "rich-toolkit", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "rignore", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "sentry-sdk", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "typer", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "uvicorn", extra = ["standard"], marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/22/70/ca14fae57a221610d3e2e3dfad2b6e97ee31fcafaa36f90a2158d57e9a73/fastapi_cloud_cli-0.16.1.tar.gz", hash = "sha256:33b552c4ad46cd33823ef53f93b8b7813db2306c80c1cbcfa4d72067c99b26ab", size = 46193, upload-time = "2026-04-08T09:12:54.151Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a0/8b/f8c9eb116d2e89de5e0875c5fce90f23143410f41fe27725be04bdcec328/fastapi_cloud_cli-0.16.1-py3-none-any.whl", hash = "sha256:8b43bd8c7dd3710393d3be4c248c6a00807202b488a543716562529a8316cbee", size = 33212, upload-time = "2026-04-08T09:12:52.949Z" }, +] + +[[package]] +name = "fastar" +version = "0.10.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/5a/8a/841a8fea5d704ed19836a1f7f83fe2b2d95624a14e9ddf45823ffb518c98/fastar-0.10.0.tar.gz", hash = "sha256:cba4452d6a33894faf5b0b9d55342a1259ad5c94cbdb16af09346084e0787680", size = 70357, upload-time = "2026-04-08T01:02:01.507Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6e/dd/bc0deb3c8fc1966f074725e4f44bf6573a4f1de8e3b7d77e08371ebeb0ea/fastar-0.10.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:e0df3df848fe78657f9f9b40a811606cae34aa45ad79cd51f26d6f048f0d4ae1", size = 866216, upload-time = "2026-04-08T01:00:23.092Z" }, + { url = "https://files.pythonhosted.org/packages/97/3c/45023b3538b0eb34d0ac04b6bd4dc707c1480a48e88af5365d7be7448334/fastar-0.10.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a453abf99af0f42bb03db90f9bd4aa69b5a7b88d50841577d428ec51f206856f", size = 761054, upload-time = "2026-04-08T00:59:20.36Z" }, + { url = "https://files.pythonhosted.org/packages/69/07/23294498fceda38c3472f2c24a6aee1478991f1fd1982392bca6345af3ae/fastar-0.10.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c6a3e7acc58377de02ff3e8937d4b7e09b1270c294a0d5a0d3c2614aee69058e", size = 758885, upload-time = "2026-04-08T00:59:32.486Z" }, + { url = "https://files.pythonhosted.org/packages/19/89/1e0b3b5ef774deb0937bfeb93d2d21147a1db7a8d741ea63903b1f5d7cd6/fastar-0.10.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:50a4a5fcd001f289fe66cbcff0aaf9e081532253cd7427270734988b22db6136", size = 924750, upload-time = "2026-04-08T00:59:44.41Z" }, + { url = "https://files.pythonhosted.org/packages/b1/85/486c640b768f9f6524d9cebd32e84808070136fea5696884b946bf63ecbb/fastar-0.10.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:54f60b5a87a2884efa8fc51978989e58cb1dc0ec1f645629491cd12f1dd5bb77", size = 817365, upload-time = "2026-04-08T01:00:09.616Z" }, + { url = "https://files.pythonhosted.org/packages/f3/4b/271ac7f9067ab39cffe95f2349604ac2248906be6fd86a70abb3c9f3d8bb/fastar-0.10.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:edaa085c8555620ec24aac1663251d62bdece619fcf6a4ad9dc2389a5fa13220", size = 819348, upload-time = "2026-04-08T01:00:35.083Z" }, + { url = "https://files.pythonhosted.org/packages/4b/fc/ca87c6fee7eaad484711f8dca44c792e4dc0f2d3f4548c93939b06bdc7eb/fastar-0.10.0-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:4110f5a357ea88fa35f27021cf30c26d863a5b589d6ac9e4e854ed02b34c9f35", size = 885868, upload-time = "2026-04-08T00:59:56.124Z" }, + { url = "https://files.pythonhosted.org/packages/2f/00/588f0960ab1b36978d75a91bd44d9be9072c05211b04f224adcff9e83285/fastar-0.10.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:efa48b89ca2c8496f7fa0d36162e12d7476c597d0bae4d8fc42f86b958bd8fea", size = 968860, upload-time = "2026-04-08T01:01:12.557Z" }, + { url = "https://files.pythonhosted.org/packages/f4/4f/e07b9d82a58c27a8018d098b3ed51f561732c17fa6643c317bfba2907bdc/fastar-0.10.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:2637a20a69ea34455aa53cca8340273166bba8bd5c06727ea64ec151ba56abe0", size = 1036445, upload-time = "2026-04-08T01:01:25.512Z" }, + { url = "https://files.pythonhosted.org/packages/19/6e/de7934cea77c9938ecad2443b114cfee13a760534bb88279a0701b12fac3/fastar-0.10.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:e9ea5e45a1dd85c3104273b4b1628112f6a09115ed95dc0d31595097ce278fb2", size = 1074104, upload-time = "2026-04-08T01:01:38.464Z" }, + { url = "https://files.pythonhosted.org/packages/7e/8d/54d56acbe2bbab3efbf2c1b93ea709e0cd78b7ff9d42b4038f520a580009/fastar-0.10.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:68d70adc24b9f4cf4520ed60dbd9fb60a6eb22bb96fd6756bcb387616cb2a979", size = 1026288, upload-time = "2026-04-08T01:01:51.658Z" }, + { url = "https://files.pythonhosted.org/packages/ea/e1/1ad761f48331593eabe7ce10b0f68a09a2b5f55beace3057cf8fe3f0fafa/fastar-0.10.0-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0d81b83e42fc97b8e75bfd8df2be1878199c482a5b5633b80bce80cb740eb3f9", size = 865599, upload-time = "2026-04-08T01:00:24.384Z" }, + { url = "https://files.pythonhosted.org/packages/ec/fb/75bffcaa81da72e7e12e656a69c564dfb87ea8ca6fa9ab9c6f5c396ebaeb/fastar-0.10.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ec47f63e53ee3a9e117eeb18cbf4a14b3052e64bdc7ed4cdb812da741557547", size = 760975, upload-time = "2026-04-08T00:59:21.504Z" }, + { url = "https://files.pythonhosted.org/packages/66/36/3f22fc6c248b80676c1d230159313192dbcdf7fb45c3ad167036465733fe/fastar-0.10.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3a6abbd746ce3f6012c7e5d25a1193edb437dba3793337a9d5cdf7eafdc9d6e6", size = 757834, upload-time = "2026-04-08T00:59:34.034Z" }, + { url = "https://files.pythonhosted.org/packages/d3/25/76cb9ba8392a00b81c27b85f87cc9d61d713b2ac96981507ca01bba80b9f/fastar-0.10.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:26efe8b1d4c3c343befd10514216953d47f4e5d69274f2af2e38c22149728717", size = 923080, upload-time = "2026-04-08T00:59:45.592Z" }, + { url = "https://files.pythonhosted.org/packages/90/5e/4f1526deb1c2baa6f7e7973e354562d91da8159da445709c19a277447e4a/fastar-0.10.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bb21af50dcaed47350f2299627f350999b672a971ae17a963c10b5754425a645", size = 816582, upload-time = "2026-04-08T01:00:11.464Z" }, + { url = "https://files.pythonhosted.org/packages/88/2b/475e09dc60824baefd55ee752f8b5b4faf2be9b9f2d3309f9a85529d5ab3/fastar-0.10.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2dc9e8453af9f36bb7a56bd666020e9539dbda715192543373c2edc3cc16f0a3", size = 819304, upload-time = "2026-04-08T01:00:36.383Z" }, + { url = "https://files.pythonhosted.org/packages/f6/5c/221659f40c819e995fb5d8c823ee9890790b705b2d37701fd0a6cb9dee16/fastar-0.10.0-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:b3cb3b95106aa355e6a97665c3e97d3886ab36aa8165aeb7d4812964af79ed0a", size = 885014, upload-time = "2026-04-08T00:59:57.614Z" }, + { url = "https://files.pythonhosted.org/packages/b7/58/0e62784e9383ac940dfd31df8d2982a95e9fbd0d2c511fbd6ec9d402b97d/fastar-0.10.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4afa2628ef97316ad00b54a2d09042b0c0944d269d7006fc26dfef951a7f23a1", size = 968599, upload-time = "2026-04-08T01:01:13.884Z" }, + { url = "https://files.pythonhosted.org/packages/3f/fb/2abfd1aed679534ef99929e851c6ca83d88783d22d941fd41ce02707ea92/fastar-0.10.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:1627e03e17b51e59c4f242a5600e850d35707edf6f82a048dd34bf9578d9fbb8", size = 1035271, upload-time = "2026-04-08T01:01:26.954Z" }, + { url = "https://files.pythonhosted.org/packages/94/34/2f0a8f89a240a763d0cb6104df5d44013754a58150b201303c5135a4ce02/fastar-0.10.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:17b7dbb8b8b563569794ebd79e3058ffd6d1cec1e187c7af0cf5947c189fc50b", size = 1073373, upload-time = "2026-04-08T01:01:39.838Z" }, + { url = "https://files.pythonhosted.org/packages/75/9a/44b9b1a9dec721d229a57646d7c5c160dbb1975972c2d3935ddd93cd8a12/fastar-0.10.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:1762dcf52a145b9e6f7a4b5b1b17dd36af2607416a3f26c4632983fc5ae84526", size = 1026086, upload-time = "2026-04-08T01:01:53.298Z" }, +] + [[package]] name = "fastcore" version = "1.12.38" @@ -1168,7 +1370,8 @@ version = "0.1.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "cognitive-complexity" }, - { name = "setuptools" }, + { name = "setuptools", version = "79.0.1", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "setuptools", version = "80.10.2", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform == 'emscripten' or sys_platform == 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/e7/d6/2bb09fab21521424d5afc836aa0057d15a92f5e738e506a3e3cb035be517/flake8_cognitive_complexity-0.1.0.tar.gz", hash = "sha256:f202df054e4f6ff182b659c261922b9c684628a47beb19cb0973c50d6a7831c1", size = 3061, upload-time = "2020-08-01T05:49:18.353Z" } @@ -1219,6 +1422,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/cf/58/8acf1b3e91c58313ce5cb67df61001fc9dcd21be4fadb76c1a2d540e09ed/fqdn-1.5.1-py3-none-any.whl", hash = "sha256:3a179af3761e4df6eb2e026ff9e1a3033d3587bf980a0b1b2e1e5d08d7358014", size = 9121, upload-time = "2021-03-11T07:16:28.351Z" }, ] +[[package]] +name = "frozendict" +version = "2.4.7" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/90/b2/2a3d1374b7780999d3184e171e25439a8358c47b481f68be883c14086b4c/frozendict-2.4.7.tar.gz", hash = "sha256:e478fb2a1391a56c8a6e10cc97c4a9002b410ecd1ac28c18d780661762e271bd", size = 317082, upload-time = "2025-11-11T22:40:14.251Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/38/74/f94141b38a51a553efef7f510fc213894161ae49b88bffd037f8d2a7cb2f/frozendict-2.4.7-py3-none-any.whl", hash = "sha256:972af65924ea25cf5b4d9326d549e69a9a4918d8a76a9d3a7cd174d98b237550", size = 16264, upload-time = "2025-11-11T22:40:12.836Z" }, +] + [[package]] name = "frozenlist" version = "1.8.0" @@ -1308,6 +1520,21 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/7d/f3/393d486f33bf78ce8af4ced1814e936d0e71c630e8d98c1257a06e511c9a/gcsfs-2025.10.0-py2.py3-none-any.whl", hash = "sha256:654457af3a524e03d86658c5d8c6f3887689d6aa0c2c6b1c3b2d8e1fe2b77c09", size = 36911, upload-time = "2025-10-30T15:16:29.044Z" }, ] +[[package]] +name = "gguf" +version = "0.18.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "pyyaml", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "requests", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "tqdm", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/3f/26/7622a41c39db9d7090225a4bf8368550e59694dcf7313b44f9a82b501209/gguf-0.18.0.tar.gz", hash = "sha256:b4659093d5d0dccdb5902a904d54b327f4052879fe5e90946ad5fce9f8018c2e", size = 107170, upload-time = "2026-02-27T15:05:39.254Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5e/0c/e0f1eae7535a97476fb903f65301e35da2a66182b8161066b7eb312b2cb8/gguf-0.18.0-py3-none-any.whl", hash = "sha256:af93f7ef198a265cbde5fa6a6b3101528bca285903949ab0a3e591cd993a1864", size = 114244, upload-time = "2026-02-27T15:05:37.991Z" }, +] + [[package]] name = "gitdb" version = "4.0.12" @@ -1456,8 +1683,7 @@ dependencies = [ { name = "huggingface-hub", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, { name = "jinja2", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, { name = "markupsafe", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, - { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'" }, - { name = "numpy", version = "2.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, { name = "orjson", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, { name = "packaging", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, { name = "pandas", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, @@ -1656,6 +1882,22 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl", hash = "sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55", size = 78784, upload-time = "2025-04-24T22:06:20.566Z" }, ] +[[package]] +name = "httptools" +version = "0.7.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b5/46/120a669232c7bdedb9d52d4aeae7e6c7dfe151e99dc70802e2fc7a5e1993/httptools-0.7.1.tar.gz", hash = "sha256:abd72556974f8e7c74a259655924a717a2365b236c882c3f6f8a45fe94703ac9", size = 258961, upload-time = "2025-10-10T03:55:08.559Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/84/a6/b3965e1e146ef5762870bbe76117876ceba51a201e18cc31f5703e454596/httptools-0.7.1-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:2c15f37ef679ab9ecc06bfc4e6e8628c32a8e4b305459de7cf6785acd57e4d03", size = 517655, upload-time = "2025-10-10T03:54:41.347Z" }, + { url = "https://files.pythonhosted.org/packages/11/7d/71fee6f1844e6fa378f2eddde6c3e41ce3a1fb4b2d81118dd544e3441ec0/httptools-0.7.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7fe6e96090df46b36ccfaf746f03034e5ab723162bc51b0a4cf58305324036f2", size = 511440, upload-time = "2025-10-10T03:54:42.452Z" }, + { url = "https://files.pythonhosted.org/packages/22/a5/079d216712a4f3ffa24af4a0381b108aa9c45b7a5cc6eb141f81726b1823/httptools-0.7.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:f72fdbae2dbc6e68b8239defb48e6a5937b12218e6ffc2c7846cc37befa84362", size = 495186, upload-time = "2025-10-10T03:54:43.937Z" }, + { url = "https://files.pythonhosted.org/packages/e9/9e/025ad7b65278745dee3bd0ebf9314934c4592560878308a6121f7f812084/httptools-0.7.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e99c7b90a29fd82fea9ef57943d501a16f3404d7b9ee81799d41639bdaae412c", size = 499192, upload-time = "2025-10-10T03:54:45.003Z" }, + { url = "https://files.pythonhosted.org/packages/32/6a/6aaa91937f0010d288d3d124ca2946d48d60c3a5ee7ca62afe870e3ea011/httptools-0.7.1-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:04c6c0e6c5fb0739c5b8a9eb046d298650a0ff38cf42537fc372b28dc7e4472c", size = 478596, upload-time = "2025-10-10T03:54:48.919Z" }, + { url = "https://files.pythonhosted.org/packages/6d/70/023d7ce117993107be88d2cbca566a7c1323ccbaf0af7eabf2064fe356f6/httptools-0.7.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:69d4f9705c405ae3ee83d6a12283dc9feba8cc6aaec671b412917e644ab4fa66", size = 473268, upload-time = "2025-10-10T03:54:49.993Z" }, + { 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" }, +] + [[package]] name = "httpx" version = "0.28.1" @@ -1745,6 +1987,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl", hash = "sha256:f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53fbf12", size = 7484, upload-time = "2025-10-18T21:55:41.639Z" }, ] +[[package]] +name = "interegular" +version = "0.3.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/dc/9d/8b6dde58a028a3962ce17e84d5fe73758df61378e00ef8ac3d85da34b0ff/interegular-0.3.3.tar.gz", hash = "sha256:d9b697b21b34884711399ba0f0376914b81899ce670032486d0d048344a76600", size = 24705, upload-time = "2024-01-06T23:01:22.372Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c4/01/72d6472f80651673716d1deda2a5bbb633e563ecf94f4479da5519d69d25/interegular-0.3.3-py37-none-any.whl", hash = "sha256:b0c07007d48c89d6d19f7204972d369b2a77222722e126b6aa63aa721dc3b19c", size = 23635, upload-time = "2024-01-06T23:01:20.829Z" }, +] + [[package]] name = "ipykernel" version = "7.2.0" @@ -1865,6 +2116,36 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67", size = 134899, upload-time = "2025-03-05T20:05:00.369Z" }, ] +[[package]] +name = "jiter" +version = "0.14.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/6e/c1/0cddc6eb17d4c53a99840953f95dd3accdc5cfc7a337b0e9b26476276be9/jiter-0.14.0.tar.gz", hash = "sha256:e8a39e66dac7153cf3f964a12aad515afa8d74938ec5cc0018adcdae5367c79e", size = 165725, upload-time = "2026-04-10T14:28:42.01Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/41/a1/4f44832650a16b18e8391f1bf1d6ca4909bc738351826bcc198bba4357f4/jiter-0.14.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c409578cbd77c338975670ada777add4efd53379667edf0aceea730cabede6fb", size = 343730, upload-time = "2026-04-10T14:26:28.326Z" }, + { url = "https://files.pythonhosted.org/packages/48/64/a329e9d469f86307203594b1707e11ae51c3348d03bfd514a5f997870012/jiter-0.14.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7ede4331a1899d604463369c730dbb961ffdc5312bc7f16c41c2896415b1304a", size = 370102, upload-time = "2026-04-10T14:26:30.089Z" }, + { url = "https://files.pythonhosted.org/packages/94/c1/5e3dfc59635aa4d4c7bd20a820ac1d09b8ed851568356802cf1c08edb3cf/jiter-0.14.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:92cd8b6025981a041f5310430310b55b25ca593972c16407af8837d3d7d2ca01", size = 461335, upload-time = "2026-04-10T14:26:31.911Z" }, + { url = "https://files.pythonhosted.org/packages/e3/1b/dd157009dbc058f7b00108f545ccb72a2d56461395c4fc7b9cfdccb00af4/jiter-0.14.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:351bf6eda4e3a7ceb876377840c702e9a3e4ecc4624dbfb2d6463c67ae52637d", size = 378536, upload-time = "2026-04-10T14:26:33.595Z" }, + { url = "https://files.pythonhosted.org/packages/91/78/256013667b7c10b8834f8e6e54cd3e562d4c6e34227a1596addccc05e38c/jiter-0.14.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c1dcfbeb93d9ecd9ca128bbf8910120367777973fa193fb9a39c31237d8df165", size = 353859, upload-time = "2026-04-10T14:26:35.098Z" }, + { url = "https://files.pythonhosted.org/packages/de/d9/137d65ade9093a409fe80955ce60b12bb753722c986467aeda47faf450ad/jiter-0.14.0-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:ae039aaef8de3f8157ecc1fdd4d85043ac4f57538c245a0afaecb8321ec951c3", size = 357626, upload-time = "2026-04-10T14:26:36.685Z" }, + { url = "https://files.pythonhosted.org/packages/2e/48/76750835b87029342727c1a268bea8878ab988caf81ee4e7b880900eeb5a/jiter-0.14.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7d9d51eb96c82a9652933bd769fe6de66877d6eb2b2440e281f2938c51b5643e", size = 393172, upload-time = "2026-04-10T14:26:38.097Z" }, + { url = "https://files.pythonhosted.org/packages/a6/60/456c4e81d5c8045279aefe60e9e483be08793828800a4e64add8fdde7f2a/jiter-0.14.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d824ca4148b705970bf4e120924a212fdfca9859a73e42bd7889a63a4ea6bb98", size = 520300, upload-time = "2026-04-10T14:26:39.532Z" }, + { url = "https://files.pythonhosted.org/packages/a8/9f/2020e0984c235f678dced38fe4eec3058cf528e6af36ebf969b410305941/jiter-0.14.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:ff3a6465b3a0f54b1a430f45c3c0ba7d61ceb45cbc3e33f9e1a7f638d690baf3", size = 553059, upload-time = "2026-04-10T14:26:40.991Z" }, + { url = "https://files.pythonhosted.org/packages/7d/5e/2d0fee155826a968a832cc32438de5e2a193292c8721ca70d0b53e58245b/jiter-0.14.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77f4ea612fe8b84b8b04e51d0e78029ecf3466348e25973f953de6e6a59aa4c1", size = 343406, upload-time = "2026-04-10T14:26:50.762Z" }, + { url = "https://files.pythonhosted.org/packages/70/af/bf9ee0d3a4f8dc0d679fc1337f874fe60cdbf841ebbb304b374e1c9aaceb/jiter-0.14.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:62fe2451f8fcc0240261e6a4df18ecbcd58327857e61e625b2393ea3b468aac9", size = 369415, upload-time = "2026-04-10T14:26:52.188Z" }, + { url = "https://files.pythonhosted.org/packages/0f/83/8e8561eadba31f4d3948a5b712fb0447ec71c3560b57a855449e7b8ddc98/jiter-0.14.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6112f26f5afc75bcb475787d29da3aa92f9d09c7858f632f4be6ffe607be82e9", size = 461456, upload-time = "2026-04-10T14:26:53.611Z" }, + { url = "https://files.pythonhosted.org/packages/f6/c9/c5299e826a5fe6108d172b344033f61c69b1bb979dd8d9ddd4278a160971/jiter-0.14.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:215a6cb8fb7dc702aa35d475cc00ddc7f970e5c0b1417fb4b4ac5d82fa2a29db", size = 378488, upload-time = "2026-04-10T14:26:55.211Z" }, + { url = "https://files.pythonhosted.org/packages/5d/37/c16d9d15c0a471b8644b1abe3c82668092a707d9bedcf076f24ff2e380cd/jiter-0.14.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc4ab96a30fb3cb2c7e0cd33f7616c8860da5f5674438988a54ac717caccdbaa", size = 353242, upload-time = "2026-04-10T14:26:56.705Z" }, + { url = "https://files.pythonhosted.org/packages/58/ea/8050cb0dc654e728e1bfacbc0c640772f2181af5dedd13ae70145743a439/jiter-0.14.0-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:3a99c1387b1f2928f799a9de899193484d66206a50e98233b6b088a7f0c1edb2", size = 356823, upload-time = "2026-04-10T14:26:58.281Z" }, + { url = "https://files.pythonhosted.org/packages/b0/3b/cf71506d270e5f84d97326bf220e47aed9b95e9a4a060758fb07772170ab/jiter-0.14.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ab18d11074485438695f8d34a1b6da61db9754248f96d51341956607a8f39985", size = 392564, upload-time = "2026-04-10T14:27:00.018Z" }, + { url = "https://files.pythonhosted.org/packages/b0/cc/8c6c74a3efb5bd671bfd14f51e8a73375464ca914b1551bc3b40e26ac2c9/jiter-0.14.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:801028dcfc26ac0895e4964cbc0fd62c73be9fd4a7d7b1aaf6e5790033a719b7", size = 520322, upload-time = "2026-04-10T14:27:01.664Z" }, + { url = "https://files.pythonhosted.org/packages/41/24/68d7b883ec959884ddf00d019b2e0e82ba81b167e1253684fa90519ce33c/jiter-0.14.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:ad425b087aafb4a1c7e1e98a279200743b9aaf30c3e0ba723aec93f061bd9bc8", size = 552619, upload-time = "2026-04-10T14:27:03.316Z" }, + { url = "https://files.pythonhosted.org/packages/ad/c7/b002a7d8b8957ac3d469bd59c18ef4b1595a5216ae0de639a287b9816023/jiter-0.14.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7b25beaa0d4447ea8c7ae0c18c688905d34840d7d0b937f2f7bdd52162c98a40", size = 346563, upload-time = "2026-04-10T14:27:11.287Z" }, + { url = "https://files.pythonhosted.org/packages/f9/3b/f8d07580d8706021d255a6356b8fab13ee4c869412995550ce6ed4ddf97d/jiter-0.14.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:651a8758dd413c51e3b7f6557cdc6921faf70b14106f45f969f091f5cda990ea", size = 357928, upload-time = "2026-04-10T14:27:12.729Z" }, + { url = "https://files.pythonhosted.org/packages/ca/44/e26ede3f0caeff93f222559cb0cc4ca68579f07d009d7b6010c5b586f9b1/jiter-0.14.0-graalpy312-graalpy250_312_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:432c4db5255d86a259efde91e55cb4c8d18c0521d844c9e2e7efcce3899fb016", size = 343039, upload-time = "2026-04-10T14:28:38.356Z" }, + { url = "https://files.pythonhosted.org/packages/da/e9/1f9ada30cef7b05e74bb06f52127e7a724976c225f46adb65c37b1dadfb6/jiter-0.14.0-graalpy312-graalpy250_312_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:67f00d94b281174144d6532a04b66a12cb866cbdc47c3af3bfe2973677f9861a", size = 349613, upload-time = "2026-04-10T14:28:40.066Z" }, +] + [[package]] name = "jmespath" version = "1.1.0" @@ -2070,7 +2351,8 @@ dependencies = [ { name = "jupyterlab-server" }, { name = "notebook-shim" }, { name = "packaging" }, - { name = "setuptools" }, + { name = "setuptools", version = "79.0.1", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "setuptools", version = "80.10.2", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform == 'emscripten' or sys_platform == 'win32'" }, { name = "tornado" }, { name = "traitlets" }, ] @@ -2175,10 +2457,29 @@ dependencies = [ ] sdist = { url = "https://files.pythonhosted.org/packages/0e/72/a3add0e4eec4eb9e2569554f7c70f4a3c27712f40e3284d483e88094cc0e/langdetect-1.0.9.tar.gz", hash = "sha256:cbc1fef89f8d062739774bd51eda3da3274006b3661d199c2655f6b3f6d605a0", size = 981474, upload-time = "2021-05-07T07:54:13.562Z" } +[[package]] +name = "lark" +version = "1.2.2" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'", +] +sdist = { url = "https://files.pythonhosted.org/packages/af/60/bc7622aefb2aee1c0b4ba23c1446d3e30225c8770b38d7aedbfb65ca9d5a/lark-1.2.2.tar.gz", hash = "sha256:ca807d0162cd16cef15a8feecb862d7319e7a09bdb13aef927968e45040fed80", size = 252132, upload-time = "2024-08-13T19:49:00.652Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2d/00/d90b10b962b4277f5e64a78b6609968859ff86889f5b898c1a778c06ec00/lark-1.2.2-py3-none-any.whl", hash = "sha256:c2276486b02f0f1b90be155f2c8ba4a8e194d42775786db622faccd652d8e80c", size = 111036, upload-time = "2024-08-13T19:48:58.603Z" }, +] + [[package]] name = "lark" version = "1.3.1" source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "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 == 'win32'", + "python_full_version < '3.13' and sys_platform == 'emscripten'", +] sdist = { url = "https://files.pythonhosted.org/packages/da/34/28fff3ab31ccff1fd4f6c7c7b0ceb2b6968d8ea4950663eadcb5720591a0/lark-1.3.1.tar.gz", hash = "sha256:b426a7a6d6d53189d318f2b6236ab5d6429eaf09259f1ca33eb716eed10d2905", size = 382732, upload-time = "2025-10-27T18:25:56.653Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/82/3d/14ce75ef66813643812f3093ab17e46d3a206942ce7376d31ec2d36229e7/lark-1.3.1-py3-none-any.whl", hash = "sha256:c629b661023a014c37da873b4ff58a817398d12635d3bbb2c5a03be7fe5d1e12", size = 113151, upload-time = "2025-10-27T18:25:54.882Z" }, @@ -2215,28 +2516,25 @@ wheels = [ ] [[package]] -name = "liger-kernel" -version = "0.7.0" +name = "llguidance" +version = "0.7.30" source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "torch", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, - { name = "triton", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/73/f8/a25ab6549dd80c5055e84f0ee9be6ecf4a7c85ade448110607f4807ab2ef/liger_kernel-0.7.0.tar.gz", hash = "sha256:48c25648974c7d07d47591117b94188d1059999b7fb652e89e8ba50b21183cb3", size = 3780796, upload-time = "2026-02-12T22:01:00.101Z" } +sdist = { url = "https://files.pythonhosted.org/packages/bf/38/d1ef3ae08d8d857e5e0690c5b1e07bf7eb4a1cae5881d87215826dc6cadb/llguidance-0.7.30.tar.gz", hash = "sha256:e93bf75f2b6e48afb86a5cee23038746975e1654672bf5ba0ae75f7d4d4a2248", size = 1055528, upload-time = "2025-06-23T00:23:49.247Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/f7/c6/66c6a3c59b53f4cfbfa0c9e8c573c8843fb1d83cf3c2eb79e39109b76c17/liger_kernel-0.7.0-py3-none-any.whl", hash = "sha256:d2185d94362c069f508eb8aff5e7016c6669613265d5702733d674af4c616a56", size = 276512, upload-time = "2026-02-12T22:00:58.565Z" }, + { url = "https://files.pythonhosted.org/packages/9c/5b/6a166564b14f9f805f0ea01ec233a84f55789cb7eeffe1d6224ccd0e6cdd/llguidance-0.7.30-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:af8741c867e4bc7e42f7cdc68350c076b4edd0ca10ecefbde75f15a9f6bc25d0", size = 14867038, upload-time = "2025-06-23T00:23:39.571Z" }, + { url = "https://files.pythonhosted.org/packages/af/80/5a40b9689f17612434b820854cba9b8cabd5142072c491b5280fe5f7a35e/llguidance-0.7.30-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9edc409b9decd6cffba5f5bf3b4fbd7541f95daa8cbc9510cbf96c6ab1ffc153", size = 15004926, upload-time = "2025-06-23T00:23:43.965Z" }, ] [[package]] name = "llvmlite" -version = "0.47.0" +version = "0.44.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/01/88/a8952b6d5c21e74cbf158515b779666f692846502623e9e3c39d8e8ba25f/llvmlite-0.47.0.tar.gz", hash = "sha256:62031ce968ec74e95092184d4b0e857e444f8fdff0b8f9213707699570c33ccc", size = 193614, upload-time = "2026-03-31T18:29:53.497Z" } +sdist = { url = "https://files.pythonhosted.org/packages/89/6a/95a3d3610d5c75293d5dbbb2a76480d5d4eeba641557b69fe90af6c5b84e/llvmlite-0.44.0.tar.gz", hash = "sha256:07667d66a5d150abed9157ab6c0b9393c9356f229784a4385c02f99e94fc94d4", size = 171880, upload-time = "2025-01-20T11:14:41.342Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/e6/4b/e3f2cd17822cf772a4a51a0a8080b0032e6d37b2dbe8cfb724eac4e31c52/llvmlite-0.47.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:5853bf26160857c0c2573415ff4efe01c4c651e59e2c55c2a088740acfee51cd", size = 56275178, upload-time = "2026-03-31T18:28:48.342Z" }, - { url = "https://files.pythonhosted.org/packages/b6/55/a3b4a543185305a9bdf3d9759d53646ed96e55e7dfd43f53e7a421b8fbae/llvmlite-0.47.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:003bcf7fa579e14db59c1a1e113f93ab8a06b56a4be31c7f08264d1d4072d077", size = 55128632, upload-time = "2026-03-31T18:28:52.901Z" }, - { url = "https://files.pythonhosted.org/packages/31/b8/69f5565f1a280d032525878a86511eebed0645818492feeb169dfb20ae8e/llvmlite-0.47.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:2699a74321189e812d476a43d6d7f652f51811e7b5aad9d9bba842a1c7927acb", size = 56275178, upload-time = "2026-03-31T18:29:05.748Z" }, - { url = "https://files.pythonhosted.org/packages/d6/da/b32cafcb926fb0ce2aa25553bf32cb8764af31438f40e2481df08884c947/llvmlite-0.47.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6c6951e2b29930227963e53ee152441f0e14be92e9d4231852102d986c761e40", size = 55128632, upload-time = "2026-03-31T18:29:11.235Z" }, + { url = "https://files.pythonhosted.org/packages/cb/da/8341fd3056419441286c8e26bf436923021005ece0bff5f41906476ae514/llvmlite-0.44.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0143a5ef336da14deaa8ec26c5449ad5b6a2b564df82fcef4be040b9cacfea9", size = 42361901, upload-time = "2025-01-20T11:13:46.711Z" }, + { url = "https://files.pythonhosted.org/packages/53/ad/d79349dc07b8a395a99153d7ce8b01d6fcdc9f8231355a5df55ded649b61/llvmlite-0.44.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d752f89e31b66db6f8da06df8b39f9b91e78c5feea1bf9e8c1fba1d1c24c065d", size = 41184247, upload-time = "2025-01-20T11:13:56.159Z" }, + { url = "https://files.pythonhosted.org/packages/d2/1b/656f5a357de7135a3777bd735cc7c9b8f23b4d37465505bd0eaf4be9befe/llvmlite-0.44.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:46224058b13c96af1365290bdfebe9a6264ae62fb79b2b55693deed11657a8bf", size = 42361904, upload-time = "2025-01-20T11:14:22.949Z" }, + { url = "https://files.pythonhosted.org/packages/d8/e1/12c5f20cb9168fb3464a34310411d5ad86e4163c8ff2d14a2b57e5cc6bac/llvmlite-0.44.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:aa0097052c32bf721a4efc03bd109d335dfa57d9bffb3d4c24cc680711b8b4fc", size = 41184245, upload-time = "2025-01-20T11:14:31.731Z" }, ] [[package]] @@ -2250,8 +2548,7 @@ dependencies = [ { name = "jinja2", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, { name = "jsonlines", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, { name = "more-itertools", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, - { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'" }, - { name = "numpy", version = "2.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, { name = "pytablewriter", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, { name = "rouge-score", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, { name = "sacrebleu", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, @@ -2266,6 +2563,21 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/df/b3/8c2923ad4c4d911307e20ab9c7d7869d3811b5a76fe6dbe53678aafbeb04/lm_eval-0.4.11-py3-none-any.whl", hash = "sha256:9c9945475a715558649a38ffcb90f46e7bd23a849524a5e838f249161b030517", size = 8744826, upload-time = "2026-02-13T20:22:56.317Z" }, ] +[[package]] +name = "lm-format-enforcer" +version = "0.11.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "interegular", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "packaging", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "pydantic", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "pyyaml", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/84/d5/41cd417ba7dfdbbcfe46cebf81fb3dfd7c591b89897560ad05bb410a465d/lm_format_enforcer-0.11.3.tar.gz", hash = "sha256:e68081c108719cce284a9bcc889709b26ffb085a1945b5eba3a12cfa96d528da", size = 40258, upload-time = "2025-08-24T19:37:47.527Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a0/ef/11292bb0b85cf4c93447cab5a29f64576ed14d3ab4280e35ddd23486594a/lm_format_enforcer-0.11.3-py3-none-any.whl", hash = "sha256:cf586350875def1ae7a8fba84fcbbfc8371424b6c9d05c1fcba70aa233fbf06f", size = 45418, upload-time = "2025-08-24T19:37:46.325Z" }, +] + [[package]] name = "lxml" version = "6.0.4" @@ -2371,8 +2683,9 @@ dependencies = [ { name = "cycler" }, { name = "fonttools" }, { name = "kiwisolver" }, - { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.13'" }, - { name = "numpy", version = "2.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.13'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.13' and sys_platform == 'emscripten') or (python_full_version < '3.13' and sys_platform == 'win32')" }, + { name = "numpy", version = "2.4.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.13' and sys_platform == 'emscripten') or (python_full_version >= '3.13' and sys_platform == 'win32')" }, { name = "packaging" }, { name = "pillow" }, { name = "pyparsing" }, @@ -2451,8 +2764,7 @@ version = "1.11.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "jsonschema", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, - { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'" }, - { name = "numpy", version = "2.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, { name = "pillow", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, { name = "pydantic", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, { name = "pydantic-extra-types", extra = ["pycountry"], marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, @@ -2465,6 +2777,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/60/e4/73ad3c27e3fb613c3ce0953c928202c46cddebac3989b87be1b6f305a9f6/mistral_common-1.11.0-py3-none-any.whl", hash = "sha256:1d3ecaf7c3aa7338cb37b596fd0fb294485753958ee8e7254a6cc23eb30b249b", size = 6531513, upload-time = "2026-04-01T13:54:16.536Z" }, ] +[package.optional-dependencies] +audio = [ + { name = "soundfile", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "soxr", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +image = [ + { name = "opencv-python-headless", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] + [[package]] name = "mistune" version = "3.2.0" @@ -2543,6 +2864,38 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/5e/75/bd9b7bb966668920f06b200e84454c8f3566b102183bc55c5473d96cb2b9/msal_extensions-1.3.1-py3-none-any.whl", hash = "sha256:96d3de4d034504e969ac5e85bae8106c8373b5c6568e4c8fa7af2eca9dbe6bca", size = 20583, upload-time = "2025-03-14T23:51:03.016Z" }, ] +[[package]] +name = "msgpack" +version = "1.1.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/4d/f2/bfb55a6236ed8725a96b0aa3acbd0ec17588e6a2c3b62a93eb513ed8783f/msgpack-1.1.2.tar.gz", hash = "sha256:3b60763c1373dd60f398488069bcdc703cd08a711477b5d480eecc9f9626f47e", size = 173581, upload-time = "2025-10-08T09:15:56.596Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f2/60/a064b0345fc36c4c3d2c743c82d9100c40388d77f0b48b2f04d6041dbec1/msgpack-1.1.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c63eea553c69ab05b6747901b97d620bb2a690633c77f23feb0c6a947a8a7b8f", size = 417131, upload-time = "2025-10-08T09:15:05.136Z" }, + { url = "https://files.pythonhosted.org/packages/65/92/a5100f7185a800a5d29f8d14041f61475b9de465ffcc0f3b9fba606e4505/msgpack-1.1.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:372839311ccf6bdaf39b00b61288e0557916c3729529b301c52c2d88842add42", size = 427556, upload-time = "2025-10-08T09:15:06.837Z" }, + { url = "https://files.pythonhosted.org/packages/f5/87/ffe21d1bf7d9991354ad93949286f643b2bb6ddbeab66373922b44c3b8cc/msgpack-1.1.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2929af52106ca73fcb28576218476ffbb531a036c2adbcf54a3664de124303e9", size = 404920, upload-time = "2025-10-08T09:15:08.179Z" }, + { url = "https://files.pythonhosted.org/packages/ff/41/8543ed2b8604f7c0d89ce066f42007faac1eaa7d79a81555f206a5cdb889/msgpack-1.1.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:be52a8fc79e45b0364210eef5234a7cf8d330836d0a64dfbb878efa903d84620", size = 415013, upload-time = "2025-10-08T09:15:09.83Z" }, + { url = "https://files.pythonhosted.org/packages/d3/68/93180dce57f684a61a88a45ed13047558ded2be46f03acb8dec6d7c513af/msgpack-1.1.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1fdf7d83102bf09e7ce3357de96c59b627395352a4024f6e2458501f158bf999", size = 412721, upload-time = "2025-10-08T09:15:16.567Z" }, + { url = "https://files.pythonhosted.org/packages/5d/ba/459f18c16f2b3fc1a1ca871f72f07d70c07bf768ad0a507a698b8052ac58/msgpack-1.1.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fac4be746328f90caa3cd4bc67e6fe36ca2bf61d5c6eb6d895b6527e3f05071e", size = 424657, upload-time = "2025-10-08T09:15:17.825Z" }, + { url = "https://files.pythonhosted.org/packages/38/f8/4398c46863b093252fe67368b44edc6c13b17f4e6b0e4929dbf0bdb13f23/msgpack-1.1.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:fffee09044073e69f2bad787071aeec727183e7580443dfeb8556cbf1978d162", size = 402668, upload-time = "2025-10-08T09:15:19.003Z" }, + { url = "https://files.pythonhosted.org/packages/28/ce/698c1eff75626e4124b4d78e21cca0b4cc90043afb80a507626ea354ab52/msgpack-1.1.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5928604de9b032bc17f5099496417f113c45bc6bc21b5c6920caf34b3c428794", size = 419040, upload-time = "2025-10-08T09:15:20.183Z" }, +] + +[[package]] +name = "msgspec" +version = "0.21.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e3/60/f79b9b013a16fa3a58350c9295ddc6789f2e335f36ea61ed10a21b215364/msgspec-0.21.1.tar.gz", hash = "sha256:2313508e394b0d208f8f56892ca9b2799e2561329de9763b19619595a6c0f72c", size = 319193, upload-time = "2026-04-12T21:44:50.394Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8a/37/655101799590bcc5fddb2bd3fe0e6194e816c2d1da7c361725f5eb89a910/msgspec-0.21.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:846758412e9518252b2ac9bffd6f0e54d9ff614f5f9488df7749f81ff5c80920", size = 218871, upload-time = "2026-04-12T21:44:09.917Z" }, + { url = "https://files.pythonhosted.org/packages/b5/d1/d4cd9fe89c7d400d7a18f86ccc94daa3f0927f53558846fcb60791dce5d6/msgspec-0.21.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:21995e74b5c598c2e004110ad66ec7f1b8c20bf2bcf3b2de8fd9a3094422d3ff", size = 225025, upload-time = "2026-04-12T21:44:11.191Z" }, + { url = "https://files.pythonhosted.org/packages/24/bf/e20549e602b9edccadeeff98760345a416f9cce846a657e8b18e3396b212/msgspec-0.21.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6129f0cca52992e898fd5344187f7c8127b63d810b2fd73e36fca73b4c6475ee", size = 222672, upload-time = "2026-04-12T21:44:12.481Z" }, + { url = "https://files.pythonhosted.org/packages/b4/68/04d7a8f0f786545cf9b8c280c57aa6befb5977af6e884b8b54191cbe44b3/msgspec-0.21.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ef3ec2296248d1f8b9231acb051b6d471dfde8f21819e86c9adaaa9f42918521", size = 227303, upload-time = "2026-04-12T21:44:13.709Z" }, + { url = "https://files.pythonhosted.org/packages/ca/d9/9e9d7d7e5061b47540d03d640fab9b3965ba7ae49c1b2154861c8f007518/msgspec-0.21.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:48943e278b3854c2f89f955ddc6f9f430d3f0784b16e47d10604ee0463cd21f5", size = 218880, upload-time = "2026-04-12T21:44:20.028Z" }, + { url = "https://files.pythonhosted.org/packages/74/66/2bb344f34abb4b57e60c7c9c761994e0417b9718ec1460bf00c296f2a7ea/msgspec-0.21.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a9aa659ebb0101b1cbc31461212b87e341d961f0ab0772aaf068a99e001ec4aa", size = 225050, upload-time = "2026-04-12T21:44:21.577Z" }, + { url = "https://files.pythonhosted.org/packages/1a/84/7c1e412f76092277bf760cef12b7979d03314d259ab5b5cafde5d0c1722d/msgspec-0.21.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f7b27d1a8ead2b6f5b0c4f2d07b8be1ccfcc041c8a0e704781edebe3ae13c484", size = 222713, upload-time = "2026-04-12T21:44:22.83Z" }, + { url = "https://files.pythonhosted.org/packages/4e/27/0bba04b2b4ef05f3d068429410bc71d2cea925f1596a8f41152cccd5edb8/msgspec-0.21.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:38fe93e86b61328fe544cb7fd871fad5a27c8734bfda90f65e5dbe288ae50f61", size = 227259, upload-time = "2026-04-12T21:44:24.11Z" }, +] + [[package]] name = "multidict" version = "6.7.1" @@ -2741,6 +3094,28 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/9e/c9/b2622292ea83fbb4ec318f5b9ab867d0a28ab43c5717bb85b0a5f6b3b0a4/networkx-3.6.1-py3-none-any.whl", hash = "sha256:d47fbf302e7d9cbbb9e2555a0d267983d2aa476bac30e90dfbe5669bd57f3762", size = 2068504, upload-time = "2025-12-08T17:02:38.159Z" }, ] +[[package]] +name = "ninja" +version = "1.13.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/43/73/79a0b22fc731989c708068427579e840a6cf4e937fe7ae5c5d0b7356ac22/ninja-1.13.0.tar.gz", hash = "sha256:4a40ce995ded54d9dc24f8ea37ff3bf62ad192b547f6c7126e7e25045e76f978", size = 242558, upload-time = "2025-08-11T15:10:19.421Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8e/de/6e1cd6b84b412ac1ef327b76f0641aeb5dcc01e9d3f9eee0286d0c34fd93/ninja-1.13.0-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:3d00c692fb717fd511abeb44b8c5d00340c36938c12d6538ba989fe764e79630", size = 177467, upload-time = "2025-08-11T15:09:52.767Z" }, + { url = "https://files.pythonhosted.org/packages/c8/83/49320fb6e58ae3c079381e333575fdbcf1cca3506ee160a2dcce775046fa/ninja-1.13.0-py3-none-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:be7f478ff9f96a128b599a964fc60a6a87b9fa332ee1bd44fa243ac88d50291c", size = 187834, upload-time = "2025-08-11T15:09:54.115Z" }, + { url = "https://files.pythonhosted.org/packages/56/c7/ba22748fb59f7f896b609cd3e568d28a0a367a6d953c24c461fe04fc4433/ninja-1.13.0-py3-none-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:60056592cf495e9a6a4bea3cd178903056ecb0943e4de45a2ea825edb6dc8d3e", size = 202736, upload-time = "2025-08-11T15:09:55.745Z" }, + { url = "https://files.pythonhosted.org/packages/79/22/d1de07632b78ac8e6b785f41fa9aad7a978ec8c0a1bf15772def36d77aac/ninja-1.13.0-py3-none-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:1c97223cdda0417f414bf864cfb73b72d8777e57ebb279c5f6de368de0062988", size = 179034, upload-time = "2025-08-11T15:09:57.394Z" }, + { url = "https://files.pythonhosted.org/packages/ed/de/0e6edf44d6a04dabd0318a519125ed0415ce437ad5a1ec9b9be03d9048cf/ninja-1.13.0-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:fb46acf6b93b8dd0322adc3a4945452a4e774b75b91293bafcc7b7f8e6517dfa", size = 180716, upload-time = "2025-08-11T15:09:58.696Z" }, + { url = "https://files.pythonhosted.org/packages/54/28/938b562f9057aaa4d6bfbeaa05e81899a47aebb3ba6751e36c027a7f5ff7/ninja-1.13.0-py3-none-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:4be9c1b082d244b1ad7ef41eb8ab088aae8c109a9f3f0b3e56a252d3e00f42c1", size = 146843, upload-time = "2025-08-11T15:10:00.046Z" }, + { url = "https://files.pythonhosted.org/packages/2a/fb/d06a3838de4f8ab866e44ee52a797b5491df823901c54943b2adb0389fbb/ninja-1.13.0-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:6739d3352073341ad284246f81339a384eec091d9851a886dfa5b00a6d48b3e2", size = 154402, upload-time = "2025-08-11T15:10:01.657Z" }, + { url = "https://files.pythonhosted.org/packages/31/bf/0d7808af695ceddc763cf251b84a9892cd7f51622dc8b4c89d5012779f06/ninja-1.13.0-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:11be2d22027bde06f14c343f01d31446747dbb51e72d00decca2eb99be911e2f", size = 552388, upload-time = "2025-08-11T15:10:03.349Z" }, + { url = "https://files.pythonhosted.org/packages/9d/70/c99d0c2c809f992752453cce312848abb3b1607e56d4cd1b6cded317351a/ninja-1.13.0-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:aa45b4037b313c2f698bc13306239b8b93b4680eb47e287773156ac9e9304714", size = 472501, upload-time = "2025-08-11T15:10:04.735Z" }, + { url = "https://files.pythonhosted.org/packages/9f/43/c217b1153f0e499652f5e0766da8523ce3480f0a951039c7af115e224d55/ninja-1.13.0-py3-none-musllinux_1_2_i686.whl", hash = "sha256:5f8e1e8a1a30835eeb51db05cf5a67151ad37542f5a4af2a438e9490915e5b72", size = 638280, upload-time = "2025-08-11T15:10:06.512Z" }, + { url = "https://files.pythonhosted.org/packages/8c/45/9151bba2c8d0ae2b6260f71696330590de5850e5574b7b5694dce6023e20/ninja-1.13.0-py3-none-musllinux_1_2_ppc64le.whl", hash = "sha256:3d7d7779d12cb20c6d054c61b702139fd23a7a964ec8f2c823f1ab1b084150db", size = 642420, upload-time = "2025-08-11T15:10:08.35Z" }, + { url = "https://files.pythonhosted.org/packages/3c/fb/95752eb635bb8ad27d101d71bef15bc63049de23f299e312878fc21cb2da/ninja-1.13.0-py3-none-musllinux_1_2_riscv64.whl", hash = "sha256:d741a5e6754e0bda767e3274a0f0deeef4807f1fec6c0d7921a0244018926ae5", size = 585106, upload-time = "2025-08-11T15:10:09.818Z" }, + { url = "https://files.pythonhosted.org/packages/c1/31/aa56a1a286703800c0cbe39fb4e82811c277772dc8cd084f442dd8e2938a/ninja-1.13.0-py3-none-musllinux_1_2_s390x.whl", hash = "sha256:e8bad11f8a00b64137e9b315b137d8bb6cbf3086fbdc43bf1f90fd33324d2e96", size = 707138, upload-time = "2025-08-11T15:10:11.366Z" }, + { url = "https://files.pythonhosted.org/packages/34/6f/5f5a54a1041af945130abdb2b8529cbef0cdcbbf9bcf3f4195378319d29a/ninja-1.13.0-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:b4f2a072db3c0f944c32793e91532d8948d20d9ab83da9c0c7c15b5768072200", size = 581758, upload-time = "2025-08-11T15:10:13.295Z" }, +] + [[package]] name = "nltk" version = "3.9.4" @@ -2795,19 +3170,54 @@ wheels = [ [[package]] name = "numba" -version = "0.65.0" +version = "0.61.2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "llvmlite", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, - { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'" }, - { name = "numpy", version = "2.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/49/61/7299643b9c18d669e04be7c5bcb64d985070d07553274817b45b049e7bfe/numba-0.65.0.tar.gz", hash = "sha256:edad0d9f6682e93624c00125a471ae4df186175d71fd604c983c377cdc03e68b", size = 2764131, upload-time = "2026-04-01T03:52:01.946Z" } +sdist = { url = "https://files.pythonhosted.org/packages/1c/a0/e21f57604304aa03ebb8e098429222722ad99176a4f979d34af1d1ee80da/numba-0.61.2.tar.gz", hash = "sha256:8750ee147940a6637b80ecf7f95062185ad8726c8c28a2295b8ec1160a196f7d", size = 2820615, upload-time = "2025-04-09T02:58:07.659Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/73/36/88406bd58600cc696417b8e5dd6a056478da808f3eaf48d18e2421e0c2d9/numba-0.65.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:a52d92ffd297c10364bce60cd1fcb88f99284ab5df085f2c6bcd1cb33b529a6f", size = 3801411, upload-time = "2026-04-01T03:51:34.321Z" }, - { url = "https://files.pythonhosted.org/packages/0c/61/ce753a1d7646dd477e16d15e89473703faebb8995d2f71d7ad69a540b565/numba-0.65.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:da8e371e328c06d0010c3d8b44b21858652831b85bcfba78cb22c042e22dbd8e", size = 3501622, upload-time = "2026-04-01T03:51:36.348Z" }, - { url = "https://files.pythonhosted.org/packages/1b/8f/3d116e4b8e92f6abace431afa4b2b944f4d65bdee83af886f5c4b263df95/numba-0.65.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:b8a9008411615c69d083d1dcf477f75a5aa727b30beb16e139799e2be945cdfd", size = 3809537, upload-time = "2026-04-01T03:51:41.42Z" }, - { url = "https://files.pythonhosted.org/packages/b5/2c/6a3ca4128e253cb67affe06deb47688f51ce968f5111e2a06d010e6f1fa6/numba-0.65.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:af96c0cba53664efcb361528b8c75e011a6556c859c7e08424c2715201c6cf7a", size = 3508615, upload-time = "2026-04-01T03:51:43.444Z" }, + { url = "https://files.pythonhosted.org/packages/9a/2d/e518df036feab381c23a624dac47f8445ac55686ec7f11083655eb707da3/numba-0.61.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:5b1bb509d01f23d70325d3a5a0e237cbc9544dd50e50588bc581ba860c213546", size = 3885928, upload-time = "2025-04-09T02:57:55.206Z" }, + { url = "https://files.pythonhosted.org/packages/10/0f/23cced68ead67b75d77cfcca3df4991d1855c897ee0ff3fe25a56ed82108/numba-0.61.2-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:48a53a3de8f8793526cbe330f2a39fe9a6638efcbf11bd63f3d2f9757ae345cd", size = 3577115, upload-time = "2025-04-09T02:57:56.818Z" }, + { url = "https://files.pythonhosted.org/packages/0d/e0/5ea04e7ad2c39288c0f0f9e8d47638ad70f28e275d092733b5817cf243c9/numba-0.61.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:bdbca73ad81fa196bd53dc12e3aaf1564ae036e0c125f237c7644fe64a4928ab", size = 3893918, upload-time = "2025-04-09T02:58:02.933Z" }, + { url = "https://files.pythonhosted.org/packages/17/58/064f4dcb7d7e9412f16ecf80ed753f92297e39f399c905389688cf950b81/numba-0.61.2-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:5f154aaea625fb32cfbe3b80c5456d514d416fcdf79733dd69c0df3a11348e9e", size = 3584056, upload-time = "2025-04-09T02:58:04.538Z" }, +] + +[[package]] +name = "numpy" +version = "2.2.6" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'", +] +sdist = { url = "https://files.pythonhosted.org/packages/76/21/7d2a95e4bba9dc13d043ee156a356c0a8f0c6309dff6b21b4d71a073b8a8/numpy-2.2.6.tar.gz", hash = "sha256:e29554e2bef54a90aa5cc07da6ce955accb83f21ab5de01a62c8478897b264fd", size = 20276440, upload-time = "2025-05-17T22:38:04.611Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/82/5d/c00588b6cf18e1da539b45d3598d3557084990dcc4331960c15ee776ee41/numpy-2.2.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:41c5a21f4a04fa86436124d388f6ed60a9343a6f767fced1a8a71c3fbca038ff", size = 20875348, upload-time = "2025-05-17T21:34:39.648Z" }, + { url = "https://files.pythonhosted.org/packages/66/ee/560deadcdde6c2f90200450d5938f63a34b37e27ebff162810f716f6a230/numpy-2.2.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:de749064336d37e340f640b05f24e9e3dd678c57318c7289d222a8a2f543e90c", size = 14119362, upload-time = "2025-05-17T21:35:01.241Z" }, + { url = "https://files.pythonhosted.org/packages/3c/65/4baa99f1c53b30adf0acd9a5519078871ddde8d2339dc5a7fde80d9d87da/numpy-2.2.6-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:894b3a42502226a1cac872f840030665f33326fc3dac8e57c607905773cdcde3", size = 5084103, upload-time = "2025-05-17T21:35:10.622Z" }, + { url = "https://files.pythonhosted.org/packages/cc/89/e5a34c071a0570cc40c9a54eb472d113eea6d002e9ae12bb3a8407fb912e/numpy-2.2.6-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:71594f7c51a18e728451bb50cc60a3ce4e6538822731b2933209a1f3614e9282", size = 6625382, upload-time = "2025-05-17T21:35:21.414Z" }, + { url = "https://files.pythonhosted.org/packages/f8/35/8c80729f1ff76b3921d5c9487c7ac3de9b2a103b1cd05e905b3090513510/numpy-2.2.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f2618db89be1b4e05f7a1a847a9c1c0abd63e63a1607d892dd54668dd92faf87", size = 14018462, upload-time = "2025-05-17T21:35:42.174Z" }, + { url = "https://files.pythonhosted.org/packages/8c/3d/1e1db36cfd41f895d266b103df00ca5b3cbe965184df824dec5c08c6b803/numpy-2.2.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd83c01228a688733f1ded5201c678f0c53ecc1006ffbc404db9f7a899ac6249", size = 16527618, upload-time = "2025-05-17T21:36:06.711Z" }, + { url = "https://files.pythonhosted.org/packages/61/c6/03ed30992602c85aa3cd95b9070a514f8b3c33e31124694438d88809ae36/numpy-2.2.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:37c0ca431f82cd5fa716eca9506aefcabc247fb27ba69c5062a6d3ade8cf8f49", size = 15505511, upload-time = "2025-05-17T21:36:29.965Z" }, + { url = "https://files.pythonhosted.org/packages/b7/25/5761d832a81df431e260719ec45de696414266613c9ee268394dd5ad8236/numpy-2.2.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fe27749d33bb772c80dcd84ae7e8df2adc920ae8297400dabec45f0dedb3f6de", size = 18313783, upload-time = "2025-05-17T21:36:56.883Z" }, + { url = "https://files.pythonhosted.org/packages/f9/5c/6657823f4f594f72b5471f1db1ab12e26e890bb2e41897522d134d2a3e81/numpy-2.2.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0811bb762109d9708cca4d0b13c4f67146e3c3b7cf8d34018c722adb2d957c84", size = 20867828, upload-time = "2025-05-17T21:37:56.699Z" }, + { url = "https://files.pythonhosted.org/packages/dc/9e/14520dc3dadf3c803473bd07e9b2bd1b69bc583cb2497b47000fed2fa92f/numpy-2.2.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:287cc3162b6f01463ccd86be154f284d0893d2b3ed7292439ea97eafa8170e0b", size = 14143006, upload-time = "2025-05-17T21:38:18.291Z" }, + { url = "https://files.pythonhosted.org/packages/4f/06/7e96c57d90bebdce9918412087fc22ca9851cceaf5567a45c1f404480e9e/numpy-2.2.6-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:f1372f041402e37e5e633e586f62aa53de2eac8d98cbfb822806ce4bbefcb74d", size = 5076765, upload-time = "2025-05-17T21:38:27.319Z" }, + { url = "https://files.pythonhosted.org/packages/73/ed/63d920c23b4289fdac96ddbdd6132e9427790977d5457cd132f18e76eae0/numpy-2.2.6-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:55a4d33fa519660d69614a9fad433be87e5252f4b03850642f88993f7b2ca566", size = 6617736, upload-time = "2025-05-17T21:38:38.141Z" }, + { url = "https://files.pythonhosted.org/packages/85/c5/e19c8f99d83fd377ec8c7e0cf627a8049746da54afc24ef0a0cb73d5dfb5/numpy-2.2.6-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f92729c95468a2f4f15e9bb94c432a9229d0d50de67304399627a943201baa2f", size = 14010719, upload-time = "2025-05-17T21:38:58.433Z" }, + { url = "https://files.pythonhosted.org/packages/19/49/4df9123aafa7b539317bf6d342cb6d227e49f7a35b99c287a6109b13dd93/numpy-2.2.6-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1bc23a79bfabc5d056d106f9befb8d50c31ced2fbc70eedb8155aec74a45798f", size = 16526072, upload-time = "2025-05-17T21:39:22.638Z" }, + { url = "https://files.pythonhosted.org/packages/b2/6c/04b5f47f4f32f7c2b0e7260442a8cbcf8168b0e1a41ff1495da42f42a14f/numpy-2.2.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e3143e4451880bed956e706a3220b4e5cf6172ef05fcc397f6f36a550b1dd868", size = 15503213, upload-time = "2025-05-17T21:39:45.865Z" }, + { url = "https://files.pythonhosted.org/packages/17/0a/5cd92e352c1307640d5b6fec1b2ffb06cd0dabe7d7b8227f97933d378422/numpy-2.2.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b4f13750ce79751586ae2eb824ba7e1e8dba64784086c98cdbbcc6a42112ce0d", size = 18316632, upload-time = "2025-05-17T21:40:13.331Z" }, + { url = "https://files.pythonhosted.org/packages/6b/9e/4bf918b818e516322db999ac25d00c75788ddfd2d2ade4fa66f1f38097e1/numpy-2.2.6-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0bca768cd85ae743b2affdc762d617eddf3bcf8724435498a1e80132d04879e6", size = 20963467, upload-time = "2025-05-17T21:40:44Z" }, + { url = "https://files.pythonhosted.org/packages/61/66/d2de6b291507517ff2e438e13ff7b1e2cdbdb7cb40b3ed475377aece69f9/numpy-2.2.6-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:fc0c5673685c508a142ca65209b4e79ed6740a4ed6b2267dbba90f34b0b3cfda", size = 14225144, upload-time = "2025-05-17T21:41:05.695Z" }, + { url = "https://files.pythonhosted.org/packages/e4/25/480387655407ead912e28ba3a820bc69af9adf13bcbe40b299d454ec011f/numpy-2.2.6-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:5bd4fc3ac8926b3819797a7c0e2631eb889b4118a9898c84f585a54d475b7e40", size = 5200217, upload-time = "2025-05-17T21:41:15.903Z" }, + { url = "https://files.pythonhosted.org/packages/aa/4a/6e313b5108f53dcbf3aca0c0f3e9c92f4c10ce57a0a721851f9785872895/numpy-2.2.6-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:fee4236c876c4e8369388054d02d0e9bb84821feb1a64dd59e137e6511a551f8", size = 6712014, upload-time = "2025-05-17T21:41:27.321Z" }, + { url = "https://files.pythonhosted.org/packages/b7/30/172c2d5c4be71fdf476e9de553443cf8e25feddbe185e0bd88b096915bcc/numpy-2.2.6-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e1dda9c7e08dc141e0247a5b8f49cf05984955246a327d4c48bda16821947b2f", size = 14077935, upload-time = "2025-05-17T21:41:49.738Z" }, + { url = "https://files.pythonhosted.org/packages/12/fb/9e743f8d4e4d3c710902cf87af3512082ae3d43b945d5d16563f26ec251d/numpy-2.2.6-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f447e6acb680fd307f40d3da4852208af94afdfab89cf850986c3ca00562f4fa", size = 16600122, upload-time = "2025-05-17T21:42:14.046Z" }, + { url = "https://files.pythonhosted.org/packages/12/75/ee20da0e58d3a66f204f38916757e01e33a9737d0b22373b3eb5a27358f9/numpy-2.2.6-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:389d771b1623ec92636b0786bc4ae56abafad4a4c513d36a55dce14bd9ce8571", size = 15586143, upload-time = "2025-05-17T21:42:37.464Z" }, + { url = "https://files.pythonhosted.org/packages/76/95/bef5b37f29fc5e739947e9ce5179ad402875633308504a52d188302319c8/numpy-2.2.6-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8e9ace4a37db23421249ed236fdcdd457d671e25146786dfc96835cd951aa7c1", size = 18385260, upload-time = "2025-05-17T21:43:05.189Z" }, ] [[package]] @@ -2817,40 +3227,15 @@ source = { registry = "https://pypi.org/simple" } resolution-markers = [ "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'", ] sdist = { url = "https://files.pythonhosted.org/packages/76/65/21b3bc86aac7b8f2862db1e808f1ea22b028e30a225a34a5ede9bf8678f2/numpy-2.3.5.tar.gz", hash = "sha256:784db1dcdab56bf0517743e746dfb0f885fc68d948aba86eeec2cba234bdf1c0", size = 20584950, upload-time = "2025-11-16T22:52:42.067Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/44/37/e669fe6cbb2b96c62f6bbedc6a81c0f3b7362f6a59230b23caa673a85721/numpy-2.3.5-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:74ae7b798248fe62021dbf3c914245ad45d1a6b0cb4a29ecb4b31d0bfbc4cc3e", size = 16733873, upload-time = "2025-11-16T22:49:49.84Z" }, - { url = "https://files.pythonhosted.org/packages/c5/65/df0db6c097892c9380851ab9e44b52d4f7ba576b833996e0080181c0c439/numpy-2.3.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ee3888d9ff7c14604052b2ca5535a30216aa0a58e948cdd3eeb8d3415f638769", size = 12259838, upload-time = "2025-11-16T22:49:52.863Z" }, - { url = "https://files.pythonhosted.org/packages/5b/e1/1ee06e70eb2136797abe847d386e7c0e830b67ad1d43f364dd04fa50d338/numpy-2.3.5-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:612a95a17655e213502f60cfb9bf9408efdc9eb1d5f50535cc6eb365d11b42b5", size = 5088378, upload-time = "2025-11-16T22:49:55.055Z" }, - { url = "https://files.pythonhosted.org/packages/6d/9c/1ca85fb86708724275103b81ec4cf1ac1d08f465368acfc8da7ab545bdae/numpy-2.3.5-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:3101e5177d114a593d79dd79658650fe28b5a0d8abeb8ce6f437c0e6df5be1a4", size = 6628559, upload-time = "2025-11-16T22:49:57.371Z" }, - { url = "https://files.pythonhosted.org/packages/74/78/fcd41e5a0ce4f3f7b003da85825acddae6d7ecb60cf25194741b036ca7d6/numpy-2.3.5-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8b973c57ff8e184109db042c842423ff4f60446239bd585a5131cc47f06f789d", size = 14250702, upload-time = "2025-11-16T22:49:59.632Z" }, - { url = "https://files.pythonhosted.org/packages/b6/23/2a1b231b8ff672b4c450dac27164a8b2ca7d9b7144f9c02d2396518352eb/numpy-2.3.5-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0d8163f43acde9a73c2a33605353a4f1bc4798745a8b1d73183b28e5b435ae28", size = 16606086, upload-time = "2025-11-16T22:50:02.127Z" }, - { url = "https://files.pythonhosted.org/packages/a0/c5/5ad26fbfbe2012e190cc7d5003e4d874b88bb18861d0829edc140a713021/numpy-2.3.5-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:51c1e14eb1e154ebd80e860722f9e6ed6ec89714ad2db2d3aa33c31d7c12179b", size = 16025985, upload-time = "2025-11-16T22:50:04.536Z" }, - { url = "https://files.pythonhosted.org/packages/d2/fa/dd48e225c46c819288148d9d060b047fd2a6fb1eb37eae25112ee4cb4453/numpy-2.3.5-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b46b4ec24f7293f23adcd2d146960559aaf8020213de8ad1909dba6c013bf89c", size = 18542976, upload-time = "2025-11-16T22:50:07.557Z" }, { url = "https://files.pythonhosted.org/packages/05/79/ccbd23a75862d95af03d28b5c6901a1b7da4803181513d52f3b86ed9446e/numpy-2.3.5-cp312-cp312-win32.whl", hash = "sha256:3997b5b3c9a771e157f9aae01dd579ee35ad7109be18db0e85dbdbe1de06e952", size = 6285274, upload-time = "2025-11-16T22:50:10.746Z" }, { url = "https://files.pythonhosted.org/packages/2d/57/8aeaf160312f7f489dea47ab61e430b5cb051f59a98ae68b7133ce8fa06a/numpy-2.3.5-cp312-cp312-win_amd64.whl", hash = "sha256:86945f2ee6d10cdfd67bcb4069c1662dd711f7e2a4343db5cecec06b87cf31aa", size = 12782922, upload-time = "2025-11-16T22:50:12.811Z" }, { url = "https://files.pythonhosted.org/packages/78/a6/aae5cc2ca78c45e64b9ef22f089141d661516856cf7c8a54ba434576900d/numpy-2.3.5-cp312-cp312-win_arm64.whl", hash = "sha256:f28620fe26bee16243be2b7b874da327312240a7cdc38b769a697578d2100013", size = 10194667, upload-time = "2025-11-16T22:50:16.16Z" }, - { url = "https://files.pythonhosted.org/packages/db/69/9cde09f36da4b5a505341180a3f2e6fadc352fd4d2b7096ce9778db83f1a/numpy-2.3.5-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:d0f23b44f57077c1ede8c5f26b30f706498b4862d3ff0a7298b8411dd2f043ff", size = 16728251, upload-time = "2025-11-16T22:50:19.013Z" }, - { url = "https://files.pythonhosted.org/packages/79/fb/f505c95ceddd7027347b067689db71ca80bd5ecc926f913f1a23e65cf09b/numpy-2.3.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:aa5bc7c5d59d831d9773d1170acac7893ce3a5e130540605770ade83280e7188", size = 12254652, upload-time = "2025-11-16T22:50:21.487Z" }, - { url = "https://files.pythonhosted.org/packages/78/da/8c7738060ca9c31b30e9301ee0cf6c5ffdbf889d9593285a1cead337f9a5/numpy-2.3.5-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:ccc933afd4d20aad3c00bcef049cb40049f7f196e0397f1109dba6fed63267b0", size = 5083172, upload-time = "2025-11-16T22:50:24.562Z" }, - { url = "https://files.pythonhosted.org/packages/a4/b4/ee5bb2537fb9430fd2ef30a616c3672b991a4129bb1c7dcc42aa0abbe5d7/numpy-2.3.5-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:afaffc4393205524af9dfa400fa250143a6c3bc646c08c9f5e25a9f4b4d6a903", size = 6622990, upload-time = "2025-11-16T22:50:26.47Z" }, - { url = "https://files.pythonhosted.org/packages/95/03/dc0723a013c7d7c19de5ef29e932c3081df1c14ba582b8b86b5de9db7f0f/numpy-2.3.5-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9c75442b2209b8470d6d5d8b1c25714270686f14c749028d2199c54e29f20b4d", size = 14248902, upload-time = "2025-11-16T22:50:28.861Z" }, - { url = "https://files.pythonhosted.org/packages/f5/10/ca162f45a102738958dcec8023062dad0cbc17d1ab99d68c4e4a6c45fb2b/numpy-2.3.5-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:11e06aa0af8c0f05104d56450d6093ee639e15f24ecf62d417329d06e522e017", size = 16597430, upload-time = "2025-11-16T22:50:31.56Z" }, - { url = "https://files.pythonhosted.org/packages/2a/51/c1e29be863588db58175175f057286900b4b3327a1351e706d5e0f8dd679/numpy-2.3.5-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ed89927b86296067b4f81f108a2271d8926467a8868e554eaf370fc27fa3ccaf", size = 16024551, upload-time = "2025-11-16T22:50:34.242Z" }, - { url = "https://files.pythonhosted.org/packages/83/68/8236589d4dbb87253d28259d04d9b814ec0ecce7cb1c7fed29729f4c3a78/numpy-2.3.5-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:51c55fe3451421f3a6ef9a9c1439e82101c57a2c9eab9feb196a62b1a10b58ce", size = 18533275, upload-time = "2025-11-16T22:50:37.651Z" }, { url = "https://files.pythonhosted.org/packages/40/56/2932d75b6f13465239e3b7b7e511be27f1b8161ca2510854f0b6e521c395/numpy-2.3.5-cp313-cp313-win32.whl", hash = "sha256:1978155dd49972084bd6ef388d66ab70f0c323ddee6f693d539376498720fb7e", size = 6277637, upload-time = "2025-11-16T22:50:40.11Z" }, { url = "https://files.pythonhosted.org/packages/0c/88/e2eaa6cffb115b85ed7c7c87775cb8bcf0816816bc98ca8dbfa2ee33fe6e/numpy-2.3.5-cp313-cp313-win_amd64.whl", hash = "sha256:00dc4e846108a382c5869e77c6ed514394bdeb3403461d25a829711041217d5b", size = 12779090, upload-time = "2025-11-16T22:50:42.503Z" }, { url = "https://files.pythonhosted.org/packages/8f/88/3f41e13a44ebd4034ee17baa384acac29ba6a4fcc2aca95f6f08ca0447d1/numpy-2.3.5-cp313-cp313-win_arm64.whl", hash = "sha256:0472f11f6ec23a74a906a00b48a4dcf3849209696dff7c189714511268d103ae", size = 10194710, upload-time = "2025-11-16T22:50:44.971Z" }, - { url = "https://files.pythonhosted.org/packages/13/cb/71744144e13389d577f867f745b7df2d8489463654a918eea2eeb166dfc9/numpy-2.3.5-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:414802f3b97f3c1eef41e530aaba3b3c1620649871d8cb38c6eaff034c2e16bd", size = 16827292, upload-time = "2025-11-16T22:50:47.715Z" }, - { url = "https://files.pythonhosted.org/packages/71/80/ba9dc6f2a4398e7f42b708a7fdc841bb638d353be255655498edbf9a15a8/numpy-2.3.5-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:5ee6609ac3604fa7780e30a03e5e241a7956f8e2fcfe547d51e3afa5247ac47f", size = 12378897, upload-time = "2025-11-16T22:50:51.327Z" }, - { url = "https://files.pythonhosted.org/packages/2e/6d/db2151b9f64264bcceccd51741aa39b50150de9b602d98ecfe7e0c4bff39/numpy-2.3.5-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:86d835afea1eaa143012a2d7a3f45a3adce2d7adc8b4961f0b362214d800846a", size = 5207391, upload-time = "2025-11-16T22:50:54.542Z" }, - { url = "https://files.pythonhosted.org/packages/80/ae/429bacace5ccad48a14c4ae5332f6aa8ab9f69524193511d60ccdfdc65fa/numpy-2.3.5-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:30bc11310e8153ca664b14c5f1b73e94bd0503681fcf136a163de856f3a50139", size = 6721275, upload-time = "2025-11-16T22:50:56.794Z" }, - { url = "https://files.pythonhosted.org/packages/74/5b/1919abf32d8722646a38cd527bc3771eb229a32724ee6ba340ead9b92249/numpy-2.3.5-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1062fde1dcf469571705945b0f221b73928f34a20c904ffb45db101907c3454e", size = 14306855, upload-time = "2025-11-16T22:50:59.208Z" }, - { url = "https://files.pythonhosted.org/packages/a5/87/6831980559434973bebc30cd9c1f21e541a0f2b0c280d43d3afd909b66d0/numpy-2.3.5-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ce581db493ea1a96c0556360ede6607496e8bf9b3a8efa66e06477267bc831e9", size = 16657359, upload-time = "2025-11-16T22:51:01.991Z" }, - { url = "https://files.pythonhosted.org/packages/dd/91/c797f544491ee99fd00495f12ebb7802c440c1915811d72ac5b4479a3356/numpy-2.3.5-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:cc8920d2ec5fa99875b670bb86ddeb21e295cb07aa331810d9e486e0b969d946", size = 16093374, upload-time = "2025-11-16T22:51:05.291Z" }, - { url = "https://files.pythonhosted.org/packages/74/a6/54da03253afcbe7a72785ec4da9c69fb7a17710141ff9ac5fcb2e32dbe64/numpy-2.3.5-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:9ee2197ef8c4f0dfe405d835f3b6a14f5fee7782b5de51ba06fb65fc9b36e9f1", size = 18594587, upload-time = "2025-11-16T22:51:08.585Z" }, { 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" }, @@ -2863,39 +3248,15 @@ source = { registry = "https://pypi.org/simple" } resolution-markers = [ "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'", ] sdist = { url = "https://files.pythonhosted.org/packages/57/fd/0005efbd0af48e55eb3c7208af93f2862d4b1a56cd78e84309a2d959208d/numpy-2.4.2.tar.gz", hash = "sha256:659a6107e31a83c4e33f763942275fd278b21d095094044eb35569e86a21ddae", size = 20723651, upload-time = "2026-01-31T23:13:10.135Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/51/6e/6f394c9c77668153e14d4da83bcc247beb5952f6ead7699a1a2992613bea/numpy-2.4.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:21982668592194c609de53ba4933a7471880ccbaadcc52352694a59ecc860b3a", size = 16667963, upload-time = "2026-01-31T23:10:52.147Z" }, - { url = "https://files.pythonhosted.org/packages/1f/f8/55483431f2b2fd015ae6ed4fe62288823ce908437ed49db5a03d15151678/numpy-2.4.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40397bda92382fcec844066efb11f13e1c9a3e2a8e8f318fb72ed8b6db9f60f1", size = 14693571, upload-time = "2026-01-31T23:10:54.789Z" }, - { url = "https://files.pythonhosted.org/packages/2f/20/18026832b1845cdc82248208dd929ca14c9d8f2bac391f67440707fff27c/numpy-2.4.2-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:b3a24467af63c67829bfaa61eecf18d5432d4f11992688537be59ecd6ad32f5e", size = 5203469, upload-time = "2026-01-31T23:10:57.343Z" }, - { url = "https://files.pythonhosted.org/packages/7d/33/2eb97c8a77daaba34eaa3fa7241a14ac5f51c46a6bd5911361b644c4a1e2/numpy-2.4.2-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:805cc8de9fd6e7a22da5aed858e0ab16be5a4db6c873dde1d7451c541553aa27", size = 6550820, upload-time = "2026-01-31T23:10:59.429Z" }, - { url = "https://files.pythonhosted.org/packages/b1/91/b97fdfd12dc75b02c44e26c6638241cc004d4079a0321a69c62f51470c4c/numpy-2.4.2-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6d82351358ffbcdcd7b686b90742a9b86632d6c1c051016484fa0b326a0a1548", size = 15663067, upload-time = "2026-01-31T23:11:01.291Z" }, - { url = "https://files.pythonhosted.org/packages/f5/c6/a18e59f3f0b8071cc85cbc8d80cd02d68aa9710170b2553a117203d46936/numpy-2.4.2-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9e35d3e0144137d9fdae62912e869136164534d64a169f86438bc9561b6ad49f", size = 16619782, upload-time = "2026-01-31T23:11:03.669Z" }, - { url = "https://files.pythonhosted.org/packages/b7/83/9751502164601a79e18847309f5ceec0b1446d7b6aa12305759b72cf98b2/numpy-2.4.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:adb6ed2ad29b9e15321d167d152ee909ec73395901b70936f029c3bc6d7f4460", size = 17013128, upload-time = "2026-01-31T23:11:05.913Z" }, - { url = "https://files.pythonhosted.org/packages/61/c4/c4066322256ec740acc1c8923a10047818691d2f8aec254798f3dd90f5f2/numpy-2.4.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:8906e71fd8afcb76580404e2a950caef2685df3d2a57fe82a86ac8d33cc007ba", size = 18345324, upload-time = "2026-01-31T23:11:08.248Z" }, { url = "https://files.pythonhosted.org/packages/ab/af/6157aa6da728fa4525a755bfad486ae7e3f76d4c1864138003eb84328497/numpy-2.4.2-cp312-cp312-win32.whl", hash = "sha256:ec055f6dae239a6299cace477b479cca2fc125c5675482daf1dd886933a1076f", size = 5960282, upload-time = "2026-01-31T23:11:10.497Z" }, { url = "https://files.pythonhosted.org/packages/92/0f/7ceaaeaacb40567071e94dbf2c9480c0ae453d5bb4f52bea3892c39dc83c/numpy-2.4.2-cp312-cp312-win_amd64.whl", hash = "sha256:209fae046e62d0ce6435fcfe3b1a10537e858249b3d9b05829e2a05218296a85", size = 12314210, upload-time = "2026-01-31T23:11:12.176Z" }, { url = "https://files.pythonhosted.org/packages/2f/a3/56c5c604fae6dd40fa2ed3040d005fca97e91bd320d232ac9931d77ba13c/numpy-2.4.2-cp312-cp312-win_arm64.whl", hash = "sha256:fbde1b0c6e81d56f5dccd95dd4a711d9b95df1ae4009a60887e56b27e8d903fa", size = 10220171, upload-time = "2026-01-31T23:11:14.684Z" }, - { url = "https://files.pythonhosted.org/packages/a1/22/815b9fe25d1d7ae7d492152adbc7226d3eff731dffc38fe970589fcaaa38/numpy-2.4.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:25f2059807faea4b077a2b6837391b5d830864b3543627f381821c646f31a63c", size = 16663696, upload-time = "2026-01-31T23:11:17.516Z" }, - { url = "https://files.pythonhosted.org/packages/09/f0/817d03a03f93ba9c6c8993de509277d84e69f9453601915e4a69554102a1/numpy-2.4.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:bd3a7a9f5847d2fb8c2c6d1c862fa109c31a9abeca1a3c2bd5a64572955b2979", size = 14688322, upload-time = "2026-01-31T23:11:19.883Z" }, - { url = "https://files.pythonhosted.org/packages/da/b4/f805ab79293c728b9a99438775ce51885fd4f31b76178767cfc718701a39/numpy-2.4.2-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:8e4549f8a3c6d13d55041925e912bfd834285ef1dd64d6bc7d542583355e2e98", size = 5198157, upload-time = "2026-01-31T23:11:22.375Z" }, - { url = "https://files.pythonhosted.org/packages/74/09/826e4289844eccdcd64aac27d13b0fd3f32039915dd5b9ba01baae1f436c/numpy-2.4.2-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:aea4f66ff44dfddf8c2cffd66ba6538c5ec67d389285292fe428cb2c738c8aef", size = 6546330, upload-time = "2026-01-31T23:11:23.958Z" }, - { url = "https://files.pythonhosted.org/packages/19/fb/cbfdbfa3057a10aea5422c558ac57538e6acc87ec1669e666d32ac198da7/numpy-2.4.2-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c3cd545784805de05aafe1dde61752ea49a359ccba9760c1e5d1c88a93bbf2b7", size = 15660968, upload-time = "2026-01-31T23:11:25.713Z" }, - { url = "https://files.pythonhosted.org/packages/04/dc/46066ce18d01645541f0186877377b9371b8fa8017fa8262002b4ef22612/numpy-2.4.2-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d0d9b7c93578baafcbc5f0b83eaf17b79d345c6f36917ba0c67f45226911d499", size = 16607311, upload-time = "2026-01-31T23:11:28.117Z" }, - { url = "https://files.pythonhosted.org/packages/14/d9/4b5adfc39a43fa6bf918c6d544bc60c05236cc2f6339847fc5b35e6cb5b0/numpy-2.4.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f74f0f7779cc7ae07d1810aab8ac6b1464c3eafb9e283a40da7309d5e6e48fbb", size = 17012850, upload-time = "2026-01-31T23:11:30.888Z" }, - { url = "https://files.pythonhosted.org/packages/b7/20/adb6e6adde6d0130046e6fdfb7675cc62bc2f6b7b02239a09eb58435753d/numpy-2.4.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:c7ac672d699bf36275c035e16b65539931347d68b70667d28984c9fb34e07fa7", size = 18334210, upload-time = "2026-01-31T23:11:33.214Z" }, { url = "https://files.pythonhosted.org/packages/78/0e/0a73b3dff26803a8c02baa76398015ea2a5434d9b8265a7898a6028c1591/numpy-2.4.2-cp313-cp313-win32.whl", hash = "sha256:8e9afaeb0beff068b4d9cd20d322ba0ee1cecfb0b08db145e4ab4dd44a6b5110", size = 5958199, upload-time = "2026-01-31T23:11:35.385Z" }, { url = "https://files.pythonhosted.org/packages/43/bc/6352f343522fcb2c04dbaf94cb30cca6fd32c1a750c06ad6231b4293708c/numpy-2.4.2-cp313-cp313-win_amd64.whl", hash = "sha256:7df2de1e4fba69a51c06c28f5a3de36731eb9639feb8e1cf7e4a7b0daf4cf622", size = 12310848, upload-time = "2026-01-31T23:11:38.001Z" }, { url = "https://files.pythonhosted.org/packages/6e/8d/6da186483e308da5da1cc6918ce913dcfe14ffde98e710bfeff2a6158d4e/numpy-2.4.2-cp313-cp313-win_arm64.whl", hash = "sha256:0fece1d1f0a89c16b03442eae5c56dc0be0c7883b5d388e0c03f53019a4bfd71", size = 10221082, upload-time = "2026-01-31T23:11:40.392Z" }, - { url = "https://files.pythonhosted.org/packages/25/a1/9510aa43555b44781968935c7548a8926274f815de42ad3997e9e83680dd/numpy-2.4.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:5633c0da313330fd20c484c78cdd3f9b175b55e1a766c4a174230c6b70ad8262", size = 14815866, upload-time = "2026-01-31T23:11:42.495Z" }, - { url = "https://files.pythonhosted.org/packages/36/30/6bbb5e76631a5ae46e7923dd16ca9d3f1c93cfa8d4ed79a129814a9d8db3/numpy-2.4.2-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:d9f64d786b3b1dd742c946c42d15b07497ed14af1a1f3ce840cce27daa0ce913", size = 5325631, upload-time = "2026-01-31T23:11:44.7Z" }, - { url = "https://files.pythonhosted.org/packages/46/00/3a490938800c1923b567b3a15cd17896e68052e2145d8662aaf3e1ffc58f/numpy-2.4.2-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:b21041e8cb6a1eb5312dd1d2f80a94d91efffb7a06b70597d44f1bd2dfc315ab", size = 6646254, upload-time = "2026-01-31T23:11:46.341Z" }, - { url = "https://files.pythonhosted.org/packages/d3/e9/fac0890149898a9b609caa5af7455a948b544746e4b8fe7c212c8edd71f8/numpy-2.4.2-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:00ab83c56211a1d7c07c25e3217ea6695e50a3e2f255053686b081dc0b091a82", size = 15720138, upload-time = "2026-01-31T23:11:48.082Z" }, - { url = "https://files.pythonhosted.org/packages/ea/5c/08887c54e68e1e28df53709f1893ce92932cc6f01f7c3d4dc952f61ffd4e/numpy-2.4.2-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2fb882da679409066b4603579619341c6d6898fc83a8995199d5249f986e8e8f", size = 16655398, upload-time = "2026-01-31T23:11:50.293Z" }, - { url = "https://files.pythonhosted.org/packages/4d/89/253db0fa0e66e9129c745e4ef25631dc37d5f1314dad2b53e907b8538e6d/numpy-2.4.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:66cb9422236317f9d44b67b4d18f44efe6e9c7f8794ac0462978513359461554", size = 17079064, upload-time = "2026-01-31T23:11:52.927Z" }, - { url = "https://files.pythonhosted.org/packages/2a/d5/cbade46ce97c59c6c3da525e8d95b7abe8a42974a1dc5c1d489c10433e88/numpy-2.4.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:0f01dcf33e73d80bd8dc0f20a71303abbafa26a19e23f6b68d1aa9990af90257", size = 18379680, upload-time = "2026-01-31T23:11:55.22Z" }, { url = "https://files.pythonhosted.org/packages/40/62/48f99ae172a4b63d981babe683685030e8a3df4f246c893ea5c6ef99f018/numpy-2.4.2-cp313-cp313t-win32.whl", hash = "sha256:52b913ec40ff7ae845687b0b34d8d93b60cb66dcee06996dd5c99f2fc9328657", size = 6082433, upload-time = "2026-01-31T23:11:58.096Z" }, { url = "https://files.pythonhosted.org/packages/07/38/e054a61cfe48ad9f1ed0d188e78b7e26859d0b60ef21cd9de4897cdb5326/numpy-2.4.2-cp313-cp313t-win_amd64.whl", hash = "sha256:5eea80d908b2c1f91486eb95b3fb6fab187e569ec9752ab7d9333d2e66bf2d6b", size = 12451181, upload-time = "2026-01-31T23:11:59.782Z" }, { url = "https://files.pythonhosted.org/packages/6e/a4/a05c3a6418575e185dd84d0b9680b6bb2e2dc3e4202f036b7b4e22d6e9dc/numpy-2.4.2-cp313-cp313t-win_arm64.whl", hash = "sha256:fd49860271d52127d61197bb50b64f58454e9f578cb4b2c001a6de8b1f50b0b1", size = 10290756, upload-time = "2026-01-31T23:12:02.438Z" }, @@ -3077,6 +3438,59 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/f5/fb/f6a64b519ae6685fc60b0b54dc7aeae89c91394387f760f4efcdef814cb6/ocifs-1.3.2-py3-none-any.whl", hash = "sha256:2702cf1574f04f3b9405c7068a111af325409d9332cc010d2cd9e62f99262e62", size = 67797, upload-time = "2025-02-18T20:21:32.382Z" }, ] +[[package]] +name = "openai" +version = "2.31.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "distro", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "httpx", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "jiter", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "pydantic", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "sniffio", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "tqdm", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "typing-extensions", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/94/fe/64b3d035780b3188f86c4f6f1bc202e7bb74757ef028802112273b9dcacf/openai-2.31.0.tar.gz", hash = "sha256:43ca59a88fc973ad1848d86b98d7fac207e265ebbd1828b5e4bdfc85f79427a5", size = 684772, upload-time = "2026-04-08T21:01:41.797Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/66/bc/a8f7c3aa03452fedbb9af8be83e959adba96a6b4a35e416faffcc959c568/openai-2.31.0-py3-none-any.whl", hash = "sha256:44e1344d87e56a493d649b17e2fac519d1368cbb0745f59f1957c4c26de50a0a", size = 1153479, upload-time = "2026-04-08T21:01:39.217Z" }, +] + +[[package]] +name = "openai-harmony" +version = "0.0.8" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pydantic", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/3e/92/2d038d096f29179c7c9571b431f9e739f87a487121901725e23fe338dd9d/openai_harmony-0.0.8.tar.gz", hash = "sha256:6e43f98e6c242fa2de6f8ea12eab24af63fa2ed3e89c06341fb9d92632c5cbdf", size = 284777, upload-time = "2025-11-05T19:07:06.727Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d3/d2/ce6953ca87db9cae3e775024184da7d1c5cb88cead19a2d75b42f00a959c/openai_harmony-0.0.8-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e4f709815924ec325b9a890e6ab2bbb0ceec8e319a4e257328eb752cf36b2efc", size = 2948463, upload-time = "2025-11-05T19:06:48.17Z" }, + { url = "https://files.pythonhosted.org/packages/fa/4c/b553c9651662d6ce102ca7f3629d268b23df1abe5841e24bed81e8a8e949/openai_harmony-0.0.8-cp38-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5cfcfd963b50a41fc656c84d3440ca6eecdccd6c552158ce790b8f2e33dfb5a9", size = 2704083, upload-time = "2025-11-05T19:06:50.205Z" }, + { url = "https://files.pythonhosted.org/packages/9b/af/4eec8f9ab9c27bcdb444460c72cf43011d176fc44c79d6e113094ca1e152/openai_harmony-0.0.8-cp38-abi3-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a3a16972aa1cee38ea958470cd04ac9a2d5ac38fdcf77ab686611246220c158", size = 2959765, upload-time = "2025-11-05T19:06:53.62Z" }, + { url = "https://files.pythonhosted.org/packages/11/3c/33f3374e4624e0e776f6b13b73c45a7ead7f9c4529f8369ed5bfcaa30cac/openai_harmony-0.0.8-cp38-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b4d5cfa168e74d08f8ba6d58a7e49bc7daef4d58951ec69b66b0d56f4927a68d", size = 3427031, upload-time = "2025-11-05T19:06:51.829Z" }, + { url = "https://files.pythonhosted.org/packages/25/3f/1a192b93bb47c6b44cd98ba8cc1d3d2a9308f1bb700c3017e6352da11bda/openai_harmony-0.0.8-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c007d277218a50db8839e599ed78e0fffe5130f614c3f6d93ae257f282071a29", size = 2953260, upload-time = "2025-11-05T19:06:55.406Z" }, + { url = "https://files.pythonhosted.org/packages/5b/f8/93b582cad3531797c3db7c2db5400fd841538ccddfd9f5e3df61be99a630/openai_harmony-0.0.8-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:8565d4f5a0638da1bffde29832ed63c9e695c558611053add3b2dc0b56c92dbc", size = 3127044, upload-time = "2025-11-05T19:06:59.553Z" }, + { url = "https://files.pythonhosted.org/packages/1d/10/4327dbf87f75ae813405fd9a9b4a5cde63d506ffed0a096a440a4cabd89c/openai_harmony-0.0.8-cp38-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:cbaa3bda75ef0d8836e1f8cc84af62f971b1d756d740efc95c38c3e04c0bfde2", size = 2932931, upload-time = "2025-11-05T19:07:01.437Z" }, + { url = "https://files.pythonhosted.org/packages/8a/c8/1774eec4f6f360ef57618fb8f52e3d3af245b2491bd0297513aa09eec04b/openai_harmony-0.0.8-cp38-abi3-musllinux_1_2_i686.whl", hash = "sha256:772922a9bd24e133950fad71eb1550836f415a88e8c77870e12d0c3bd688ddc2", size = 2996140, upload-time = "2025-11-05T19:07:03.438Z" }, + { url = "https://files.pythonhosted.org/packages/60/c3/3d1e01e2dba517a91760e4a03e4f20ffc75039a6fe584d0e6f9b5c78fd15/openai_harmony-0.0.8-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:007b0476a1f331f8130783f901f1da6f5a7057af1a4891f1b6a31dec364189b5", size = 3205080, upload-time = "2025-11-05T19:07:05.078Z" }, +] + +[[package]] +name = "opencv-python-headless" +version = "4.13.0.92" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/21/76/9417a6aef9def70e467a5bf560579f816148a4c658b7d525581b356eda9e/opencv_python_headless-4.13.0.92-cp37-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:5c8cfc8e87ed452b5cecb9419473ee5560a989859fe1d10d1ce11ae87b09a2cb", size = 33703709, upload-time = "2026-02-05T10:24:46.469Z" }, + { url = "https://files.pythonhosted.org/packages/92/ce/bd17ff5772938267fd49716e94ca24f616ff4cb1ff4c6be13085108037be/opencv_python_headless-4.13.0.92-cp37-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:0525a3d2c0b46c611e2130b5fdebc94cf404845d8fa64d2f3a3b679572a5bd22", size = 56016764, upload-time = "2026-02-05T10:26:48.904Z" }, + { url = "https://files.pythonhosted.org/packages/8f/b4/b7bcbf7c874665825a8c8e1097e93ea25d1f1d210a3e20d4451d01da30aa/opencv_python_headless-4.13.0.92-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:eb60e36b237b1ebd40a912da5384b348df8ed534f6f644d8e0b4f103e272ba7d", size = 35010236, upload-time = "2026-02-05T10:28:11.031Z" }, + { url = "https://files.pythonhosted.org/packages/4b/33/b5db29a6c00eb8f50708110d8d453747ca125c8b805bc437b289dbdcc057/opencv_python_headless-4.13.0.92-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:0bd48544f77c68b2941392fcdf9bcd2b9cdf00e98cb8c29b2455d194763cf99e", size = 60391106, upload-time = "2026-02-05T10:30:14.236Z" }, +] + [[package]] name = "openenv-core" version = "0.1.0" @@ -3099,8 +3513,7 @@ dependencies = [ { name = "coloredlogs", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, { name = "datasets", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, { name = "huggingface-hub", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, - { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'" }, - { name = "numpy", version = "2.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, { name = "packaging", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, { name = "sympy", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, { name = "torch", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, @@ -3139,6 +3552,18 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/18/6d/0dce10b9f6643fdc59d99333871a38fa5a769d8e2fc34a18e5d2bfdee900/orjson-3.11.8-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:708c95f925a43ab9f34625e45dcdadf09ec8a6e7b664a938f2f8d5650f6c090b", size = 136460, upload-time = "2026-03-31T16:15:54.431Z" }, ] +[[package]] +name = "outlines-core" +version = "0.2.11" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/1a/d3/e04e9145f8f806723dec9b9e5227ad695a3efcd3ced7794cf7c22b15df5e/outlines_core-0.2.11.tar.gz", hash = "sha256:dfce56f717ff5083e54cbcfdb66cad243365437fccbb5509adaa7e31e030f1d8", size = 197263, upload-time = "2025-05-19T10:12:51.719Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/92/c7/a65d1fddf49830ebc41422294eacde35286d9f68994a8aa905cb14f5aade/outlines_core-0.2.11-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:86df9740368866295077346440d911df4972da2b3f1f54b8125e6f329e8a8891", size = 2287677, upload-time = "2025-05-19T10:12:24.24Z" }, + { url = "https://files.pythonhosted.org/packages/23/79/8795aed8be9b77dd69d78e7cfbfcf28c179e6b08da6e56bbbf48a09fe55f/outlines_core-0.2.11-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:96ce4dd78f106799be4a0a5795cefd1352806162973756a4b6fce4bb6eddd7e4", size = 2113000, upload-time = "2025-05-19T10:12:25.446Z" }, + { url = "https://files.pythonhosted.org/packages/87/96/7dcdc5198844145ab35528f9f93a58c3d47b87e54d0f79357c631d7b7a9a/outlines_core-0.2.11-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:daef6eaaf8c3403455ab5cbf265cb5c6838df571eb7c4b23cddac19cfc701726", size = 2287320, upload-time = "2025-05-19T10:12:35.515Z" }, + { url = "https://files.pythonhosted.org/packages/4d/68/b420b6a3beaadbf8e9f2a82132120027efd6424634013fbeca8c2fed7467/outlines_core-0.2.11-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:76b2512417c68863f8f227a080e87f755682dfd895e23b021121318be11da579", size = 2112861, upload-time = "2025-05-19T10:12:36.742Z" }, +] + [[package]] name = "packaging" version = "26.0" @@ -3153,8 +3578,9 @@ name = "pandas" version = "2.3.3" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.13'" }, - { name = "numpy", version = "2.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.13'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.13' and sys_platform == 'emscripten') or (python_full_version < '3.13' and sys_platform == 'win32')" }, + { name = "numpy", version = "2.4.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.13' and sys_platform == 'emscripten') or (python_full_version >= '3.13' and sys_platform == 'win32')" }, { name = "python-dateutil" }, { name = "pytz" }, { name = "tzdata" }, @@ -3201,6 +3627,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/b6/61/fae042894f4296ec49e3f193aff5d7c18440da9e48102c3315e1bc4519a7/parso-0.8.6-py2.py3-none-any.whl", hash = "sha256:2c549f800b70a5c4952197248825584cb00f033b29c692671d3bf08bf380baff", size = 106894, upload-time = "2026-02-09T15:45:21.391Z" }, ] +[[package]] +name = "partial-json-parser" +version = "0.2.1.1.post7" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/6a/6d/eed37d7ebc1e0bcd27b831c0cf1fe94881934316187c4b30d23f29ea0bd4/partial_json_parser-0.2.1.1.post7.tar.gz", hash = "sha256:86590e1ba6bcb6739a2dfc17d2323f028cb5884f4c6ce23db376999132c9a922", size = 10296, upload-time = "2025-11-17T07:27:41.202Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/42/32/658973117bf0fd82a24abbfb94fe73a5e86216e49342985e10acce54775a/partial_json_parser-0.2.1.1.post7-py3-none-any.whl", hash = "sha256:145119e5eabcf80cbb13844a6b50a85c68bf99d376f8ed771e2a3c3b03e653ae", size = 10877, upload-time = "2025-11-17T07:27:40.457Z" }, +] + [[package]] name = "pathspec" version = "1.0.4" @@ -3226,8 +3661,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "accelerate" }, { name = "huggingface-hub" }, - { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.13'" }, - { name = "numpy", version = "2.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.13'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.13' and sys_platform == 'emscripten') or (python_full_version < '3.13' and sys_platform == 'win32')" }, + { name = "numpy", version = "2.4.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.13' and sys_platform == 'emscripten') or (python_full_version >= '3.13' and sys_platform == 'win32')" }, { name = "packaging" }, { name = "psutil" }, { name = "pyyaml" }, @@ -3379,6 +3815,19 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/74/c3/24a2f845e3917201628ecaba4f18bab4d18a337834c1df2a159ee9d22a42/prometheus_client-0.24.1-py3-none-any.whl", hash = "sha256:150db128af71a5c2482b36e588fc8a6b95e498750da4b17065947c16070f4055", size = 64057, upload-time = "2026-01-14T15:26:24.42Z" }, ] +[[package]] +name = "prometheus-fastapi-instrumentator" +version = "7.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "prometheus-client", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "starlette", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/69/6d/24d53033cf93826aa7857699a4450c1c67e5b9c710e925b1ed2b320c04df/prometheus_fastapi_instrumentator-7.1.0.tar.gz", hash = "sha256:be7cd61eeea4e5912aeccb4261c6631b3f227d8924542d79eaf5af3f439cbe5e", size = 20220, upload-time = "2025-03-19T19:35:05.351Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/27/72/0824c18f3bc75810f55dacc2dd933f6ec829771180245ae3cc976195dec0/prometheus_fastapi_instrumentator-7.1.0-py3-none-any.whl", hash = "sha256:978130f3c0bb7b8ebcc90d35516a6fe13e02d2eb358c8f83887cdef7020c31e9", size = 19296, upload-time = "2025-03-19T19:35:04.323Z" }, +] + [[package]] name = "prompt-toolkit" version = "3.0.52" @@ -3512,6 +3961,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/8e/37/efad0257dc6e593a18957422533ff0f87ede7c9c6ea010a2177d738fb82f/pure_eval-0.2.3-py3-none-any.whl", hash = "sha256:1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0", size = 11842, upload-time = "2024-07-21T12:58:20.04Z" }, ] +[[package]] +name = "py-cpuinfo" +version = "9.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/37/a8/d832f7293ebb21690860d2e01d8115e5ff6f2ae8bbdc953f0eb0fa4bd2c7/py-cpuinfo-9.0.0.tar.gz", hash = "sha256:3cdbbf3fac90dc6f118bfd64384f309edeadd902d7c8fb17f02ffa1fc3f49690", size = 104716, upload-time = "2022-10-25T20:38:06.303Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e0/a9/023730ba63db1e494a271cb018dcd361bd2c917ba7004c3e49d5daf795a2/py_cpuinfo-9.0.0-py3-none-any.whl", hash = "sha256:859625bc251f64e21f077d099d4162689c762b5d6a4c3c97553d56241c9674d5", size = 22335, upload-time = "2022-10-25T20:38:27.636Z" }, +] + [[package]] name = "pyarrow" version = "23.0.0" @@ -3562,6 +4020,61 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/47/8d/d529b5d697919ba8c11ad626e835d4039be708a35b0d22de83a269a6682c/pyasn1_modules-0.4.2-py3-none-any.whl", hash = "sha256:29253a9207ce32b64c3ac6600edc75368f98473906e8fd1043bd6b5b1de2c14a", size = 181259, upload-time = "2025-03-28T02:41:19.028Z" }, ] +[[package]] +name = "pybase64" +version = "1.4.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/aa/b8/4ed5c7ad5ec15b08d35cc79ace6145d5c1ae426e46435f4987379439dfea/pybase64-1.4.3.tar.gz", hash = "sha256:c2ed274c9e0ba9c8f9c4083cfe265e66dd679126cd9c2027965d807352f3f053", size = 137272, upload-time = "2025-12-06T13:27:04.013Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/43/1b/9a8cab0042b464e9a876d5c65fe5127445a2436da36fda64899b119b1a1b/pybase64-1.4.3-cp312-cp312-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:f0b3f200c3e06316f6bebabd458b4e4bcd4c2ca26af7c0c766614d91968dee27", size = 68210, upload-time = "2025-12-06T13:23:18.813Z" }, + { url = "https://files.pythonhosted.org/packages/62/f7/965b79ff391ad208b50e412b5d3205ccce372a2d27b7218ae86d5295b105/pybase64-1.4.3-cp312-cp312-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:bb632edfd132b3eaf90c39c89aa314beec4e946e210099b57d40311f704e11d4", size = 71599, upload-time = "2025-12-06T13:23:20.195Z" }, + { url = "https://files.pythonhosted.org/packages/03/4b/a3b5175130b3810bbb8ccfa1edaadbd3afddb9992d877c8a1e2f274b476e/pybase64-1.4.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:356ef1d74648ce997f5a777cf8f1aefecc1c0b4fe6201e0ef3ec8a08170e1b54", size = 59922, upload-time = "2025-12-06T13:23:21.487Z" }, + { url = "https://files.pythonhosted.org/packages/da/5d/c38d1572027fc601b62d7a407721688b04b4d065d60ca489912d6893e6cf/pybase64-1.4.3-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.whl", hash = "sha256:c48361f90db32bacaa5518419d4eb9066ba558013aaf0c7781620279ecddaeb9", size = 56712, upload-time = "2025-12-06T13:23:22.77Z" }, + { url = "https://files.pythonhosted.org/packages/e7/d4/4e04472fef485caa8f561d904d4d69210a8f8fc1608ea15ebd9012b92655/pybase64-1.4.3-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:702bcaa16ae02139d881aeaef5b1c8ffb4a3fae062fe601d1e3835e10310a517", size = 59300, upload-time = "2025-12-06T13:23:24.543Z" }, + { url = "https://files.pythonhosted.org/packages/86/e7/16e29721b86734b881d09b7e23dfd7c8408ad01a4f4c7525f3b1088e25ec/pybase64-1.4.3-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:53d0ffe1847b16b647c6413d34d1de08942b7724273dd57e67dcbdb10c574045", size = 60278, upload-time = "2025-12-06T13:23:25.608Z" }, + { url = "https://files.pythonhosted.org/packages/b1/02/18515f211d7c046be32070709a8efeeef8a0203de4fd7521e6b56404731b/pybase64-1.4.3-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:9a1792e8b830a92736dae58f0c386062eb038dfe8004fb03ba33b6083d89cd43", size = 54817, upload-time = "2025-12-06T13:23:26.633Z" }, + { url = "https://files.pythonhosted.org/packages/e7/be/14e29d8e1a481dbff151324c96dd7b5d2688194bb65dc8a00ca0e1ad1e86/pybase64-1.4.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1d468b1b1ac5ad84875a46eaa458663c3721e8be5f155ade356406848d3701f6", size = 58611, upload-time = "2025-12-06T13:23:27.684Z" }, + { url = "https://files.pythonhosted.org/packages/b4/8a/a2588dfe24e1bbd742a554553778ab0d65fdf3d1c9a06d10b77047d142aa/pybase64-1.4.3-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:e97b7bdbd62e71898cd542a6a9e320d9da754ff3ebd02cb802d69087ee94d468", size = 52404, upload-time = "2025-12-06T13:23:28.714Z" }, + { url = "https://files.pythonhosted.org/packages/27/fc/afcda7445bebe0cbc38cafdd7813234cdd4fc5573ff067f1abf317bb0cec/pybase64-1.4.3-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:b33aeaa780caaa08ffda87fc584d5eab61e3d3bbb5d86ead02161dc0c20d04bc", size = 68817, upload-time = "2025-12-06T13:23:30.079Z" }, + { url = "https://files.pythonhosted.org/packages/d3/3a/87c3201e555ed71f73e961a787241a2438c2bbb2ca8809c29ddf938a3157/pybase64-1.4.3-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:1c0efcf78f11cf866bed49caa7b97552bc4855a892f9cc2372abcd3ed0056f0d", size = 57854, upload-time = "2025-12-06T13:23:31.17Z" }, + { url = "https://files.pythonhosted.org/packages/fd/7d/931c2539b31a7b375e7d595b88401eeb5bd6c5ce1059c9123f9b608aaa14/pybase64-1.4.3-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:66e3791f2ed725a46593f8bd2761ff37d01e2cdad065b1dceb89066f476e50c6", size = 54333, upload-time = "2025-12-06T13:23:32.422Z" }, + { url = "https://files.pythonhosted.org/packages/de/5e/537601e02cc01f27e9d75f440f1a6095b8df44fc28b1eef2cd739aea8cec/pybase64-1.4.3-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:72bb0b6bddadab26e1b069bb78e83092711a111a80a0d6b9edcb08199ad7299b", size = 56492, upload-time = "2025-12-06T13:23:33.515Z" }, + { url = "https://files.pythonhosted.org/packages/96/97/2a2e57acf8f5c9258d22aba52e71f8050e167b29ed2ee1113677c1b600c1/pybase64-1.4.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:5b3365dbcbcdb0a294f0f50af0c0a16b27a232eddeeb0bceeefd844ef30d2a23", size = 70974, upload-time = "2025-12-06T13:23:36.27Z" }, + { url = "https://files.pythonhosted.org/packages/5c/8d/20b68f11adfc4c22230e034b65c71392e3e338b413bf713c8945bd2ccfb3/pybase64-1.4.3-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:27fdff227a0c0e182e0ba37a99109645188978b920dfb20d8b9c17eeee370d0d", size = 30932, upload-time = "2025-12-06T13:23:43.348Z" }, + { url = "https://files.pythonhosted.org/packages/f7/79/b1b550ac6bff51a4880bf6e089008b2e1ca16f2c98db5e039a08ac3ad157/pybase64-1.4.3-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:2a8204f1fdfec5aa4184249b51296c0de95445869920c88123978304aad42df1", size = 31394, upload-time = "2025-12-06T13:23:44.317Z" }, + { url = "https://files.pythonhosted.org/packages/82/70/b5d7c5932bf64ee1ec5da859fbac981930b6a55d432a603986c7f509c838/pybase64-1.4.3-cp313-cp313-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:874fc2a3777de6baf6aa921a7aa73b3be98295794bea31bd80568a963be30767", size = 38078, upload-time = "2025-12-06T13:23:45.348Z" }, + { url = "https://files.pythonhosted.org/packages/1c/c9/24b3b905cf75e23a9a4deaf203b35ffcb9f473ac0e6d8257f91a05dfce62/pybase64-1.4.3-cp313-cp313-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:1d45c8fe8fe82b65c36b227bb4a2cf623d9ada16bed602ce2d3e18c35285b72a", size = 68244, upload-time = "2025-12-06T13:23:49.026Z" }, + { url = "https://files.pythonhosted.org/packages/f8/cd/d15b0c3e25e5859fab0416dc5b96d34d6bd2603c1c96a07bb2202b68ab92/pybase64-1.4.3-cp313-cp313-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:ad70c26ba091d8f5167e9d4e1e86a0483a5414805cdb598a813db635bd3be8b8", size = 71620, upload-time = "2025-12-06T13:23:50.081Z" }, + { url = "https://files.pythonhosted.org/packages/0d/31/4ca953cc3dcde2b3711d6bfd70a6f4ad2ca95a483c9698076ba605f1520f/pybase64-1.4.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:e98310b7c43145221e7194ac9fa7fffc84763c87bfc5e2f59f9f92363475bdc1", size = 59930, upload-time = "2025-12-06T13:23:51.68Z" }, + { url = "https://files.pythonhosted.org/packages/60/55/e7f7bdcd0fd66e61dda08db158ffda5c89a306bbdaaf5a062fbe4e48f4a1/pybase64-1.4.3-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.whl", hash = "sha256:398685a76034e91485a28aeebcb49e64cd663212fd697b2497ac6dfc1df5e671", size = 56425, upload-time = "2025-12-06T13:23:52.732Z" }, + { url = "https://files.pythonhosted.org/packages/cb/65/b592c7f921e51ca1aca3af5b0d201a98666d0a36b930ebb67e7c2ed27395/pybase64-1.4.3-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:7e46400a6461187ccb52ed75b0045d937529e801a53a9cd770b350509f9e4d50", size = 59327, upload-time = "2025-12-06T13:23:53.856Z" }, + { url = "https://files.pythonhosted.org/packages/23/95/1613d2fb82dbb1548595ad4179f04e9a8451bfa18635efce18b631eabe3f/pybase64-1.4.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:1b62b9f2f291d94f5e0b76ab499790b7dcc78a009d4ceea0b0428770267484b6", size = 60294, upload-time = "2025-12-06T13:23:54.937Z" }, + { url = "https://files.pythonhosted.org/packages/9d/73/40431f37f7d1b3eab4673e7946ff1e8f5d6bd425ec257e834dae8a6fc7b0/pybase64-1.4.3-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:f30ceb5fa4327809dede614be586efcbc55404406d71e1f902a6fdcf322b93b2", size = 54858, upload-time = "2025-12-06T13:23:56.031Z" }, + { url = "https://files.pythonhosted.org/packages/a7/84/f6368bcaf9f743732e002a9858646fd7a54f428490d427dd6847c5cfe89e/pybase64-1.4.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0d5f18ed53dfa1d4cf8b39ee542fdda8e66d365940e11f1710989b3cf4a2ed66", size = 58629, upload-time = "2025-12-06T13:23:57.12Z" }, + { url = "https://files.pythonhosted.org/packages/43/75/359532f9adb49c6b546cafc65c46ed75e2ccc220d514ba81c686fbd83965/pybase64-1.4.3-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:119d31aa4b58b85a8ebd12b63c07681a138c08dfc2fe5383459d42238665d3eb", size = 52448, upload-time = "2025-12-06T13:23:58.298Z" }, + { url = "https://files.pythonhosted.org/packages/92/6c/ade2ba244c3f33ed920a7ed572ad772eb0b5f14480b72d629d0c9e739a40/pybase64-1.4.3-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:3cf0218b0e2f7988cf7d738a73b6a1d14f3be6ce249d7c0f606e768366df2cce", size = 68841, upload-time = "2025-12-06T13:23:59.886Z" }, + { url = "https://files.pythonhosted.org/packages/a0/51/b345139cd236be382f2d4d4453c21ee6299e14d2f759b668e23080f8663f/pybase64-1.4.3-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:12f4ee5e988bc5c0c1106b0d8fc37fb0508f12dab76bac1b098cb500d148da9d", size = 57910, upload-time = "2025-12-06T13:24:00.994Z" }, + { url = "https://files.pythonhosted.org/packages/1a/b8/9f84bdc4f1c4f0052489396403c04be2f9266a66b70c776001eaf0d78c1f/pybase64-1.4.3-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:937826bc7b6b95b594a45180e81dd4d99bd4dd4814a443170e399163f7ff3fb6", size = 54335, upload-time = "2025-12-06T13:24:02.046Z" }, + { url = "https://files.pythonhosted.org/packages/d0/c7/be63b617d284de46578a366da77ede39c8f8e815ed0d82c7c2acca560fab/pybase64-1.4.3-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:88995d1460971ef80b13e3e007afbe4b27c62db0508bc7250a2ab0a0b4b91362", size = 56486, upload-time = "2025-12-06T13:24:03.141Z" }, + { url = "https://files.pythonhosted.org/packages/5e/96/f252c8f9abd6ded3ef1ccd3cdbb8393a33798007f761b23df8de1a2480e6/pybase64-1.4.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:72326fe163385ed3e1e806dd579d47fde5d8a59e51297a60fc4e6cbc1b4fc4ed", size = 70978, upload-time = "2025-12-06T13:24:04.221Z" }, + { url = "https://files.pythonhosted.org/packages/46/fc/cb64964c3b29b432f54d1bce5e7691d693e33bbf780555151969ffd95178/pybase64-1.4.3-cp313-cp313t-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:2e745f2ce760c6cf04d8a72198ef892015ddb89f6ceba489e383518ecbdb13ab", size = 72317, upload-time = "2025-12-06T13:24:11.129Z" }, + { url = "https://files.pythonhosted.org/packages/0a/b7/fab2240da6f4e1ad46f71fa56ec577613cf5df9dce2d5b4cfaa4edd0e365/pybase64-1.4.3-cp313-cp313t-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:6fac217cd9de8581a854b0ac734c50fd1fa4b8d912396c1fc2fce7c230efe3a7", size = 75534, upload-time = "2025-12-06T13:24:12.433Z" }, + { url = "https://files.pythonhosted.org/packages/91/3b/3e2f2b6e68e3d83ddb9fa799f3548fb7449765daec9bbd005a9fbe296d7f/pybase64-1.4.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:da1ee8fa04b283873de2d6e8fa5653e827f55b86bdf1a929c5367aaeb8d26f8a", size = 65399, upload-time = "2025-12-06T13:24:13.928Z" }, + { url = "https://files.pythonhosted.org/packages/6b/08/476ac5914c3b32e0274a2524fc74f01cbf4f4af4513d054e41574eb018f6/pybase64-1.4.3-cp313-cp313t-manylinux2014_armv7l.manylinux_2_17_armv7l.whl", hash = "sha256:b0bf8e884ee822ca7b1448eeb97fa131628fe0ff42f60cae9962789bd562727f", size = 60487, upload-time = "2025-12-06T13:24:15.177Z" }, + { url = "https://files.pythonhosted.org/packages/f1/b8/618a92915330cc9cba7880299b546a1d9dab1a21fd6c0292ee44a4fe608c/pybase64-1.4.3-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:1bf749300382a6fd1f4f255b183146ef58f8e9cb2f44a077b3a9200dfb473a77", size = 63959, upload-time = "2025-12-06T13:24:16.854Z" }, + { url = "https://files.pythonhosted.org/packages/a5/52/af9d8d051652c3051862c442ec3861259c5cdb3fc69774bc701470bd2a59/pybase64-1.4.3-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:153a0e42329b92337664cfc356f2065248e6c9a1bd651bbcd6dcaf15145d3f06", size = 64874, upload-time = "2025-12-06T13:24:18.328Z" }, + { url = "https://files.pythonhosted.org/packages/e4/51/5381a7adf1f381bd184d33203692d3c57cf8ae9f250f380c3fecbdbe554b/pybase64-1.4.3-cp313-cp313t-manylinux_2_31_riscv64.whl", hash = "sha256:86ee56ac7f2184ca10217ed1c655c1a060273e233e692e9086da29d1ae1768db", size = 58572, upload-time = "2025-12-06T13:24:19.417Z" }, + { url = "https://files.pythonhosted.org/packages/e0/f0/578ee4ffce5818017de4fdf544e066c225bc435e73eb4793cde28a689d0b/pybase64-1.4.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:0e71a4db76726bf830b47477e7d830a75c01b2e9b01842e787a0836b0ba741e3", size = 63636, upload-time = "2025-12-06T13:24:20.497Z" }, + { url = "https://files.pythonhosted.org/packages/b9/ad/8ae94814bf20159ea06310b742433e53d5820aa564c9fdf65bf2d79f8799/pybase64-1.4.3-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:2ba7799ec88540acd9861b10551d24656ca3c2888ecf4dba2ee0a71544a8923f", size = 56193, upload-time = "2025-12-06T13:24:21.559Z" }, + { url = "https://files.pythonhosted.org/packages/d1/31/6438cfcc3d3f0fa84d229fa125c243d5094e72628e525dfefadf3bcc6761/pybase64-1.4.3-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:2860299e4c74315f5951f0cf3e72ba0f201c3356c8a68f95a3ab4e620baf44e9", size = 72655, upload-time = "2025-12-06T13:24:22.673Z" }, + { url = "https://files.pythonhosted.org/packages/a3/0d/2bbc9e9c3fc12ba8a6e261482f03a544aca524f92eae0b4908c0a10ba481/pybase64-1.4.3-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:bb06015db9151f0c66c10aae8e3603adab6b6cd7d1f7335a858161d92fc29618", size = 62471, upload-time = "2025-12-06T13:24:23.8Z" }, + { url = "https://files.pythonhosted.org/packages/2c/0b/34d491e7f49c1dbdb322ea8da6adecda7c7cd70b6644557c6e4ca5c6f7c7/pybase64-1.4.3-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:242512a070817272865d37c8909059f43003b81da31f616bb0c391ceadffe067", size = 58119, upload-time = "2025-12-06T13:24:24.994Z" }, + { url = "https://files.pythonhosted.org/packages/ce/17/c21d0cde2a6c766923ae388fc1f78291e1564b0d38c814b5ea8a0e5e081c/pybase64-1.4.3-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:5d8277554a12d3e3eed6180ebda62786bf9fc8d7bb1ee00244258f4a87ca8d20", size = 60791, upload-time = "2025-12-06T13:24:26.046Z" }, + { url = "https://files.pythonhosted.org/packages/92/b2/eaa67038916a48de12b16f4c384bcc1b84b7ec731b23613cb05f27673294/pybase64-1.4.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:f40b7ddd698fc1e13a4b64fbe405e4e0e1279e8197e37050e24154655f5f7c4e", size = 74701, upload-time = "2025-12-06T13:24:27.466Z" }, + { url = "https://files.pythonhosted.org/packages/fa/8f/43c3bb11ca9bacf81cb0b7a71500bb65b2eda6d5fe07433c09b543de97f3/pybase64-1.4.3-graalpy312-graalpy250_312_native-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:5c29a582b0ea3936d02bd6fe9bf674ab6059e6e45ab71c78404ab2c913224414", size = 43461, upload-time = "2025-12-06T13:26:28.906Z" }, + { url = "https://files.pythonhosted.org/packages/2d/4c/2a5258329200be57497d3972b5308558c6de42e3749c6cc2aa1cbe34b25a/pybase64-1.4.3-graalpy312-graalpy250_312_native-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:b6b664758c804fa919b4f1257aa8cf68e95db76fc331de5f70bfc3a34655afe1", size = 36058, upload-time = "2025-12-06T13:26:30.092Z" }, +] + [[package]] name = "pycodestyle" version = "2.14.0" @@ -3604,6 +4117,11 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/5a/87/b70ad306ebb6f9b585f114d0ac2137d792b48be34d732d60e597c2f8465a/pydantic-2.12.5-py3-none-any.whl", hash = "sha256:e561593fccf61e8a20fc46dfc2dfe075b8be7d0188df33f221ad1f0139180f9d", size = 463580, upload-time = "2025-11-26T15:11:44.605Z" }, ] +[package.optional-dependencies] +email = [ + { name = "email-validator", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] + [[package]] name = "pydantic-core" version = "2.41.5" @@ -3665,6 +4183,20 @@ pycountry = [ { name = "pycountry", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, ] +[[package]] +name = "pydantic-settings" +version = "2.13.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pydantic", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "python-dotenv", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "typing-inspection", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/52/6d/fffca34caecc4a3f97bda81b2098da5e8ab7efc9a66e819074a11955d87e/pydantic_settings-2.13.1.tar.gz", hash = "sha256:b4c11847b15237fb0171e1462bf540e294affb9b86db4d9aa5c01730bdbe4025", size = 223826, upload-time = "2026-02-19T13:45:08.055Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/00/4b/ccc026168948fec4f7555b9164c724cf4125eac006e176541483d2c959be/pydantic_settings-2.13.1-py3-none-any.whl", hash = "sha256:d56fd801823dbeae7f0975e1f8c8e25c258eb75d278ea7abb5d9cebb01b56237", size = 58929, upload-time = "2026-02-19T13:45:06.034Z" }, +] + [[package]] name = "pydoclint" version = "0.8.3" @@ -3749,7 +4281,7 @@ dependencies = [ { name = "dataproperty", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, { name = "mbstrdecoder", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, { name = "pathvalidate", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, - { name = "setuptools", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "setuptools", version = "79.0.1", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, { name = "tabledata", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, { name = "tcolorpy", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, { name = "typepy", extra = ["datetime"], marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, @@ -3912,6 +4444,32 @@ wheels = [ { 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" }, ] +[[package]] +name = "ray" +version = "2.54.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "filelock", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "jsonschema", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "msgpack", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "packaging", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "protobuf", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "pyyaml", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "requests", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/51/6f/bf1b7a6d4424c19add99eb17398c7522473502193540b679f8b94fbf2d72/ray-2.54.1-cp312-cp312-manylinux2014_aarch64.whl", hash = "sha256:cd452b61ae2e0daf9271f5a554614397429cc2731681bae10fe72316dadc2749", size = 71831684, upload-time = "2026-03-25T22:41:01.356Z" }, + { url = "https://files.pythonhosted.org/packages/8a/1f/b33d5006823f8c1c8760887cf1190194f4b06de858b3d17e37bd930a6a62/ray-2.54.1-cp312-cp312-manylinux2014_x86_64.whl", hash = "sha256:4c6f7e23dda62a32f94083141c3f97e9c4246e3ae4ae2bc488bcd8fd0311f54a", size = 72688748, upload-time = "2026-03-25T22:41:07.43Z" }, + { url = "https://files.pythonhosted.org/packages/c8/5d/fe0e8ac47f6b362c81f391d7f8d2a6858d0bafcc2c37631dc5cc04a16545/ray-2.54.1-cp313-cp313-manylinux2014_aarch64.whl", hash = "sha256:2766f0230806480c38a9a94502087f1d4aea919f38521a28781690613b0290a4", size = 71738623, upload-time = "2026-03-25T22:41:23.898Z" }, + { url = "https://files.pythonhosted.org/packages/1b/22/48008a626e719baee2012080b960687cc6417b572b363c1c29fe23d119c3/ray-2.54.1-cp313-cp313-manylinux2014_x86_64.whl", hash = "sha256:0c3ae2943176e7b239c78b825a5b2bf4135d90280083a0e19c0a75a5db4d836f", size = 72603355, upload-time = "2026-03-25T22:41:29.802Z" }, +] + +[package.optional-dependencies] +cgraph = [ + { name = "cupy-cuda12x", marker = "sys_platform != 'darwin' and sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] + [[package]] name = "referencing" version = "0.37.0" @@ -4049,7 +4607,8 @@ name = "rfc3987-syntax" version = "1.1.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "lark" }, + { name = "lark", version = "1.2.2", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "lark", version = "1.3.1", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform == 'emscripten' or sys_platform == 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/2c/06/37c1a5557acf449e8e406a830a05bf885ac47d33270aec454ef78675008d/rfc3987_syntax-1.1.0.tar.gz", hash = "sha256:717a62cbf33cffdd16dfa3a497d81ce48a660ea691b1ddd7be710c22f00b4a0d", size = 14239, upload-time = "2025-07-18T01:05:05.015Z" } wheels = [ @@ -4069,6 +4628,48 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/14/25/b208c5683343959b670dc001595f2f3737e051da617f66c31f7c4fa93abc/rich-14.3.3-py3-none-any.whl", hash = "sha256:793431c1f8619afa7d3b52b2cdec859562b950ea0d4b6b505397612db8d5362d", size = 310458, upload-time = "2026-02-19T17:23:13.732Z" }, ] +[[package]] +name = "rich-toolkit" +version = "0.19.7" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "rich", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "typing-extensions", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/42/ba/dae9e3096651042754da419a4042bc1c75e07d615f9b15066d738838e4df/rich_toolkit-0.19.7.tar.gz", hash = "sha256:133c0915872da91d4c25d85342d5ec1dfacc69b63448af1a08a0d4b4f23ef46e", size = 195877, upload-time = "2026-02-24T16:06:20.555Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fb/3c/c923619f6d2f5fafcc96fec0aaf9550a46cd5b6481f06e0c6b66a2a4fed0/rich_toolkit-0.19.7-py3-none-any.whl", hash = "sha256:0288e9203728c47c5a4eb60fd2f0692d9df7455a65901ab6f898437a2ba5989d", size = 32963, upload-time = "2026-02-24T16:06:22.066Z" }, +] + +[[package]] +name = "rignore" +version = "0.7.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e5/f5/8bed2310abe4ae04b67a38374a4d311dd85220f5d8da56f47ae9361be0b0/rignore-0.7.6.tar.gz", hash = "sha256:00d3546cd793c30cb17921ce674d2c8f3a4b00501cb0e3dd0e82217dbeba2671", size = 57140, upload-time = "2025-11-05T21:41:21.968Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4a/c8/dea564b36dedac8de21c18e1851789545bc52a0c22ece9843444d5608a6a/rignore-0.7.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bda49950d405aa8d0ebe26af807c4e662dd281d926530f03f29690a2e07d649a", size = 897821, upload-time = "2025-11-05T20:40:52.613Z" }, + { url = "https://files.pythonhosted.org/packages/b3/2b/ee96db17ac1835e024c5d0742eefb7e46de60020385ac883dd3d1cde2c1f/rignore-0.7.6-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b5fd5ab3840b8c16851d327ed06e9b8be6459702a53e5ab1fc4073b684b3789e", size = 873963, upload-time = "2025-11-05T20:41:07.49Z" }, + { url = "https://files.pythonhosted.org/packages/a5/8c/ad5a57bbb9d14d5c7e5960f712a8a0b902472ea3f4a2138cbf70d1777b75/rignore-0.7.6-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ced2a248352636a5c77504cb755dc02c2eef9a820a44d3f33061ce1bb8a7f2d2", size = 1169216, upload-time = "2025-11-05T20:41:23.73Z" }, + { url = "https://files.pythonhosted.org/packages/80/e6/5b00bc2a6bc1701e6878fca798cf5d9125eb3113193e33078b6fc0d99123/rignore-0.7.6-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a04a3b73b75ddc12c9c9b21efcdaab33ca3832941d6f1d67bffd860941cd448a", size = 942942, upload-time = "2025-11-05T20:41:39.393Z" }, + { url = "https://files.pythonhosted.org/packages/85/e5/7f99bd0cc9818a91d0e8b9acc65b792e35750e3bdccd15a7ee75e64efca4/rignore-0.7.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d24321efac92140b7ec910ac7c53ab0f0c86a41133d2bb4b0e6a7c94967f44dd", size = 959787, upload-time = "2025-11-05T20:42:09.765Z" }, + { url = "https://files.pythonhosted.org/packages/55/54/2ffea79a7c1eabcede1926347ebc2a81bc6b81f447d05b52af9af14948b9/rignore-0.7.6-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:73c7aa109d41e593785c55fdaa89ad80b10330affa9f9d3e3a51fa695f739b20", size = 984245, upload-time = "2025-11-05T20:41:54.062Z" }, + { url = "https://files.pythonhosted.org/packages/41/f7/e80f55dfe0f35787fa482aa18689b9c8251e045076c35477deb0007b3277/rignore-0.7.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1734dc49d1e9501b07852ef44421f84d9f378da9fbeda729e77db71f49cac28b", size = 1078647, upload-time = "2025-11-05T21:40:13.463Z" }, + { url = "https://files.pythonhosted.org/packages/d4/cf/2c64f0b6725149f7c6e7e5a909d14354889b4beaadddaa5fff023ec71084/rignore-0.7.6-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:5719ea14ea2b652c0c0894be5dfde954e1853a80dea27dd2fbaa749618d837f5", size = 1139186, upload-time = "2025-11-05T21:40:31.27Z" }, + { url = "https://files.pythonhosted.org/packages/75/95/a86c84909ccc24af0d094b50d54697951e576c252a4d9f21b47b52af9598/rignore-0.7.6-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:8e23424fc7ce35726854f639cb7968151a792c0c3d9d082f7f67e0c362cfecca", size = 1117604, upload-time = "2025-11-05T21:40:48.07Z" }, + { url = "https://files.pythonhosted.org/packages/7f/5e/13b249613fd5d18d58662490ab910a9f0be758981d1797789913adb4e918/rignore-0.7.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3efdcf1dd84d45f3e2bd2f93303d9be103888f56dfa7c3349b5bf4f0657ec696", size = 1127725, upload-time = "2025-11-05T21:41:05.804Z" }, + { url = "https://files.pythonhosted.org/packages/36/31/b65b837e39c3f7064c426754714ac633b66b8c2290978af9d7f513e14aa9/rignore-0.7.6-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c1ad295537041dc2ed4b540fb1a3906bd9ede6ccdad3fe79770cd89e04e3c73c", size = 897406, upload-time = "2025-11-05T20:40:53.854Z" }, + { url = "https://files.pythonhosted.org/packages/ca/58/1970ce006c427e202ac7c081435719a076c478f07b3a23f469227788dc23/rignore-0.7.6-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f782dbd3a65a5ac85adfff69e5c6b101285ef3f845c3a3cae56a54bebf9fe116", size = 874050, upload-time = "2025-11-05T20:41:08.922Z" }, + { url = "https://files.pythonhosted.org/packages/d4/00/eb45db9f90137329072a732273be0d383cb7d7f50ddc8e0bceea34c1dfdf/rignore-0.7.6-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:65cece3b36e5b0826d946494734c0e6aaf5a0337e18ff55b071438efe13d559e", size = 1167835, upload-time = "2025-11-05T20:41:24.997Z" }, + { url = "https://files.pythonhosted.org/packages/f3/f1/6f1d72ddca41a64eed569680587a1236633587cc9f78136477ae69e2c88a/rignore-0.7.6-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d7e4bb66c13cd7602dc8931822c02dfbbd5252015c750ac5d6152b186f0a8be0", size = 941945, upload-time = "2025-11-05T20:41:40.628Z" }, + { url = "https://files.pythonhosted.org/packages/48/6f/2f178af1c1a276a065f563ec1e11e7a9e23d4996fd0465516afce4b5c636/rignore-0.7.6-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:297e500c15766e196f68aaaa70e8b6db85fa23fdc075b880d8231fdfba738cd7", size = 959067, upload-time = "2025-11-05T20:42:11.09Z" }, + { url = "https://files.pythonhosted.org/packages/5b/db/423a81c4c1e173877c7f9b5767dcaf1ab50484a94f60a0b2ed78be3fa765/rignore-0.7.6-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a07084211a8d35e1a5b1d32b9661a5ed20669970b369df0cf77da3adea3405de", size = 984438, upload-time = "2025-11-05T20:41:55.443Z" }, + { url = "https://files.pythonhosted.org/packages/31/eb/c4f92cc3f2825d501d3c46a244a671eb737fc1bcf7b05a3ecd34abb3e0d7/rignore-0.7.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:181eb2a975a22256a1441a9d2f15eb1292839ea3f05606620bd9e1938302cf79", size = 1078365, upload-time = "2025-11-05T21:40:15.148Z" }, + { url = "https://files.pythonhosted.org/packages/26/09/99442f02794bd7441bfc8ed1c7319e890449b816a7493b2db0e30af39095/rignore-0.7.6-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:7bbcdc52b5bf9f054b34ce4af5269df5d863d9c2456243338bc193c28022bd7b", size = 1139066, upload-time = "2025-11-05T21:40:32.771Z" }, + { url = "https://files.pythonhosted.org/packages/2c/88/bcfc21e520bba975410e9419450f4b90a2ac8236b9a80fd8130e87d098af/rignore-0.7.6-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:f2e027a6da21a7c8c0d87553c24ca5cc4364def18d146057862c23a96546238e", size = 1118036, upload-time = "2025-11-05T21:40:49.646Z" }, + { url = "https://files.pythonhosted.org/packages/e2/25/d37215e4562cda5c13312636393aea0bafe38d54d4e0517520a4cc0753ec/rignore-0.7.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ee4a18b82cbbc648e4aac1510066682fe62beb5dc88e2c67c53a83954e541360", size = 1127550, upload-time = "2025-11-05T21:41:07.648Z" }, +] + [[package]] name = "rouge-score" version = "0.1.2" @@ -4076,8 +4677,7 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "absl-py", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, { name = "nltk", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, - { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'" }, - { name = "numpy", version = "2.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, { name = "six", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/e2/c5/9136736c37022a6ad27fea38f3111eb8f02fe75d067f9a985cc358653102/rouge_score-0.1.2.tar.gz", hash = "sha256:c7d4da2683e68c9abf0135ef915d63a46643666f848e558a1b9f7ead17ff0f04", size = 17400, upload-time = "2022-07-22T22:46:22.909Z" } @@ -4181,8 +4781,7 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "colorama", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, { name = "lxml", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, - { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'" }, - { name = "numpy", version = "2.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, { name = "portalocker", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, { name = "regex", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, { name = "tabulate", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, @@ -4245,8 +4844,9 @@ version = "1.8.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "joblib" }, - { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.13'" }, - { name = "numpy", version = "2.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.13'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.13' and sys_platform == 'emscripten') or (python_full_version < '3.13' and sys_platform == 'win32')" }, + { name = "numpy", version = "2.4.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.13' and sys_platform == 'emscripten') or (python_full_version >= '3.13' and sys_platform == 'win32')" }, { name = "scipy" }, { name = "threadpoolctl" }, ] @@ -4277,8 +4877,9 @@ name = "scipy" version = "1.17.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.13'" }, - { name = "numpy", version = "2.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.13'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.13' and sys_platform == 'emscripten') or (python_full_version < '3.13' and sys_platform == 'win32')" }, + { name = "numpy", version = "2.4.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.13' and sys_platform == 'emscripten') or (python_full_version >= '3.13' and sys_platform == 'win32')" }, ] sdist = { url = "https://files.pythonhosted.org/packages/56/3e/9cca699f3486ce6bc12ff46dc2031f1ec8eb9ccc9a320fdaf925f1417426/scipy-1.17.0.tar.gz", hash = "sha256:2591060c8e648d8b96439e111ac41fd8342fdeff1876be2e19dea3fe8930454e", size = 30396830, upload-time = "2026-01-10T21:34:23.009Z" } wheels = [ @@ -4320,8 +4921,9 @@ version = "0.13.2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "matplotlib" }, - { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.13'" }, - { name = "numpy", version = "2.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.13'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.13' and sys_platform == 'emscripten') or (python_full_version < '3.13' and sys_platform == 'win32')" }, + { name = "numpy", version = "2.4.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.13' and sys_platform == 'emscripten') or (python_full_version >= '3.13' and sys_platform == 'win32')" }, { name = "pandas" }, ] sdist = { url = "https://files.pythonhosted.org/packages/86/59/a451d7420a77ab0b98f7affa3a1d78a313d2f7281a57afb1a34bae8ab412/seaborn-0.13.2.tar.gz", hash = "sha256:93e60a40988f4d65e9f4885df477e2fdaff6b73a9ded434c1ab356dd57eefff7", size = 1457696, upload-time = "2024-01-25T13:21:52.551Z" } @@ -4353,8 +4955,9 @@ version = "5.3.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "huggingface-hub" }, - { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.13'" }, - { name = "numpy", version = "2.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.13'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.13' and sys_platform == 'emscripten') or (python_full_version < '3.13' and sys_platform == 'win32')" }, + { name = "numpy", version = "2.4.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.13' and sys_platform == 'emscripten') or (python_full_version >= '3.13' and sys_platform == 'win32')" }, { name = "scikit-learn" }, { name = "scipy" }, { name = "torch" }, @@ -4394,10 +4997,55 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/c9/64/982e07b93219cb52e1cca5d272cb579e2f3eb001956c9e7a9a6d106c9473/sentry_sdk-2.57.0-py2.py3-none-any.whl", hash = "sha256:812c8bf5ff3d2f0e89c82f5ce80ab3a6423e102729c4706af7413fd1eb480585", size = 456489, upload-time = "2026-03-31T09:39:27.524Z" }, ] +[[package]] +name = "setproctitle" +version = "1.3.7" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/8d/48/49393a96a2eef1ab418b17475fb92b8fcfad83d099e678751b05472e69de/setproctitle-1.3.7.tar.gz", hash = "sha256:bc2bc917691c1537d5b9bca1468437176809c7e11e5694ca79a9ca12345dcb9e", size = 27002, upload-time = "2025-09-05T12:51:25.278Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d0/99/71630546b9395b095f4082be41165d1078204d1696c2d9baade3de3202d0/setproctitle-1.3.7-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:2906b6c7959cdb75f46159bf0acd8cc9906cf1361c9e1ded0d065fe8f9039629", size = 32932, upload-time = "2025-09-05T12:49:39.271Z" }, + { url = "https://files.pythonhosted.org/packages/50/22/cee06af4ffcfb0e8aba047bd44f5262e644199ae7527ae2c1f672b86495c/setproctitle-1.3.7-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6915964a6dda07920a1159321dcd6d94fc7fc526f815ca08a8063aeca3c204f1", size = 33736, upload-time = "2025-09-05T12:49:40.565Z" }, + { url = "https://files.pythonhosted.org/packages/5c/00/a5949a8bb06ef5e7df214fc393bb2fb6aedf0479b17214e57750dfdd0f24/setproctitle-1.3.7-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:cff72899861c765bd4021d1ff1c68d60edc129711a2fdba77f9cb69ef726a8b6", size = 35605, upload-time = "2025-09-05T12:49:42.362Z" }, + { url = "https://files.pythonhosted.org/packages/b0/3a/50caca532a9343828e3bf5778c7a84d6c737a249b1796d50dd680290594d/setproctitle-1.3.7-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:b7cb05bd446687ff816a3aaaf831047fc4c364feff7ada94a66024f1367b448c", size = 33143, upload-time = "2025-09-05T12:49:43.515Z" }, + { url = "https://files.pythonhosted.org/packages/ca/14/b843a251296ce55e2e17c017d6b9f11ce0d3d070e9265de4ecad948b913d/setproctitle-1.3.7-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:3a57b9a00de8cae7e2a1f7b9f0c2ac7b69372159e16a7708aa2f38f9e5cc987a", size = 34434, upload-time = "2025-09-05T12:49:45.31Z" }, + { url = "https://files.pythonhosted.org/packages/c8/b7/06145c238c0a6d2c4bc881f8be230bb9f36d2bf51aff7bddcb796d5eed67/setproctitle-1.3.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:d8828b356114f6b308b04afe398ed93803d7fca4a955dd3abe84430e28d33739", size = 32795, upload-time = "2025-09-05T12:49:46.419Z" }, + { url = "https://files.pythonhosted.org/packages/87/ed/0a4f00315bc02510395b95eec3d4aa77c07192ee79f0baae77ea7b9603d8/setproctitle-1.3.7-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:0564a936ea687cd24dffcea35903e2a20962aa6ac20e61dd3a207652401492dd", size = 33284, upload-time = "2025-09-05T12:49:52.741Z" }, + { url = "https://files.pythonhosted.org/packages/fc/e4/adf3c4c0a2173cb7920dc9df710bcc67e9bcdbf377e243b7a962dc31a51a/setproctitle-1.3.7-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a5d1cb3f81531f0eb40e13246b679a1bdb58762b170303463cb06ecc296f26d0", size = 34104, upload-time = "2025-09-05T12:49:54.416Z" }, + { url = "https://files.pythonhosted.org/packages/52/4f/6daf66394152756664257180439d37047aa9a1cfaa5e4f5ed35e93d1dc06/setproctitle-1.3.7-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a7d159e7345f343b44330cbba9194169b8590cb13dae940da47aa36a72aa9929", size = 35982, upload-time = "2025-09-05T12:49:56.295Z" }, + { url = "https://files.pythonhosted.org/packages/1b/62/f2c0595403cf915db031f346b0e3b2c0096050e90e0be658a64f44f4278a/setproctitle-1.3.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0b5074649797fd07c72ca1f6bff0406f4a42e1194faac03ecaab765ce605866f", size = 33150, upload-time = "2025-09-05T12:49:58.025Z" }, + { url = "https://files.pythonhosted.org/packages/a0/29/10dd41cde849fb2f9b626c846b7ea30c99c81a18a5037a45cc4ba33c19a7/setproctitle-1.3.7-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:61e96febced3f61b766115381d97a21a6265a0f29188a791f6df7ed777aef698", size = 34463, upload-time = "2025-09-05T12:49:59.424Z" }, + { url = "https://files.pythonhosted.org/packages/71/3c/cedd8eccfaf15fb73a2c20525b68c9477518917c9437737fa0fda91e378f/setproctitle-1.3.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:047138279f9463f06b858e579cc79580fbf7a04554d24e6bddf8fe5dddbe3d4c", size = 32848, upload-time = "2025-09-05T12:50:01.107Z" }, + { url = "https://files.pythonhosted.org/packages/52/09/f366eca0973cfbac1470068d1313fa3fe3de4a594683385204ec7f1c4101/setproctitle-1.3.7-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:c18246d88e227a5b16248687514f95642505000442165f4b7db354d39d0e4c29", size = 34490, upload-time = "2025-09-05T12:50:04.948Z" }, + { url = "https://files.pythonhosted.org/packages/71/36/611fc2ed149fdea17c3677e1d0df30d8186eef9562acc248682b91312706/setproctitle-1.3.7-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7081f193dab22df2c36f9fc6d113f3793f83c27891af8fe30c64d89d9a37e152", size = 35267, upload-time = "2025-09-05T12:50:06.015Z" }, + { url = "https://files.pythonhosted.org/packages/88/a4/64e77d0671446bd5a5554387b69e1efd915274686844bea733714c828813/setproctitle-1.3.7-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:9cc9b901ce129350637426a89cfd650066a4adc6899e47822e2478a74023ff7c", size = 37376, upload-time = "2025-09-05T12:50:07.484Z" }, + { url = "https://files.pythonhosted.org/packages/89/bc/ad9c664fe524fb4a4b2d3663661a5c63453ce851736171e454fa2cdec35c/setproctitle-1.3.7-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:80e177eff2d1ec172188d0d7fd9694f8e43d3aab76a6f5f929bee7bf7894e98b", size = 33963, upload-time = "2025-09-05T12:50:09.056Z" }, + { url = "https://files.pythonhosted.org/packages/ab/01/a36de7caf2d90c4c28678da1466b47495cbbad43badb4e982d8db8167ed4/setproctitle-1.3.7-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:23e520776c445478a67ee71b2a3c1ffdafbe1f9f677239e03d7e2cc635954e18", size = 35550, upload-time = "2025-09-05T12:50:10.791Z" }, + { url = "https://files.pythonhosted.org/packages/dd/68/17e8aea0ed5ebc17fbf03ed2562bfab277c280e3625850c38d92a7b5fcd9/setproctitle-1.3.7-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:5fa1953126a3b9bd47049d58c51b9dac72e78ed120459bd3aceb1bacee72357c", size = 33727, upload-time = "2025-09-05T12:50:12.032Z" }, +] + +[[package]] +name = "setuptools" +version = "79.0.1" +source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'", +] +sdist = { url = "https://files.pythonhosted.org/packages/bb/71/b6365e6325b3290e14957b2c3a804a529968c77a049b2ed40c095f749707/setuptools-79.0.1.tar.gz", hash = "sha256:128ce7b8f33c3079fd1b067ecbb4051a66e8526e7b65f6cec075dfc650ddfa88", size = 1367909, upload-time = "2025-04-23T22:20:59.241Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0d/6d/b4752b044bf94cb802d88a888dc7d288baaf77d7910b7dedda74b5ceea0c/setuptools-79.0.1-py3-none-any.whl", hash = "sha256:e147c0549f27767ba362f9da434eab9c5dc0045d5304feb602a0af001089fc51", size = 1256281, upload-time = "2025-04-23T22:20:56.768Z" }, +] + [[package]] name = "setuptools" version = "80.10.2" source = { registry = "https://pypi.org/simple" } +resolution-markers = [ + "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 == 'win32'", + "python_full_version < '3.13' and sys_platform == 'emscripten'", +] sdist = { url = "https://files.pythonhosted.org/packages/76/95/faf61eb8363f26aa7e1d762267a8d602a1b26d4f3a1e758e92cb3cb8b054/setuptools-80.10.2.tar.gz", hash = "sha256:8b0e9d10c784bf7d262c4e5ec5d4ec94127ce206e8738f29a437945fbc219b70", size = 1200343, upload-time = "2026-01-25T22:38:17.252Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/94/b8/f1f62a5e3c0ad2ff1d189590bfa4c46b4f3b6e49cef6f26c6ee4e575394d/setuptools-80.10.2-py3-none-any.whl", hash = "sha256:95b30ddfb717250edb492926c92b5221f7ef3fbcc2b07579bcd4a27da21d0173", size = 1064234, upload-time = "2026-01-25T22:38:15.216Z" }, @@ -4430,6 +5078,30 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/c1/d4/59e74daffcb57a07668852eeeb6035af9f32cbfd7a1d2511f17d2fe6a738/smmap-5.0.3-py3-none-any.whl", hash = "sha256:c106e05d5a61449cf6ba9a1e650227ecfb141590d2a98412103ff35d89fc7b2f", size = 24390, upload-time = "2026-03-09T03:43:24.361Z" }, ] +[[package]] +name = "sniffio" +version = "1.3.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a2/87/a6771e1546d97e7e041b6ae58d80074f81b7d5121207425c964ddf5cfdbd/sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc", size = 20372, upload-time = "2024-02-25T23:20:04.057Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2", size = 10235, upload-time = "2024-02-25T23:20:01.196Z" }, +] + +[[package]] +name = "soundfile" +version = "0.13.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cffi", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e1/41/9b873a8c055582859b239be17902a85339bec6a30ad162f98c9b0288a2cc/soundfile-0.13.1.tar.gz", hash = "sha256:b2c68dab1e30297317080a5b43df57e302584c49e2942defdde0acccc53f0e5b", size = 46156, upload-time = "2025-01-25T09:17:04.831Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/64/28/e2a36573ccbcf3d57c00626a21fe51989380636e821b341d36ccca0c1c3a/soundfile-0.13.1-py2.py3-none-any.whl", hash = "sha256:a23c717560da2cf4c7b5ae1142514e0fd82d6bbd9dfc93a50423447142f2c445", size = 25751, upload-time = "2025-01-25T09:16:44.235Z" }, + { url = "https://files.pythonhosted.org/packages/58/ae/c0e4a53d77cf6e9a04179535766b3321b0b9ced5f70522e4caf9329f0046/soundfile-0.13.1-py2.py3-none-manylinux_2_28_aarch64.whl", hash = "sha256:9c9e855f5a4d06ce4213f31918653ab7de0c5a8d8107cd2427e44b42df547deb", size = 1235729, upload-time = "2025-01-25T09:16:53.018Z" }, + { url = "https://files.pythonhosted.org/packages/57/5e/70bdd9579b35003a489fc850b5047beeda26328053ebadc1fb60f320f7db/soundfile-0.13.1-py2.py3-none-manylinux_2_28_x86_64.whl", hash = "sha256:03267c4e493315294834a0870f31dbb3b28a95561b80b134f0bd3cf2d5f0e618", size = 1313646, upload-time = "2025-01-25T09:16:54.872Z" }, +] + [[package]] name = "soupsieve" version = "2.8.3" @@ -4439,6 +5111,19 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/46/2c/1462b1d0a634697ae9e55b3cecdcb64788e8b7d63f54d923fcd0bb140aed/soupsieve-2.8.3-py3-none-any.whl", hash = "sha256:ed64f2ba4eebeab06cc4962affce381647455978ffc1e36bb79a545b91f45a95", size = 37016, upload-time = "2026-01-20T04:27:01.012Z" }, ] +[[package]] +name = "soxr" +version = "1.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/42/7e/f4b461944662ad75036df65277d6130f9411002bfb79e9df7dff40a31db9/soxr-1.0.0.tar.gz", hash = "sha256:e07ee6c1d659bc6957034f4800c60cb8b98de798823e34d2a2bba1caa85a4509", size = 171415, upload-time = "2025-09-07T13:22:21.317Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b5/80/10640970998a1d2199bef6c4d92205f36968cddaf3e4d0e9fe35ddd405bd/soxr-1.0.0-cp312-abi3-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e8ce273cca101aff3d8c387db5a5a41001ba76ef1837883438d3c652507a9ccc", size = 204707, upload-time = "2025-09-07T13:22:05.125Z" }, + { url = "https://files.pythonhosted.org/packages/b1/87/2726603c13c2126cb8ded9e57381b7377f4f0df6ba4408e1af5ddbfdc3dd/soxr-1.0.0-cp312-abi3-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e8f2a69686f2856d37823bbb7b78c3d44904f311fe70ba49b893af11d6b6047b", size = 238032, upload-time = "2025-09-07T13:22:06.428Z" }, +] + [[package]] name = "sqlitedict" version = "2.1.0" @@ -4461,15 +5146,15 @@ wheels = [ [[package]] name = "starlette" -version = "1.0.0" +version = "0.52.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "anyio", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, { name = "typing-extensions", marker = "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/81/69/17425771797c36cded50b7fe44e850315d039f28b15901ab44839e70b593/starlette-1.0.0.tar.gz", hash = "sha256:6a4beaf1f81bb472fd19ea9b918b50dc3a77a6f2e190a12954b25e6ed5eea149", size = 2655289, upload-time = "2026-03-22T18:29:46.779Z" } +sdist = { url = "https://files.pythonhosted.org/packages/c4/68/79977123bb7be889ad680d79a40f339082c1978b5cfcf62c2d8d196873ac/starlette-0.52.1.tar.gz", hash = "sha256:834edd1b0a23167694292e94f597773bc3f89f362be6effee198165a35d62933", size = 2653702, upload-time = "2026-01-18T13:34:11.062Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/0b/c9/584bc9651441b4ba60cc4d557d8a547b5aff901af35bda3a4ee30c819b82/starlette-1.0.0-py3-none-any.whl", hash = "sha256:d3ec55e0bb321692d275455ddfd3df75fff145d009685eb40dc91fc66b03d38b", size = 72651, upload-time = "2026-03-22T18:29:45.111Z" }, + { url = "https://files.pythonhosted.org/packages/81/0d/13d1d239a25cbfb19e740db83143e95c772a1fe10202dda4b76792b114dd/starlette-0.52.1-py3-none-any.whl", hash = "sha256:0029d43eb3d273bc4f83a08720b4912ea4b071087a3b48db01b7c839f7954d74", size = 74272, upload-time = "2026-01-18T13:34:09.188Z" }, ] [[package]] @@ -4535,12 +5220,11 @@ dependencies = [ { name = "absl-py", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, { name = "grpcio", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, { name = "markdown", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, - { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'" }, - { name = "numpy", version = "2.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, { name = "packaging", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, { name = "pillow", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, { name = "protobuf", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, - { name = "setuptools", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "setuptools", version = "79.0.1", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, { name = "tensorboard-data-server", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, { name = "werkzeug", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, ] @@ -4692,7 +5376,8 @@ dependencies = [ { name = "nvidia-nccl-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, { name = "nvidia-nvjitlink-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, { name = "nvidia-nvtx-cu12", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, - { name = "setuptools" }, + { name = "setuptools", version = "79.0.1", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "setuptools", version = "80.10.2", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform == 'emscripten' or sys_platform == 'win32'" }, { name = "sympy" }, { name = "triton", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, { name = "typing-extensions" }, @@ -4721,6 +5406,40 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/c9/37/ef37ca885265e5f79a168616767dd416a3cea1cc3b28bb6b503ce4a5b652/torchao-0.17.0-py3-none-any.whl", hash = "sha256:02eba449036715b9ae784fbaa1a6f97994bb7b0421ce92d1d5d1c08e5bd6d349", size = 1200680, upload-time = "2026-03-30T22:25:54.457Z" }, ] +[[package]] +name = "torchaudio" +version = "2.8.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "torch", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/c7/0d/24dad878784f1edd62862f27173781669f0c71eb46368636787d1e364188/torchaudio-2.8.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:862e2e40bf09d865e5df080a84c1a39bbcef40e43140f4b1737eb3a389d3b38f", size = 1692930, upload-time = "2025-08-06T14:58:41.312Z" }, + { url = "https://files.pythonhosted.org/packages/c2/a6/84d80f34472503e9eb82245d7df501c59602d75d7360e717fb9b84f91c5e/torchaudio-2.8.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:93a8583f280fe83ba021aa713319381ea71362cc87b67ee38e97a43cb2254aee", size = 4014607, upload-time = "2025-08-06T14:58:47.234Z" }, + { url = "https://files.pythonhosted.org/packages/0d/a3/1c79a8ef29fe403b83bdfc033db852bc2a888b80c406325e5c6fb37a7f2d/torchaudio-2.8.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:09535a9b727c0793cd07c1ace99f3f353626281bcc3e30c2f2314e3ebc9d3f96", size = 1692755, upload-time = "2025-08-06T14:58:50.868Z" }, + { url = "https://files.pythonhosted.org/packages/49/df/61941198e9ac6bcebfdd57e1836e4f3c23409308e3d8d7458f0198a6a366/torchaudio-2.8.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:d2a85b124494736241884372fe1c6dd8c15e9bc1931bd325838c5c00238c7378", size = 4013897, upload-time = "2025-08-06T14:59:01.66Z" }, + { url = "https://files.pythonhosted.org/packages/71/76/40fec21b65bccfdc5c8cdb9d511033ab07a7ad4b05f0a5b07f85c68279fc/torchaudio-2.8.0-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:1951f10ed092f2dda57634f6a3950ef21c9d9352551aa84a9fccd51bbda18095", size = 1704199, upload-time = "2025-08-06T14:58:43.594Z" }, + { url = "https://files.pythonhosted.org/packages/8e/53/95c3363413c2f2009f805144160b093a385f641224465fbcd717449c71fb/torchaudio-2.8.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:4f7d97494698d98854129349b12061e8c3398d33bd84c929fa9aed5fd1389f73", size = 4020596, upload-time = "2025-08-06T14:59:03.031Z" }, +] + +[[package]] +name = "torchvision" +version = "0.23.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "pillow", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "torch", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/e2/00/2f6454decc0cd67158c7890364e446aad4b91797087a57a78e72e1a8f8bc/torchvision-0.23.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:6dd7c4d329a0e03157803031bc856220c6155ef08c26d4f5bbac938acecf0948", size = 2396614, upload-time = "2025-08-06T14:58:03.116Z" }, + { url = "https://files.pythonhosted.org/packages/e4/b5/3e580dcbc16f39a324f3dd71b90edbf02a42548ad44d2b4893cc92b1194b/torchvision-0.23.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:4e7d31c43bc7cbecbb1a5652ac0106b436aa66e26437585fc2c4b2cf04d6014c", size = 8627108, upload-time = "2025-08-06T14:58:12.956Z" }, + { url = "https://files.pythonhosted.org/packages/ac/da/a06c60fc84fc849377cf035d3b3e9a1c896d52dbad493b963c0f1cdd74d0/torchvision-0.23.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:2f7fd6c15f3697e80627b77934f77705f3bc0e98278b989b2655de01f6903e1d", size = 2353112, upload-time = "2025-08-06T14:58:26.265Z" }, + { url = "https://files.pythonhosted.org/packages/a0/27/5ce65ba5c9d3b7d2ccdd79892ab86a2f87ac2ca6638f04bb0280321f1a9c/torchvision-0.23.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:a76fafe113b2977be3a21bf78f115438c1f88631d7a87203acb3dd6ae55889e6", size = 8627658, upload-time = "2025-08-06T14:58:15.999Z" }, + { url = "https://files.pythonhosted.org/packages/1d/9d/406cea60a9eb9882145bcd62a184ee61e823e8e1d550cdc3c3ea866a9445/torchvision-0.23.0-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:2a3299d2b1d5a7aed2d3b6ffb69c672ca8830671967eb1cee1497bacd82fe47b", size = 2359295, upload-time = "2025-08-06T14:58:17.469Z" }, + { url = "https://files.pythonhosted.org/packages/2b/f4/34662f71a70fa1e59de99772142f22257ca750de05ccb400b8d2e3809c1d/torchvision-0.23.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:76bc4c0b63d5114aa81281390f8472a12a6a35ce9906e67ea6044e5af4cab60c", size = 8800474, upload-time = "2025-08-06T14:58:22.53Z" }, +] + [[package]] name = "tornado" version = "6.5.4" @@ -4759,8 +5478,7 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "gradio", extra = ["oauth"], marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, { name = "huggingface-hub", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, - { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'" }, - { name = "numpy", version = "2.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, { name = "orjson", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, { name = "pandas", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, { name = "pillow", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, @@ -4786,8 +5504,9 @@ version = "5.5.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "huggingface-hub" }, - { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.13'" }, - { name = "numpy", version = "2.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.13'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.13' and sys_platform == 'emscripten') or (python_full_version < '3.13' and sys_platform == 'win32')" }, + { name = "numpy", version = "2.4.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.13' and sys_platform == 'emscripten') or (python_full_version >= '3.13' and sys_platform == 'win32')" }, { name = "packaging" }, { name = "pyyaml" }, { name = "regex" }, @@ -4812,7 +5531,7 @@ name = "triton" version = "3.4.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "setuptools", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "setuptools", version = "79.0.1", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, ] wheels = [ { url = "https://files.pythonhosted.org/packages/d0/66/b1eb52839f563623d185f0927eb3530ee4d5ffe9d377cdaf5346b306689e/triton-3.4.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:31c1d84a5c0ec2c0f8e8a072d7fd150cab84a9c239eaddc6706c081bfae4eb04", size = 155560068, upload-time = "2025-07-30T19:58:37.081Z" }, @@ -4948,6 +5667,32 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/b7/23/a5bbd9600dd607411fa644c06ff4951bec3a4d82c4b852374024359c19c0/uvicorn-0.44.0-py3-none-any.whl", hash = "sha256:ce937c99a2cc70279556967274414c087888e8cec9f9c94644dfca11bd3ced89", size = 69425, upload-time = "2026-04-06T09:23:21.524Z" }, ] +[package.optional-dependencies] +standard = [ + { name = "httptools", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "python-dotenv", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "pyyaml", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "uvloop", marker = "platform_python_implementation != 'PyPy' and sys_platform != 'cygwin' and sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "watchfiles", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "websockets", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] + +[[package]] +name = "uvloop" +version = "0.22.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/06/f0/18d39dbd1971d6d62c4629cc7fa67f74821b0dc1f5a77af43719de7936a7/uvloop-0.22.1.tar.gz", hash = "sha256:6c84bae345b9147082b17371e3dd5d42775bddce91f885499017f4607fdaf39f", size = 2443250, upload-time = "2025-10-16T22:17:19.342Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/24/68/a6ac446820273e71aa762fa21cdcc09861edd3536ff47c5cd3b7afb10eeb/uvloop-0.22.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:700e674a166ca5778255e0e1dc4e9d79ab2acc57b9171b79e65feba7184b3370", size = 4317413, upload-time = "2025-10-16T22:16:31.644Z" }, + { url = "https://files.pythonhosted.org/packages/5f/6f/e62b4dfc7ad6518e7eff2516f680d02a0f6eb62c0c212e152ca708a0085e/uvloop-0.22.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7b5b1ac819a3f946d3b2ee07f09149578ae76066d70b44df3fa990add49a82e4", size = 4426307, upload-time = "2025-10-16T22:16:32.917Z" }, + { url = "https://files.pythonhosted.org/packages/90/60/97362554ac21e20e81bcef1150cb2a7e4ffdaf8ea1e5b2e8bf7a053caa18/uvloop-0.22.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e047cc068570bac9866237739607d1313b9253c3051ad84738cbb095be0537b2", size = 4131970, upload-time = "2025-10-16T22:16:34.015Z" }, + { url = "https://files.pythonhosted.org/packages/99/39/6b3f7d234ba3964c428a6e40006340f53ba37993f46ed6e111c6e9141d18/uvloop-0.22.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:512fec6815e2dd45161054592441ef76c830eddaad55c8aa30952e6fe1ed07c0", size = 4296343, upload-time = "2025-10-16T22:16:35.149Z" }, + { url = "https://files.pythonhosted.org/packages/b7/02/654426ce265ac19e2980bfd9ea6590ca96a56f10c76e63801a2df01c0486/uvloop-0.22.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6e2ea3d6190a2968f4a14a23019d3b16870dd2190cd69c8180f7c632d21de68d", size = 4288562, upload-time = "2025-10-16T22:16:39.375Z" }, + { 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" }, +] + [[package]] name = "virtualenv" version = "20.36.1" @@ -4962,6 +5707,73 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/6a/2a/dc2228b2888f51192c7dc766106cd475f1b768c10caaf9727659726f7391/virtualenv-20.36.1-py3-none-any.whl", hash = "sha256:575a8d6b124ef88f6f51d56d656132389f961062a9177016a50e4f507bbcc19f", size = 6008258, upload-time = "2026-01-09T18:20:59.425Z" }, ] +[[package]] +name = "vllm" +version = "0.11.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "aiohttp", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "blake3", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "cachetools", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "cbor2", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "cloudpickle", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "compressed-tensors", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "depyf", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "diskcache", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "einops", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "fastapi", extra = ["standard"], marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "filelock", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "gguf", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "lark", version = "1.2.2", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "llguidance", marker = "(platform_machine == 'aarch64' and sys_platform != 'emscripten' and sys_platform != 'win32') or (platform_machine == 'arm64' and sys_platform != 'emscripten' and sys_platform != 'win32') or (platform_machine == 'x86_64' and sys_platform != 'emscripten' and sys_platform != 'win32')" }, + { name = "lm-format-enforcer", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "mistral-common", extra = ["audio", "image"], marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "msgspec", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "ninja", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "numba", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "openai", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "openai-harmony", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "opencv-python-headless", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "outlines-core", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "partial-json-parser", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "pillow", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "prometheus-client", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "prometheus-fastapi-instrumentator", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "protobuf", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "psutil", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "py-cpuinfo", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "pybase64", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "pydantic", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "python-json-logger", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "pyyaml", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "pyzmq", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "ray", extra = ["cgraph"], marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "regex", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "requests", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "scipy", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "sentencepiece", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "setproctitle", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "setuptools", version = "79.0.1", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "six", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "tiktoken", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "tokenizers", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "torch", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "torchaudio", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "torchvision", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "tqdm", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "transformers", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "typing-extensions", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "watchfiles", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "xformers", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "xgrammar", marker = "(platform_machine == 'aarch64' and sys_platform != 'emscripten' and sys_platform != 'win32') or (platform_machine == 'arm64' and sys_platform != 'emscripten' and sys_platform != 'win32') or (platform_machine == 'x86_64' and sys_platform != 'emscripten' and sys_platform != 'win32')" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/82/5a/36d2351206f4d8d871b10780f874d03957985e08298d430cc837723e07af/vllm-0.11.0.tar.gz", hash = "sha256:f435a64c24e9c4178d657a76f8edd8548ddc444012f7d06a9f79ac3a6392bfae", size = 10822208, upload-time = "2025-10-04T01:39:57.798Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/47/33/d19e0763c34392ec956534536fa837c060495bfff31ed83452135ea7608d/vllm-0.11.0-cp38-abi3-manylinux1_x86_64.whl", hash = "sha256:3861c75ff2b12e24f6d179ff5c084d791b42ded8675d76c8706697c79f68cd62", size = 438217982, upload-time = "2025-10-04T01:39:32.382Z" }, + { url = "https://files.pythonhosted.org/packages/d7/bf/973444bb959fc7acbbeb3d226bd4d135dcd49b6af174b29aab1b50e2d710/vllm-0.11.0-cp38-abi3-manylinux2014_aarch64.whl", hash = "sha256:52369c9ee949944354bdc7afc88ded2d1ed02b098bf90db06cf80098a19787b7", size = 401003969, upload-time = "2025-10-04T01:39:50.251Z" }, +] + [[package]] name = "voice" version = "0.1.0" @@ -4981,6 +5793,7 @@ dependencies = [ { name = "sentence-transformers" }, { name = "transformers" }, { name = "typer" }, + { name = "vllm", marker = "sys_platform == 'linux'" }, { name = "wandb" }, ] @@ -5002,7 +5815,7 @@ dev = [ [package.metadata] requires-dist = [ { name = "accelerate" }, - { name = "axolotl", marker = "sys_platform == 'linux'", specifier = ">=0.16.1" }, + { name = "axolotl", marker = "sys_platform == 'linux'", git = "https://github.com/axolotl-ai-cloud/axolotl.git?rev=v0.16.1" }, { name = "datasets", specifier = ">=4.5.0" }, { name = "dotenv", specifier = ">=0.9.9" }, { name = "huggingface-hub", specifier = ">=1.4.1" }, @@ -5015,6 +5828,7 @@ requires-dist = [ { name = "sentence-transformers", specifier = ">=5.3.0" }, { name = "transformers" }, { name = "typer", specifier = ">=0.9.0" }, + { name = "vllm", marker = "sys_platform == 'linux'", specifier = ">=0.11.0" }, { name = "wandb", specifier = ">=0.25.1" }, ] @@ -5133,6 +5947,23 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/34/db/b10e48aa8fff7407e67470363eac595018441cf32d5e1001567a7aeba5d2/websocket_client-1.9.0-py3-none-any.whl", hash = "sha256:af248a825037ef591efbf6ed20cc5faa03d3b47b9e5a2230a529eeee1c1fc3ef", size = 82616, upload-time = "2025-10-07T21:16:34.951Z" }, ] +[[package]] +name = "websockets" +version = "16.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/04/24/4b2031d72e840ce4c1ccb255f693b15c334757fc50023e4db9537080b8c4/websockets-16.0.tar.gz", hash = "sha256:5f6261a5e56e8d5c42a4497b364ea24d94d9563e8fbd44e78ac40879c60179b5", size = 179346, upload-time = "2026-01-10T09:23:47.181Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/18/29/71729b4671f21e1eaa5d6573031ab810ad2936c8175f03f97f3ff164c802/websockets-16.0-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:9b5aca38b67492ef518a8ab76851862488a478602229112c4b0d58d63a7a4d5c", size = 184915, upload-time = "2026-01-10T09:22:51.071Z" }, + { url = "https://files.pythonhosted.org/packages/97/bb/21c36b7dbbafc85d2d480cd65df02a1dc93bf76d97147605a8e27ff9409d/websockets-16.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e0334872c0a37b606418ac52f6ab9cfd17317ac26365f7f65e203e2d0d0d359f", size = 186152, upload-time = "2026-01-10T09:22:52.224Z" }, + { url = "https://files.pythonhosted.org/packages/4a/34/9bf8df0c0cf88fa7bfe36678dc7b02970c9a7d5e065a3099292db87b1be2/websockets-16.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a0b31e0b424cc6b5a04b8838bbaec1688834b2383256688cf47eb97412531da1", size = 185583, upload-time = "2026-01-10T09:22:53.443Z" }, + { url = "https://files.pythonhosted.org/packages/47/88/4dd516068e1a3d6ab3c7c183288404cd424a9a02d585efbac226cb61ff2d/websockets-16.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:485c49116d0af10ac698623c513c1cc01c9446c058a4e61e3bf6c19dff7335a2", size = 184880, upload-time = "2026-01-10T09:22:55.033Z" }, + { url = "https://files.pythonhosted.org/packages/bd/28/0a25ee5342eb5d5f297d992a77e56892ecb65e7854c7898fb7d35e9b33bd/websockets-16.0-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:95724e638f0f9c350bb1c2b0a7ad0e83d9cc0c9259f3ea94e40d7b02a2179ae5", size = 184975, upload-time = "2026-01-10T09:23:03.756Z" }, + { url = "https://files.pythonhosted.org/packages/f9/66/27ea52741752f5107c2e41fda05e8395a682a1e11c4e592a809a90c6a506/websockets-16.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c0204dc62a89dc9d50d682412c10b3542d748260d743500a85c13cd1ee4bde82", size = 186203, upload-time = "2026-01-10T09:23:05.01Z" }, + { url = "https://files.pythonhosted.org/packages/37/e5/8e32857371406a757816a2b471939d51c463509be73fa538216ea52b792a/websockets-16.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:52ac480f44d32970d66763115edea932f1c5b1312de36df06d6b219f6741eed8", size = 185653, upload-time = "2026-01-10T09:23:06.301Z" }, + { 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/6f/28/258ebab549c2bf3e64d2b0217b973467394a9cea8c42f70418ca2c5d0d2e/websockets-16.0-py3-none-any.whl", hash = "sha256:1637db62fad1dc833276dded54215f2c7fa46912301a24bd94d45d46a011ceec", size = 171598, upload-time = "2026-01-10T09:23:45.395Z" }, +] + [[package]] name = "werkzeug" version = "3.1.8" @@ -5170,16 +6001,35 @@ wheels = [ [[package]] name = "xformers" -version = "0.0.32.post2" +version = "0.0.32.post1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'" }, - { name = "numpy", version = "2.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, { name = "torch", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/47/99/68d2e7a17b65a08180d6b120d1d293d5855a0c5999cb30a79fb466b49642/xformers-0.0.32.post2.tar.gz", hash = "sha256:9538be803969c6e1ca16a3ece921e472c24f79970b10be1087a389dcb66e412a", size = 12105990, upload-time = "2025-08-15T11:48:56.584Z" } +sdist = { url = "https://files.pythonhosted.org/packages/6f/33/3b9c4d3d5b2da453d27de891df4ad653ac5795324961aa3a5c15b0353fe6/xformers-0.0.32.post1.tar.gz", hash = "sha256:1de84a45c497c8d92326986508d81f4b0a8c6be4d3d62a29b8ad6048a6ab51e1", size = 12106196, upload-time = "2025-08-14T18:07:45.486Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6b/df/6817346f1a77278315d5fe1fc9f239ba3282ba36e8ab3256babd448dde62/xformers-0.0.32.post1-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:5f245b5555188da112070d8fefb6b7ae1ae47422856521d66c837e9d2352fbe4", size = 117199943, upload-time = "2025-08-14T18:07:34.78Z" }, +] + +[[package]] +name = "xgrammar" +version = "0.1.25" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "ninja", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "pydantic", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "torch", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "transformers", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "triton", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, + { name = "typing-extensions", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f2/a9/dc3c63cf7f082d183711e46ef34d10d8a135c2319dc581905d79449f52ea/xgrammar-0.1.25.tar.gz", hash = "sha256:70ce16b27e8082f20808ed759b0733304316facc421656f0f30cfce514b5b77a", size = 2297187, upload-time = "2025-09-21T05:58:58.942Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/ce/16/4ed2fbf7c20ba20565d9a1fc544c2bef39d409c8eca1949654c6ff9f8452/xformers-0.0.32.post2-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:3d1fefe0006eb00a730b3b197ff41aab085f1209b50419baab6152445f09e508", size = 117196673, upload-time = "2025-08-15T11:48:46.726Z" }, + { url = "https://files.pythonhosted.org/packages/99/9c/39bb38680be3b6d6aa11b8a46a69fb43e2537d6728710b299fa9fc231ff0/xgrammar-0.1.25-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c519518ebc65f75053123baaf23776a21bda58f64101a64c2fc4aa467c9cd480", size = 8519097, upload-time = "2025-09-21T05:58:40.831Z" }, + { url = "https://files.pythonhosted.org/packages/c6/c2/695797afa9922c30c45aa94e087ad33a9d87843f269461b622a65a39022a/xgrammar-0.1.25-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47fdbfc6007df47de2142613220292023e88e4a570546b39591f053e4d9ec33f", size = 8712184, upload-time = "2025-09-21T05:58:43.142Z" }, + { url = "https://files.pythonhosted.org/packages/e1/48/df8c52a22f47f1e3237d9457fd6fefe8b9bca75a13a81d1901690260c86b/xgrammar-0.1.25-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a1a6a638167d704a22a0c9670e2176104c38e38c351286a07a77143e22f9053", size = 8710998, upload-time = "2025-09-21T05:58:47.731Z" }, ] [[package]] From 8a2b5bac21bf2dc0098cccaa030579ee60bbb4bd Mon Sep 17 00:00:00 2001 From: Fin Griffin Date: Mon, 13 Apr 2026 10:39:52 +0100 Subject: [PATCH 14/68] chore: add bnb --- pyproject.toml | 1 + uv.lock | 16 ++++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/pyproject.toml b/pyproject.toml index cd8cc3e..24564b3 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -21,6 +21,7 @@ dependencies = [ "transformers", "wandb>=0.25.1", "vllm>=0.11.0 ; sys_platform == 'linux'", + "bitsandbytes>=0.49.2 ; sys_platform == 'linux'", ] [tool.uv] diff --git a/uv.lock b/uv.lock index 4dc9c12..9909630 100644 --- a/uv.lock +++ b/uv.lock @@ -525,6 +525,20 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/1a/39/47f9197bdd44df24d67ac8893641e16f386c984a0619ef2ee4c51fbbc019/beautifulsoup4-4.14.3-py3-none-any.whl", hash = "sha256:0918bfe44902e6ad8d57732ba310582e98da931428d231a5ecb9e7c703a735bb", size = 107721, upload-time = "2025-11-30T15:08:24.087Z" }, ] +[[package]] +name = "bitsandbytes" +version = "0.49.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "packaging", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "torch", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/29/71/acff7af06c818664aa87ff73e17a52c7788ad746b72aea09d3cb8e424348/bitsandbytes-0.49.2-py3-none-manylinux_2_24_aarch64.whl", hash = "sha256:2fc0830c5f7169be36e60e11f2be067c8f812dfcb829801a8703735842450750", size = 31442815, upload-time = "2026-02-16T21:26:06.783Z" }, + { url = "https://files.pythonhosted.org/packages/19/57/3443d6f183436fbdaf5000aac332c4d5ddb056665d459244a5608e98ae92/bitsandbytes-0.49.2-py3-none-manylinux_2_24_x86_64.whl", hash = "sha256:54b771f06e1a3c73af5c7f16ccf0fc23a846052813d4b008d10cb6e017dd1c8c", size = 60651714, upload-time = "2026-02-16T21:26:11.579Z" }, +] + [[package]] name = "blake3" version = "1.0.8" @@ -5781,6 +5795,7 @@ source = { editable = "." } dependencies = [ { name = "accelerate" }, { name = "axolotl", marker = "sys_platform == 'linux'" }, + { name = "bitsandbytes", marker = "sys_platform == 'linux'" }, { name = "datasets" }, { name = "dotenv" }, { name = "huggingface-hub" }, @@ -5816,6 +5831,7 @@ dev = [ requires-dist = [ { name = "accelerate" }, { name = "axolotl", marker = "sys_platform == 'linux'", git = "https://github.com/axolotl-ai-cloud/axolotl.git?rev=v0.16.1" }, + { name = "bitsandbytes", marker = "sys_platform == 'linux'", specifier = ">=0.49.2" }, { name = "datasets", specifier = ">=4.5.0" }, { name = "dotenv", specifier = ">=0.9.9" }, { name = "huggingface-hub", specifier = ">=1.4.1" }, From 89bd4c0cb7de8523d8964e92284a76e39df166bb Mon Sep 17 00:00:00 2001 From: Fin Griffin Date: Mon, 13 Apr 2026 10:48:41 +0100 Subject: [PATCH 15/68] fix: migrate to slow tokenizer for vllm --- sweep/infer.py | 1 + sweep/sweep.py | 5 ++++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/sweep/infer.py b/sweep/infer.py index 3531e83..4c9090d 100644 --- a/sweep/infer.py +++ b/sweep/infer.py @@ -145,6 +145,7 @@ def main() -> None: dtype="bfloat16", gpu_memory_utilization=0.9, max_lora_rank=MAX_LORA_RANK, + tokenizer_mode="slow", ) lora_request = LoRARequest("adapter", 1, args.checkpoint) tokenizer = llm.get_tokenizer() diff --git a/sweep/sweep.py b/sweep/sweep.py index 3138c58..2241cbe 100644 --- a/sweep/sweep.py +++ b/sweep/sweep.py @@ -212,11 +212,14 @@ def run_inference(checkpoint_path: Path) -> dict[str, Any]: ], capture_output=True, text=True, - check=True, ) if proc.stderr: for line in proc.stderr.strip().splitlines(): log.info(f" [infer] {line}") + if proc.returncode != 0: + raise RuntimeError( + f"infer.py exited with code {proc.returncode}" + ) return cast(dict[str, Any], json.loads(proc.stdout)) From f70bfc96163121eed3104a3212b42d40ee8c52ed Mon Sep 17 00:00:00 2001 From: Fin Griffin Date: Mon, 13 Apr 2026 10:55:19 +0100 Subject: [PATCH 16/68] fix: migrate to torch batched inference --- sweep/infer.py | 310 ++++++++++++++++++++++++++++++------------------- 1 file changed, 193 insertions(+), 117 deletions(-) diff --git a/sweep/infer.py b/sweep/infer.py index 4c9090d..4e07386 100644 --- a/sweep/infer.py +++ b/sweep/infer.py @@ -1,8 +1,8 @@ """Inference and test-loss script for a single fine-tuned checkpoint. -Uses vLLM for batched generation and prompt logprobs for NLL loss. -All 200 test examples are processed in two bulk passes (generation + loss), -making this dramatically faster than sequential per-example inference. +Loads the base model with LoRA adapter, runs greedy generation in batches +on the Bush test split, and computes token-weighted NLL loss over assistant +turns only. Outputs a single JSON object to stdout:: @@ -21,94 +21,204 @@ import sys from typing import Any +import torch from datasets import load_dataset from dotenv import load_dotenv -from vllm import LLM, SamplingParams -from vllm.lora.request import LoRARequest +from peft import PeftModel +from transformers import AutoModelForCausalLM, AutoTokenizer load_dotenv() BASE_MODEL = "meta-llama/Llama-3.1-8B-Instruct" DATASET = "AccelerateScience/bush-dataset" MAX_NEW_TOKENS = 512 -# Must be >= the largest lora_r in the sweep grid (32). -MAX_LORA_RANK = 32 +GEN_BATCH_SIZE = 8 +LOSS_BATCH_SIZE = 16 def _log(msg: str) -> None: print(msg, file=sys.stderr, flush=True) -def build_token_ids( - examples: list[dict[str, Any]], +def _apply_template(tokenizer: Any, messages: list[dict[str, Any]], add_generation_prompt: bool) -> list[int]: + """Apply chat template and return a flat list of token IDs. + + :param tokenizer: tokenizer to apply the template with. + :param messages: list of message dicts with ``role`` and ``content`` keys. + :param add_generation_prompt: whether to append the generation prompt. + :returns: list of integer token IDs. + """ + ids = tokenizer.apply_chat_template( + messages, + tokenize=True, + add_generation_prompt=add_generation_prompt, + ) + if hasattr(ids, "input_ids"): + ids = ids.input_ids + if hasattr(ids, "tolist"): + ids = ids[0].tolist() + return list(ids) + + +def load_model_and_tokenizer( + checkpoint: str, + hf_token: str, +) -> tuple[Any, Any]: + """Load the base model with LoRA adapter from a checkpoint directory. + + :param checkpoint: path to the epoch checkpoint directory. + :param hf_token: HuggingFace API token for private model access. + :returns: (model, tokenizer) tuple ready for inference. + """ + _log(f"Loading tokenizer from {BASE_MODEL}") + tokenizer = AutoTokenizer.from_pretrained(BASE_MODEL, token=hf_token) + if tokenizer.pad_token is None: + tokenizer.pad_token = tokenizer.eos_token + + _log("Loading base model") + base = AutoModelForCausalLM.from_pretrained( + BASE_MODEL, + dtype=torch.bfloat16, + device_map="auto", + token=hf_token, + ) + + _log(f"Loading LoRA adapter from {checkpoint}") + model = PeftModel.from_pretrained(base, checkpoint) + model.eval() + return model, tokenizer + + +def batched_generate( + model: Any, tokenizer: Any, -) -> tuple[list[list[int]], list[list[int]], list[int]]: - """Tokenize all examples into full and prompt token ID lists. + examples: list[dict[str, Any]], +) -> list[str]: + """Run greedy generation in batches over all examples. - :param examples: list of dataset examples from the test split. + Prompts are left-padded so all sequences in a batch end at the same + position, which is required for correct batched generation. + + :param model: fine-tuned model (base + LoRA adapter). :param tokenizer: tokenizer matching the base model. - :returns: (full_token_ids, prompt_token_ids, prompt_lens) where - full_token_ids includes the assistant completion and - prompt_token_ids ends with the generation prompt. + :param examples: list of dataset examples from the test split. + :returns: list of generated response strings, one per example. """ - full_token_ids: list[list[int]] = [] - prompt_token_ids: list[list[int]] = [] - prompt_lens: list[int] = [] - - for example in examples: - messages: list[dict[str, Any]] = example["messages"] - prompt_messages = messages[:-1] - - full_ids = tokenizer.apply_chat_template( - messages, - tokenize=True, - add_generation_prompt=False, - ) - if hasattr(full_ids, "input_ids"): - full_ids = list(full_ids.input_ids[0]) - - p_ids = tokenizer.apply_chat_template( - prompt_messages, - tokenize=True, - add_generation_prompt=True, + responses: list[str] = [] + pad_id = tokenizer.pad_token_id + + for start in range(0, len(examples), GEN_BATCH_SIZE): + batch = examples[start : start + GEN_BATCH_SIZE] + + prompt_ids_list = [ + _apply_template(tokenizer, ex["messages"][:-1], add_generation_prompt=True) + for ex in batch + ] + max_len = max(len(ids) for ids in prompt_ids_list) + + # Left-pad so all prompts end at the same position + input_ids = torch.tensor( + [[pad_id] * (max_len - len(ids)) + ids for ids in prompt_ids_list], + dtype=torch.long, + ).to(model.device) + attention_mask = torch.tensor( + [[0] * (max_len - len(ids)) + [1] * len(ids) for ids in prompt_ids_list], + dtype=torch.long, + ).to(model.device) + + with torch.no_grad(): + output_ids = model.generate( + input_ids=input_ids, + attention_mask=attention_mask, + max_new_tokens=MAX_NEW_TOKENS, + do_sample=False, + pad_token_id=tokenizer.eos_token_id, + ) + + for ids in output_ids: + new_ids = ids[max_len:] + responses.append(tokenizer.decode(new_ids, skip_special_tokens=True)) + + _log( + f" [gen] {min(start + GEN_BATCH_SIZE, len(examples))}" + f"/{len(examples)}" ) - if hasattr(p_ids, "input_ids"): - p_ids = list(p_ids.input_ids[0]) - - full_token_ids.append(list(full_ids)) - prompt_token_ids.append(list(p_ids)) - prompt_lens.append(len(p_ids)) - return full_token_ids, prompt_token_ids, prompt_lens + return responses -def compute_nll( - loss_outputs: list[Any], - full_token_ids: list[list[int]], - prompt_lens: list[int], +def batched_loss( + model: Any, + tokenizer: Any, + examples: list[dict[str, Any]], ) -> float: - """Compute token-weighted NLL loss from vLLM prompt logprobs. + """Compute token-weighted NLL loss over assistant turns in batches. - :param loss_outputs: vLLM RequestOutput list from the loss pass. - :param full_token_ids: tokenised full sequences (prompt + completion). - :param prompt_lens: length of the prompt portion for each example. + Loss is computed only over assistant tokens; prompt and padding tokens + are masked with -100. + + :param model: fine-tuned model (base + LoRA adapter). + :param tokenizer: tokenizer matching the base model. + :param examples: list of dataset examples from the test split. :returns: token-weighted average NLL loss across all examples. """ total_loss = 0.0 total_tokens = 0 - for i, out in enumerate(loss_outputs): - pl = out.prompt_logprobs # List[Optional[Dict[int, Logprob]]] - full_ids = full_token_ids[i] - p_len = prompt_lens[i] - - for j in range(p_len, len(full_ids)): - if pl is None or j >= len(pl) or pl[j] is None: - continue - token_id = full_ids[j] - if token_id in pl[j]: - total_loss += -pl[j][token_id].logprob - total_tokens += 1 + for start in range(0, len(examples), LOSS_BATCH_SIZE): + batch = examples[start : start + LOSS_BATCH_SIZE] + + full_ids_list = [ + _apply_template(tokenizer, ex["messages"], add_generation_prompt=False)[:2048] + for ex in batch + ] + prompt_lens = [ + len(_apply_template(tokenizer, ex["messages"][:-1], add_generation_prompt=True)) + for ex in batch + ] + max_len = max(len(ids) for ids in full_ids_list) + pad_id = tokenizer.pad_token_id + + # Right-pad full sequences; labels mask prompt + padding with -100 + input_ids = torch.zeros(len(batch), max_len, dtype=torch.long) + attention_mask = torch.zeros(len(batch), max_len, dtype=torch.long) + labels = torch.full((len(batch), max_len), -100, dtype=torch.long) + + for i, (full_ids, p_len) in enumerate(zip(full_ids_list, prompt_lens)): + seq_len = len(full_ids) + input_ids[i, :seq_len] = torch.tensor(full_ids, dtype=torch.long) + input_ids[i, seq_len:] = pad_id + attention_mask[i, :seq_len] = 1 + labels[i, p_len:seq_len] = torch.tensor( + full_ids[p_len:], dtype=torch.long + ) + + input_ids = input_ids.to(model.device) + attention_mask = attention_mask.to(model.device) + labels = labels.to(model.device) + + with torch.no_grad(): + logits = model( + input_ids=input_ids, attention_mask=attention_mask + ).logits + + shift_logits = logits[..., :-1, :].contiguous() + shift_labels = labels[..., 1:].contiguous() + valid = shift_labels != -100 + n_tokens = int(valid.sum().item()) + + if n_tokens > 0: + loss_val = torch.nn.functional.cross_entropy( + shift_logits.view(-1, shift_logits.size(-1))[valid.view(-1)], + shift_labels.view(-1)[valid.view(-1)], + ).item() + total_loss += loss_val * n_tokens + total_tokens += n_tokens + + _log( + f" [loss] {min(start + LOSS_BATCH_SIZE, len(examples))}" + f"/{len(examples)}" + ) return total_loss / total_tokens if total_tokens > 0 else float("nan") @@ -129,67 +239,33 @@ def main() -> None: hf_token = ( os.environ.get("HF_TOKEN") or os.environ.get("HUGGINGFACE_TOKEN") or "" ) - if hf_token: - os.environ["HF_TOKEN"] = hf_token + + model, tokenizer = load_model_and_tokenizer(args.checkpoint, hf_token) _log(f"Loading test split from {DATASET}") ds = load_dataset(DATASET, split="test", token=hf_token) examples = list(ds) - _log(f"{len(examples)} test examples") - - _log("Initialising vLLM engine") - llm = LLM( - model=BASE_MODEL, - enable_lora=True, - max_model_len=2048, - dtype="bfloat16", - gpu_memory_utilization=0.9, - max_lora_rank=MAX_LORA_RANK, - tokenizer_mode="slow", + _log( + f"Running inference on {len(examples)} examples " + f"(gen_batch={GEN_BATCH_SIZE}, loss_batch={LOSS_BATCH_SIZE})" ) - lora_request = LoRARequest("adapter", 1, args.checkpoint) - tokenizer = llm.get_tokenizer() - _log("Tokenising examples") - full_token_ids, prompt_token_ids, prompt_lens = build_token_ids( - examples, tokenizer - ) - - _log("Batched generation pass") - gen_outputs = llm.generate( - prompt_token_ids=prompt_token_ids, - sampling_params=SamplingParams( - max_tokens=MAX_NEW_TOKENS, - temperature=0, - ), - lora_request=lora_request, - ) - - _log("Batched loss pass (prompt logprobs)") - loss_outputs = llm.generate( - prompt_token_ids=full_token_ids, - sampling_params=SamplingParams( - max_tokens=1, - temperature=0, - prompt_logprobs=1, - ), - lora_request=lora_request, - ) - - eval_loss = compute_nll(loss_outputs, full_token_ids, prompt_lens) - - completions: list[dict[str, Any]] = [] - for example, gen_out in zip(examples, gen_outputs): - prompt_messages = example["messages"][:-1] - completions.append( - { - "messages": [ - {"role": m["role"], "content": m["content"]} - for m in prompt_messages - ], - "generated_response": gen_out.outputs[0].text, - } - ) + _log("Generation pass") + responses = batched_generate(model, tokenizer, examples) + + _log("Loss pass") + eval_loss = batched_loss(model, tokenizer, examples) + + completions: list[dict[str, Any]] = [ + { + "messages": [ + {"role": m["role"], "content": m["content"]} + for m in ex["messages"][:-1] + ], + "generated_response": response, + } + for ex, response in zip(examples, responses) + ] _log(f"eval_loss={eval_loss:.4f} n_completions={len(completions)}") print(json.dumps({"eval_loss": eval_loss, "completions": completions})) From e580e04a3d461049c482088d8cc35e2cc4f3fed6 Mon Sep 17 00:00:00 2001 From: Fin Griffin Date: Mon, 13 Apr 2026 14:57:21 +0100 Subject: [PATCH 17/68] chore: fix triton kernels --- sweep/infer.py | 7 +++++++ sweep/master_config.yaml | 8 ++++++++ 2 files changed, 15 insertions(+) diff --git a/sweep/infer.py b/sweep/infer.py index 4e07386..b07a2ea 100644 --- a/sweep/infer.py +++ b/sweep/infer.py @@ -126,6 +126,12 @@ def batched_generate( dtype=torch.long, ).to(model.device) + # Llama 3.1 chat template ends turns with <|eot_id|> (128009), not + # <|end_of_text|> (128001). Both must be EOS terminators or the model + # blows past the natural stopping point and loops. + eot_id = tokenizer.convert_tokens_to_ids("<|eot_id|>") + eos_ids = list({tokenizer.eos_token_id, eot_id}) + with torch.no_grad(): output_ids = model.generate( input_ids=input_ids, @@ -133,6 +139,7 @@ def batched_generate( max_new_tokens=MAX_NEW_TOKENS, do_sample=False, pad_token_id=tokenizer.eos_token_id, + eos_token_id=eos_ids, ) for ids in output_ids: diff --git a/sweep/master_config.yaml b/sweep/master_config.yaml index 33b9c7c..e4b6c73 100644 --- a/sweep/master_config.yaml +++ b/sweep/master_config.yaml @@ -81,6 +81,14 @@ axolotl: flash_attention: true gradient_checkpointing: true + # Disable axolotl's auto-enabled LoRA kernel optimizations. The MLP SwiGLU + # Triton kernel fails to compile on this host (gcc cannot link libcuda), + # which crashes all attention_mlp runs. Disabling here keeps training stable + # at the cost of a small throughput regression. + lora_mlp_kernel: false + lora_qkv_kernel: false + lora_o_kernel: false + # Optimiser optimizer: adamw_torch_fused lr_scheduler: cosine From b005b6723f47b09f66b81868631a0f145ca76eba Mon Sep 17 00:00:00 2001 From: Fin Griffin Date: Mon, 13 Apr 2026 16:31:05 +0100 Subject: [PATCH 18/68] chore(deps): update vllm --- pyproject.toml | 4 +- uv.lock | 920 ++----------------------------------------------- 2 files changed, 33 insertions(+), 891 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 24564b3..38a4682 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -3,7 +3,7 @@ name = "voice" version = "0.1.0" description = "Fine-tuning for stylistic fidelity" readme = "README.md" -requires-python = ">=3.12,<3.14" +requires-python = ">=3.12,<3.13" dependencies = [ "accelerate", "axolotl @ git+https://github.com/axolotl-ai-cloud/axolotl.git@v0.16.1 ; sys_platform == 'linux'", @@ -21,7 +21,7 @@ dependencies = [ "transformers", "wandb>=0.25.1", "vllm>=0.11.0 ; sys_platform == 'linux'", - "bitsandbytes>=0.49.2 ; sys_platform == 'linux'", + "bitsandbytes>=0.49.1 ; sys_platform == 'linux'", ] [tool.uv] diff --git a/uv.lock b/uv.lock index 9909630..5c2fedd 100644 --- a/uv.lock +++ b/uv.lock @@ -1,13 +1,11 @@ version = 1 revision = 3 -requires-python = ">=3.12, <3.14" +requires-python = "==3.12.*" resolution-markers = [ - "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_version < '0'", + "sys_platform == 'win32'", + "sys_platform == 'emscripten'", + "sys_platform != 'emscripten' and sys_platform != 'win32'", ] required-markers = [ "sys_platform == 'linux'", @@ -29,8 +27,7 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "huggingface-hub" }, { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, - { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.13' and sys_platform == 'emscripten') or (python_full_version < '3.13' and sys_platform == 'win32')" }, - { name = "numpy", version = "2.4.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.13' and sys_platform == 'emscripten') or (python_full_version >= '3.13' and sys_platform == 'win32')" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform == 'emscripten' or sys_platform == 'win32'" }, { name = "packaging" }, { name = "psutil" }, { name = "pyyaml" }, @@ -126,23 +123,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/9d/f2/a07a75173124f31f11ea6f863dc44e6f09afe2bca45dd4e64979490deab1/aiohttp-3.13.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:87797e645d9d8e222e04160ee32aa06bc5c163e8499f24db719e7852ec23093a", size = 1722379, upload-time = "2026-01-03T17:30:41.081Z" }, { url = "https://files.pythonhosted.org/packages/3c/4a/1a3fee7c21350cac78e5c5cef711bac1b94feca07399f3d406972e2d8fcd/aiohttp-3.13.3-cp312-cp312-win32.whl", hash = "sha256:b04be762396457bef43f3597c991e192ee7da460a4953d7e647ee4b1c28e7046", size = 428253, upload-time = "2026-01-03T17:30:42.644Z" }, { url = "https://files.pythonhosted.org/packages/d9/b7/76175c7cb4eb73d91ad63c34e29fc4f77c9386bba4a65b53ba8e05ee3c39/aiohttp-3.13.3-cp312-cp312-win_amd64.whl", hash = "sha256:e3531d63d3bdfa7e3ac5e9b27b2dd7ec9df3206a98e0b3445fa906f233264c57", size = 455407, upload-time = "2026-01-03T17:30:44.195Z" }, - { url = "https://files.pythonhosted.org/packages/97/8a/12ca489246ca1faaf5432844adbfce7ff2cc4997733e0af120869345643a/aiohttp-3.13.3-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:5dff64413671b0d3e7d5918ea490bdccb97a4ad29b3f311ed423200b2203e01c", size = 734190, upload-time = "2026-01-03T17:30:45.832Z" }, - { url = "https://files.pythonhosted.org/packages/32/08/de43984c74ed1fca5c014808963cc83cb00d7bb06af228f132d33862ca76/aiohttp-3.13.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:87b9aab6d6ed88235aa2970294f496ff1a1f9adcd724d800e9b952395a80ffd9", size = 491783, upload-time = "2026-01-03T17:30:47.466Z" }, - { url = "https://files.pythonhosted.org/packages/17/f8/8dd2cf6112a5a76f81f81a5130c57ca829d101ad583ce57f889179accdda/aiohttp-3.13.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:425c126c0dc43861e22cb1c14ba4c8e45d09516d0a3ae0a3f7494b79f5f233a3", size = 490704, upload-time = "2026-01-03T17:30:49.373Z" }, - { url = "https://files.pythonhosted.org/packages/6d/40/a46b03ca03936f832bc7eaa47cfbb1ad012ba1be4790122ee4f4f8cba074/aiohttp-3.13.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7f9120f7093c2a32d9647abcaf21e6ad275b4fbec5b55969f978b1a97c7c86bf", size = 1720652, upload-time = "2026-01-03T17:30:50.974Z" }, - { url = "https://files.pythonhosted.org/packages/f7/7e/917fe18e3607af92657e4285498f500dca797ff8c918bd7d90b05abf6c2a/aiohttp-3.13.3-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:697753042d57f4bf7122cab985bf15d0cef23c770864580f5af4f52023a56bd6", size = 1692014, upload-time = "2026-01-03T17:30:52.729Z" }, - { url = "https://files.pythonhosted.org/packages/71/b6/cefa4cbc00d315d68973b671cf105b21a609c12b82d52e5d0c9ae61d2a09/aiohttp-3.13.3-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:6de499a1a44e7de70735d0b39f67c8f25eb3d91eb3103be99ca0fa882cdd987d", size = 1759777, upload-time = "2026-01-03T17:30:54.537Z" }, - { url = "https://files.pythonhosted.org/packages/fb/e3/e06ee07b45e59e6d81498b591fc589629be1553abb2a82ce33efe2a7b068/aiohttp-3.13.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:37239e9f9a7ea9ac5bf6b92b0260b01f8a22281996da609206a84df860bc1261", size = 1861276, upload-time = "2026-01-03T17:30:56.512Z" }, - { url = "https://files.pythonhosted.org/packages/7c/24/75d274228acf35ceeb2850b8ce04de9dd7355ff7a0b49d607ee60c29c518/aiohttp-3.13.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f76c1e3fe7d7c8afad7ed193f89a292e1999608170dcc9751a7462a87dfd5bc0", size = 1743131, upload-time = "2026-01-03T17:30:58.256Z" }, - { url = "https://files.pythonhosted.org/packages/04/98/3d21dde21889b17ca2eea54fdcff21b27b93f45b7bb94ca029c31ab59dc3/aiohttp-3.13.3-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:fc290605db2a917f6e81b0e1e0796469871f5af381ce15c604a3c5c7e51cb730", size = 1556863, upload-time = "2026-01-03T17:31:00.445Z" }, - { url = "https://files.pythonhosted.org/packages/9e/84/da0c3ab1192eaf64782b03971ab4055b475d0db07b17eff925e8c93b3aa5/aiohttp-3.13.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4021b51936308aeea0367b8f006dc999ca02bc118a0cc78c303f50a2ff6afb91", size = 1682793, upload-time = "2026-01-03T17:31:03.024Z" }, - { url = "https://files.pythonhosted.org/packages/ff/0f/5802ada182f575afa02cbd0ec5180d7e13a402afb7c2c03a9aa5e5d49060/aiohttp-3.13.3-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:49a03727c1bba9a97d3e93c9f93ca03a57300f484b6e935463099841261195d3", size = 1716676, upload-time = "2026-01-03T17:31:04.842Z" }, - { url = "https://files.pythonhosted.org/packages/3f/8c/714d53bd8b5a4560667f7bbbb06b20c2382f9c7847d198370ec6526af39c/aiohttp-3.13.3-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:3d9908a48eb7416dc1f4524e69f1d32e5d90e3981e4e37eb0aa1cd18f9cfa2a4", size = 1733217, upload-time = "2026-01-03T17:31:06.868Z" }, - { url = "https://files.pythonhosted.org/packages/7d/79/e2176f46d2e963facea939f5be2d26368ce543622be6f00a12844d3c991f/aiohttp-3.13.3-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:2712039939ec963c237286113c68dbad80a82a4281543f3abf766d9d73228998", size = 1552303, upload-time = "2026-01-03T17:31:08.958Z" }, - { url = "https://files.pythonhosted.org/packages/ab/6a/28ed4dea1759916090587d1fe57087b03e6c784a642b85ef48217b0277ae/aiohttp-3.13.3-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:7bfdc049127717581866fa4708791220970ce291c23e28ccf3922c700740fdc0", size = 1763673, upload-time = "2026-01-03T17:31:10.676Z" }, - { url = "https://files.pythonhosted.org/packages/e8/35/4a3daeb8b9fab49240d21c04d50732313295e4bd813a465d840236dd0ce1/aiohttp-3.13.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8057c98e0c8472d8846b9c79f56766bcc57e3e8ac7bfd510482332366c56c591", size = 1721120, upload-time = "2026-01-03T17:31:12.575Z" }, - { url = "https://files.pythonhosted.org/packages/bc/9f/d643bb3c5fb99547323e635e251c609fbbc660d983144cfebec529e09264/aiohttp-3.13.3-cp313-cp313-win32.whl", hash = "sha256:1449ceddcdbcf2e0446957863af03ebaaa03f94c090f945411b61269e2cb5daf", size = 427383, upload-time = "2026-01-03T17:31:14.382Z" }, - { url = "https://files.pythonhosted.org/packages/4e/f1/ab0395f8a79933577cdd996dd2f9aa6014af9535f65dddcf88204682fe62/aiohttp-3.13.3-cp313-cp313-win_amd64.whl", hash = "sha256:693781c45a4033d31d4187d2436f5ac701e7bbfe5df40d917736108c1cc7436e", size = 453899, upload-time = "2026-01-03T17:31:15.958Z" }, ] [[package]] @@ -160,7 +140,7 @@ version = "1.4.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "frozenlist" }, - { name = "typing-extensions", marker = "python_full_version < '3.13'" }, + { name = "typing-extensions" }, ] sdist = { url = "https://files.pythonhosted.org/packages/61/62/06741b579156360248d1ec624842ad0edf697050bbaf7c3e46394e106ad1/aiosignal-1.4.0.tar.gz", hash = "sha256:f47eecd9468083c2029cc99945502cb7708b082c232f9aca65da147157b251c7", size = 25007, upload-time = "2025-07-03T22:54:43.528Z" } wheels = [ @@ -200,7 +180,7 @@ version = "4.12.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "idna" }, - { name = "typing-extensions", marker = "python_full_version < '3.13'" }, + { name = "typing-extensions" }, ] sdist = { url = "https://files.pythonhosted.org/packages/96/f0/5eb65b2bb0d09ac6776f2eb54adee6abe8228ea05b20a5ad0e4945de8aac/anyio-4.12.1.tar.gz", hash = "sha256:41cfcc3a4c85d3f05c932da7c26d0201ac36f72abd4435ba90d0464a3ffed703", size = 228685, upload-time = "2026-01-06T11:45:21.246Z" } wheels = [ @@ -307,34 +287,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/3a/2a/7cc015f5b9f5db42b7d48157e23356022889fc354a2813c15934b7cb5c0e/attrs-25.4.0-py3-none-any.whl", hash = "sha256:adcf7e2a1fb3b36ac48d97835bb6d8ade15b8dcce26aba8bf1d14847b57a3373", size = 67615, upload-time = "2025-10-06T13:54:43.17Z" }, ] -[[package]] -name = "audioop-lts" -version = "0.2.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/38/53/946db57842a50b2da2e0c1e34bd37f36f5aadba1a929a3971c5d7841dbca/audioop_lts-0.2.2.tar.gz", hash = "sha256:64d0c62d88e67b98a1a5e71987b7aa7b5bcffc7dcee65b635823dbdd0a8dbbd0", size = 30686, upload-time = "2025-08-05T16:43:17.409Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/b8/3b/e8964210b5e216e5041593b7d33e97ee65967f17c282e8510d19c666dab4/audioop_lts-0.2.2-cp313-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:51c916108c56aa6e426ce611946f901badac950ee2ddaf302b7ed35d9958970d", size = 85844, upload-time = "2025-08-05T16:42:25.208Z" }, - { url = "https://files.pythonhosted.org/packages/c7/2e/0a1c52faf10d51def20531a59ce4c706cb7952323b11709e10de324d6493/audioop_lts-0.2.2-cp313-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:47eba38322370347b1c47024defbd36374a211e8dd5b0dcbce7b34fdb6f8847b", size = 85056, upload-time = "2025-08-05T16:42:26.559Z" }, - { url = "https://files.pythonhosted.org/packages/75/e8/cd95eef479656cb75ab05dfece8c1f8c395d17a7c651d88f8e6e291a63ab/audioop_lts-0.2.2-cp313-abi3-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ba7c3a7e5f23e215cb271516197030c32aef2e754252c4c70a50aaff7031a2c8", size = 93892, upload-time = "2025-08-05T16:42:27.902Z" }, - { url = "https://files.pythonhosted.org/packages/5c/1e/a0c42570b74f83efa5cca34905b3eef03f7ab09fe5637015df538a7f3345/audioop_lts-0.2.2-cp313-abi3-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:def246fe9e180626731b26e89816e79aae2276f825420a07b4a647abaa84becc", size = 96660, upload-time = "2025-08-05T16:42:28.9Z" }, - { url = "https://files.pythonhosted.org/packages/50/d5/8a0ae607ca07dbb34027bac8db805498ee7bfecc05fd2c148cc1ed7646e7/audioop_lts-0.2.2-cp313-abi3-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e160bf9df356d841bb6c180eeeea1834085464626dc1b68fa4e1d59070affdc3", size = 79143, upload-time = "2025-08-05T16:42:29.929Z" }, - { url = "https://files.pythonhosted.org/packages/12/17/0d28c46179e7910bfb0bb62760ccb33edb5de973052cb2230b662c14ca2e/audioop_lts-0.2.2-cp313-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:4b4cd51a57b698b2d06cb9993b7ac8dfe89a3b2878e96bc7948e9f19ff51dba6", size = 84313, upload-time = "2025-08-05T16:42:30.949Z" }, - { url = "https://files.pythonhosted.org/packages/84/ba/bd5d3806641564f2024e97ca98ea8f8811d4e01d9b9f9831474bc9e14f9e/audioop_lts-0.2.2-cp313-abi3-musllinux_1_2_ppc64le.whl", hash = "sha256:4a53aa7c16a60a6857e6b0b165261436396ef7293f8b5c9c828a3a203147ed4a", size = 93044, upload-time = "2025-08-05T16:42:31.959Z" }, - { url = "https://files.pythonhosted.org/packages/f9/5e/435ce8d5642f1f7679540d1e73c1c42d933331c0976eb397d1717d7f01a3/audioop_lts-0.2.2-cp313-abi3-musllinux_1_2_riscv64.whl", hash = "sha256:3fc38008969796f0f689f1453722a0f463da1b8a6fbee11987830bfbb664f623", size = 78766, upload-time = "2025-08-05T16:42:33.302Z" }, - { url = "https://files.pythonhosted.org/packages/ae/3b/b909e76b606cbfd53875693ec8c156e93e15a1366a012f0b7e4fb52d3c34/audioop_lts-0.2.2-cp313-abi3-musllinux_1_2_s390x.whl", hash = "sha256:15ab25dd3e620790f40e9ead897f91e79c0d3ce65fe193c8ed6c26cffdd24be7", size = 87640, upload-time = "2025-08-05T16:42:34.854Z" }, - { url = "https://files.pythonhosted.org/packages/30/e7/8f1603b4572d79b775f2140d7952f200f5e6c62904585d08a01f0a70393a/audioop_lts-0.2.2-cp313-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:03f061a1915538fd96272bac9551841859dbb2e3bf73ebe4a23ef043766f5449", size = 86052, upload-time = "2025-08-05T16:42:35.839Z" }, - { url = "https://files.pythonhosted.org/packages/84/52/0022f93d56d85eec5da6b9da6a958a1ef09e80c39f2cc0a590c6af81dcbb/audioop_lts-0.2.2-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:143fad0311e8209ece30a8dbddab3b65ab419cbe8c0dde6e8828da25999be911", size = 92407, upload-time = "2025-08-05T16:42:44.336Z" }, - { url = "https://files.pythonhosted.org/packages/87/1d/48a889855e67be8718adbc7a01f3c01d5743c325453a5e81cf3717664aad/audioop_lts-0.2.2-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:dfbbc74ec68a0fd08cfec1f4b5e8cca3d3cd7de5501b01c4b5d209995033cde9", size = 91811, upload-time = "2025-08-05T16:42:45.325Z" }, - { url = "https://files.pythonhosted.org/packages/98/a6/94b7213190e8077547ffae75e13ed05edc488653c85aa5c41472c297d295/audioop_lts-0.2.2-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:cfcac6aa6f42397471e4943e0feb2244549db5c5d01efcd02725b96af417f3fe", size = 100470, upload-time = "2025-08-05T16:42:46.468Z" }, - { url = "https://files.pythonhosted.org/packages/e9/e9/78450d7cb921ede0cfc33426d3a8023a3bda755883c95c868ee36db8d48d/audioop_lts-0.2.2-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:752d76472d9804ac60f0078c79cdae8b956f293177acd2316cd1e15149aee132", size = 103878, upload-time = "2025-08-05T16:42:47.576Z" }, - { url = "https://files.pythonhosted.org/packages/4f/e2/cd5439aad4f3e34ae1ee852025dc6aa8f67a82b97641e390bf7bd9891d3e/audioop_lts-0.2.2-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:83c381767e2cc10e93e40281a04852facc4cd9334550e0f392f72d1c0a9c5753", size = 84867, upload-time = "2025-08-05T16:42:49.003Z" }, - { url = "https://files.pythonhosted.org/packages/68/4b/9d853e9076c43ebba0d411e8d2aa19061083349ac695a7d082540bad64d0/audioop_lts-0.2.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:c0022283e9556e0f3643b7c3c03f05063ca72b3063291834cca43234f20c60bb", size = 90001, upload-time = "2025-08-05T16:42:50.038Z" }, - { url = "https://files.pythonhosted.org/packages/58/26/4bae7f9d2f116ed5593989d0e521d679b0d583973d203384679323d8fa85/audioop_lts-0.2.2-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:a2d4f1513d63c795e82948e1305f31a6d530626e5f9f2605408b300ae6095093", size = 99046, upload-time = "2025-08-05T16:42:51.111Z" }, - { url = "https://files.pythonhosted.org/packages/b2/67/a9f4fb3e250dda9e9046f8866e9fa7d52664f8985e445c6b4ad6dfb55641/audioop_lts-0.2.2-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:c9c8e68d8b4a56fda8c025e538e639f8c5953f5073886b596c93ec9b620055e7", size = 84788, upload-time = "2025-08-05T16:42:52.198Z" }, - { url = "https://files.pythonhosted.org/packages/70/f7/3de86562db0121956148bcb0fe5b506615e3bcf6e63c4357a612b910765a/audioop_lts-0.2.2-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:96f19de485a2925314f5020e85911fb447ff5fbef56e8c7c6927851b95533a1c", size = 94472, upload-time = "2025-08-05T16:42:53.59Z" }, - { url = "https://files.pythonhosted.org/packages/f1/32/fd772bf9078ae1001207d2df1eef3da05bea611a87dd0e8217989b2848fa/audioop_lts-0.2.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:e541c3ef484852ef36545f66209444c48b28661e864ccadb29daddb6a4b8e5f5", size = 92279, upload-time = "2025-08-05T16:42:54.632Z" }, -] - [[package]] name = "authlib" version = "1.6.9" @@ -553,22 +505,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/5b/94/eafaa5cdddadc0c9c603a6a6d8339433475e1a9f60c8bb9c2eed2d8736b6/blake3-1.0.8-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:504d1399b7fb91dfe5c25722d2807990493185faa1917456455480c36867adb5", size = 388001, upload-time = "2025-10-14T06:45:57.067Z" }, { url = "https://files.pythonhosted.org/packages/17/81/735fa00d13de7f68b25e1b9cb36ff08c6f165e688d85d8ec2cbfcdedccc5/blake3-1.0.8-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:c84af132aa09abeadf9a0118c8fb26f4528f3f42c10ef8be0fcf31c478774ec4", size = 550302, upload-time = "2025-10-14T06:45:58.657Z" }, { url = "https://files.pythonhosted.org/packages/0e/c6/d1fe8bdea4a6088bd54b5a58bc40aed89a4e784cd796af7722a06f74bae7/blake3-1.0.8-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a25db3d36b55f5ed6a86470155cc749fc9c5b91c949b8d14f48658f9d960d9ec", size = 554211, upload-time = "2025-10-14T06:46:00.269Z" }, - { url = "https://files.pythonhosted.org/packages/77/57/e8a85fa261894bf7ce7af928ff3408aab60287ab8d58b55d13a3f700b619/blake3-1.0.8-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:19fc6f2b7edab8acff6895fc6e38c19bd79f4c089e21153020c75dfc7397d52d", size = 370994, upload-time = "2025-10-14T06:46:07.398Z" }, - { url = "https://files.pythonhosted.org/packages/62/cd/765b76bb48b8b294fea94c9008b0d82b4cfa0fa2f3c6008d840d01a597e4/blake3-1.0.8-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4f54cff7f15d91dc78a63a2dd02a3dccdc932946f271e2adb4130e0b4cf608ba", size = 374372, upload-time = "2025-10-14T06:46:08.698Z" }, - { url = "https://files.pythonhosted.org/packages/36/7a/32084eadbb28592bb07298f0de316d2da586c62f31500a6b1339a7e7b29b/blake3-1.0.8-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e7e12a777f6b798eb8d06f875d6e108e3008bd658d274d8c676dcf98e0f10537", size = 447627, upload-time = "2025-10-14T06:46:10.002Z" }, - { url = "https://files.pythonhosted.org/packages/a7/f4/3788a1d86e17425eea147e28d7195d7053565fc279236a9fd278c2ec495e/blake3-1.0.8-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ddfc59b0176fb31168f08d5dd536e69b1f4f13b5a0f4b0c3be1003efd47f9308", size = 507536, upload-time = "2025-10-14T06:46:11.614Z" }, - { url = "https://files.pythonhosted.org/packages/fe/01/4639cba48513b94192681b4da472cdec843d3001c5344d7051ee5eaef606/blake3-1.0.8-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a2336d5b2a801a7256da21150348f41610a6c21dae885a3acb1ebbd7333d88d8", size = 394105, upload-time = "2025-10-14T06:46:12.808Z" }, - { url = "https://files.pythonhosted.org/packages/21/ae/6e55c19c8460fada86cd1306a390a09b0c5a2e2e424f9317d2edacea439f/blake3-1.0.8-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4072196547484c95a5a09adbb952e9bb501949f03f9e2a85e7249ef85faaba8", size = 386928, upload-time = "2025-10-14T06:46:16.284Z" }, - { url = "https://files.pythonhosted.org/packages/ee/6c/05b7a5a907df1be53a8f19e7828986fc6b608a44119641ef9c0804fbef15/blake3-1.0.8-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:0eab3318ec02f8e16fe549244791ace2ada2c259332f0c77ab22cf94dfff7130", size = 550003, upload-time = "2025-10-14T06:46:17.791Z" }, - { url = "https://files.pythonhosted.org/packages/b4/03/f0ea4adfedc1717623be6460b3710fcb725ca38082c14274369803f727e1/blake3-1.0.8-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:a33b9a1fb6d1d559a8e0d04b041e99419a6bb771311c774f6ff57ed7119c70ed", size = 553857, upload-time = "2025-10-14T06:46:19.088Z" }, - { url = "https://files.pythonhosted.org/packages/13/da/722cebca11238f3b24d3cefd2361c9c9ea47cfa0ad9288eeb4d1e0b7cf93/blake3-1.0.8-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ef153c5860d5bf1cc71aece69b28097d2a392913eb323d6b52555c875d0439fc", size = 370441, upload-time = "2025-10-14T06:46:26.29Z" }, - { url = "https://files.pythonhosted.org/packages/2e/d5/2f7440c8e41c0af995bad3a159e042af0f4ed1994710af5b4766ca918f65/blake3-1.0.8-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e8ae3689f0c7bfa6ce6ae45cab110e4c3442125c4c23b28f1f097856de26e4d1", size = 374312, upload-time = "2025-10-14T06:46:27.451Z" }, - { url = "https://files.pythonhosted.org/packages/a6/6c/fb6a7812e60ce3e110bcbbb11f167caf3e975c589572c41e1271f35f2c41/blake3-1.0.8-cp313-cp313t-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3fb83532f7456ddeb68dae1b36e1f7c52f9cb72852ac01159bbcb1a12b0f8be0", size = 447007, upload-time = "2025-10-14T06:46:29.056Z" }, - { url = "https://files.pythonhosted.org/packages/13/3b/c99b43fae5047276ea9d944077c190fc1e5f22f57528b9794e21f7adedc6/blake3-1.0.8-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6ae7754c7d96e92a70a52e07c732d594cf9924d780f49fffd3a1e9235e0f5ba7", size = 507323, upload-time = "2025-10-14T06:46:30.661Z" }, - { url = "https://files.pythonhosted.org/packages/fc/bb/ba90eddd592f8c074a0694cb0a744b6bd76bfe67a14c2b490c8bdfca3119/blake3-1.0.8-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4bacaae75e98dee3b7da6c5ee3b81ee21a3352dd2477d6f1d1dbfd38cdbf158a", size = 393449, upload-time = "2025-10-14T06:46:31.805Z" }, - { url = "https://files.pythonhosted.org/packages/25/ed/58a2acd0b9e14459cdaef4344db414d4a36e329b9720921b442a454dd443/blake3-1.0.8-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9456c829601d72852d8ba0af8dae0610f7def1d59f5942efde1e2ef93e8a8b57", size = 386844, upload-time = "2025-10-14T06:46:33.195Z" }, - { url = "https://files.pythonhosted.org/packages/4a/04/fed09845b18d90862100c8e48308261e2f663aab25d3c71a6a0bdda6618b/blake3-1.0.8-cp313-cp313t-musllinux_1_1_aarch64.whl", hash = "sha256:497ef8096ec4ac1ffba9a66152cee3992337cebf8ea434331d8fd9ce5423d227", size = 549550, upload-time = "2025-10-14T06:46:35.23Z" }, - { url = "https://files.pythonhosted.org/packages/d6/65/1859fddfabc1cc72548c2269d988819aad96d854e25eae00531517925901/blake3-1.0.8-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:511133bab85ff60ed143424ce484d08c60894ff7323f685d7a6095f43f0c85c3", size = 553805, upload-time = "2025-10-14T06:46:36.532Z" }, ] [[package]] @@ -614,12 +550,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/21/1b/0374a89ee27d152a5069c356c96b93afd1b94eae83f1e004b57eb6ce2f10/brotli-1.2.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:adedc4a67e15327dfdd04884873c6d5a01d3e3b6f61406f99b1ed4865a2f6d28", size = 1484494, upload-time = "2025-11-05T18:38:29.29Z" }, { url = "https://files.pythonhosted.org/packages/cf/57/69d4fe84a67aef4f524dcd075c6eee868d7850e85bf01d778a857d8dbe0a/brotli-1.2.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:7a47ce5c2288702e09dc22a44d0ee6152f2c7eda97b3c8482d826a1f3cfc7da7", size = 1593302, upload-time = "2025-11-05T18:38:30.639Z" }, { url = "https://files.pythonhosted.org/packages/d5/3b/39e13ce78a8e9a621c5df3aeb5fd181fcc8caba8c48a194cd629771f6828/brotli-1.2.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:af43b8711a8264bb4e7d6d9a6d004c3a2019c04c01127a868709ec29962b6036", size = 1487913, upload-time = "2025-11-05T18:38:31.618Z" }, - { url = "https://files.pythonhosted.org/packages/2e/b6/fe84227c56a865d16a6614e2c4722864b380cb14b13f3e6bef441e73a85a/brotli-1.2.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c8565e3cdc1808b1a34714b553b262c5de5fbda202285782173ec137fd13709f", size = 1528076, upload-time = "2025-11-05T18:38:36.639Z" }, - { url = "https://files.pythonhosted.org/packages/55/de/de4ae0aaca06c790371cf6e7ee93a024f6b4bb0568727da8c3de112e726c/brotli-1.2.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:26e8d3ecb0ee458a9804f47f21b74845cc823fd1bb19f02272be70774f56e2a6", size = 1626880, upload-time = "2025-11-05T18:38:37.623Z" }, - { url = "https://files.pythonhosted.org/packages/5f/16/a1b22cbea436642e071adcaf8d4b350a2ad02f5e0ad0da879a1be16188a0/brotli-1.2.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:67a91c5187e1eec76a61625c77a6c8c785650f5b576ca732bd33ef58b0dff49c", size = 1419737, upload-time = "2025-11-05T18:38:38.729Z" }, - { url = "https://files.pythonhosted.org/packages/46/63/c968a97cbb3bdbf7f974ef5a6ab467a2879b82afbc5ffb65b8acbb744f95/brotli-1.2.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4ecdb3b6dc36e6d6e14d3a1bdc6c1057c8cbf80db04031d566eb6080ce283a48", size = 1484440, upload-time = "2025-11-05T18:38:39.916Z" }, - { url = "https://files.pythonhosted.org/packages/06/9d/102c67ea5c9fc171f423e8399e585dabea29b5bc79b05572891e70013cdd/brotli-1.2.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:3e1b35d56856f3ed326b140d3c6d9db91740f22e14b06e840fe4bb1923439a18", size = 1593313, upload-time = "2025-11-05T18:38:41.24Z" }, - { url = "https://files.pythonhosted.org/packages/9e/4a/9526d14fa6b87bc827ba1755a8440e214ff90de03095cacd78a64abe2b7d/brotli-1.2.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:54a50a9dad16b32136b2241ddea9e4df159b41247b2ce6aac0b3276a66a8f1e5", size = 1487945, upload-time = "2025-11-05T18:38:42.277Z" }, ] [[package]] @@ -641,10 +571,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/db/9d/7ede2cc42f9bb4260492e7d29d2aab781eacbbcfb09d983de1e695077199/cbor2-5.9.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4cd43d8fc374b31643b2830910f28177a606a7bc84975a62675dd3f2e320fc7b", size = 288246, upload-time = "2026-03-22T15:56:16.113Z" }, { url = "https://files.pythonhosted.org/packages/ce/9d/588ebc7c5bc5843f609b05fe07be8575c7dec987735b0bbc908ac9c1264a/cbor2-5.9.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:4aa07b392cc3d76fb31c08a46a226b58c320d1c172ff3073e864409ced7bc50f", size = 280214, upload-time = "2026-03-22T15:56:17.519Z" }, { url = "https://files.pythonhosted.org/packages/f7/a1/6fc8f4b15c6a27e7fbb7966c30c2b4b18c274a3221fa2f5e6235502d34bc/cbor2-5.9.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:971d425b3a23b75953d8853d5f9911bdeefa09d759ee3b5e6b07b5ff3cbd9073", size = 282162, upload-time = "2026-03-22T15:56:18.975Z" }, - { url = "https://files.pythonhosted.org/packages/1b/10/df643a381aebc3f05486de4813662bc58accb640fc3275cb276a75e89694/cbor2-5.9.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ac684fe195c39821fca70d18afbf748f728aefbfbf88456018d299e559b8cae0", size = 287682, upload-time = "2026-03-22T15:56:24.024Z" }, - { url = "https://files.pythonhosted.org/packages/c6/0c/8aa6b766059ae4a0ca1ec3ff96fe3823a69a7be880dba2e249f7fbe2700b/cbor2-5.9.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2a54fbb32cb828c214f7f333a707e4aec61182e7efdc06ea5d9596d3ecee624a", size = 288009, upload-time = "2026-03-22T15:56:25.305Z" }, - { url = "https://files.pythonhosted.org/packages/74/07/6236bc25c183a9cf7e8062e5dddf9eae9b0b14ebf14a58a69fe5a1e872c6/cbor2-5.9.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4753a6d1bc71054d9179557bc65740860f185095ccb401d46637fff028a5b3ec", size = 280437, upload-time = "2026-03-22T15:56:26.479Z" }, - { url = "https://files.pythonhosted.org/packages/4e/0a/84328d23c3c68874ac6497edb9b1900579a1028efa54734df3f1762bbc15/cbor2-5.9.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:380e534482b843e43442b87d8777a7bf9bed20cb7526f89b780c3400f617304b", size = 282247, upload-time = "2026-03-22T15:56:28.644Z" }, { url = "https://files.pythonhosted.org/packages/42/ff/b83492b096fbef26e9cb62c1a4bf2d3cef579ea7b33138c6c37c4ae66f67/cbor2-5.9.0-py3-none-any.whl", hash = "sha256:27695cbd70c90b8de5c4a284642c2836449b14e2c2e07e3ffe0744cb7669a01b", size = 24627, upload-time = "2026-03-22T15:56:48.847Z" }, ] @@ -678,18 +604,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/7b/2b/2b6435f76bfeb6bbf055596976da087377ede68df465419d192acf00c437/cffi-2.0.0-cp312-cp312-win32.whl", hash = "sha256:da902562c3e9c550df360bfa53c035b2f241fed6d9aef119048073680ace4a18", size = 172932, upload-time = "2025-09-08T23:22:57.188Z" }, { url = "https://files.pythonhosted.org/packages/f8/ed/13bd4418627013bec4ed6e54283b1959cf6db888048c7cf4b4c3b5b36002/cffi-2.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:da68248800ad6320861f129cd9c1bf96ca849a2771a59e0344e88681905916f5", size = 183557, upload-time = "2025-09-08T23:22:58.351Z" }, { url = "https://files.pythonhosted.org/packages/95/31/9f7f93ad2f8eff1dbc1c3656d7ca5bfd8fb52c9d786b4dcf19b2d02217fa/cffi-2.0.0-cp312-cp312-win_arm64.whl", hash = "sha256:4671d9dd5ec934cb9a73e7ee9676f9362aba54f7f34910956b84d727b0d73fb6", size = 177762, upload-time = "2025-09-08T23:22:59.668Z" }, - { url = "https://files.pythonhosted.org/packages/4b/8d/a0a47a0c9e413a658623d014e91e74a50cdd2c423f7ccfd44086ef767f90/cffi-2.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:00bdf7acc5f795150faa6957054fbbca2439db2f775ce831222b66f192f03beb", size = 185230, upload-time = "2025-09-08T23:23:00.879Z" }, - { url = "https://files.pythonhosted.org/packages/4a/d2/a6c0296814556c68ee32009d9c2ad4f85f2707cdecfd7727951ec228005d/cffi-2.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:45d5e886156860dc35862657e1494b9bae8dfa63bf56796f2fb56e1679fc0bca", size = 181043, upload-time = "2025-09-08T23:23:02.231Z" }, - { url = "https://files.pythonhosted.org/packages/b0/1e/d22cc63332bd59b06481ceaac49d6c507598642e2230f201649058a7e704/cffi-2.0.0-cp313-cp313-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:07b271772c100085dd28b74fa0cd81c8fb1a3ba18b21e03d7c27f3436a10606b", size = 212446, upload-time = "2025-09-08T23:23:03.472Z" }, - { url = "https://files.pythonhosted.org/packages/a9/f5/a2c23eb03b61a0b8747f211eb716446c826ad66818ddc7810cc2cc19b3f2/cffi-2.0.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d48a880098c96020b02d5a1f7d9251308510ce8858940e6fa99ece33f610838b", size = 220101, upload-time = "2025-09-08T23:23:04.792Z" }, - { url = "https://files.pythonhosted.org/packages/f2/7f/e6647792fc5850d634695bc0e6ab4111ae88e89981d35ac269956605feba/cffi-2.0.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:f93fd8e5c8c0a4aa1f424d6173f14a892044054871c771f8566e4008eaa359d2", size = 207948, upload-time = "2025-09-08T23:23:06.127Z" }, - { url = "https://files.pythonhosted.org/packages/cb/1e/a5a1bd6f1fb30f22573f76533de12a00bf274abcdc55c8edab639078abb6/cffi-2.0.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:dd4f05f54a52fb558f1ba9f528228066954fee3ebe629fc1660d874d040ae5a3", size = 206422, upload-time = "2025-09-08T23:23:07.753Z" }, - { url = "https://files.pythonhosted.org/packages/98/df/0a1755e750013a2081e863e7cd37e0cdd02664372c754e5560099eb7aa44/cffi-2.0.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c8d3b5532fc71b7a77c09192b4a5a200ea992702734a2e9279a37f2478236f26", size = 219499, upload-time = "2025-09-08T23:23:09.648Z" }, - { url = "https://files.pythonhosted.org/packages/50/e1/a969e687fcf9ea58e6e2a928ad5e2dd88cc12f6f0ab477e9971f2309b57c/cffi-2.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d9b29c1f0ae438d5ee9acb31cadee00a58c46cc9c0b2f9038c6b0b3470877a8c", size = 222928, upload-time = "2025-09-08T23:23:10.928Z" }, - { url = "https://files.pythonhosted.org/packages/36/54/0362578dd2c9e557a28ac77698ed67323ed5b9775ca9d3fe73fe191bb5d8/cffi-2.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6d50360be4546678fc1b79ffe7a66265e28667840010348dd69a314145807a1b", size = 221302, upload-time = "2025-09-08T23:23:12.42Z" }, - { url = "https://files.pythonhosted.org/packages/eb/6d/bf9bda840d5f1dfdbf0feca87fbdb64a918a69bca42cfa0ba7b137c48cb8/cffi-2.0.0-cp313-cp313-win32.whl", hash = "sha256:74a03b9698e198d47562765773b4a8309919089150a0bb17d829ad7b44b60d27", size = 172909, upload-time = "2025-09-08T23:23:14.32Z" }, - { url = "https://files.pythonhosted.org/packages/37/18/6519e1ee6f5a1e579e04b9ddb6f1676c17368a7aba48299c3759bbc3c8b3/cffi-2.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:19f705ada2530c1167abacb171925dd886168931e0a7b78f5bffcae5c6b5be75", size = 183402, upload-time = "2025-09-08T23:23:15.535Z" }, - { url = "https://files.pythonhosted.org/packages/cb/0e/02ceeec9a7d6ee63bb596121c2c8e9b3a9e150936f4fbef6ca1943e6137c/cffi-2.0.0-cp313-cp313-win_arm64.whl", hash = "sha256:256f80b80ca3853f90c21b23ee78cd008713787b1b1e93eae9f3d6a7134abd91", size = 177780, upload-time = "2025-09-08T23:23:16.761Z" }, ] [[package]] @@ -732,22 +646,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/a8/ef/89297262b8092b312d29cdb2517cb1237e51db8ecef2e9af5edbe7b683b1/charset_normalizer-3.4.4-cp312-cp312-win32.whl", hash = "sha256:5833d2c39d8896e4e19b689ffc198f08ea58116bee26dea51e362ecc7cd3ed26", size = 99694, upload-time = "2025-10-14T04:41:09.23Z" }, { url = "https://files.pythonhosted.org/packages/3d/2d/1e5ed9dd3b3803994c155cd9aacb60c82c331bad84daf75bcb9c91b3295e/charset_normalizer-3.4.4-cp312-cp312-win_amd64.whl", hash = "sha256:a79cfe37875f822425b89a82333404539ae63dbdddf97f84dcbc3d339aae9525", size = 107131, upload-time = "2025-10-14T04:41:10.467Z" }, { url = "https://files.pythonhosted.org/packages/d0/d9/0ed4c7098a861482a7b6a95603edce4c0d9db2311af23da1fb2b75ec26fc/charset_normalizer-3.4.4-cp312-cp312-win_arm64.whl", hash = "sha256:376bec83a63b8021bb5c8ea75e21c4ccb86e7e45ca4eb81146091b56599b80c3", size = 100390, upload-time = "2025-10-14T04:41:11.915Z" }, - { url = "https://files.pythonhosted.org/packages/97/45/4b3a1239bbacd321068ea6e7ac28875b03ab8bc0aa0966452db17cd36714/charset_normalizer-3.4.4-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:e1f185f86a6f3403aa2420e815904c67b2f9ebc443f045edd0de921108345794", size = 208091, upload-time = "2025-10-14T04:41:13.346Z" }, - { url = "https://files.pythonhosted.org/packages/7d/62/73a6d7450829655a35bb88a88fca7d736f9882a27eacdca2c6d505b57e2e/charset_normalizer-3.4.4-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6b39f987ae8ccdf0d2642338faf2abb1862340facc796048b604ef14919e55ed", size = 147936, upload-time = "2025-10-14T04:41:14.461Z" }, - { url = "https://files.pythonhosted.org/packages/89/c5/adb8c8b3d6625bef6d88b251bbb0d95f8205831b987631ab0c8bb5d937c2/charset_normalizer-3.4.4-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:3162d5d8ce1bb98dd51af660f2121c55d0fa541b46dff7bb9b9f86ea1d87de72", size = 144180, upload-time = "2025-10-14T04:41:15.588Z" }, - { url = "https://files.pythonhosted.org/packages/91/ed/9706e4070682d1cc219050b6048bfd293ccf67b3d4f5a4f39207453d4b99/charset_normalizer-3.4.4-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:81d5eb2a312700f4ecaa977a8235b634ce853200e828fbadf3a9c50bab278328", size = 161346, upload-time = "2025-10-14T04:41:16.738Z" }, - { url = "https://files.pythonhosted.org/packages/d5/0d/031f0d95e4972901a2f6f09ef055751805ff541511dc1252ba3ca1f80cf5/charset_normalizer-3.4.4-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5bd2293095d766545ec1a8f612559f6b40abc0eb18bb2f5d1171872d34036ede", size = 158874, upload-time = "2025-10-14T04:41:17.923Z" }, - { url = "https://files.pythonhosted.org/packages/f5/83/6ab5883f57c9c801ce5e5677242328aa45592be8a00644310a008d04f922/charset_normalizer-3.4.4-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a8a8b89589086a25749f471e6a900d3f662d1d3b6e2e59dcecf787b1cc3a1894", size = 153076, upload-time = "2025-10-14T04:41:19.106Z" }, - { url = "https://files.pythonhosted.org/packages/75/1e/5ff781ddf5260e387d6419959ee89ef13878229732732ee73cdae01800f2/charset_normalizer-3.4.4-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:bc7637e2f80d8530ee4a78e878bce464f70087ce73cf7c1caf142416923b98f1", size = 150601, upload-time = "2025-10-14T04:41:20.245Z" }, - { url = "https://files.pythonhosted.org/packages/d7/57/71be810965493d3510a6ca79b90c19e48696fb1ff964da319334b12677f0/charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f8bf04158c6b607d747e93949aa60618b61312fe647a6369f88ce2ff16043490", size = 150376, upload-time = "2025-10-14T04:41:21.398Z" }, - { url = "https://files.pythonhosted.org/packages/e5/d5/c3d057a78c181d007014feb7e9f2e65905a6c4ef182c0ddf0de2924edd65/charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:554af85e960429cf30784dd47447d5125aaa3b99a6f0683589dbd27e2f45da44", size = 144825, upload-time = "2025-10-14T04:41:22.583Z" }, - { url = "https://files.pythonhosted.org/packages/e6/8c/d0406294828d4976f275ffbe66f00266c4b3136b7506941d87c00cab5272/charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:74018750915ee7ad843a774364e13a3db91682f26142baddf775342c3f5b1133", size = 162583, upload-time = "2025-10-14T04:41:23.754Z" }, - { url = "https://files.pythonhosted.org/packages/d7/24/e2aa1f18c8f15c4c0e932d9287b8609dd30ad56dbe41d926bd846e22fb8d/charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:c0463276121fdee9c49b98908b3a89c39be45d86d1dbaa22957e38f6321d4ce3", size = 150366, upload-time = "2025-10-14T04:41:25.27Z" }, - { url = "https://files.pythonhosted.org/packages/e4/5b/1e6160c7739aad1e2df054300cc618b06bf784a7a164b0f238360721ab86/charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:362d61fd13843997c1c446760ef36f240cf81d3ebf74ac62652aebaf7838561e", size = 160300, upload-time = "2025-10-14T04:41:26.725Z" }, - { url = "https://files.pythonhosted.org/packages/7a/10/f882167cd207fbdd743e55534d5d9620e095089d176d55cb22d5322f2afd/charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9a26f18905b8dd5d685d6d07b0cdf98a79f3c7a918906af7cc143ea2e164c8bc", size = 154465, upload-time = "2025-10-14T04:41:28.322Z" }, - { 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/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" }, ] @@ -842,8 +740,7 @@ version = "1.3.3" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, - { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.13' and sys_platform == 'emscripten') or (python_full_version < '3.13' and sys_platform == 'win32')" }, - { name = "numpy", version = "2.4.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.13' and sys_platform == 'emscripten') or (python_full_version >= '3.13' and sys_platform == 'win32')" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform == 'emscripten' or sys_platform == 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/58/01/1253e6698a07380cd31a736d248a3f2a50a7c88779a1813da27503cadc2a/contourpy-1.3.3.tar.gz", hash = "sha256:083e12155b210502d0bca491432bb04d56dc3432f95a979b429f2848c3dbe880", size = 13466174, upload-time = "2025-07-26T12:03:12.549Z" } wheels = [ @@ -858,28 +755,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/cf/8f/5847f44a7fddf859704217a99a23a4f6417b10e5ab1256a179264561540e/contourpy-1.3.3-cp312-cp312-win32.whl", hash = "sha256:023b44101dfe49d7d53932be418477dba359649246075c996866106da069af69", size = 185018, upload-time = "2025-07-26T12:01:35.64Z" }, { url = "https://files.pythonhosted.org/packages/19/e8/6026ed58a64563186a9ee3f29f41261fd1828f527dd93d33b60feca63352/contourpy-1.3.3-cp312-cp312-win_amd64.whl", hash = "sha256:8153b8bfc11e1e4d75bcb0bff1db232f9e10b274e0929de9d608027e0d34ff8b", size = 226567, upload-time = "2025-07-26T12:01:36.804Z" }, { url = "https://files.pythonhosted.org/packages/d1/e2/f05240d2c39a1ed228d8328a78b6f44cd695f7ef47beb3e684cf93604f86/contourpy-1.3.3-cp312-cp312-win_arm64.whl", hash = "sha256:07ce5ed73ecdc4a03ffe3e1b3e3c1166db35ae7584be76f65dbbe28a7791b0cc", size = 193655, upload-time = "2025-07-26T12:01:37.999Z" }, - { url = "https://files.pythonhosted.org/packages/68/35/0167aad910bbdb9599272bd96d01a9ec6852f36b9455cf2ca67bd4cc2d23/contourpy-1.3.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:177fb367556747a686509d6fef71d221a4b198a3905fe824430e5ea0fda54eb5", size = 293257, upload-time = "2025-07-26T12:01:39.367Z" }, - { url = "https://files.pythonhosted.org/packages/96/e4/7adcd9c8362745b2210728f209bfbcf7d91ba868a2c5f40d8b58f54c509b/contourpy-1.3.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:d002b6f00d73d69333dac9d0b8d5e84d9724ff9ef044fd63c5986e62b7c9e1b1", size = 274034, upload-time = "2025-07-26T12:01:40.645Z" }, - { url = "https://files.pythonhosted.org/packages/73/23/90e31ceeed1de63058a02cb04b12f2de4b40e3bef5e082a7c18d9c8ae281/contourpy-1.3.3-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:348ac1f5d4f1d66d3322420f01d42e43122f43616e0f194fc1c9f5d830c5b286", size = 334672, upload-time = "2025-07-26T12:01:41.942Z" }, - { url = "https://files.pythonhosted.org/packages/ed/93/b43d8acbe67392e659e1d984700e79eb67e2acb2bd7f62012b583a7f1b55/contourpy-1.3.3-cp313-cp313-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:655456777ff65c2c548b7c454af9c6f33f16c8884f11083244b5819cc214f1b5", size = 381234, upload-time = "2025-07-26T12:01:43.499Z" }, - { url = "https://files.pythonhosted.org/packages/46/3b/bec82a3ea06f66711520f75a40c8fc0b113b2a75edb36aa633eb11c4f50f/contourpy-1.3.3-cp313-cp313-manylinux_2_26_s390x.manylinux_2_28_s390x.whl", hash = "sha256:644a6853d15b2512d67881586bd03f462c7ab755db95f16f14d7e238f2852c67", size = 385169, upload-time = "2025-07-26T12:01:45.219Z" }, - { url = "https://files.pythonhosted.org/packages/4b/32/e0f13a1c5b0f8572d0ec6ae2f6c677b7991fafd95da523159c19eff0696a/contourpy-1.3.3-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4debd64f124ca62069f313a9cb86656ff087786016d76927ae2cf37846b006c9", size = 362859, upload-time = "2025-07-26T12:01:46.519Z" }, - { url = "https://files.pythonhosted.org/packages/33/71/e2a7945b7de4e58af42d708a219f3b2f4cff7386e6b6ab0a0fa0033c49a9/contourpy-1.3.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a15459b0f4615b00bbd1e91f1b9e19b7e63aea7483d03d804186f278c0af2659", size = 1332062, upload-time = "2025-07-26T12:01:48.964Z" }, - { url = "https://files.pythonhosted.org/packages/12/fc/4e87ac754220ccc0e807284f88e943d6d43b43843614f0a8afa469801db0/contourpy-1.3.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ca0fdcd73925568ca027e0b17ab07aad764be4706d0a925b89227e447d9737b7", size = 1403932, upload-time = "2025-07-26T12:01:51.979Z" }, - { url = "https://files.pythonhosted.org/packages/a6/2e/adc197a37443f934594112222ac1aa7dc9a98faf9c3842884df9a9d8751d/contourpy-1.3.3-cp313-cp313-win32.whl", hash = "sha256:b20c7c9a3bf701366556e1b1984ed2d0cedf999903c51311417cf5f591d8c78d", size = 185024, upload-time = "2025-07-26T12:01:53.245Z" }, - { url = "https://files.pythonhosted.org/packages/18/0b/0098c214843213759692cc638fce7de5c289200a830e5035d1791d7a2338/contourpy-1.3.3-cp313-cp313-win_amd64.whl", hash = "sha256:1cadd8b8969f060ba45ed7c1b714fe69185812ab43bd6b86a9123fe8f99c3263", size = 226578, upload-time = "2025-07-26T12:01:54.422Z" }, - { url = "https://files.pythonhosted.org/packages/8a/9a/2f6024a0c5995243cd63afdeb3651c984f0d2bc727fd98066d40e141ad73/contourpy-1.3.3-cp313-cp313-win_arm64.whl", hash = "sha256:fd914713266421b7536de2bfa8181aa8c699432b6763a0ea64195ebe28bff6a9", size = 193524, upload-time = "2025-07-26T12:01:55.73Z" }, - { url = "https://files.pythonhosted.org/packages/c0/b3/f8a1a86bd3298513f500e5b1f5fd92b69896449f6cab6a146a5d52715479/contourpy-1.3.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:88df9880d507169449d434c293467418b9f6cbe82edd19284aa0409e7fdb933d", size = 306730, upload-time = "2025-07-26T12:01:57.051Z" }, - { url = "https://files.pythonhosted.org/packages/3f/11/4780db94ae62fc0c2053909b65dc3246bd7cecfc4f8a20d957ad43aa4ad8/contourpy-1.3.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:d06bb1f751ba5d417047db62bca3c8fde202b8c11fb50742ab3ab962c81e8216", size = 287897, upload-time = "2025-07-26T12:01:58.663Z" }, - { url = "https://files.pythonhosted.org/packages/ae/15/e59f5f3ffdd6f3d4daa3e47114c53daabcb18574a26c21f03dc9e4e42ff0/contourpy-1.3.3-cp313-cp313t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e4e6b05a45525357e382909a4c1600444e2a45b4795163d3b22669285591c1ae", size = 326751, upload-time = "2025-07-26T12:02:00.343Z" }, - { url = "https://files.pythonhosted.org/packages/0f/81/03b45cfad088e4770b1dcf72ea78d3802d04200009fb364d18a493857210/contourpy-1.3.3-cp313-cp313t-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ab3074b48c4e2cf1a960e6bbeb7f04566bf36b1861d5c9d4d8ac04b82e38ba20", size = 375486, upload-time = "2025-07-26T12:02:02.128Z" }, - { url = "https://files.pythonhosted.org/packages/0c/ba/49923366492ffbdd4486e970d421b289a670ae8cf539c1ea9a09822b371a/contourpy-1.3.3-cp313-cp313t-manylinux_2_26_s390x.manylinux_2_28_s390x.whl", hash = "sha256:6c3d53c796f8647d6deb1abe867daeb66dcc8a97e8455efa729516b997b8ed99", size = 388106, upload-time = "2025-07-26T12:02:03.615Z" }, - { url = "https://files.pythonhosted.org/packages/9f/52/5b00ea89525f8f143651f9f03a0df371d3cbd2fccd21ca9b768c7a6500c2/contourpy-1.3.3-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:50ed930df7289ff2a8d7afeb9603f8289e5704755c7e5c3bbd929c90c817164b", size = 352548, upload-time = "2025-07-26T12:02:05.165Z" }, - { url = "https://files.pythonhosted.org/packages/32/1d/a209ec1a3a3452d490f6b14dd92e72280c99ae3d1e73da74f8277d4ee08f/contourpy-1.3.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:4feffb6537d64b84877da813a5c30f1422ea5739566abf0bd18065ac040e120a", size = 1322297, upload-time = "2025-07-26T12:02:07.379Z" }, - { url = "https://files.pythonhosted.org/packages/bc/9e/46f0e8ebdd884ca0e8877e46a3f4e633f6c9c8c4f3f6e72be3fe075994aa/contourpy-1.3.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:2b7e9480ffe2b0cd2e787e4df64270e3a0440d9db8dc823312e2c940c167df7e", size = 1391023, upload-time = "2025-07-26T12:02:10.171Z" }, - { 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" }, ] [[package]] @@ -901,32 +776,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/bf/10/1921f1a03a7c209e1cb374f81a6b9b68b03cdb3ecc3433c189bc90e2a3d5/coverage-7.13.3-cp312-cp312-win32.whl", hash = "sha256:f7f153d0184d45f3873b3ad3ad22694fd73aadcb8cdbc4337ab4b41ea6b4dff1", size = 221986, upload-time = "2026-02-03T14:00:40.442Z" }, { url = "https://files.pythonhosted.org/packages/3c/7c/f5d93297f8e125a80c15545edc754d93e0ed8ba255b65e609b185296af01/coverage-7.13.3-cp312-cp312-win_amd64.whl", hash = "sha256:03a6e5e1e50819d6d7436f5bc40c92ded7e484e400716886ac921e35c133149d", size = 222793, upload-time = "2026-02-03T14:00:42.106Z" }, { url = "https://files.pythonhosted.org/packages/43/59/c86b84170015b4555ebabca8649bdf9f4a1f737a73168088385ed0f947c4/coverage-7.13.3-cp312-cp312-win_arm64.whl", hash = "sha256:51c4c42c0e7d09a822b08b6cf79b3c4db8333fffde7450da946719ba0d45730f", size = 221410, upload-time = "2026-02-03T14:00:43.726Z" }, - { url = "https://files.pythonhosted.org/packages/81/f3/4c333da7b373e8c8bfb62517e8174a01dcc373d7a9083698e3b39d50d59c/coverage-7.13.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:853c3d3c79ff0db65797aad79dee6be020efd218ac4510f15a205f1e8d13ce25", size = 219468, upload-time = "2026-02-03T14:00:45.829Z" }, - { url = "https://files.pythonhosted.org/packages/d6/31/0714337b7d23630c8de2f4d56acf43c65f8728a45ed529b34410683f7217/coverage-7.13.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f75695e157c83d374f88dcc646a60cb94173304a9258b2e74ba5a66b7614a51a", size = 219839, upload-time = "2026-02-03T14:00:47.407Z" }, - { url = "https://files.pythonhosted.org/packages/12/99/bd6f2a2738144c98945666f90cae446ed870cecf0421c767475fcf42cdbe/coverage-7.13.3-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:2d098709621d0819039f3f1e471ee554f55a0b2ac0d816883c765b14129b5627", size = 250828, upload-time = "2026-02-03T14:00:49.029Z" }, - { url = "https://files.pythonhosted.org/packages/6f/99/97b600225fbf631e6f5bfd3ad5bcaf87fbb9e34ff87492e5a572ff01bbe2/coverage-7.13.3-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:16d23d6579cf80a474ad160ca14d8b319abaa6db62759d6eef53b2fc979b58c8", size = 253432, upload-time = "2026-02-03T14:00:50.655Z" }, - { url = "https://files.pythonhosted.org/packages/5f/5c/abe2b3490bda26bd4f5e3e799be0bdf00bd81edebedc2c9da8d3ef288fa8/coverage-7.13.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:00d34b29a59d2076e6f318b30a00a69bf63687e30cd882984ed444e753990cc1", size = 254672, upload-time = "2026-02-03T14:00:52.757Z" }, - { url = "https://files.pythonhosted.org/packages/31/ba/5d1957c76b40daff53971fe0adb84d9c2162b614280031d1d0653dd010c1/coverage-7.13.3-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:ab6d72bffac9deb6e6cb0f61042e748de3f9f8e98afb0375a8e64b0b6e11746b", size = 251050, upload-time = "2026-02-03T14:00:54.332Z" }, - { url = "https://files.pythonhosted.org/packages/69/dc/dffdf3bfe9d32090f047d3c3085378558cb4eb6778cda7de414ad74581ed/coverage-7.13.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e129328ad1258e49cae0123a3b5fcb93d6c2fa90d540f0b4c7cdcdc019aaa3dc", size = 252801, upload-time = "2026-02-03T14:00:56.121Z" }, - { url = "https://files.pythonhosted.org/packages/87/51/cdf6198b0f2746e04511a30dc9185d7b8cdd895276c07bdb538e37f1cd50/coverage-7.13.3-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:2213a8d88ed35459bda71597599d4eec7c2ebad201c88f0bfc2c26fd9b0dd2ea", size = 250763, upload-time = "2026-02-03T14:00:58.719Z" }, - { url = "https://files.pythonhosted.org/packages/d7/1a/596b7d62218c1d69f2475b69cc6b211e33c83c902f38ee6ae9766dd422da/coverage-7.13.3-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:00dd3f02de6d5f5c9c3d95e3e036c3c2e2a669f8bf2d3ceb92505c4ce7838f67", size = 250587, upload-time = "2026-02-03T14:01:01.197Z" }, - { url = "https://files.pythonhosted.org/packages/f7/46/52330d5841ff660f22c130b75f5e1dd3e352c8e7baef5e5fef6b14e3e991/coverage-7.13.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f9bada7bc660d20b23d7d312ebe29e927b655cf414dadcdb6335a2075695bd86", size = 252358, upload-time = "2026-02-03T14:01:02.824Z" }, - { url = "https://files.pythonhosted.org/packages/36/8a/e69a5be51923097ba7d5cff9724466e74fe486e9232020ba97c809a8b42b/coverage-7.13.3-cp313-cp313-win32.whl", hash = "sha256:75b3c0300f3fa15809bd62d9ca8b170eb21fcf0100eb4b4154d6dc8b3a5bbd43", size = 222007, upload-time = "2026-02-03T14:01:04.876Z" }, - { url = "https://files.pythonhosted.org/packages/0a/09/a5a069bcee0d613bdd48ee7637fa73bc09e7ed4342b26890f2df97cc9682/coverage-7.13.3-cp313-cp313-win_amd64.whl", hash = "sha256:a2f7589c6132c44c53f6e705e1a6677e2b7821378c22f7703b2cf5388d0d4587", size = 222812, upload-time = "2026-02-03T14:01:07.296Z" }, - { url = "https://files.pythonhosted.org/packages/3d/4f/d62ad7dfe32f9e3d4a10c178bb6f98b10b083d6e0530ca202b399371f6c1/coverage-7.13.3-cp313-cp313-win_arm64.whl", hash = "sha256:123ceaf2b9d8c614f01110f908a341e05b1b305d6b2ada98763b9a5a59756051", size = 221433, upload-time = "2026-02-03T14:01:09.156Z" }, - { url = "https://files.pythonhosted.org/packages/04/b2/4876c46d723d80b9c5b695f1a11bf5f7c3dabf540ec00d6edc076ff025e6/coverage-7.13.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:cc7fd0f726795420f3678ac82ff882c7fc33770bd0074463b5aef7293285ace9", size = 220162, upload-time = "2026-02-03T14:01:11.409Z" }, - { url = "https://files.pythonhosted.org/packages/fc/04/9942b64a0e0bdda2c109f56bda42b2a59d9d3df4c94b85a323c1cae9fc77/coverage-7.13.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:d358dc408edc28730aed5477a69338e444e62fba0b7e9e4a131c505fadad691e", size = 220510, upload-time = "2026-02-03T14:01:13.038Z" }, - { url = "https://files.pythonhosted.org/packages/5a/82/5cfe1e81eae525b74669f9795f37eb3edd4679b873d79d1e6c1c14ee6c1c/coverage-7.13.3-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:5d67b9ed6f7b5527b209b24b3df9f2e5bf0198c1bbf99c6971b0e2dcb7e2a107", size = 261801, upload-time = "2026-02-03T14:01:14.674Z" }, - { url = "https://files.pythonhosted.org/packages/0b/ec/a553d7f742fd2cd12e36a16a7b4b3582d5934b496ef2b5ea8abeb10903d4/coverage-7.13.3-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:59224bfb2e9b37c1335ae35d00daa3a5b4e0b1a20f530be208fff1ecfa436f43", size = 263882, upload-time = "2026-02-03T14:01:16.343Z" }, - { url = "https://files.pythonhosted.org/packages/e1/58/8f54a2a93e3d675635bc406de1c9ac8d551312142ff52c9d71b5e533ad45/coverage-7.13.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ae9306b5299e31e31e0d3b908c66bcb6e7e3ddca143dea0266e9ce6c667346d3", size = 266306, upload-time = "2026-02-03T14:01:18.02Z" }, - { url = "https://files.pythonhosted.org/packages/1a/be/e593399fd6ea1f00aee79ebd7cc401021f218d34e96682a92e1bae092ff6/coverage-7.13.3-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:343aaeb5f8bb7bcd38620fd7bc56e6ee8207847d8c6103a1e7b72322d381ba4a", size = 261051, upload-time = "2026-02-03T14:01:19.757Z" }, - { url = "https://files.pythonhosted.org/packages/5c/e5/e9e0f6138b21bcdebccac36fbfde9cf15eb1bbcea9f5b1f35cd1f465fb91/coverage-7.13.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:b2182129f4c101272ff5f2f18038d7b698db1bf8e7aa9e615cb48440899ad32e", size = 263868, upload-time = "2026-02-03T14:01:21.487Z" }, - { url = "https://files.pythonhosted.org/packages/9a/bf/de72cfebb69756f2d4a2dde35efcc33c47d85cd3ebdf844b3914aac2ef28/coverage-7.13.3-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:94d2ac94bd0cc57c5626f52f8c2fffed1444b5ae8c9fc68320306cc2b255e155", size = 261498, upload-time = "2026-02-03T14:01:23.097Z" }, - { url = "https://files.pythonhosted.org/packages/f2/91/4a2d313a70fc2e98ca53afd1c8ce67a89b1944cd996589a5b1fe7fbb3e5c/coverage-7.13.3-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:65436cde5ecabe26fb2f0bf598962f0a054d3f23ad529361326ac002c61a2a1e", size = 260394, upload-time = "2026-02-03T14:01:24.949Z" }, - { url = "https://files.pythonhosted.org/packages/40/83/25113af7cf6941e779eb7ed8de2a677865b859a07ccee9146d4cc06a03e3/coverage-7.13.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:db83b77f97129813dbd463a67e5335adc6a6a91db652cc085d60c2d512746f96", size = 262579, upload-time = "2026-02-03T14:01:26.703Z" }, - { url = "https://files.pythonhosted.org/packages/1e/19/a5f2b96262977e82fb9aabbe19b4d83561f5d063f18dde3e72f34ffc3b2f/coverage-7.13.3-cp313-cp313t-win32.whl", hash = "sha256:dfb428e41377e6b9ba1b0a32df6db5409cb089a0ed1d0a672dc4953ec110d84f", size = 222679, upload-time = "2026-02-03T14:01:28.553Z" }, - { url = "https://files.pythonhosted.org/packages/81/82/ef1747b88c87a5c7d7edc3704799ebd650189a9158e680a063308b6125ef/coverage-7.13.3-cp313-cp313t-win_amd64.whl", hash = "sha256:5badd7e596e6b0c89aa8ec6d37f4473e4357f982ce57f9a2942b0221cd9cf60c", size = 223740, upload-time = "2026-02-03T14:01:30.776Z" }, - { url = "https://files.pythonhosted.org/packages/1c/4c/a67c7bb5b560241c22736a9cb2f14c5034149ffae18630323fde787339e4/coverage-7.13.3-cp313-cp313t-win_arm64.whl", hash = "sha256:989aa158c0eb19d83c76c26f4ba00dbb272485c56e452010a3450bdbc9daafd9", size = 221996, upload-time = "2026-02-03T14:01:32.495Z" }, { url = "https://files.pythonhosted.org/packages/7d/fb/70af542d2d938c778c9373ce253aa4116dbe7c0a5672f78b2b2ae0e1b94b/coverage-7.13.3-py3-none-any.whl", hash = "sha256:90a8af9dba6429b2573199622d72e0ebf024d6276f16abce394ad4d181bb0910", size = 211237, upload-time = "2026-02-03T14:02:27.986Z" }, ] @@ -982,8 +831,6 @@ dependencies = [ wheels = [ { url = "https://files.pythonhosted.org/packages/38/ca/b93ef9fca1471a65f136a73e10819634c0b83427362fc08fc9f29f935bf0/cupy_cuda12x-14.0.1-cp312-cp312-manylinux2014_aarch64.whl", hash = "sha256:f244bc14fad6f1ef0c74abd98afa4b82d2534aecdba911197810ec0047f0d1f3", size = 145578614, upload-time = "2026-02-20T10:22:49.108Z" }, { url = "https://files.pythonhosted.org/packages/5a/a6/944406223a190815d9df156a1d66f3b0352bd8827dc4a8c752196d616dbc/cupy_cuda12x-14.0.1-cp312-cp312-manylinux2014_x86_64.whl", hash = "sha256:9f0c81c3509f77be3ae8444759d5b314201b2dfcbbf2ae0d0b5fb7a61f20893c", size = 134613763, upload-time = "2026-02-20T10:22:56.792Z" }, - { url = "https://files.pythonhosted.org/packages/99/67/f967c5aff77bd6ae6765faf20580db80bb8a7e2574e999166de1d4e50146/cupy_cuda12x-14.0.1-cp313-cp313-manylinux2014_aarch64.whl", hash = "sha256:9d9b1bdcf9fa777593017867e8733192c071b94639a1b3e8b2ee99eb3f3ea760", size = 145128055, upload-time = "2026-02-20T10:23:08.765Z" }, - { url = "https://files.pythonhosted.org/packages/80/53/037c931731151c504cfc00069eb295c903927c92145115623f13bd2ea076/cupy_cuda12x-14.0.1-cp313-cp313-manylinux2014_x86_64.whl", hash = "sha256:21fcb4e917e43237edcc5e3a1a1241e2a2946ba9e577ce36fd580bd9856f91e8", size = 134227269, upload-time = "2026-02-20T10:23:16.147Z" }, ] [[package]] @@ -1020,8 +867,7 @@ dependencies = [ { name = "huggingface-hub" }, { name = "multiprocess" }, { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, - { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.13' and sys_platform == 'emscripten') or (python_full_version < '3.13' and sys_platform == 'win32')" }, - { name = "numpy", version = "2.4.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.13' and sys_platform == 'emscripten') or (python_full_version >= '3.13' and sys_platform == 'win32')" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform == 'emscripten' or sys_platform == 'win32'" }, { name = "packaging" }, { name = "pandas" }, { name = "pyarrow" }, @@ -1045,10 +891,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/ab/78/b193a3975ca34458f6f0e24aaf5c3e3da72f5401f6054c0dfd004b41726f/debugpy-1.8.20-cp312-cp312-manylinux_2_34_x86_64.whl", hash = "sha256:88f47850a4284b88bd2bfee1f26132147d5d504e4e86c22485dfa44b97e19b4b", size = 4310588, upload-time = "2026-01-29T23:03:43.314Z" }, { url = "https://files.pythonhosted.org/packages/c1/55/f14deb95eaf4f30f07ef4b90a8590fc05d9e04df85ee379712f6fb6736d7/debugpy-1.8.20-cp312-cp312-win32.whl", hash = "sha256:4057ac68f892064e5f98209ab582abfee3b543fb55d2e87610ddc133a954d390", size = 5331372, upload-time = "2026-01-29T23:03:45.526Z" }, { url = "https://files.pythonhosted.org/packages/a1/39/2bef246368bd42f9bd7cba99844542b74b84dacbdbea0833e610f384fee8/debugpy-1.8.20-cp312-cp312-win_amd64.whl", hash = "sha256:a1a8f851e7cf171330679ef6997e9c579ef6dd33c9098458bd9986a0f4ca52e3", size = 5372835, upload-time = "2026-01-29T23:03:47.245Z" }, - { url = "https://files.pythonhosted.org/packages/15/e2/fc500524cc6f104a9d049abc85a0a8b3f0d14c0a39b9c140511c61e5b40b/debugpy-1.8.20-cp313-cp313-macosx_15_0_universal2.whl", hash = "sha256:5dff4bb27027821fdfcc9e8f87309a28988231165147c31730128b1c983e282a", size = 2539560, upload-time = "2026-01-29T23:03:48.738Z" }, - { url = "https://files.pythonhosted.org/packages/90/83/fb33dcea789ed6018f8da20c5a9bc9d82adc65c0c990faed43f7c955da46/debugpy-1.8.20-cp313-cp313-manylinux_2_34_x86_64.whl", hash = "sha256:84562982dd7cf5ebebfdea667ca20a064e096099997b175fe204e86817f64eaf", size = 4293272, upload-time = "2026-01-29T23:03:50.169Z" }, - { url = "https://files.pythonhosted.org/packages/a6/25/b1e4a01bfb824d79a6af24b99ef291e24189080c93576dfd9b1a2815cd0f/debugpy-1.8.20-cp313-cp313-win32.whl", hash = "sha256:da11dea6447b2cadbf8ce2bec59ecea87cc18d2c574980f643f2d2dfe4862393", size = 5331208, upload-time = "2026-01-29T23:03:51.547Z" }, - { url = "https://files.pythonhosted.org/packages/13/f7/a0b368ce54ffff9e9028c098bd2d28cfc5b54f9f6c186929083d4c60ba58/debugpy-1.8.20-cp313-cp313-win_amd64.whl", hash = "sha256:eb506e45943cab2efb7c6eafdd65b842f3ae779f020c82221f55aca9de135ed7", size = 5372930, upload-time = "2026-01-29T23:03:53.585Z" }, { url = "https://files.pythonhosted.org/packages/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" }, ] @@ -1299,17 +1141,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/f4/4f/e07b9d82a58c27a8018d098b3ed51f561732c17fa6643c317bfba2907bdc/fastar-0.10.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:2637a20a69ea34455aa53cca8340273166bba8bd5c06727ea64ec151ba56abe0", size = 1036445, upload-time = "2026-04-08T01:01:25.512Z" }, { url = "https://files.pythonhosted.org/packages/19/6e/de7934cea77c9938ecad2443b114cfee13a760534bb88279a0701b12fac3/fastar-0.10.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:e9ea5e45a1dd85c3104273b4b1628112f6a09115ed95dc0d31595097ce278fb2", size = 1074104, upload-time = "2026-04-08T01:01:38.464Z" }, { url = "https://files.pythonhosted.org/packages/7e/8d/54d56acbe2bbab3efbf2c1b93ea709e0cd78b7ff9d42b4038f520a580009/fastar-0.10.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:68d70adc24b9f4cf4520ed60dbd9fb60a6eb22bb96fd6756bcb387616cb2a979", size = 1026288, upload-time = "2026-04-08T01:01:51.658Z" }, - { url = "https://files.pythonhosted.org/packages/ea/e1/1ad761f48331593eabe7ce10b0f68a09a2b5f55beace3057cf8fe3f0fafa/fastar-0.10.0-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0d81b83e42fc97b8e75bfd8df2be1878199c482a5b5633b80bce80cb740eb3f9", size = 865599, upload-time = "2026-04-08T01:00:24.384Z" }, - { url = "https://files.pythonhosted.org/packages/ec/fb/75bffcaa81da72e7e12e656a69c564dfb87ea8ca6fa9ab9c6f5c396ebaeb/fastar-0.10.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ec47f63e53ee3a9e117eeb18cbf4a14b3052e64bdc7ed4cdb812da741557547", size = 760975, upload-time = "2026-04-08T00:59:21.504Z" }, - { url = "https://files.pythonhosted.org/packages/66/36/3f22fc6c248b80676c1d230159313192dbcdf7fb45c3ad167036465733fe/fastar-0.10.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3a6abbd746ce3f6012c7e5d25a1193edb437dba3793337a9d5cdf7eafdc9d6e6", size = 757834, upload-time = "2026-04-08T00:59:34.034Z" }, - { url = "https://files.pythonhosted.org/packages/d3/25/76cb9ba8392a00b81c27b85f87cc9d61d713b2ac96981507ca01bba80b9f/fastar-0.10.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:26efe8b1d4c3c343befd10514216953d47f4e5d69274f2af2e38c22149728717", size = 923080, upload-time = "2026-04-08T00:59:45.592Z" }, - { url = "https://files.pythonhosted.org/packages/90/5e/4f1526deb1c2baa6f7e7973e354562d91da8159da445709c19a277447e4a/fastar-0.10.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bb21af50dcaed47350f2299627f350999b672a971ae17a963c10b5754425a645", size = 816582, upload-time = "2026-04-08T01:00:11.464Z" }, - { url = "https://files.pythonhosted.org/packages/88/2b/475e09dc60824baefd55ee752f8b5b4faf2be9b9f2d3309f9a85529d5ab3/fastar-0.10.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2dc9e8453af9f36bb7a56bd666020e9539dbda715192543373c2edc3cc16f0a3", size = 819304, upload-time = "2026-04-08T01:00:36.383Z" }, - { url = "https://files.pythonhosted.org/packages/f6/5c/221659f40c819e995fb5d8c823ee9890790b705b2d37701fd0a6cb9dee16/fastar-0.10.0-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:b3cb3b95106aa355e6a97665c3e97d3886ab36aa8165aeb7d4812964af79ed0a", size = 885014, upload-time = "2026-04-08T00:59:57.614Z" }, - { url = "https://files.pythonhosted.org/packages/b7/58/0e62784e9383ac940dfd31df8d2982a95e9fbd0d2c511fbd6ec9d402b97d/fastar-0.10.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4afa2628ef97316ad00b54a2d09042b0c0944d269d7006fc26dfef951a7f23a1", size = 968599, upload-time = "2026-04-08T01:01:13.884Z" }, - { url = "https://files.pythonhosted.org/packages/3f/fb/2abfd1aed679534ef99929e851c6ca83d88783d22d941fd41ce02707ea92/fastar-0.10.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:1627e03e17b51e59c4f242a5600e850d35707edf6f82a048dd34bf9578d9fbb8", size = 1035271, upload-time = "2026-04-08T01:01:26.954Z" }, - { url = "https://files.pythonhosted.org/packages/94/34/2f0a8f89a240a763d0cb6104df5d44013754a58150b201303c5135a4ce02/fastar-0.10.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:17b7dbb8b8b563569794ebd79e3058ffd6d1cec1e187c7af0cf5947c189fc50b", size = 1073373, upload-time = "2026-04-08T01:01:39.838Z" }, - { url = "https://files.pythonhosted.org/packages/75/9a/44b9b1a9dec721d229a57646d7c5c160dbb1975972c2d3935ddd93cd8a12/fastar-0.10.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:1762dcf52a145b9e6f7a4b5b1b17dd36af2607416a3f26c4632983fc5ae84526", size = 1026086, upload-time = "2026-04-08T01:01:53.298Z" }, ] [[package]] @@ -1416,14 +1247,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/c8/8b/6391b257fa3d0b553d73e778f953a2f0154292a7a7a085e2374b111e5410/fonttools-4.61.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:5fade934607a523614726119164ff621e8c30e8fa1ffffbbd358662056ba69f0", size = 5093598, upload-time = "2025-12-12T17:30:15.79Z" }, { url = "https://files.pythonhosted.org/packages/d9/71/fd2ea96cdc512d92da5678a1c98c267ddd4d8c5130b76d0f7a80f9a9fde8/fonttools-4.61.1-cp312-cp312-win32.whl", hash = "sha256:75da8f28eff26defba42c52986de97b22106cb8f26515b7c22443ebc9c2d3261", size = 2269060, upload-time = "2025-12-12T17:30:18.058Z" }, { url = "https://files.pythonhosted.org/packages/80/3b/a3e81b71aed5a688e89dfe0e2694b26b78c7d7f39a5ffd8a7d75f54a12a8/fonttools-4.61.1-cp312-cp312-win_amd64.whl", hash = "sha256:497c31ce314219888c0e2fce5ad9178ca83fe5230b01a5006726cdf3ac9f24d9", size = 2319078, upload-time = "2025-12-12T17:30:22.862Z" }, - { url = "https://files.pythonhosted.org/packages/4b/cf/00ba28b0990982530addb8dc3e9e6f2fa9cb5c20df2abdda7baa755e8fe1/fonttools-4.61.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:8c56c488ab471628ff3bfa80964372fc13504ece601e0d97a78ee74126b2045c", size = 2846454, upload-time = "2025-12-12T17:30:24.938Z" }, - { url = "https://files.pythonhosted.org/packages/5a/ca/468c9a8446a2103ae645d14fee3f610567b7042aba85031c1c65e3ef7471/fonttools-4.61.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:dc492779501fa723b04d0ab1f5be046797fee17d27700476edc7ee9ae535a61e", size = 2398191, upload-time = "2025-12-12T17:30:27.343Z" }, - { url = "https://files.pythonhosted.org/packages/a3/4b/d67eedaed19def5967fade3297fed8161b25ba94699efc124b14fb68cdbc/fonttools-4.61.1-cp313-cp313-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:64102ca87e84261419c3747a0d20f396eb024bdbeb04c2bfb37e2891f5fadcb5", size = 4928410, upload-time = "2025-12-12T17:30:29.771Z" }, - { url = "https://files.pythonhosted.org/packages/b0/8d/6fb3494dfe61a46258cd93d979cf4725ded4eb46c2a4ca35e4490d84daea/fonttools-4.61.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4c1b526c8d3f615a7b1867f38a9410849c8f4aef078535742198e942fba0e9bd", size = 4984460, upload-time = "2025-12-12T17:30:32.073Z" }, - { url = "https://files.pythonhosted.org/packages/f7/f1/a47f1d30b3dc00d75e7af762652d4cbc3dff5c2697a0dbd5203c81afd9c3/fonttools-4.61.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:41ed4b5ec103bd306bb68f81dc166e77409e5209443e5773cb4ed837bcc9b0d3", size = 4925800, upload-time = "2025-12-12T17:30:34.339Z" }, - { 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/c7/4e/ce75a57ff3aebf6fc1f4e9d508b8e5810618a33d900ad6c19eb30b290b97/fonttools-4.61.1-py3-none-any.whl", hash = "sha256:17d2bf5d541add43822bcf0c43d7d847b160c9bb01d15d5007d84e2217aaa371", size = 1148996, upload-time = "2025-12-12T17:31:21.03Z" }, ] @@ -1467,38 +1290,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/66/bb/852b9d6db2fa40be96f29c0d1205c306288f0684df8fd26ca1951d461a56/frozenlist-1.8.0-cp312-cp312-win32.whl", hash = "sha256:433403ae80709741ce34038da08511d4a77062aa924baf411ef73d1146e74faf", size = 39985, upload-time = "2025-10-06T05:36:23.661Z" }, { url = "https://files.pythonhosted.org/packages/b8/af/38e51a553dd66eb064cdf193841f16f077585d4d28394c2fa6235cb41765/frozenlist-1.8.0-cp312-cp312-win_amd64.whl", hash = "sha256:34187385b08f866104f0c0617404c8eb08165ab1272e884abc89c112e9c00746", size = 44591, upload-time = "2025-10-06T05:36:24.958Z" }, { url = "https://files.pythonhosted.org/packages/a7/06/1dc65480ab147339fecc70797e9c2f69d9cea9cf38934ce08df070fdb9cb/frozenlist-1.8.0-cp312-cp312-win_arm64.whl", hash = "sha256:fe3c58d2f5db5fbd18c2987cba06d51b0529f52bc3a6cdc33d3f4eab725104bd", size = 40102, upload-time = "2025-10-06T05:36:26.333Z" }, - { url = "https://files.pythonhosted.org/packages/2d/40/0832c31a37d60f60ed79e9dfb5a92e1e2af4f40a16a29abcc7992af9edff/frozenlist-1.8.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:8d92f1a84bb12d9e56f818b3a746f3efba93c1b63c8387a73dde655e1e42282a", size = 85717, upload-time = "2025-10-06T05:36:27.341Z" }, - { url = "https://files.pythonhosted.org/packages/30/ba/b0b3de23f40bc55a7057bd38434e25c34fa48e17f20ee273bbde5e0650f3/frozenlist-1.8.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:96153e77a591c8adc2ee805756c61f59fef4cf4073a9275ee86fe8cba41241f7", size = 49651, upload-time = "2025-10-06T05:36:28.855Z" }, - { url = "https://files.pythonhosted.org/packages/0c/ab/6e5080ee374f875296c4243c381bbdef97a9ac39c6e3ce1d5f7d42cb78d6/frozenlist-1.8.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f21f00a91358803399890ab167098c131ec2ddd5f8f5fd5fe9c9f2c6fcd91e40", size = 49417, upload-time = "2025-10-06T05:36:29.877Z" }, - { url = "https://files.pythonhosted.org/packages/d5/4e/e4691508f9477ce67da2015d8c00acd751e6287739123113a9fca6f1604e/frozenlist-1.8.0-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:fb30f9626572a76dfe4293c7194a09fb1fe93ba94c7d4f720dfae3b646b45027", size = 234391, upload-time = "2025-10-06T05:36:31.301Z" }, - { url = "https://files.pythonhosted.org/packages/40/76/c202df58e3acdf12969a7895fd6f3bc016c642e6726aa63bd3025e0fc71c/frozenlist-1.8.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:eaa352d7047a31d87dafcacbabe89df0aa506abb5b1b85a2fb91bc3faa02d822", size = 233048, upload-time = "2025-10-06T05:36:32.531Z" }, - { url = "https://files.pythonhosted.org/packages/f9/c0/8746afb90f17b73ca5979c7a3958116e105ff796e718575175319b5bb4ce/frozenlist-1.8.0-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:03ae967b4e297f58f8c774c7eabcce57fe3c2434817d4385c50661845a058121", size = 226549, upload-time = "2025-10-06T05:36:33.706Z" }, - { url = "https://files.pythonhosted.org/packages/7e/eb/4c7eefc718ff72f9b6c4893291abaae5fbc0c82226a32dcd8ef4f7a5dbef/frozenlist-1.8.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f6292f1de555ffcc675941d65fffffb0a5bcd992905015f85d0592201793e0e5", size = 239833, upload-time = "2025-10-06T05:36:34.947Z" }, - { url = "https://files.pythonhosted.org/packages/c2/4e/e5c02187cf704224f8b21bee886f3d713ca379535f16893233b9d672ea71/frozenlist-1.8.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:29548f9b5b5e3460ce7378144c3010363d8035cea44bc0bf02d57f5a685e084e", size = 245363, upload-time = "2025-10-06T05:36:36.534Z" }, - { url = "https://files.pythonhosted.org/packages/1f/96/cb85ec608464472e82ad37a17f844889c36100eed57bea094518bf270692/frozenlist-1.8.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ec3cc8c5d4084591b4237c0a272cc4f50a5b03396a47d9caaf76f5d7b38a4f11", size = 229314, upload-time = "2025-10-06T05:36:38.582Z" }, - { url = "https://files.pythonhosted.org/packages/5d/6f/4ae69c550e4cee66b57887daeebe006fe985917c01d0fff9caab9883f6d0/frozenlist-1.8.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:517279f58009d0b1f2e7c1b130b377a349405da3f7621ed6bfae50b10adf20c1", size = 243365, upload-time = "2025-10-06T05:36:40.152Z" }, - { url = "https://files.pythonhosted.org/packages/7a/58/afd56de246cf11780a40a2c28dc7cbabbf06337cc8ddb1c780a2d97e88d8/frozenlist-1.8.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:db1e72ede2d0d7ccb213f218df6a078a9c09a7de257c2fe8fcef16d5925230b1", size = 237763, upload-time = "2025-10-06T05:36:41.355Z" }, - { url = "https://files.pythonhosted.org/packages/cb/36/cdfaf6ed42e2644740d4a10452d8e97fa1c062e2a8006e4b09f1b5fd7d63/frozenlist-1.8.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:b4dec9482a65c54a5044486847b8a66bf10c9cb4926d42927ec4e8fd5db7fed8", size = 240110, upload-time = "2025-10-06T05:36:42.716Z" }, - { url = "https://files.pythonhosted.org/packages/03/a8/9ea226fbefad669f11b52e864c55f0bd57d3c8d7eb07e9f2e9a0b39502e1/frozenlist-1.8.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:21900c48ae04d13d416f0e1e0c4d81f7931f73a9dfa0b7a8746fb2fe7dd970ed", size = 233717, upload-time = "2025-10-06T05:36:44.251Z" }, - { url = "https://files.pythonhosted.org/packages/1e/0b/1b5531611e83ba7d13ccc9988967ea1b51186af64c42b7a7af465dcc9568/frozenlist-1.8.0-cp313-cp313-win32.whl", hash = "sha256:8b7b94a067d1c504ee0b16def57ad5738701e4ba10cec90529f13fa03c833496", size = 39628, upload-time = "2025-10-06T05:36:45.423Z" }, - { url = "https://files.pythonhosted.org/packages/d8/cf/174c91dbc9cc49bc7b7aab74d8b734e974d1faa8f191c74af9b7e80848e6/frozenlist-1.8.0-cp313-cp313-win_amd64.whl", hash = "sha256:878be833caa6a3821caf85eb39c5ba92d28e85df26d57afb06b35b2efd937231", size = 43882, upload-time = "2025-10-06T05:36:46.796Z" }, - { url = "https://files.pythonhosted.org/packages/c1/17/502cd212cbfa96eb1388614fe39a3fc9ab87dbbe042b66f97acb57474834/frozenlist-1.8.0-cp313-cp313-win_arm64.whl", hash = "sha256:44389d135b3ff43ba8cc89ff7f51f5a0bb6b63d829c8300f79a2fe4fe61bcc62", size = 39676, upload-time = "2025-10-06T05:36:47.8Z" }, - { url = "https://files.pythonhosted.org/packages/d2/5c/3bbfaa920dfab09e76946a5d2833a7cbdf7b9b4a91c714666ac4855b88b4/frozenlist-1.8.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:e25ac20a2ef37e91c1b39938b591457666a0fa835c7783c3a8f33ea42870db94", size = 89235, upload-time = "2025-10-06T05:36:48.78Z" }, - { url = "https://files.pythonhosted.org/packages/d2/d6/f03961ef72166cec1687e84e8925838442b615bd0b8854b54923ce5b7b8a/frozenlist-1.8.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:07cdca25a91a4386d2e76ad992916a85038a9b97561bf7a3fd12d5d9ce31870c", size = 50742, upload-time = "2025-10-06T05:36:49.837Z" }, - { url = "https://files.pythonhosted.org/packages/1e/bb/a6d12b7ba4c3337667d0e421f7181c82dda448ce4e7ad7ecd249a16fa806/frozenlist-1.8.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:4e0c11f2cc6717e0a741f84a527c52616140741cd812a50422f83dc31749fb52", size = 51725, upload-time = "2025-10-06T05:36:50.851Z" }, - { url = "https://files.pythonhosted.org/packages/bc/71/d1fed0ffe2c2ccd70b43714c6cab0f4188f09f8a67a7914a6b46ee30f274/frozenlist-1.8.0-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:b3210649ee28062ea6099cfda39e147fa1bc039583c8ee4481cb7811e2448c51", size = 284533, upload-time = "2025-10-06T05:36:51.898Z" }, - { url = "https://files.pythonhosted.org/packages/c9/1f/fb1685a7b009d89f9bf78a42d94461bc06581f6e718c39344754a5d9bada/frozenlist-1.8.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:581ef5194c48035a7de2aefc72ac6539823bb71508189e5de01d60c9dcd5fa65", size = 292506, upload-time = "2025-10-06T05:36:53.101Z" }, - { url = "https://files.pythonhosted.org/packages/e6/3b/b991fe1612703f7e0d05c0cf734c1b77aaf7c7d321df4572e8d36e7048c8/frozenlist-1.8.0-cp313-cp313t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:3ef2d026f16a2b1866e1d86fc4e1291e1ed8a387b2c333809419a2f8b3a77b82", size = 274161, upload-time = "2025-10-06T05:36:54.309Z" }, - { url = "https://files.pythonhosted.org/packages/ca/ec/c5c618767bcdf66e88945ec0157d7f6c4a1322f1473392319b7a2501ded7/frozenlist-1.8.0-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:5500ef82073f599ac84d888e3a8c1f77ac831183244bfd7f11eaa0289fb30714", size = 294676, upload-time = "2025-10-06T05:36:55.566Z" }, - { url = "https://files.pythonhosted.org/packages/7c/ce/3934758637d8f8a88d11f0585d6495ef54b2044ed6ec84492a91fa3b27aa/frozenlist-1.8.0-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:50066c3997d0091c411a66e710f4e11752251e6d2d73d70d8d5d4c76442a199d", size = 300638, upload-time = "2025-10-06T05:36:56.758Z" }, - { url = "https://files.pythonhosted.org/packages/fc/4f/a7e4d0d467298f42de4b41cbc7ddaf19d3cfeabaf9ff97c20c6c7ee409f9/frozenlist-1.8.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:5c1c8e78426e59b3f8005e9b19f6ff46e5845895adbde20ece9218319eca6506", size = 283067, upload-time = "2025-10-06T05:36:57.965Z" }, - { url = "https://files.pythonhosted.org/packages/dc/48/c7b163063d55a83772b268e6d1affb960771b0e203b632cfe09522d67ea5/frozenlist-1.8.0-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:eefdba20de0d938cec6a89bd4d70f346a03108a19b9df4248d3cf0d88f1b0f51", size = 292101, upload-time = "2025-10-06T05:36:59.237Z" }, - { url = "https://files.pythonhosted.org/packages/9f/d0/2366d3c4ecdc2fd391e0afa6e11500bfba0ea772764d631bbf82f0136c9d/frozenlist-1.8.0-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:cf253e0e1c3ceb4aaff6df637ce033ff6535fb8c70a764a8f46aafd3d6ab798e", size = 289901, upload-time = "2025-10-06T05:37:00.811Z" }, - { url = "https://files.pythonhosted.org/packages/b8/94/daff920e82c1b70e3618a2ac39fbc01ae3e2ff6124e80739ce5d71c9b920/frozenlist-1.8.0-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:032efa2674356903cd0261c4317a561a6850f3ac864a63fc1583147fb05a79b0", size = 289395, upload-time = "2025-10-06T05:37:02.115Z" }, - { url = "https://files.pythonhosted.org/packages/e3/20/bba307ab4235a09fdcd3cc5508dbabd17c4634a1af4b96e0f69bfe551ebd/frozenlist-1.8.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:6da155091429aeba16851ecb10a9104a108bcd32f6c1642867eadaee401c1c41", size = 283659, upload-time = "2025-10-06T05:37:03.711Z" }, - { url = "https://files.pythonhosted.org/packages/fd/00/04ca1c3a7a124b6de4f8a9a17cc2fcad138b4608e7a3fc5877804b8715d7/frozenlist-1.8.0-cp313-cp313t-win32.whl", hash = "sha256:0f96534f8bfebc1a394209427d0f8a63d343c9779cda6fc25e8e121b5fd8555b", size = 43492, upload-time = "2025-10-06T05:37:04.915Z" }, - { url = "https://files.pythonhosted.org/packages/59/5e/c69f733a86a94ab10f68e496dc6b7e8bc078ebb415281d5698313e3af3a1/frozenlist-1.8.0-cp313-cp313t-win_amd64.whl", hash = "sha256:5d63a068f978fc69421fb0e6eb91a9603187527c86b7cd3f534a5b77a592b888", size = 48034, upload-time = "2025-10-06T05:37:06.343Z" }, - { url = "https://files.pythonhosted.org/packages/16/6c/be9d79775d8abe79b05fa6d23da99ad6e7763a1d080fbae7290b286093fd/frozenlist-1.8.0-cp313-cp313t-win_arm64.whl", hash = "sha256:bf0a7e10b077bf5fb9380ad3ae8ce20ef919a6ad93b4552896419ac7e1d8e042", size = 41749, upload-time = "2025-10-06T05:37:07.431Z" }, { url = "https://files.pythonhosted.org/packages/9a/9a/e35b4a917281c0b8419d4207f4334c8e8c5dbf4f3f5f9ada73958d937dcc/frozenlist-1.8.0-py3-none-any.whl", hash = "sha256:0c18a16eab41e82c295618a77502e17b195883241c563b00f0aa5106fc4eaa0d", size = 13409, upload-time = "2025-10-06T05:38:16.721Z" }, ] @@ -1653,8 +1444,6 @@ sdist = { url = "https://files.pythonhosted.org/packages/03/41/4b9c02f99e4c5fb47 wheels = [ { url = "https://files.pythonhosted.org/packages/ce/a9/a780cc66f86335a6019f557a8aaca8fbb970728f0efd2430d15ff1beae0e/google_crc32c-1.8.0-cp312-cp312-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:14f87e04d613dfa218d6135e81b78272c3b904e2a7053b841481b38a7d901411", size = 33364, upload-time = "2025-12-16T00:40:22.96Z" }, { url = "https://files.pythonhosted.org/packages/21/3f/3457ea803db0198c9aaca2dd373750972ce28a26f00544b6b85088811939/google_crc32c-1.8.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:cb5c869c2923d56cb0c8e6bcdd73c009c36ae39b652dbe46a05eb4ef0ad01454", size = 33740, upload-time = "2025-12-16T00:40:23.96Z" }, - { url = "https://files.pythonhosted.org/packages/ce/42/b468aec74a0354b34c8cbf748db20d6e350a68a2b0912e128cabee49806c/google_crc32c-1.8.0-cp313-cp313-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:3b9776774b24ba76831609ffbabce8cdf6fa2bd5e9df37b594221c7e333a81fa", size = 33344, upload-time = "2025-12-16T00:40:24.742Z" }, - { url = "https://files.pythonhosted.org/packages/1c/e8/b33784d6fc77fb5062a8a7854e43e1e618b87d5ddf610a88025e4de6226e/google_crc32c-1.8.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:89c17d53d75562edfff86679244830599ee0a48efc216200691de8b02ab6b2b8", size = 33694, upload-time = "2025-12-16T00:40:25.505Z" }, ] [[package]] @@ -1687,7 +1476,6 @@ version = "6.12.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "anyio", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, - { name = "audioop-lts", marker = "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'" }, { name = "brotli", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, { name = "fastapi", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, { name = "gradio-client", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, @@ -1767,13 +1555,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/ca/84/36c6dcfddc093e108141f757c407902a05085e0c328007cb090d56646cdf/grpcio-1.80.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2ed770b4c06984f3b47eb0517b1c69ad0b84ef3f40128f51448433be904634cd", size = 7383811, upload-time = "2026-03-30T08:47:26.517Z" }, { url = "https://files.pythonhosted.org/packages/7c/ef/f3a77e3dc5b471a0ec86c564c98d6adfa3510d38f8ee99010410858d591e/grpcio-1.80.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:256507e2f524092f1473071a05e65a5b10d84b82e3ff24c5b571513cfaa61e2f", size = 8393860, upload-time = "2026-03-30T08:47:29.439Z" }, { url = "https://files.pythonhosted.org/packages/9b/8d/9d4d27ed7f33d109c50d6b5ce578a9914aa68edab75d65869a17e630a8d1/grpcio-1.80.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:9a6284a5d907c37db53350645567c522be314bac859a64a7a5ca63b77bb7958f", size = 7830132, upload-time = "2026-03-30T08:47:33.254Z" }, - { url = "https://files.pythonhosted.org/packages/2f/3a/7c3c25789e3f069e581dc342e03613c5b1cb012c4e8c7d9d5cf960a75856/grpcio-1.80.0-cp313-cp313-linux_armv7l.whl", hash = "sha256:e9e408fc016dffd20661f0126c53d8a31c2821b5c13c5d67a0f5ed5de93319ad", size = 6017243, upload-time = "2026-03-30T08:47:40.075Z" }, - { url = "https://files.pythonhosted.org/packages/18/3a/23347d35f76f639e807fb7a36fad3068aed100996849a33809591f26eca6/grpcio-1.80.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:8ac393b58aa16991a2f1144ec578084d544038c12242da3a215966b512904d0f", size = 6567644, upload-time = "2026-03-30T08:47:46.806Z" }, - { url = "https://files.pythonhosted.org/packages/ff/40/96e07ecb604a6a67ae6ab151e3e35b132875d98bc68ec65f3e5ab3e781d7/grpcio-1.80.0-cp313-cp313-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:68e5851ac4b9afe07e7f84483803ad167852570d65326b34d54ca560bfa53fb6", size = 7277830, upload-time = "2026-03-30T08:47:49.643Z" }, - { url = "https://files.pythonhosted.org/packages/9b/e2/da1506ecea1f34a5e365964644b35edef53803052b763ca214ba3870c856/grpcio-1.80.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:873ff5d17d68992ef6605330127425d2fc4e77e612fa3c3e0ed4e668685e3140", size = 6783216, upload-time = "2026-03-30T08:47:52.817Z" }, - { url = "https://files.pythonhosted.org/packages/44/83/3b20ff58d0c3b7f6caaa3af9a4174d4023701df40a3f39f7f1c8e7c48f9d/grpcio-1.80.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:2bea16af2750fd0a899bf1abd9022244418b55d1f37da2202249ba4ba673838d", size = 7385866, upload-time = "2026-03-30T08:47:55.687Z" }, - { url = "https://files.pythonhosted.org/packages/47/45/55c507599c5520416de5eefecc927d6a0d7af55e91cfffb2e410607e5744/grpcio-1.80.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ba0db34f7e1d803a878284cd70e4c63cb6ae2510ba51937bf8f45ba997cefcf7", size = 8391602, upload-time = "2026-03-30T08:47:58.303Z" }, - { url = "https://files.pythonhosted.org/packages/10/bb/dd06f4c24c01db9cf11341b547d0a016b2c90ed7dbbb086a5710df7dd1d7/grpcio-1.80.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8eb613f02d34721f1acf3626dfdb3545bd3c8505b0e52bf8b5710a28d02e8aa7", size = 7826752, upload-time = "2026-03-30T08:48:01.311Z" }, ] [[package]] @@ -1830,15 +1611,6 @@ version = "0.1.9" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/1a/eb/8fc64f40388c29ce8ce3b2b180a089d4d6b25b1d0d232d016704cb852104/hf_transfer-0.1.9.tar.gz", hash = "sha256:035572865dab29d17e783fbf1e84cf1cb24f3fcf8f1b17db1cfc7fdf139f02bf", size = 25201, upload-time = "2025-01-07T10:05:12.947Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/fb/38/130a5ac3747f104033591bcac1c961cb1faadfdc91704f59b09c0b465ff2/hf_transfer-0.1.9-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8674026f21ed369aa2a0a4b46000aca850fc44cd2b54af33a172ce5325b4fc82", size = 3726676, upload-time = "2025-01-07T10:04:11.539Z" }, - { url = "https://files.pythonhosted.org/packages/15/a1/f4e27c5ad17aac616ae0849e2aede5aae31db8267a948c6b3eeb9fd96446/hf_transfer-0.1.9-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3a736dfbb2c84f5a2c975478ad200c0c8bfcb58a25a35db402678fb87ce17fa4", size = 3062920, upload-time = "2025-01-07T10:04:16.297Z" }, - { url = "https://files.pythonhosted.org/packages/8d/0d/727abdfba39bc3f1132cfa4c970588c2c0bb0d82fe2d645cc10f4e2f8e0b/hf_transfer-0.1.9-cp313-cp313t-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:504b8427fd785dd8546d53b9fafe6e436bd7a3adf76b9dce556507650a7b4567", size = 3578681, upload-time = "2025-01-07T10:04:29.702Z" }, - { url = "https://files.pythonhosted.org/packages/50/d0/2b213eb1ea8b1252ccaf1a6c804d0aba03fea38aae4124df6a3acb70511a/hf_transfer-0.1.9-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2c7fc1b85f4d0f76e452765d7648c9f4bfd0aedb9ced2ae1ebfece2d8cfaf8e2", size = 3398837, upload-time = "2025-01-07T10:04:22.778Z" }, - { url = "https://files.pythonhosted.org/packages/8c/8a/79dbce9006e0bd6b74516f97451a7b7c64dbbb426df15d901dd438cfeee3/hf_transfer-0.1.9-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0d991376f0eac70a60f0cbc95602aa708a6f7c8617f28b4945c1431d67b8e3c8", size = 3546986, upload-time = "2025-01-07T10:04:36.415Z" }, - { url = "https://files.pythonhosted.org/packages/a9/f7/9ac239b6ee6fe0bad130325d987a93ea58c4118e50479f0786f1733b37e8/hf_transfer-0.1.9-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:e6ac4eddcd99575ed3735ed911ddf9d1697e2bd13aa3f0ad7e3904dd4863842e", size = 4071715, upload-time = "2025-01-07T10:04:53.224Z" }, - { url = "https://files.pythonhosted.org/packages/d8/a3/0ed697279f5eeb7a40f279bd783cf50e6d0b91f24120dcf66ef2cf8822b4/hf_transfer-0.1.9-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:57fd9880da1ee0f47250f735f791fab788f0aa1ee36afc49f761349869c8b4d9", size = 3388081, upload-time = "2025-01-07T10:04:57.818Z" }, - { url = "https://files.pythonhosted.org/packages/dc/eb/47e477bdf1d784f31c7540db6cc8c354b777e51a186897a7abda34517f36/hf_transfer-0.1.9-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:5d561f0520f493c66b016d99ceabe69c23289aa90be38dd802d2aef279f15751", size = 3658654, upload-time = "2025-01-07T10:05:03.168Z" }, - { url = "https://files.pythonhosted.org/packages/45/07/6661e43fbee09594a8a5e9bb778107d95fe38dac4c653982afe03d32bd4d/hf_transfer-0.1.9-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:a5b366d34cd449fe9b20ef25941e6eef0460a2f74e7389f02e673e1f88ebd538", size = 3690551, upload-time = "2025-01-07T10:05:09.238Z" }, { url = "https://files.pythonhosted.org/packages/8e/a2/cd7885bc9959421065a6fae0fe67b6c55becdeda4e69b873e52976f9a9f0/hf_transfer-0.1.9-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8fd0167c4407a3bc4cdd0307e65ada2294ec04f1813d8a69a5243e379b22e9d8", size = 3728604, upload-time = "2025-01-07T10:04:14.173Z" }, { url = "https://files.pythonhosted.org/packages/f6/2e/a072cf196edfeda3310c9a5ade0a0fdd785e6154b3ce24fc738c818da2a7/hf_transfer-0.1.9-cp38-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ee8b10afedcb75f71091bcc197c526a6ebf5c58bbbadb34fdeee6160f55f619f", size = 3064995, upload-time = "2025-01-07T10:04:18.663Z" }, { url = "https://files.pythonhosted.org/packages/c2/84/aec9ef4c0fab93c1ea2b1badff38c78b4b2f86f0555b26d2051dbc920cde/hf_transfer-0.1.9-cp38-abi3-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5828057e313de59300dd1abb489444bc452efe3f479d3c55b31a8f680936ba42", size = 3580908, upload-time = "2025-01-07T10:04:32.834Z" }, @@ -1856,14 +1628,6 @@ version = "1.3.2" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/8b/cb/9bb543bd987ffa1ee48202cc96a756951b734b79a542335c566148ade36c/hf_xet-1.3.2.tar.gz", hash = "sha256:e130ee08984783d12717444e538587fa2119385e5bd8fc2bb9f930419b73a7af", size = 643646, upload-time = "2026-02-27T17:26:08.051Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/49/75/462285971954269432aad2e7938c5c7ff9ec7d60129cec542ab37121e3d6/hf_xet-1.3.2-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:335a8f36c55fd35a92d0062f4e9201b4015057e62747b7e7001ffb203c0ee1d2", size = 3761019, upload-time = "2026-02-27T17:25:49.441Z" }, - { url = "https://files.pythonhosted.org/packages/35/56/987b0537ddaf88e17192ea09afa8eca853e55f39a4721578be436f8409df/hf_xet-1.3.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:c1ae4d3a716afc774e66922f3cac8206bfa707db13f6a7e62dfff74bfc95c9a8", size = 3521565, upload-time = "2026-02-27T17:25:47.469Z" }, - { url = "https://files.pythonhosted.org/packages/a8/5c/7e4a33a3d689f77761156cc34558047569e54af92e4d15a8f493229f6767/hf_xet-1.3.2-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d6dbdf231efac0b9b39adcf12a07f0c030498f9212a18e8c50224d0e84ab803d", size = 4176494, upload-time = "2026-02-27T17:25:40.247Z" }, - { url = "https://files.pythonhosted.org/packages/6b/b3/71e856bf9d9a69b3931837e8bf22e095775f268c8edcd4a9e8c355f92484/hf_xet-1.3.2-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:c1980abfb68ecf6c1c7983379ed7b1e2b49a1aaf1a5aca9acc7d48e5e2e0a961", size = 3955601, upload-time = "2026-02-27T17:25:38.376Z" }, - { url = "https://files.pythonhosted.org/packages/63/d7/aecf97b3f0a981600a67ff4db15e2d433389d698a284bb0ea5d8fcdd6f7f/hf_xet-1.3.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:1c88fbd90ad0d27c46b77a445f0a436ebaa94e14965c581123b68b1c52f5fd30", size = 4154770, upload-time = "2026-02-27T17:25:56.756Z" }, - { url = "https://files.pythonhosted.org/packages/e2/e1/3af961f71a40e09bf5ee909842127b6b00f5ab4ee3817599dc0771b79893/hf_xet-1.3.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:35b855024ca37f2dd113ac1c08993e997fbe167b9d61f9ef66d3d4f84015e508", size = 4394161, upload-time = "2026-02-27T17:25:58.111Z" }, - { url = "https://files.pythonhosted.org/packages/a1/c3/859509bade9178e21b8b1db867b8e10e9f817ab9ac1de77cb9f461ced765/hf_xet-1.3.2-cp313-cp313t-win_amd64.whl", hash = "sha256:31612ba0629046e425ba50375685a2586e11fb9144270ebabd75878c3eaf6378", size = 3637377, upload-time = "2026-02-27T17:26:10.611Z" }, - { url = "https://files.pythonhosted.org/packages/05/7f/724cfbef4da92d577b71f68bf832961c8919f36c60d28d289a9fc9d024d4/hf_xet-1.3.2-cp313-cp313t-win_arm64.whl", hash = "sha256:433c77c9f4e132b562f37d66c9b22c05b5479f243a1f06a120c1c06ce8b1502a", size = 3497875, upload-time = "2026-02-27T17:26:09.034Z" }, { url = "https://files.pythonhosted.org/packages/d8/28/dbb024e2e3907f6f3052847ca7d1a2f7a3972fafcd53ff79018977fcb3e4/hf_xet-1.3.2-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:f93b7595f1d8fefddfede775c18b5c9256757824f7f6832930b49858483cd56f", size = 3763961, upload-time = "2026-02-27T17:25:52.537Z" }, { url = "https://files.pythonhosted.org/packages/e4/71/b99aed3823c9d1795e4865cf437d651097356a3f38c7d5877e4ac544b8e4/hf_xet-1.3.2-cp37-abi3-macosx_11_0_arm64.whl", hash = "sha256:a85d3d43743174393afe27835bde0cd146e652b5fcfdbcd624602daef2ef3259", size = 3526171, upload-time = "2026-02-27T17:25:50.968Z" }, { url = "https://files.pythonhosted.org/packages/9d/ca/907890ce6ef5598b5920514f255ed0a65f558f820515b18db75a51b2f878/hf_xet-1.3.2-cp37-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7c2a054a97c44e136b1f7f5a78f12b3efffdf2eed3abc6746fc5ea4b39511633", size = 4180750, upload-time = "2026-02-27T17:25:43.125Z" }, @@ -1906,10 +1670,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/11/7d/71fee6f1844e6fa378f2eddde6c3e41ce3a1fb4b2d81118dd544e3441ec0/httptools-0.7.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7fe6e96090df46b36ccfaf746f03034e5ab723162bc51b0a4cf58305324036f2", size = 511440, upload-time = "2025-10-10T03:54:42.452Z" }, { url = "https://files.pythonhosted.org/packages/22/a5/079d216712a4f3ffa24af4a0381b108aa9c45b7a5cc6eb141f81726b1823/httptools-0.7.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:f72fdbae2dbc6e68b8239defb48e6a5937b12218e6ffc2c7846cc37befa84362", size = 495186, upload-time = "2025-10-10T03:54:43.937Z" }, { url = "https://files.pythonhosted.org/packages/e9/9e/025ad7b65278745dee3bd0ebf9314934c4592560878308a6121f7f812084/httptools-0.7.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e99c7b90a29fd82fea9ef57943d501a16f3404d7b9ee81799d41639bdaae412c", size = 499192, upload-time = "2025-10-10T03:54:45.003Z" }, - { url = "https://files.pythonhosted.org/packages/32/6a/6aaa91937f0010d288d3d124ca2946d48d60c3a5ee7ca62afe870e3ea011/httptools-0.7.1-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:04c6c0e6c5fb0739c5b8a9eb046d298650a0ff38cf42537fc372b28dc7e4472c", size = 478596, upload-time = "2025-10-10T03:54:48.919Z" }, - { url = "https://files.pythonhosted.org/packages/6d/70/023d7ce117993107be88d2cbca566a7c1323ccbaf0af7eabf2064fe356f6/httptools-0.7.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:69d4f9705c405ae3ee83d6a12283dc9feba8cc6aaec671b412917e644ab4fa66", size = 473268, upload-time = "2025-10-10T03:54:49.993Z" }, - { 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" }, ] [[package]] @@ -2145,17 +1905,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/2e/48/76750835b87029342727c1a268bea8878ab988caf81ee4e7b880900eeb5a/jiter-0.14.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7d9d51eb96c82a9652933bd769fe6de66877d6eb2b2440e281f2938c51b5643e", size = 393172, upload-time = "2026-04-10T14:26:38.097Z" }, { url = "https://files.pythonhosted.org/packages/a6/60/456c4e81d5c8045279aefe60e9e483be08793828800a4e64add8fdde7f2a/jiter-0.14.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d824ca4148b705970bf4e120924a212fdfca9859a73e42bd7889a63a4ea6bb98", size = 520300, upload-time = "2026-04-10T14:26:39.532Z" }, { url = "https://files.pythonhosted.org/packages/a8/9f/2020e0984c235f678dced38fe4eec3058cf528e6af36ebf969b410305941/jiter-0.14.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:ff3a6465b3a0f54b1a430f45c3c0ba7d61ceb45cbc3e33f9e1a7f638d690baf3", size = 553059, upload-time = "2026-04-10T14:26:40.991Z" }, - { url = "https://files.pythonhosted.org/packages/7d/5e/2d0fee155826a968a832cc32438de5e2a193292c8721ca70d0b53e58245b/jiter-0.14.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77f4ea612fe8b84b8b04e51d0e78029ecf3466348e25973f953de6e6a59aa4c1", size = 343406, upload-time = "2026-04-10T14:26:50.762Z" }, - { url = "https://files.pythonhosted.org/packages/70/af/bf9ee0d3a4f8dc0d679fc1337f874fe60cdbf841ebbb304b374e1c9aaceb/jiter-0.14.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:62fe2451f8fcc0240261e6a4df18ecbcd58327857e61e625b2393ea3b468aac9", size = 369415, upload-time = "2026-04-10T14:26:52.188Z" }, - { url = "https://files.pythonhosted.org/packages/0f/83/8e8561eadba31f4d3948a5b712fb0447ec71c3560b57a855449e7b8ddc98/jiter-0.14.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6112f26f5afc75bcb475787d29da3aa92f9d09c7858f632f4be6ffe607be82e9", size = 461456, upload-time = "2026-04-10T14:26:53.611Z" }, - { url = "https://files.pythonhosted.org/packages/f6/c9/c5299e826a5fe6108d172b344033f61c69b1bb979dd8d9ddd4278a160971/jiter-0.14.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:215a6cb8fb7dc702aa35d475cc00ddc7f970e5c0b1417fb4b4ac5d82fa2a29db", size = 378488, upload-time = "2026-04-10T14:26:55.211Z" }, - { url = "https://files.pythonhosted.org/packages/5d/37/c16d9d15c0a471b8644b1abe3c82668092a707d9bedcf076f24ff2e380cd/jiter-0.14.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc4ab96a30fb3cb2c7e0cd33f7616c8860da5f5674438988a54ac717caccdbaa", size = 353242, upload-time = "2026-04-10T14:26:56.705Z" }, - { url = "https://files.pythonhosted.org/packages/58/ea/8050cb0dc654e728e1bfacbc0c640772f2181af5dedd13ae70145743a439/jiter-0.14.0-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:3a99c1387b1f2928f799a9de899193484d66206a50e98233b6b088a7f0c1edb2", size = 356823, upload-time = "2026-04-10T14:26:58.281Z" }, - { url = "https://files.pythonhosted.org/packages/b0/3b/cf71506d270e5f84d97326bf220e47aed9b95e9a4a060758fb07772170ab/jiter-0.14.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ab18d11074485438695f8d34a1b6da61db9754248f96d51341956607a8f39985", size = 392564, upload-time = "2026-04-10T14:27:00.018Z" }, - { url = "https://files.pythonhosted.org/packages/b0/cc/8c6c74a3efb5bd671bfd14f51e8a73375464ca914b1551bc3b40e26ac2c9/jiter-0.14.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:801028dcfc26ac0895e4964cbc0fd62c73be9fd4a7d7b1aaf6e5790033a719b7", size = 520322, upload-time = "2026-04-10T14:27:01.664Z" }, - { url = "https://files.pythonhosted.org/packages/41/24/68d7b883ec959884ddf00d019b2e0e82ba81b167e1253684fa90519ce33c/jiter-0.14.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:ad425b087aafb4a1c7e1e98a279200743b9aaf30c3e0ba723aec93f061bd9bc8", size = 552619, upload-time = "2026-04-10T14:27:03.316Z" }, - { url = "https://files.pythonhosted.org/packages/ad/c7/b002a7d8b8957ac3d469bd59c18ef4b1595a5216ae0de639a287b9816023/jiter-0.14.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7b25beaa0d4447ea8c7ae0c18c688905d34840d7d0b937f2f7bdd52162c98a40", size = 346563, upload-time = "2026-04-10T14:27:11.287Z" }, - { url = "https://files.pythonhosted.org/packages/f9/3b/f8d07580d8706021d255a6356b8fab13ee4c869412995550ce6ed4ddf97d/jiter-0.14.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:651a8758dd413c51e3b7f6557cdc6921faf70b14106f45f969f091f5cda990ea", size = 357928, upload-time = "2026-04-10T14:27:12.729Z" }, { url = "https://files.pythonhosted.org/packages/ca/44/e26ede3f0caeff93f222559cb0cc4ca68579f07d009d7b6010c5b586f9b1/jiter-0.14.0-graalpy312-graalpy250_312_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:432c4db5255d86a259efde91e55cb4c8d18c0521d844c9e2e7efcce3899fb016", size = 343039, upload-time = "2026-04-10T14:28:38.356Z" }, { url = "https://files.pythonhosted.org/packages/da/e9/1f9ada30cef7b05e74bb06f52127e7a724976c225f46adb65c37b1dadfb6/jiter-0.14.0-graalpy312-graalpy250_312_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:67f00d94b281174144d6532a04b66a12cb866cbdc47c3af3bfe2973677f9861a", size = 349613, upload-time = "2026-04-10T14:28:40.066Z" }, ] @@ -2435,31 +2184,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/39/e9/61e4813b2c97e86b6fdbd4dd824bf72d28bcd8d4849b8084a357bc0dd64d/kiwisolver-1.4.9-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ed0fecd28cc62c54b262e3736f8bb2512d8dcfdc2bcf08be5f47f96bf405b145", size = 2291817, upload-time = "2025-08-10T21:26:22.812Z" }, { url = "https://files.pythonhosted.org/packages/a0/41/85d82b0291db7504da3c2defe35c9a8a5c9803a730f297bd823d11d5fb77/kiwisolver-1.4.9-cp312-cp312-win_amd64.whl", hash = "sha256:f68208a520c3d86ea51acf688a3e3002615a7f0238002cccc17affecc86a8a54", size = 73895, upload-time = "2025-08-10T21:26:24.37Z" }, { url = "https://files.pythonhosted.org/packages/e2/92/5f3068cf15ee5cb624a0c7596e67e2a0bb2adee33f71c379054a491d07da/kiwisolver-1.4.9-cp312-cp312-win_arm64.whl", hash = "sha256:2c1a4f57df73965f3f14df20b80ee29e6a7930a57d2d9e8491a25f676e197c60", size = 64992, upload-time = "2025-08-10T21:26:25.732Z" }, - { url = "https://files.pythonhosted.org/packages/31/c1/c2686cda909742ab66c7388e9a1a8521a59eb89f8bcfbee28fc980d07e24/kiwisolver-1.4.9-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:a5d0432ccf1c7ab14f9949eec60c5d1f924f17c037e9f8b33352fa05799359b8", size = 123681, upload-time = "2025-08-10T21:26:26.725Z" }, - { url = "https://files.pythonhosted.org/packages/ca/f0/f44f50c9f5b1a1860261092e3bc91ecdc9acda848a8b8c6abfda4a24dd5c/kiwisolver-1.4.9-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efb3a45b35622bb6c16dbfab491a8f5a391fe0e9d45ef32f4df85658232ca0e2", size = 66464, upload-time = "2025-08-10T21:26:27.733Z" }, - { url = "https://files.pythonhosted.org/packages/2d/7a/9d90a151f558e29c3936b8a47ac770235f436f2120aca41a6d5f3d62ae8d/kiwisolver-1.4.9-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:1a12cf6398e8a0a001a059747a1cbf24705e18fe413bc22de7b3d15c67cffe3f", size = 64961, upload-time = "2025-08-10T21:26:28.729Z" }, - { url = "https://files.pythonhosted.org/packages/e9/e9/f218a2cb3a9ffbe324ca29a9e399fa2d2866d7f348ec3a88df87fc248fc5/kiwisolver-1.4.9-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:b67e6efbf68e077dd71d1a6b37e43e1a99d0bff1a3d51867d45ee8908b931098", size = 1474607, upload-time = "2025-08-10T21:26:29.798Z" }, - { url = "https://files.pythonhosted.org/packages/d9/28/aac26d4c882f14de59041636292bc838db8961373825df23b8eeb807e198/kiwisolver-1.4.9-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5656aa670507437af0207645273ccdfee4f14bacd7f7c67a4306d0dcaeaf6eed", size = 1276546, upload-time = "2025-08-10T21:26:31.401Z" }, - { url = "https://files.pythonhosted.org/packages/8b/ad/8bfc1c93d4cc565e5069162f610ba2f48ff39b7de4b5b8d93f69f30c4bed/kiwisolver-1.4.9-cp313-cp313-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:bfc08add558155345129c7803b3671cf195e6a56e7a12f3dde7c57d9b417f525", size = 1294482, upload-time = "2025-08-10T21:26:32.721Z" }, - { url = "https://files.pythonhosted.org/packages/da/f1/6aca55ff798901d8ce403206d00e033191f63d82dd708a186e0ed2067e9c/kiwisolver-1.4.9-cp313-cp313-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:40092754720b174e6ccf9e845d0d8c7d8e12c3d71e7fc35f55f3813e96376f78", size = 1343720, upload-time = "2025-08-10T21:26:34.032Z" }, - { url = "https://files.pythonhosted.org/packages/d1/91/eed031876c595c81d90d0f6fc681ece250e14bf6998c3d7c419466b523b7/kiwisolver-1.4.9-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:497d05f29a1300d14e02e6441cf0f5ee81c1ff5a304b0d9fb77423974684e08b", size = 2224907, upload-time = "2025-08-10T21:26:35.824Z" }, - { url = "https://files.pythonhosted.org/packages/e9/ec/4d1925f2e49617b9cca9c34bfa11adefad49d00db038e692a559454dfb2e/kiwisolver-1.4.9-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:bdd1a81a1860476eb41ac4bc1e07b3f07259e6d55bbf739b79c8aaedcf512799", size = 2321334, upload-time = "2025-08-10T21:26:37.534Z" }, - { url = "https://files.pythonhosted.org/packages/43/cb/450cd4499356f68802750c6ddc18647b8ea01ffa28f50d20598e0befe6e9/kiwisolver-1.4.9-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:e6b93f13371d341afee3be9f7c5964e3fe61d5fa30f6a30eb49856935dfe4fc3", size = 2488313, upload-time = "2025-08-10T21:26:39.191Z" }, - { url = "https://files.pythonhosted.org/packages/71/67/fc76242bd99f885651128a5d4fa6083e5524694b7c88b489b1b55fdc491d/kiwisolver-1.4.9-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:d75aa530ccfaa593da12834b86a0724f58bff12706659baa9227c2ccaa06264c", size = 2291970, upload-time = "2025-08-10T21:26:40.828Z" }, - { url = "https://files.pythonhosted.org/packages/75/bd/f1a5d894000941739f2ae1b65a32892349423ad49c2e6d0771d0bad3fae4/kiwisolver-1.4.9-cp313-cp313-win_amd64.whl", hash = "sha256:dd0a578400839256df88c16abddf9ba14813ec5f21362e1fe65022e00c883d4d", size = 73894, upload-time = "2025-08-10T21:26:42.33Z" }, - { url = "https://files.pythonhosted.org/packages/95/38/dce480814d25b99a391abbddadc78f7c117c6da34be68ca8b02d5848b424/kiwisolver-1.4.9-cp313-cp313-win_arm64.whl", hash = "sha256:d4188e73af84ca82468f09cadc5ac4db578109e52acb4518d8154698d3a87ca2", size = 64995, upload-time = "2025-08-10T21:26:43.889Z" }, - { url = "https://files.pythonhosted.org/packages/e2/37/7d218ce5d92dadc5ebdd9070d903e0c7cf7edfe03f179433ac4d13ce659c/kiwisolver-1.4.9-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:5a0f2724dfd4e3b3ac5a82436a8e6fd16baa7d507117e4279b660fe8ca38a3a1", size = 126510, upload-time = "2025-08-10T21:26:44.915Z" }, - { url = "https://files.pythonhosted.org/packages/23/b0/e85a2b48233daef4b648fb657ebbb6f8367696a2d9548a00b4ee0eb67803/kiwisolver-1.4.9-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:1b11d6a633e4ed84fc0ddafd4ebfd8ea49b3f25082c04ad12b8315c11d504dc1", size = 67903, upload-time = "2025-08-10T21:26:45.934Z" }, - { url = "https://files.pythonhosted.org/packages/44/98/f2425bc0113ad7de24da6bb4dae1343476e95e1d738be7c04d31a5d037fd/kiwisolver-1.4.9-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:61874cdb0a36016354853593cffc38e56fc9ca5aa97d2c05d3dcf6922cd55a11", size = 66402, upload-time = "2025-08-10T21:26:47.101Z" }, - { url = "https://files.pythonhosted.org/packages/98/d8/594657886df9f34c4177cc353cc28ca7e6e5eb562d37ccc233bff43bbe2a/kiwisolver-1.4.9-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:60c439763a969a6af93b4881db0eed8fadf93ee98e18cbc35bc8da868d0c4f0c", size = 1582135, upload-time = "2025-08-10T21:26:48.665Z" }, - { url = "https://files.pythonhosted.org/packages/5c/c6/38a115b7170f8b306fc929e166340c24958347308ea3012c2b44e7e295db/kiwisolver-1.4.9-cp313-cp313t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:92a2f997387a1b79a75e7803aa7ded2cfbe2823852ccf1ba3bcf613b62ae3197", size = 1389409, upload-time = "2025-08-10T21:26:50.335Z" }, - { url = "https://files.pythonhosted.org/packages/bf/3b/e04883dace81f24a568bcee6eb3001da4ba05114afa622ec9b6fafdc1f5e/kiwisolver-1.4.9-cp313-cp313t-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a31d512c812daea6d8b3be3b2bfcbeb091dbb09177706569bcfc6240dcf8b41c", size = 1401763, upload-time = "2025-08-10T21:26:51.867Z" }, - { url = "https://files.pythonhosted.org/packages/9f/80/20ace48e33408947af49d7d15c341eaee69e4e0304aab4b7660e234d6288/kiwisolver-1.4.9-cp313-cp313t-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:52a15b0f35dad39862d376df10c5230155243a2c1a436e39eb55623ccbd68185", size = 1453643, upload-time = "2025-08-10T21:26:53.592Z" }, - { url = "https://files.pythonhosted.org/packages/64/31/6ce4380a4cd1f515bdda976a1e90e547ccd47b67a1546d63884463c92ca9/kiwisolver-1.4.9-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:a30fd6fdef1430fd9e1ba7b3398b5ee4e2887783917a687d86ba69985fb08748", size = 2330818, upload-time = "2025-08-10T21:26:55.051Z" }, - { url = "https://files.pythonhosted.org/packages/fa/e9/3f3fcba3bcc7432c795b82646306e822f3fd74df0ee81f0fa067a1f95668/kiwisolver-1.4.9-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:cc9617b46837c6468197b5945e196ee9ca43057bb7d9d1ae688101e4e1dddf64", size = 2419963, upload-time = "2025-08-10T21:26:56.421Z" }, - { 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" }, ] [[package]] @@ -2476,8 +2200,7 @@ name = "lark" version = "1.2.2" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "sys_platform != 'emscripten' and sys_platform != 'win32'", ] sdist = { url = "https://files.pythonhosted.org/packages/af/60/bc7622aefb2aee1c0b4ba23c1446d3e30225c8770b38d7aedbfb65ca9d5a/lark-1.2.2.tar.gz", hash = "sha256:ca807d0162cd16cef15a8feecb862d7319e7a09bdb13aef927968e45040fed80", size = 252132, upload-time = "2024-08-13T19:49:00.652Z" } wheels = [ @@ -2489,10 +2212,8 @@ name = "lark" version = "1.3.1" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "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 == 'win32'", - "python_full_version < '3.13' and sys_platform == 'emscripten'", + "sys_platform == 'win32'", + "sys_platform == 'emscripten'", ] sdist = { url = "https://files.pythonhosted.org/packages/da/34/28fff3ab31ccff1fd4f6c7c7b0ceb2b6968d8ea4950663eadcb5720591a0/lark-1.3.1.tar.gz", hash = "sha256:b426a7a6d6d53189d318f2b6236ab5d6429eaf09259f1ca33eb716eed10d2905", size = 382732, upload-time = "2025-10-27T18:25:56.653Z" } wheels = [ @@ -2516,17 +2237,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/61/de/1975200bb0285fc921c5981d9978ce6ce11ae6d797df815add94a5a848a3/librt-0.7.8-cp312-cp312-win32.whl", hash = "sha256:0241a6ed65e6666236ea78203a73d800dbed896cf12ae25d026d75dc1fcd1dac", size = 44057, upload-time = "2026-01-14T12:55:18.077Z" }, { url = "https://files.pythonhosted.org/packages/8e/cd/724f2d0b3461426730d4877754b65d39f06a41ac9d0a92d5c6840f72b9ae/librt-0.7.8-cp312-cp312-win_amd64.whl", hash = "sha256:6db5faf064b5bab9675c32a873436b31e01d66ca6984c6f7f92621656033a708", size = 50293, upload-time = "2026-01-14T12:55:19.179Z" }, { url = "https://files.pythonhosted.org/packages/bd/cf/7e899acd9ee5727ad8160fdcc9994954e79fab371c66535c60e13b968ffc/librt-0.7.8-cp312-cp312-win_arm64.whl", hash = "sha256:57175aa93f804d2c08d2edb7213e09276bd49097611aefc37e3fa38d1fb99ad0", size = 43574, upload-time = "2026-01-14T12:55:20.185Z" }, - { url = "https://files.pythonhosted.org/packages/a1/fe/b1f9de2829cf7fc7649c1dcd202cfd873837c5cc2fc9e526b0e7f716c3d2/librt-0.7.8-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:4c3995abbbb60b3c129490fa985dfe6cac11d88fc3c36eeb4fb1449efbbb04fc", size = 57500, upload-time = "2026-01-14T12:55:21.219Z" }, - { url = "https://files.pythonhosted.org/packages/eb/d4/4a60fbe2e53b825f5d9a77325071d61cd8af8506255067bf0c8527530745/librt-0.7.8-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:44e0c2cbc9bebd074cf2cdbe472ca185e824be4e74b1c63a8e934cea674bebf2", size = 59019, upload-time = "2026-01-14T12:55:22.256Z" }, - { url = "https://files.pythonhosted.org/packages/6a/37/61ff80341ba5159afa524445f2d984c30e2821f31f7c73cf166dcafa5564/librt-0.7.8-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:4d2f1e492cae964b3463a03dc77a7fe8742f7855d7258c7643f0ee32b6651dd3", size = 169015, upload-time = "2026-01-14T12:55:23.24Z" }, - { url = "https://files.pythonhosted.org/packages/1c/86/13d4f2d6a93f181ebf2fc953868826653ede494559da8268023fe567fca3/librt-0.7.8-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:451e7ffcef8f785831fdb791bd69211f47e95dc4c6ddff68e589058806f044c6", size = 178161, upload-time = "2026-01-14T12:55:24.826Z" }, - { url = "https://files.pythonhosted.org/packages/88/26/e24ef01305954fc4d771f1f09f3dd682f9eb610e1bec188ffb719374d26e/librt-0.7.8-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3469e1af9f1380e093ae06bedcbdd11e407ac0b303a56bbe9afb1d6824d4982d", size = 193015, upload-time = "2026-01-14T12:55:26.04Z" }, - { url = "https://files.pythonhosted.org/packages/88/a0/92b6bd060e720d7a31ed474d046a69bd55334ec05e9c446d228c4b806ae3/librt-0.7.8-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f11b300027ce19a34f6d24ebb0a25fd0e24a9d53353225a5c1e6cadbf2916b2e", size = 192038, upload-time = "2026-01-14T12:55:27.208Z" }, - { url = "https://files.pythonhosted.org/packages/06/bb/6f4c650253704279c3a214dad188101d1b5ea23be0606628bc6739456624/librt-0.7.8-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:4adc73614f0d3c97874f02f2c7fd2a27854e7e24ad532ea6b965459c5b757eca", size = 186006, upload-time = "2026-01-14T12:55:28.594Z" }, - { url = "https://files.pythonhosted.org/packages/dc/00/1c409618248d43240cadf45f3efb866837fa77e9a12a71481912135eb481/librt-0.7.8-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:60c299e555f87e4c01b2eca085dfccda1dde87f5a604bb45c2906b8305819a93", size = 206888, upload-time = "2026-01-14T12:55:30.214Z" }, - { url = "https://files.pythonhosted.org/packages/d9/83/b2cfe8e76ff5c1c77f8a53da3d5de62d04b5ebf7cf913e37f8bca43b5d07/librt-0.7.8-cp313-cp313-win32.whl", hash = "sha256:b09c52ed43a461994716082ee7d87618096851319bf695d57ec123f2ab708951", size = 44126, upload-time = "2026-01-14T12:55:31.44Z" }, - { url = "https://files.pythonhosted.org/packages/a9/0b/c59d45de56a51bd2d3a401fc63449c0ac163e4ef7f523ea8b0c0dee86ec5/librt-0.7.8-cp313-cp313-win_amd64.whl", hash = "sha256:f8f4a901a3fa28969d6e4519deceab56c55a09d691ea7b12ca830e2fa3461e34", size = 50262, upload-time = "2026-01-14T12:55:33.01Z" }, - { url = "https://files.pythonhosted.org/packages/fc/b9/973455cec0a1ec592395250c474164c4a58ebf3e0651ee920fef1a2623f1/librt-0.7.8-cp313-cp313-win_arm64.whl", hash = "sha256:43d4e71b50763fcdcf64725ac680d8cfa1706c928b844794a7aa0fa9ac8e5f09", size = 43600, upload-time = "2026-01-14T12:55:34.054Z" }, ] [[package]] @@ -2547,8 +2257,6 @@ sdist = { url = "https://files.pythonhosted.org/packages/89/6a/95a3d3610d5c75293 wheels = [ { url = "https://files.pythonhosted.org/packages/cb/da/8341fd3056419441286c8e26bf436923021005ece0bff5f41906476ae514/llvmlite-0.44.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0143a5ef336da14deaa8ec26c5449ad5b6a2b564df82fcef4be040b9cacfea9", size = 42361901, upload-time = "2025-01-20T11:13:46.711Z" }, { url = "https://files.pythonhosted.org/packages/53/ad/d79349dc07b8a395a99153d7ce8b01d6fcdc9f8231355a5df55ded649b61/llvmlite-0.44.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d752f89e31b66db6f8da06df8b39f9b91e78c5feea1bf9e8c1fba1d1c24c065d", size = 41184247, upload-time = "2025-01-20T11:13:56.159Z" }, - { url = "https://files.pythonhosted.org/packages/d2/1b/656f5a357de7135a3777bd735cc7c9b8f23b4d37465505bd0eaf4be9befe/llvmlite-0.44.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:46224058b13c96af1365290bdfebe9a6264ae62fb79b2b55693deed11657a8bf", size = 42361904, upload-time = "2025-01-20T11:14:22.949Z" }, - { url = "https://files.pythonhosted.org/packages/d8/e1/12c5f20cb9168fb3464a34310411d5ad86e4163c8ff2d14a2b57e5cc6bac/llvmlite-0.44.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:aa0097052c32bf721a4efc03bd109d335dfa57d9bffb3d4c24cc680711b8b4fc", size = 41184245, upload-time = "2025-01-20T11:14:31.731Z" }, ] [[package]] @@ -2611,19 +2319,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/41/c8/90afdb838705a736268fcffd2698c05e9a129144ce215d5e14db3bdfc295/lxml-6.0.4-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:c0d86e328405529bc93913add9ff377e8b8ea9be878e611f19dbac7766a84483", size = 5643497, upload-time = "2026-04-12T16:24:38.276Z" }, { url = "https://files.pythonhosted.org/packages/32/ec/1135261ec9822dafb90be0ff6fb0ec79cee0b7fe878833dfe5f2b8c393bd/lxml-6.0.4-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:3cce9420fe8f91eae5d457582599d282195c958cb670aa4bea313a79103ba33f", size = 5232185, upload-time = "2026-04-12T16:24:40.516Z" }, { url = "https://files.pythonhosted.org/packages/13/f2/7380b11cae6943720f525e5a28ad9dbead96ac710417e556b7c03f3a8af3/lxml-6.0.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:96214985ec194ce97b9028414e179cfb21230cba4e2413aee7e249461bb84f4d", size = 5259968, upload-time = "2026-04-12T16:24:42.917Z" }, - { url = "https://files.pythonhosted.org/packages/b5/ed/91e443366063d3fb7640ae2badd5d7b65be4095ac6d849788e39c043baae/lxml-6.0.4-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d385141b186cc39ebe4863c1e41936282c65df19b2d06a701dedc2a898877d6a", size = 4922791, upload-time = "2026-04-12T16:24:56.381Z" }, - { url = "https://files.pythonhosted.org/packages/30/4b/2243260b70974aca9ba0cc71bd668c0c3a79644d80ddcabbfbdb4b131848/lxml-6.0.4-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:0132bb040e9bb5a199302e12bf942741defbc52922a2a06ce9ff7be0d0046483", size = 5080972, upload-time = "2026-04-12T16:24:58.823Z" }, - { url = "https://files.pythonhosted.org/packages/f8/c3/54c53c4f772341bc12331557f8b0882a426f53133926306cbe6d7f0ee7e4/lxml-6.0.4-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:26aee5321e4aa1f07c9090a35f6ab8b703903fb415c6c823cfdb20ee0d779855", size = 4992236, upload-time = "2026-04-12T16:25:01.099Z" }, - { url = "https://files.pythonhosted.org/packages/be/0f/416de42e22f287585abee610eb0d1c2638c9fe24cee7e15136e0b5e138f8/lxml-6.0.4-cp313-cp313-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:b5652455de198ff76e02cfa57d5efc5f834fa45521aaf3fcc13d6b5a88bde23d", size = 5612398, upload-time = "2026-04-12T16:25:03.517Z" }, - { url = "https://files.pythonhosted.org/packages/7d/63/29a3fa79b8a182f5bd5b5bdcb6f625f49f08f41d60a26ca25482820a1b99/lxml-6.0.4-cp313-cp313-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:75842801fb48aea73f4c281b923a010dfb39bad75edf8ceb2198ec30c27f01cc", size = 5227480, upload-time = "2026-04-12T16:25:06.119Z" }, - { url = "https://files.pythonhosted.org/packages/7c/4a/44d1843de599b1c6dbe578e4248c2f15e7fac90c5c86eb26775eaeac0fe0/lxml-6.0.4-cp313-cp313-manylinux_2_28_i686.whl", hash = "sha256:94a1f74607a5a049ff6ff8de429fec922e643e32b5b08ec7a4fe49e8de76e17c", size = 5341001, upload-time = "2026-04-12T16:25:08.563Z" }, - { url = "https://files.pythonhosted.org/packages/0d/52/c8aebde49f169e4e3452e7756be35be1cb2903e30d961cb57aa65a27055f/lxml-6.0.4-cp313-cp313-manylinux_2_31_armv7l.whl", hash = "sha256:173cc246d3d3b6d3b6491f0b3aaf22ebdf2eed616879482acad8bd84d73eb231", size = 4699105, upload-time = "2026-04-12T16:25:10.757Z" }, - { url = "https://files.pythonhosted.org/packages/78/60/76fc3735c31c28b70220d99452fb72052e84b618693ca2524da96f0131d8/lxml-6.0.4-cp313-cp313-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f0f2ee1be1b72e9890da87e4e422f2f703ff4638fd5ec5383055db431e8e30e9", size = 5231095, upload-time = "2026-04-12T16:25:13.305Z" }, - { url = "https://files.pythonhosted.org/packages/e5/60/448f01c52110102f23df5f07b3f4fde57c8e13e497e182a743d125324c0b/lxml-6.0.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c51a274b7e8b9ce394c3f8b471eb0b23c1914eec64fdccf674e082daf72abf11", size = 5042411, upload-time = "2026-04-12T16:25:15.541Z" }, - { url = "https://files.pythonhosted.org/packages/4a/2a/90612a001fa4fa0ff0443ebb0256a542670fe35473734c559720293e7aff/lxml-6.0.4-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:210ea934cba1a1ec42f88c4190c4d5c67b2d14321a8faed9b39e8378198ff99d", size = 4768431, upload-time = "2026-04-12T16:25:17.581Z" }, - { url = "https://files.pythonhosted.org/packages/84/d8/572845a7d741c8a8ffeaf928185263e14d97fbd355de164677340951d7a5/lxml-6.0.4-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:14fe654a59eebe16368c51778caeb0c8fda6f897adcd9afe828d87d13b5d5e51", size = 5634972, upload-time = "2026-04-12T16:25:20.111Z" }, - { url = "https://files.pythonhosted.org/packages/d7/1d/392b8c9f8cf1d502bbec50dee137c7af3dd5def5e5cd84572fbf0ba0541c/lxml-6.0.4-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:ec160a2b7e2b3cb71ec35010b19a1adea05785d19ba5c9c5f986b64b78fef564", size = 5222909, upload-time = "2026-04-12T16:25:22.243Z" }, - { url = "https://files.pythonhosted.org/packages/21/ab/949fc96f825cf083612aee65d5a02eacc5eaeb2815561220e33e1e160677/lxml-6.0.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:d305b86ef10b23cf3a6d62a2ad23fa296f76495183ee623f64d2600f65ffe09c", size = 5249096, upload-time = "2026-04-12T16:25:24.781Z" }, ] [[package]] @@ -2664,28 +2359,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/2f/e1/78ee7a023dac597a5825441ebd17170785a9dab23de95d2c7508ade94e0e/markupsafe-3.0.3-cp312-cp312-win32.whl", hash = "sha256:d88b440e37a16e651bda4c7c2b930eb586fd15ca7406cb39e211fcff3bf3017d", size = 14540, upload-time = "2025-09-27T18:36:38.761Z" }, { url = "https://files.pythonhosted.org/packages/aa/5b/bec5aa9bbbb2c946ca2733ef9c4ca91c91b6a24580193e891b5f7dbe8e1e/markupsafe-3.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:26a5784ded40c9e318cfc2bdb30fe164bdb8665ded9cd64d500a34fb42067b1c", size = 15105, upload-time = "2025-09-27T18:36:39.701Z" }, { url = "https://files.pythonhosted.org/packages/e5/f1/216fc1bbfd74011693a4fd837e7026152e89c4bcf3e77b6692fba9923123/markupsafe-3.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:35add3b638a5d900e807944a078b51922212fb3dedb01633a8defc4b01a3c85f", size = 13906, upload-time = "2025-09-27T18:36:40.689Z" }, - { url = "https://files.pythonhosted.org/packages/38/2f/907b9c7bbba283e68f20259574b13d005c121a0fa4c175f9bed27c4597ff/markupsafe-3.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e1cf1972137e83c5d4c136c43ced9ac51d0e124706ee1c8aa8532c1287fa8795", size = 11622, upload-time = "2025-09-27T18:36:41.777Z" }, - { url = "https://files.pythonhosted.org/packages/9c/d9/5f7756922cdd676869eca1c4e3c0cd0df60ed30199ffd775e319089cb3ed/markupsafe-3.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:116bb52f642a37c115f517494ea5feb03889e04df47eeff5b130b1808ce7c219", size = 12029, upload-time = "2025-09-27T18:36:43.257Z" }, - { url = "https://files.pythonhosted.org/packages/00/07/575a68c754943058c78f30db02ee03a64b3c638586fba6a6dd56830b30a3/markupsafe-3.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:133a43e73a802c5562be9bbcd03d090aa5a1fe899db609c29e8c8d815c5f6de6", size = 24374, upload-time = "2025-09-27T18:36:44.508Z" }, - { url = "https://files.pythonhosted.org/packages/a9/21/9b05698b46f218fc0e118e1f8168395c65c8a2c750ae2bab54fc4bd4e0e8/markupsafe-3.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ccfcd093f13f0f0b7fdd0f198b90053bf7b2f02a3927a30e63f3ccc9df56b676", size = 22980, upload-time = "2025-09-27T18:36:45.385Z" }, - { url = "https://files.pythonhosted.org/packages/7f/71/544260864f893f18b6827315b988c146b559391e6e7e8f7252839b1b846a/markupsafe-3.0.3-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:509fa21c6deb7a7a273d629cf5ec029bc209d1a51178615ddf718f5918992ab9", size = 21990, upload-time = "2025-09-27T18:36:46.916Z" }, - { url = "https://files.pythonhosted.org/packages/c2/28/b50fc2f74d1ad761af2f5dcce7492648b983d00a65b8c0e0cb457c82ebbe/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a4afe79fb3de0b7097d81da19090f4df4f8d3a2b3adaa8764138aac2e44f3af1", size = 23784, upload-time = "2025-09-27T18:36:47.884Z" }, - { url = "https://files.pythonhosted.org/packages/ed/76/104b2aa106a208da8b17a2fb72e033a5a9d7073c68f7e508b94916ed47a9/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:795e7751525cae078558e679d646ae45574b47ed6e7771863fcc079a6171a0fc", size = 21588, upload-time = "2025-09-27T18:36:48.82Z" }, - { url = "https://files.pythonhosted.org/packages/b5/99/16a5eb2d140087ebd97180d95249b00a03aa87e29cc224056274f2e45fd6/markupsafe-3.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8485f406a96febb5140bfeca44a73e3ce5116b2501ac54fe953e488fb1d03b12", size = 23041, upload-time = "2025-09-27T18:36:49.797Z" }, - { url = "https://files.pythonhosted.org/packages/19/bc/e7140ed90c5d61d77cea142eed9f9c303f4c4806f60a1044c13e3f1471d0/markupsafe-3.0.3-cp313-cp313-win32.whl", hash = "sha256:bdd37121970bfd8be76c5fb069c7751683bdf373db1ed6c010162b2a130248ed", size = 14543, upload-time = "2025-09-27T18:36:51.584Z" }, - { url = "https://files.pythonhosted.org/packages/05/73/c4abe620b841b6b791f2edc248f556900667a5a1cf023a6646967ae98335/markupsafe-3.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:9a1abfdc021a164803f4d485104931fb8f8c1efd55bc6b748d2f5774e78b62c5", size = 15113, upload-time = "2025-09-27T18:36:52.537Z" }, - { url = "https://files.pythonhosted.org/packages/f0/3a/fa34a0f7cfef23cf9500d68cb7c32dd64ffd58a12b09225fb03dd37d5b80/markupsafe-3.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:7e68f88e5b8799aa49c85cd116c932a1ac15caaa3f5db09087854d218359e485", size = 13911, upload-time = "2025-09-27T18:36:53.513Z" }, - { url = "https://files.pythonhosted.org/packages/e4/d7/e05cd7efe43a88a17a37b3ae96e79a19e846f3f456fe79c57ca61356ef01/markupsafe-3.0.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:218551f6df4868a8d527e3062d0fb968682fe92054e89978594c28e642c43a73", size = 11658, upload-time = "2025-09-27T18:36:54.819Z" }, - { url = "https://files.pythonhosted.org/packages/99/9e/e412117548182ce2148bdeacdda3bb494260c0b0184360fe0d56389b523b/markupsafe-3.0.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3524b778fe5cfb3452a09d31e7b5adefeea8c5be1d43c4f810ba09f2ceb29d37", size = 12066, upload-time = "2025-09-27T18:36:55.714Z" }, - { url = "https://files.pythonhosted.org/packages/bc/e6/fa0ffcda717ef64a5108eaa7b4f5ed28d56122c9a6d70ab8b72f9f715c80/markupsafe-3.0.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4e885a3d1efa2eadc93c894a21770e4bc67899e3543680313b09f139e149ab19", size = 25639, upload-time = "2025-09-27T18:36:56.908Z" }, - { url = "https://files.pythonhosted.org/packages/96/ec/2102e881fe9d25fc16cb4b25d5f5cde50970967ffa5dddafdb771237062d/markupsafe-3.0.3-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8709b08f4a89aa7586de0aadc8da56180242ee0ada3999749b183aa23df95025", size = 23569, upload-time = "2025-09-27T18:36:57.913Z" }, - { url = "https://files.pythonhosted.org/packages/4b/30/6f2fce1f1f205fc9323255b216ca8a235b15860c34b6798f810f05828e32/markupsafe-3.0.3-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:b8512a91625c9b3da6f127803b166b629725e68af71f8184ae7e7d54686a56d6", size = 23284, upload-time = "2025-09-27T18:36:58.833Z" }, - { url = "https://files.pythonhosted.org/packages/58/47/4a0ccea4ab9f5dcb6f79c0236d954acb382202721e704223a8aafa38b5c8/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9b79b7a16f7fedff2495d684f2b59b0457c3b493778c9eed31111be64d58279f", size = 24801, upload-time = "2025-09-27T18:36:59.739Z" }, - { url = "https://files.pythonhosted.org/packages/6a/70/3780e9b72180b6fecb83a4814d84c3bf4b4ae4bf0b19c27196104149734c/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:12c63dfb4a98206f045aa9563db46507995f7ef6d83b2f68eda65c307c6829eb", size = 22769, upload-time = "2025-09-27T18:37:00.719Z" }, - { url = "https://files.pythonhosted.org/packages/98/c5/c03c7f4125180fc215220c035beac6b9cb684bc7a067c84fc69414d315f5/markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8f71bc33915be5186016f675cd83a1e08523649b0e33efdb898db577ef5bb009", size = 23642, upload-time = "2025-09-27T18:37:01.673Z" }, - { 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" }, ] [[package]] @@ -2698,8 +2371,7 @@ dependencies = [ { name = "fonttools" }, { name = "kiwisolver" }, { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, - { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.13' and sys_platform == 'emscripten') or (python_full_version < '3.13' and sys_platform == 'win32')" }, - { name = "numpy", version = "2.4.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.13' and sys_platform == 'emscripten') or (python_full_version >= '3.13' and sys_platform == 'win32')" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform == 'emscripten' or sys_platform == 'win32'" }, { name = "packaging" }, { name = "pillow" }, { name = "pyparsing" }, @@ -2714,20 +2386,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/57/61/78cd5920d35b29fd2a0fe894de8adf672ff52939d2e9b43cb83cd5ce1bc7/matplotlib-3.10.8-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:99eefd13c0dc3b3c1b4d561c1169e65fe47aab7b8158754d7c084088e2329466", size = 9613040, upload-time = "2025-12-10T22:55:38.715Z" }, { url = "https://files.pythonhosted.org/packages/30/4e/c10f171b6e2f44d9e3a2b96efa38b1677439d79c99357600a62cc1e9594e/matplotlib-3.10.8-cp312-cp312-win_amd64.whl", hash = "sha256:dd80ecb295460a5d9d260df63c43f4afbdd832d725a531f008dad1664f458adf", size = 8142717, upload-time = "2025-12-10T22:55:41.103Z" }, { url = "https://files.pythonhosted.org/packages/f1/76/934db220026b5fef85f45d51a738b91dea7d70207581063cd9bd8fafcf74/matplotlib-3.10.8-cp312-cp312-win_arm64.whl", hash = "sha256:3c624e43ed56313651bc18a47f838b60d7b8032ed348911c54906b130b20071b", size = 8012751, upload-time = "2025-12-10T22:55:42.684Z" }, - { url = "https://files.pythonhosted.org/packages/3d/b9/15fd5541ef4f5b9a17eefd379356cf12175fe577424e7b1d80676516031a/matplotlib-3.10.8-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:3f2e409836d7f5ac2f1c013110a4d50b9f7edc26328c108915f9075d7d7a91b6", size = 8261076, upload-time = "2025-12-10T22:55:44.648Z" }, - { url = "https://files.pythonhosted.org/packages/8d/a0/2ba3473c1b66b9c74dc7107c67e9008cb1782edbe896d4c899d39ae9cf78/matplotlib-3.10.8-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:56271f3dac49a88d7fca5060f004d9d22b865f743a12a23b1e937a0be4818ee1", size = 8148794, upload-time = "2025-12-10T22:55:46.252Z" }, - { url = "https://files.pythonhosted.org/packages/75/97/a471f1c3eb1fd6f6c24a31a5858f443891d5127e63a7788678d14e249aea/matplotlib-3.10.8-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:a0a7f52498f72f13d4a25ea70f35f4cb60642b466cbb0a9be951b5bc3f45a486", size = 8718474, upload-time = "2025-12-10T22:55:47.864Z" }, - { url = "https://files.pythonhosted.org/packages/01/be/cd478f4b66f48256f42927d0acbcd63a26a893136456cd079c0cc24fbabf/matplotlib-3.10.8-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:646d95230efb9ca614a7a594d4fcacde0ac61d25e37dd51710b36477594963ce", size = 9549637, upload-time = "2025-12-10T22:55:50.048Z" }, - { url = "https://files.pythonhosted.org/packages/5d/7c/8dc289776eae5109e268c4fb92baf870678dc048a25d4ac903683b86d5bf/matplotlib-3.10.8-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f89c151aab2e2e23cb3fe0acad1e8b82841fd265379c4cecd0f3fcb34c15e0f6", size = 9613678, upload-time = "2025-12-10T22:55:52.21Z" }, - { url = "https://files.pythonhosted.org/packages/64/40/37612487cc8a437d4dd261b32ca21fe2d79510fe74af74e1f42becb1bdb8/matplotlib-3.10.8-cp313-cp313-win_amd64.whl", hash = "sha256:e8ea3e2d4066083e264e75c829078f9e149fa119d27e19acd503de65e0b13149", size = 8142686, upload-time = "2025-12-10T22:55:54.253Z" }, - { url = "https://files.pythonhosted.org/packages/66/52/8d8a8730e968185514680c2a6625943f70269509c3dcfc0dcf7d75928cb8/matplotlib-3.10.8-cp313-cp313-win_arm64.whl", hash = "sha256:c108a1d6fa78a50646029cb6d49808ff0fc1330fda87fa6f6250c6b5369b6645", size = 8012917, upload-time = "2025-12-10T22:55:56.268Z" }, - { url = "https://files.pythonhosted.org/packages/b5/27/51fe26e1062f298af5ef66343d8ef460e090a27fea73036c76c35821df04/matplotlib-3.10.8-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:ad3d9833a64cf48cc4300f2b406c3d0f4f4724a91c0bd5640678a6ba7c102077", size = 8305679, upload-time = "2025-12-10T22:55:57.856Z" }, - { url = "https://files.pythonhosted.org/packages/2c/1e/4de865bc591ac8e3062e835f42dd7fe7a93168d519557837f0e37513f629/matplotlib-3.10.8-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:eb3823f11823deade26ce3b9f40dcb4a213da7a670013929f31d5f5ed1055b22", size = 8198336, upload-time = "2025-12-10T22:55:59.371Z" }, - { url = "https://files.pythonhosted.org/packages/c6/cb/2f7b6e75fb4dce87ef91f60cac4f6e34f4c145ab036a22318ec837971300/matplotlib-3.10.8-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d9050fee89a89ed57b4fb2c1bfac9a3d0c57a0d55aed95949eedbc42070fea39", size = 8731653, upload-time = "2025-12-10T22:56:01.032Z" }, - { url = "https://files.pythonhosted.org/packages/46/b3/bd9c57d6ba670a37ab31fb87ec3e8691b947134b201f881665b28cc039ff/matplotlib-3.10.8-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b44d07310e404ba95f8c25aa5536f154c0a8ec473303535949e52eb71d0a1565", size = 9561356, upload-time = "2025-12-10T22:56:02.95Z" }, - { 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" }, ] [[package]] @@ -2888,10 +2546,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/65/92/a5100f7185a800a5d29f8d14041f61475b9de465ffcc0f3b9fba606e4505/msgpack-1.1.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:372839311ccf6bdaf39b00b61288e0557916c3729529b301c52c2d88842add42", size = 427556, upload-time = "2025-10-08T09:15:06.837Z" }, { url = "https://files.pythonhosted.org/packages/f5/87/ffe21d1bf7d9991354ad93949286f643b2bb6ddbeab66373922b44c3b8cc/msgpack-1.1.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2929af52106ca73fcb28576218476ffbb531a036c2adbcf54a3664de124303e9", size = 404920, upload-time = "2025-10-08T09:15:08.179Z" }, { url = "https://files.pythonhosted.org/packages/ff/41/8543ed2b8604f7c0d89ce066f42007faac1eaa7d79a81555f206a5cdb889/msgpack-1.1.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:be52a8fc79e45b0364210eef5234a7cf8d330836d0a64dfbb878efa903d84620", size = 415013, upload-time = "2025-10-08T09:15:09.83Z" }, - { url = "https://files.pythonhosted.org/packages/d3/68/93180dce57f684a61a88a45ed13047558ded2be46f03acb8dec6d7c513af/msgpack-1.1.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1fdf7d83102bf09e7ce3357de96c59b627395352a4024f6e2458501f158bf999", size = 412721, upload-time = "2025-10-08T09:15:16.567Z" }, - { url = "https://files.pythonhosted.org/packages/5d/ba/459f18c16f2b3fc1a1ca871f72f07d70c07bf768ad0a507a698b8052ac58/msgpack-1.1.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fac4be746328f90caa3cd4bc67e6fe36ca2bf61d5c6eb6d895b6527e3f05071e", size = 424657, upload-time = "2025-10-08T09:15:17.825Z" }, - { url = "https://files.pythonhosted.org/packages/38/f8/4398c46863b093252fe67368b44edc6c13b17f4e6b0e4929dbf0bdb13f23/msgpack-1.1.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:fffee09044073e69f2bad787071aeec727183e7580443dfeb8556cbf1978d162", size = 402668, upload-time = "2025-10-08T09:15:19.003Z" }, - { url = "https://files.pythonhosted.org/packages/28/ce/698c1eff75626e4124b4d78e21cca0b4cc90043afb80a507626ea354ab52/msgpack-1.1.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5928604de9b032bc17f5099496417f113c45bc6bc21b5c6920caf34b3c428794", size = 419040, upload-time = "2025-10-08T09:15:20.183Z" }, ] [[package]] @@ -2904,10 +2558,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/b5/d1/d4cd9fe89c7d400d7a18f86ccc94daa3f0927f53558846fcb60791dce5d6/msgspec-0.21.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:21995e74b5c598c2e004110ad66ec7f1b8c20bf2bcf3b2de8fd9a3094422d3ff", size = 225025, upload-time = "2026-04-12T21:44:11.191Z" }, { url = "https://files.pythonhosted.org/packages/24/bf/e20549e602b9edccadeeff98760345a416f9cce846a657e8b18e3396b212/msgspec-0.21.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6129f0cca52992e898fd5344187f7c8127b63d810b2fd73e36fca73b4c6475ee", size = 222672, upload-time = "2026-04-12T21:44:12.481Z" }, { url = "https://files.pythonhosted.org/packages/b4/68/04d7a8f0f786545cf9b8c280c57aa6befb5977af6e884b8b54191cbe44b3/msgspec-0.21.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ef3ec2296248d1f8b9231acb051b6d471dfde8f21819e86c9adaaa9f42918521", size = 227303, upload-time = "2026-04-12T21:44:13.709Z" }, - { url = "https://files.pythonhosted.org/packages/ca/d9/9e9d7d7e5061b47540d03d640fab9b3965ba7ae49c1b2154861c8f007518/msgspec-0.21.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:48943e278b3854c2f89f955ddc6f9f430d3f0784b16e47d10604ee0463cd21f5", size = 218880, upload-time = "2026-04-12T21:44:20.028Z" }, - { url = "https://files.pythonhosted.org/packages/74/66/2bb344f34abb4b57e60c7c9c761994e0417b9718ec1460bf00c296f2a7ea/msgspec-0.21.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a9aa659ebb0101b1cbc31461212b87e341d961f0ab0772aaf068a99e001ec4aa", size = 225050, upload-time = "2026-04-12T21:44:21.577Z" }, - { url = "https://files.pythonhosted.org/packages/1a/84/7c1e412f76092277bf760cef12b7979d03314d259ab5b5cafde5d0c1722d/msgspec-0.21.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f7b27d1a8ead2b6f5b0c4f2d07b8be1ccfcc041c8a0e704781edebe3ae13c484", size = 222713, upload-time = "2026-04-12T21:44:22.83Z" }, - { url = "https://files.pythonhosted.org/packages/4e/27/0bba04b2b4ef05f3d068429410bc71d2cea925f1596a8f41152cccd5edb8/msgspec-0.21.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:38fe93e86b61328fe544cb7fd871fad5a27c8734bfda90f65e5dbe288ae50f61", size = 227259, upload-time = "2026-04-12T21:44:24.11Z" }, ] [[package]] @@ -2934,42 +2584,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/ca/a4/840f5b97339e27846c46307f2530a2805d9d537d8b8bd416af031cad7fa0/multidict-6.7.1-cp312-cp312-win32.whl", hash = "sha256:28ca5ce2fd9716631133d0e9a9b9a745ad7f60bac2bccafb56aa380fc0b6c511", size = 41887, upload-time = "2026-01-26T02:44:14.245Z" }, { url = "https://files.pythonhosted.org/packages/80/31/0b2517913687895f5904325c2069d6a3b78f66cc641a86a2baf75a05dcbb/multidict-6.7.1-cp312-cp312-win_amd64.whl", hash = "sha256:fcee94dfbd638784645b066074b338bc9cc155d4b4bffa4adce1615c5a426c19", size = 46053, upload-time = "2026-01-26T02:44:15.371Z" }, { url = "https://files.pythonhosted.org/packages/0c/5b/aba28e4ee4006ae4c7df8d327d31025d760ffa992ea23812a601d226e682/multidict-6.7.1-cp312-cp312-win_arm64.whl", hash = "sha256:ba0a9fb644d0c1a2194cf7ffb043bd852cea63a57f66fbd33959f7dae18517bf", size = 43307, upload-time = "2026-01-26T02:44:16.852Z" }, - { url = "https://files.pythonhosted.org/packages/f2/22/929c141d6c0dba87d3e1d38fbdf1ba8baba86b7776469f2bc2d3227a1e67/multidict-6.7.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:2b41f5fed0ed563624f1c17630cb9941cf2309d4df00e494b551b5f3e3d67a23", size = 76174, upload-time = "2026-01-26T02:44:18.509Z" }, - { url = "https://files.pythonhosted.org/packages/c7/75/bc704ae15fee974f8fccd871305e254754167dce5f9e42d88a2def741a1d/multidict-6.7.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:84e61e3af5463c19b67ced91f6c634effb89ef8bfc5ca0267f954451ed4bb6a2", size = 45116, upload-time = "2026-01-26T02:44:19.745Z" }, - { url = "https://files.pythonhosted.org/packages/79/76/55cd7186f498ed080a18440c9013011eb548f77ae1b297206d030eb1180a/multidict-6.7.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:935434b9853c7c112eee7ac891bc4cb86455aa631269ae35442cb316790c1445", size = 43524, upload-time = "2026-01-26T02:44:21.571Z" }, - { url = "https://files.pythonhosted.org/packages/e9/3c/414842ef8d5a1628d68edee29ba0e5bcf235dbfb3ccd3ea303a7fe8c72ff/multidict-6.7.1-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:432feb25a1cb67fe82a9680b4d65fb542e4635cb3166cd9c01560651ad60f177", size = 249368, upload-time = "2026-01-26T02:44:22.803Z" }, - { url = "https://files.pythonhosted.org/packages/f6/32/befed7f74c458b4a525e60519fe8d87eef72bb1e99924fa2b0f9d97a221e/multidict-6.7.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e82d14e3c948952a1a85503817e038cba5905a3352de76b9a465075d072fba23", size = 256952, upload-time = "2026-01-26T02:44:24.306Z" }, - { url = "https://files.pythonhosted.org/packages/03/d6/c878a44ba877f366630c860fdf74bfb203c33778f12b6ac274936853c451/multidict-6.7.1-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:4cfb48c6ea66c83bcaaf7e4dfa7ec1b6bbcf751b7db85a328902796dfde4c060", size = 240317, upload-time = "2026-01-26T02:44:25.772Z" }, - { url = "https://files.pythonhosted.org/packages/68/49/57421b4d7ad2e9e60e25922b08ceb37e077b90444bde6ead629095327a6f/multidict-6.7.1-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:1d540e51b7e8e170174555edecddbd5538105443754539193e3e1061864d444d", size = 267132, upload-time = "2026-01-26T02:44:27.648Z" }, - { url = "https://files.pythonhosted.org/packages/b7/fe/ec0edd52ddbcea2a2e89e174f0206444a61440b40f39704e64dc807a70bd/multidict-6.7.1-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:273d23f4b40f3dce4d6c8a821c741a86dec62cded82e1175ba3d99be128147ed", size = 268140, upload-time = "2026-01-26T02:44:29.588Z" }, - { url = "https://files.pythonhosted.org/packages/b0/73/6e1b01cbeb458807aa0831742232dbdd1fa92bfa33f52a3f176b4ff3dc11/multidict-6.7.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9d624335fd4fa1c08a53f8b4be7676ebde19cd092b3895c421045ca87895b429", size = 254277, upload-time = "2026-01-26T02:44:30.902Z" }, - { url = "https://files.pythonhosted.org/packages/6a/b2/5fb8c124d7561a4974c342bc8c778b471ebbeb3cc17df696f034a7e9afe7/multidict-6.7.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:12fad252f8b267cc75b66e8fc51b3079604e8d43a75428ffe193cd9e2195dfd6", size = 252291, upload-time = "2026-01-26T02:44:32.31Z" }, - { url = "https://files.pythonhosted.org/packages/5a/96/51d4e4e06bcce92577fcd488e22600bd38e4fd59c20cb49434d054903bd2/multidict-6.7.1-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:03ede2a6ffbe8ef936b92cb4529f27f42be7f56afcdab5ab739cd5f27fb1cbf9", size = 250156, upload-time = "2026-01-26T02:44:33.734Z" }, - { url = "https://files.pythonhosted.org/packages/db/6b/420e173eec5fba721a50e2a9f89eda89d9c98fded1124f8d5c675f7a0c0f/multidict-6.7.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:90efbcf47dbe33dcf643a1e400d67d59abeac5db07dc3f27d6bdeae497a2198c", size = 249742, upload-time = "2026-01-26T02:44:35.222Z" }, - { url = "https://files.pythonhosted.org/packages/44/a3/ec5b5bd98f306bc2aa297b8c6f11a46714a56b1e6ef5ebda50a4f5d7c5fb/multidict-6.7.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:5c4b9bfc148f5a91be9244d6264c53035c8a0dcd2f51f1c3c6e30e30ebaa1c84", size = 262221, upload-time = "2026-01-26T02:44:36.604Z" }, - { url = "https://files.pythonhosted.org/packages/cd/f7/e8c0d0da0cd1e28d10e624604e1a36bcc3353aaebdfdc3a43c72bc683a12/multidict-6.7.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:401c5a650f3add2472d1d288c26deebc540f99e2fb83e9525007a74cd2116f1d", size = 258664, upload-time = "2026-01-26T02:44:38.008Z" }, - { url = "https://files.pythonhosted.org/packages/52/da/151a44e8016dd33feed44f730bd856a66257c1ee7aed4f44b649fb7edeb3/multidict-6.7.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:97891f3b1b3ffbded884e2916cacf3c6fc87b66bb0dde46f7357404750559f33", size = 249490, upload-time = "2026-01-26T02:44:39.386Z" }, - { url = "https://files.pythonhosted.org/packages/87/af/a3b86bf9630b732897f6fc3f4c4714b90aa4361983ccbdcd6c0339b21b0c/multidict-6.7.1-cp313-cp313-win32.whl", hash = "sha256:e1c5988359516095535c4301af38d8a8838534158f649c05dd1050222321bcb3", size = 41695, upload-time = "2026-01-26T02:44:41.318Z" }, - { url = "https://files.pythonhosted.org/packages/b2/35/e994121b0e90e46134673422dd564623f93304614f5d11886b1b3e06f503/multidict-6.7.1-cp313-cp313-win_amd64.whl", hash = "sha256:960c83bf01a95b12b08fd54324a4eb1d5b52c88932b5cba5d6e712bb3ed12eb5", size = 45884, upload-time = "2026-01-26T02:44:42.488Z" }, - { url = "https://files.pythonhosted.org/packages/ca/61/42d3e5dbf661242a69c97ea363f2d7b46c567da8eadef8890022be6e2ab0/multidict-6.7.1-cp313-cp313-win_arm64.whl", hash = "sha256:563fe25c678aaba333d5399408f5ec3c383ca5b663e7f774dd179a520b8144df", size = 43122, upload-time = "2026-01-26T02:44:43.664Z" }, - { url = "https://files.pythonhosted.org/packages/6d/b3/e6b21c6c4f314bb956016b0b3ef2162590a529b84cb831c257519e7fde44/multidict-6.7.1-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:c76c4bec1538375dad9d452d246ca5368ad6e1c9039dadcf007ae59c70619ea1", size = 83175, upload-time = "2026-01-26T02:44:44.894Z" }, - { url = "https://files.pythonhosted.org/packages/fb/76/23ecd2abfe0957b234f6c960f4ade497f55f2c16aeb684d4ecdbf1c95791/multidict-6.7.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:57b46b24b5d5ebcc978da4ec23a819a9402b4228b8a90d9c656422b4bdd8a963", size = 48460, upload-time = "2026-01-26T02:44:46.106Z" }, - { url = "https://files.pythonhosted.org/packages/c4/57/a0ed92b23f3a042c36bc4227b72b97eca803f5f1801c1ab77c8a212d455e/multidict-6.7.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:e954b24433c768ce78ab7929e84ccf3422e46deb45a4dc9f93438f8217fa2d34", size = 46930, upload-time = "2026-01-26T02:44:47.278Z" }, - { url = "https://files.pythonhosted.org/packages/b5/66/02ec7ace29162e447f6382c495dc95826bf931d3818799bbef11e8f7df1a/multidict-6.7.1-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:3bd231490fa7217cc832528e1cd8752a96f0125ddd2b5749390f7c3ec8721b65", size = 242582, upload-time = "2026-01-26T02:44:48.604Z" }, - { url = "https://files.pythonhosted.org/packages/58/18/64f5a795e7677670e872673aca234162514696274597b3708b2c0d276cce/multidict-6.7.1-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:253282d70d67885a15c8a7716f3a73edf2d635793ceda8173b9ecc21f2fb8292", size = 250031, upload-time = "2026-01-26T02:44:50.544Z" }, - { url = "https://files.pythonhosted.org/packages/c8/ed/e192291dbbe51a8290c5686f482084d31bcd9d09af24f63358c3d42fd284/multidict-6.7.1-cp313-cp313t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:0b4c48648d7649c9335cf1927a8b87fa692de3dcb15faa676c6a6f1f1aabda43", size = 228596, upload-time = "2026-01-26T02:44:51.951Z" }, - { url = "https://files.pythonhosted.org/packages/1e/7e/3562a15a60cf747397e7f2180b0a11dc0c38d9175a650e75fa1b4d325e15/multidict-6.7.1-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:98bc624954ec4d2c7cb074b8eefc2b5d0ce7d482e410df446414355d158fe4ca", size = 257492, upload-time = "2026-01-26T02:44:53.902Z" }, - { url = "https://files.pythonhosted.org/packages/24/02/7d0f9eae92b5249bb50ac1595b295f10e263dd0078ebb55115c31e0eaccd/multidict-6.7.1-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:1b99af4d9eec0b49927b4402bcbb58dea89d3e0db8806a4086117019939ad3dd", size = 255899, upload-time = "2026-01-26T02:44:55.316Z" }, - { url = "https://files.pythonhosted.org/packages/00/e3/9b60ed9e23e64c73a5cde95269ef1330678e9c6e34dd4eb6b431b85b5a10/multidict-6.7.1-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6aac4f16b472d5b7dc6f66a0d49dd57b0e0902090be16594dc9ebfd3d17c47e7", size = 247970, upload-time = "2026-01-26T02:44:56.783Z" }, - { url = "https://files.pythonhosted.org/packages/3e/06/538e58a63ed5cfb0bd4517e346b91da32fde409d839720f664e9a4ae4f9d/multidict-6.7.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:21f830fe223215dffd51f538e78c172ed7c7f60c9b96a2bf05c4848ad49921c3", size = 245060, upload-time = "2026-01-26T02:44:58.195Z" }, - { url = "https://files.pythonhosted.org/packages/b2/2f/d743a3045a97c895d401e9bd29aaa09b94f5cbdf1bd561609e5a6c431c70/multidict-6.7.1-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:f5dd81c45b05518b9aa4da4aa74e1c93d715efa234fd3e8a179df611cc85e5f4", size = 235888, upload-time = "2026-01-26T02:44:59.57Z" }, - { url = "https://files.pythonhosted.org/packages/38/83/5a325cac191ab28b63c52f14f1131f3b0a55ba3b9aa65a6d0bf2a9b921a0/multidict-6.7.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:eb304767bca2bb92fb9c5bd33cedc95baee5bb5f6c88e63706533a1c06ad08c8", size = 243554, upload-time = "2026-01-26T02:45:01.054Z" }, - { url = "https://files.pythonhosted.org/packages/20/1f/9d2327086bd15da2725ef6aae624208e2ef828ed99892b17f60c344e57ed/multidict-6.7.1-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:c9035dde0f916702850ef66460bc4239d89d08df4d02023a5926e7446724212c", size = 252341, upload-time = "2026-01-26T02:45:02.484Z" }, - { url = "https://files.pythonhosted.org/packages/e8/2c/2a1aa0280cf579d0f6eed8ee5211c4f1730bd7e06c636ba2ee6aafda302e/multidict-6.7.1-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:af959b9beeb66c822380f222f0e0a1889331597e81f1ded7f374f3ecb0fd6c52", size = 246391, upload-time = "2026-01-26T02:45:03.862Z" }, - { url = "https://files.pythonhosted.org/packages/e5/03/7ca022ffc36c5a3f6e03b179a5ceb829be9da5783e6fe395f347c0794680/multidict-6.7.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:41f2952231456154ee479651491e94118229844dd7226541788be783be2b5108", size = 243422, upload-time = "2026-01-26T02:45:05.296Z" }, - { url = "https://files.pythonhosted.org/packages/dc/1d/b31650eab6c5778aceed46ba735bd97f7c7d2f54b319fa916c0f96e7805b/multidict-6.7.1-cp313-cp313t-win32.whl", hash = "sha256:df9f19c28adcb40b6aae30bbaa1478c389efd50c28d541d76760199fc1037c32", size = 47770, upload-time = "2026-01-26T02:45:06.754Z" }, - { url = "https://files.pythonhosted.org/packages/ac/5b/2d2d1d522e51285bd61b1e20df8f47ae1a9d80839db0b24ea783b3832832/multidict-6.7.1-cp313-cp313t-win_amd64.whl", hash = "sha256:d54ecf9f301853f2c5e802da559604b3e95bb7a3b01a9c295c6ee591b9882de8", size = 53109, upload-time = "2026-01-26T02:45:08.044Z" }, - { url = "https://files.pythonhosted.org/packages/3d/a3/cc409ba012c83ca024a308516703cf339bdc4b696195644a7215a5164a24/multidict-6.7.1-cp313-cp313t-win_arm64.whl", hash = "sha256:5a37ca18e360377cfda1d62f5f382ff41f2b8c4ccb329ed974cc2e1643440118", size = 45573, upload-time = "2026-01-26T02:45:09.349Z" }, { url = "https://files.pythonhosted.org/packages/81/08/7036c080d7117f28a4af526d794aab6a84463126db031b007717c1a6676e/multidict-6.7.1-py3-none-any.whl", hash = "sha256:55d97cc6dae627efa6a6e548885712d4864b81110ac76fa4e534c03819fa4a56", size = 12319, upload-time = "2026-01-26T02:46:44.004Z" }, ] @@ -2985,7 +2599,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/ba/d8/0cba6cf51a1a31f20471fbc823a716170c73012ddc4fb85d706630ed6e8f/multiprocess-0.70.18-py310-none-any.whl", hash = "sha256:60c194974c31784019c1f459d984e8f33ee48f10fcf42c309ba97b30d9bd53ea", size = 134948, upload-time = "2025-04-17T03:11:20.223Z" }, { url = "https://files.pythonhosted.org/packages/4b/88/9039f2fed1012ef584751d4ceff9ab4a51e5ae264898f0b7cbf44340a859/multiprocess-0.70.18-py311-none-any.whl", hash = "sha256:5aa6eef98e691281b3ad923be2832bf1c55dd2c859acd73e5ec53a66aae06a1d", size = 144462, upload-time = "2025-04-17T03:11:21.657Z" }, { url = "https://files.pythonhosted.org/packages/bf/b6/5f922792be93b82ec6b5f270bbb1ef031fd0622847070bbcf9da816502cc/multiprocess-0.70.18-py312-none-any.whl", hash = "sha256:9b78f8e5024b573730bfb654783a13800c2c0f2dfc0c25e70b40d184d64adaa2", size = 150287, upload-time = "2025-04-17T03:11:22.69Z" }, - { url = "https://files.pythonhosted.org/packages/ee/25/7d7e78e750bc1aecfaf0efbf826c69a791d2eeaf29cf20cba93ff4cced78/multiprocess-0.70.18-py313-none-any.whl", hash = "sha256:871743755f43ef57d7910a38433cfe41319e72be1bbd90b79c7a5ac523eb9334", size = 151917, upload-time = "2025-04-17T03:11:24.044Z" }, { url = "https://files.pythonhosted.org/packages/3b/c3/ca84c19bd14cdfc21c388fdcebf08b86a7a470ebc9f5c3c084fc2dbc50f7/multiprocess-0.70.18-py38-none-any.whl", hash = "sha256:dbf705e52a154fe5e90fb17b38f02556169557c2dd8bb084f2e06c2784d8279b", size = 132636, upload-time = "2025-04-17T03:11:24.936Z" }, { url = "https://files.pythonhosted.org/packages/6c/28/dd72947e59a6a8c856448a5e74da6201cb5502ddff644fbc790e4bd40b9a/multiprocess-0.70.18-py39-none-any.whl", hash = "sha256:e78ca805a72b1b810c690b6b4cc32579eba34f403094bbbae962b7b5bf9dfcb8", size = 133478, upload-time = "2025-04-17T03:11:26.253Z" }, ] @@ -3008,12 +2621,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/00/be/dd56c1fd4807bc1eba1cf18b2a850d0de7bacb55e158755eb79f77c41f8e/mypy-1.19.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c35d298c2c4bba75feb2195655dfea8124d855dfd7343bf8b8c055421eaf0cf8", size = 13620847, upload-time = "2025-12-15T05:03:39.633Z" }, { url = "https://files.pythonhosted.org/packages/6d/42/332951aae42b79329f743bf1da088cd75d8d4d9acc18fbcbd84f26c1af4e/mypy-1.19.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:34c81968774648ab5ac09c29a375fdede03ba253f8f8287847bd480782f73a6a", size = 13834976, upload-time = "2025-12-15T05:03:08.786Z" }, { url = "https://files.pythonhosted.org/packages/6f/63/e7493e5f90e1e085c562bb06e2eb32cae27c5057b9653348d38b47daaecc/mypy-1.19.1-cp312-cp312-win_amd64.whl", hash = "sha256:b10e7c2cd7870ba4ad9b2d8a6102eb5ffc1f16ca35e3de6bfa390c1113029d13", size = 10118104, upload-time = "2025-12-15T05:03:10.834Z" }, - { url = "https://files.pythonhosted.org/packages/de/9f/a6abae693f7a0c697dbb435aac52e958dc8da44e92e08ba88d2e42326176/mypy-1.19.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e3157c7594ff2ef1634ee058aafc56a82db665c9438fd41b390f3bde1ab12250", size = 13201927, upload-time = "2025-12-15T05:02:29.138Z" }, - { url = "https://files.pythonhosted.org/packages/9a/a4/45c35ccf6e1c65afc23a069f50e2c66f46bd3798cbe0d680c12d12935caa/mypy-1.19.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:bdb12f69bcc02700c2b47e070238f42cb87f18c0bc1fc4cdb4fb2bc5fd7a3b8b", size = 12206730, upload-time = "2025-12-15T05:03:01.325Z" }, - { url = "https://files.pythonhosted.org/packages/05/bb/cdcf89678e26b187650512620eec8368fded4cfd99cfcb431e4cdfd19dec/mypy-1.19.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f859fb09d9583a985be9a493d5cfc5515b56b08f7447759a0c5deaf68d80506e", size = 12724581, upload-time = "2025-12-15T05:03:20.087Z" }, - { 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/8d/f4/4ce9a05ce5ded1de3ec1c1d96cf9f9504a04e54ce0ed55cfa38619a32b8d/mypy-1.19.1-py3-none-any.whl", hash = "sha256:f1235f5ea01b7db5468d53ece6aaddf1ad0b88d9e7462b86ef96fe04995d7247", size = 2471239, upload-time = "2025-12-15T05:03:07.248Z" }, ] @@ -3194,8 +2801,6 @@ sdist = { url = "https://files.pythonhosted.org/packages/1c/a0/e21f57604304aa03e wheels = [ { url = "https://files.pythonhosted.org/packages/9a/2d/e518df036feab381c23a624dac47f8445ac55686ec7f11083655eb707da3/numba-0.61.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:5b1bb509d01f23d70325d3a5a0e237cbc9544dd50e50588bc581ba860c213546", size = 3885928, upload-time = "2025-04-09T02:57:55.206Z" }, { url = "https://files.pythonhosted.org/packages/10/0f/23cced68ead67b75d77cfcca3df4991d1855c897ee0ff3fe25a56ed82108/numba-0.61.2-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:48a53a3de8f8793526cbe330f2a39fe9a6638efcbf11bd63f3d2f9757ae345cd", size = 3577115, upload-time = "2025-04-09T02:57:56.818Z" }, - { url = "https://files.pythonhosted.org/packages/0d/e0/5ea04e7ad2c39288c0f0f9e8d47638ad70f28e275d092733b5817cf243c9/numba-0.61.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:bdbca73ad81fa196bd53dc12e3aaf1564ae036e0c125f237c7644fe64a4928ab", size = 3893918, upload-time = "2025-04-09T02:58:02.933Z" }, - { url = "https://files.pythonhosted.org/packages/17/58/064f4dcb7d7e9412f16ecf80ed753f92297e39f399c905389688cf950b81/numba-0.61.2-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:5f154aaea625fb32cfbe3b80c5456d514d416fcdf79733dd69c0df3a11348e9e", size = 3584056, upload-time = "2025-04-09T02:58:04.538Z" }, ] [[package]] @@ -3203,8 +2808,7 @@ name = "numpy" version = "2.2.6" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "sys_platform != 'emscripten' and sys_platform != 'win32'", ] sdist = { url = "https://files.pythonhosted.org/packages/76/21/7d2a95e4bba9dc13d043ee156a356c0a8f0c6309dff6b21b4d71a073b8a8/numpy-2.2.6.tar.gz", hash = "sha256:e29554e2bef54a90aa5cc07da6ce955accb83f21ab5de01a62c8478897b264fd", size = 20276440, upload-time = "2025-05-17T22:38:04.611Z" } wheels = [ @@ -3216,22 +2820,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/8c/3d/1e1db36cfd41f895d266b103df00ca5b3cbe965184df824dec5c08c6b803/numpy-2.2.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd83c01228a688733f1ded5201c678f0c53ecc1006ffbc404db9f7a899ac6249", size = 16527618, upload-time = "2025-05-17T21:36:06.711Z" }, { url = "https://files.pythonhosted.org/packages/61/c6/03ed30992602c85aa3cd95b9070a514f8b3c33e31124694438d88809ae36/numpy-2.2.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:37c0ca431f82cd5fa716eca9506aefcabc247fb27ba69c5062a6d3ade8cf8f49", size = 15505511, upload-time = "2025-05-17T21:36:29.965Z" }, { url = "https://files.pythonhosted.org/packages/b7/25/5761d832a81df431e260719ec45de696414266613c9ee268394dd5ad8236/numpy-2.2.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fe27749d33bb772c80dcd84ae7e8df2adc920ae8297400dabec45f0dedb3f6de", size = 18313783, upload-time = "2025-05-17T21:36:56.883Z" }, - { url = "https://files.pythonhosted.org/packages/f9/5c/6657823f4f594f72b5471f1db1ab12e26e890bb2e41897522d134d2a3e81/numpy-2.2.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0811bb762109d9708cca4d0b13c4f67146e3c3b7cf8d34018c722adb2d957c84", size = 20867828, upload-time = "2025-05-17T21:37:56.699Z" }, - { url = "https://files.pythonhosted.org/packages/dc/9e/14520dc3dadf3c803473bd07e9b2bd1b69bc583cb2497b47000fed2fa92f/numpy-2.2.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:287cc3162b6f01463ccd86be154f284d0893d2b3ed7292439ea97eafa8170e0b", size = 14143006, upload-time = "2025-05-17T21:38:18.291Z" }, - { url = "https://files.pythonhosted.org/packages/4f/06/7e96c57d90bebdce9918412087fc22ca9851cceaf5567a45c1f404480e9e/numpy-2.2.6-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:f1372f041402e37e5e633e586f62aa53de2eac8d98cbfb822806ce4bbefcb74d", size = 5076765, upload-time = "2025-05-17T21:38:27.319Z" }, - { url = "https://files.pythonhosted.org/packages/73/ed/63d920c23b4289fdac96ddbdd6132e9427790977d5457cd132f18e76eae0/numpy-2.2.6-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:55a4d33fa519660d69614a9fad433be87e5252f4b03850642f88993f7b2ca566", size = 6617736, upload-time = "2025-05-17T21:38:38.141Z" }, - { url = "https://files.pythonhosted.org/packages/85/c5/e19c8f99d83fd377ec8c7e0cf627a8049746da54afc24ef0a0cb73d5dfb5/numpy-2.2.6-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f92729c95468a2f4f15e9bb94c432a9229d0d50de67304399627a943201baa2f", size = 14010719, upload-time = "2025-05-17T21:38:58.433Z" }, - { url = "https://files.pythonhosted.org/packages/19/49/4df9123aafa7b539317bf6d342cb6d227e49f7a35b99c287a6109b13dd93/numpy-2.2.6-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1bc23a79bfabc5d056d106f9befb8d50c31ced2fbc70eedb8155aec74a45798f", size = 16526072, upload-time = "2025-05-17T21:39:22.638Z" }, - { url = "https://files.pythonhosted.org/packages/b2/6c/04b5f47f4f32f7c2b0e7260442a8cbcf8168b0e1a41ff1495da42f42a14f/numpy-2.2.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e3143e4451880bed956e706a3220b4e5cf6172ef05fcc397f6f36a550b1dd868", size = 15503213, upload-time = "2025-05-17T21:39:45.865Z" }, - { url = "https://files.pythonhosted.org/packages/17/0a/5cd92e352c1307640d5b6fec1b2ffb06cd0dabe7d7b8227f97933d378422/numpy-2.2.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b4f13750ce79751586ae2eb824ba7e1e8dba64784086c98cdbbcc6a42112ce0d", size = 18316632, upload-time = "2025-05-17T21:40:13.331Z" }, - { url = "https://files.pythonhosted.org/packages/6b/9e/4bf918b818e516322db999ac25d00c75788ddfd2d2ade4fa66f1f38097e1/numpy-2.2.6-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0bca768cd85ae743b2affdc762d617eddf3bcf8724435498a1e80132d04879e6", size = 20963467, upload-time = "2025-05-17T21:40:44Z" }, - { url = "https://files.pythonhosted.org/packages/61/66/d2de6b291507517ff2e438e13ff7b1e2cdbdb7cb40b3ed475377aece69f9/numpy-2.2.6-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:fc0c5673685c508a142ca65209b4e79ed6740a4ed6b2267dbba90f34b0b3cfda", size = 14225144, upload-time = "2025-05-17T21:41:05.695Z" }, - { url = "https://files.pythonhosted.org/packages/e4/25/480387655407ead912e28ba3a820bc69af9adf13bcbe40b299d454ec011f/numpy-2.2.6-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:5bd4fc3ac8926b3819797a7c0e2631eb889b4118a9898c84f585a54d475b7e40", size = 5200217, upload-time = "2025-05-17T21:41:15.903Z" }, - { url = "https://files.pythonhosted.org/packages/aa/4a/6e313b5108f53dcbf3aca0c0f3e9c92f4c10ce57a0a721851f9785872895/numpy-2.2.6-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:fee4236c876c4e8369388054d02d0e9bb84821feb1a64dd59e137e6511a551f8", size = 6712014, upload-time = "2025-05-17T21:41:27.321Z" }, - { url = "https://files.pythonhosted.org/packages/b7/30/172c2d5c4be71fdf476e9de553443cf8e25feddbe185e0bd88b096915bcc/numpy-2.2.6-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e1dda9c7e08dc141e0247a5b8f49cf05984955246a327d4c48bda16821947b2f", size = 14077935, upload-time = "2025-05-17T21:41:49.738Z" }, - { url = "https://files.pythonhosted.org/packages/12/fb/9e743f8d4e4d3c710902cf87af3512082ae3d43b945d5d16563f26ec251d/numpy-2.2.6-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f447e6acb680fd307f40d3da4852208af94afdfab89cf850986c3ca00562f4fa", size = 16600122, upload-time = "2025-05-17T21:42:14.046Z" }, - { url = "https://files.pythonhosted.org/packages/12/75/ee20da0e58d3a66f204f38916757e01e33a9737d0b22373b3eb5a27358f9/numpy-2.2.6-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:389d771b1623ec92636b0786bc4ae56abafad4a4c513d36a55dce14bd9ce8571", size = 15586143, upload-time = "2025-05-17T21:42:37.464Z" }, - { url = "https://files.pythonhosted.org/packages/76/95/bef5b37f29fc5e739947e9ce5179ad402875633308504a52d188302319c8/numpy-2.2.6-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8e9ace4a37db23421249ed236fdcdd457d671e25146786dfc96835cd951aa7c1", size = 18385260, upload-time = "2025-05-17T21:43:05.189Z" }, ] [[package]] @@ -3239,41 +2827,14 @@ name = "numpy" version = "2.3.5" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version < '3.13' and sys_platform == 'win32'", - "python_full_version < '3.13' and sys_platform == 'emscripten'", + "sys_platform == 'win32'", + "sys_platform == 'emscripten'", ] sdist = { url = "https://files.pythonhosted.org/packages/76/65/21b3bc86aac7b8f2862db1e808f1ea22b028e30a225a34a5ede9bf8678f2/numpy-2.3.5.tar.gz", hash = "sha256:784db1dcdab56bf0517743e746dfb0f885fc68d948aba86eeec2cba234bdf1c0", size = 20584950, upload-time = "2025-11-16T22:52:42.067Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/05/79/ccbd23a75862d95af03d28b5c6901a1b7da4803181513d52f3b86ed9446e/numpy-2.3.5-cp312-cp312-win32.whl", hash = "sha256:3997b5b3c9a771e157f9aae01dd579ee35ad7109be18db0e85dbdbe1de06e952", size = 6285274, upload-time = "2025-11-16T22:50:10.746Z" }, { url = "https://files.pythonhosted.org/packages/2d/57/8aeaf160312f7f489dea47ab61e430b5cb051f59a98ae68b7133ce8fa06a/numpy-2.3.5-cp312-cp312-win_amd64.whl", hash = "sha256:86945f2ee6d10cdfd67bcb4069c1662dd711f7e2a4343db5cecec06b87cf31aa", size = 12782922, upload-time = "2025-11-16T22:50:12.811Z" }, { url = "https://files.pythonhosted.org/packages/78/a6/aae5cc2ca78c45e64b9ef22f089141d661516856cf7c8a54ba434576900d/numpy-2.3.5-cp312-cp312-win_arm64.whl", hash = "sha256:f28620fe26bee16243be2b7b874da327312240a7cdc38b769a697578d2100013", size = 10194667, upload-time = "2025-11-16T22:50:16.16Z" }, - { url = "https://files.pythonhosted.org/packages/40/56/2932d75b6f13465239e3b7b7e511be27f1b8161ca2510854f0b6e521c395/numpy-2.3.5-cp313-cp313-win32.whl", hash = "sha256:1978155dd49972084bd6ef388d66ab70f0c323ddee6f693d539376498720fb7e", size = 6277637, upload-time = "2025-11-16T22:50:40.11Z" }, - { url = "https://files.pythonhosted.org/packages/0c/88/e2eaa6cffb115b85ed7c7c87775cb8bcf0816816bc98ca8dbfa2ee33fe6e/numpy-2.3.5-cp313-cp313-win_amd64.whl", hash = "sha256:00dc4e846108a382c5869e77c6ed514394bdeb3403461d25a829711041217d5b", size = 12779090, upload-time = "2025-11-16T22:50:42.503Z" }, - { url = "https://files.pythonhosted.org/packages/8f/88/3f41e13a44ebd4034ee17baa384acac29ba6a4fcc2aca95f6f08ca0447d1/numpy-2.3.5-cp313-cp313-win_arm64.whl", hash = "sha256:0472f11f6ec23a74a906a00b48a4dcf3849209696dff7c189714511268d103ae", size = 10194710, upload-time = "2025-11-16T22:50:44.971Z" }, - { 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" }, -] - -[[package]] -name = "numpy" -version = "2.4.2" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.13' and sys_platform == 'win32'", - "python_full_version >= '3.13' and sys_platform == 'emscripten'", -] -sdist = { url = "https://files.pythonhosted.org/packages/57/fd/0005efbd0af48e55eb3c7208af93f2862d4b1a56cd78e84309a2d959208d/numpy-2.4.2.tar.gz", hash = "sha256:659a6107e31a83c4e33f763942275fd278b21d095094044eb35569e86a21ddae", size = 20723651, upload-time = "2026-01-31T23:13:10.135Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ab/af/6157aa6da728fa4525a755bfad486ae7e3f76d4c1864138003eb84328497/numpy-2.4.2-cp312-cp312-win32.whl", hash = "sha256:ec055f6dae239a6299cace477b479cca2fc125c5675482daf1dd886933a1076f", size = 5960282, upload-time = "2026-01-31T23:11:10.497Z" }, - { url = "https://files.pythonhosted.org/packages/92/0f/7ceaaeaacb40567071e94dbf2c9480c0ae453d5bb4f52bea3892c39dc83c/numpy-2.4.2-cp312-cp312-win_amd64.whl", hash = "sha256:209fae046e62d0ce6435fcfe3b1a10537e858249b3d9b05829e2a05218296a85", size = 12314210, upload-time = "2026-01-31T23:11:12.176Z" }, - { url = "https://files.pythonhosted.org/packages/2f/a3/56c5c604fae6dd40fa2ed3040d005fca97e91bd320d232ac9931d77ba13c/numpy-2.4.2-cp312-cp312-win_arm64.whl", hash = "sha256:fbde1b0c6e81d56f5dccd95dd4a711d9b95df1ae4009a60887e56b27e8d903fa", size = 10220171, upload-time = "2026-01-31T23:11:14.684Z" }, - { url = "https://files.pythonhosted.org/packages/78/0e/0a73b3dff26803a8c02baa76398015ea2a5434d9b8265a7898a6028c1591/numpy-2.4.2-cp313-cp313-win32.whl", hash = "sha256:8e9afaeb0beff068b4d9cd20d322ba0ee1cecfb0b08db145e4ab4dd44a6b5110", size = 5958199, upload-time = "2026-01-31T23:11:35.385Z" }, - { url = "https://files.pythonhosted.org/packages/43/bc/6352f343522fcb2c04dbaf94cb30cca6fd32c1a750c06ad6231b4293708c/numpy-2.4.2-cp313-cp313-win_amd64.whl", hash = "sha256:7df2de1e4fba69a51c06c28f5a3de36731eb9639feb8e1cf7e4a7b0daf4cf622", size = 12310848, upload-time = "2026-01-31T23:11:38.001Z" }, - { url = "https://files.pythonhosted.org/packages/6e/8d/6da186483e308da5da1cc6918ce913dcfe14ffde98e710bfeff2a6158d4e/numpy-2.4.2-cp313-cp313-win_arm64.whl", hash = "sha256:0fece1d1f0a89c16b03442eae5c56dc0be0c7883b5d388e0c03f53019a4bfd71", size = 10221082, upload-time = "2026-01-31T23:11:40.392Z" }, - { url = "https://files.pythonhosted.org/packages/40/62/48f99ae172a4b63d981babe683685030e8a3df4f246c893ea5c6ef99f018/numpy-2.4.2-cp313-cp313t-win32.whl", hash = "sha256:52b913ec40ff7ae845687b0b34d8d93b60cb66dcee06996dd5c99f2fc9328657", size = 6082433, upload-time = "2026-01-31T23:11:58.096Z" }, - { url = "https://files.pythonhosted.org/packages/07/38/e054a61cfe48ad9f1ed0d188e78b7e26859d0b60ef21cd9de4897cdb5326/numpy-2.4.2-cp313-cp313t-win_amd64.whl", hash = "sha256:5eea80d908b2c1f91486eb95b3fb6fab187e569ec9752ab7d9333d2e66bf2d6b", size = 12451181, upload-time = "2026-01-31T23:11:59.782Z" }, - { url = "https://files.pythonhosted.org/packages/6e/a4/a05c3a6418575e185dd84d0b9680b6bb2e2dc3e4202f036b7b4e22d6e9dc/numpy-2.4.2-cp313-cp313t-win_arm64.whl", hash = "sha256:fd49860271d52127d61197bb50b64f58454e9f578cb4b2c001a6de8b1f50b0b1", size = 10290756, upload-time = "2026-01-31T23:12:02.438Z" }, ] [[package]] @@ -3554,16 +3115,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/c0/cf/eb284847487821a5d415e54149a6449ba9bfc5872ce63ab7be41b8ec401c/orjson-3.11.8-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:3f262401086a3960586af06c054609365e98407151f5ea24a62893a40d80dbbb", size = 423742, upload-time = "2026-03-31T16:15:26.155Z" }, { url = "https://files.pythonhosted.org/packages/44/09/e12423d327071c851c13e76936f144a96adacfc037394dec35ac3fc8d1e8/orjson-3.11.8-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:8e8c6218b614badf8e229b697865df4301afa74b791b6c9ade01d19a9953a942", size = 147806, upload-time = "2026-03-31T16:15:27.909Z" }, { url = "https://files.pythonhosted.org/packages/b3/6d/37c2589ba864e582ffe7611643314785c6afb1f83c701654ef05daa8fcc7/orjson-3.11.8-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:093d489fa039ddade2db541097dbb484999fcc65fc2b0ff9819141e2ab364f25", size = 136485, upload-time = "2026-03-31T16:15:29.749Z" }, - { url = "https://files.pythonhosted.org/packages/42/3d/27d65b6d11e63f133781425f132807aef793ed25075fec686fc8e46dd528/orjson-3.11.8-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:97c8f5d3b62380b70c36ffacb2a356b7c6becec86099b177f73851ba095ef623", size = 131877, upload-time = "2026-03-31T16:15:39.484Z" }, - { url = "https://files.pythonhosted.org/packages/dd/cc/faee30cd8f00421999e40ef0eba7332e3a625ce91a58200a2f52c7fef235/orjson-3.11.8-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:436c4922968a619fb7fef1ccd4b8b3a76c13b67d607073914d675026e911a65c", size = 130361, upload-time = "2026-03-31T16:15:41.274Z" }, - { url = "https://files.pythonhosted.org/packages/5c/bb/a6c55896197f97b6d4b4e7c7fd77e7235517c34f5d6ad5aadd43c54c6d7c/orjson-3.11.8-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1ab359aff0436d80bfe8a23b46b5fea69f1e18aaf1760a709b4787f1318b317f", size = 135521, upload-time = "2026-03-31T16:15:42.758Z" }, - { url = "https://files.pythonhosted.org/packages/9c/7c/ca3a3525aa32ff636ebb1778e77e3587b016ab2edb1b618b36ba96f8f2c0/orjson-3.11.8-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f89b6d0b3a8d81e1929d3ab3d92bbc225688bd80a770c49432543928fe09ac55", size = 146862, upload-time = "2026-03-31T16:15:44.341Z" }, - { url = "https://files.pythonhosted.org/packages/3c/0c/18a9d7f18b5edd37344d1fd5be17e94dc652c67826ab749c6e5948a78112/orjson-3.11.8-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:29c009e7a2ca9ad0ed1376ce20dd692146a5d9fe4310848904b6b4fee5c5c137", size = 132847, upload-time = "2026-03-31T16:15:46.368Z" }, - { url = "https://files.pythonhosted.org/packages/23/91/7e722f352ad67ca573cee44de2a58fb810d0f4eb4e33276c6a557979fd8a/orjson-3.11.8-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:705b895b781b3e395c067129d8551655642dfe9437273211d5404e87ac752b53", size = 133637, upload-time = "2026-03-31T16:15:48.123Z" }, - { url = "https://files.pythonhosted.org/packages/af/04/32845ce13ac5bd1046ddb02ac9432ba856cc35f6d74dde95864fe0ad5523/orjson-3.11.8-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:88006eda83858a9fdf73985ce3804e885c2befb2f506c9a3723cdeb5a2880e3e", size = 141906, upload-time = "2026-03-31T16:15:49.626Z" }, - { url = "https://files.pythonhosted.org/packages/02/5e/c551387ddf2d7106d9039369862245c85738b828844d13b99ccb8d61fd06/orjson-3.11.8-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:55120759e61309af7fcf9e961c6f6af3dde5921cdb3ee863ef63fd9db126cae6", size = 423722, upload-time = "2026-03-31T16:15:51.176Z" }, - { url = "https://files.pythonhosted.org/packages/00/a3/ecfe62434096f8a794d4976728cb59bcfc4a643977f21c2040545d37eb4c/orjson-3.11.8-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:98bdc6cb889d19bed01de46e67574a2eab61f5cc6b768ed50e8ac68e9d6ffab6", size = 147801, upload-time = "2026-03-31T16:15:52.939Z" }, - { url = "https://files.pythonhosted.org/packages/18/6d/0dce10b9f6643fdc59d99333871a38fa5a769d8e2fc34a18e5d2bfdee900/orjson-3.11.8-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:708c95f925a43ab9f34625e45dcdadf09ec8a6e7b664a938f2f8d5650f6c090b", size = 136460, upload-time = "2026-03-31T16:15:54.431Z" }, ] [[package]] @@ -3574,8 +3125,6 @@ sdist = { url = "https://files.pythonhosted.org/packages/1a/d3/e04e9145f8f806723 wheels = [ { url = "https://files.pythonhosted.org/packages/92/c7/a65d1fddf49830ebc41422294eacde35286d9f68994a8aa905cb14f5aade/outlines_core-0.2.11-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:86df9740368866295077346440d911df4972da2b3f1f54b8125e6f329e8a8891", size = 2287677, upload-time = "2025-05-19T10:12:24.24Z" }, { url = "https://files.pythonhosted.org/packages/23/79/8795aed8be9b77dd69d78e7cfbfcf28c179e6b08da6e56bbbf48a09fe55f/outlines_core-0.2.11-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:96ce4dd78f106799be4a0a5795cefd1352806162973756a4b6fce4bb6eddd7e4", size = 2113000, upload-time = "2025-05-19T10:12:25.446Z" }, - { url = "https://files.pythonhosted.org/packages/87/96/7dcdc5198844145ab35528f9f93a58c3d47b87e54d0f79357c631d7b7a9a/outlines_core-0.2.11-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:daef6eaaf8c3403455ab5cbf265cb5c6838df571eb7c4b23cddac19cfc701726", size = 2287320, upload-time = "2025-05-19T10:12:35.515Z" }, - { url = "https://files.pythonhosted.org/packages/4d/68/b420b6a3beaadbf8e9f2a82132120027efd6424634013fbeca8c2fed7467/outlines_core-0.2.11-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:76b2512417c68863f8f227a080e87f755682dfd895e23b021121318be11da579", size = 2112861, upload-time = "2025-05-19T10:12:36.742Z" }, ] [[package]] @@ -3593,8 +3142,7 @@ version = "2.3.3" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, - { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.13' and sys_platform == 'emscripten') or (python_full_version < '3.13' and sys_platform == 'win32')" }, - { name = "numpy", version = "2.4.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.13' and sys_platform == 'emscripten') or (python_full_version >= '3.13' and sys_platform == 'win32')" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform == 'emscripten' or sys_platform == 'win32'" }, { name = "python-dateutil" }, { name = "pytz" }, { name = "tzdata" }, @@ -3608,19 +3156,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/a6/de/8b1895b107277d52f2b42d3a6806e69cfef0d5cf1d0ba343470b9d8e0a04/pandas-2.3.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a68e15f780eddf2b07d242e17a04aa187a7ee12b40b930bfdd78070556550e98", size = 12771002, upload-time = "2025-09-29T23:20:26.76Z" }, { url = "https://files.pythonhosted.org/packages/87/21/84072af3187a677c5893b170ba2c8fbe450a6ff911234916da889b698220/pandas-2.3.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:371a4ab48e950033bcf52b6527eccb564f52dc826c02afd9a1bc0ab731bba084", size = 13450971, upload-time = "2025-09-29T23:20:41.344Z" }, { url = "https://files.pythonhosted.org/packages/86/41/585a168330ff063014880a80d744219dbf1dd7a1c706e75ab3425a987384/pandas-2.3.3-cp312-cp312-win_amd64.whl", hash = "sha256:a16dcec078a01eeef8ee61bf64074b4e524a2a3f4b3be9326420cabe59c4778b", size = 10992722, upload-time = "2025-09-29T23:20:54.139Z" }, - { url = "https://files.pythonhosted.org/packages/cd/4b/18b035ee18f97c1040d94debd8f2e737000ad70ccc8f5513f4eefad75f4b/pandas-2.3.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:56851a737e3470de7fa88e6131f41281ed440d29a9268dcbf0002da5ac366713", size = 11544671, upload-time = "2025-09-29T23:21:05.024Z" }, - { url = "https://files.pythonhosted.org/packages/31/94/72fac03573102779920099bcac1c3b05975c2cb5f01eac609faf34bed1ca/pandas-2.3.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:bdcd9d1167f4885211e401b3036c0c8d9e274eee67ea8d0758a256d60704cfe8", size = 10680807, upload-time = "2025-09-29T23:21:15.979Z" }, - { url = "https://files.pythonhosted.org/packages/16/87/9472cf4a487d848476865321de18cc8c920b8cab98453ab79dbbc98db63a/pandas-2.3.3-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e32e7cc9af0f1cc15548288a51a3b681cc2a219faa838e995f7dc53dbab1062d", size = 11709872, upload-time = "2025-09-29T23:21:27.165Z" }, - { url = "https://files.pythonhosted.org/packages/15/07/284f757f63f8a8d69ed4472bfd85122bd086e637bf4ed09de572d575a693/pandas-2.3.3-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:318d77e0e42a628c04dc56bcef4b40de67918f7041c2b061af1da41dcff670ac", size = 12306371, upload-time = "2025-09-29T23:21:40.532Z" }, - { url = "https://files.pythonhosted.org/packages/33/81/a3afc88fca4aa925804a27d2676d22dcd2031c2ebe08aabd0ae55b9ff282/pandas-2.3.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4e0a175408804d566144e170d0476b15d78458795bb18f1304fb94160cabf40c", size = 12765333, upload-time = "2025-09-29T23:21:55.77Z" }, - { url = "https://files.pythonhosted.org/packages/8d/0f/b4d4ae743a83742f1153464cf1a8ecfafc3ac59722a0b5c8602310cb7158/pandas-2.3.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:93c2d9ab0fc11822b5eece72ec9587e172f63cff87c00b062f6e37448ced4493", size = 13418120, upload-time = "2025-09-29T23:22:10.109Z" }, - { url = "https://files.pythonhosted.org/packages/4f/c7/e54682c96a895d0c808453269e0b5928a07a127a15704fedb643e9b0a4c8/pandas-2.3.3-cp313-cp313-win_amd64.whl", hash = "sha256:f8bfc0e12dc78f777f323f55c58649591b2cd0c43534e8355c51d3fede5f4dee", size = 10993991, upload-time = "2025-09-29T23:25:04.889Z" }, - { url = "https://files.pythonhosted.org/packages/f9/ca/3f8d4f49740799189e1395812f3bf23b5e8fc7c190827d55a610da72ce55/pandas-2.3.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:75ea25f9529fdec2d2e93a42c523962261e567d250b0013b16210e1d40d7c2e5", size = 12048227, upload-time = "2025-09-29T23:22:24.343Z" }, - { url = "https://files.pythonhosted.org/packages/0e/5a/f43efec3e8c0cc92c4663ccad372dbdff72b60bdb56b2749f04aa1d07d7e/pandas-2.3.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:74ecdf1d301e812db96a465a525952f4dde225fdb6d8e5a521d47e1f42041e21", size = 11411056, upload-time = "2025-09-29T23:22:37.762Z" }, - { url = "https://files.pythonhosted.org/packages/46/b1/85331edfc591208c9d1a63a06baa67b21d332e63b7a591a5ba42a10bb507/pandas-2.3.3-cp313-cp313t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6435cb949cb34ec11cc9860246ccb2fdc9ecd742c12d3304989017d53f039a78", size = 11645189, upload-time = "2025-09-29T23:22:51.688Z" }, - { url = "https://files.pythonhosted.org/packages/44/23/78d645adc35d94d1ac4f2a3c4112ab6f5b8999f4898b8cdf01252f8df4a9/pandas-2.3.3-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:900f47d8f20860de523a1ac881c4c36d65efcb2eb850e6948140fa781736e110", size = 12121912, upload-time = "2025-09-29T23:23:05.042Z" }, - { url = "https://files.pythonhosted.org/packages/53/da/d10013df5e6aaef6b425aa0c32e1fc1f3e431e4bcabd420517dceadce354/pandas-2.3.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:a45c765238e2ed7d7c608fc5bc4a6f88b642f2f01e70c0c23d2224dd21829d86", size = 12712160, upload-time = "2025-09-29T23:23:28.57Z" }, - { url = "https://files.pythonhosted.org/packages/bd/17/e756653095a083d8a37cbd816cb87148debcfcd920129b25f99dd8d04271/pandas-2.3.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:c4fc4c21971a1a9f4bdb4c73978c7f7256caa3e62b323f70d6cb80db583350bc", size = 13199233, upload-time = "2025-09-29T23:24:24.876Z" }, ] [[package]] @@ -3676,8 +3211,7 @@ dependencies = [ { name = "accelerate" }, { name = "huggingface-hub" }, { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, - { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.13' and sys_platform == 'emscripten') or (python_full_version < '3.13' and sys_platform == 'win32')" }, - { name = "numpy", version = "2.4.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.13' and sys_platform == 'emscripten') or (python_full_version >= '3.13' and sys_platform == 'win32')" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform == 'emscripten' or sys_platform == 'win32'" }, { name = "packaging" }, { name = "psutil" }, { name = "pyyaml" }, @@ -3720,31 +3254,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/26/7d/73699ad77895f69edff76b0f332acc3d497f22f5d75e5360f78cbcaff248/pillow-11.3.0-cp312-cp312-win32.whl", hash = "sha256:7b161756381f0918e05e7cb8a371fff367e807770f8fe92ecb20d905d0e1c149", size = 6275079, upload-time = "2025-07-01T09:14:30.104Z" }, { url = "https://files.pythonhosted.org/packages/8c/ce/e7dfc873bdd9828f3b6e5c2bbb74e47a98ec23cc5c74fc4e54462f0d9204/pillow-11.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:a6444696fce635783440b7f7a9fc24b3ad10a9ea3f0ab66c5905be1c19ccf17d", size = 6986324, upload-time = "2025-07-01T09:14:31.899Z" }, { url = "https://files.pythonhosted.org/packages/16/8f/b13447d1bf0b1f7467ce7d86f6e6edf66c0ad7cf44cf5c87a37f9bed9936/pillow-11.3.0-cp312-cp312-win_arm64.whl", hash = "sha256:2aceea54f957dd4448264f9bf40875da0415c83eb85f55069d89c0ed436e3542", size = 2423067, upload-time = "2025-07-01T09:14:33.709Z" }, - { url = "https://files.pythonhosted.org/packages/1e/93/0952f2ed8db3a5a4c7a11f91965d6184ebc8cd7cbb7941a260d5f018cd2d/pillow-11.3.0-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:1c627742b539bba4309df89171356fcb3cc5a9178355b2727d1b74a6cf155fbd", size = 2128328, upload-time = "2025-07-01T09:14:35.276Z" }, - { url = "https://files.pythonhosted.org/packages/4b/e8/100c3d114b1a0bf4042f27e0f87d2f25e857e838034e98ca98fe7b8c0a9c/pillow-11.3.0-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:30b7c02f3899d10f13d7a48163c8969e4e653f8b43416d23d13d1bbfdc93b9f8", size = 2170652, upload-time = "2025-07-01T09:14:37.203Z" }, - { url = "https://files.pythonhosted.org/packages/aa/86/3f758a28a6e381758545f7cdb4942e1cb79abd271bea932998fc0db93cb6/pillow-11.3.0-cp313-cp313-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:7859a4cc7c9295f5838015d8cc0a9c215b77e43d07a25e460f35cf516df8626f", size = 2227443, upload-time = "2025-07-01T09:14:39.344Z" }, - { url = "https://files.pythonhosted.org/packages/01/f4/91d5b3ffa718df2f53b0dc109877993e511f4fd055d7e9508682e8aba092/pillow-11.3.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:ec1ee50470b0d050984394423d96325b744d55c701a439d2bd66089bff963d3c", size = 5278474, upload-time = "2025-07-01T09:14:41.843Z" }, - { url = "https://files.pythonhosted.org/packages/f9/0e/37d7d3eca6c879fbd9dba21268427dffda1ab00d4eb05b32923d4fbe3b12/pillow-11.3.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:7db51d222548ccfd274e4572fdbf3e810a5e66b00608862f947b163e613b67dd", size = 4686038, upload-time = "2025-07-01T09:14:44.008Z" }, - { url = "https://files.pythonhosted.org/packages/ff/b0/3426e5c7f6565e752d81221af9d3676fdbb4f352317ceafd42899aaf5d8a/pillow-11.3.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:2d6fcc902a24ac74495df63faad1884282239265c6839a0a6416d33faedfae7e", size = 5864407, upload-time = "2025-07-03T13:10:15.628Z" }, - { url = "https://files.pythonhosted.org/packages/fc/c1/c6c423134229f2a221ee53f838d4be9d82bab86f7e2f8e75e47b6bf6cd77/pillow-11.3.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f0f5d8f4a08090c6d6d578351a2b91acf519a54986c055af27e7a93feae6d3f1", size = 7639094, upload-time = "2025-07-03T13:10:21.857Z" }, - { url = "https://files.pythonhosted.org/packages/ba/c9/09e6746630fe6372c67c648ff9deae52a2bc20897d51fa293571977ceb5d/pillow-11.3.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c37d8ba9411d6003bba9e518db0db0c58a680ab9fe5179f040b0463644bc9805", size = 5973503, upload-time = "2025-07-01T09:14:45.698Z" }, - { url = "https://files.pythonhosted.org/packages/d5/1c/a2a29649c0b1983d3ef57ee87a66487fdeb45132df66ab30dd37f7dbe162/pillow-11.3.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:13f87d581e71d9189ab21fe0efb5a23e9f28552d5be6979e84001d3b8505abe8", size = 6642574, upload-time = "2025-07-01T09:14:47.415Z" }, - { url = "https://files.pythonhosted.org/packages/36/de/d5cc31cc4b055b6c6fd990e3e7f0f8aaf36229a2698501bcb0cdf67c7146/pillow-11.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:023f6d2d11784a465f09fd09a34b150ea4672e85fb3d05931d89f373ab14abb2", size = 6084060, upload-time = "2025-07-01T09:14:49.636Z" }, - { url = "https://files.pythonhosted.org/packages/d5/ea/502d938cbaeec836ac28a9b730193716f0114c41325db428e6b280513f09/pillow-11.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:45dfc51ac5975b938e9809451c51734124e73b04d0f0ac621649821a63852e7b", size = 6721407, upload-time = "2025-07-01T09:14:51.962Z" }, - { url = "https://files.pythonhosted.org/packages/45/9c/9c5e2a73f125f6cbc59cc7087c8f2d649a7ae453f83bd0362ff7c9e2aee2/pillow-11.3.0-cp313-cp313-win32.whl", hash = "sha256:a4d336baed65d50d37b88ca5b60c0fa9d81e3a87d4a7930d3880d1624d5b31f3", size = 6273841, upload-time = "2025-07-01T09:14:54.142Z" }, - { url = "https://files.pythonhosted.org/packages/23/85/397c73524e0cd212067e0c969aa245b01d50183439550d24d9f55781b776/pillow-11.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:0bce5c4fd0921f99d2e858dc4d4d64193407e1b99478bc5cacecba2311abde51", size = 6978450, upload-time = "2025-07-01T09:14:56.436Z" }, - { url = "https://files.pythonhosted.org/packages/17/d2/622f4547f69cd173955194b78e4d19ca4935a1b0f03a302d655c9f6aae65/pillow-11.3.0-cp313-cp313-win_arm64.whl", hash = "sha256:1904e1264881f682f02b7f8167935cce37bc97db457f8e7849dc3a6a52b99580", size = 2423055, upload-time = "2025-07-01T09:14:58.072Z" }, - { url = "https://files.pythonhosted.org/packages/dd/80/a8a2ac21dda2e82480852978416cfacd439a4b490a501a288ecf4fe2532d/pillow-11.3.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:4c834a3921375c48ee6b9624061076bc0a32a60b5532b322cc0ea64e639dd50e", size = 5281110, upload-time = "2025-07-01T09:14:59.79Z" }, - { url = "https://files.pythonhosted.org/packages/44/d6/b79754ca790f315918732e18f82a8146d33bcd7f4494380457ea89eb883d/pillow-11.3.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:5e05688ccef30ea69b9317a9ead994b93975104a677a36a8ed8106be9260aa6d", size = 4689547, upload-time = "2025-07-01T09:15:01.648Z" }, - { url = "https://files.pythonhosted.org/packages/49/20/716b8717d331150cb00f7fdd78169c01e8e0c219732a78b0e59b6bdb2fd6/pillow-11.3.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:1019b04af07fc0163e2810167918cb5add8d74674b6267616021ab558dc98ced", size = 5901554, upload-time = "2025-07-03T13:10:27.018Z" }, - { url = "https://files.pythonhosted.org/packages/74/cf/a9f3a2514a65bb071075063a96f0a5cf949c2f2fce683c15ccc83b1c1cab/pillow-11.3.0-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f944255db153ebb2b19c51fe85dd99ef0ce494123f21b9db4877ffdfc5590c7c", size = 7669132, upload-time = "2025-07-03T13:10:33.01Z" }, - { url = "https://files.pythonhosted.org/packages/98/3c/da78805cbdbee9cb43efe8261dd7cc0b4b93f2ac79b676c03159e9db2187/pillow-11.3.0-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1f85acb69adf2aaee8b7da124efebbdb959a104db34d3a2cb0f3793dbae422a8", size = 6005001, upload-time = "2025-07-01T09:15:03.365Z" }, - { url = "https://files.pythonhosted.org/packages/6c/fa/ce044b91faecf30e635321351bba32bab5a7e034c60187fe9698191aef4f/pillow-11.3.0-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:05f6ecbeff5005399bb48d198f098a9b4b6bdf27b8487c7f38ca16eeb070cd59", size = 6668814, upload-time = "2025-07-01T09:15:05.655Z" }, - { url = "https://files.pythonhosted.org/packages/7b/51/90f9291406d09bf93686434f9183aba27b831c10c87746ff49f127ee80cb/pillow-11.3.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:a7bc6e6fd0395bc052f16b1a8670859964dbd7003bd0af2ff08342eb6e442cfe", size = 6113124, upload-time = "2025-07-01T09:15:07.358Z" }, - { url = "https://files.pythonhosted.org/packages/cd/5a/6fec59b1dfb619234f7636d4157d11fb4e196caeee220232a8d2ec48488d/pillow-11.3.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:83e1b0161c9d148125083a35c1c5a89db5b7054834fd4387499e06552035236c", size = 6747186, upload-time = "2025-07-01T09:15:09.317Z" }, - { url = "https://files.pythonhosted.org/packages/49/6b/00187a044f98255225f172de653941e61da37104a9ea60e4f6887717e2b5/pillow-11.3.0-cp313-cp313t-win32.whl", hash = "sha256:2a3117c06b8fb646639dce83694f2f9eac405472713fcb1ae887469c0d4f6788", size = 6277546, upload-time = "2025-07-01T09:15:11.311Z" }, - { url = "https://files.pythonhosted.org/packages/e8/5c/6caaba7e261c0d75bab23be79f1d06b5ad2a2ae49f028ccec801b0e853d6/pillow-11.3.0-cp313-cp313t-win_amd64.whl", hash = "sha256:857844335c95bea93fb39e0fa2726b4d9d758850b34075a7e3ff4f4fa3aa3b31", size = 6985102, upload-time = "2025-07-01T09:15:13.164Z" }, - { url = "https://files.pythonhosted.org/packages/f3/7e/b623008460c09a0cb38263c93b828c666493caee2eb34ff67f778b87e58c/pillow-11.3.0-cp313-cp313t-win_arm64.whl", hash = "sha256:8797edc41f3e8536ae4b10897ee2f637235c94f27404cac7297f7b607dd0716e", size = 2424803, upload-time = "2025-07-01T09:15:15.695Z" }, ] [[package]] @@ -3875,36 +3384,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/80/9e/e7b85720b98c45a45e1fca6a177024934dc9bc5f4d5dd04207f216fc33ed/propcache-0.4.1-cp312-cp312-win32.whl", hash = "sha256:671538c2262dadb5ba6395e26c1731e1d52534bfe9ae56d0b5573ce539266aa8", size = 38066, upload-time = "2025-10-08T19:47:03.503Z" }, { url = "https://files.pythonhosted.org/packages/54/09/d19cff2a5aaac632ec8fc03737b223597b1e347416934c1b3a7df079784c/propcache-0.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:cb2d222e72399fcf5890d1d5cc1060857b9b236adff2792ff48ca2dfd46c81db", size = 41655, upload-time = "2025-10-08T19:47:04.973Z" }, { url = "https://files.pythonhosted.org/packages/68/ab/6b5c191bb5de08036a8c697b265d4ca76148efb10fa162f14af14fb5f076/propcache-0.4.1-cp312-cp312-win_arm64.whl", hash = "sha256:204483131fb222bdaaeeea9f9e6c6ed0cac32731f75dfc1d4a567fc1926477c1", size = 37789, upload-time = "2025-10-08T19:47:06.077Z" }, - { url = "https://files.pythonhosted.org/packages/bf/df/6d9c1b6ac12b003837dde8a10231a7344512186e87b36e855bef32241942/propcache-0.4.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:43eedf29202c08550aac1d14e0ee619b0430aaef78f85864c1a892294fbc28cf", size = 77750, upload-time = "2025-10-08T19:47:07.648Z" }, - { url = "https://files.pythonhosted.org/packages/8b/e8/677a0025e8a2acf07d3418a2e7ba529c9c33caf09d3c1f25513023c1db56/propcache-0.4.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:d62cdfcfd89ccb8de04e0eda998535c406bf5e060ffd56be6c586cbcc05b3311", size = 44780, upload-time = "2025-10-08T19:47:08.851Z" }, - { url = "https://files.pythonhosted.org/packages/89/a4/92380f7ca60f99ebae761936bc48a72a639e8a47b29050615eef757cb2a7/propcache-0.4.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:cae65ad55793da34db5f54e4029b89d3b9b9490d8abe1b4c7ab5d4b8ec7ebf74", size = 46308, upload-time = "2025-10-08T19:47:09.982Z" }, - { url = "https://files.pythonhosted.org/packages/2d/48/c5ac64dee5262044348d1d78a5f85dd1a57464a60d30daee946699963eb3/propcache-0.4.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:333ddb9031d2704a301ee3e506dc46b1fe5f294ec198ed6435ad5b6a085facfe", size = 208182, upload-time = "2025-10-08T19:47:11.319Z" }, - { url = "https://files.pythonhosted.org/packages/c6/0c/cd762dd011a9287389a6a3eb43aa30207bde253610cca06824aeabfe9653/propcache-0.4.1-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:fd0858c20f078a32cf55f7e81473d96dcf3b93fd2ccdb3d40fdf54b8573df3af", size = 211215, upload-time = "2025-10-08T19:47:13.146Z" }, - { url = "https://files.pythonhosted.org/packages/30/3e/49861e90233ba36890ae0ca4c660e95df565b2cd15d4a68556ab5865974e/propcache-0.4.1-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:678ae89ebc632c5c204c794f8dab2837c5f159aeb59e6ed0539500400577298c", size = 218112, upload-time = "2025-10-08T19:47:14.913Z" }, - { url = "https://files.pythonhosted.org/packages/f1/8b/544bc867e24e1bd48f3118cecd3b05c694e160a168478fa28770f22fd094/propcache-0.4.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d472aeb4fbf9865e0c6d622d7f4d54a4e101a89715d8904282bb5f9a2f476c3f", size = 204442, upload-time = "2025-10-08T19:47:16.277Z" }, - { url = "https://files.pythonhosted.org/packages/50/a6/4282772fd016a76d3e5c0df58380a5ea64900afd836cec2c2f662d1b9bb3/propcache-0.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4d3df5fa7e36b3225954fba85589da77a0fe6a53e3976de39caf04a0db4c36f1", size = 199398, upload-time = "2025-10-08T19:47:17.962Z" }, - { url = "https://files.pythonhosted.org/packages/3e/ec/d8a7cd406ee1ddb705db2139f8a10a8a427100347bd698e7014351c7af09/propcache-0.4.1-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:ee17f18d2498f2673e432faaa71698032b0127ebf23ae5974eeaf806c279df24", size = 196920, upload-time = "2025-10-08T19:47:19.355Z" }, - { url = "https://files.pythonhosted.org/packages/f6/6c/f38ab64af3764f431e359f8baf9e0a21013e24329e8b85d2da32e8ed07ca/propcache-0.4.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:580e97762b950f993ae618e167e7be9256b8353c2dcd8b99ec100eb50f5286aa", size = 203748, upload-time = "2025-10-08T19:47:21.338Z" }, - { url = "https://files.pythonhosted.org/packages/d6/e3/fa846bd70f6534d647886621388f0a265254d30e3ce47e5c8e6e27dbf153/propcache-0.4.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:501d20b891688eb8e7aa903021f0b72d5a55db40ffaab27edefd1027caaafa61", size = 205877, upload-time = "2025-10-08T19:47:23.059Z" }, - { url = "https://files.pythonhosted.org/packages/e2/39/8163fc6f3133fea7b5f2827e8eba2029a0277ab2c5beee6c1db7b10fc23d/propcache-0.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9a0bd56e5b100aef69bd8562b74b46254e7c8812918d3baa700c8a8009b0af66", size = 199437, upload-time = "2025-10-08T19:47:24.445Z" }, - { url = "https://files.pythonhosted.org/packages/93/89/caa9089970ca49c7c01662bd0eeedfe85494e863e8043565aeb6472ce8fe/propcache-0.4.1-cp313-cp313-win32.whl", hash = "sha256:bcc9aaa5d80322bc2fb24bb7accb4a30f81e90ab8d6ba187aec0744bc302ad81", size = 37586, upload-time = "2025-10-08T19:47:25.736Z" }, - { url = "https://files.pythonhosted.org/packages/f5/ab/f76ec3c3627c883215b5c8080debb4394ef5a7a29be811f786415fc1e6fd/propcache-0.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:381914df18634f5494334d201e98245c0596067504b9372d8cf93f4bb23e025e", size = 40790, upload-time = "2025-10-08T19:47:26.847Z" }, - { url = "https://files.pythonhosted.org/packages/59/1b/e71ae98235f8e2ba5004d8cb19765a74877abf189bc53fc0c80d799e56c3/propcache-0.4.1-cp313-cp313-win_arm64.whl", hash = "sha256:8873eb4460fd55333ea49b7d189749ecf6e55bf85080f11b1c4530ed3034cba1", size = 37158, upload-time = "2025-10-08T19:47:27.961Z" }, - { url = "https://files.pythonhosted.org/packages/83/ce/a31bbdfc24ee0dcbba458c8175ed26089cf109a55bbe7b7640ed2470cfe9/propcache-0.4.1-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:92d1935ee1f8d7442da9c0c4fa7ac20d07e94064184811b685f5c4fada64553b", size = 81451, upload-time = "2025-10-08T19:47:29.445Z" }, - { url = "https://files.pythonhosted.org/packages/25/9c/442a45a470a68456e710d96cacd3573ef26a1d0a60067e6a7d5e655621ed/propcache-0.4.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:473c61b39e1460d386479b9b2f337da492042447c9b685f28be4f74d3529e566", size = 46374, upload-time = "2025-10-08T19:47:30.579Z" }, - { url = "https://files.pythonhosted.org/packages/f4/bf/b1d5e21dbc3b2e889ea4327044fb16312a736d97640fb8b6aa3f9c7b3b65/propcache-0.4.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:c0ef0aaafc66fbd87842a3fe3902fd889825646bc21149eafe47be6072725835", size = 48396, upload-time = "2025-10-08T19:47:31.79Z" }, - { url = "https://files.pythonhosted.org/packages/f4/04/5b4c54a103d480e978d3c8a76073502b18db0c4bc17ab91b3cb5092ad949/propcache-0.4.1-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f95393b4d66bfae908c3ca8d169d5f79cd65636ae15b5e7a4f6e67af675adb0e", size = 275950, upload-time = "2025-10-08T19:47:33.481Z" }, - { url = "https://files.pythonhosted.org/packages/b4/c1/86f846827fb969c4b78b0af79bba1d1ea2156492e1b83dea8b8a6ae27395/propcache-0.4.1-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c07fda85708bc48578467e85099645167a955ba093be0a2dcba962195676e859", size = 273856, upload-time = "2025-10-08T19:47:34.906Z" }, - { url = "https://files.pythonhosted.org/packages/36/1d/fc272a63c8d3bbad6878c336c7a7dea15e8f2d23a544bda43205dfa83ada/propcache-0.4.1-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:af223b406d6d000830c6f65f1e6431783fc3f713ba3e6cc8c024d5ee96170a4b", size = 280420, upload-time = "2025-10-08T19:47:36.338Z" }, - { url = "https://files.pythonhosted.org/packages/07/0c/01f2219d39f7e53d52e5173bcb09c976609ba30209912a0680adfb8c593a/propcache-0.4.1-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a78372c932c90ee474559c5ddfffd718238e8673c340dc21fe45c5b8b54559a0", size = 263254, upload-time = "2025-10-08T19:47:37.692Z" }, - { url = "https://files.pythonhosted.org/packages/2d/18/cd28081658ce597898f0c4d174d4d0f3c5b6d4dc27ffafeef835c95eb359/propcache-0.4.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:564d9f0d4d9509e1a870c920a89b2fec951b44bf5ba7d537a9e7c1ccec2c18af", size = 261205, upload-time = "2025-10-08T19:47:39.659Z" }, - { url = "https://files.pythonhosted.org/packages/7a/71/1f9e22eb8b8316701c2a19fa1f388c8a3185082607da8e406a803c9b954e/propcache-0.4.1-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:17612831fda0138059cc5546f4d12a2aacfb9e47068c06af35c400ba58ba7393", size = 247873, upload-time = "2025-10-08T19:47:41.084Z" }, - { url = "https://files.pythonhosted.org/packages/4a/65/3d4b61f36af2b4eddba9def857959f1016a51066b4f1ce348e0cf7881f58/propcache-0.4.1-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:41a89040cb10bd345b3c1a873b2bf36413d48da1def52f268a055f7398514874", size = 262739, upload-time = "2025-10-08T19:47:42.51Z" }, - { url = "https://files.pythonhosted.org/packages/2a/42/26746ab087faa77c1c68079b228810436ccd9a5ce9ac85e2b7307195fd06/propcache-0.4.1-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:e35b88984e7fa64aacecea39236cee32dd9bd8c55f57ba8a75cf2399553f9bd7", size = 263514, upload-time = "2025-10-08T19:47:43.927Z" }, - { url = "https://files.pythonhosted.org/packages/94/13/630690fe201f5502d2403dd3cfd451ed8858fe3c738ee88d095ad2ff407b/propcache-0.4.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:6f8b465489f927b0df505cbe26ffbeed4d6d8a2bbc61ce90eb074ff129ef0ab1", size = 257781, upload-time = "2025-10-08T19:47:45.448Z" }, - { url = "https://files.pythonhosted.org/packages/92/f7/1d4ec5841505f423469efbfc381d64b7b467438cd5a4bbcbb063f3b73d27/propcache-0.4.1-cp313-cp313t-win32.whl", hash = "sha256:2ad890caa1d928c7c2965b48f3a3815c853180831d0e5503d35cf00c472f4717", size = 41396, upload-time = "2025-10-08T19:47:47.202Z" }, - { url = "https://files.pythonhosted.org/packages/48/f0/615c30622316496d2cbbc29f5985f7777d3ada70f23370608c1d3e081c1f/propcache-0.4.1-cp313-cp313t-win_amd64.whl", hash = "sha256:f7ee0e597f495cf415bcbd3da3caa3bd7e816b74d0d52b8145954c5e6fd3ff37", size = 44897, upload-time = "2025-10-08T19:47:48.336Z" }, - { url = "https://files.pythonhosted.org/packages/fd/ca/6002e46eccbe0e33dcd4069ef32f7f1c9e243736e07adca37ae8c4830ec3/propcache-0.4.1-cp313-cp313t-win_arm64.whl", hash = "sha256:929d7cbe1f01bb7baffb33dc14eb5691c95831450a26354cd210a8155170c93a", size = 39789, upload-time = "2025-10-08T19:47:49.876Z" }, { url = "https://files.pythonhosted.org/packages/5b/5a/bc7b4a4ef808fa59a816c17b20c4bef6884daebbdf627ff2a161da67da19/propcache-0.4.1-py3-none-any.whl", hash = "sha256:af2a6052aeb6cf17d3e46ee169099044fd8224cbaf75c76a2ef596e8163e2237", size = 13305, upload-time = "2025-10-08T19:49:00.792Z" }, ] @@ -3941,12 +3420,6 @@ version = "7.2.2" source = { registry = "https://pypi.org/simple" } sdist = { url = "https://files.pythonhosted.org/packages/aa/c6/d1ddf4abb55e93cebc4f2ed8b5d6dbad109ecb8d63748dd2b20ab5e57ebe/psutil-7.2.2.tar.gz", hash = "sha256:0746f5f8d406af344fd547f1c8daa5f5c33dbc293bb8d6a16d80b4bb88f59372", size = 493740, upload-time = "2026-01-28T18:14:54.428Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/51/08/510cbdb69c25a96f4ae523f733cdc963ae654904e8db864c07585ef99875/psutil-7.2.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:2edccc433cbfa046b980b0df0171cd25bcaeb3a68fe9022db0979e7aa74a826b", size = 130595, upload-time = "2026-01-28T18:14:57.293Z" }, - { url = "https://files.pythonhosted.org/packages/d6/f5/97baea3fe7a5a9af7436301f85490905379b1c6f2dd51fe3ecf24b4c5fbf/psutil-7.2.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:e78c8603dcd9a04c7364f1a3e670cea95d51ee865e4efb3556a3a63adef958ea", size = 131082, upload-time = "2026-01-28T18:14:59.732Z" }, - { url = "https://files.pythonhosted.org/packages/37/d6/246513fbf9fa174af531f28412297dd05241d97a75911ac8febefa1a53c6/psutil-7.2.2-cp313-cp313t-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1a571f2330c966c62aeda00dd24620425d4b0cc86881c89861fbc04549e5dc63", size = 181476, upload-time = "2026-01-28T18:15:01.884Z" }, - { 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/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" }, @@ -3997,20 +3470,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/10/6e/f08075f1472e5159553501fde2cc7bc6700944bdabe49a03f8a035ee6ccd/pyarrow-23.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:068701f6823449b1b6469120f399a1239766b117d211c5d2519d4ed5861f75de", size = 48147129, upload-time = "2026-01-18T16:16:00.299Z" }, { url = "https://files.pythonhosted.org/packages/7d/82/d5a680cd507deed62d141cc7f07f7944a6766fc51019f7f118e4d8ad0fb8/pyarrow-23.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:1801ba947015d10e23bca9dd6ef5d0e9064a81569a89b6e9a63b59224fd060df", size = 50596642, upload-time = "2026-01-18T16:16:08.502Z" }, { url = "https://files.pythonhosted.org/packages/a9/26/4f29c61b3dce9fa7780303b86895ec6a0917c9af927101daaaf118fbe462/pyarrow-23.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:52265266201ec25b6839bf6bd4ea918ca6d50f31d13e1cf200b4261cd11dc25c", size = 27660628, upload-time = "2026-01-18T16:16:15.28Z" }, - { url = "https://files.pythonhosted.org/packages/66/34/564db447d083ec7ff93e0a883a597d2f214e552823bfc178a2d0b1f2c257/pyarrow-23.0.0-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:ad96a597547af7827342ffb3c503c8316e5043bb09b47a84885ce39394c96e00", size = 34184630, upload-time = "2026-01-18T16:16:22.141Z" }, - { url = "https://files.pythonhosted.org/packages/aa/3a/3999daebcb5e6119690c92a621c4d78eef2ffba7a0a1b56386d2875fcd77/pyarrow-23.0.0-cp313-cp313-macosx_12_0_x86_64.whl", hash = "sha256:b9edf990df77c2901e79608f08c13fbde60202334a4fcadb15c1f57bf7afee43", size = 35796820, upload-time = "2026-01-18T16:16:29.441Z" }, - { url = "https://files.pythonhosted.org/packages/ec/ee/39195233056c6a8d0976d7d1ac1cd4fe21fb0ec534eca76bc23ef3f60e11/pyarrow-23.0.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:36d1b5bc6ddcaff0083ceec7e2561ed61a51f49cce8be079ee8ed406acb6fdef", size = 44438735, upload-time = "2026-01-18T16:16:38.79Z" }, - { url = "https://files.pythonhosted.org/packages/2c/41/6a7328ee493527e7afc0c88d105ecca69a3580e29f2faaeac29308369fd7/pyarrow-23.0.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:4292b889cd224f403304ddda8b63a36e60f92911f89927ec8d98021845ea21be", size = 47557263, upload-time = "2026-01-18T16:16:46.248Z" }, - { url = "https://files.pythonhosted.org/packages/c6/ee/34e95b21ee84db494eae60083ddb4383477b31fb1fd19fd866d794881696/pyarrow-23.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:dfd9e133e60eaa847fd80530a1b89a052f09f695d0b9c34c235ea6b2e0924cf7", size = 48153529, upload-time = "2026-01-18T16:16:53.412Z" }, - { url = "https://files.pythonhosted.org/packages/52/88/8a8d83cea30f4563efa1b7bf51d241331ee5cd1b185a7e063f5634eca415/pyarrow-23.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:832141cc09fac6aab1cd3719951d23301396968de87080c57c9a7634e0ecd068", size = 50598851, upload-time = "2026-01-18T16:17:01.133Z" }, - { url = "https://files.pythonhosted.org/packages/c6/4c/2929c4be88723ba025e7b3453047dc67e491c9422965c141d24bab6b5962/pyarrow-23.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:7a7d067c9a88faca655c71bcc30ee2782038d59c802d57950826a07f60d83c4c", size = 27577747, upload-time = "2026-01-18T16:18:02.413Z" }, - { url = "https://files.pythonhosted.org/packages/64/52/564a61b0b82d72bd68ec3aef1adda1e3eba776f89134b9ebcb5af4b13cb6/pyarrow-23.0.0-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:ce9486e0535a843cf85d990e2ec5820a47918235183a5c7b8b97ed7e92c2d47d", size = 34446038, upload-time = "2026-01-18T16:17:07.861Z" }, - { url = "https://files.pythonhosted.org/packages/cc/c9/232d4f9855fd1de0067c8a7808a363230d223c83aeee75e0fe6eab851ba9/pyarrow-23.0.0-cp313-cp313t-macosx_12_0_x86_64.whl", hash = "sha256:075c29aeaa685fd1182992a9ed2499c66f084ee54eea47da3eb76e125e06064c", size = 35921142, upload-time = "2026-01-18T16:17:15.401Z" }, - { url = "https://files.pythonhosted.org/packages/96/f2/60af606a3748367b906bb82d41f0032e059f075444445d47e32a7ff1df62/pyarrow-23.0.0-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:799965a5379589510d888be3094c2296efd186a17ca1cef5b77703d4d5121f53", size = 44490374, upload-time = "2026-01-18T16:17:23.93Z" }, - { url = "https://files.pythonhosted.org/packages/ff/2d/7731543050a678ea3a413955a2d5d80d2a642f270aa57a3cb7d5a86e3f46/pyarrow-23.0.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:ef7cac8fe6fccd8b9e7617bfac785b0371a7fe26af59463074e4882747145d40", size = 47527896, upload-time = "2026-01-18T16:17:33.393Z" }, - { url = "https://files.pythonhosted.org/packages/5a/90/f3342553b7ac9879413aed46500f1637296f3c8222107523a43a1c08b42a/pyarrow-23.0.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:15a414f710dc927132dd67c361f78c194447479555af57317066ee5116b90e9e", size = 48210401, upload-time = "2026-01-18T16:17:42.012Z" }, - { url = "https://files.pythonhosted.org/packages/f3/da/9862ade205ecc46c172b6ce5038a74b5151c7401e36255f15975a45878b2/pyarrow-23.0.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:3e0d2e6915eca7d786be6a77bf227fbc06d825a75b5b5fe9bcbef121dec32685", size = 50579677, upload-time = "2026-01-18T16:17:50.241Z" }, - { url = "https://files.pythonhosted.org/packages/c2/4c/f11f371f5d4740a5dafc2e11c76bcf42d03dfdb2d68696da97de420b6963/pyarrow-23.0.0-cp313-cp313t-win_amd64.whl", hash = "sha256:4b317ea6e800b5704e5e5929acb6e2dc13e9276b708ea97a39eb8b345aa2658b", size = 27631889, upload-time = "2026-01-18T16:17:56.55Z" }, ] [[package]] @@ -4054,37 +3513,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/fd/7d/931c2539b31a7b375e7d595b88401eeb5bd6c5ce1059c9123f9b608aaa14/pybase64-1.4.3-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:66e3791f2ed725a46593f8bd2761ff37d01e2cdad065b1dceb89066f476e50c6", size = 54333, upload-time = "2025-12-06T13:23:32.422Z" }, { url = "https://files.pythonhosted.org/packages/de/5e/537601e02cc01f27e9d75f440f1a6095b8df44fc28b1eef2cd739aea8cec/pybase64-1.4.3-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:72bb0b6bddadab26e1b069bb78e83092711a111a80a0d6b9edcb08199ad7299b", size = 56492, upload-time = "2025-12-06T13:23:33.515Z" }, { url = "https://files.pythonhosted.org/packages/96/97/2a2e57acf8f5c9258d22aba52e71f8050e167b29ed2ee1113677c1b600c1/pybase64-1.4.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:5b3365dbcbcdb0a294f0f50af0c0a16b27a232eddeeb0bceeefd844ef30d2a23", size = 70974, upload-time = "2025-12-06T13:23:36.27Z" }, - { url = "https://files.pythonhosted.org/packages/5c/8d/20b68f11adfc4c22230e034b65c71392e3e338b413bf713c8945bd2ccfb3/pybase64-1.4.3-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:27fdff227a0c0e182e0ba37a99109645188978b920dfb20d8b9c17eeee370d0d", size = 30932, upload-time = "2025-12-06T13:23:43.348Z" }, - { url = "https://files.pythonhosted.org/packages/f7/79/b1b550ac6bff51a4880bf6e089008b2e1ca16f2c98db5e039a08ac3ad157/pybase64-1.4.3-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:2a8204f1fdfec5aa4184249b51296c0de95445869920c88123978304aad42df1", size = 31394, upload-time = "2025-12-06T13:23:44.317Z" }, - { url = "https://files.pythonhosted.org/packages/82/70/b5d7c5932bf64ee1ec5da859fbac981930b6a55d432a603986c7f509c838/pybase64-1.4.3-cp313-cp313-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:874fc2a3777de6baf6aa921a7aa73b3be98295794bea31bd80568a963be30767", size = 38078, upload-time = "2025-12-06T13:23:45.348Z" }, - { url = "https://files.pythonhosted.org/packages/1c/c9/24b3b905cf75e23a9a4deaf203b35ffcb9f473ac0e6d8257f91a05dfce62/pybase64-1.4.3-cp313-cp313-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:1d45c8fe8fe82b65c36b227bb4a2cf623d9ada16bed602ce2d3e18c35285b72a", size = 68244, upload-time = "2025-12-06T13:23:49.026Z" }, - { url = "https://files.pythonhosted.org/packages/f8/cd/d15b0c3e25e5859fab0416dc5b96d34d6bd2603c1c96a07bb2202b68ab92/pybase64-1.4.3-cp313-cp313-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:ad70c26ba091d8f5167e9d4e1e86a0483a5414805cdb598a813db635bd3be8b8", size = 71620, upload-time = "2025-12-06T13:23:50.081Z" }, - { url = "https://files.pythonhosted.org/packages/0d/31/4ca953cc3dcde2b3711d6bfd70a6f4ad2ca95a483c9698076ba605f1520f/pybase64-1.4.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:e98310b7c43145221e7194ac9fa7fffc84763c87bfc5e2f59f9f92363475bdc1", size = 59930, upload-time = "2025-12-06T13:23:51.68Z" }, - { url = "https://files.pythonhosted.org/packages/60/55/e7f7bdcd0fd66e61dda08db158ffda5c89a306bbdaaf5a062fbe4e48f4a1/pybase64-1.4.3-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.whl", hash = "sha256:398685a76034e91485a28aeebcb49e64cd663212fd697b2497ac6dfc1df5e671", size = 56425, upload-time = "2025-12-06T13:23:52.732Z" }, - { url = "https://files.pythonhosted.org/packages/cb/65/b592c7f921e51ca1aca3af5b0d201a98666d0a36b930ebb67e7c2ed27395/pybase64-1.4.3-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:7e46400a6461187ccb52ed75b0045d937529e801a53a9cd770b350509f9e4d50", size = 59327, upload-time = "2025-12-06T13:23:53.856Z" }, - { url = "https://files.pythonhosted.org/packages/23/95/1613d2fb82dbb1548595ad4179f04e9a8451bfa18635efce18b631eabe3f/pybase64-1.4.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:1b62b9f2f291d94f5e0b76ab499790b7dcc78a009d4ceea0b0428770267484b6", size = 60294, upload-time = "2025-12-06T13:23:54.937Z" }, - { url = "https://files.pythonhosted.org/packages/9d/73/40431f37f7d1b3eab4673e7946ff1e8f5d6bd425ec257e834dae8a6fc7b0/pybase64-1.4.3-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:f30ceb5fa4327809dede614be586efcbc55404406d71e1f902a6fdcf322b93b2", size = 54858, upload-time = "2025-12-06T13:23:56.031Z" }, - { url = "https://files.pythonhosted.org/packages/a7/84/f6368bcaf9f743732e002a9858646fd7a54f428490d427dd6847c5cfe89e/pybase64-1.4.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0d5f18ed53dfa1d4cf8b39ee542fdda8e66d365940e11f1710989b3cf4a2ed66", size = 58629, upload-time = "2025-12-06T13:23:57.12Z" }, - { url = "https://files.pythonhosted.org/packages/43/75/359532f9adb49c6b546cafc65c46ed75e2ccc220d514ba81c686fbd83965/pybase64-1.4.3-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:119d31aa4b58b85a8ebd12b63c07681a138c08dfc2fe5383459d42238665d3eb", size = 52448, upload-time = "2025-12-06T13:23:58.298Z" }, - { url = "https://files.pythonhosted.org/packages/92/6c/ade2ba244c3f33ed920a7ed572ad772eb0b5f14480b72d629d0c9e739a40/pybase64-1.4.3-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:3cf0218b0e2f7988cf7d738a73b6a1d14f3be6ce249d7c0f606e768366df2cce", size = 68841, upload-time = "2025-12-06T13:23:59.886Z" }, - { url = "https://files.pythonhosted.org/packages/a0/51/b345139cd236be382f2d4d4453c21ee6299e14d2f759b668e23080f8663f/pybase64-1.4.3-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:12f4ee5e988bc5c0c1106b0d8fc37fb0508f12dab76bac1b098cb500d148da9d", size = 57910, upload-time = "2025-12-06T13:24:00.994Z" }, - { url = "https://files.pythonhosted.org/packages/1a/b8/9f84bdc4f1c4f0052489396403c04be2f9266a66b70c776001eaf0d78c1f/pybase64-1.4.3-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:937826bc7b6b95b594a45180e81dd4d99bd4dd4814a443170e399163f7ff3fb6", size = 54335, upload-time = "2025-12-06T13:24:02.046Z" }, - { url = "https://files.pythonhosted.org/packages/d0/c7/be63b617d284de46578a366da77ede39c8f8e815ed0d82c7c2acca560fab/pybase64-1.4.3-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:88995d1460971ef80b13e3e007afbe4b27c62db0508bc7250a2ab0a0b4b91362", size = 56486, upload-time = "2025-12-06T13:24:03.141Z" }, - { url = "https://files.pythonhosted.org/packages/5e/96/f252c8f9abd6ded3ef1ccd3cdbb8393a33798007f761b23df8de1a2480e6/pybase64-1.4.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:72326fe163385ed3e1e806dd579d47fde5d8a59e51297a60fc4e6cbc1b4fc4ed", size = 70978, upload-time = "2025-12-06T13:24:04.221Z" }, - { url = "https://files.pythonhosted.org/packages/46/fc/cb64964c3b29b432f54d1bce5e7691d693e33bbf780555151969ffd95178/pybase64-1.4.3-cp313-cp313t-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:2e745f2ce760c6cf04d8a72198ef892015ddb89f6ceba489e383518ecbdb13ab", size = 72317, upload-time = "2025-12-06T13:24:11.129Z" }, - { url = "https://files.pythonhosted.org/packages/0a/b7/fab2240da6f4e1ad46f71fa56ec577613cf5df9dce2d5b4cfaa4edd0e365/pybase64-1.4.3-cp313-cp313t-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:6fac217cd9de8581a854b0ac734c50fd1fa4b8d912396c1fc2fce7c230efe3a7", size = 75534, upload-time = "2025-12-06T13:24:12.433Z" }, - { url = "https://files.pythonhosted.org/packages/91/3b/3e2f2b6e68e3d83ddb9fa799f3548fb7449765daec9bbd005a9fbe296d7f/pybase64-1.4.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:da1ee8fa04b283873de2d6e8fa5653e827f55b86bdf1a929c5367aaeb8d26f8a", size = 65399, upload-time = "2025-12-06T13:24:13.928Z" }, - { url = "https://files.pythonhosted.org/packages/6b/08/476ac5914c3b32e0274a2524fc74f01cbf4f4af4513d054e41574eb018f6/pybase64-1.4.3-cp313-cp313t-manylinux2014_armv7l.manylinux_2_17_armv7l.whl", hash = "sha256:b0bf8e884ee822ca7b1448eeb97fa131628fe0ff42f60cae9962789bd562727f", size = 60487, upload-time = "2025-12-06T13:24:15.177Z" }, - { url = "https://files.pythonhosted.org/packages/f1/b8/618a92915330cc9cba7880299b546a1d9dab1a21fd6c0292ee44a4fe608c/pybase64-1.4.3-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:1bf749300382a6fd1f4f255b183146ef58f8e9cb2f44a077b3a9200dfb473a77", size = 63959, upload-time = "2025-12-06T13:24:16.854Z" }, - { url = "https://files.pythonhosted.org/packages/a5/52/af9d8d051652c3051862c442ec3861259c5cdb3fc69774bc701470bd2a59/pybase64-1.4.3-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:153a0e42329b92337664cfc356f2065248e6c9a1bd651bbcd6dcaf15145d3f06", size = 64874, upload-time = "2025-12-06T13:24:18.328Z" }, - { url = "https://files.pythonhosted.org/packages/e4/51/5381a7adf1f381bd184d33203692d3c57cf8ae9f250f380c3fecbdbe554b/pybase64-1.4.3-cp313-cp313t-manylinux_2_31_riscv64.whl", hash = "sha256:86ee56ac7f2184ca10217ed1c655c1a060273e233e692e9086da29d1ae1768db", size = 58572, upload-time = "2025-12-06T13:24:19.417Z" }, - { url = "https://files.pythonhosted.org/packages/e0/f0/578ee4ffce5818017de4fdf544e066c225bc435e73eb4793cde28a689d0b/pybase64-1.4.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:0e71a4db76726bf830b47477e7d830a75c01b2e9b01842e787a0836b0ba741e3", size = 63636, upload-time = "2025-12-06T13:24:20.497Z" }, - { url = "https://files.pythonhosted.org/packages/b9/ad/8ae94814bf20159ea06310b742433e53d5820aa564c9fdf65bf2d79f8799/pybase64-1.4.3-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:2ba7799ec88540acd9861b10551d24656ca3c2888ecf4dba2ee0a71544a8923f", size = 56193, upload-time = "2025-12-06T13:24:21.559Z" }, - { url = "https://files.pythonhosted.org/packages/d1/31/6438cfcc3d3f0fa84d229fa125c243d5094e72628e525dfefadf3bcc6761/pybase64-1.4.3-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:2860299e4c74315f5951f0cf3e72ba0f201c3356c8a68f95a3ab4e620baf44e9", size = 72655, upload-time = "2025-12-06T13:24:22.673Z" }, - { url = "https://files.pythonhosted.org/packages/a3/0d/2bbc9e9c3fc12ba8a6e261482f03a544aca524f92eae0b4908c0a10ba481/pybase64-1.4.3-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:bb06015db9151f0c66c10aae8e3603adab6b6cd7d1f7335a858161d92fc29618", size = 62471, upload-time = "2025-12-06T13:24:23.8Z" }, - { url = "https://files.pythonhosted.org/packages/2c/0b/34d491e7f49c1dbdb322ea8da6adecda7c7cd70b6644557c6e4ca5c6f7c7/pybase64-1.4.3-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:242512a070817272865d37c8909059f43003b81da31f616bb0c391ceadffe067", size = 58119, upload-time = "2025-12-06T13:24:24.994Z" }, - { url = "https://files.pythonhosted.org/packages/ce/17/c21d0cde2a6c766923ae388fc1f78291e1564b0d38c814b5ea8a0e5e081c/pybase64-1.4.3-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:5d8277554a12d3e3eed6180ebda62786bf9fc8d7bb1ee00244258f4a87ca8d20", size = 60791, upload-time = "2025-12-06T13:24:26.046Z" }, - { url = "https://files.pythonhosted.org/packages/92/b2/eaa67038916a48de12b16f4c384bcc1b84b7ec731b23613cb05f27673294/pybase64-1.4.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:f40b7ddd698fc1e13a4b64fbe405e4e0e1279e8197e37050e24154655f5f7c4e", size = 74701, upload-time = "2025-12-06T13:24:27.466Z" }, { url = "https://files.pythonhosted.org/packages/fa/8f/43c3bb11ca9bacf81cb0b7a71500bb65b2eda6d5fe07433c09b543de97f3/pybase64-1.4.3-graalpy312-graalpy250_312_native-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:5c29a582b0ea3936d02bd6fe9bf674ab6059e6e45ab71c78404ab2c913224414", size = 43461, upload-time = "2025-12-06T13:26:28.906Z" }, { url = "https://files.pythonhosted.org/packages/2d/4c/2a5258329200be57497d3972b5308558c6de42e3749c6cc2aa1cbe34b25a/pybase64-1.4.3-graalpy312-graalpy250_312_native-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:b6b664758c804fa919b4f1257aa8cf68e95db76fc331de5f70bfc3a34655afe1", size = 36058, upload-time = "2025-12-06T13:26:30.092Z" }, ] @@ -4159,20 +3587,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/49/3b/774f2b5cd4192d5ab75870ce4381fd89cf218af999515baf07e7206753f0/pydantic_core-2.41.5-cp312-cp312-win32.whl", hash = "sha256:b74557b16e390ec12dca509bce9264c3bbd128f8a2c376eaa68003d7f327276d", size = 1985908, upload-time = "2025-11-04T13:40:19.309Z" }, { url = "https://files.pythonhosted.org/packages/86/45/00173a033c801cacf67c190fef088789394feaf88a98a7035b0e40d53dc9/pydantic_core-2.41.5-cp312-cp312-win_amd64.whl", hash = "sha256:1962293292865bca8e54702b08a4f26da73adc83dd1fcf26fbc875b35d81c815", size = 2020145, upload-time = "2025-11-04T13:40:21.548Z" }, { url = "https://files.pythonhosted.org/packages/f9/22/91fbc821fa6d261b376a3f73809f907cec5ca6025642c463d3488aad22fb/pydantic_core-2.41.5-cp312-cp312-win_arm64.whl", hash = "sha256:1746d4a3d9a794cacae06a5eaaccb4b8643a131d45fbc9af23e353dc0a5ba5c3", size = 1976179, upload-time = "2025-11-04T13:40:23.393Z" }, - { url = "https://files.pythonhosted.org/packages/87/06/8806241ff1f70d9939f9af039c6c35f2360cf16e93c2ca76f184e76b1564/pydantic_core-2.41.5-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:941103c9be18ac8daf7b7adca8228f8ed6bb7a1849020f643b3a14d15b1924d9", size = 2120403, upload-time = "2025-11-04T13:40:25.248Z" }, - { url = "https://files.pythonhosted.org/packages/94/02/abfa0e0bda67faa65fef1c84971c7e45928e108fe24333c81f3bfe35d5f5/pydantic_core-2.41.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:112e305c3314f40c93998e567879e887a3160bb8689ef3d2c04b6cc62c33ac34", size = 1896206, upload-time = "2025-11-04T13:40:27.099Z" }, - { url = "https://files.pythonhosted.org/packages/15/df/a4c740c0943e93e6500f9eb23f4ca7ec9bf71b19e608ae5b579678c8d02f/pydantic_core-2.41.5-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0cbaad15cb0c90aa221d43c00e77bb33c93e8d36e0bf74760cd00e732d10a6a0", size = 1919307, upload-time = "2025-11-04T13:40:29.806Z" }, - { url = "https://files.pythonhosted.org/packages/9a/e3/6324802931ae1d123528988e0e86587c2072ac2e5394b4bc2bc34b61ff6e/pydantic_core-2.41.5-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:03ca43e12fab6023fc79d28ca6b39b05f794ad08ec2feccc59a339b02f2b3d33", size = 2063258, upload-time = "2025-11-04T13:40:33.544Z" }, - { url = "https://files.pythonhosted.org/packages/c9/d4/2230d7151d4957dd79c3044ea26346c148c98fbf0ee6ebd41056f2d62ab5/pydantic_core-2.41.5-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dc799088c08fa04e43144b164feb0c13f9a0bc40503f8df3e9fde58a3c0c101e", size = 2214917, upload-time = "2025-11-04T13:40:35.479Z" }, - { url = "https://files.pythonhosted.org/packages/e6/9f/eaac5df17a3672fef0081b6c1bb0b82b33ee89aa5cec0d7b05f52fd4a1fa/pydantic_core-2.41.5-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:97aeba56665b4c3235a0e52b2c2f5ae9cd071b8a8310ad27bddb3f7fb30e9aa2", size = 2332186, upload-time = "2025-11-04T13:40:37.436Z" }, - { url = "https://files.pythonhosted.org/packages/cf/4e/35a80cae583a37cf15604b44240e45c05e04e86f9cfd766623149297e971/pydantic_core-2.41.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:406bf18d345822d6c21366031003612b9c77b3e29ffdb0f612367352aab7d586", size = 2073164, upload-time = "2025-11-04T13:40:40.289Z" }, - { url = "https://files.pythonhosted.org/packages/bf/e3/f6e262673c6140dd3305d144d032f7bd5f7497d3871c1428521f19f9efa2/pydantic_core-2.41.5-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b93590ae81f7010dbe380cdeab6f515902ebcbefe0b9327cc4804d74e93ae69d", size = 2179146, upload-time = "2025-11-04T13:40:42.809Z" }, - { url = "https://files.pythonhosted.org/packages/75/c7/20bd7fc05f0c6ea2056a4565c6f36f8968c0924f19b7d97bbfea55780e73/pydantic_core-2.41.5-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:01a3d0ab748ee531f4ea6c3e48ad9dac84ddba4b0d82291f87248f2f9de8d740", size = 2137788, upload-time = "2025-11-04T13:40:44.752Z" }, - { url = "https://files.pythonhosted.org/packages/3a/8d/34318ef985c45196e004bc46c6eab2eda437e744c124ef0dbe1ff2c9d06b/pydantic_core-2.41.5-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:6561e94ba9dacc9c61bce40e2d6bdc3bfaa0259d3ff36ace3b1e6901936d2e3e", size = 2340133, upload-time = "2025-11-04T13:40:46.66Z" }, - { url = "https://files.pythonhosted.org/packages/9c/59/013626bf8c78a5a5d9350d12e7697d3d4de951a75565496abd40ccd46bee/pydantic_core-2.41.5-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:915c3d10f81bec3a74fbd4faebe8391013ba61e5a1a8d48c4455b923bdda7858", size = 2324852, upload-time = "2025-11-04T13:40:48.575Z" }, - { url = "https://files.pythonhosted.org/packages/1a/d9/c248c103856f807ef70c18a4f986693a46a8ffe1602e5d361485da502d20/pydantic_core-2.41.5-cp313-cp313-win32.whl", hash = "sha256:650ae77860b45cfa6e2cdafc42618ceafab3a2d9a3811fcfbd3bbf8ac3c40d36", size = 1994679, upload-time = "2025-11-04T13:40:50.619Z" }, - { url = "https://files.pythonhosted.org/packages/9e/8b/341991b158ddab181cff136acd2552c9f35bd30380422a639c0671e99a91/pydantic_core-2.41.5-cp313-cp313-win_amd64.whl", hash = "sha256:79ec52ec461e99e13791ec6508c722742ad745571f234ea6255bed38c6480f11", size = 2019766, upload-time = "2025-11-04T13:40:52.631Z" }, - { url = "https://files.pythonhosted.org/packages/73/7d/f2f9db34af103bea3e09735bb40b021788a5e834c81eedb541991badf8f5/pydantic_core-2.41.5-cp313-cp313-win_arm64.whl", hash = "sha256:3f84d5c1b4ab906093bdc1ff10484838aca54ef08de4afa9de0f5f14d69639cd", size = 1981005, upload-time = "2025-11-04T13:40:54.734Z" }, { url = "https://files.pythonhosted.org/packages/09/32/59b0c7e63e277fa7911c2fc70ccfb45ce4b98991e7ef37110663437005af/pydantic_core-2.41.5-graalpy312-graalpy250_312_native-macosx_10_12_x86_64.whl", hash = "sha256:7da7087d756b19037bc2c06edc6c170eeef3c3bafcb8f532ff17d64dc427adfd", size = 2110495, upload-time = "2025-11-04T13:42:49.689Z" }, { url = "https://files.pythonhosted.org/packages/aa/81/05e400037eaf55ad400bcd318c05bb345b57e708887f07ddb2d20e3f0e98/pydantic_core-2.41.5-graalpy312-graalpy250_312_native-macosx_11_0_arm64.whl", hash = "sha256:aabf5777b5c8ca26f7824cb4a120a740c9588ed58df9b2d196ce92fba42ff8dc", size = 1915388, upload-time = "2025-11-04T13:42:52.215Z" }, { url = "https://files.pythonhosted.org/packages/6e/0d/e3549b2399f71d56476b77dbf3cf8937cec5cd70536bdc0e374a421d0599/pydantic_core-2.41.5-graalpy312-graalpy250_312_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c007fe8a43d43b3969e8469004e9845944f1a80e6acd47c150856bb87f230c56", size = 1942879, upload-time = "2025-11-04T13:42:56.483Z" }, @@ -4271,7 +3685,7 @@ version = "26.0.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "cryptography", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, - { name = "typing-extensions", marker = "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "typing-extensions", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/8e/11/a62e1d33b373da2b2c2cd9eb508147871c80f12b1cacde3c5d314922afdd/pyopenssl-26.0.0.tar.gz", hash = "sha256:f293934e52936f2e3413b89c6ce36df66a0b34ae1ea3a053b8c5020ff2f513fc", size = 185534, upload-time = "2026-03-15T14:28:26.353Z" } wheels = [ @@ -4391,10 +3805,6 @@ sdist = { url = "https://files.pythonhosted.org/packages/f7/54/37c7370ba91f57923 wheels = [ { url = "https://files.pythonhosted.org/packages/7c/d4/aeb5e1784d2c5bff6e189138a9ca91a090117459cea0c30378e1f2db3d54/pywinpty-3.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:c9081df0e49ffa86d15db4a6ba61530630e48707f987df42c9d3313537e81fc0", size = 2113098, upload-time = "2026-02-04T21:54:37.711Z" }, { url = "https://files.pythonhosted.org/packages/b9/53/7278223c493ccfe4883239cf06c823c56460a8010e0fc778eef67858dc14/pywinpty-3.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:15e79d870e18b678fb8a5a6105fd38496b55697c66e6fc0378236026bc4d59e9", size = 234901, upload-time = "2026-02-04T21:53:31.35Z" }, - { url = "https://files.pythonhosted.org/packages/e5/cb/58d6ed3fd429c96a90ef01ac9a617af10a6d41469219c25e7dc162abbb71/pywinpty-3.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:9c91dbb026050c77bdcef964e63a4f10f01a639113c4d3658332614544c467ab", size = 2112686, upload-time = "2026-02-04T21:52:03.035Z" }, - { url = "https://files.pythonhosted.org/packages/fd/50/724ed5c38c504d4e58a88a072776a1e880d970789deaeb2b9f7bd9a5141a/pywinpty-3.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:fe1f7911805127c94cf51f89ab14096c6f91ffdcacf993d2da6082b2142a2523", size = 234591, upload-time = "2026-02-04T21:52:29.821Z" }, - { url = "https://files.pythonhosted.org/packages/f7/ad/90a110538696b12b39fd8758a06d70ded899308198ad2305ac68e361126e/pywinpty-3.0.3-cp313-cp313t-win_amd64.whl", hash = "sha256:3f07a6cf1c1d470d284e614733c3d0f726d2c85e78508ea10a403140c3c0c18a", size = 2112360, upload-time = "2026-02-04T21:55:33.397Z" }, - { url = "https://files.pythonhosted.org/packages/44/0f/7ffa221757a220402bc79fda44044c3f2cc57338d878ab7d622add6f4581/pywinpty-3.0.3-cp313-cp313t-win_arm64.whl", hash = "sha256:15c7c0b6f8e9d87aabbaff76468dabf6e6121332c40fc1d83548d02a9d6a3759", size = 233107, upload-time = "2026-02-04T21:51:45.455Z" }, ] [[package]] @@ -4413,16 +3823,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/74/93/7baea19427dcfbe1e5a372d81473250b379f04b1bd3c4c5ff825e2327202/pyyaml-6.0.3-cp312-cp312-win32.whl", hash = "sha256:96b533f0e99f6579b3d4d4995707cf36df9100d67e0c8303a0c55b27b5f99bc5", size = 137658, upload-time = "2025-09-25T21:32:20.209Z" }, { url = "https://files.pythonhosted.org/packages/86/bf/899e81e4cce32febab4fb42bb97dcdf66bc135272882d1987881a4b519e9/pyyaml-6.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:5fcd34e47f6e0b794d17de1b4ff496c00986e1c83f7ab2fb8fcfe9616ff7477b", size = 154003, upload-time = "2025-09-25T21:32:21.167Z" }, { url = "https://files.pythonhosted.org/packages/1a/08/67bd04656199bbb51dbed1439b7f27601dfb576fb864099c7ef0c3e55531/pyyaml-6.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:64386e5e707d03a7e172c0701abfb7e10f0fb753ee1d773128192742712a98fd", size = 140344, upload-time = "2025-09-25T21:32:22.617Z" }, - { url = "https://files.pythonhosted.org/packages/d1/11/0fd08f8192109f7169db964b5707a2f1e8b745d4e239b784a5a1dd80d1db/pyyaml-6.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8da9669d359f02c0b91ccc01cac4a67f16afec0dac22c2ad09f46bee0697eba8", size = 181669, upload-time = "2025-09-25T21:32:23.673Z" }, - { url = "https://files.pythonhosted.org/packages/b1/16/95309993f1d3748cd644e02e38b75d50cbc0d9561d21f390a76242ce073f/pyyaml-6.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:2283a07e2c21a2aa78d9c4442724ec1eb15f5e42a723b99cb3d822d48f5f7ad1", size = 173252, upload-time = "2025-09-25T21:32:25.149Z" }, - { url = "https://files.pythonhosted.org/packages/50/31/b20f376d3f810b9b2371e72ef5adb33879b25edb7a6d072cb7ca0c486398/pyyaml-6.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ee2922902c45ae8ccada2c5b501ab86c36525b883eff4255313a253a3160861c", size = 767081, upload-time = "2025-09-25T21:32:26.575Z" }, - { url = "https://files.pythonhosted.org/packages/49/1e/a55ca81e949270d5d4432fbbd19dfea5321eda7c41a849d443dc92fd1ff7/pyyaml-6.0.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a33284e20b78bd4a18c8c2282d549d10bc8408a2a7ff57653c0cf0b9be0afce5", size = 841159, upload-time = "2025-09-25T21:32:27.727Z" }, - { url = "https://files.pythonhosted.org/packages/74/27/e5b8f34d02d9995b80abcef563ea1f8b56d20134d8f4e5e81733b1feceb2/pyyaml-6.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0f29edc409a6392443abf94b9cf89ce99889a1dd5376d94316ae5145dfedd5d6", size = 801626, upload-time = "2025-09-25T21:32:28.878Z" }, - { url = "https://files.pythonhosted.org/packages/f9/11/ba845c23988798f40e52ba45f34849aa8a1f2d4af4b798588010792ebad6/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f7057c9a337546edc7973c0d3ba84ddcdf0daa14533c2065749c9075001090e6", size = 753613, upload-time = "2025-09-25T21:32:30.178Z" }, - { url = "https://files.pythonhosted.org/packages/3d/e0/7966e1a7bfc0a45bf0a7fb6b98ea03fc9b8d84fa7f2229e9659680b69ee3/pyyaml-6.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:eda16858a3cab07b80edaf74336ece1f986ba330fdb8ee0d6c0d68fe82bc96be", size = 794115, upload-time = "2025-09-25T21:32:31.353Z" }, - { 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" }, ] [[package]] @@ -4444,18 +3844,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/e6/2f/104c0a3c778d7c2ab8190e9db4f62f0b6957b53c9d87db77c284b69f33ea/pyzmq-27.1.0-cp312-abi3-win32.whl", hash = "sha256:250e5436a4ba13885494412b3da5d518cd0d3a278a1ae640e113c073a5f88edd", size = 559184, upload-time = "2025-09-08T23:08:15.163Z" }, { url = "https://files.pythonhosted.org/packages/fc/7f/a21b20d577e4100c6a41795842028235998a643b1ad406a6d4163ea8f53e/pyzmq-27.1.0-cp312-abi3-win_amd64.whl", hash = "sha256:9ce490cf1d2ca2ad84733aa1d69ce6855372cb5ce9223802450c9b2a7cba0ccf", size = 619480, upload-time = "2025-09-08T23:08:17.192Z" }, { url = "https://files.pythonhosted.org/packages/78/c2/c012beae5f76b72f007a9e91ee9401cb88c51d0f83c6257a03e785c81cc2/pyzmq-27.1.0-cp312-abi3-win_arm64.whl", hash = "sha256:75a2f36223f0d535a0c919e23615fc85a1e23b71f40c7eb43d7b1dedb4d8f15f", size = 552993, upload-time = "2025-09-08T23:08:18.926Z" }, - { url = "https://files.pythonhosted.org/packages/60/cb/84a13459c51da6cec1b7b1dc1a47e6db6da50b77ad7fd9c145842750a011/pyzmq-27.1.0-cp313-cp313-android_24_arm64_v8a.whl", hash = "sha256:93ad4b0855a664229559e45c8d23797ceac03183c7b6f5b4428152a6b06684a5", size = 1122436, upload-time = "2025-09-08T23:08:20.801Z" }, - { url = "https://files.pythonhosted.org/packages/dc/b6/94414759a69a26c3dd674570a81813c46a078767d931a6c70ad29fc585cb/pyzmq-27.1.0-cp313-cp313-android_24_x86_64.whl", hash = "sha256:fbb4f2400bfda24f12f009cba62ad5734148569ff4949b1b6ec3b519444342e6", size = 1156301, upload-time = "2025-09-08T23:08:22.47Z" }, - { url = "https://files.pythonhosted.org/packages/a5/ad/15906493fd40c316377fd8a8f6b1f93104f97a752667763c9b9c1b71d42d/pyzmq-27.1.0-cp313-cp313t-macosx_10_15_universal2.whl", hash = "sha256:e343d067f7b151cfe4eb3bb796a7752c9d369eed007b91231e817071d2c2fec7", size = 1341197, upload-time = "2025-09-08T23:08:24.286Z" }, - { url = "https://files.pythonhosted.org/packages/14/1d/d343f3ce13db53a54cb8946594e567410b2125394dafcc0268d8dda027e0/pyzmq-27.1.0-cp313-cp313t-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:08363b2011dec81c354d694bdecaef4770e0ae96b9afea70b3f47b973655cc05", size = 897275, upload-time = "2025-09-08T23:08:26.063Z" }, - { url = "https://files.pythonhosted.org/packages/69/2d/d83dd6d7ca929a2fc67d2c3005415cdf322af7751d773524809f9e585129/pyzmq-27.1.0-cp313-cp313t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d54530c8c8b5b8ddb3318f481297441af102517602b569146185fa10b63f4fa9", size = 660469, upload-time = "2025-09-08T23:08:27.623Z" }, - { url = "https://files.pythonhosted.org/packages/3e/cd/9822a7af117f4bc0f1952dbe9ef8358eb50a24928efd5edf54210b850259/pyzmq-27.1.0-cp313-cp313t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6f3afa12c392f0a44a2414056d730eebc33ec0926aae92b5ad5cf26ebb6cc128", size = 847961, upload-time = "2025-09-08T23:08:29.672Z" }, - { url = "https://files.pythonhosted.org/packages/9a/12/f003e824a19ed73be15542f172fd0ec4ad0b60cf37436652c93b9df7c585/pyzmq-27.1.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:c65047adafe573ff023b3187bb93faa583151627bc9c51fc4fb2c561ed689d39", size = 1650282, upload-time = "2025-09-08T23:08:31.349Z" }, - { url = "https://files.pythonhosted.org/packages/d5/4a/e82d788ed58e9a23995cee70dbc20c9aded3d13a92d30d57ec2291f1e8a3/pyzmq-27.1.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:90e6e9441c946a8b0a667356f7078d96411391a3b8f80980315455574177ec97", size = 2024468, upload-time = "2025-09-08T23:08:33.543Z" }, - { url = "https://files.pythonhosted.org/packages/d9/94/2da0a60841f757481e402b34bf4c8bf57fa54a5466b965de791b1e6f747d/pyzmq-27.1.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:add071b2d25f84e8189aaf0882d39a285b42fa3853016ebab234a5e78c7a43db", size = 1885394, upload-time = "2025-09-08T23:08:35.51Z" }, - { url = "https://files.pythonhosted.org/packages/4f/6f/55c10e2e49ad52d080dc24e37adb215e5b0d64990b57598abc2e3f01725b/pyzmq-27.1.0-cp313-cp313t-win32.whl", hash = "sha256:7ccc0700cfdf7bd487bea8d850ec38f204478681ea02a582a8da8171b7f90a1c", size = 574964, upload-time = "2025-09-08T23:08:37.178Z" }, - { url = "https://files.pythonhosted.org/packages/87/4d/2534970ba63dd7c522d8ca80fb92777f362c0f321900667c615e2067cb29/pyzmq-27.1.0-cp313-cp313t-win_amd64.whl", hash = "sha256:8085a9fba668216b9b4323be338ee5437a235fe275b9d1610e422ccc279733e2", size = 641029, upload-time = "2025-09-08T23:08:40.595Z" }, - { url = "https://files.pythonhosted.org/packages/f6/fa/f8aea7a28b0641f31d40dea42d7ef003fded31e184ef47db696bc74cd610/pyzmq-27.1.0-cp313-cp313t-win_arm64.whl", hash = "sha256:6bb54ca21bcfe361e445256c15eedf083f153811c37be87e0514934d6913061e", size = 561541, upload-time = "2025-09-08T23:08:42.668Z" }, ] [[package]] @@ -4475,8 +3863,6 @@ dependencies = [ wheels = [ { url = "https://files.pythonhosted.org/packages/51/6f/bf1b7a6d4424c19add99eb17398c7522473502193540b679f8b94fbf2d72/ray-2.54.1-cp312-cp312-manylinux2014_aarch64.whl", hash = "sha256:cd452b61ae2e0daf9271f5a554614397429cc2731681bae10fe72316dadc2749", size = 71831684, upload-time = "2026-03-25T22:41:01.356Z" }, { url = "https://files.pythonhosted.org/packages/8a/1f/b33d5006823f8c1c8760887cf1190194f4b06de858b3d17e37bd930a6a62/ray-2.54.1-cp312-cp312-manylinux2014_x86_64.whl", hash = "sha256:4c6f7e23dda62a32f94083141c3f97e9c4246e3ae4ae2bc488bcd8fd0311f54a", size = 72688748, upload-time = "2026-03-25T22:41:07.43Z" }, - { url = "https://files.pythonhosted.org/packages/c8/5d/fe0e8ac47f6b362c81f391d7f8d2a6858d0bafcc2c37631dc5cc04a16545/ray-2.54.1-cp313-cp313-manylinux2014_aarch64.whl", hash = "sha256:2766f0230806480c38a9a94502087f1d4aea919f38521a28781690613b0290a4", size = 71738623, upload-time = "2026-03-25T22:41:23.898Z" }, - { url = "https://files.pythonhosted.org/packages/1b/22/48008a626e719baee2012080b960687cc6417b572b363c1c29fe23d119c3/ray-2.54.1-cp313-cp313-manylinux2014_x86_64.whl", hash = "sha256:0c3ae2943176e7b239c78b825a5b2bf4135d90280083a0e19c0a75a5db4d836f", size = 72603355, upload-time = "2026-03-25T22:41:29.802Z" }, ] [package.optional-dependencies] @@ -4491,7 +3877,7 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "attrs" }, { name = "rpds-py" }, - { name = "typing-extensions", marker = "python_full_version < '3.13'" }, + { name = "typing-extensions" }, ] sdist = { url = "https://files.pythonhosted.org/packages/22/f5/df4e9027acead3ecc63e50fe1e36aca1523e1719559c499951bb4b53188f/referencing-0.37.0.tar.gz", hash = "sha256:44aefc3142c5b842538163acb373e24cce6632bd54bdb01b21ad5863489f50d8", size = 78036, upload-time = "2025-10-13T15:30:48.871Z" } wheels = [ @@ -4520,38 +3906,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/49/1d/1d957a61976ab9d4e767dd4f9d04b66cc0c41c5e36cf40e2d43688b5ae6f/regex-2026.4.4-cp312-cp312-win32.whl", hash = "sha256:04bb679bc0bde8a7bfb71e991493d47314e7b98380b083df2447cda4b6edb60f", size = 266700, upload-time = "2026-04-03T20:54:05.639Z" }, { url = "https://files.pythonhosted.org/packages/c5/5c/bf575d396aeb58ea13b06ef2adf624f65b70fafef6950a80fc3da9cae3bc/regex-2026.4.4-cp312-cp312-win_amd64.whl", hash = "sha256:db0ac18435a40a2543dbb3d21e161a6c78e33e8159bd2e009343d224bb03bb1b", size = 277768, upload-time = "2026-04-03T20:54:07.312Z" }, { url = "https://files.pythonhosted.org/packages/c9/27/049df16ec6a6828ccd72add3c7f54b4df029669bea8e9817df6fff58be90/regex-2026.4.4-cp312-cp312-win_arm64.whl", hash = "sha256:4ce255cc05c1947a12989c6db801c96461947adb7a59990f1360b5983fab4983", size = 270568, upload-time = "2026-04-03T20:54:09.484Z" }, - { url = "https://files.pythonhosted.org/packages/9d/83/c4373bc5f31f2cf4b66f9b7c31005bd87fe66f0dce17701f7db4ee79ee29/regex-2026.4.4-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:62f5519042c101762509b1d717b45a69c0139d60414b3c604b81328c01bd1943", size = 490273, upload-time = "2026-04-03T20:54:11.202Z" }, - { url = "https://files.pythonhosted.org/packages/46/f8/fe62afbcc3cf4ad4ac9adeaafd98aa747869ae12d3e8e2ac293d0593c435/regex-2026.4.4-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:3790ba9fb5dd76715a7afe34dbe603ba03f8820764b1dc929dd08106214ed031", size = 291954, upload-time = "2026-04-03T20:54:13.412Z" }, - { url = "https://files.pythonhosted.org/packages/5a/92/4712b9fe6a33d232eeb1c189484b80c6c4b8422b90e766e1195d6e758207/regex-2026.4.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:8fae3c6e795d7678963f2170152b0d892cf6aee9ee8afc8c45e6be38d5107fe7", size = 289487, upload-time = "2026-04-03T20:54:15.824Z" }, - { url = "https://files.pythonhosted.org/packages/88/2c/f83b93f85e01168f1070f045a42d4c937b69fdb8dd7ae82d307253f7e36e/regex-2026.4.4-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:298c3ec2d53225b3bf91142eb9691025bab610e0c0c51592dde149db679b3d17", size = 796646, upload-time = "2026-04-03T20:54:18.229Z" }, - { url = "https://files.pythonhosted.org/packages/df/55/61a2e17bf0c4dc57e11caf8dd11771280d8aaa361785f9e3bc40d653f4a7/regex-2026.4.4-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e9638791082eaf5b3ac112c587518ee78e083a11c4b28012d8fe2a0f536dfb17", size = 865904, upload-time = "2026-04-03T20:54:20.019Z" }, - { url = "https://files.pythonhosted.org/packages/45/32/1ac8ed1b5a346b5993a3d256abe0a0f03b0b73c8cc88d928537368ac65b6/regex-2026.4.4-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:ae3e764bd4c5ff55035dc82a8d49acceb42a5298edf6eb2fc4d328ee5dd7afae", size = 912304, upload-time = "2026-04-03T20:54:22.403Z" }, - { url = "https://files.pythonhosted.org/packages/26/47/2ee5c613ab546f0eddebf9905d23e07beb933416b1246c2d8791d01979b4/regex-2026.4.4-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ffa81f81b80047ba89a3c69ae6a0f78d06f4a42ce5126b0eb2a0a10ad44e0b2e", size = 801126, upload-time = "2026-04-03T20:54:24.308Z" }, - { url = "https://files.pythonhosted.org/packages/75/cd/41dacd129ca9fd20bd7d02f83e0fad83e034ac8a084ec369c90f55ef37e2/regex-2026.4.4-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f56ebf9d70305307a707911b88469213630aba821e77de7d603f9d2f0730687d", size = 776772, upload-time = "2026-04-03T20:54:26.319Z" }, - { url = "https://files.pythonhosted.org/packages/89/6d/5af0b588174cb5f46041fa7dd64d3fd5cd2fe51f18766703d1edc387f324/regex-2026.4.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:773d1dfd652bbffb09336abf890bfd64785c7463716bf766d0eb3bc19c8b7f27", size = 785228, upload-time = "2026-04-03T20:54:28.387Z" }, - { url = "https://files.pythonhosted.org/packages/b7/3b/f5a72b7045bd59575fc33bf1345f156fcfd5a8484aea6ad84b12c5a82114/regex-2026.4.4-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:d51d20befd5275d092cdffba57ded05f3c436317ee56466c8928ac32d960edaf", size = 860032, upload-time = "2026-04-03T20:54:30.641Z" }, - { url = "https://files.pythonhosted.org/packages/39/a4/72a317003d6fcd7a573584a85f59f525dfe8f67e355ca74eb6b53d66a5e2/regex-2026.4.4-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:0a51cdb3c1e9161154f976cb2bef9894bc063ac82f31b733087ffb8e880137d0", size = 765714, upload-time = "2026-04-03T20:54:32.789Z" }, - { url = "https://files.pythonhosted.org/packages/25/1e/5672e16f34dbbcb2560cc7e6a2fbb26dfa8b270711e730101da4423d3973/regex-2026.4.4-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:ae5266a82596114e41fb5302140e9630204c1b5f325c770bec654b95dd54b0aa", size = 852078, upload-time = "2026-04-03T20:54:34.546Z" }, - { url = "https://files.pythonhosted.org/packages/f7/0d/c813f0af7c6cc7ed7b9558bac2e5120b60ad0fa48f813e4d4bd55446f214/regex-2026.4.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:c882cd92ec68585e9c1cf36c447ec846c0d94edd706fe59e0c198e65822fd23b", size = 789181, upload-time = "2026-04-03T20:54:36.642Z" }, - { url = "https://files.pythonhosted.org/packages/ea/6d/a344608d1adbd2a95090ddd906cec09a11be0e6517e878d02a5123e0917f/regex-2026.4.4-cp313-cp313-win32.whl", hash = "sha256:05568c4fbf3cb4fa9e28e3af198c40d3237cf6041608a9022285fe567ec3ad62", size = 266690, upload-time = "2026-04-03T20:54:38.343Z" }, - { url = "https://files.pythonhosted.org/packages/31/07/54049f89b46235ca6f45cd6c88668a7050e77d4a15555e47dd40fde75263/regex-2026.4.4-cp313-cp313-win_amd64.whl", hash = "sha256:3384df51ed52db0bea967e21458ab0a414f67cdddfd94401688274e55147bb81", size = 277733, upload-time = "2026-04-03T20:54:40.11Z" }, - { url = "https://files.pythonhosted.org/packages/0e/21/61366a8e20f4d43fb597708cac7f0e2baadb491ecc9549b4980b2be27d16/regex-2026.4.4-cp313-cp313-win_arm64.whl", hash = "sha256:acd38177bd2c8e69a411d6521760806042e244d0ef94e2dd03ecdaa8a3c99427", size = 270565, upload-time = "2026-04-03T20:54:41.883Z" }, - { url = "https://files.pythonhosted.org/packages/f1/1e/3a2b9672433bef02f5d39aa1143ca2c08f311c1d041c464a42be9ae648dc/regex-2026.4.4-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:f94a11a9d05afcfcfa640e096319720a19cc0c9f7768e1a61fceee6a3afc6c7c", size = 494126, upload-time = "2026-04-03T20:54:43.602Z" }, - { url = "https://files.pythonhosted.org/packages/4e/4b/c132a4f4fe18ad3340d89fcb56235132b69559136036b845be3c073142ed/regex-2026.4.4-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:36bcb9d6d1307ab629edc553775baada2aefa5c50ccc0215fbfd2afcfff43141", size = 293882, upload-time = "2026-04-03T20:54:45.41Z" }, - { url = "https://files.pythonhosted.org/packages/f4/5f/eaa38092ce7a023656280f2341dbbd4ad5f05d780a70abba7bb4f4bea54c/regex-2026.4.4-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:261c015b3e2ed0919157046d768774ecde57f03d8fa4ba78d29793447f70e717", size = 292334, upload-time = "2026-04-03T20:54:47.051Z" }, - { url = "https://files.pythonhosted.org/packages/5f/f6/dd38146af1392dac33db7074ab331cec23cced3759167735c42c5460a243/regex-2026.4.4-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c228cf65b4a54583763645dcd73819b3b381ca8b4bb1b349dee1c135f4112c07", size = 811691, upload-time = "2026-04-03T20:54:49.074Z" }, - { url = "https://files.pythonhosted.org/packages/7a/f0/dc54c2e69f5eeec50601054998ec3690d5344277e782bd717e49867c1d29/regex-2026.4.4-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:dd2630faeb6876fb0c287f664d93ddce4d50cd46c6e88e60378c05c9047e08ca", size = 871227, upload-time = "2026-04-03T20:54:51.035Z" }, - { url = "https://files.pythonhosted.org/packages/a1/af/cb16bd5dc61621e27df919a4449bbb7e5a1034c34d307e0a706e9cc0f3e3/regex-2026.4.4-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:6a50ab11b7779b849472337191f3a043e27e17f71555f98d0092fa6d73364520", size = 917435, upload-time = "2026-04-03T20:54:52.994Z" }, - { url = "https://files.pythonhosted.org/packages/5c/71/8b260897f22996b666edd9402861668f45a2ca259f665ac029e6104a2d7d/regex-2026.4.4-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0734f63afe785138549fbe822a8cfeaccd1bae814c5057cc0ed5b9f2de4fc883", size = 816358, upload-time = "2026-04-03T20:54:54.884Z" }, - { url = "https://files.pythonhosted.org/packages/1c/60/775f7f72a510ef238254906c2f3d737fc80b16ca85f07d20e318d2eea894/regex-2026.4.4-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c4ee50606cb1967db7e523224e05f32089101945f859928e65657a2cbb3d278b", size = 785549, upload-time = "2026-04-03T20:54:57.01Z" }, - { url = "https://files.pythonhosted.org/packages/58/42/34d289b3627c03cf381e44da534a0021664188fa49ba41513da0b4ec6776/regex-2026.4.4-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6c1818f37be3ca02dcb76d63f2c7aaba4b0dc171b579796c6fbe00148dfec6b1", size = 801364, upload-time = "2026-04-03T20:54:58.981Z" }, - { url = "https://files.pythonhosted.org/packages/fc/20/f6ecf319b382a8f1ab529e898b222c3f30600fcede7834733c26279e7465/regex-2026.4.4-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:f5bfc2741d150d0be3e4a0401a5c22b06e60acb9aa4daa46d9e79a6dcd0f135b", size = 866221, upload-time = "2026-04-03T20:55:00.88Z" }, - { url = "https://files.pythonhosted.org/packages/92/6a/9f16d3609d549bd96d7a0b2aee1625d7512ba6a03efc01652149ef88e74d/regex-2026.4.4-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:504ffa8a03609a087cad81277a629b6ce884b51a24bd388a7980ad61748618ff", size = 772530, upload-time = "2026-04-03T20:55:03.213Z" }, - { url = "https://files.pythonhosted.org/packages/fa/f6/aa9768bc96a4c361ac96419fbaf2dcdc33970bb813df3ba9b09d5d7b6d96/regex-2026.4.4-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:70aadc6ff12e4b444586e57fc30771f86253f9f0045b29016b9605b4be5f7dfb", size = 856989, upload-time = "2026-04-03T20:55:05.087Z" }, - { url = "https://files.pythonhosted.org/packages/4d/b4/c671db3556be2473ae3e4bb7a297c518d281452871501221251ea4ecba57/regex-2026.4.4-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:f4f83781191007b6ef43b03debc35435f10cad9b96e16d147efe84a1d48bdde4", size = 803241, upload-time = "2026-04-03T20:55:07.162Z" }, - { url = "https://files.pythonhosted.org/packages/2a/5c/83e3b1d89fa4f6e5a1bc97b4abd4a9a97b3c1ac7854164f694f5f0ba98a0/regex-2026.4.4-cp313-cp313t-win32.whl", hash = "sha256:e014a797de43d1847df957c0a2a8e861d1c17547ee08467d1db2c370b7568baa", size = 269921, upload-time = "2026-04-03T20:55:09.62Z" }, - { url = "https://files.pythonhosted.org/packages/28/07/077c387121f42cdb4d92b1301133c0d93b5709d096d1669ab847dda9fe2e/regex-2026.4.4-cp313-cp313t-win_amd64.whl", hash = "sha256:b15b88b0d52b179712632832c1d6e58e5774f93717849a41096880442da41ab0", size = 281240, upload-time = "2026-04-03T20:55:11.521Z" }, - { url = "https://files.pythonhosted.org/packages/9d/22/ead4a4abc7c59a4d882662aa292ca02c8b617f30b6e163bc1728879e9353/regex-2026.4.4-cp313-cp313t-win_arm64.whl", hash = "sha256:586b89cdadf7d67bf86ae3342a4dcd2b8d70a832d90c18a0ae955105caf34dbe", size = 272440, upload-time = "2026-04-03T20:55:13.365Z" }, ] [[package]] @@ -4672,16 +4026,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/d4/cf/2c64f0b6725149f7c6e7e5a909d14354889b4beaadddaa5fff023ec71084/rignore-0.7.6-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:5719ea14ea2b652c0c0894be5dfde954e1853a80dea27dd2fbaa749618d837f5", size = 1139186, upload-time = "2025-11-05T21:40:31.27Z" }, { url = "https://files.pythonhosted.org/packages/75/95/a86c84909ccc24af0d094b50d54697951e576c252a4d9f21b47b52af9598/rignore-0.7.6-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:8e23424fc7ce35726854f639cb7968151a792c0c3d9d082f7f67e0c362cfecca", size = 1117604, upload-time = "2025-11-05T21:40:48.07Z" }, { url = "https://files.pythonhosted.org/packages/7f/5e/13b249613fd5d18d58662490ab910a9f0be758981d1797789913adb4e918/rignore-0.7.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3efdcf1dd84d45f3e2bd2f93303d9be103888f56dfa7c3349b5bf4f0657ec696", size = 1127725, upload-time = "2025-11-05T21:41:05.804Z" }, - { url = "https://files.pythonhosted.org/packages/36/31/b65b837e39c3f7064c426754714ac633b66b8c2290978af9d7f513e14aa9/rignore-0.7.6-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c1ad295537041dc2ed4b540fb1a3906bd9ede6ccdad3fe79770cd89e04e3c73c", size = 897406, upload-time = "2025-11-05T20:40:53.854Z" }, - { url = "https://files.pythonhosted.org/packages/ca/58/1970ce006c427e202ac7c081435719a076c478f07b3a23f469227788dc23/rignore-0.7.6-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f782dbd3a65a5ac85adfff69e5c6b101285ef3f845c3a3cae56a54bebf9fe116", size = 874050, upload-time = "2025-11-05T20:41:08.922Z" }, - { url = "https://files.pythonhosted.org/packages/d4/00/eb45db9f90137329072a732273be0d383cb7d7f50ddc8e0bceea34c1dfdf/rignore-0.7.6-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:65cece3b36e5b0826d946494734c0e6aaf5a0337e18ff55b071438efe13d559e", size = 1167835, upload-time = "2025-11-05T20:41:24.997Z" }, - { url = "https://files.pythonhosted.org/packages/f3/f1/6f1d72ddca41a64eed569680587a1236633587cc9f78136477ae69e2c88a/rignore-0.7.6-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d7e4bb66c13cd7602dc8931822c02dfbbd5252015c750ac5d6152b186f0a8be0", size = 941945, upload-time = "2025-11-05T20:41:40.628Z" }, - { url = "https://files.pythonhosted.org/packages/48/6f/2f178af1c1a276a065f563ec1e11e7a9e23d4996fd0465516afce4b5c636/rignore-0.7.6-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:297e500c15766e196f68aaaa70e8b6db85fa23fdc075b880d8231fdfba738cd7", size = 959067, upload-time = "2025-11-05T20:42:11.09Z" }, - { url = "https://files.pythonhosted.org/packages/5b/db/423a81c4c1e173877c7f9b5767dcaf1ab50484a94f60a0b2ed78be3fa765/rignore-0.7.6-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a07084211a8d35e1a5b1d32b9661a5ed20669970b369df0cf77da3adea3405de", size = 984438, upload-time = "2025-11-05T20:41:55.443Z" }, - { url = "https://files.pythonhosted.org/packages/31/eb/c4f92cc3f2825d501d3c46a244a671eb737fc1bcf7b05a3ecd34abb3e0d7/rignore-0.7.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:181eb2a975a22256a1441a9d2f15eb1292839ea3f05606620bd9e1938302cf79", size = 1078365, upload-time = "2025-11-05T21:40:15.148Z" }, - { url = "https://files.pythonhosted.org/packages/26/09/99442f02794bd7441bfc8ed1c7319e890449b816a7493b2db0e30af39095/rignore-0.7.6-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:7bbcdc52b5bf9f054b34ce4af5269df5d863d9c2456243338bc193c28022bd7b", size = 1139066, upload-time = "2025-11-05T21:40:32.771Z" }, - { url = "https://files.pythonhosted.org/packages/2c/88/bcfc21e520bba975410e9419450f4b90a2ac8236b9a80fd8130e87d098af/rignore-0.7.6-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:f2e027a6da21a7c8c0d87553c24ca5cc4364def18d146057862c23a96546238e", size = 1118036, upload-time = "2025-11-05T21:40:49.646Z" }, - { url = "https://files.pythonhosted.org/packages/e2/25/d37215e4562cda5c13312636393aea0bafe38d54d4e0517520a4cc0753ec/rignore-0.7.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ee4a18b82cbbc648e4aac1510066682fe62beb5dc88e2c67c53a83954e541360", size = 1127550, upload-time = "2025-11-05T21:41:07.648Z" }, ] [[package]] @@ -4717,35 +4061,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/6f/ab/d5d5e3bcedb0a77f4f613706b750e50a5a3ba1c15ccd3665ecc636c968fd/rpds_py-0.30.0-cp312-cp312-win32.whl", hash = "sha256:1ab5b83dbcf55acc8b08fc62b796ef672c457b17dbd7820a11d6c52c06839bdf", size = 223782, upload-time = "2025-11-30T20:22:37.271Z" }, { url = "https://files.pythonhosted.org/packages/39/3b/f786af9957306fdc38a74cef405b7b93180f481fb48453a114bb6465744a/rpds_py-0.30.0-cp312-cp312-win_amd64.whl", hash = "sha256:a090322ca841abd453d43456ac34db46e8b05fd9b3b4ac0c78bcde8b089f959b", size = 240463, upload-time = "2025-11-30T20:22:39.021Z" }, { url = "https://files.pythonhosted.org/packages/f3/d2/b91dc748126c1559042cfe41990deb92c4ee3e2b415f6b5234969ffaf0cc/rpds_py-0.30.0-cp312-cp312-win_arm64.whl", hash = "sha256:669b1805bd639dd2989b281be2cfd951c6121b65e729d9b843e9639ef1fd555e", size = 230868, upload-time = "2025-11-30T20:22:40.493Z" }, - { url = "https://files.pythonhosted.org/packages/ed/dc/d61221eb88ff410de3c49143407f6f3147acf2538c86f2ab7ce65ae7d5f9/rpds_py-0.30.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:f83424d738204d9770830d35290ff3273fbb02b41f919870479fab14b9d303b2", size = 374887, upload-time = "2025-11-30T20:22:41.812Z" }, - { url = "https://files.pythonhosted.org/packages/fd/32/55fb50ae104061dbc564ef15cc43c013dc4a9f4527a1f4d99baddf56fe5f/rpds_py-0.30.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:e7536cd91353c5273434b4e003cbda89034d67e7710eab8761fd918ec6c69cf8", size = 358904, upload-time = "2025-11-30T20:22:43.479Z" }, - { url = "https://files.pythonhosted.org/packages/58/70/faed8186300e3b9bdd138d0273109784eea2396c68458ed580f885dfe7ad/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2771c6c15973347f50fece41fc447c054b7ac2ae0502388ce3b6738cd366e3d4", size = 389945, upload-time = "2025-11-30T20:22:44.819Z" }, - { url = "https://files.pythonhosted.org/packages/bd/a8/073cac3ed2c6387df38f71296d002ab43496a96b92c823e76f46b8af0543/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0a59119fc6e3f460315fe9d08149f8102aa322299deaa5cab5b40092345c2136", size = 407783, upload-time = "2025-11-30T20:22:46.103Z" }, - { url = "https://files.pythonhosted.org/packages/77/57/5999eb8c58671f1c11eba084115e77a8899d6e694d2a18f69f0ba471ec8b/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:76fec018282b4ead0364022e3c54b60bf368b9d926877957a8624b58419169b7", size = 515021, upload-time = "2025-11-30T20:22:47.458Z" }, - { url = "https://files.pythonhosted.org/packages/e0/af/5ab4833eadc36c0a8ed2bc5c0de0493c04f6c06de223170bd0798ff98ced/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:692bef75a5525db97318e8cd061542b5a79812d711ea03dbc1f6f8dbb0c5f0d2", size = 414589, upload-time = "2025-11-30T20:22:48.872Z" }, - { url = "https://files.pythonhosted.org/packages/b7/de/f7192e12b21b9e9a68a6d0f249b4af3fdcdff8418be0767a627564afa1f1/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9027da1ce107104c50c81383cae773ef5c24d296dd11c99e2629dbd7967a20c6", size = 394025, upload-time = "2025-11-30T20:22:50.196Z" }, - { url = "https://files.pythonhosted.org/packages/91/c4/fc70cd0249496493500e7cc2de87504f5aa6509de1e88623431fec76d4b6/rpds_py-0.30.0-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:9cf69cdda1f5968a30a359aba2f7f9aa648a9ce4b580d6826437f2b291cfc86e", size = 408895, upload-time = "2025-11-30T20:22:51.87Z" }, - { url = "https://files.pythonhosted.org/packages/58/95/d9275b05ab96556fefff73a385813eb66032e4c99f411d0795372d9abcea/rpds_py-0.30.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a4796a717bf12b9da9d3ad002519a86063dcac8988b030e405704ef7d74d2d9d", size = 422799, upload-time = "2025-11-30T20:22:53.341Z" }, - { url = "https://files.pythonhosted.org/packages/06/c1/3088fc04b6624eb12a57eb814f0d4997a44b0d208d6cace713033ff1a6ba/rpds_py-0.30.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5d4c2aa7c50ad4728a094ebd5eb46c452e9cb7edbfdb18f9e1221f597a73e1e7", size = 572731, upload-time = "2025-11-30T20:22:54.778Z" }, - { url = "https://files.pythonhosted.org/packages/d8/42/c612a833183b39774e8ac8fecae81263a68b9583ee343db33ab571a7ce55/rpds_py-0.30.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ba81a9203d07805435eb06f536d95a266c21e5b2dfbf6517748ca40c98d19e31", size = 599027, upload-time = "2025-11-30T20:22:56.212Z" }, - { url = "https://files.pythonhosted.org/packages/5f/60/525a50f45b01d70005403ae0e25f43c0384369ad24ffe46e8d9068b50086/rpds_py-0.30.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:945dccface01af02675628334f7cf49c2af4c1c904748efc5cf7bbdf0b579f95", size = 563020, upload-time = "2025-11-30T20:22:58.2Z" }, - { url = "https://files.pythonhosted.org/packages/0b/5d/47c4655e9bcd5ca907148535c10e7d489044243cc9941c16ed7cd53be91d/rpds_py-0.30.0-cp313-cp313-win32.whl", hash = "sha256:b40fb160a2db369a194cb27943582b38f79fc4887291417685f3ad693c5a1d5d", size = 223139, upload-time = "2025-11-30T20:23:00.209Z" }, - { url = "https://files.pythonhosted.org/packages/f2/e1/485132437d20aa4d3e1d8b3fb5a5e65aa8139f1e097080c2a8443201742c/rpds_py-0.30.0-cp313-cp313-win_amd64.whl", hash = "sha256:806f36b1b605e2d6a72716f321f20036b9489d29c51c91f4dd29a3e3afb73b15", size = 240224, upload-time = "2025-11-30T20:23:02.008Z" }, - { url = "https://files.pythonhosted.org/packages/24/95/ffd128ed1146a153d928617b0ef673960130be0009c77d8fbf0abe306713/rpds_py-0.30.0-cp313-cp313-win_arm64.whl", hash = "sha256:d96c2086587c7c30d44f31f42eae4eac89b60dabbac18c7669be3700f13c3ce1", size = 230645, upload-time = "2025-11-30T20:23:03.43Z" }, - { url = "https://files.pythonhosted.org/packages/ff/1b/b10de890a0def2a319a2626334a7f0ae388215eb60914dbac8a3bae54435/rpds_py-0.30.0-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:eb0b93f2e5c2189ee831ee43f156ed34e2a89a78a66b98cadad955972548be5a", size = 364443, upload-time = "2025-11-30T20:23:04.878Z" }, - { url = "https://files.pythonhosted.org/packages/0d/bf/27e39f5971dc4f305a4fb9c672ca06f290f7c4e261c568f3dea16a410d47/rpds_py-0.30.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:922e10f31f303c7c920da8981051ff6d8c1a56207dbdf330d9047f6d30b70e5e", size = 353375, upload-time = "2025-11-30T20:23:06.342Z" }, - { url = "https://files.pythonhosted.org/packages/40/58/442ada3bba6e8e6615fc00483135c14a7538d2ffac30e2d933ccf6852232/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cdc62c8286ba9bf7f47befdcea13ea0e26bf294bda99758fd90535cbaf408000", size = 383850, upload-time = "2025-11-30T20:23:07.825Z" }, - { url = "https://files.pythonhosted.org/packages/14/14/f59b0127409a33c6ef6f5c1ebd5ad8e32d7861c9c7adfa9a624fc3889f6c/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:47f9a91efc418b54fb8190a6b4aa7813a23fb79c51f4bb84e418f5476c38b8db", size = 392812, upload-time = "2025-11-30T20:23:09.228Z" }, - { url = "https://files.pythonhosted.org/packages/b3/66/e0be3e162ac299b3a22527e8913767d869e6cc75c46bd844aa43fb81ab62/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1f3587eb9b17f3789ad50824084fa6f81921bbf9a795826570bda82cb3ed91f2", size = 517841, upload-time = "2025-11-30T20:23:11.186Z" }, - { url = "https://files.pythonhosted.org/packages/3d/55/fa3b9cf31d0c963ecf1ba777f7cf4b2a2c976795ac430d24a1f43d25a6ba/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:39c02563fc592411c2c61d26b6c5fe1e51eaa44a75aa2c8735ca88b0d9599daa", size = 408149, upload-time = "2025-11-30T20:23:12.864Z" }, - { url = "https://files.pythonhosted.org/packages/60/ca/780cf3b1a32b18c0f05c441958d3758f02544f1d613abf9488cd78876378/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:51a1234d8febafdfd33a42d97da7a43f5dcb120c1060e352a3fbc0c6d36e2083", size = 383843, upload-time = "2025-11-30T20:23:14.638Z" }, - { url = "https://files.pythonhosted.org/packages/82/86/d5f2e04f2aa6247c613da0c1dd87fcd08fa17107e858193566048a1e2f0a/rpds_py-0.30.0-cp313-cp313t-manylinux_2_31_riscv64.whl", hash = "sha256:eb2c4071ab598733724c08221091e8d80e89064cd472819285a9ab0f24bcedb9", size = 396507, upload-time = "2025-11-30T20:23:16.105Z" }, - { url = "https://files.pythonhosted.org/packages/4b/9a/453255d2f769fe44e07ea9785c8347edaf867f7026872e76c1ad9f7bed92/rpds_py-0.30.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6bdfdb946967d816e6adf9a3d8201bfad269c67efe6cefd7093ef959683c8de0", size = 414949, upload-time = "2025-11-30T20:23:17.539Z" }, - { url = "https://files.pythonhosted.org/packages/a3/31/622a86cdc0c45d6df0e9ccb6becdba5074735e7033c20e401a6d9d0e2ca0/rpds_py-0.30.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:c77afbd5f5250bf27bf516c7c4a016813eb2d3e116139aed0096940c5982da94", size = 565790, upload-time = "2025-11-30T20:23:19.029Z" }, - { url = "https://files.pythonhosted.org/packages/1c/5d/15bbf0fb4a3f58a3b1c67855ec1efcc4ceaef4e86644665fff03e1b66d8d/rpds_py-0.30.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:61046904275472a76c8c90c9ccee9013d70a6d0f73eecefd38c1ae7c39045a08", size = 590217, upload-time = "2025-11-30T20:23:20.885Z" }, - { url = "https://files.pythonhosted.org/packages/6d/61/21b8c41f68e60c8cc3b2e25644f0e3681926020f11d06ab0b78e3c6bbff1/rpds_py-0.30.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:4c5f36a861bc4b7da6516dbdf302c55313afa09b81931e8280361a4f6c9a2d27", size = 555806, upload-time = "2025-11-30T20:23:22.488Z" }, - { url = "https://files.pythonhosted.org/packages/f9/39/7e067bb06c31de48de3eb200f9fc7c58982a4d3db44b07e73963e10d3be9/rpds_py-0.30.0-cp313-cp313t-win32.whl", hash = "sha256:3d4a69de7a3e50ffc214ae16d79d8fbb0922972da0356dcf4d0fdca2878559c6", size = 211341, upload-time = "2025-11-30T20:23:24.449Z" }, - { url = "https://files.pythonhosted.org/packages/0a/4d/222ef0b46443cf4cf46764d9c630f3fe4abaa7245be9417e56e9f52b8f65/rpds_py-0.30.0-cp313-cp313t-win_amd64.whl", hash = "sha256:f14fc5df50a716f7ece6a80b6c78bb35ea2ca47c499e422aa4463455dd96d56d", size = 225768, upload-time = "2025-11-30T20:23:25.908Z" }, ] [[package]] @@ -4859,8 +4174,7 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "joblib" }, { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, - { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.13' and sys_platform == 'emscripten') or (python_full_version < '3.13' and sys_platform == 'win32')" }, - { name = "numpy", version = "2.4.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.13' and sys_platform == 'emscripten') or (python_full_version >= '3.13' and sys_platform == 'win32')" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform == 'emscripten' or sys_platform == 'win32'" }, { name = "scipy" }, { name = "threadpoolctl" }, ] @@ -4872,18 +4186,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/97/74/b7a304feb2b49df9fafa9382d4d09061a96ee9a9449a7cbea7988dda0828/scikit_learn-1.8.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a0bcfe4d0d14aec44921545fd2af2338c7471de9cb701f1da4c9d85906ab847a", size = 8931904, upload-time = "2025-12-10T07:07:57.666Z" }, { url = "https://files.pythonhosted.org/packages/9f/c4/0ab22726a04ede56f689476b760f98f8f46607caecff993017ac1b64aa5d/scikit_learn-1.8.0-cp312-cp312-win_amd64.whl", hash = "sha256:35c007dedb2ffe38fe3ee7d201ebac4a2deccd2408e8621d53067733e3c74809", size = 8019359, upload-time = "2025-12-10T07:07:59.838Z" }, { url = "https://files.pythonhosted.org/packages/24/90/344a67811cfd561d7335c1b96ca21455e7e472d281c3c279c4d3f2300236/scikit_learn-1.8.0-cp312-cp312-win_arm64.whl", hash = "sha256:8c497fff237d7b4e07e9ef1a640887fa4fb765647f86fbe00f969ff6280ce2bb", size = 7641898, upload-time = "2025-12-10T07:08:01.36Z" }, - { url = "https://files.pythonhosted.org/packages/03/aa/e22e0768512ce9255eba34775be2e85c2048da73da1193e841707f8f039c/scikit_learn-1.8.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0d6ae97234d5d7079dc0040990a6f7aeb97cb7fa7e8945f1999a429b23569e0a", size = 8513770, upload-time = "2025-12-10T07:08:03.251Z" }, - { url = "https://files.pythonhosted.org/packages/58/37/31b83b2594105f61a381fc74ca19e8780ee923be2d496fcd8d2e1147bd99/scikit_learn-1.8.0-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:edec98c5e7c128328124a029bceb09eda2d526997780fef8d65e9a69eead963e", size = 8044458, upload-time = "2025-12-10T07:08:05.336Z" }, - { url = "https://files.pythonhosted.org/packages/2d/5a/3f1caed8765f33eabb723596666da4ebbf43d11e96550fb18bdec42b467b/scikit_learn-1.8.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:74b66d8689d52ed04c271e1329f0c61635bcaf5b926db9b12d58914cdc01fe57", size = 8610341, upload-time = "2025-12-10T07:08:07.732Z" }, - { url = "https://files.pythonhosted.org/packages/38/cf/06896db3f71c75902a8e9943b444a56e727418f6b4b4a90c98c934f51ed4/scikit_learn-1.8.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8fdf95767f989b0cfedb85f7ed8ca215d4be728031f56ff5a519ee1e3276dc2e", size = 8900022, upload-time = "2025-12-10T07:08:09.862Z" }, - { url = "https://files.pythonhosted.org/packages/1c/f9/9b7563caf3ec8873e17a31401858efab6b39a882daf6c1bfa88879c0aa11/scikit_learn-1.8.0-cp313-cp313-win_amd64.whl", hash = "sha256:2de443b9373b3b615aec1bb57f9baa6bb3a9bd093f1269ba95c17d870422b271", size = 7989409, upload-time = "2025-12-10T07:08:12.028Z" }, - { url = "https://files.pythonhosted.org/packages/49/bd/1f4001503650e72c4f6009ac0c4413cb17d2d601cef6f71c0453da2732fc/scikit_learn-1.8.0-cp313-cp313-win_arm64.whl", hash = "sha256:eddde82a035681427cbedded4e6eff5e57fa59216c2e3e90b10b19ab1d0a65c3", size = 7619760, upload-time = "2025-12-10T07:08:13.688Z" }, - { url = "https://files.pythonhosted.org/packages/d2/7d/a630359fc9dcc95496588c8d8e3245cc8fd81980251079bc09c70d41d951/scikit_learn-1.8.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:7cc267b6108f0a1499a734167282c00c4ebf61328566b55ef262d48e9849c735", size = 8826045, upload-time = "2025-12-10T07:08:15.215Z" }, - { url = "https://files.pythonhosted.org/packages/cc/56/a0c86f6930cfcd1c7054a2bc417e26960bb88d32444fe7f71d5c2cfae891/scikit_learn-1.8.0-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:fe1c011a640a9f0791146011dfd3c7d9669785f9fed2b2a5f9e207536cf5c2fd", size = 8420324, upload-time = "2025-12-10T07:08:17.561Z" }, - { url = "https://files.pythonhosted.org/packages/46/1e/05962ea1cebc1cf3876667ecb14c283ef755bf409993c5946ade3b77e303/scikit_learn-1.8.0-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:72358cce49465d140cc4e7792015bb1f0296a9742d5622c67e31399b75468b9e", size = 8680651, upload-time = "2025-12-10T07:08:19.952Z" }, - { url = "https://files.pythonhosted.org/packages/fe/56/a85473cd75f200c9759e3a5f0bcab2d116c92a8a02ee08ccd73b870f8bb4/scikit_learn-1.8.0-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:80832434a6cc114f5219211eec13dcbc16c2bac0e31ef64c6d346cde3cf054cb", size = 8925045, upload-time = "2025-12-10T07:08:22.11Z" }, - { url = "https://files.pythonhosted.org/packages/cc/b7/64d8cfa896c64435ae57f4917a548d7ac7a44762ff9802f75a79b77cb633/scikit_learn-1.8.0-cp313-cp313t-win_amd64.whl", hash = "sha256:ee787491dbfe082d9c3013f01f5991658b0f38aa8177e4cd4bf434c58f551702", size = 8507994, upload-time = "2025-12-10T07:08:23.943Z" }, - { url = "https://files.pythonhosted.org/packages/5e/37/e192ea709551799379958b4c4771ec507347027bb7c942662c7fbeba31cb/scikit_learn-1.8.0-cp313-cp313t-win_arm64.whl", hash = "sha256:bf97c10a3f5a7543f9b88cbf488d33d175e9146115a451ae34568597ba33dcde", size = 7869518, upload-time = "2025-12-10T07:08:25.71Z" }, ] [[package]] @@ -4892,8 +4194,7 @@ version = "1.17.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, - { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.13' and sys_platform == 'emscripten') or (python_full_version < '3.13' and sys_platform == 'win32')" }, - { name = "numpy", version = "2.4.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.13' and sys_platform == 'emscripten') or (python_full_version >= '3.13' and sys_platform == 'win32')" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform == 'emscripten' or sys_platform == 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/56/3e/9cca699f3486ce6bc12ff46dc2031f1ec8eb9ccc9a320fdaf925f1417426/scipy-1.17.0.tar.gz", hash = "sha256:2591060c8e648d8b96439e111ac41fd8342fdeff1876be2e19dea3fe8930454e", size = 30396830, upload-time = "2026-01-10T21:34:23.009Z" } wheels = [ @@ -4907,26 +4208,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/81/61/0470810c8a093cdacd4ba7504b8a218fd49ca070d79eca23a615f5d9a0b0/scipy-1.17.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:0cf46c8013fec9d3694dc572f0b54100c28405d55d3e2cb15e2895b25057996e", size = 37405953, upload-time = "2026-01-10T21:26:07.75Z" }, { url = "https://files.pythonhosted.org/packages/92/ce/672ed546f96d5d41ae78c4b9b02006cedd0b3d6f2bf5bb76ea455c320c28/scipy-1.17.0-cp312-cp312-win_amd64.whl", hash = "sha256:0937a0b0d8d593a198cededd4c439a0ea216a3f36653901ea1f3e4be949056f8", size = 36328121, upload-time = "2026-01-10T21:26:16.509Z" }, { url = "https://files.pythonhosted.org/packages/9d/21/38165845392cae67b61843a52c6455d47d0cc2a40dd495c89f4362944654/scipy-1.17.0-cp312-cp312-win_arm64.whl", hash = "sha256:f603d8a5518c7426414d1d8f82e253e454471de682ce5e39c29adb0df1efb86b", size = 24314368, upload-time = "2026-01-10T21:26:23.087Z" }, - { url = "https://files.pythonhosted.org/packages/0c/51/3468fdfd49387ddefee1636f5cf6d03ce603b75205bf439bbf0e62069bfd/scipy-1.17.0-cp313-cp313-macosx_10_14_x86_64.whl", hash = "sha256:65ec32f3d32dfc48c72df4291345dae4f048749bc8d5203ee0a3f347f96c5ce6", size = 31344101, upload-time = "2026-01-10T21:26:30.25Z" }, - { url = "https://files.pythonhosted.org/packages/b2/9a/9406aec58268d437636069419e6977af953d1e246df941d42d3720b7277b/scipy-1.17.0-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:1f9586a58039d7229ce77b52f8472c972448cded5736eaf102d5658bbac4c269", size = 27950385, upload-time = "2026-01-10T21:26:36.801Z" }, - { url = "https://files.pythonhosted.org/packages/4f/98/e7342709e17afdfd1b26b56ae499ef4939b45a23a00e471dfb5375eea205/scipy-1.17.0-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:9fad7d3578c877d606b1150135c2639e9de9cecd3705caa37b66862977cc3e72", size = 20122115, upload-time = "2026-01-10T21:26:42.107Z" }, - { url = "https://files.pythonhosted.org/packages/fd/0e/9eeeb5357a64fd157cbe0302c213517c541cc16b8486d82de251f3c68ede/scipy-1.17.0-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:423ca1f6584fc03936972b5f7c06961670dbba9f234e71676a7c7ccf938a0d61", size = 22442402, upload-time = "2026-01-10T21:26:48.029Z" }, - { url = "https://files.pythonhosted.org/packages/c9/10/be13397a0e434f98e0c79552b2b584ae5bb1c8b2be95db421533bbca5369/scipy-1.17.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fe508b5690e9eaaa9467fc047f833af58f1152ae51a0d0aed67aa5801f4dd7d6", size = 32696338, upload-time = "2026-01-10T21:26:55.521Z" }, - { url = "https://files.pythonhosted.org/packages/63/1e/12fbf2a3bb240161651c94bb5cdd0eae5d4e8cc6eaeceb74ab07b12a753d/scipy-1.17.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6680f2dfd4f6182e7d6db161344537da644d1cf85cf293f015c60a17ecf08752", size = 34977201, upload-time = "2026-01-10T21:27:03.501Z" }, - { url = "https://files.pythonhosted.org/packages/19/5b/1a63923e23ccd20bd32156d7dd708af5bbde410daa993aa2500c847ab2d2/scipy-1.17.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:eec3842ec9ac9de5917899b277428886042a93db0b227ebbe3a333b64ec7643d", size = 34777384, upload-time = "2026-01-10T21:27:11.423Z" }, - { url = "https://files.pythonhosted.org/packages/39/22/b5da95d74edcf81e540e467202a988c50fef41bd2011f46e05f72ba07df6/scipy-1.17.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:d7425fcafbc09a03731e1bc05581f5fad988e48c6a861f441b7ab729a49a55ea", size = 37379586, upload-time = "2026-01-10T21:27:20.171Z" }, - { url = "https://files.pythonhosted.org/packages/b9/b6/8ac583d6da79e7b9e520579f03007cb006f063642afd6b2eeb16b890bf93/scipy-1.17.0-cp313-cp313-win_amd64.whl", hash = "sha256:87b411e42b425b84777718cc41516b8a7e0795abfa8e8e1d573bf0ef014f0812", size = 36287211, upload-time = "2026-01-10T21:28:43.122Z" }, - { url = "https://files.pythonhosted.org/packages/55/fb/7db19e0b3e52f882b420417644ec81dd57eeef1bd1705b6f689d8ff93541/scipy-1.17.0-cp313-cp313-win_arm64.whl", hash = "sha256:357ca001c6e37601066092e7c89cca2f1ce74e2a520ca78d063a6d2201101df2", size = 24312646, upload-time = "2026-01-10T21:28:49.893Z" }, - { url = "https://files.pythonhosted.org/packages/20/b6/7feaa252c21cc7aff335c6c55e1b90ab3e3306da3f048109b8b639b94648/scipy-1.17.0-cp313-cp313t-macosx_10_14_x86_64.whl", hash = "sha256:ec0827aa4d36cb79ff1b81de898e948a51ac0b9b1c43e4a372c0508c38c0f9a3", size = 31693194, upload-time = "2026-01-10T21:27:27.454Z" }, - { url = "https://files.pythonhosted.org/packages/76/bb/bbb392005abce039fb7e672cb78ac7d158700e826b0515cab6b5b60c26fb/scipy-1.17.0-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:819fc26862b4b3c73a60d486dbb919202f3d6d98c87cf20c223511429f2d1a97", size = 28365415, upload-time = "2026-01-10T21:27:34.26Z" }, - { url = "https://files.pythonhosted.org/packages/37/da/9d33196ecc99fba16a409c691ed464a3a283ac454a34a13a3a57c0d66f3a/scipy-1.17.0-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:363ad4ae2853d88ebcde3ae6ec46ccca903ea9835ee8ba543f12f575e7b07e4e", size = 20537232, upload-time = "2026-01-10T21:27:40.306Z" }, - { url = "https://files.pythonhosted.org/packages/56/9d/f4b184f6ddb28e9a5caea36a6f98e8ecd2a524f9127354087ce780885d83/scipy-1.17.0-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:979c3a0ff8e5ba254d45d59ebd38cde48fce4f10b5125c680c7a4bfe177aab07", size = 22791051, upload-time = "2026-01-10T21:27:46.539Z" }, - { url = "https://files.pythonhosted.org/packages/9b/9d/025cccdd738a72140efc582b1641d0dd4caf2e86c3fb127568dc80444e6e/scipy-1.17.0-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:130d12926ae34399d157de777472bf82e9061c60cc081372b3118edacafe1d00", size = 32815098, upload-time = "2026-01-10T21:27:54.389Z" }, - { url = "https://files.pythonhosted.org/packages/48/5f/09b879619f8bca15ce392bfc1894bd9c54377e01d1b3f2f3b595a1b4d945/scipy-1.17.0-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6e886000eb4919eae3a44f035e63f0fd8b651234117e8f6f29bad1cd26e7bc45", size = 35031342, upload-time = "2026-01-10T21:28:03.012Z" }, - { url = "https://files.pythonhosted.org/packages/f2/9a/f0f0a9f0aa079d2f106555b984ff0fbb11a837df280f04f71f056ea9c6e4/scipy-1.17.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:13c4096ac6bc31d706018f06a49abe0485f96499deb82066b94d19b02f664209", size = 34893199, upload-time = "2026-01-10T21:28:10.832Z" }, - { 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" }, ] [[package]] @@ -4936,8 +4217,7 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "matplotlib" }, { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, - { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.13' and sys_platform == 'emscripten') or (python_full_version < '3.13' and sys_platform == 'win32')" }, - { name = "numpy", version = "2.4.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.13' and sys_platform == 'emscripten') or (python_full_version >= '3.13' and sys_platform == 'win32')" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform == 'emscripten' or sys_platform == 'win32'" }, { name = "pandas" }, ] sdist = { url = "https://files.pythonhosted.org/packages/86/59/a451d7420a77ab0b98f7affa3a1d78a313d2f7281a57afb1a34bae8ab412/seaborn-0.13.2.tar.gz", hash = "sha256:93e60a40988f4d65e9f4885df477e2fdaff6b73a9ded434c1ab356dd57eefff7", size = 1457696, upload-time = "2024-01-25T13:21:52.551Z" } @@ -4970,8 +4250,7 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "huggingface-hub" }, { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, - { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.13' and sys_platform == 'emscripten') or (python_full_version < '3.13' and sys_platform == 'win32')" }, - { name = "numpy", version = "2.4.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.13' and sys_platform == 'emscripten') or (python_full_version >= '3.13' and sys_platform == 'win32')" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform == 'emscripten' or sys_platform == 'win32'" }, { name = "scikit-learn" }, { name = "scipy" }, { name = "torch" }, @@ -4992,10 +4271,6 @@ sdist = { url = "https://files.pythonhosted.org/packages/15/15/2e7a025fc62d764b1 wheels = [ { url = "https://files.pythonhosted.org/packages/89/fa/d3d5ebcba3cb9e6d3775a096251860c41a6bc53a1b9461151df83fe93255/sentencepiece-0.2.1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:99f955df238021bf11f0fc37cdb54fd5e5b5f7fd30ecc3d93fb48b6815437167", size = 1316273, upload-time = "2025-08-12T06:59:44.476Z" }, { url = "https://files.pythonhosted.org/packages/04/88/14f2f4a2b922d8b39be45bf63d79e6cd3a9b2f248b2fcb98a69b12af12f5/sentencepiece-0.2.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0cdfecef430d985f1c2bcbfff3defd1d95dae876fbd0173376012d2d7d24044b", size = 1387881, upload-time = "2025-08-12T06:59:46.09Z" }, - { url = "https://files.pythonhosted.org/packages/2c/d2/f552be5928105588f4f4d66ee37dd4c61460d8097e62d0e2e0eec41bc61d/sentencepiece-0.2.1-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d7b670879c370d350557edabadbad1f6561a9e6968126e6debca4029e5547820", size = 1316271, upload-time = "2025-08-12T06:59:58.109Z" }, - { url = "https://files.pythonhosted.org/packages/96/df/0cfe748ace5485be740fed9476dee7877f109da32ed0d280312c94ec259f/sentencepiece-0.2.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c7f0fd2f2693309e6628aeeb2e2faf6edd221134dfccac3308ca0de01f8dab47", size = 1387882, upload-time = "2025-08-12T07:00:00.701Z" }, - { url = "https://files.pythonhosted.org/packages/bc/85/c72fd1f3c7a6010544d6ae07f8ddb38b5e2a7e33bd4318f87266c0bbafbf/sentencepiece-0.2.1-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b81a24733726e3678d2db63619acc5a8dccd074f7aa7a54ecd5ca33ca6d2d596", size = 1315722, upload-time = "2025-08-12T07:00:12.989Z" }, - { url = "https://files.pythonhosted.org/packages/4a/e8/661e5bd82a8aa641fd6c1020bd0e890ef73230a2b7215ddf9c8cd8e941c2/sentencepiece-0.2.1-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0a81799d0a68d618e89063fb423c3001a034c893069135ffe51fee439ae474d6", size = 1387452, upload-time = "2025-08-12T07:00:15.088Z" }, ] [[package]] @@ -5023,18 +4298,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/b0/3a/50caca532a9343828e3bf5778c7a84d6c737a249b1796d50dd680290594d/setproctitle-1.3.7-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:b7cb05bd446687ff816a3aaaf831047fc4c364feff7ada94a66024f1367b448c", size = 33143, upload-time = "2025-09-05T12:49:43.515Z" }, { url = "https://files.pythonhosted.org/packages/ca/14/b843a251296ce55e2e17c017d6b9f11ce0d3d070e9265de4ecad948b913d/setproctitle-1.3.7-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:3a57b9a00de8cae7e2a1f7b9f0c2ac7b69372159e16a7708aa2f38f9e5cc987a", size = 34434, upload-time = "2025-09-05T12:49:45.31Z" }, { url = "https://files.pythonhosted.org/packages/c8/b7/06145c238c0a6d2c4bc881f8be230bb9f36d2bf51aff7bddcb796d5eed67/setproctitle-1.3.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:d8828b356114f6b308b04afe398ed93803d7fca4a955dd3abe84430e28d33739", size = 32795, upload-time = "2025-09-05T12:49:46.419Z" }, - { url = "https://files.pythonhosted.org/packages/87/ed/0a4f00315bc02510395b95eec3d4aa77c07192ee79f0baae77ea7b9603d8/setproctitle-1.3.7-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:0564a936ea687cd24dffcea35903e2a20962aa6ac20e61dd3a207652401492dd", size = 33284, upload-time = "2025-09-05T12:49:52.741Z" }, - { url = "https://files.pythonhosted.org/packages/fc/e4/adf3c4c0a2173cb7920dc9df710bcc67e9bcdbf377e243b7a962dc31a51a/setproctitle-1.3.7-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a5d1cb3f81531f0eb40e13246b679a1bdb58762b170303463cb06ecc296f26d0", size = 34104, upload-time = "2025-09-05T12:49:54.416Z" }, - { url = "https://files.pythonhosted.org/packages/52/4f/6daf66394152756664257180439d37047aa9a1cfaa5e4f5ed35e93d1dc06/setproctitle-1.3.7-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a7d159e7345f343b44330cbba9194169b8590cb13dae940da47aa36a72aa9929", size = 35982, upload-time = "2025-09-05T12:49:56.295Z" }, - { url = "https://files.pythonhosted.org/packages/1b/62/f2c0595403cf915db031f346b0e3b2c0096050e90e0be658a64f44f4278a/setproctitle-1.3.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0b5074649797fd07c72ca1f6bff0406f4a42e1194faac03ecaab765ce605866f", size = 33150, upload-time = "2025-09-05T12:49:58.025Z" }, - { url = "https://files.pythonhosted.org/packages/a0/29/10dd41cde849fb2f9b626c846b7ea30c99c81a18a5037a45cc4ba33c19a7/setproctitle-1.3.7-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:61e96febced3f61b766115381d97a21a6265a0f29188a791f6df7ed777aef698", size = 34463, upload-time = "2025-09-05T12:49:59.424Z" }, - { url = "https://files.pythonhosted.org/packages/71/3c/cedd8eccfaf15fb73a2c20525b68c9477518917c9437737fa0fda91e378f/setproctitle-1.3.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:047138279f9463f06b858e579cc79580fbf7a04554d24e6bddf8fe5dddbe3d4c", size = 32848, upload-time = "2025-09-05T12:50:01.107Z" }, - { url = "https://files.pythonhosted.org/packages/52/09/f366eca0973cfbac1470068d1313fa3fe3de4a594683385204ec7f1c4101/setproctitle-1.3.7-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:c18246d88e227a5b16248687514f95642505000442165f4b7db354d39d0e4c29", size = 34490, upload-time = "2025-09-05T12:50:04.948Z" }, - { url = "https://files.pythonhosted.org/packages/71/36/611fc2ed149fdea17c3677e1d0df30d8186eef9562acc248682b91312706/setproctitle-1.3.7-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7081f193dab22df2c36f9fc6d113f3793f83c27891af8fe30c64d89d9a37e152", size = 35267, upload-time = "2025-09-05T12:50:06.015Z" }, - { url = "https://files.pythonhosted.org/packages/88/a4/64e77d0671446bd5a5554387b69e1efd915274686844bea733714c828813/setproctitle-1.3.7-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:9cc9b901ce129350637426a89cfd650066a4adc6899e47822e2478a74023ff7c", size = 37376, upload-time = "2025-09-05T12:50:07.484Z" }, - { url = "https://files.pythonhosted.org/packages/89/bc/ad9c664fe524fb4a4b2d3663661a5c63453ce851736171e454fa2cdec35c/setproctitle-1.3.7-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:80e177eff2d1ec172188d0d7fd9694f8e43d3aab76a6f5f929bee7bf7894e98b", size = 33963, upload-time = "2025-09-05T12:50:09.056Z" }, - { url = "https://files.pythonhosted.org/packages/ab/01/a36de7caf2d90c4c28678da1466b47495cbbad43badb4e982d8db8167ed4/setproctitle-1.3.7-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:23e520776c445478a67ee71b2a3c1ffdafbe1f9f677239e03d7e2cc635954e18", size = 35550, upload-time = "2025-09-05T12:50:10.791Z" }, - { url = "https://files.pythonhosted.org/packages/dd/68/17e8aea0ed5ebc17fbf03ed2562bfab277c280e3625850c38d92a7b5fcd9/setproctitle-1.3.7-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:5fa1953126a3b9bd47049d58c51b9dac72e78ed120459bd3aceb1bacee72357c", size = 33727, upload-time = "2025-09-05T12:50:12.032Z" }, ] [[package]] @@ -5042,8 +4305,7 @@ name = "setuptools" version = "79.0.1" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version >= '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'", - "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'", + "sys_platform != 'emscripten' and sys_platform != 'win32'", ] sdist = { url = "https://files.pythonhosted.org/packages/bb/71/b6365e6325b3290e14957b2c3a804a529968c77a049b2ed40c095f749707/setuptools-79.0.1.tar.gz", hash = "sha256:128ce7b8f33c3079fd1b067ecbb4051a66e8526e7b65f6cec075dfc650ddfa88", size = 1367909, upload-time = "2025-04-23T22:20:59.241Z" } wheels = [ @@ -5055,10 +4317,8 @@ name = "setuptools" version = "80.10.2" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "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 == 'win32'", - "python_full_version < '3.13' and sys_platform == 'emscripten'", + "sys_platform == 'win32'", + "sys_platform == 'emscripten'", ] sdist = { url = "https://files.pythonhosted.org/packages/76/95/faf61eb8363f26aa7e1d762267a8d602a1b26d4f3a1e758e92cb3cb8b054/setuptools-80.10.2.tar.gz", hash = "sha256:8b0e9d10c784bf7d262c4e5ec5d4ec94127ce206e8738f29a437945fbc219b70", size = 1200343, upload-time = "2026-01-25T22:38:17.252Z" } wheels = [ @@ -5164,7 +4424,7 @@ version = "0.52.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "anyio", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, - { name = "typing-extensions", marker = "python_full_version < '3.13' and sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "typing-extensions", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/c4/68/79977123bb7be889ad680d79a40f339082c1978b5cfcf62c2d8d196873ac/starlette-0.52.1.tar.gz", hash = "sha256:834edd1b0a23167694292e94f597773bc3f89f362be6effee198165a35d62933", size = 2653702, upload-time = "2026-01-18T13:34:11.062Z" } wheels = [ @@ -5301,14 +4561,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/f4/90/3dae6cc5436137ebd38944d396b5849e167896fc2073da643a49f372dc4f/tiktoken-0.12.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:edde1ec917dfd21c1f2f8046b86348b0f54a2c0547f68149d8600859598769ad", size = 1152665, upload-time = "2025-10-06T20:21:56.129Z" }, { url = "https://files.pythonhosted.org/packages/a3/fe/26df24ce53ffde419a42f5f53d755b995c9318908288c17ec3f3448313a3/tiktoken-0.12.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:35a2f8ddd3824608b3d650a000c1ef71f730d0c56486845705a8248da00f9fe5", size = 1194230, upload-time = "2025-10-06T20:21:57.546Z" }, { url = "https://files.pythonhosted.org/packages/20/cc/b064cae1a0e9fac84b0d2c46b89f4e57051a5f41324e385d10225a984c24/tiktoken-0.12.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:83d16643edb7fa2c99eff2ab7733508aae1eebb03d5dfc46f5565862810f24e3", size = 1254688, upload-time = "2025-10-06T20:21:58.619Z" }, - { url = "https://files.pythonhosted.org/packages/a0/70/5163fe5359b943f8db9946b62f19be2305de8c3d78a16f629d4165e2f40e/tiktoken-0.12.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:01d99484dc93b129cd0964f9d34eee953f2737301f18b3c7257bf368d7615baa", size = 1128948, upload-time = "2025-10-06T20:22:03.814Z" }, - { url = "https://files.pythonhosted.org/packages/0c/da/c028aa0babf77315e1cef357d4d768800c5f8a6de04d0eac0f377cb619fa/tiktoken-0.12.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:4a1a4fcd021f022bfc81904a911d3df0f6543b9e7627b51411da75ff2fe7a1be", size = 1151986, upload-time = "2025-10-06T20:22:05.173Z" }, - { url = "https://files.pythonhosted.org/packages/a0/5a/886b108b766aa53e295f7216b509be95eb7d60b166049ce2c58416b25f2a/tiktoken-0.12.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:981a81e39812d57031efdc9ec59fa32b2a5a5524d20d4776574c4b4bd2e9014a", size = 1194222, upload-time = "2025-10-06T20:22:06.265Z" }, - { url = "https://files.pythonhosted.org/packages/f4/f8/4db272048397636ac7a078d22773dd2795b1becee7bc4922fe6207288d57/tiktoken-0.12.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9baf52f84a3f42eef3ff4e754a0db79a13a27921b457ca9832cf944c6be4f8f3", size = 1255097, upload-time = "2025-10-06T20:22:07.403Z" }, - { url = "https://files.pythonhosted.org/packages/72/90/13da56f664286ffbae9dbcfadcc625439142675845baa62715e49b87b68b/tiktoken-0.12.0-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:fc530a28591a2d74bce821d10b418b26a094bf33839e69042a6e86ddb7a7fb27", size = 1128725, upload-time = "2025-10-06T20:22:13.541Z" }, - { url = "https://files.pythonhosted.org/packages/05/df/4f80030d44682235bdaecd7346c90f67ae87ec8f3df4a3442cb53834f7e4/tiktoken-0.12.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:06a9f4f49884139013b138920a4c393aa6556b2f8f536345f11819389c703ebb", size = 1151875, upload-time = "2025-10-06T20:22:14.559Z" }, - { url = "https://files.pythonhosted.org/packages/22/1f/ae535223a8c4ef4c0c1192e3f9b82da660be9eb66b9279e95c99288e9dab/tiktoken-0.12.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:04f0e6a985d95913cabc96a741c5ffec525a2c72e9df086ff17ebe35985c800e", size = 1194451, upload-time = "2025-10-06T20:22:15.545Z" }, - { url = "https://files.pythonhosted.org/packages/78/a7/f8ead382fce0243cb625c4f266e66c27f65ae65ee9e77f59ea1653b6d730/tiktoken-0.12.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:0ee8f9ae00c41770b5f9b0bb1235474768884ae157de3beb5439ca0fd70f3e25", size = 1253794, upload-time = "2025-10-06T20:22:16.624Z" }, ] [[package]] @@ -5401,14 +4653,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/99/a8/6acf48d48838fb8fe480597d98a0668c2beb02ee4755cc136de92a0a956f/torch-2.8.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:b2aca0939fb7e4d842561febbd4ffda67a8e958ff725c1c27e244e85e982173c", size = 887913624, upload-time = "2025-08-06T14:56:44.33Z" }, { url = "https://files.pythonhosted.org/packages/af/8a/5c87f08e3abd825c7dfecef5a0f1d9aa5df5dd0e3fd1fa2f490a8e512402/torch-2.8.0-cp312-cp312-win_amd64.whl", hash = "sha256:2f4ac52f0130275d7517b03a33d2493bab3693c83dcfadf4f81688ea82147d2e", size = 241326087, upload-time = "2025-08-06T14:53:46.503Z" }, { url = "https://files.pythonhosted.org/packages/be/66/5c9a321b325aaecb92d4d1855421e3a055abd77903b7dab6575ca07796db/torch-2.8.0-cp312-none-macosx_11_0_arm64.whl", hash = "sha256:619c2869db3ada2c0105487ba21b5008defcc472d23f8b80ed91ac4a380283b0", size = 73630478, upload-time = "2025-08-06T14:53:57.144Z" }, - { url = "https://files.pythonhosted.org/packages/10/4e/469ced5a0603245d6a19a556e9053300033f9c5baccf43a3d25ba73e189e/torch-2.8.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:2b2f96814e0345f5a5aed9bf9734efa913678ed19caf6dc2cddb7930672d6128", size = 101936856, upload-time = "2025-08-06T14:54:01.526Z" }, - { url = "https://files.pythonhosted.org/packages/16/82/3948e54c01b2109238357c6f86242e6ecbf0c63a1af46906772902f82057/torch-2.8.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:65616ca8ec6f43245e1f5f296603e33923f4c30f93d65e103d9e50c25b35150b", size = 887922844, upload-time = "2025-08-06T14:55:50.78Z" }, - { url = "https://files.pythonhosted.org/packages/e3/54/941ea0a860f2717d86a811adf0c2cd01b3983bdd460d0803053c4e0b8649/torch-2.8.0-cp313-cp313-win_amd64.whl", hash = "sha256:659df54119ae03e83a800addc125856effda88b016dfc54d9f65215c3975be16", size = 241330968, upload-time = "2025-08-06T14:54:45.293Z" }, - { url = "https://files.pythonhosted.org/packages/de/69/8b7b13bba430f5e21d77708b616f767683629fc4f8037564a177d20f90ed/torch-2.8.0-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:1a62a1ec4b0498930e2543535cf70b1bef8c777713de7ceb84cd79115f553767", size = 73915128, upload-time = "2025-08-06T14:54:34.769Z" }, - { url = "https://files.pythonhosted.org/packages/15/0e/8a800e093b7f7430dbaefa80075aee9158ec22e4c4fc3c1a66e4fb96cb4f/torch-2.8.0-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:83c13411a26fac3d101fe8035a6b0476ae606deb8688e904e796a3534c197def", size = 102020139, upload-time = "2025-08-06T14:54:39.047Z" }, - { url = "https://files.pythonhosted.org/packages/4a/15/5e488ca0bc6162c86a33b58642bc577c84ded17c7b72d97e49b5833e2d73/torch-2.8.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:8f0a9d617a66509ded240add3754e462430a6c1fc5589f86c17b433dd808f97a", size = 887990692, upload-time = "2025-08-06T14:56:18.286Z" }, - { url = "https://files.pythonhosted.org/packages/b4/a8/6a04e4b54472fc5dba7ca2341ab219e529f3c07b6941059fbf18dccac31f/torch-2.8.0-cp313-cp313t-win_amd64.whl", hash = "sha256:a7242b86f42be98ac674b88a4988643b9bc6145437ec8f048fea23f72feb5eca", size = 241603453, upload-time = "2025-08-06T14:55:22.945Z" }, - { url = "https://files.pythonhosted.org/packages/04/6e/650bb7f28f771af0cb791b02348db8b7f5f64f40f6829ee82aa6ce99aabe/torch-2.8.0-cp313-none-macosx_11_0_arm64.whl", hash = "sha256:7b677e17f5a3e69fdef7eb3b9da72622f8d322692930297e4ccb52fefc6c8211", size = 73632395, upload-time = "2025-08-06T14:55:28.645Z" }, ] [[package]] @@ -5430,10 +4674,6 @@ dependencies = [ wheels = [ { url = "https://files.pythonhosted.org/packages/c7/0d/24dad878784f1edd62862f27173781669f0c71eb46368636787d1e364188/torchaudio-2.8.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:862e2e40bf09d865e5df080a84c1a39bbcef40e43140f4b1737eb3a389d3b38f", size = 1692930, upload-time = "2025-08-06T14:58:41.312Z" }, { url = "https://files.pythonhosted.org/packages/c2/a6/84d80f34472503e9eb82245d7df501c59602d75d7360e717fb9b84f91c5e/torchaudio-2.8.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:93a8583f280fe83ba021aa713319381ea71362cc87b67ee38e97a43cb2254aee", size = 4014607, upload-time = "2025-08-06T14:58:47.234Z" }, - { url = "https://files.pythonhosted.org/packages/0d/a3/1c79a8ef29fe403b83bdfc033db852bc2a888b80c406325e5c6fb37a7f2d/torchaudio-2.8.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:09535a9b727c0793cd07c1ace99f3f353626281bcc3e30c2f2314e3ebc9d3f96", size = 1692755, upload-time = "2025-08-06T14:58:50.868Z" }, - { url = "https://files.pythonhosted.org/packages/49/df/61941198e9ac6bcebfdd57e1836e4f3c23409308e3d8d7458f0198a6a366/torchaudio-2.8.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:d2a85b124494736241884372fe1c6dd8c15e9bc1931bd325838c5c00238c7378", size = 4013897, upload-time = "2025-08-06T14:59:01.66Z" }, - { url = "https://files.pythonhosted.org/packages/71/76/40fec21b65bccfdc5c8cdb9d511033ab07a7ad4b05f0a5b07f85c68279fc/torchaudio-2.8.0-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:1951f10ed092f2dda57634f6a3950ef21c9d9352551aa84a9fccd51bbda18095", size = 1704199, upload-time = "2025-08-06T14:58:43.594Z" }, - { url = "https://files.pythonhosted.org/packages/8e/53/95c3363413c2f2009f805144160b093a385f641224465fbcd717449c71fb/torchaudio-2.8.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:4f7d97494698d98854129349b12061e8c3398d33bd84c929fa9aed5fd1389f73", size = 4020596, upload-time = "2025-08-06T14:59:03.031Z" }, ] [[package]] @@ -5448,10 +4688,6 @@ dependencies = [ wheels = [ { url = "https://files.pythonhosted.org/packages/e2/00/2f6454decc0cd67158c7890364e446aad4b91797087a57a78e72e1a8f8bc/torchvision-0.23.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:6dd7c4d329a0e03157803031bc856220c6155ef08c26d4f5bbac938acecf0948", size = 2396614, upload-time = "2025-08-06T14:58:03.116Z" }, { url = "https://files.pythonhosted.org/packages/e4/b5/3e580dcbc16f39a324f3dd71b90edbf02a42548ad44d2b4893cc92b1194b/torchvision-0.23.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:4e7d31c43bc7cbecbb1a5652ac0106b436aa66e26437585fc2c4b2cf04d6014c", size = 8627108, upload-time = "2025-08-06T14:58:12.956Z" }, - { url = "https://files.pythonhosted.org/packages/ac/da/a06c60fc84fc849377cf035d3b3e9a1c896d52dbad493b963c0f1cdd74d0/torchvision-0.23.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:2f7fd6c15f3697e80627b77934f77705f3bc0e98278b989b2655de01f6903e1d", size = 2353112, upload-time = "2025-08-06T14:58:26.265Z" }, - { url = "https://files.pythonhosted.org/packages/a0/27/5ce65ba5c9d3b7d2ccdd79892ab86a2f87ac2ca6638f04bb0280321f1a9c/torchvision-0.23.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:a76fafe113b2977be3a21bf78f115438c1f88631d7a87203acb3dd6ae55889e6", size = 8627658, upload-time = "2025-08-06T14:58:15.999Z" }, - { url = "https://files.pythonhosted.org/packages/1d/9d/406cea60a9eb9882145bcd62a184ee61e823e8e1d550cdc3c3ea866a9445/torchvision-0.23.0-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:2a3299d2b1d5a7aed2d3b6ffb69c672ca8830671967eb1cee1497bacd82fe47b", size = 2359295, upload-time = "2025-08-06T14:58:17.469Z" }, - { url = "https://files.pythonhosted.org/packages/2b/f4/34662f71a70fa1e59de99772142f22257ca750de05ccb400b8d2e3809c1d/torchvision-0.23.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:76bc4c0b63d5114aa81281390f8472a12a6a35ce9906e67ea6044e5af4cab60c", size = 8800474, upload-time = "2025-08-06T14:58:22.53Z" }, ] [[package]] @@ -5519,8 +4755,7 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "huggingface-hub" }, { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, - { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version < '3.13' and sys_platform == 'emscripten') or (python_full_version < '3.13' and sys_platform == 'win32')" }, - { name = "numpy", version = "2.4.2", source = { registry = "https://pypi.org/simple" }, marker = "(python_full_version >= '3.13' and sys_platform == 'emscripten') or (python_full_version >= '3.13' and sys_platform == 'win32')" }, + { name = "numpy", version = "2.3.5", source = { registry = "https://pypi.org/simple" }, marker = "sys_platform == 'emscripten' or sys_platform == 'win32'" }, { name = "packaging" }, { name = "pyyaml" }, { name = "regex" }, @@ -5549,8 +4784,6 @@ dependencies = [ ] wheels = [ { url = "https://files.pythonhosted.org/packages/d0/66/b1eb52839f563623d185f0927eb3530ee4d5ffe9d377cdaf5346b306689e/triton-3.4.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:31c1d84a5c0ec2c0f8e8a072d7fd150cab84a9c239eaddc6706c081bfae4eb04", size = 155560068, upload-time = "2025-07-30T19:58:37.081Z" }, - { url = "https://files.pythonhosted.org/packages/30/7b/0a685684ed5322d2af0bddefed7906674f67974aa88b0fae6e82e3b766f6/triton-3.4.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:00be2964616f4c619193cb0d1b29a99bd4b001d7dc333816073f92cf2a8ccdeb", size = 155569223, upload-time = "2025-07-30T19:58:44.017Z" }, - { url = "https://files.pythonhosted.org/packages/20/63/8cb444ad5cdb25d999b7d647abac25af0ee37d292afc009940c05b82dda0/triton-3.4.0-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7936b18a3499ed62059414d7df563e6c163c5e16c3773678a3ee3d417865035d", size = 155659780, upload-time = "2025-07-30T19:58:51.171Z" }, ] [[package]] @@ -5701,10 +4934,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/5f/6f/e62b4dfc7ad6518e7eff2516f680d02a0f6eb62c0c212e152ca708a0085e/uvloop-0.22.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7b5b1ac819a3f946d3b2ee07f09149578ae76066d70b44df3fa990add49a82e4", size = 4426307, upload-time = "2025-10-16T22:16:32.917Z" }, { url = "https://files.pythonhosted.org/packages/90/60/97362554ac21e20e81bcef1150cb2a7e4ffdaf8ea1e5b2e8bf7a053caa18/uvloop-0.22.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e047cc068570bac9866237739607d1313b9253c3051ad84738cbb095be0537b2", size = 4131970, upload-time = "2025-10-16T22:16:34.015Z" }, { url = "https://files.pythonhosted.org/packages/99/39/6b3f7d234ba3964c428a6e40006340f53ba37993f46ed6e111c6e9141d18/uvloop-0.22.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:512fec6815e2dd45161054592441ef76c830eddaad55c8aa30952e6fe1ed07c0", size = 4296343, upload-time = "2025-10-16T22:16:35.149Z" }, - { url = "https://files.pythonhosted.org/packages/b7/02/654426ce265ac19e2980bfd9ea6590ca96a56f10c76e63801a2df01c0486/uvloop-0.22.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6e2ea3d6190a2968f4a14a23019d3b16870dd2190cd69c8180f7c632d21de68d", size = 4288562, upload-time = "2025-10-16T22:16:39.375Z" }, - { 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" }, ] [[package]] @@ -5831,7 +5060,7 @@ dev = [ requires-dist = [ { name = "accelerate" }, { name = "axolotl", marker = "sys_platform == 'linux'", git = "https://github.com/axolotl-ai-cloud/axolotl.git?rev=v0.16.1" }, - { name = "bitsandbytes", marker = "sys_platform == 'linux'", specifier = ">=0.49.2" }, + { name = "bitsandbytes", marker = "sys_platform == 'linux'", specifier = ">=0.49.1" }, { name = "datasets", specifier = ">=4.5.0" }, { name = "dotenv", specifier = ">=0.9.9" }, { name = "huggingface-hub", specifier = ">=1.4.1" }, @@ -5909,22 +5138,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/cf/68/5707da262a119fb06fbe214d82dd1fe4a6f4af32d2d14de368d0349eb52a/watchfiles-1.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1db5d7ae38ff20153d542460752ff397fcf5c96090c1230803713cf3147a6803", size = 456812, upload-time = "2025-10-14T15:04:55.174Z" }, { url = "https://files.pythonhosted.org/packages/66/ab/3cbb8756323e8f9b6f9acb9ef4ec26d42b2109bce830cc1f3468df20511d/watchfiles-1.1.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:28475ddbde92df1874b6c5c8aaeb24ad5be47a11f87cde5a28ef3835932e3e94", size = 630196, upload-time = "2025-10-14T15:04:56.22Z" }, { url = "https://files.pythonhosted.org/packages/78/46/7152ec29b8335f80167928944a94955015a345440f524d2dfe63fc2f437b/watchfiles-1.1.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:36193ed342f5b9842edd3532729a2ad55c4160ffcfa3700e0d54be496b70dd43", size = 622657, upload-time = "2025-10-14T15:04:57.521Z" }, - { url = "https://files.pythonhosted.org/packages/bc/11/fc2502457e0bea39a5c958d86d2cb69e407a4d00b85735ca724bfa6e0d1a/watchfiles-1.1.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:14e0b1fe858430fc0251737ef3824c54027bedb8c37c38114488b8e131cf8219", size = 449279, upload-time = "2025-10-14T15:05:04.004Z" }, - { url = "https://files.pythonhosted.org/packages/e3/1f/d66bc15ea0b728df3ed96a539c777acfcad0eb78555ad9efcaa1274688f0/watchfiles-1.1.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f27db948078f3823a6bb3b465180db8ebecf26dd5dae6f6180bd87383b6b4428", size = 459405, upload-time = "2025-10-14T15:05:04.942Z" }, - { url = "https://files.pythonhosted.org/packages/be/90/9f4a65c0aec3ccf032703e6db02d89a157462fbb2cf20dd415128251cac0/watchfiles-1.1.1-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:059098c3a429f62fc98e8ec62b982230ef2c8df68c79e826e37b895bc359a9c0", size = 488976, upload-time = "2025-10-14T15:05:05.905Z" }, - { url = "https://files.pythonhosted.org/packages/37/57/ee347af605d867f712be7029bb94c8c071732a4b44792e3176fa3c612d39/watchfiles-1.1.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bfb5862016acc9b869bb57284e6cb35fdf8e22fe59f7548858e2f971d045f150", size = 595506, upload-time = "2025-10-14T15:05:06.906Z" }, - { url = "https://files.pythonhosted.org/packages/a8/78/cc5ab0b86c122047f75e8fc471c67a04dee395daf847d3e59381996c8707/watchfiles-1.1.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:319b27255aacd9923b8a276bb14d21a5f7ff82564c744235fc5eae58d95422ae", size = 474936, upload-time = "2025-10-14T15:05:07.906Z" }, - { url = "https://files.pythonhosted.org/packages/62/da/def65b170a3815af7bd40a3e7010bf6ab53089ef1b75d05dd5385b87cf08/watchfiles-1.1.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c755367e51db90e75b19454b680903631d41f9e3607fbd941d296a020c2d752d", size = 456147, upload-time = "2025-10-14T15:05:09.138Z" }, - { url = "https://files.pythonhosted.org/packages/57/99/da6573ba71166e82d288d4df0839128004c67d2778d3b566c138695f5c0b/watchfiles-1.1.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:c22c776292a23bfc7237a98f791b9ad3144b02116ff10d820829ce62dff46d0b", size = 630007, upload-time = "2025-10-14T15:05:10.117Z" }, - { url = "https://files.pythonhosted.org/packages/a8/51/7439c4dd39511368849eb1e53279cd3454b4a4dbace80bab88feeb83c6b5/watchfiles-1.1.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:3a476189be23c3686bc2f4321dd501cb329c0a0469e77b7b534ee10129ae6374", size = 622280, upload-time = "2025-10-14T15:05:11.146Z" }, - { url = "https://files.pythonhosted.org/packages/27/0d/7c315d4bd5f2538910491a0393c56bf70d333d51bc5b34bee8e68e8cea19/watchfiles-1.1.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ce70f96a46b894b36eba678f153f052967a0d06d5b5a19b336ab0dbbd029f73e", size = 448114, upload-time = "2025-10-14T15:05:17.876Z" }, - { url = "https://files.pythonhosted.org/packages/c3/24/9e096de47a4d11bc4df41e9d1e61776393eac4cb6eb11b3e23315b78b2cc/watchfiles-1.1.1-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:cb467c999c2eff23a6417e58d75e5828716f42ed8289fe6b77a7e5a91036ca70", size = 460264, upload-time = "2025-10-14T15:05:18.962Z" }, - { url = "https://files.pythonhosted.org/packages/cc/0f/e8dea6375f1d3ba5fcb0b3583e2b493e77379834c74fd5a22d66d85d6540/watchfiles-1.1.1-cp313-cp313t-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:836398932192dae4146c8f6f737d74baeac8b70ce14831a239bdb1ca882fc261", size = 487877, upload-time = "2025-10-14T15:05:20.094Z" }, - { url = "https://files.pythonhosted.org/packages/ac/5b/df24cfc6424a12deb41503b64d42fbea6b8cb357ec62ca84a5a3476f654a/watchfiles-1.1.1-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:743185e7372b7bc7c389e1badcc606931a827112fbbd37f14c537320fca08620", size = 595176, upload-time = "2025-10-14T15:05:21.134Z" }, - { url = "https://files.pythonhosted.org/packages/8f/b5/853b6757f7347de4e9b37e8cc3289283fb983cba1ab4d2d7144694871d9c/watchfiles-1.1.1-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:afaeff7696e0ad9f02cbb8f56365ff4686ab205fcf9c4c5b6fdfaaa16549dd04", size = 473577, upload-time = "2025-10-14T15:05:22.306Z" }, - { 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" }, ] [[package]] @@ -5973,10 +5186,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/97/bb/21c36b7dbbafc85d2d480cd65df02a1dc93bf76d97147605a8e27ff9409d/websockets-16.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e0334872c0a37b606418ac52f6ab9cfd17317ac26365f7f65e203e2d0d0d359f", size = 186152, upload-time = "2026-01-10T09:22:52.224Z" }, { url = "https://files.pythonhosted.org/packages/4a/34/9bf8df0c0cf88fa7bfe36678dc7b02970c9a7d5e065a3099292db87b1be2/websockets-16.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a0b31e0b424cc6b5a04b8838bbaec1688834b2383256688cf47eb97412531da1", size = 185583, upload-time = "2026-01-10T09:22:53.443Z" }, { url = "https://files.pythonhosted.org/packages/47/88/4dd516068e1a3d6ab3c7c183288404cd424a9a02d585efbac226cb61ff2d/websockets-16.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:485c49116d0af10ac698623c513c1cc01c9446c058a4e61e3bf6c19dff7335a2", size = 184880, upload-time = "2026-01-10T09:22:55.033Z" }, - { url = "https://files.pythonhosted.org/packages/bd/28/0a25ee5342eb5d5f297d992a77e56892ecb65e7854c7898fb7d35e9b33bd/websockets-16.0-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:95724e638f0f9c350bb1c2b0a7ad0e83d9cc0c9259f3ea94e40d7b02a2179ae5", size = 184975, upload-time = "2026-01-10T09:23:03.756Z" }, - { url = "https://files.pythonhosted.org/packages/f9/66/27ea52741752f5107c2e41fda05e8395a682a1e11c4e592a809a90c6a506/websockets-16.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c0204dc62a89dc9d50d682412c10b3542d748260d743500a85c13cd1ee4bde82", size = 186203, upload-time = "2026-01-10T09:23:05.01Z" }, - { url = "https://files.pythonhosted.org/packages/37/e5/8e32857371406a757816a2b471939d51c463509be73fa538216ea52b792a/websockets-16.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:52ac480f44d32970d66763115edea932f1c5b1312de36df06d6b219f6741eed8", size = 185653, upload-time = "2026-01-10T09:23:06.301Z" }, - { 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/6f/28/258ebab549c2bf3e64d2b0217b973467394a9cea8c42f70418ca2c5d0d2e/websockets-16.0-py3-none-any.whl", hash = "sha256:1637db62fad1dc833276dded54215f2c7fa46912301a24bd94d45d46a011ceec", size = 171598, upload-time = "2026-01-10T09:23:45.395Z" }, ] @@ -6008,10 +5217,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/ca/38/2e1785df03b3d72d34fc6252d91d9d12dc27a5c89caef3335a1bbb8908ca/wrapt-1.17.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3af60380ba0b7b5aeb329bc4e402acd25bd877e98b3727b0135cb5c2efdaefe9", size = 88156, upload-time = "2025-08-12T05:52:13.599Z" }, { url = "https://files.pythonhosted.org/packages/b3/8b/48cdb60fe0603e34e05cffda0b2a4adab81fd43718e11111a4b0100fd7c1/wrapt-1.17.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:0b02e424deef65c9f7326d8c19220a2c9040c51dc165cddb732f16198c168396", size = 87102, upload-time = "2025-08-12T05:52:14.56Z" }, { url = "https://files.pythonhosted.org/packages/3c/51/d81abca783b58f40a154f1b2c56db1d2d9e0d04fa2d4224e357529f57a57/wrapt-1.17.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:74afa28374a3c3a11b3b5e5fca0ae03bef8450d6aa3ab3a1e2c30e3a75d023dc", size = 87732, upload-time = "2025-08-12T05:52:36.165Z" }, - { url = "https://files.pythonhosted.org/packages/0c/37/6faf15cfa41bf1f3dba80cd3f5ccc6622dfccb660ab26ed79f0178c7497f/wrapt-1.17.3-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:6fd1ad24dc235e4ab88cda009e19bf347aabb975e44fd5c2fb22a3f6e4141277", size = 88072, upload-time = "2025-08-12T05:52:37.53Z" }, - { url = "https://files.pythonhosted.org/packages/78/f2/efe19ada4a38e4e15b6dff39c3e3f3f73f5decf901f66e6f72fe79623a06/wrapt-1.17.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0ed61b7c2d49cee3c027372df5809a59d60cf1b6c2f81ee980a091f3afed6a2d", size = 88214, upload-time = "2025-08-12T05:52:15.886Z" }, - { url = "https://files.pythonhosted.org/packages/40/90/ca86701e9de1622b16e09689fc24b76f69b06bb0150990f6f4e8b0eeb576/wrapt-1.17.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:423ed5420ad5f5529db9ce89eac09c8a2f97da18eb1c870237e84c5a5c2d60aa", size = 87105, upload-time = "2025-08-12T05:52:17.914Z" }, - { url = "https://files.pythonhosted.org/packages/fd/e0/d10bd257c9a3e15cbf5523025252cc14d77468e8ed644aafb2d6f54cb95d/wrapt-1.17.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e01375f275f010fcbf7f643b4279896d04e571889b8a5b3f848423d91bf07050", size = 87766, upload-time = "2025-08-12T05:52:39.243Z" }, { url = "https://files.pythonhosted.org/packages/1f/f6/a933bd70f98e9cf3e08167fc5cd7aaaca49147e48411c0bd5ae701bb2194/wrapt-1.17.3-py3-none-any.whl", hash = "sha256:7171ae35d2c33d326ac19dd8facb1e82e5fd04ef8c6c0e394d7af55a55051c22", size = 23591, upload-time = "2025-08-12T05:53:20.674Z" }, ] @@ -6045,7 +5250,6 @@ sdist = { url = "https://files.pythonhosted.org/packages/f2/a9/dc3c63cf7f082d183 wheels = [ { url = "https://files.pythonhosted.org/packages/99/9c/39bb38680be3b6d6aa11b8a46a69fb43e2537d6728710b299fa9fc231ff0/xgrammar-0.1.25-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c519518ebc65f75053123baaf23776a21bda58f64101a64c2fc4aa467c9cd480", size = 8519097, upload-time = "2025-09-21T05:58:40.831Z" }, { url = "https://files.pythonhosted.org/packages/c6/c2/695797afa9922c30c45aa94e087ad33a9d87843f269461b622a65a39022a/xgrammar-0.1.25-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47fdbfc6007df47de2142613220292023e88e4a570546b39591f053e4d9ec33f", size = 8712184, upload-time = "2025-09-21T05:58:43.142Z" }, - { url = "https://files.pythonhosted.org/packages/e1/48/df8c52a22f47f1e3237d9457fd6fefe8b9bca75a13a81d1901690260c86b/xgrammar-0.1.25-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a1a6a638167d704a22a0c9670e2176104c38e38c351286a07a77143e22f9053", size = 8710998, upload-time = "2025-09-21T05:58:47.731Z" }, ] [[package]] @@ -6069,36 +5273,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/0f/93/14fde614cadb4ddf5e7cebf8918b7e8fac5ae7861c1875964f17e678205c/xxhash-3.6.0-cp312-cp312-win32.whl", hash = "sha256:50fc255f39428a27299c20e280d6193d8b63b8ef8028995323bf834a026b4fbb", size = 30617, upload-time = "2025-10-02T14:34:51.954Z" }, { url = "https://files.pythonhosted.org/packages/13/5d/0d125536cbe7565a83d06e43783389ecae0c0f2ed037b48ede185de477c0/xxhash-3.6.0-cp312-cp312-win_amd64.whl", hash = "sha256:c0f2ab8c715630565ab8991b536ecded9416d615538be8ecddce43ccf26cbc7c", size = 31534, upload-time = "2025-10-02T14:34:53.276Z" }, { url = "https://files.pythonhosted.org/packages/54/85/6ec269b0952ec7e36ba019125982cf11d91256a778c7c3f98a4c5043d283/xxhash-3.6.0-cp312-cp312-win_arm64.whl", hash = "sha256:eae5c13f3bc455a3bbb68bdc513912dc7356de7e2280363ea235f71f54064829", size = 27876, upload-time = "2025-10-02T14:34:54.371Z" }, - { url = "https://files.pythonhosted.org/packages/33/76/35d05267ac82f53ae9b0e554da7c5e281ee61f3cad44c743f0fcd354f211/xxhash-3.6.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:599e64ba7f67472481ceb6ee80fa3bd828fd61ba59fb11475572cc5ee52b89ec", size = 32738, upload-time = "2025-10-02T14:34:55.839Z" }, - { url = "https://files.pythonhosted.org/packages/31/a8/3fbce1cd96534a95e35d5120637bf29b0d7f5d8fa2f6374e31b4156dd419/xxhash-3.6.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:7d8b8aaa30fca4f16f0c84a5c8d7ddee0e25250ec2796c973775373257dde8f1", size = 30821, upload-time = "2025-10-02T14:34:57.219Z" }, - { url = "https://files.pythonhosted.org/packages/0c/ea/d387530ca7ecfa183cb358027f1833297c6ac6098223fd14f9782cd0015c/xxhash-3.6.0-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:d597acf8506d6e7101a4a44a5e428977a51c0fadbbfd3c39650cca9253f6e5a6", size = 194127, upload-time = "2025-10-02T14:34:59.21Z" }, - { url = "https://files.pythonhosted.org/packages/ba/0c/71435dcb99874b09a43b8d7c54071e600a7481e42b3e3ce1eb5226a5711a/xxhash-3.6.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:858dc935963a33bc33490128edc1c12b0c14d9c7ebaa4e387a7869ecc4f3e263", size = 212975, upload-time = "2025-10-02T14:35:00.816Z" }, - { url = "https://files.pythonhosted.org/packages/84/7a/c2b3d071e4bb4a90b7057228a99b10d51744878f4a8a6dd643c8bd897620/xxhash-3.6.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ba284920194615cb8edf73bf52236ce2e1664ccd4a38fdb543506413529cc546", size = 212241, upload-time = "2025-10-02T14:35:02.207Z" }, - { url = "https://files.pythonhosted.org/packages/81/5f/640b6eac0128e215f177df99eadcd0f1b7c42c274ab6a394a05059694c5a/xxhash-3.6.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:4b54219177f6c6674d5378bd862c6aedf64725f70dd29c472eaae154df1a2e89", size = 445471, upload-time = "2025-10-02T14:35:03.61Z" }, - { url = "https://files.pythonhosted.org/packages/5e/1e/3c3d3ef071b051cc3abbe3721ffb8365033a172613c04af2da89d5548a87/xxhash-3.6.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:42c36dd7dbad2f5238950c377fcbf6811b1cdb1c444fab447960030cea60504d", size = 193936, upload-time = "2025-10-02T14:35:05.013Z" }, - { url = "https://files.pythonhosted.org/packages/2c/bd/4a5f68381939219abfe1c22a9e3a5854a4f6f6f3c4983a87d255f21f2e5d/xxhash-3.6.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f22927652cba98c44639ffdc7aaf35828dccf679b10b31c4ad72a5b530a18eb7", size = 210440, upload-time = "2025-10-02T14:35:06.239Z" }, - { url = "https://files.pythonhosted.org/packages/eb/37/b80fe3d5cfb9faff01a02121a0f4d565eb7237e9e5fc66e73017e74dcd36/xxhash-3.6.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:b45fad44d9c5c119e9c6fbf2e1c656a46dc68e280275007bbfd3d572b21426db", size = 197990, upload-time = "2025-10-02T14:35:07.735Z" }, - { url = "https://files.pythonhosted.org/packages/d7/fd/2c0a00c97b9e18f72e1f240ad4e8f8a90fd9d408289ba9c7c495ed7dc05c/xxhash-3.6.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:6f2580ffab1a8b68ef2b901cde7e55fa8da5e4be0977c68f78fc80f3c143de42", size = 210689, upload-time = "2025-10-02T14:35:09.438Z" }, - { url = "https://files.pythonhosted.org/packages/93/86/5dd8076a926b9a95db3206aba20d89a7fc14dd5aac16e5c4de4b56033140/xxhash-3.6.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:40c391dd3cd041ebc3ffe6f2c862f402e306eb571422e0aa918d8070ba31da11", size = 414068, upload-time = "2025-10-02T14:35:11.162Z" }, - { url = "https://files.pythonhosted.org/packages/af/3c/0bb129170ee8f3650f08e993baee550a09593462a5cddd8e44d0011102b1/xxhash-3.6.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f205badabde7aafd1a31e8ca2a3e5a763107a71c397c4481d6a804eb5063d8bd", size = 191495, upload-time = "2025-10-02T14:35:12.971Z" }, - { url = "https://files.pythonhosted.org/packages/e9/3a/6797e0114c21d1725e2577508e24006fd7ff1d8c0c502d3b52e45c1771d8/xxhash-3.6.0-cp313-cp313-win32.whl", hash = "sha256:2577b276e060b73b73a53042ea5bd5203d3e6347ce0d09f98500f418a9fcf799", size = 30620, upload-time = "2025-10-02T14:35:14.129Z" }, - { url = "https://files.pythonhosted.org/packages/86/15/9bc32671e9a38b413a76d24722a2bf8784a132c043063a8f5152d390b0f9/xxhash-3.6.0-cp313-cp313-win_amd64.whl", hash = "sha256:757320d45d2fbcce8f30c42a6b2f47862967aea7bf458b9625b4bbe7ee390392", size = 31542, upload-time = "2025-10-02T14:35:15.21Z" }, - { url = "https://files.pythonhosted.org/packages/39/c5/cc01e4f6188656e56112d6a8e0dfe298a16934b8c47a247236549a3f7695/xxhash-3.6.0-cp313-cp313-win_arm64.whl", hash = "sha256:457b8f85dec5825eed7b69c11ae86834a018b8e3df5e77783c999663da2f96d6", size = 27880, upload-time = "2025-10-02T14:35:16.315Z" }, - { url = "https://files.pythonhosted.org/packages/f3/30/25e5321c8732759e930c555176d37e24ab84365482d257c3b16362235212/xxhash-3.6.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:a42e633d75cdad6d625434e3468126c73f13f7584545a9cf34e883aa1710e702", size = 32956, upload-time = "2025-10-02T14:35:17.413Z" }, - { url = "https://files.pythonhosted.org/packages/9f/3c/0573299560d7d9f8ab1838f1efc021a280b5ae5ae2e849034ef3dee18810/xxhash-3.6.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:568a6d743219e717b07b4e03b0a828ce593833e498c3b64752e0f5df6bfe84db", size = 31072, upload-time = "2025-10-02T14:35:18.844Z" }, - { url = "https://files.pythonhosted.org/packages/7a/1c/52d83a06e417cd9d4137722693424885cc9878249beb3a7c829e74bf7ce9/xxhash-3.6.0-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:bec91b562d8012dae276af8025a55811b875baace6af510412a5e58e3121bc54", size = 196409, upload-time = "2025-10-02T14:35:20.31Z" }, - { url = "https://files.pythonhosted.org/packages/e3/8e/c6d158d12a79bbd0b878f8355432075fc82759e356ab5a111463422a239b/xxhash-3.6.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:78e7f2f4c521c30ad5e786fdd6bae89d47a32672a80195467b5de0480aa97b1f", size = 215736, upload-time = "2025-10-02T14:35:21.616Z" }, - { url = "https://files.pythonhosted.org/packages/bc/68/c4c80614716345d55071a396cf03d06e34b5f4917a467faf43083c995155/xxhash-3.6.0-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:3ed0df1b11a79856df5ffcab572cbd6b9627034c1c748c5566fa79df9048a7c5", size = 214833, upload-time = "2025-10-02T14:35:23.32Z" }, - { url = "https://files.pythonhosted.org/packages/7e/e9/ae27c8ffec8b953efa84c7c4a6c6802c263d587b9fc0d6e7cea64e08c3af/xxhash-3.6.0-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:0e4edbfc7d420925b0dd5e792478ed393d6e75ff8fc219a6546fb446b6a417b1", size = 448348, upload-time = "2025-10-02T14:35:25.111Z" }, - { url = "https://files.pythonhosted.org/packages/d7/6b/33e21afb1b5b3f46b74b6bd1913639066af218d704cc0941404ca717fc57/xxhash-3.6.0-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fba27a198363a7ef87f8c0f6b171ec36b674fe9053742c58dd7e3201c1ab30ee", size = 196070, upload-time = "2025-10-02T14:35:26.586Z" }, - { url = "https://files.pythonhosted.org/packages/96/b6/fcabd337bc5fa624e7203aa0fa7d0c49eed22f72e93229431752bddc83d9/xxhash-3.6.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:794fe9145fe60191c6532fa95063765529770edcdd67b3d537793e8004cabbfd", size = 212907, upload-time = "2025-10-02T14:35:28.087Z" }, - { url = "https://files.pythonhosted.org/packages/4b/d3/9ee6160e644d660fcf176c5825e61411c7f62648728f69c79ba237250143/xxhash-3.6.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:6105ef7e62b5ac73a837778efc331a591d8442f8ef5c7e102376506cb4ae2729", size = 200839, upload-time = "2025-10-02T14:35:29.857Z" }, - { url = "https://files.pythonhosted.org/packages/0d/98/e8de5baa5109394baf5118f5e72ab21a86387c4f89b0e77ef3e2f6b0327b/xxhash-3.6.0-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:f01375c0e55395b814a679b3eea205db7919ac2af213f4a6682e01220e5fe292", size = 213304, upload-time = "2025-10-02T14:35:31.222Z" }, - { url = "https://files.pythonhosted.org/packages/7b/1d/71056535dec5c3177eeb53e38e3d367dd1d16e024e63b1cee208d572a033/xxhash-3.6.0-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:d706dca2d24d834a4661619dcacf51a75c16d65985718d6a7d73c1eeeb903ddf", size = 416930, upload-time = "2025-10-02T14:35:32.517Z" }, - { url = "https://files.pythonhosted.org/packages/dc/6c/5cbde9de2cd967c322e651c65c543700b19e7ae3e0aae8ece3469bf9683d/xxhash-3.6.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:5f059d9faeacd49c0215d66f4056e1326c80503f51a1532ca336a385edadd033", size = 193787, upload-time = "2025-10-02T14:35:33.827Z" }, - { url = "https://files.pythonhosted.org/packages/19/fa/0172e350361d61febcea941b0cc541d6e6c8d65d153e85f850a7b256ff8a/xxhash-3.6.0-cp313-cp313t-win32.whl", hash = "sha256:1244460adc3a9be84731d72b8e80625788e5815b68da3da8b83f78115a40a7ec", size = 30916, upload-time = "2025-10-02T14:35:35.107Z" }, - { url = "https://files.pythonhosted.org/packages/ad/e6/e8cf858a2b19d6d45820f072eff1bea413910592ff17157cabc5f1227a16/xxhash-3.6.0-cp313-cp313t-win_amd64.whl", hash = "sha256:b1e420ef35c503869c4064f4a2f2b08ad6431ab7b229a05cce39d74268bca6b8", size = 31799, upload-time = "2025-10-02T14:35:36.165Z" }, - { url = "https://files.pythonhosted.org/packages/56/15/064b197e855bfb7b343210e82490ae672f8bc7cdf3ddb02e92f64304ee8a/xxhash-3.6.0-cp313-cp313t-win_arm64.whl", hash = "sha256:ec44b73a4220623235f67a996c862049f375df3b1052d9899f40a6382c32d746", size = 28044, upload-time = "2025-10-02T14:35:37.195Z" }, ] [[package]] @@ -6128,38 +5302,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/e7/3d/68bf18d50dc674b942daec86a9ba922d3113d8399b0e52b9897530442da2/yarl-1.22.0-cp312-cp312-win32.whl", hash = "sha256:70dfd4f241c04bd9239d53b17f11e6ab672b9f1420364af63e8531198e3f5fe8", size = 81589, upload-time = "2025-10-06T14:10:09.254Z" }, { url = "https://files.pythonhosted.org/packages/c8/9a/6ad1a9b37c2f72874f93e691b2e7ecb6137fb2b899983125db4204e47575/yarl-1.22.0-cp312-cp312-win_amd64.whl", hash = "sha256:8884d8b332a5e9b88e23f60bb166890009429391864c685e17bd73a9eda9105c", size = 87213, upload-time = "2025-10-06T14:10:11.369Z" }, { url = "https://files.pythonhosted.org/packages/44/c5/c21b562d1680a77634d748e30c653c3ca918beb35555cff24986fff54598/yarl-1.22.0-cp312-cp312-win_arm64.whl", hash = "sha256:ea70f61a47f3cc93bdf8b2f368ed359ef02a01ca6393916bc8ff877427181e74", size = 81330, upload-time = "2025-10-06T14:10:13.112Z" }, - { url = "https://files.pythonhosted.org/packages/ea/f3/d67de7260456ee105dc1d162d43a019ecad6b91e2f51809d6cddaa56690e/yarl-1.22.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:8dee9c25c74997f6a750cd317b8ca63545169c098faee42c84aa5e506c819b53", size = 139980, upload-time = "2025-10-06T14:10:14.601Z" }, - { url = "https://files.pythonhosted.org/packages/01/88/04d98af0b47e0ef42597b9b28863b9060bb515524da0a65d5f4db160b2d5/yarl-1.22.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:01e73b85a5434f89fc4fe27dcda2aff08ddf35e4d47bbbea3bdcd25321af538a", size = 93424, upload-time = "2025-10-06T14:10:16.115Z" }, - { url = "https://files.pythonhosted.org/packages/18/91/3274b215fd8442a03975ce6bee5fe6aa57a8326b29b9d3d56234a1dca244/yarl-1.22.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:22965c2af250d20c873cdbee8ff958fb809940aeb2e74ba5f20aaf6b7ac8c70c", size = 93821, upload-time = "2025-10-06T14:10:17.993Z" }, - { url = "https://files.pythonhosted.org/packages/61/3a/caf4e25036db0f2da4ca22a353dfeb3c9d3c95d2761ebe9b14df8fc16eb0/yarl-1.22.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b4f15793aa49793ec8d1c708ab7f9eded1aa72edc5174cae703651555ed1b601", size = 373243, upload-time = "2025-10-06T14:10:19.44Z" }, - { url = "https://files.pythonhosted.org/packages/6e/9e/51a77ac7516e8e7803b06e01f74e78649c24ee1021eca3d6a739cb6ea49c/yarl-1.22.0-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:e5542339dcf2747135c5c85f68680353d5cb9ffd741c0f2e8d832d054d41f35a", size = 342361, upload-time = "2025-10-06T14:10:21.124Z" }, - { url = "https://files.pythonhosted.org/packages/d4/f8/33b92454789dde8407f156c00303e9a891f1f51a0330b0fad7c909f87692/yarl-1.22.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:5c401e05ad47a75869c3ab3e35137f8468b846770587e70d71e11de797d113df", size = 387036, upload-time = "2025-10-06T14:10:22.902Z" }, - { url = "https://files.pythonhosted.org/packages/d9/9a/c5db84ea024f76838220280f732970aa4ee154015d7f5c1bfb60a267af6f/yarl-1.22.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:243dda95d901c733f5b59214d28b0120893d91777cb8aa043e6ef059d3cddfe2", size = 397671, upload-time = "2025-10-06T14:10:24.523Z" }, - { url = "https://files.pythonhosted.org/packages/11/c9/cd8538dc2e7727095e0c1d867bad1e40c98f37763e6d995c1939f5fdc7b1/yarl-1.22.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bec03d0d388060058f5d291a813f21c011041938a441c593374da6077fe21b1b", size = 377059, upload-time = "2025-10-06T14:10:26.406Z" }, - { url = "https://files.pythonhosted.org/packages/a1/b9/ab437b261702ced75122ed78a876a6dec0a1b0f5e17a4ac7a9a2482d8abe/yarl-1.22.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:b0748275abb8c1e1e09301ee3cf90c8a99678a4e92e4373705f2a2570d581273", size = 365356, upload-time = "2025-10-06T14:10:28.461Z" }, - { url = "https://files.pythonhosted.org/packages/b2/9d/8e1ae6d1d008a9567877b08f0ce4077a29974c04c062dabdb923ed98e6fe/yarl-1.22.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:47fdb18187e2a4e18fda2c25c05d8251a9e4a521edaed757fef033e7d8498d9a", size = 361331, upload-time = "2025-10-06T14:10:30.541Z" }, - { url = "https://files.pythonhosted.org/packages/ca/5a/09b7be3905962f145b73beb468cdd53db8aa171cf18c80400a54c5b82846/yarl-1.22.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:c7044802eec4524fde550afc28edda0dd5784c4c45f0be151a2d3ba017daca7d", size = 382590, upload-time = "2025-10-06T14:10:33.352Z" }, - { url = "https://files.pythonhosted.org/packages/aa/7f/59ec509abf90eda5048b0bc3e2d7b5099dffdb3e6b127019895ab9d5ef44/yarl-1.22.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:139718f35149ff544caba20fce6e8a2f71f1e39b92c700d8438a0b1d2a631a02", size = 385316, upload-time = "2025-10-06T14:10:35.034Z" }, - { url = "https://files.pythonhosted.org/packages/e5/84/891158426bc8036bfdfd862fabd0e0fa25df4176ec793e447f4b85cf1be4/yarl-1.22.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e1b51bebd221006d3d2f95fbe124b22b247136647ae5dcc8c7acafba66e5ee67", size = 374431, upload-time = "2025-10-06T14:10:37.76Z" }, - { url = "https://files.pythonhosted.org/packages/bb/49/03da1580665baa8bef5e8ed34c6df2c2aca0a2f28bf397ed238cc1bbc6f2/yarl-1.22.0-cp313-cp313-win32.whl", hash = "sha256:d3e32536234a95f513bd374e93d717cf6b2231a791758de6c509e3653f234c95", size = 81555, upload-time = "2025-10-06T14:10:39.649Z" }, - { url = "https://files.pythonhosted.org/packages/9a/ee/450914ae11b419eadd067c6183ae08381cfdfcb9798b90b2b713bbebddda/yarl-1.22.0-cp313-cp313-win_amd64.whl", hash = "sha256:47743b82b76d89a1d20b83e60d5c20314cbd5ba2befc9cda8f28300c4a08ed4d", size = 86965, upload-time = "2025-10-06T14:10:41.313Z" }, - { url = "https://files.pythonhosted.org/packages/98/4d/264a01eae03b6cf629ad69bae94e3b0e5344741e929073678e84bf7a3e3b/yarl-1.22.0-cp313-cp313-win_arm64.whl", hash = "sha256:5d0fcda9608875f7d052eff120c7a5da474a6796fe4d83e152e0e4d42f6d1a9b", size = 81205, upload-time = "2025-10-06T14:10:43.167Z" }, - { url = "https://files.pythonhosted.org/packages/88/fc/6908f062a2f77b5f9f6d69cecb1747260831ff206adcbc5b510aff88df91/yarl-1.22.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:719ae08b6972befcba4310e49edb1161a88cdd331e3a694b84466bd938a6ab10", size = 146209, upload-time = "2025-10-06T14:10:44.643Z" }, - { url = "https://files.pythonhosted.org/packages/65/47/76594ae8eab26210b4867be6f49129861ad33da1f1ebdf7051e98492bf62/yarl-1.22.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:47d8a5c446df1c4db9d21b49619ffdba90e77c89ec6e283f453856c74b50b9e3", size = 95966, upload-time = "2025-10-06T14:10:46.554Z" }, - { url = "https://files.pythonhosted.org/packages/ab/ce/05e9828a49271ba6b5b038b15b3934e996980dd78abdfeb52a04cfb9467e/yarl-1.22.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:cfebc0ac8333520d2d0423cbbe43ae43c8838862ddb898f5ca68565e395516e9", size = 97312, upload-time = "2025-10-06T14:10:48.007Z" }, - { url = "https://files.pythonhosted.org/packages/d1/c5/7dffad5e4f2265b29c9d7ec869c369e4223166e4f9206fc2243ee9eea727/yarl-1.22.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4398557cbf484207df000309235979c79c4356518fd5c99158c7d38203c4da4f", size = 361967, upload-time = "2025-10-06T14:10:49.997Z" }, - { url = "https://files.pythonhosted.org/packages/50/b2/375b933c93a54bff7fc041e1a6ad2c0f6f733ffb0c6e642ce56ee3b39970/yarl-1.22.0-cp313-cp313t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:2ca6fd72a8cd803be290d42f2dec5cdcd5299eeb93c2d929bf060ad9efaf5de0", size = 323949, upload-time = "2025-10-06T14:10:52.004Z" }, - { url = "https://files.pythonhosted.org/packages/66/50/bfc2a29a1d78644c5a7220ce2f304f38248dc94124a326794e677634b6cf/yarl-1.22.0-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ca1f59c4e1ab6e72f0a23c13fca5430f889634166be85dbf1013683e49e3278e", size = 361818, upload-time = "2025-10-06T14:10:54.078Z" }, - { url = "https://files.pythonhosted.org/packages/46/96/f3941a46af7d5d0f0498f86d71275696800ddcdd20426298e572b19b91ff/yarl-1.22.0-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:6c5010a52015e7c70f86eb967db0f37f3c8bd503a695a49f8d45700144667708", size = 372626, upload-time = "2025-10-06T14:10:55.767Z" }, - { url = "https://files.pythonhosted.org/packages/c1/42/8b27c83bb875cd89448e42cd627e0fb971fa1675c9ec546393d18826cb50/yarl-1.22.0-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9d7672ecf7557476642c88497c2f8d8542f8e36596e928e9bcba0e42e1e7d71f", size = 341129, upload-time = "2025-10-06T14:10:57.985Z" }, - { url = "https://files.pythonhosted.org/packages/49/36/99ca3122201b382a3cf7cc937b95235b0ac944f7e9f2d5331d50821ed352/yarl-1.22.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:3b7c88eeef021579d600e50363e0b6ee4f7f6f728cd3486b9d0f3ee7b946398d", size = 346776, upload-time = "2025-10-06T14:10:59.633Z" }, - { url = "https://files.pythonhosted.org/packages/85/b4/47328bf996acd01a4c16ef9dcd2f59c969f495073616586f78cd5f2efb99/yarl-1.22.0-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:f4afb5c34f2c6fecdcc182dfcfc6af6cccf1aa923eed4d6a12e9d96904e1a0d8", size = 334879, upload-time = "2025-10-06T14:11:01.454Z" }, - { url = "https://files.pythonhosted.org/packages/c2/ad/b77d7b3f14a4283bffb8e92c6026496f6de49751c2f97d4352242bba3990/yarl-1.22.0-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:59c189e3e99a59cf8d83cbb31d4db02d66cda5a1a4374e8a012b51255341abf5", size = 350996, upload-time = "2025-10-06T14:11:03.452Z" }, - { url = "https://files.pythonhosted.org/packages/81/c8/06e1d69295792ba54d556f06686cbd6a7ce39c22307100e3fb4a2c0b0a1d/yarl-1.22.0-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:5a3bf7f62a289fa90f1990422dc8dff5a458469ea71d1624585ec3a4c8d6960f", size = 356047, upload-time = "2025-10-06T14:11:05.115Z" }, - { url = "https://files.pythonhosted.org/packages/4b/b8/4c0e9e9f597074b208d18cef227d83aac36184bfbc6eab204ea55783dbc5/yarl-1.22.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:de6b9a04c606978fdfe72666fa216ffcf2d1a9f6a381058d4378f8d7b1e5de62", size = 342947, upload-time = "2025-10-06T14:11:08.137Z" }, - { url = "https://files.pythonhosted.org/packages/e0/e5/11f140a58bf4c6ad7aca69a892bff0ee638c31bea4206748fc0df4ebcb3a/yarl-1.22.0-cp313-cp313t-win32.whl", hash = "sha256:1834bb90991cc2999f10f97f5f01317f99b143284766d197e43cd5b45eb18d03", size = 86943, upload-time = "2025-10-06T14:11:10.284Z" }, - { url = "https://files.pythonhosted.org/packages/31/74/8b74bae38ed7fe6793d0c15a0c8207bbb819cf287788459e5ed230996cdd/yarl-1.22.0-cp313-cp313t-win_amd64.whl", hash = "sha256:ff86011bd159a9d2dfc89c34cfd8aff12875980e3bd6a39ff097887520e60249", size = 93715, upload-time = "2025-10-06T14:11:11.739Z" }, - { url = "https://files.pythonhosted.org/packages/69/66/991858aa4b5892d57aef7ee1ba6b4d01ec3b7eb3060795d34090a3ca3278/yarl-1.22.0-cp313-cp313t-win_arm64.whl", hash = "sha256:7861058d0582b847bc4e3a4a4c46828a410bca738673f35a29ba3ca5db0b473b", size = 83857, upload-time = "2025-10-06T14:11:13.586Z" }, { url = "https://files.pythonhosted.org/packages/73/ae/b48f95715333080afb75a4504487cbe142cae1268afc482d06692d605ae6/yarl-1.22.0-py3-none-any.whl", hash = "sha256:1380560bdba02b6b6c90de54133c81c9f2a453dee9912fe58c1dcced1edb7cff", size = 46814, upload-time = "2025-10-06T14:12:53.872Z" }, ] From 7153cc1afa574902dde95e9c60d23b2efbe5cfb1 Mon Sep 17 00:00:00 2001 From: Fin Griffin Date: Mon, 13 Apr 2026 16:36:50 +0100 Subject: [PATCH 19/68] feat: migrate back to vLLM --- sweep/infer.py | 150 ++++++++++++++++++++++--------------------------- 1 file changed, 68 insertions(+), 82 deletions(-) diff --git a/sweep/infer.py b/sweep/infer.py index b07a2ea..594cbc8 100644 --- a/sweep/infer.py +++ b/sweep/infer.py @@ -1,8 +1,7 @@ """Inference and test-loss script for a single fine-tuned checkpoint. -Loads the base model with LoRA adapter, runs greedy generation in batches -on the Bush test split, and computes token-weighted NLL loss over assistant -turns only. +Uses vLLM with a LoRA adapter for fast generation, then loads the model +via PyTorch/PEFT to compute token-weighted NLL loss over assistant turns. Outputs a single JSON object to stdout:: @@ -16,6 +15,7 @@ """ import argparse +import gc import json import os import sys @@ -26,21 +26,76 @@ from dotenv import load_dotenv from peft import PeftModel from transformers import AutoModelForCausalLM, AutoTokenizer +from vllm import LLM, SamplingParams +from vllm.lora.request import LoRARequest load_dotenv() BASE_MODEL = "meta-llama/Llama-3.1-8B-Instruct" DATASET = "AccelerateScience/bush-dataset" -MAX_NEW_TOKENS = 512 -GEN_BATCH_SIZE = 8 +MAX_NEW_TOKENS = 1024 +TEMPERATURE = 0.7 LOSS_BATCH_SIZE = 16 +# Must cover the largest lora_r in the sweep grid (32). +MAX_LORA_RANK = 32 def _log(msg: str) -> None: print(msg, file=sys.stderr, flush=True) -def _apply_template(tokenizer: Any, messages: list[dict[str, Any]], add_generation_prompt: bool) -> list[int]: +def generate_with_vllm( + checkpoint: str, + examples: list[dict[str, Any]], +) -> list[str]: + """Run generation with vLLM using a LoRA adapter. + + vLLM handles batching and padding internally via PagedAttention, + so no manual left-padding is required here. + + :param checkpoint: path to the LoRA adapter checkpoint directory. + :param examples: list of dataset examples from the test split. + :returns: list of generated response strings, one per example. + """ + _log(f"Loading vLLM engine with LoRA from {checkpoint}") + llm = LLM( + model=BASE_MODEL, + enable_lora=True, + max_model_len=4096, + dtype="bfloat16", + tensor_parallel_size=1, + max_lora_rank=MAX_LORA_RANK, + ) + + lora_request = LoRARequest("adapter", 1, checkpoint) + sampling_params = SamplingParams( + temperature=TEMPERATURE, + max_tokens=MAX_NEW_TOKENS, + ) + + prompts = [ + [{"role": m["role"], "content": m["content"]} for m in ex["messages"][:-1]] + for ex in examples + ] + + _log(f"Generating {len(prompts)} responses") + outputs = llm.chat(prompts, sampling_params, lora_request=lora_request) + responses = [output.outputs[0].text.strip() for output in outputs] + + # Free GPU memory before loading the PyTorch model for the loss pass. + del llm + gc.collect() + torch.cuda.empty_cache() + _log("vLLM engine unloaded") + + return responses + + +def _apply_template( + tokenizer: Any, + messages: list[dict[str, Any]], + add_generation_prompt: bool, +) -> list[int]: """Apply chat template and return a flat list of token IDs. :param tokenizer: tokenizer to apply the template with. @@ -60,11 +115,11 @@ def _apply_template(tokenizer: Any, messages: list[dict[str, Any]], add_generati return list(ids) -def load_model_and_tokenizer( +def load_pytorch_model( checkpoint: str, hf_token: str, ) -> tuple[Any, Any]: - """Load the base model with LoRA adapter from a checkpoint directory. + """Load the base model with LoRA adapter for the loss pass. :param checkpoint: path to the epoch checkpoint directory. :param hf_token: HuggingFace API token for private model access. @@ -78,7 +133,7 @@ def load_model_and_tokenizer( _log("Loading base model") base = AutoModelForCausalLM.from_pretrained( BASE_MODEL, - dtype=torch.bfloat16, + torch_dtype=torch.bfloat16, device_map="auto", token=hf_token, ) @@ -89,71 +144,6 @@ def load_model_and_tokenizer( return model, tokenizer -def batched_generate( - model: Any, - tokenizer: Any, - examples: list[dict[str, Any]], -) -> list[str]: - """Run greedy generation in batches over all examples. - - Prompts are left-padded so all sequences in a batch end at the same - position, which is required for correct batched generation. - - :param model: fine-tuned model (base + LoRA adapter). - :param tokenizer: tokenizer matching the base model. - :param examples: list of dataset examples from the test split. - :returns: list of generated response strings, one per example. - """ - responses: list[str] = [] - pad_id = tokenizer.pad_token_id - - for start in range(0, len(examples), GEN_BATCH_SIZE): - batch = examples[start : start + GEN_BATCH_SIZE] - - prompt_ids_list = [ - _apply_template(tokenizer, ex["messages"][:-1], add_generation_prompt=True) - for ex in batch - ] - max_len = max(len(ids) for ids in prompt_ids_list) - - # Left-pad so all prompts end at the same position - input_ids = torch.tensor( - [[pad_id] * (max_len - len(ids)) + ids for ids in prompt_ids_list], - dtype=torch.long, - ).to(model.device) - attention_mask = torch.tensor( - [[0] * (max_len - len(ids)) + [1] * len(ids) for ids in prompt_ids_list], - dtype=torch.long, - ).to(model.device) - - # Llama 3.1 chat template ends turns with <|eot_id|> (128009), not - # <|end_of_text|> (128001). Both must be EOS terminators or the model - # blows past the natural stopping point and loops. - eot_id = tokenizer.convert_tokens_to_ids("<|eot_id|>") - eos_ids = list({tokenizer.eos_token_id, eot_id}) - - with torch.no_grad(): - output_ids = model.generate( - input_ids=input_ids, - attention_mask=attention_mask, - max_new_tokens=MAX_NEW_TOKENS, - do_sample=False, - pad_token_id=tokenizer.eos_token_id, - eos_token_id=eos_ids, - ) - - for ids in output_ids: - new_ids = ids[max_len:] - responses.append(tokenizer.decode(new_ids, skip_special_tokens=True)) - - _log( - f" [gen] {min(start + GEN_BATCH_SIZE, len(examples))}" - f"/{len(examples)}" - ) - - return responses - - def batched_loss( model: Any, tokenizer: Any, @@ -231,7 +221,7 @@ def batched_loss( def main() -> None: - """Parse arguments, run batched inference and loss, print JSON. + """Parse arguments, run vLLM generation and loss pass, print JSON. :returns: None """ @@ -247,20 +237,16 @@ def main() -> None: os.environ.get("HF_TOKEN") or os.environ.get("HUGGINGFACE_TOKEN") or "" ) - model, tokenizer = load_model_and_tokenizer(args.checkpoint, hf_token) - _log(f"Loading test split from {DATASET}") ds = load_dataset(DATASET, split="test", token=hf_token) examples = list(ds) - _log( - f"Running inference on {len(examples)} examples " - f"(gen_batch={GEN_BATCH_SIZE}, loss_batch={LOSS_BATCH_SIZE})" - ) + _log(f"Loaded {len(examples)} examples") _log("Generation pass") - responses = batched_generate(model, tokenizer, examples) + responses = generate_with_vllm(args.checkpoint, examples) _log("Loss pass") + model, tokenizer = load_pytorch_model(args.checkpoint, hf_token) eval_loss = batched_loss(model, tokenizer, examples) completions: list[dict[str, Any]] = [ From e42203bd9489f56242862180553cfd77af7a3ac7 Mon Sep 17 00:00:00 2001 From: Fin Griffin Date: Mon, 13 Apr 2026 16:55:57 +0100 Subject: [PATCH 20/68] chore: remove vllm --- notebooks/results.parquet | Bin 0 -> 994171 bytes pyproject.toml | 1 - sweep/infer.py | 134 +++++++++++++++++++++----------------- 3 files changed, 75 insertions(+), 60 deletions(-) create mode 100644 notebooks/results.parquet diff --git a/notebooks/results.parquet b/notebooks/results.parquet new file mode 100644 index 0000000000000000000000000000000000000000..089eacfb02f484310f8394b8903dff6ab51070da GIT binary patch literal 994171 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 z�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 Jqw^xj#XvkA=ns~ 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�Y2bMEvfq_?ok6KRxU3 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πdzb1MfC~`yY?_u%)%l(Zw%-rIJx_{##oAR~mmPkovxzAyI$Mj3v+ z327aGULLlYfMrv0tEMqP*1+UKTNPELk+fAok�l?d4VEn2r@8P~Q?xrWl*G7Ryv~ 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∓s8jo!CRx@_1$ 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 z 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

vEu(y@Jvn8@W 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

VI1xECDzDwH>41rc7 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%0ARB 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�#l#MOEpxj~cYdNa878 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

4w>+3W+k(h-T@6t56$Q%|Fi)C>Qu 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%0ARh7P2V-@+5@fPgHE{I(8=S& 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 z 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 x>g=JDfTXa($-J!H+m>3_+L{_R2$8W8wg#=5.3.0", "transformers", "wandb>=0.25.1", - "vllm>=0.11.0 ; sys_platform == 'linux'", "bitsandbytes>=0.49.1 ; sys_platform == 'linux'", ] diff --git a/sweep/infer.py b/sweep/infer.py index 594cbc8..b1e5006 100644 --- a/sweep/infer.py +++ b/sweep/infer.py @@ -1,7 +1,7 @@ """Inference and test-loss script for a single fine-tuned checkpoint. -Uses vLLM with a LoRA adapter for fast generation, then loads the model -via PyTorch/PEFT to compute token-weighted NLL loss over assistant turns. +Loads the base model with LoRA adapter, runs batched generation on the Bush +test split, and computes token-weighted NLL loss over assistant turns only. Outputs a single JSON object to stdout:: @@ -15,7 +15,6 @@ """ import argparse -import gc import json import os import sys @@ -26,8 +25,6 @@ from dotenv import load_dotenv from peft import PeftModel from transformers import AutoModelForCausalLM, AutoTokenizer -from vllm import LLM, SamplingParams -from vllm.lora.request import LoRARequest load_dotenv() @@ -35,62 +32,14 @@ DATASET = "AccelerateScience/bush-dataset" MAX_NEW_TOKENS = 1024 TEMPERATURE = 0.7 +GEN_BATCH_SIZE = 8 LOSS_BATCH_SIZE = 16 -# Must cover the largest lora_r in the sweep grid (32). -MAX_LORA_RANK = 32 def _log(msg: str) -> None: print(msg, file=sys.stderr, flush=True) -def generate_with_vllm( - checkpoint: str, - examples: list[dict[str, Any]], -) -> list[str]: - """Run generation with vLLM using a LoRA adapter. - - vLLM handles batching and padding internally via PagedAttention, - so no manual left-padding is required here. - - :param checkpoint: path to the LoRA adapter checkpoint directory. - :param examples: list of dataset examples from the test split. - :returns: list of generated response strings, one per example. - """ - _log(f"Loading vLLM engine with LoRA from {checkpoint}") - llm = LLM( - model=BASE_MODEL, - enable_lora=True, - max_model_len=4096, - dtype="bfloat16", - tensor_parallel_size=1, - max_lora_rank=MAX_LORA_RANK, - ) - - lora_request = LoRARequest("adapter", 1, checkpoint) - sampling_params = SamplingParams( - temperature=TEMPERATURE, - max_tokens=MAX_NEW_TOKENS, - ) - - prompts = [ - [{"role": m["role"], "content": m["content"]} for m in ex["messages"][:-1]] - for ex in examples - ] - - _log(f"Generating {len(prompts)} responses") - outputs = llm.chat(prompts, sampling_params, lora_request=lora_request) - responses = [output.outputs[0].text.strip() for output in outputs] - - # Free GPU memory before loading the PyTorch model for the loss pass. - del llm - gc.collect() - torch.cuda.empty_cache() - _log("vLLM engine unloaded") - - return responses - - def _apply_template( tokenizer: Any, messages: list[dict[str, Any]], @@ -115,11 +64,11 @@ def _apply_template( return list(ids) -def load_pytorch_model( +def load_model_and_tokenizer( checkpoint: str, hf_token: str, ) -> tuple[Any, Any]: - """Load the base model with LoRA adapter for the loss pass. + """Load the base model with LoRA adapter from a checkpoint directory. :param checkpoint: path to the epoch checkpoint directory. :param hf_token: HuggingFace API token for private model access. @@ -144,6 +93,72 @@ def load_pytorch_model( return model, tokenizer +def batched_generate( + model: Any, + tokenizer: Any, + examples: list[dict[str, Any]], +) -> list[str]: + """Run batched generation over all examples. + + Prompts are left-padded so all sequences in a batch end at the same + position, which is required for correct batched generation. + + :param model: fine-tuned model (base + LoRA adapter). + :param tokenizer: tokenizer matching the base model. + :param examples: list of dataset examples from the test split. + :returns: list of generated response strings, one per example. + """ + responses: list[str] = [] + pad_id = tokenizer.pad_token_id + + # Llama 3.1 chat template ends turns with <|eot_id|> (128009), not + # <|end_of_text|> (128001). Both must be EOS terminators. + eot_id = tokenizer.convert_tokens_to_ids("<|eot_id|>") + eos_ids = list({tokenizer.eos_token_id, eot_id}) + + for start in range(0, len(examples), GEN_BATCH_SIZE): + batch = examples[start : start + GEN_BATCH_SIZE] + + prompt_ids_list = [ + _apply_template(tokenizer, ex["messages"][:-1], add_generation_prompt=True) + for ex in batch + ] + max_len = max(len(ids) for ids in prompt_ids_list) + + # Left-pad so all prompts end at the same position + input_ids = torch.tensor( + [[pad_id] * (max_len - len(ids)) + ids for ids in prompt_ids_list], + dtype=torch.long, + ).to(model.device) + attention_mask = torch.tensor( + [[0] * (max_len - len(ids)) + [1] * len(ids) for ids in prompt_ids_list], + dtype=torch.long, + ).to(model.device) + + with torch.no_grad(): + output_ids = model.generate( + input_ids=input_ids, + attention_mask=attention_mask, + max_new_tokens=MAX_NEW_TOKENS, + do_sample=True, + temperature=TEMPERATURE, + pad_token_id=tokenizer.eos_token_id, + eos_token_id=eos_ids, + ) + + for ids in output_ids: + new_ids = ids[max_len:] + responses.append(tokenizer.decode(new_ids, skip_special_tokens=True)) + + _log( + f" [gen] {min(start + GEN_BATCH_SIZE, len(examples))}" + f"/{len(examples)}" + ) + _log(f" [sample] {responses[-1][:200]!r}") + + return responses + + def batched_loss( model: Any, tokenizer: Any, @@ -221,7 +236,7 @@ def batched_loss( def main() -> None: - """Parse arguments, run vLLM generation and loss pass, print JSON. + """Parse arguments, run batched inference and loss, print JSON. :returns: None """ @@ -237,16 +252,17 @@ def main() -> None: os.environ.get("HF_TOKEN") or os.environ.get("HUGGINGFACE_TOKEN") or "" ) + model, tokenizer = load_model_and_tokenizer(args.checkpoint, hf_token) + _log(f"Loading test split from {DATASET}") ds = load_dataset(DATASET, split="test", token=hf_token) examples = list(ds) _log(f"Loaded {len(examples)} examples") _log("Generation pass") - responses = generate_with_vllm(args.checkpoint, examples) + responses = batched_generate(model, tokenizer, examples) _log("Loss pass") - model, tokenizer = load_pytorch_model(args.checkpoint, hf_token) eval_loss = batched_loss(model, tokenizer, examples) completions: list[dict[str, Any]] = [ From 7d0a2806af00ce4888726c4446e8f262d896a9c4 Mon Sep 17 00:00:00 2001 From: Fin Griffin Date: Tue, 14 Apr 2026 08:47:43 +0100 Subject: [PATCH 21/68] chore: gitignore pilot results parquet --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index b11f7fc..ef1c07f 100644 --- a/.gitignore +++ b/.gitignore @@ -55,3 +55,4 @@ htmlcov/ # Notebooks **.ipynb +notebooks/results.parquet \ No newline at end of file From 24fe3ac014576dc1f64cf3213728180fed197239 Mon Sep 17 00:00:00 2001 From: Fin Griffin Date: Tue, 14 Apr 2026 09:00:08 +0100 Subject: [PATCH 22/68] chore: add sweep results + logs to gitignore --- .gitignore | 6 +++++- notebooks/results.parquet | Bin 994171 -> 0 bytes 2 files changed, 5 insertions(+), 1 deletion(-) delete mode 100644 notebooks/results.parquet diff --git a/.gitignore b/.gitignore index ef1c07f..f449218 100644 --- a/.gitignore +++ b/.gitignore @@ -55,4 +55,8 @@ htmlcov/ # Notebooks **.ipynb -notebooks/results.parquet \ No newline at end of file + +# Sweep results +sweep/results.parquet +sweep/sweep.log +sweep/state.json \ No newline at end of file diff --git a/notebooks/results.parquet b/notebooks/results.parquet deleted file mode 100644 index 089eacfb02f484310f8394b8903dff6ab51070da..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 994171 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 z�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 Jqw^xj#XvkA=ns~ z!phEwI`{$e8LD^oiX7EmT-`^tv~B{WXwxn?P3>b#@2wir`U6+7_Dd$-`32& zmnre_g5vpZ$5T>UU0nw~lwmtyi|k`Z_OYHArT&ee3(^fGv!Cs8S_t`#{kPp0Y2XJN zxN#>q2C9AT^eE;t?utu|>}EgjW|8Uqzq0n?I%S57tGmol_+EN6h7*-jl!hre_l*?# zTwz}r?ZZ%ZhIm*&oP+Z`rJpFP24XIj+bp3DC_L%{^3pZX157ueI~-)gy?Ser=eS)y z6_YmC0rojuPsF=ZqQT(XuZKQoS`)l!RW(x^RWy0_24j12xWuYl@vVbza863kdDTXH zM$)&dVYjG?)RaAo#ichP_ugCsw7s4t&Cqs)JcXy4m=czKueI8N+tI5MCR~NG0-4q4lwVr zZ5)b12O_+0LOpi-@@Lab*wb*5$ah>93mGUNgk5%V>2!5U6?ZL|GnASWTiyyKn7C)L z6BS^Ga;&d%$R6F?W(zejyZETDZUn?HwHQXDiyA2?^rFXjN z_XHl|pQjeIwlR55-<(XSq4Ty%^;sLjDNbL=5?d5pP{HP1)**x+ZizKPtj{>2r()g0-??rTX z-#XhB7^Kq3W}3T+%9emOkduqOG1v(y&s8(E2oR$|bBdzn8I3UK91U~M+K#S@E177v z!&iR!B1Zc$5}A4$k8n)`k2JFX?yANG|A#nX6lK6C7r8RW^zz_sv~dVMvPC{UGHr(5 zIYttD)G0=P%9??XMYg-uu3}CQvw#?*ctriDMmcbmtcQ%sws<&=)Pvjs19I9tl&0Mc zVn82E?CZr>Ix!gMpB_f^E~5yPpl?DZR{B+{DDT5WQ!B7R6lebkVp8tETMXSs!6crG zW?=Q*1o9#%Kl;_mKxEh=VJ>Ne5?z$N40#N>8ZX8qYL=AqB`5P$Udrh{hsdZgjaL&W zea5{QEZtz0gSqse-jNB*(2y9BN?SYme4{tjNvn-~k?r_uWeHEs=ut zIO|5HbCqt0;^j4KY}nU=zgo79%h4q*)V!vwz70rb6~-{5AzpXeF_^2P8?AW!KlgG! zy@Rajuuw?6q35QY(F$p1gL0W$#h)?(cE(r4g>mTvYohJ-)Nh7)A@gi`c!>m~$PVf| zN7;W%b!`+$M*7w2Fe^9QO3zv;l*W6D&NTk;q#~M*x-^e9We=uF4~wQ;@hd6uidbYF zTk3kF!5e1m3bb`DSV&7aORd8xm+_DM%hqf&eBZKhe^NID-S_UHW?w>Oe* zytum4jkI+s8;?>Pqi1pNgY^4Vv{r8$DxuYnx*Cn4s5ZF4AVsmC-W5O&XYsOP@i$5S zrj*Kd(;aJ6#v|mHVeGxpJ~t%{X04h_>{qz$V*<5ZK6g%6vb?NDZqtju%trSxLaCVv zg*k;f>CCv|FX3fwpT&1WGXadb)~!X(H$6H&wKt8cvdl$hW*8gRd@pU@rYQud zG>3*J+g@;C3z$oMwR~L_?;~qU$-7T{klfcs^OIQ!B~0Js`8+S18~BZ~Fw%Ek<4Nxk zE{~tY8s)Ry6u%GEK;b)FIbwkLbJc97dxgFr+BXZClxh)h?H=aV#o*~{R{E9D?pYcq zVz2+vKeCm5ycJS-(Y`D?&}mET0~6<$T->~rQe#wsm+P)t@lc9r-|Kjb<|#eo?X**K zBKc9v^P{}Scw{I0udms-<{s(d>fR%H^Rf|#r+j72M67PBZ$2c7#Z9nveR?E_RIhH7 zFN5G|yl;*;I}JX2{gspgdbxyduE7ER)YE@Bo>Cs-0hCv6#gl@HODvI6+Ufyil_I$- z>=ut2=mS_JHqqWJh$i?F;3TRM<}{1auBhU3#h1-Si8=$4$;N^{f!)W~Adj@tX+3Su z${A554jGire7-ok1D|V_umcZmHNVKWL6HiCknZ1YbM}|_uhb$y*!I|Us72f5ECXdI zl)K%jSkc1=Vb&((+Vm0Ea)DpT)4v7cjS!mp1cvp;F=!j(_yFRt!W`iAvc zY4Z-q-(^s|juwv@gr2_xxu-o2n)XVuN(R&f8P=sHp48)(l|Mn`$l~kSZ!bvbOy%^<$?0bOAB(&buxF_w=?>Bm9e|g zAi#BKAb9e!3OkS^w|HOd`%%~eg+aYnoY%Toj#2V>* z=;NRIYbSCg-!)uZ-R~mUPo^<2vI?c`yBx4>Pr}fzeweev!Zt`1Z$(3w@XZ7|2S^ey z2#Ia9NEVN6rkXOfK>Na>?CG#|@546N`GM3E`Us6n=WKef!vr+|YD%%h;LMZ3mgD`z zrd!plFlFM^8k17_7WKP@+%MB;J>8^tVfg0eUL5jb;MJ7#3hij(B@*0LyIe0MX1hY- zm~1=Rp!^19qJxy}_*C1sP&l6YcZ%;n0PJhaI)KSnfLhn$Q*V6=3=qBs8=xyw9F@{7 z=iQSk;qIu+goP4qiI=a;g!fEGytDW~=O-CrilOE;gX7x4+nkxnjsx_=q_ojjyOzQF zU4C+|aeHzLJv%zxr>uU3zs?`<&f=IS_nw_xi9oWl06DkD`orM($hildA8xY6B$8Qb zeTq#=OzsVdZIL7=1Sofy^X*A=bPhjFe-9Y<$yLd0ZbJ%#2u7f{4$}`Css0^SUwB)S z3>W4b-||cv?WjsGDqPPXemFKvF(pIC+(GZ(ike|9h}^?z+kN~oy4h%cQaL$?FUmSx zlpWANr(9QA!VmSrSux}#a(M9KvhBd$w4n_Q905ur~KY- zD4oRFd?nh6p5#^sz1v8y=g|-;7ScGokCuDrWI8Ml>FEwKjFPiE`K_^_3N&{?pw;LX zC)P5bx04CY##ne1jSGrQy=FQ-?#sHxpaV+5D5T$oG02mDj8Chc6s(N5ZPbCGGVPOD zj+x%cI7zBMnI)!{I+74A6^0{@Wps=I=$F;++L!2DW@Q1_;IMM&&B#&)kA0h=P`sRF zdpi@XorBk^@ogAY$s2C4#mob<=HPPdAYANNDw@gp+|tN8_VYUCTj+VdE^D_oY;U9& z`Z%x7N;_(d?2r0W*A`s=xbfoZJ`RiC>s-64$*l(s#(rK-E?z4))i$fzB9o1)diAkJek!!#6ep!&IKL z*w$odmZLuqR=vD}5TWHyukyEt<*cuztgLX8viDhNUz^GICXA+7t$g^jO}f{n%@UUw zbmw604*kD#=j6B_u}KDL{JnB_Cacd`fpoh`Y_4^noTKm{bbNC?y{z8HGRdLvPwA|c zYOYsq>;Q0jdjTIdc;F8IZPQE!C9VzSljjRY1>|CR-UAl8p&VV~DVG>mpY})ycg9T} z*~Q*1Dj9yQ8^YPp0hZgwnSF4wJVvURUQ}v zv|2mZs9@m%!UqXZW#8&j|MEZhs26#)|6=``9{Vq>RQ`*3$iK@<)%;(bUwiys<9@{1 zQz#++y_JteqpDefyH+(9tqZ32R_tOkZ!bA{QzG|A|IBuy%#ep`IKY^ew`0F)0l2ycD4tS4kEt7^j?n(iVxViZ} zSB=M@m}x_rl8@h}38sLQ3MxyF521OAW+f{se>S$u4r}%DMmX(22RW?dr6!DE{s&)G zWwxFttd-@^JLW>Gzf2c7*{#YoxMy=$yBMW_ccCZV)gf#EI35e zyvm}_Q~)t&zGi+)l=mUFy@C0zKhK5@{J;XsK7$2NX!F3pi6xCD)d|8M!e)zAx{g6` z4r<@#lDpt56h=>kwQegj?}dd?b09LAV{Mqsy?dBB#soWBl&Xk0`(=NI2bsE%bmPQ?2JfngX#5a%ksK;~~W%|!gxuYd{NLKqICJVTU1p;5z@3(FQkyNT*i*8jyHT= zpi;n=)S$(Ap;?}U!vWtD2Bjg2i5EjHD$xjx8Co9??I#T}@!hI)6O#|V6YO}k#0vO> zy6OBf&5mrF#N5tV228US%JLLT0$BY3)jNXnCK+$Paj0Uo$_wKGPSdb>SPx-l-ipIW z7cXY(Q*Cmz6&%90b_W#l9rT776VWil(KN#%b|7(;#>XLyR{bsE4{G%MCGq%_c}3}s z9Hsp^JqtNHK@9P?rglOBnc9MKuyzQmew=GY*uX0VudvfhKO(?{qO96BRE5(m>G36f zaPKtnB{U#5AJoBC9ECVXF-~D|)12V?1jrNR9i<=IfIa$E$y3t%sRqLI((@{xImf#)^dV7QgmrJ(EM*2CKl9DOkLZb~B zqs~!YlR%f3r`xq4L&^8_iR~d&$sZ+RI%aE+?~JIQo70-48i9BX7>SlRN?$}kuHIIj zCvFw5-i<_)(qvEP`=tnUQ7nbFTG#>RI}6!%4%cPChNfW>1P* zmmKB&o!xOG@AmMeh}l~bm9vvCox*Z5*rNBjc{%=QPHU}VJ3fzEzJu==%huh_mUQSk zm!4*k5`MM>c5XRv8Q9IdyV*t!*Y$7xiXYs8xIP|<;=w5O3e&hbEu!UKEzkKoTQq~E zUbplCrt80GEX!HI@ICP#u~MVV%W)a3jl2K&FZeK=G}k$K#a@T{O5% zzdK{gKtl10v(DnT6PJ9Vt-vGJ1VJ$j1>h9Yp;w=68sLcq-*1kce6j`QeQigxTi&e| zOJu4+@SY!R)Uf!#jZGN|E;~~+q#ZwQviyNo^w!5BjiRlY{*ejOV2~q1n3Q9V3W^Rq zRjol<0VfkUvFwY-L(Z>qxAf4$+kExuwLTh}B%hS&XuR5IH_!)(G%}+{4c8>(%oLR= zfWryH^)N3UiX)^JbbYWSdw3_bISCM(ZogQONLy9Miq#nslyL62ktzRVvro+yF*i#z z!fe=@0xvWaAMKFT_&a+`tF~vC2030c6rdomf)aGuH@^ELHBtZhx&s%vL%O)m z+#%7|(3}Svp}G;dm?_+6P-ly@$e`R_@KKqZ30fU=7SuNh!!vBct*sq+w`rJ{^0W{y zl1>*5o%uw`)|}*4`8M`}=hF(#-I%FrI1tB|ndz~Q?Q(vcPt69{%gX=AR9PJ%r3{gd zFilBPi$b6Bb`sEfo~~xy`Y{>=hA1bSpw8-mN7%$n+;VX{Q9u+cZF#^^l!Fb-f+k289Bxc6ql-p3xGxB?g=WKdU0}u0@l9ls z5>!{zmiBPS73F1R^mBoV_BPVz`XrU(i(5MAujRL6tMuompu$SZ$%H#HpzPQ}+*of~ zl6%K?v^HaQ%U!B4CmfKUOXhcxp)hU>o-Le_4b*Ct14)iP^qCihX(O#J1h9!`PIuI{ zE0b?aK{XC}LPrp~A)f8|fyMR5c{Y=86?YR}S#YfJJf5sPUx3z?4yvQhe(|btn!GcM z;wT!?(S?PD`BB;|dwY2bSjrQdeEci8=&HuuVMjJUs6-6ZFSDYODKF*4O{SFq=i27F z;`1Uy+5dyJ9N%S^ba8d>!ubP1AB9HS(UV@_a$S;PszlKjay$D;w76W}TTWckR+Wqp zGmC>f|# z??D>(?RxXo^nfIW^$0^`TVkt+X&$0$jEK^e8!}Or@Xh=!R1(L_Xunn2UnZ=jt~5hy zH51>K;C)mb*+UeTGyCkmEWk%d|~Q+%=ks-d1`gnR;39w_pWjOZE2I9W;K_ znej|BK5`HHlU6sb{JQ?)>V94CZASdMkA5%%JEh;o(V9egww*pO(=DS!w+wR!XTx|) zSsN<6QXid5B%^^w$VmGD0Wzpuo(`W=JH_<_`NR~DdrJO2(d2Kb4R*CDfqa#CMjQ1U zVvTeR+oRj;WST&3RGO_|;as98?Ic|#O|0T>lRE2$tK_ql&I*W%YUv@pyVQ@m9y`5@t_s=C@1m7f@z~O~(K<*gT<2^e7f!6TYgvm6V zs!}J$HOj*>ao!XjFUu_U2jK*U@j<|ApC~@Uh(A@60L!}JnM9*n~Sjq(BJI_ z0Bj~^(k8w0L${>L_~c!q=%iVT4Np#W$M#SmX+a{Z zSMHigpN`@qFsdyr18W@sk9@2KMSMv-%<)8Q6590oppWjJWvau*THhgmHwqK=qov}L z4B6qKA|ISCu1cie^!y%t)#y?1sOMK}?v#HhqXV+BcXS)99K5=l#8(nOEq|@Y*XBy_ z%^wRR<`(-1@l2i;)KL1V%-leeN-2~{`)ct6fh<_;Q*(nMbt+Nm_Oxge3u!)GOBVhx zMM*+2R#$R)y#bWXIJfat*NELc>SD8YLb?>@k85 zDE~6Y?Zm8LFk+p(iH$Zzr7g4;cBoXw;@*7p=%~nIwrer_;wpr(@?ryzbVp%T;8)v! zw07XjcK}+tu)23hY46X}|30IHX1IyEGpVaw zo(#`ndcO*M5Rfn5H1ca)OJ)JJA!qs0>k8=kNeC1HZ=hAq$d^B8;0 zdOPrT_R}egohFZc6bf4EG+~=lz8iu)Pr~*7^0q^Hx)fzKKLPUWUn=pWG|GMbfI{H;4?f*H9ne$tolbd9)Y@^2iRoi& z1JLc$4SFi6)CQXCJImzsDdMtH@N299hn$nU(%yBfOJU-E9ls{F$0dR`*C_ELvOg>( zF(>s%XD2gP*p37WM=|kR@4c5X%O8F!$FWT^AS?yLK{qzCOCPnI7nKa3f+t_`&Hs7GxJ7-vjF+ z4>GI`4>H(ix7mD?BacR5Eqydf+lhDh?JMzhNaVwsy+1l9&MIDAVlYYC-3c zf0N~x=OKvG3to9KJvARAapXVHB`v6w&n>1CNyzX_Z{a)K^=_!B{H^I2>-yE8i@FXG zWzoEbL*(Qr984h)t#)VF=xTbdOzQCxzeVY#gSy2>KN_OTTSb;?tNS-nQV0b>UYGpH z98^oEA>bCzORn3xX!vrma#Y*_)7ZKZkje1hAwZ_Aa*>;bdb?HZBn;bBF!S9k6S|aO zTQF`Le@ITB!~(V}$pnoa?0JKUnVy@pbSjGsOZZ#jtN6GZ(x-`sCm|Z%7j`=zyawO- z{TR)M*cZFZ`Hn;oW44ruovq5r#9$kvEz6)9|5Mj?T;D5QT-{zNJ3~@)+o7U|AGvC~ zn^6f_l46_>dtMXABY= zmsir2R(c-WObCWGLXSC>i!#CB8Y>n^pkGk|VsF~Om*}szWo3%fR!AK|85IeVRvlE0 zp97}U*I?<{7OL~ApVrV# zs7;=okNYv*h>!Y~8pKS5{mL2%J6_>l1FrV`s^tD;$f8_>vf~EXWuS+;a?|)Ev3!%$c9SqCCWQcK0pL?@q@PX_ zVT0lvMeph8M6SFl4=OZ>`x9=XUZd#H40+-Z(imuBhjEVJ zIMiA?j!w(=s+_&-mPI}@j95Bd{qI4_AT9vaU(Y3Sbstj?q zl&tQ)e_OPGjs1ik*byD{DKS+W7xGp2vtz%5rQr+KwuuqRS2O~?;_oav%w{P3c97cT zb%~&4*VBE;CMfSz`{y6;D@umj4#r1FSFqLJpu7JwFORI%TwL92H4PsYdUy8mXeK*u zEBYqdj^wq=1dp}-o~(s~$eR0$`yLvBcb zr32hUgIyC!)p&#lZiF=PnQAq-=E?hT3U~S_vp+tB-|qo=v7)Mox(lP*1OB}@z<}?F znZtBLalAD9+ncCY`~G>Ix7}G$*ven!waVB&Xm3UbSWX?I{8rrt)OpTJmn-iNR4$(k zZG~=%!`3o*iQ3xAE8=)4=i7msTYOc0)nJSJuD>W8%r5Hn5ZNBR|3#tPSjTIqd8`;V zC3$@EdvRs_5$5aqCBY5{Di|)z*F1!w>bNQL8&h%5J7ZD`pPItoPybrC@xW9n*g*>( zSTc?e>buedTJo~Abvsd_9&X3WBOfz9NI&~j-tu%TO{82-6#c<4hA)T}R)+LpPFgSdBz8GmsHMNG>hB8*W zg3*mb8c(4?xkvIB>Yu)P?zDbF+}z)KE1DJAH0?#sI5OdF`E) z4+jsy4C3!PT6ZlN4ejEuf=pwOgJTy9pemJsKhKe^DeyX?DVuG5A8`GCm+iJYY~C@{ zSDP8|zoS3i++aI?c!G40x%Po+TzP>Qr^Bg@!(%b0V+ zBzk_D2;7Y%CZE9m87Y<=?2YENm6_1{g8UCU~V zR-@ziZHSt4OSPAiLXqSAz2jW5Z>IF8HIE_N;VhyXzK;4cRwpido$=!8zRt)>sc?aO ziLp3#1FexfPffP{a+3t)rIePw7!5m({zYh*m#nw7u2j93Y3exO5YE(MarS1qbuiJj zC@`K`Pftu1dma~~jpATGK{PeOiMkKCtWfF_8ISoC^=+WT1S zNkcOcVk>W4Nofjg>O;>wnD)bPz6{0|!ephbRw_f}Xqdj+*?DZ7{Jmle8+eKFAb)rJ z5k`9lqjPLO;2i-{il2tW(Apr5k!?3qO^)h5-O@#G#*0&flcz?P+v%wx&JKHYu!C|| z4UQ4F#AG{|m^F?59^$R%ox9Rc@dooKEg&gMcoGdlQ9OlWP;(Eo^7Nd)8MvkI_i=kR zyulm+bC7n$;C-ZBBhU(6K1A7?pv2u$a+o)(fqC;D+>(hAPy&rzC2pIBpK!Esf@gxVyg#vNV%jN>r1zUZvz6Fsr1dLRRJ zRzA_k{EAp#Pkl;KKhlgcVd7m64C=)-mU>__V6~WqDbU&k^&742G&bvUu)EWMS19*@ z&mzYiq+ZT-A9Gmp_)6AC{QSSNN^u>Rba8dNB)Tsr=g_qvnBWfF|AKm}uGFDBdMHO6 z){AS4Fn;|>7uyBujh~JeojjsQ#j$0GCiBzWv8aqkCTjuUIAas(#^K7{k0P@0*Ca6~ zM@$?}iISW&1aG$T!Q=G9U&Yt(!IXy-Q_GkhO9L{$PO*|4f3)}mNsb#sANSn6!tDlo z3`$vO`-7rnh*+5#6l#p<2Nsqd4>E9Syxg{%fNNzIeb2ZRVHc0TTV=PIVkG zBwJjvO1y7C+JTrpg&sUk#d6#rdMT4iGw7%F2oU%bn6#g69SY6!NefN_Tbxy$I~+41 zaioXQkLP3yl+p5cL!|(c1<8CleLq+{YLZ5D)cS-oS9w9AJrW(4DZEmGt7L#SS16Bb z@rqoA3f(}FZuvhcx^yZTW*>BC7Kt89j5~7(iCm{`-bIQ=hceZ5cqo6G&PeoQJXQA> zy>e9>9_9>KY*qC`Y-xlO?~Coy3hb z^4(eT+`IX5{=Tan-bJFS=;vgEZ`icK8P-*sbP|YSi}~2;#&G?2_$iGQ;jqDS{ByWw1|8fE|X0QK7fq#3$7s&2rxBb~+s6NzaLOS)KS>ufnU<55y5 zo|>{u!2W<06PN%Q07ItXA1EnIX)nh$sOsKvdyVS5nO<2wD>lT4{iu*`3L+<7AkXq;2hJ zQO=waF!@4RGmd^-sO++8Ob(V+BX%#xIqs5^_FcguWh}1Dk!QZW$D?j+NdB<&<4r8P zij^F~4R->xgEqNw6kTIjRA!vkz_X{ZlG4aFrrSoBoMw&62y0{$QMj#H-T4jQDT{C)x&nM!7 z)=9}+EPEG)}zYj1K#RkZERb+tK(XTfn_( zrQ!zLiUQu-`Ng-+4U1{Ri_xva=+L9eD=Rwx(q7n6uheJAj~^#|24N~crz|k55gF^s z$uHA4-*0=DO2$)lqBv}(g~#PmlR1rVD|~7iZP4?}m9ua<&wg@|*Pf2ur8!Z2u$fi? z@Iiom=gZDJS5krjV=JUaykfA;S(*LN6^C6kMUHzWvYxG4&y+2TGzi352{LS}GNcqN zc`(Ywk_r4Qy*>e|iF<}clKGiro}P@4=zqQTZen+V-UxSI>Z~8o|uGf5n>bw;!y2b=s+mPRr3ZrL9HG1~` z$}G)3cxUbx`zF+&fD9ug3k2C9MQx+`>#VU`MkSghs{ zi1=@12JI#D)G%)MNGy zGx<8zGp`4KLKOw~BlRvhA26!^N#%WlxbC~940ntgBa9#TypfmP*Q!Z(_c$-9Q#D_s zFIfdEG^+sMhQe`kGkb`Wt>;m+R*mgqOj6&4#>s9VCPnb##%2un=e#6ea}TQ;dOEK4 z-J61M{0FU($F!dpcc>?7P3AZ~eXYxuM>hs$ zo46TH6uj1iZX9IlmDy};s)q%1?@j@!KKzGY^+o=F&|hBU8?@wlOyl_DDnYK#dN7PX8y4G6p4SFTkl)K|il zw*2GBnO+yy#xuR5#|9TJV{ZTbZZ)pj-U^pdAg#WoW99rFXJ^&?`T`{EFMy9Yb$Zx|b!(hsF7oZ6WAF#h zt2G`^j_pC5lP76GVA1V_`_hSfS-7;Q`?FUezQqB<#dYR@L3zZGJx275r`Lcfs#4I2(RneFYR0YHZUoh)KX4Jf1WHth zt~bIy4rDvA&Hz(kzj#c~ty)mJXp_N&ZMOlL@%QQJ(pd3(jLM%Whx`utrU@4WFLt^Q z0UyXr5ZFYp6*mH6qbV`b9YG~VN`g0hRU6(H$aU6Bc$hIIKK^*AfrNE>2@hSez;$N;T4u<`8C2YQwD4l+3W?$j()g9J(pKnxH@CK~|abb{Aev!B{>wusk(Bg-+dVr3lWNfoiikB8!aVIRb<2ThB;t&T1c zd~JHCsmFcC9~=<_3o@9+sQy?EuyyS|PA1i_6X_;e3GTC);)z8)L^$22IH|zLw@cA; zJe4WzpA$a1V_36hFn^U46Q%{ur%lNt=g(4;(82zvFHN@FB^4NvlZ=ktd<5NZ6g!MP zYKk5wF0s+%v`M(vL7OTXuV#db5ypzI*m(rqu@C4PViq)09GAM$9drg7u|MLF;fHbC zLf^PW6lO6>GCSTwn*_fUL9G2GvE!|}9UQ09zlwS)YAg}B{-lrD%@ z+X(}ITd^n5qgK^)WJkPuk1KzZ#~?Dc1M~6ozUUX!VPc~sS0&gMDM>gP!fMP9q*PuY zse284m1eAFcLJ&{aJq00Z-Bu{ae_R|LLVAvg~T7WP>h>NPVCJBg#-&XKS*g;1Pw7OLG@g zUI!)hAqlk3k#9t2Deo|<=F6DWV_@Ve?IUdV95;*Wn|w25Ns84X7TDmeX7l$!2qSXh zTzcr&Z097~I4M%etd)wPACfBLHVef-U?)sqaTCNYYve0t{Yo>=`LJX`g#{1n)}lAX z?YN0ydFE^Ihr3F?VIkYvJ|%Ao?qto8)eI|cb@u*#5j+3S*BLucwnr4{;_6l;Z8@@? zknxLj7}Vv3No5_$uyPR|;$pS_MMlEjo!fE%|FSn2J zVdI0ZBAbEiWO<^bvO9opIfWrbK4T(FqL2*~>(WB2M|Fv`C=HF%P+cqnr9u6vaw!d} zuR0FR*Ofpb>JV{XB2U-#A$Wm8g(jAmL?5%57!QX|aCclzH3>rVJhK-bVd6b4X)VDF zgF~k8CFfgaan6O&v)icYl9!k(5-}0;g=gDXiYm2KbxcThppHb{D074DbC>aCiYgYf z1JVQ|)xlVoQ-KgX2!lkiHc5GW!0}?{*wy1_Vs$&e(@AJ*JH$qdGD981^a!_mjNp6p z0%-4paMv9TBZ4~oQ_#?MXA89Be{`g4u!m+u$C{)xJ}yVjxXQbpF^|GqEReB_!W$ zz=k59)0INiJ|BZ+dR7K-y+$<|rz`p)^(m($TjdYxRLv(|L{*~FjuzGvJe%cl$YMy6 zYmH1%j&y@cxbNUks}p{UJ-MO>w@V(we5tDv0P2G})*O&42D0(;KOBw`;%J5%hXE>< zBcw$eh6{<@B=NGt=r;q!4q$r5(=~pv%Yw%vAQh%Ebj{QNmnV>ZKaDpp60MS^(^}2~ z={5WbAO%0htK`1&qGUKVQJe(hW{pAPNL^{}hk-;diZP~s>G*@KE)GN>Vs9;DE5}CWMQxlH6^Z%Zui5xo zVZ6Ayh0)dS?K31@16JE$R1+$Hh-0&jZ@->lXn_2T;^D$kE?#(cm}rcAhm zyk?BsY{v<5eiBSWMu<-g@R$BnUXw>%i8R5&r^1#@_YVIYFOF{W$m6ZN6eGLnWZdIV zxHDD52<%I0hD591k=NI3ZlQ6+eDfW7o_Hf_9+e8^T%1Vvda_?g{4+w|aLrQWzKzmf zT-~Ge+S0b5{HD%%*GRBmMhv0d>2%g12h8-d31Qnv*hVyAtiQDpo>_ON%fTVonZ;^z zrkba5VG!zTR-!!AD_(sNt?39OhkGviR}ZC^MmN{<@y;v^pYKK~SY@8|TLUZm#<8=xdZ2^{=jh(@ctR3^dbIw(3X>j@et zual$VwJjdIJkYx;mC^J>nme?pWpo+S^dm_T)wyV`FVzeHoUk3F@g}*rjINb{_fPOb zN%WwZYDOf$emO4kz<0NuKYBZT8`)pi|(}IdAJ59S+gE2JHwa15<6P@!BCd z8fHbG7Sk9VrA=VzN}X)1l7BVOwb+r{G*@Aus|$*s`pJJur>#?Y7v92{Tz;EM+k(cv zURb$r~j4b}C;KcN_(V zTsX2!rM;+nVQ9`Uj%#T4&qEy1M6st59%zlqAcLcq3C5P_=;?if{FGOd$gP;)LGJFZ z#LrP#MdctQl|~Pb&Az-4?Jl>q>xD5Ur3#d9MSx7&3S*tBAb9xkxxvVYK1 zVJWKeakU9`=#-%<3n>k=aC0iR4WYiJkXG7;qU33%GX@bJO1@fMHeFq+#iJ)~GiVlK zH%^~{i291QPVxA3`4bbpIEz}$#`;+3!$WgW7b?LSV22eUa-@!S50PJvCpb8!SlApf zPKw2-6(-PWHS)_D^01+-iw`$d`c*DH4H{1^ZYhkeT~{veEVZp4NxjpNf2I62T{lJ< zpJDyljqYfq8tntKijWxS5qY)q`&)E(dxmg)Qio>&SB6LhEy`R-l$N^~J>V3-mC91Q zSdojzEv^>bA`L>+jqIGM`m)k)**4eNI+qnrU|L85#m}B-e}l1#a`I9uY%iCN9rV^i zOub8Jwgpt)|2Xp#z`u~V~6X>SOweA1em}rKboAx1nl59#y z(k4J@(>BmT(*auA(w4cF1o>GT_*(a}XyNopa9rV06!k8s+}cYn1&5)l0))9E+b3 zJ|83PYe3783XP*tG@lC@8&+e)=GNJZ{lAA19}o&CY~#ne9*DyiHB&(dLIcc@bLp)R ziDK+!V2|R*oWi|;+JqW!ywRW@-u&he|3J_!DKG$_EkZVn_j;o=+B~t(Q%}PZn3qqo zQcx#76}JwK8o<>)7W%`UXD3jL>>5^-RFoxtvxp&9X$9E4YS0_6P+i5^HR_#ujTJW^ zLRS=XmD<<7@~=j>r>rhZdae(JfSzKQ=BFxa5u&4vT)+ZDz7RK?=+eb8s9{Dr6uDKb zb*oypZCL`!6#@-*H-iJB@cbjU&#ELmP$|X<3Tv`VP7T^@%Fb_yiRG?Jdp}{ewKq zg!)Dwny|hj={!pntbq+7eo5z$a%hZ7uamyXZ`OnYG@{D8dk`9kL+0jI6(>)39>_Ou zJ>Pij1RHXZ`1|7gGDImHjWFk8`~GFo25DV`Wcw_-l>LFD46pW2HtybCa$!CybAT{{ zgwfWDKfw=Ad&aOJx5&I&hLg1#7=UD+yMX2unFea$)*5-f26@TbWjZL+xfbzk3Y<%A zbaFYWo1uu3wVJwxSfRJ4jisOBkVz!8?PPXnf)O0xWK?WJbYiGt>M&h_sTrGP(=u!r zHi!C3*YoHxG!E_f&NpV0%V@1f9j6#G!#Cv$z(~-w(!|wfWIuI74*fRJiGuEe$EX3; zQ2Qa_YM2qDa*>1LiEQa2evX%aW}t;dZntDfH|dkaQj0VaUGknp6qle6fk8Y%>x$@u zHm7gI5M)kftiU}RJDIh0ZnTIv8K#!SGkvcx&*LutTM|DdpbB|=m0X8Xf_GN}zj%%E zcoA-`G_q@j*TzJ5V!`zmZvu-!G=A3vu<`H?u~4S#c5| z?X{h*gZ`e83-H!O2LLklD$#*4&(W?ufG`W z7*Nr%*aG(v`+tw0@eiIi_K)7@jSO<%5PtevesMiER4=HB-g~?&Ps`~U8Cle2(7+S& z%cXap8-t=%UAwSuqLl`t+iboK7#U5Nx7y%f@(+twN}W21qYU9m!`PL#Wt< z8=Jnq(tC@Aa8~)zAinXYp?VZ(#Ke}2qj)!!`*9eo1FFK_y@FqDyz_che|k|B!5068 zfjVUVRVr15Sf>I4|CB;>|_CLOkZZDQrw|-vS|2XT79`EJ&l%Mh3U>;M9j~#I&&A9-gFIIMe?6U z^yDdwx>wTX5*#ciY@|Ul=3H@cC-d4pRrEkrx}5?cHbHrRWnNpAl$SJDcDi{|dZgNl zPxSGPtTb;j!;!|n5b+oP(NT_X_m12@df$vWT|&8WJj+ez8cAHLoU&+b@Olib5)WeXjgWQ&+0;@Y4YQClK@)5j4_PvQ z%RZA`=cc=?G&~#d0%~1AYcCg1CwhNdNnaExf3k9S4j$k4uGL;nvvw(8$YPz9X3diB z(ABs3rGsRWY2F4XQm>I|ii^K)=FEzHSH1hQ@4x^2cdcwFIC9_XV&O3`@wcBB% zrHo;cMH(x`(UvrCINg5lpdv4JEdPP=F}_Q#+&_AA<+=^&x|zXF<(r}Q@`*BP0bOLY z<6}I3BK??%PX-?o{ne_e3DFk`p6d^o%Ylun3({BZ%2gq(Irl8&)AnLbMeRpzvV)?5 z#yTaX(<|HXgEKj@%_4>weFqGn-13@i+z6#I8Ns4#q&X!xir6)m11fdi#7>k5Tt?5Y z6Dgb?`vDncIQ-Ej0nvtjv4~|?^A|esanjbA{3e@nXrgTb4o9v zTm)SODr;m+fWX#K*b-il5If5~xS*S54rM86Q~%_~&39uNdJ3<1<>Q8?m7Qf%oWhDW zln2|+%+JaB3qH1Y6SW_^wzrE7Chc|bfc3dZ?QeD3ZyH?ptg{Dvm|F(Y+iRz;cHw{0 zmDkepQMQM~mVxTecG{#_5;}4@1M`S?4Lm(Zio3>V-x$bB$-zNHyWqb?m?!`@;w^pu z=zUA?J3pI$U&lxFzIQKo>nX-e%?tR9t0>mYJ?7CM3gNWSm#pMKme{aXuc8E?Hk6QBObi&00*_3g+{egS5dnxV? z?Gtgk=>y$+JYYgm2Iuu7*4 zw{l|&df;si+gGxhOYJ(nT+G)423xj{rQ9hU#`1dQo%CL=_C93wz=!zAELs)PAs?Kc zTJ8PK8{N!q+srbD4aoev?hI2_G~W}wn0rWYWT4`o=benW?n-uz$g_Wq6?q3=; zORt(Gc|t=d?B~X)7;sDs*!)D^FL$5$9}iVUZy)fljA!xX8%+J9cY~>}&cddN_62;j ziK6_`S9PHF(8x!qMJMjRoz>W@7OQC<=qA0nkczwLnG#K)k&dTo8d_q_wCQ#kx{7T6 zrWvgX?QrZQc{p3Dvfut7#cpKDu?|N`sHYm6{Xm0gHqrYkR1VIgBdM6u`;H^`tP~$0 zPNJRL)a!WXMj40n8Zmn&iqcP)dbey6&#v@^h(~td2Kz2mdxvQWf~UCY3F&+3X1oQ; zS&GW?kvj=#Ex*WYFc!(@TVLPFi7Nqlt�Y2bMEvfq_?ok6KRxU3 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πdzb1MfC~`yY?_u%)%l(Zw%-rIJx_{##oAR~mmPkovxzAyI$Mj3v+ z327aGULLlYfMrv0tEMqP*1+UKTNPELk+fAok�l?d4VEn2r@8P~Q?xrWl*G7Ryv~ zFxh?*FM>J(jkT)z6@5NAo=VuT!o{gtft2Z3jLtH-J78C8a+Gyo5mAhZX=gb9ZCDaZ z0-d~^v>$0;sfY)$A2}nmP?1$hG=JU{Ic8#0#U1V;uKY?$-r#2_r$i(&Q(b^d{E*8Z0|y_9K} zM&phB<8-_c-3or%KzBl%3%Nbou0cF7e1eO=WUq5;e_8$^%Cp z^4`uj4ZiVdt_mYndB$SPpn74@(t=?!*houl-lnvwWG3#g(MxGb+taF27zc1uI}GOE zg9-GRN5mRU&#Q=EB@s3Ae1&ed*@q_rmFL-==nS2aUf<|p-c_YcO6A*(c3Hu6P&b9q zL+N=p8&w*7S8&9g=DsMMpnYVz|0QGba3-CozPa!HHPLg!c$E^bDxg)mSN=-+aoE=N zEV79CzGXV-o$Iz5{U=!j+P6c08VYn=K+PG*(dIZBF7VSnuS7%%v#p?~y#YVZe~eL*xA#?iysXv;h?lrPtt z`&6cFJS&^u6=xr1z@5_r7J(DQO9;JEValRA^eFST@opi>b}CA$0N{;kow8$ccbIg} z@dXf-!D3a`(h$ZO4n9Bopkn@5mNLeV6UO>NdcKGpM&*+%P{n9U95obSR#`dJwIfRv zu+R6Ck}AF8i9ruhzZbb5P1@^}-}LtMRF!H7I;sc?1Toi=%Y`zDnyg|@m7ev!fyC%Q zL?4Zfi=PDB3oM?={Mlj{^u)eYq4>?%XR0AjfcnMR5djiW%m2+JS*#HNQo|iV8VZ7P zkv@a&we)=?c@tf~=ryeYu?dOA+DBNZb4P0VB)@m95uw%C*imIJ3KgQs;!GAh(;ycR zAt!y724^9*oUYXqojU&*iT{v`92EF5UdyJ%VruuqG9$`>;$s)KVt5NU`810fSLH}X zlXB?KMk!SWaS^x~Yvz4MidfNjW8tKsC9IZ4As@A-I)$0L8W1oQ^wp^WhjAt-*Fk;C zWug45)5l5|M5C-O%2>8|ujGbL+13Xcue7B6nBt0Nu|H~DgqK=p>>sDs8SxqO^?FYKJVJIjc5Ohe*8nRDFR%VRkyPWhl-I)+SdZaU#niHPK?H=h>08R>#+4x7<$iRLJSWBdypOsHrm4<3j6ENpnfn z^lRMSZ-igOfm>2X<>Grh?M{-691XRA9?T>(S>th3#pW95nyY0IwYbJ6pg{CcIcs*x zFymaClGuiwE~-B&m@chEHI0gsNOHQE|48woN*1_E3ez_cG zg=)D533D`8j?Jq}V&-ZDeYDi?NM>rIV{Q%%L(q<*Y`vkR>@kMEtn@f*P%JLxu@dE1 zQI^j7@^*^qbvOv~J4#qhQN7A+fj~Y1IvO)}s;c;?)~grxIv1WhSDP{X?M&?j`41E? zk=3r~UdeqI7Jnd&>frz=dR3d3Ss+K7SzR+zwpi?+m3seVjCQcPj=mEsKP&^PwiQsd z>C*pr{EV;7F!qn$4B!>S*U4%JiEbBkP`vjVK3SttnWmm#B*z)H+LL3H+YQt*U2bUx zJ@MFdzPcQ;&ZU?KY(*4taz&>sn88|-*3Y0KBkdZg3^tA)2NgWdW2(0u_sEIq z%2np@Z#wriuInxInO^z8>&i}6wOiq~Iw8;Emsph-^kw^!saY1KSwL7xzp9#0&uQIyQ5`0OzCp3t9VTPI#chJzpeCD~pSn_5s`C{9B@v z*neOw#&`MO^X~m?5C=(W=#FOHXiFIUTI$zsPMp|*IuVX}SlS1HH4Y4d-X?9tBKKw1aL8f%N|Wj-ZLbMYjT1`q;eKnX zZBrI40Gzl3v6L!BWs0wSA$?s$p|PGLMrp@cE!}$-+F&8KNe9XW|Jte_;$OyCHNA>d zaA~Qs)5_cZ$ykt(;}(P;-mw_E7Hm7G(UHY;zm?`9T_ntRhulp2rMh_jV&ruT<9hiV zQw)@~O+jZwO}n#SOzt_dnjJUJn&PmA28DSD*20}58Glo)?fJuSg2I$6OZgR{B1Z$O{sd-5()-EM!rnT|w7O59y zvg$1ni%f7F``rvWnR~DcZlhQm-|df49lzbNPw9*E%lP#P-a|}%@5dL}*SZyHuxq%R zigU!dO*1UYp>*Xd%aL(xMx{zU{i@nE%W}Ge=}Y2v=MTq?TSKiinn=hqxF#@)B?o8a z-%R@waXMZaKtF!nW~Oi8iJllN=z;cVj+B)X_pQDr_IT3h9L46zi;>JVu$_YdH&F?$ z&(Aea1bhL=&fHQsqQcJYN_KkSHf8rjbjRAbcOYw@@LO8n&=a{uVP0}Yo@M9iCk>>o8Po$qW^ruea$x;YVXqriC}_^GDxk~IE^ z6>6IF1T$8znqaGx@zHhf-7UTWYeq(Njg$?5qnfP=yASs?6`N$`bTPM?^phx<$lb++ zeNa;iza)elFqD2@GU#_{I+}Y*)N~+P@6uO@44bJmc07q}?@(sHEt}TsRB4Ztf9HX+ zi>yj!0#&5Jo_8<>4f1OH#?;~flPdDQ)qM1p;7ajQwx<**P(m2#0weXBqzc-kN1nUq z+Z=pwDFf$iV^wG{4Eo0?8zhC6?s!v*CJZ<;HsB92(*Jn;jISMP>>s^DjheYF_RL}= z&rk9zUl!3T22HS&zMn>#6nJascD-DjUp_&6!R0Oh%xQA*nHP5ZwOMpeO1Y<#Hd$D*{dNJBYNU(% zQ*lfv&Zb}Ww8#j9B~JAb`r4>{l&2@s0McOUCY_hOU{9H#5Y|e;5?gg`#;xc_z^us6l>eTb#>`6BAhY^zurc>xJSN zjiD)>{N#f8-)ShFmTc%7i(+)B2=N{BO)rSAjLro81@yQ@BIj;oQ{0fkC@qe)xDOv2 z!>mO$9f8`G$T2^2RN`Ul=?FFjj^!|O0jimup%?uurjMj@tc}G??C1`JpN+t#(Lpu2 z0Gu9cXU^xW6VQjR#@YG9=7Z9J5idu_vp;rZ;sswe_K)6|jk?(l-H216arQH@Yu$yk z&EZ*d866)BOu%rIJkbX0<5JM~D_Dyyfje9*+_OrM-KczYnQcBj;g{y;y%kq>(kTtg zT+QhFv0f^I@T8?FuAE;s7Mogm7F1R|4o1x)>>Nj|!eqxUxa>@NK|!Z97eeB8oV1W~ z!s_(t%IrayGV7XH!HUFPjZ9kR%VoV?taHg~ccB>KfVM)4srnm(4C&uGs`2`hjQyi` zlF@(KOBH&1e4Fd9PGo?#<0Q7Y5E^!~s__Z7@lEA`i39}n=^F%am`Xwewx;b})L2N# z#r#rZ(#tDosZm*qN;W_lOOV;anuc? zD)fvr+pB{=g8%G@@8edgGy5g&{Eka0)}rQpVgGu~N`8DKw_Bulq-R*Styi4az%NaL zE<2*0C>~29-_`O2B-7D%_1apf)7BfM7g)0IJc&<9;8$AIx_q#`ra`(LH${tdAyiTP z8B3&27NXn^w89OsE3h<*foZfLPHd20wKE)5KH4t+oZ{UJplC{5Z0x%TyezY^+(+@G z_@^=iq3*O!$6^qI6{~PoWH^&ckfcDL$|~F}VMk=-S>&0$IC)+d`-iQZmLdSbH4p!O zVnrpCYn(bl+iBs;kFzv;9L7^AdLr4RooCe!S6KUEPiP4mV_qEk)9W{IxQ$o%d~HrTSI&x7+;P%rnaf z&5)d`nr4Hhr3LW}Q#~!_)Aja!M!42zl%tVFSHKri?>t`MXE0)aGZxE9^hqxh1ohW^pJ)!_djPFIhU zE)~*iakL;ALC@f7Q)eO7B|93?F9F^Vr|2hiYPoYv20b+<2Buf+#fQ|P*8*tc;TiOJ zy-FQw>!_#Q4T?O2;*xQh>gdjFdxldybqm$zQ}Hy~c@r-f4?|^QQdF-bmdmQOGwIWd zxk2wral(^59DPL8k6S~SOZe3Q88zWY4)aMUP1j*bM02pFAxx{zXWhKsh;BNady@`! zS-N!wZUpIwbQz95(>Cbpy~qi5Nip=sHvM$S^v>jW_-{hpa`+9n?u9qfG9!OisM}Bd zpR@<)5K1m?q#8t=v-!uyh(@r|%(U}CcCCx>->#->vS^mUH}(8KP^j>)zf>8d4i8fQ z=zWm5eXo7~gPy;1g8kJ*(jv;Z3(5K_ZHi zpHZSCzZqtOHf&+|R*SeP>nus@m6`m9L|Nr%(d*?LCHxRyc9(V!KQvRE>*j+~t%=rRL`1#}#LdllbBst|ias&z873ur9!_Yg9G8eitW-4qr;89 z|(r_e*n>ck`TYXxGpq)t;@n;**$^ z(R4$M^xM%qP-0@0I_n#SEFNqs)u3DxJJF0jaZ?L8AC-M6yV-Y3kI)>h+6AzwXtP(w zZXLm? zIstti)&p~uYw<*WvytCDi#Dr{ohJ;+^@!R%M)5?4O=c7nfiESb|DxLll+s7@Wt1C& zJP16*!!#*gZ6;5K28JFsiKEAq=NvFqX0e#G&gsI`Lb)p{xB^pbrnC# zuaSpC96U4B)ER(Sf$Zo%*zLDA)8TGV34S5lD7woe6=^S#l2Op13p{8FM>i8c^hbWrvv<$BnwW&iXR@1H<^qFfU%%xp*zTDvt>N$E1`!J{G-F z?jIjtDMKnR!g#!|*hk;oK_eB)A3A);@eGP^CNVRz{Y$D-(uu9D)d*ISZ2f#^j>r}cx?bR$q$V5 z+hT4GN{Oao`YZlzT{oQ%e4aF!<|zl0jCe0=*6`w9wJ$MQW<}i4g1`FJ%38Esd z>Z&UEnj>zg4w9mz3=7gU#I8gtw*v5l3S3BEExpM7R)vq|B@f3< zjNF|7w+isV!w7HI@Ig#h5I{;=Qby;LaZn9g!Pn$pHN{QySdDy4nQHJJ*i8=#EL~a2 z(oZy^18tN7S<~9YFS*nHkcb^iz2mg=GinZvVR8sM2YRMCeX01V!+8@uQpRWHdVdvs zucvsxY-g^hf7rKsG=I{=g0^dTaWzBJD{9&uA5@yyOqr?Lnjv4YmxP6U$)S>W#YZ{_ATS1+Xncy4G6y`ISZrP*uOq9 z@gkoa`$zBRMmE`Bm?DmgzVJBZxbQ!O*i5(qZy1N&)BD%TtvD_!&z1m{mTg~Kh6=5E z2z}oeUtEAv2SBkjV!XJ*MQ<-cFchUGkaiM3dE(RG=sC=T(iAix$sqS>R$H6MvX-@e zbThrb8ugRWAL7aSyGtpQDbK>+bWz<*zUBi@{ywbbPd!X?_5quLly-5wg^xQ1rcE4e z-bwGLBH!16kW2b}KMW2hQythUqm9{tbKUAI%nJa02)5^~?si>S$+sJ|hr|?@TF-+_ zL_3?Gn8YuXaf*0!4ZUvQ%i%1jGqG`=QIB*p%o^6-op18 z$$LQmjWiMs?zqQ2s|+-3loI^PKIbd(yw(1;UdjQxqr9HwXR=oQ_5u3IJ;Mwb#5=oC z@5IoqC8OeGzM2}uH2%lNJbbSgVCFeHdS5VMb}X!+JQMwF^xto@;*^UCwV76)py#bD z=*^JntqKiDh=Jo&zD|5D^EXq`E8Vy+_frq$Dt#a|5tj= zfcms)q-5o~aWp>HipCw3Sv7R(XF6r#Pv>|)-3(pZgXkW6va(&fr|MeaMR0%Q%5b9* zu%H^D12O0m)_}Ko0$bf76>t-rveDb=V*EkKA@d``mW~zP{^8U7QlhzeG%=koG$DT5 znW=^~nWpv0;+2o&zBcyvHnqF)4fH{Q=AhF23=ih;VOv0XZ5WXP(>v5hSJs=NOVa+Y zW8;#vE6z%2`+DB63#n*rESv4B*77VR8pKcSpmKT!Xl#z2*<1$kfq+z?#NQpY^`k;LX zCZkn}r360wdcf7FSho}q=|C6W7q(%2#SxSu0!ty!ZHN9EMG5KTbfmKbX|2k_@JlW9 zqWFxuC7V^%$Ut@^feWhk$06KG)_$$xJRu!*X;sc~piS!5L6%DQ=*HIq{oD>Na|Hb) zXdFXr(s=16eL*~aQXI1922GQorw%ql2io22d`1VYtF*>_U_9=i4s^-ULc^`(1#MT# z((i@95f?1jnJ;Movb}gd6u~$SLF<8*Z7n1?Dq0Ro*mgc#FMVxp1*9U@|Vze}IYgy{ayD-SRW$8Wt@3NJ2$2thNmG@}wT|?xv1x5ycXD(E>s`TE z7LpiW>|`wS?C%+8e;N;2j|&S+mQMYyUQk9+J4p!7bIl&(W5(R)3MhtjzX{IgDIbSIyInyY$g^mA1jBxXuJ z#FUJyT?;xoYKoD7R02Jo+=MBb_sCEXw8K<1^-W!I4Jka*}Gh}NDO(~bZhy1>LrO)YyTFl-7z@=njn8olv-W7&ty+r-K; z1~@ZEob%7wLx0GhixFV-qM?8Ez6c`#n&?ofiz|g$J*GKYXp5lp_27HRsE9UUs~r=D z1js>mS`!`3I5?`6)jHa5hMF0|P3)uUIX6Hg51cmg_{_zD?(RS>f5AXkT1KndP%Ho{ z`5tO{o{f(+j=!xdIith>ecJ_jmRh1j%XfxFeWvrna2Pp_riE&qjn@nZuK9rmorK29w zY4j6C?`@`?qBbu_S)nF~NLe`JL);nck&LP!76vWQ{ph4M8N%`AX0#pPVrWwK zS@M1SB^&d8bAiQ*nMO6-P=ZN^SLFr9ynXBpwwym>a~G&$EUm@8OiD^ak@O#-5p=EP zEK620s}Nd1ofJ(v)0*MDDU+7g`0TZ&40!wnbM< z7(Mv)L-vP{(;qVZhy9^~_yckUkxJz%x2nWjRqHDZCSGJo#M7?guF#Cfy=HD|YUzTv zqeD*<46(yd5h*U6nU54}D2^>USenHB2?#!?vZTn3Sy0!B(ZLNH1A|xWsWG5USUP(~KC&uF)^z97AFM4UG zc9T|50ud|0V3Sr4fJY)OOid_K)6v{XUz(t#A&t?s(ajc9BT~lsD1;NF$1rK zZwcLKaO-?)-+okQ)nPyE880Igj$jzYUPZXv&MdX1w%8b>)>k7oi<+jLG6cfH*eR|J z?ikhG5ae6b+y%O27}AZ9VBr+5=RNeW4TfqRHVD*WgSGogQzkPyT@astD67<0X#?%C zh@q)vgTe5Tfd|2}d{?4bC9Jlz=Z}=$9S!>+J;Tt<*Mz=a}N&L-8La*O$<@FrGP z!CajKl}qU8R3@wDE&ByFoW}36;`=2+e4R4QxeL?g6*1adODk?T$Zo(~P%dNHXyK0! zq+f^Q--hvv0VA1#9)PU$cI2{YhyLzfMB)#t9pX=jhSR2%y7Gyt} zdYyVKUTc7q02RaQ(If!JE|o&myIassvLT>XEXGD8g1=P z)IHHqL`^DXfcZ?U1hwc@@rjfs8LVdk(m>6lg89fLR15y1k1&JMk2 zpf22wjx!D$aa(F+2E(d{z3gwWP8(@Y+HgE}ptPsdwseIfB5`VOsNL#}e|aj7A%!e5WS{lOimtx28=U34u$9*1KH?Q!#_8=?&>WvTAL% z>C*V$9Z&Xju{fQ%uZ~R<*#`T=37NMsZ&I3f1&dKx47KlPvHZa}W4;6KQizs}8s5=_ zJ$7HRRhZtl_0C10hbi9^g9*8%S$YzaKP`lr1b3w(j62?BQ%jjLdGP&ZEWJ=H8pW0d zW{KpClwaIsvF_5;f{+wD)L+Pup6bh%{;jF>{VzVXmPJ=k|L9$TQXSV=d5Q-U81zTh z31o6H@OvE%6rezkMj43eC1(-H}G>`Us=!qO19H4Y>I&|A=IlN8G zO1GD*HtSu2XW0Zy@YOPn%%hP$Gq%C?4ej(P@mv-BLu0J6+5r?7Po!j`m-B>o7)n<6 zA==&)cfK0q&_Q2~lh&Fc`~+c&yM59TdfG#&3afMdZJg-I#Y}riBFNaa-O?{+q}p^r zOSQrkRb`!jv1woc9L#^t{;TVfV$`RsA0- z2tMr`dN$8p14se2%8-PIIs-K*yV}6ms-e;nnCDs}mH5a^7y0Mea>ag+2Dxzqvfo>hB{A9yNjf&4r0}-Z*W~2z2Xob&Js8FTP zo-uexAy#>Pj&hTawpt9Q%WlVLCmX1t&j+M+MB>X%vBGM4^h zChyaG@9#-F#hu^2B!raJ;6u|POeR; z=+gP4(b{dtvNV4(YICZi5^rBE04u9J%u7o=>TECr{;)HAtfpFiT#+ZW)P?wMqi`W_ z7)+9kwxCXJC0WYE`3g(`q*3s{Y=*SzAdbx;oGew2DmPB18$FaXnLk)6<4zmLzZr%4 zSYsJ1W>D+XJ)?l43(}3H$T#jOmBnD${;-L54g;BL=M-_7i3Rx>H}>P&8|jU77D~E3 zFFJ<(o5n?WWis@SUNW$J?keG30tOl&(p8A>{c$4brpxpqC6V8jfJdWv5Iq=&>HCUV z=nuS}D5DUNOowKnz1BgaOHs_6U8!n16$9Vx#%egL!v3|Gx{!&gQu~oa)er#Z)DD*l zf(~FS4ZFqWG``X;ZG+H@zY!M$pKfE2mbwvQ7p6zks4))r>JzCkb=WgTXjp}=xj8_$ zZz@kzg|J7+_Zi+oe~g!(l>&xucR;Cas&??RA0Q;z{a`0$xXVe1b&KfbVn(br9*ZN zN6?`>YfCE*X)R%!lD<36Mvep?i^&85LzO!8(D<(v*cNL7&9-IYEkh?~Fn99aVLU9e_HT@=UrGqBp4CIja6MTTu2Fj`ThOHUF+!O>fH%DfYgE(d9@v z4nc{jIx=vOnm7tu%M1%Z$N=U=YgBm9HY3s~TFF`+gFCmjR>ZjJZkH9udX)gxIYY)2 z82dMA6SrIWLp5kDW|<_Tf2jo5XF)=WXWl5JBZZokdlTuZ3VvI4pE`u*rmbsbHs~Bf zrRTf?2#s64IN#)1TSGLE*G*El^L+>#ipyYu z`|G9CJxtp}?~d|JPTX};I^D&zT`_$)EAI|>w1?f$!=wii|B+9ktQ{5oQtJIul2)l! z!zN|kXvmlU#qla$Aw}*Vy(zNKg}$ZzRU@T_aZQYQiKuDKYC-k0powf=D8hr-HEt4g zcaCSD7kkj;*_bwTdHh3zT!0fRohqkWE73ctPo?8JjiZL!a3sL#zh1l+#-d7{6LsxP z-K)q*e-pN#Se`01dbWFq?4hui4@$#!4*lcRrS=N}1hDa}*>=hk4^;vyD&1t84lBte zX+6aZdrUE)RiDdu8kB)(^tl!rV1f{hVazSGueEvyE11Q8p3Xc!=H-2+wy@50v7*1S zykB8=`6EX!UhN)3|2Tb*0TluMV;q}EA13q1iuidbV6@V-nIg@gN%YYYHTL38z5TO6 zU@^2bx3u%oO}?wDJfAG$lVPo+9Yvbj6np(FdSj*;k`@%h=v6<>0`A3+C5RFel#_yW zDYrZ6Ji+hu_vu4KUKY|kka#?7CMZ&2BTun#OaR;bxH4T$Sk5Lk$Jc<-0QXav4=fei zIjt9Qr(vR`%NFrcCDjS2rR#a{45m6fJXKnfiRIbi;mHC3r+qyD7 zy^OXj1?JdMpRvC4Eu)fR{{;MKh^XR%S*JD=rOmSsuNSJ=8&SY9{FYQR%;^a3`;3uy1rZiZOfKXBCH z)$Wq}$LYId{tc|E*!8ArO)=0D*WjU9Cn^ig@Dt&vO%vDAi%xD-k4{s){71oe8T+DK z=#^tAt2eXgVisP^ zqHq5j$7gu)<#PY%T`s#s8vJRvv4s`V75K}3&E^kuCOxnk?Yh!BZw#Y1u2e&hJUvQN zxwWYSz^PCNA`?`tZiXsKd9)iPD*M|B{3R!?We@D;TZGGxy=PYsJ0G z`oQjwRGbDydtUVKtl;k~S}OTU|9Fe?KO3I=-cod-+&_93%KnlxdfLd>Y>uggxv^E5 zwhNnvQ468Vz#>73O}ccSL+slLNIh+6#*FxFHh#>G1k7doH)99?<62%SLu<)zlX=d? zxMH#!`oU&VXXJm6LL9xbSmQ-J_1 z-O9Q=)!9BprcnIIe3?z^Ay z?N<9!Iksg$lw!`!@8K?wJm`rtA?z$ebW+xuwG(%ZVq$TcG|9JwNq<6Q_kU(=z&DyG z_m9&PWzX!*eBdo0bhjtnZ{({5?KiTSl)fe2QH*XM`jxJGbLicj_;?;m6Vu)Pw|nRo zBXUogD0~o6)*!0j^1Lw&x*OvJKM*(kFpl>r*=_$x-}~`JsoyC zI?|{tD50kk?dLU4-_LMP>{w^YQiy`iqGsK}IJI9W3)g!p)LxGqh8s9{m~~KT6sn)~3=; zl`+UgZpQaXgqpyuaV~QvmYS0Wj>eK&P5jjgs1(X8;mf%vvePH-^w^6O*SRJt-$Iq6 z-H9wX^$RADoH$;IX0ZR{sKmD`H}#LxCR9yRb42dF zSl7GmrmgoXvn!zIZg&)rYpJ#I42B8nB_%z9@7jX?R>W0Ui6`Q->*<|)Y1VEPU3Q+; zewk4!?W;X+YSIM5_7zPu#>N``<4XC2angDj{goy#-1@TX{^Fz8(lMjNjYHp}Tk>n_ zlf@8O`h=2XDMOt0xJFl4QTIUwCaAQz2{qIkJkm(<#=ZPelQfVP+(Qo@q_sZf>SlgF zFxzb{DRkmWGdj%G9o3YUmoim6eBZ{|viB1vy+e=6QrnRCVNd0kn|S?w_MDrQ*=6)w zB^HFE6&iH5E~mcKoLll(3Ef>rp>F>N72-<(S(^B$fy9P;zP?U7T`U4NO-<7dlIA{g zD9$Mv7ss{G8{;%Bwf2ifDLcoj2N4vp_3QZ)TX1w!W;+v{w`o6y&ANlnucg=SwcnIi z+{WhRGI5Q&E}OY0v6lSli(g_UH~n>-zM;ZV{xtKZvbZFE#RXJ<17F@ltwH`u4^<7M z-E)9RW-WLmzP!zTTf9^6{47NS%;2sT=FWtDd{;B`T|6Ad@m(D(`u@K(j^N8LG4_u` zml#n?exZ?jj6y7;YfHcsIG*d8t)n-yl}1%YN2^NdsWtYBGDsY+YQmFwxD2oysQ?8a z`?Ckck6;ocy`D=BteAr-**Dz6XX(`{pMD0v-I(_Q%Y1|R zZdQYJ>77X;;|cv6$>?69yc>eOyQ7(wx1jPJsBOZ96xBXuX}W95I9h&0^=S;Gx`X`N z$CLrx;uizI(f7Z2dlT>`%e4LbzDuK7o?Nsy$=&3k4M}JNt!=shrE~!bw9vA5V=ts_ zy3jT)Nn0o&vJbd`fGeAVii*NWQE=RGL1l9r85i^w9Z^wn8+Ar!;&(o+_Vs(`|Gmfe zzJF(q;~oZSn>5Mu+{<;H=kLsXsmO3IRKhNcD>mu<7zI}4hK>{493L3P7sb|W07&9K z5#QQGg$AIJ)`{|~48w;q+ZY8L&Z2gDZHu^1p+=kLmTqlID0SQV+siUn8<4u=ndaly zi4KD+k;+G6<-B?jZJUHsaj1c&JWPoPhx-3tak(@Yc6cxbo*N`pPhxBMCU)s2X1K{U z9yjdFN%F*yggGNK9|;$8jFH9M`k?C?1#lLh`fy)Lt5NHR3OCt)wi!zKJWozMT9Ax< z*PfA$zaS#`w;QwZP$}l#(UoF$D`qibKiXR&V4^J*GQ;e6pxAqJnVfh8Q|FKINw*YZ z$`I#Y7LJVQ8918?K@auMubb7otV$Q)HR#-dkls+x6W>lq7y^VYQ=3J>mPNvmF=5Z_H;Hfie>m1 z%{04_MqbY{>)A-;;6(j4V+9`PjInogoiU1eQf^xUwi4Cv$L83Rwfz^{X?qj#VPbG@WOXO^B#oAEl-G)ZZ{v8{(m?A|l^SRVU_N!+8H1h3 zzFoGUQ!`E1$>~*yCsit-v2yn_#kV=fqPq{BMF>p;aVd?ScN$8Al}1)HW$V-8m0j-5 z?(TpiP}mwmj%%0D{rxiDVve(V&#oh~*&uS#M9dNKy_?lK*0`x-JzX19=m=z*Inb@% znasmtq&Y7o!L{7d9TM)R`R~fNW%zl6B9C0deD2ObxQGIJ}nq zu$BRw(YXwL@gLSReL=wQyDhw#KfRg%DwEtdo<2Zerf9!1|BCRIh?}-Vh{3O^KY3Vz zXY2v3F+5E!`vV2*l7>7QJ{Zw;Fv7cwDH`(7PHuDMhEq6(D}`^s@e+B~pRc3)$nWRH z<5!*p=4a4Z;@D$1{t%%pf@T=4s6Uq``xvlz}NExV6{>&#q zXX@I5ininXc-pUb{O(?q*?eUXnGQ*zcXMd_RvH&`eqcNlE%0Nc_)K20E_3KVn z&-c-icyXwT=V3Lw@grqumb0FU_Xi(QHWuvea{;M8hyZx9jlGg6`e#u1E4L+Y37eB%x=MPNW zW4_h#);2?>s}u+2``_i4X>YfDD}%39cYJ18n-TWVht)_E<%4I>j&RNS;SkFn;twxo ze6h#USA8$abFMGcxU?;bjyxCX>rA+L@*}H?E2eWEHe`xj{nfjM$gM-IHuBxv4XoK? zcN_|l;WMiXCs=4B>E+M$h=sI|%P-DYz!v?Tb^c*8JwAxoQ1SL`F}%Mz^$#rQcvw#h zuNDJTJ~8{l2woNL7lDz1KX>wsojjZyQJfpGsix1dRh|piCOpU%XP%4IS@d-+z5|*2 z)0w-ppX+pGM<1M>l9WU-K1nXWYGa>w11uva0*%_)peOw~$XYU4B`xSj_e~dFb7}sa z^!YSR7=p=i`JEXsIr|p%(L9E#MNh-@tDejr%);?~{>!)t|MIk{cXT~%a@YA-^2jT< zj9EWkZTdz;Esd{1O}G?oP4qvv3uK(OIgcHR#P0Qwi?V$l%Ujs2-RG1)?BthgQN>NP z+Nl&{iawtgJ9QA6#etUKi*4u=O`ia?CiIrgaQDsB(yTyOFS2c_C zHn+t9Y7{lO#RLOQH>_UAWN^H7p*OJ3dNl6Ag{h1-G_U(Jzgw=%iA0KqdfTR6)jg=kYnRD63SJC|&1`^19Ur5S1fATN3oUKW=jhjN{a_n*`~NrNrsjW_ z)SHElrP&aD4Gomvkf>-%@8@EcAfB)WZ`UH^vv%{O|BKN3*nl1|@h^;O2)%Fl|0(p= zRgFe3>c7!>PbwM&nIQNe&7JtnaH&Af9pvA!Hg14BWJ+wez*}SRewBsW2EiOYO`3>p zPVm@A$Y9eh<(42{&R-o2uYDUn({^aO`G;^B`5Qw#R(DG*K4vtmLq6SsnfPXnn+^9d z5PjXyY^Nr4{aXSe<~9EH`J40&waI)OJU+fQb7z`Hg4M8>Mhu%--B4tufFV$>*96jc=q5vg05L6J0e}-I!n(m0 zXuNQ7>GFpH$yA3|tr5=!i|uA`a*`cA*gcA<+9we=Z^pH9qqa+|U|QIzOlnhWyiW0ji7p7*PTFzWgh??UP|2tMD;B6vTO# z;fqC}{!E{SV|Gb9E4bHI1soL)0KUy(KdbcvxB@PF2#L5Q^I7_K1^I{#dsfJkrtm*_ z#y|Ma^19be_~wOv&@5IB8`=XO)sTLgZX}$}E7G~H!CJlX?PEVc*5BIFs%1Qe@8%_U z^VJ>5EYZ+Bx0l_`r~h+#Xy4K#gD*>kC%b(~rUuKv;}3B)Sa15=~mzjucu=(+DSY z19s|=;e_t0r7Gj-ZenaN`5R1mwOE0Y0dLD>q4rlO8~QmY$&cm4;ueQxqQn2(>%yyj zi)ORvi{hwgGR5QSggF7OFGSHPmN{tgHFW5dQrA>TuxeTHe927o^PClu1_cC{bV#L7Wa_x;Y7Ge z(XfSkj-uW;K?9C=bEKhaufnAao{IR3qV0%+0~AFAb3<-x*rJ;U+b&)@Z6x~85`75k z?oLJ5S7~qcIvo{CMLOdzjEFyP1xJHFP3uh~UIeYkl?sK_UFWe0aRjUoQU;Rg)$aa= zQAyB6M*(c9F^{cDQ5t`&ZFVe@G#dh2tif|kd*eE3ic+$N#iN#m_fIo8h<6a|Y}Q?W zHRH$8?)bzUKFBb3^p36}3YxUD1}M#jS_kAWO=qisPqr4W!lxC3BHYHR6Hn*->Xv@Ayc$taE*t*K~! z-x}l4DdILew&Jy5+jFId1UOz&29##vj8)r1-(a+L_OQTd5K03)L{0@~jkoMkfI2l) zNpzRs3Y`w6Dmi21-%MhnLd+yykD*l(!j%yH$%t~sTqR1ga|Okze&VbU>tpm)aQNSA zkHw1K&81fJ6-Qs>H93KF!P?NGUXb0Mp(cQ}>kVV2$B!v*4Orvr*( zg`!m{7pYWizuJL|yaBNa{0M}N$x2GAYercSKeZ~zMN>jnv zSWQL(GZ2I)3JNV)_;AJyMMt|!tOh4NZoyWS50KuNl2=*y1^%xXwRqU6O7G~JswAzp zWn5{4_BFrRAC!X>5oG{7RoosQ3&B5_!;n*5YeZ!nf8`0_3*wYl6Qf4N;50OKpn}GG zhuV-Jy5hBfRB2Lr{09U8D^TH^2C5&M#Cn7HQtQ36&^Q||!DuH6#gEv;M$IpJAzoI; zn0;EfhoAPx&^-L3up}s0VnPsD7stT8r3GKKi`&4Y>elR<=SFsp3jU}y*P*~ivb`?f za0_P1*)9eSy5W9J29@9f65yhuVFz@IT5m^1gnzBaEKX?cKOrwoXXfd2%wsN>n@tdC z46Cv}b7C)Zc7t^^!&dk{X1~vTH$88T^!s&l!(A-1i@`8iY2t?wpp!iVyul7k2vZI+ zgpn=jQE{N91ngf=Tn_yMcTCS;^#K?c=kY1?IL(O<8zTyh5t05TNE~NZa-|K5pRhlo z#2*1CN&^gEVG&UxB76bl##bUYzM(ceo6Vlx^DMJjPCGafO#g8Y9Q}eQs(sif9Xp*G|Z#8d|)WStfdMAib8NiDI%$ ztjc##lR{}Ce0eF=U}H7;58=jXXbn-w!hMC?EV>X5^pohzRLV=0dsBXid3?r=wx{PY zNkwRANj};Ap%qFI;IO}wj+abMO|gwQkOqJB5*wOh=)N=)`lu%c%Lyh=%pjb*wOE*SSB^<1pUE{$~^T;P41!O_hhOkmP1a9rrKk+p>^2o zY0!6n4I(sfea7<|!);WOo&eB4s(!<5uz+Zkcu0@_!=Q5q9g3y9nA*TgH}=ybbVB|< z4U5|iHf+UX#is+oQTomE58`6Oql~?yYm_l^T#JY`L}`W#r+C~#EA&w4yKl|bBO3yH z6{zeZJJC|k(j!lua$#;7p}ikX=mUx|DI(e$2_)g@O!TSzO(Fkc!$6rbL_C`sH3}gD zA$rlJNB5eiiFcj6)jPx+KMs;N4U=CKptDW@&gp@yNM}Bx-#bP92;DWXnk^C0lIHtD}jNZV?~1^0BF(JF*Mdf-xz)&W{XG@ znpPpk6ir_*Ebebh1t*|DaF(&-nPmPC**}M3a`@uxi%!RtG4!pA5BP0O&Hv4#*)zgR zmEO^{RAIB^R7EV2^guH8HA?2hEr`$e69hRx#w4mzg!D#E3(_qG`pFFe+K`VnS4TG7 zI>8{l0wg1~o8WHO@V{!?2%s%STXElZ`^uaxa_SXuq%LWza5Jne6QRE1>$JCVUKUv; zSaH~FSY51LJ#6YtH$^Btzm2*^Ky*_ro*yA*Nk{n=Sb17Oqnw?h$9`C&F!xUp@e?el zE8wOVhsFc9rf&9XQ6orfYLSuITB}waXQCh8s<9In`!X5<&1GTCr;gG4lBy@I9}D4HQ%d^|P^*AEbb-^XM;$RP6wW!rBK zu5|Nnu+K^p*j~fVo7&r zA$5AU3+i;cTf91r%rv!dBrpuHH+?re zxXGkmETA(k$JW`_IyyK4P)UD1jdHUN`r~wW$q2C}TXnfd4rjP(4%l_)90#+rvAc4n z$lyR1k4_L(*Qd!#^W-2GIkQ*_l1^!Hr41%}i2wYe(29%Y zoD18Tfn)K<90Q`}fICb6hg=>4tZ;Vt7G(+)J}ZGVbBEg@<@WfJLV%rR~8wIy0_n834Rk zppVa5J&@TjApi>Pr?uJniQzQ%ZyT%eTyAsk=yIEr9xf157ovXynW~@O8KFmbj5y?$ z>r+ML2pk!KN81I)8^6ZaFt=_{P{dI z1ok!}1uMBnEe?$tYB4k^2aUImLySfZq}RO~s^_!R?!x$s@if$oGf*(730B+0=6D5A z>URDPU+&nL&F2Hu6Kbcw)Z>G9+C1&kKp$C?9;-#zHE1ao8I`yg2bNMbi6?U?GQs>M zze?7T+!5pH%&~Oq>qj|$pXP9tdOu<~e457N`%Mbkb2TE`rdCbUn9JtP;!GNe`6-Xe zEE4x3YF$pva6us$!n$y{GU06zn~?AnI{G-B%`4O;@Ut+((wch14Em}bX1*Ya1zKOx z-mIl*kP97VS&^%)yd4@wY)%=biS6?(!8Wx1+Gubt4Yub&#h=dnuCusFf?0OQcmQ*w zyXY_}nu(P57V^i`597lF*uP&6$+vsUT zqJSAjU(E65!MP&?!;$YagX`-Dk$`oAP zo#uGP1p73dDP)ba%kBRn_}qW06T{HIIeDxhyUh)*Y`sX-ACM z+}>@!8gFwAqJhOUVyP<&TbZd>(T}-M2JT)5kscp`sxU(YZyu4i)GeBAXD7QTC)C9LFciunsw z7v*0ELf89?Rrfki4vkdVh>yp3Iqgz$3jWfrp-C>2H6y)^ldx2wzoP{qiQlc|D-Eaf z?qt4<=h^-P3sR{Ewyc?F|PwVBd7*;6KQt|E$m4id5 z-89vvXtXgoq(KiTjCjNq>1+|NuL7CR^Py4JOG?p;$TCg!@~#1E)v+DeLyQ@Scm4X+ zs0rk3l-p6yt);elmMmU(@u|@jbn|$8jjrlo5d ztk*NY?iKOLb$SGZ(^n0S%8lMkRKYTeq<-;1uWU#RM;SIYHW;EV8wU|8#*i z$+|Z-prS!JE1??$q{4AUt{YVGD!OweeK!s(U+vA9+C5%Nt+UkM+9n5Wk4jH(t55dc zT#x!(om<^5o;T8caCVq@r&0^>4C0i)3+%M=F8Bai5F}!#vgM<(hlEV}L$-qG#mVZY zmC$kURJnRHtnp4@z)}q7$Y^v#&1W_0-uViO!=UAv9K4vxK;C6|Oaeq@vb|mbycuZHxXEko}ZY@m=8VNBYSCm-k zPy^kYqN_v~6kGVwNA7xL+)UMY)vPQ|Uvm*x{w0vMI0BJ*Lqzxjlq4 zt-Q6L`U=Qsz*hLG4E^Y)G&u`(Z`zy3I;0~{SE+Hm>5)9zcO4nh9Fg&~163XKBHXc0 zrqO5Kf}#9TaZ*WmNW@>KEoss*lD4L)8EME}OPCW?6l(G{2T#O^StiG+2E5jeox1s+ zF+25za8{q&L3>QtC}cFUPJ@e&5NlRycXGRUNV>j(G`sN02*VJ%_d2Rr<8Ub%+02uf z#}=m~NGfaZ;~S_SI>Kp~r_PLVou(nXTmx`7xdKs*DE!vRFGfGo1;+f6js2Mqs ztG*vtlz*%IX{+P%MRHUe zW%T8VXea_!@RFb#cLVdac-4M7IU0r7%cA$}0k(!5(RiEAj8^AOK~I1_s1bMM=ikh~ z!Mxu-nho+5%kTF2ilG=yOdOnFkH&99O2EI+N84-Soj>P-p{F43$BlU18nG;B!D$mD z9pRdav#9)7=*#@|D^9k`@X&0wZHy%ja*SJVORP^Ey|Mbn=cz23pG|oNyV!3;&=qG- ze(q{KPV#MXu28^a^PfkZX_^bti-x2tqiREJ#ds!a;yjhJ`0o?ep+!(pOTK7K#zPYI z{^k(9wJ`ZA^}fC>{4uNim=(9PhDG#k zKYC{`H4PRPiymwu@1xsZ85+Ko{a=nVcm&ndJGxX;cEMmVN5$M&whLScHTfPosE?e` zLI>`SD$}x|=tzJ0Nz3T5T1FBu7XIX4OcBvr6%gx?xpkCg-K(Kjs79qf_ay|=*0<`1 zrKOR3W@JqrT|WyY$aeXIo<3bh73l4qAsNskZ5Bo-m?7VxQH&h zl73iE?;VlXsZrqa1?ogZtbB5CrM-(k<^w|qo_DmLq zef}^fy>=hnlWwWQLWx(2vh%yK9V=q#`B;Z;v^so}f|HF8rYqVx#NmwAo`wcFqS~w5 z+JoZ8DEY@kv1L~HUuMiN#v>m$_KvROkd#t(IV$o6wCiwWXNtJ`Ry}H7*zC{@15Gu0 z_Tu;fQXIWpMn^Jq{i&v0s|R17A(ofRan-h#0217Eqo3=b1&VjO6ZiaLiO`d zl@*I>gb`NpI!ci6zu-h^lb0cF^{~2F4d;L>^4pJh@t9v3dPmn+hNSlwWIS!5oRe55 z#hHGNoog_?d>o5SiLmse9k*&Ry0A(u=px?$kg99^0aeCQx;mxz=8rd&L(2bTFuW-SWb4!784K?JxUJ$wiznV{*x@b&Q(zxOrQr_f8USUdzs8Yq7}w|n=_!}< zhtPO^)k62qrw&IH03XP0+Llh4JHgX}2)jAd2@hRJPqYAc**DKqg%J`l-&S|ZDf)0HZvS%$sNE-f$ZFL?8$feC6z!rrTKG2e zDJYzmrYA(us(9wR>92X>K?`>GmXn2#9de)CslJ?w1xY^S6tO2qILN}6na7rPxT=7!q#;cDx_}<^)8~oUR$pGq z=i$OWv;gWJ9xYC#0Z~WGjPi*qL}D{Fye>U2s-h$ksK6(8P+AggIZMM$w4_Wy$huRE zI%|Qytf@0cI!q3T;Aa~U(?kpKG(14tlSTDfRwv)j(Ub&#yI##)$2!e-@&mLEM2oy+I^Cbq%ZR{L;=bL zHSM%n+q>z8;{aN-R%6k}9&n-=)m9I+xRV^a0UQ)}oaDuHJeiW8#A`h8L}Ys~`Wx2i z%H*#{wzO|*Ezj;qR)3OWI$9rjl(t+nHmk2c>1g&P6sg0M#LfH%*FlbiELxqCc>jt; zoOYNTZ84rRCGNOUz`Z}8Cl5~Cw1^ot;ZqRn%7tl0q(78VT$bIRmG>8^`FNGLBoiD= zBTW3Uj1U`{!{R>nB33{@@x(|LpC70K9zK6DK&zwgQ@?od1m;p4QQpkhpqwaR{y~|x zRBB5_J+CexZh>1$3>Ye>Md3jooakGGg0Of$Uz+>AHI5rPS*c@vsb+YD=3Oh3`MJ@IrnuR_yXd)fQ{u5pcV?p)i_topN zwDU$HZHtjRKF5g{OomYtl~zQ6(XNT;QWp@W^3$*eciX9~Ch+sgW=bD-=@Djl#4|rt zBo>RiZzmTO;L1iG1exo!;RsknZ0Ns4>!f#zmlKl>33e#sX6xEMz z*VE#i>KiA7*F+`8*idIPbcGGoqHG;Cti^;?Fiwo@$9x^HNxE`iNeOdIw6Kul$$Rtyk;xiY^2Oos-IzTSl~ZZ%!7Z$tIl6N z?f)oap8jEvggFX_fyMrU*Q~#tg1HCJ8~s<7?3)znEaaya)c@l0Mx2=jxkWb%d=R7{ z8hn8{qK|)B=m&jqt|kW1RL!UJSxL~YS;7s@sEpYQ9i`ETl zZ{mdte&NOZg+1{-vR2(K@jdE%Ez!sI9g=Qq+i^TO5Mdp!Xrep5!7vt@=bwe8{7dxv zt9|jv7v=A1q!>g^xiaEWLxX&*0c!Dw%Jlhxn!9FxUBL{GCM@L#A#B32tIc&F3p={* z{Vw=O{)T`TASos4=4uX~Wh>4id)@EzedU^({Hs{&YA{qc z{h0yJ*4C-PWxL%3zE}Kb5Zn4&jjdaleAgJhXzCr?FPeI=>0~m(d71I8iFq^oGRR8G z`o`n+qoj)cIQU%v^w!E~Q#_=OFx@(*0f1JHqNlG@4mHU)4Vv#kYvTk0>QhG8^4qKA zRAUdy3^JsUOjqc3B~8O!;uEjK20hf~^%xXL9DLEMV#n44)d!6$Ur8Cp!Nn-JYX-sw z6#PEXN8zHWtrdQNC|WAJST|Xf?@Pw>Ve6LMO%0U51><@Rpjb$#On!+*wr(6pS|^VJ8|2dAisAYm z<*z2-<*WI4-JWhSf43+f3NmQ?3|8+@e08FEw)#D^+KQ4F1$rGyiO|k%6!1MXc zDCpJNebgoS5DLffN+_NHy0i`w1I)U9^cS-(lP9uw)fOufi40Uo0-#wYJNE0a3__YzQV)0upzvEm6-O>$r~bs#uMdi-|PYoHb%v!5?6f zto2_4h@jjxGaHcQN|s&85{~4ThYvCPA#3R`1m`{uk<$O-Jnqt4XXw#Q3(w&xbF8J> z(u|J?6{t&wh{=WwfYWN?!k0%BU2ebMRjLQZp-1%@uHgUuSc-3mH};OMcw=o$3@dW{ z*$T-7ZXibhs}oSB9H2qX67t+zElbt8;{T!ygq z=TjE1@3wPOFrI*|lP3Nq8>L$(J~Pr`17G{?15w!3p!6GI8eeltHCX z1-Af9J4e`n7lD7;;_SxX8w!<%T4zzpQIy)n-)%#?#q!Bo@&rJ?$@I3q@MZ4VI@qQK zxi!|b=uTUlWk52wB@E%aT(1G*qDC1EJNO1oqAmUSbTqpO9k3|@pVwJl!@R+qc&wsv zmplefkJ#M(MU0%0fP>Uq%Fu3i6`=a?3%3V--dv9+7l+r$I#lj5PLYY)W)J=R24A3j zOl>mDFD?(}e?vnCiH=0^ql@>2jX~-a98`5~YpJU)bCVILVn|cq&G6F})9gcuU$-!5 zY+-w9sG(5_z5)49CM780Ae$0oNG0p5YF38)exP@Er`1s_Dht$Vp!x*$89jP9>z6UZ zXP&Gp=-I(&5#Q94IG=wRtCb%P7C)LsI(Q_SrY8q#(nf%gJs!F+n7oGAo^o?rXSw5% zam+l*(1wb*q0FOrC?EL};)g3L%^oxwQKPO3F;|}{`aU3f;mn_qed9VU7f*Bk6}%=M zF#A8^V@59Ku5pfA&8&IpPZ4|Pv*s3D6IUK$GE2)bRU4&Wqf5^C!C zZ%|ZtRB_aqsZir@Pl*?LB^Hwc>|N+BY>z>bW6iNTa7Me^f;&^8^XgIm7O5X2dnZ+^ zl%~d`;dv<)9q*+B;Tfx^@Murydq>w3`iyr{p!5PO`bHLJxLA^hoF^s{IX+^<|^@ z$8+?sBkA1og=m@)Yr)nLkDz|6?>5Z1rwGS^Wcr(4?zD=_4YD+bCRxQjS=twyB<4tQKrTs(qoQ>qm^7GJ;->qBnDNW5i7c`}=abfo^doB}StU znacicBZ%kPV(J}TTTHeJ+^ZUr+zqr{lfPLlK-6Egm|O^R9t{8U3KWe9B?mgxO{S=6 z;3N4xR~9%Ywlpk-zYoRXCtaw&CCBOUe$(&zN8!i-7U>t`P{e#QIk`oXB>Ms><=#@S z=XxjNe9_6q#tbcONT0@-&f6V{o;aTo0x!JnYPh2R{n)BJC=KSlTS(z}zB>I-OP zTxJ^Alw~IssFj17BZa135$7dDz%}`!S_*dyCM^I5M{1x?6e0jyb z4#ZDujc?s1F>D+-h4dF!Bm|Oo40vP-qsa03eTr5-F_MV`iTt1(n`)^CUEArSYrI;S zKc#+*gC$-ihPy?U%N1rdMce0{R1K5tw;@xuhV3n6w0}T;LpQASU=F4W_b~^lgcbx8 z*uEymovycPneI7W2fZRzBJpP@HWH2>3*gH#m*)?T0yeGP@ACRy0b>Qs}TLvM?xy88yhmGQA$AE_xH2 zFm+(EK#y^uHwp|*C{EuoU>UKNDjK+!;te_{tJWa_IBp7UH{f3GpebH9idGk*HmdF$ zA@sI1&AQQ!G?Qv4K*VBFiQ!UYb+zc2LQg2TwCHNA+`WWu9=_29^ zvC&2kPx-key(d+BocyYG=lFW;@vC(GA=Q_|3e}xv?8=(`^hzPJ%xF%kxZ4X6BPJJsDjk<9aU3cP6U6h%eIuA^L;0-A5)AHwrk@jQm+r21(os*=yDw80yGmK8qB zcwOd?WsYjIOg4v8c^=@f=2zw8Wo(e=?|lKmYL)jSH+O|g_|g(yyOPD-rA$Pcn?ko@Qh7!HG!J&)%?4w zdH!v&W0%56jYjH=wUCv4cRfS0YXI4z;n;{DVk2BuOKDR}hp#a#IYx@)TdunpE{Mcf zSJ0zG`#=8q1Vn1_=HAg2Z$@k4+&mbTlKxz&M~bk_nn$;1qiQa0h{rNG*^c7`?afhe zGOZRH#tt6q(+c!W&It`ov}$yGw^0zM)RtuRu>F+;t^VU|BCj3o4s>*zpd*SMi`yNi z%aEK`NOR2s;{18TrOS&Q>;6i|a)~E-$wY&)HTid@SM1B75E5N!X#%!4Q)A*G`$7`B zMu63Pu65YF(pPrydnv`PRWin@EmeW>p5lI3Fl{ap@4sn$~QWg&K{e=NYI__Ez$K~b7Rrly8f zvA~X2|EnhT8Z$pBZptB30Uoi9V7TtaAV3|)r@7+!O&Npu)o&?|XZ5V;;7o=sa#VM6 zl1c@L%cI8^s5=UxnsE9L$+vP`QP_a$QVma4JY+m3M-)+P4h_viMlLyXsIG4$tb(a! z?nNHjYa5m|>j2H`%Zds{@u7Nnj%h%dI7GU037v*AI&K!XEnszqp@x$qJ(#H@C;4>+ zvbj)3+4&IfD4X0>sCA7N`f0@=Kq6WS&bZudgFRCf}Z=+pnEH2BE66W#Kk zN`HJs6@$UPUA<~BtMcEzH;aKh6|Czt58H&K2134;~FOO%TTmhrk ziQ&wm1*9}F@aEoH8) zeo;Gaq`9nkE;N=nWz<~!lvnoUku^ba^Vo1bha<>_B4`b~rljQK1{@O`VZkZgSJMLb z-IO`3+!1c%#f?1t%zqsn&v51rFKFx?2NyJ=Le?odHF;SFoix(QG%3d;QAl^ZDwHlIz8G_8$T_yDvx@FeAeE`5DcSV*g`_Ci9ZiuF{O)+*_Q|Wzu=#f# zz`^MALhQoDN+Y^`j*kqEBjf1-*n1bU#jCMGjJ^Fs&OpY6%jkT0V(EHu>9TNK{K&l8SIDJ zWeLifKyVvURz2i&mZBzJ4~5yW-zi!M7L9J!qJ!wx3E~#p)runX#(OT$|W85j0v36p1EG`af9PUsFMh*H%HTgJbj?f?Jvn3r;xAt&6b^p37pC313$7-e(x z^CW$0quoZj9}=)Yi>R-3++|e1ETL;BYrG=b3|h2|9)#A-)M)szZ&xVYL=9e6raoI5 zg(D!&a&I@nyXJ3H&t~Xya)*L^F%199Ov7mvMI_p$SYVw)fk=EiR~JukEO2Mu|)xQ}> zEF@e~R7Mo~9FX*XVv_n)oS*X5M;CZDRf-`oI-TrWi~tJM=tNi7>gdnvs*gVv8t-iRb_^1xk9c;|{wCC226x2sr{+}@;C zSGnFF^E#`{Vl*}0bs=BVii+T<{4{ka9Q>Ow>*6=<5JQ^1x&cdn&*B!-6+>aSnBq&{ zx`Ks|Xd~Mefk_bKYW&&7{&ypQA3R~~9Y35fMivEWLJGeOiJzdEXsq`*J@TP}seqRX zJ-`Gk%h_Fe`ZilGHBjPa*wipdzSSVxaxEyf0CX)58T8mZ({6Vp4i@?K(7-j&DobiOfM{y zr>_fsWXuR%o?RgMD%xfgo5%A9JhR5jd?Sx@x#_PakE7ldOAdfN15}r)M2_*+?M(f`s6LrfxShj`Bu8G4-Tt|pF{MVJ z=Cwm>8J zK6HL3`M-3O;PKa(dq>wAGi@8_*tw8Sn&>lA(oP8sg96j6kDkuP-i+dI!Q1>E$_X|! zlt(D^`FO}a8|0zYxE^Na3Yq5xAa!K1xYO(|&a?DHgNVx-)$gskCD9vDvM;mh`Z*$& z;FtlMO#Kp+9cf*>*sxtY0g2O#HF;Yz4K1TDOZ8Y*#pVjJUeb;V?zR0KugK4U^2J|_ zgc@pgI|a>R<&sOeW|3>A1tUC{6k421ubRbWO1O8x&^K-?{>R9S4NMHrw4QNrEM*V#p&}LC(}0xy6H-mIM=&q4|E#aJDK-8hA8W) zOM3n*`fH$ey4sod5}W;J4j77-O{*>sU*Jz);2LxK>~i|C2CkOntZ+H={>X~kxcq)5 zCGS#8ri9N$6rPJH?qKx64XjBf^`Ux29`1J53IO@_xwHjJ5cBzS={||pYiaUeJ;NFtM6+6`MVb4ON&{c_uKBhJp4~% z)4iA1dM^(@uJn$s#}x=(CN8G3HI5(Wiw6`f@#b}tu$fe+RNr!oCiFsDHHJuwS}{R= zsfZp?MD18Z3{S#IL>##m6*eFOH?I<>3gy@F@`hYtQPr&#iY7fJZr~%$!-3}zQ^(7r z3ikf6oxZsWTb?zWu|~|d(KN`sgTlKCyR4dZxD#$Gz(jn1xf;>J8anRF-E>huM#r&| zUo^{kOB~;rHI-50YWl}OTDB6QlQdJg_eL&}`$8AY2`XjRkl`M=pnvgzP3zAp;ce{S zJT7fxhHbsBH2ej|Gy?Pi^1WQgsV!*pG>GJDw8%5D-jnopns>l;>V{N9s@8X{frWk| zwA&>RrnU-5Zn08kR?q6D+yFXxld!rn;{jmx>bH8e7?i}~?>FcwZBRLJf_4NtbI#*f2eV4{E^H|49b4IioL=N*z zd0-TMS1jHzyQKJF5NuNB`Fxr(UQ2j&P*gWahpybY`#N4(%G09|SoSX(C3xh&n0iOo zUrdoj0naj&PHkEO0Sr_F$|KRFJ-S&=HN{Ur@pQ6pAy{Uj=0SdiaO@Oom&yA!(?cfB z&9KOa&#Z-hY!=H6*ao$=({smIv!ih?nE?AX(5(jB&p!8#Z0xaO)O%xst68=_clL$& zjGxeOG8Nxp3)iuK^O%iiv?{%$%c>N2E`!QVeWRI{mdS_G=$J{}aJSM5J%(60kXsb>=B_$mE=KI$YjOdGRd6anTHcQh;8~gKY$HF_iuaMNf#* z_+%kbZlfX_PW5BXh`|y<#J0{>x^%C4W+zZ{E#mS7M2A+>=4Lr8f$rOe3$Ifg-6?+$ z0i!5KqA3o6ZTHfZcZulzbmu7ktmnSN@^FzlFGJmAqql7Qs0Qs!PLMBEVUGE(iuu;- zY;^5N{zYVi-}Cq@xTH5sKt~B+G3HMyS_-S+v}Qh1x@{JJKsC{CSvhNSe0@p=4D`r@V(kKLml6Gxi0#Cl3I!`sGLYUdqIafw_71Lt3FOQh z=q93|)X;=^=Gt-;BpN6SNZmSm#h}CwPfHVJZK%Q&oRzx`#JlK1jJSO<7*jIVq@K^A zWw$8+0V6NDn1$RMwIkUQ5qpDYh+?giE6e2aBW#eP<0&~hPp{d!qbE}EA;;HmqFW{G z6LFkVuY6G5K9tT5C}~7K6@2V=Ba79+aQw($aYR z($^z5DERn;$II698?2vGKfG@4eZwZ6$rVQ`)Gh0QthGP}0DhPle41W=JMXBr!^@mR zD^NJ{EbqjcGC@H z?uQF^^51G)>f{NX;WMV*(RBu5Z8_j6T+8D>q><%Ng#)YNi;>@tqG8r3oWrn$ziM>9 zT<(Z2OJZfxxLIzHG{xY3a+J29-guj#kw6zgNwGYJMsLN0{rzLK`p=Ms%O7N9i&I@5 zBc8Yo+oERE)?EWxk-F|BuDkz*j znj1s!xzYU5jTfh6Pp;J=92P9yfwON_qQftftlb{TtuI2qOpE@k%Vvv_Hi(;y;;Y<~ zta!pBAGlXfqphdK>1?sGN!{VnEmEIXdGi;o9iG(f2k=xlP2T%jzQ0*Deay^Ej34gRvm` zIv~OUqmTbpSMGTIbVrG~IN`LoH9e`+93II24PzmmrBdk~BP*2!%iO4O``y`2H-F`G71fezgUX zLJgvbHURI3Za7-E@Gtc$|FBZEpiYFZw;2j=(Y)4eJu;E1pe9e$`Z@58`?at$wDyvn z<=!b?r?($#0*GKS5U>DWq5RR!WW{!(Teno(q}x^IhX}O?fQd9VfEoR@?R9>Cb{1>J z2aIwq{)Z0$mAq8YmVm|qb1ad@@jMTw?;h#y<)zBwL1Q0 z9PRvPF)y6=LEwjxWk@NoB#tu2HIu7bOL#4fE)RKV0%ODe()yaadQMAU;z@Ah8gi4*frG9vnJQ9CJl2=6#DbrPNL+I& zB}LCfSr2K6t$=E4D%cvnNnA1|jsQR{A3S5f{K3S090qe7g862o=mh9$vlwXB4Z{NY z2s&5=lnW6pZj=yy0uuui;|4H08~IK;YEHxDj8k2=#=Jdbcqw`-p9ASHPmISGYFfH= zgyJDH&l(KbfhLba$-bT<%n5oZ|8B<2o?pvC{uHb-;!zXc5LfL`e4}O(Lm(u?n<3o< z#EX*MY{3QzT@u}m&^e6ih%(3Hoq%>kQyz0b!mi}3$Q#S@GdpAX58b4@PGUZP5Y;(v zIEMXJBN)SEnIXKu*gLi_F!tzk&%cb~aK>EOEzh+jJM*!@Y!X3(9v2?%)Qj=f^Pkf? z>tIcDt#LkZ@JwBv~2Hi;Q zz5V$dBL8Z|30m&cW2g6~9tX2=zPe_xw6F|7HH)hjDpI-DVCzwYw~0<8@mDal41mCqwSM`s$%gq~!)ow-X}{>JHHhzG>r^_T2jiy*jeW3(F6-77^Sd>( ziQ!eg21*DXBBR1mtJ*0OvlPv5K-ZfRV_n;( zAcl8PGd*CubOnRjE);UP6o|9^@)-lGE?&;SNK2TDo^Qz~6RVicK==x_dEMWbZW_R?=POEC zlF2>=V39f6USYOb!(j&MLhr9&lS>_^Y_Ruty4*Ir*Wi%0x=zsp3aUAORPrMsVrg!H zw$C@yakI_wiSo#I?BWuZ|LL!!Di=CATJ1kWoR{!3OSp@Lul(PS0Djh}^o}m05})7W z3ILYk#gpjsI2(zZsNI6ndc#smvJCC?HML>ch9$NLYYH{H=ou@0Y|sr#tMxbGB;?0L z(+RZ8Ga<6t@`SC4JN#ODJX2rDw~y^!Oa^|@n_zMx}>B2%p0y~CyYSj@QCK-46A zw4;UG=ahH+Kg7KWSd``d|9?No)GW_@ggdxrc!Y6gfDsS|7!_ey6a*AdRNQiR*ijgC z22eE3ElW#t$revqS-Ewx!qiTSrInSH?Ut67m8~aRPur>K_r9?>=ls9l>wA5dI{)js zudWIhm}j2nUOu1q`}MY4r7r>cL2@|s4X|dv6s?R>5yB0AqElR_&rXF*9S~@wn~bjZ zp(or+)e=k)C&A-@DIINxCVpB^>SLcEINcC6r&|Y3)w0w^H(O=XeXPlGwc%F2NR>vwvaFjGdc`8| z(~IJ8DECX5RFpYMD*4fhh5oeDF%uE>TmqIS~564PTU7)!g_%MGH)>W`$F-?f)g{{)~8-FYp)m7w$$rX1^!tJqOBjz!-P%7!}f-#rfCH`>*n(PdXJ z{Ra{Y^A9lp<0p0lv5Mjnv~QhgXokaMG@z5i?hKI(am)Qm^49(n;Y7j@PzUhz+&4;vnGJ9j@`NB zEr~PnkRYIv^pgd%d*Fn{F@U9(cEwYx>e}W_bcQZr|ISf`U-!1DXLP-7s{c7Xys#eN z6kN+|OE5dfrUQ@KiK?o|6*+0B1|s&+og-mvubN`9(Fb)5PCG3X(!B<{55SRl`YA_k zZE8-XwdhKhbsa_+btPlK|DR=P)35kOo!8+4V0uXzWpXPT)9P z#MX)H7{{E@Csm+F^+Y0!sFU7p^m*^+X*8N`PmL&(J~36CrgL4`hJI-^~A>z~^S- z$UEO$$r55#?k#6Lzf@47w7>$7Yr8e={0?T`Q96x@JIv-E{byNeF5|_yG|>YY5ASqI zM<1LTIR4U$9%~)$LF|$eKlMzaP_p7rR({8M=qpS-MW%lqT9L^EJXNaLqUX~_vmBbF z$GXX9c*OyII2<_}OQ{q>I!ZC&S%U!MlsgIJ2F$C{aZpG7ifL4C6n4auMio%8z%mK>-djqKN)S}Oo61bIGtICbT9h{Q@Kjuf7I2dJ zHzqBwO7yDYTTFDDB^)fR@8d-f*>@#Tu%`gN!sB2YtK-vi^ib$fRRZ5^(wy1&kA=cf zs@-Nvxpy#MTuR0AZ}tT##i&Z!uCkgRtqKqL99$U**3REVY=&!mo>i)tQ4}^j0q9jT zl8u#9y2byjR~7f=>b{^)ppgw2-jfzG`s-NDR)TIrP+1P_?9dAICx$gjB`Pu)q*K8a zZj3^LphR;#RT}%7S&g!x2SehlaviUFx;21U;q#po4t;gdsq zu#k}9;B*m~^W#F6@|-K}Q_oU$lm{n(!Z1|S=!6+@n%U|VVGx#yXZwM*i$FnyHWv2N zcJ^igB>(*GV+UR{%G@)$qReVxGt@~zz3rkg^qLC4uxo3&I4~}}xJg*X&|AY(_UNNv zFvPS%cX(}64YosGD5@8j_;I~d(}v+(;+OU|tRD@-Wjwc1z!w#KA*flRBY%G9H}!F$b6P5}TF z_g3jKHscV(;j4uX8@lz!v+`+0p6x!1HZc)1A^+UyTm$P(^O6>(6&YEj?rEGR(Z;{e ziY<%tT&7Z^n-63A&1FaH*^F0M^mH0us)svRf-~+j?K#5MOoN^@@w2Rcilc~-{!p#G zIfMH2<^#2e7KjxQuQp37j#)Ka30=XWufS|uPpf@+zVV;uuVB1SZ=5|oaRII>i9l^y z*icq>{;@E}suK9mbtdKgjtz?YN=BAGP-BO#WaqDBx+_DZ{Ep)jyjqvqGrGD|z8_sf zbVgcc^WO2{*whpx@Qr%e$O1cDn?X^gsFL;o7E&53;i6w!Y3T?&2fK%N!&JEwIomME zjT5KyczFz@6nm^_T|$FAD+zpc*qLzPggn5T+3i0tG>Z)x)Z2=PbAD*N9;O0bZb6X% z{>%0Ny{Y~x-RM}I;rTO8Q$`w@Z>t!gjE3UG{ITod1To00#Krvut6Wpodkm`I|KG>? z>C7-abep+nblqn5j_QY!>EpAdKxZ!9tcq+G#O{g#VH4gDtnlG3pm#gM>*gqS?S?tJ zBv842n4i#WFT|4EQjPLY`b68Y@v#-H^-ZW1__?*39yaT-*Abs);s$!Qnjfl0BNs)& zac)svjr#SEt^}E(BeR1*vs>wpD6DUQ&eUEJ<-;Bh#QGVN=x4L|B9T5dBOAsCM-_DE zHItM_1xt!T=?+3@XG?+-V}3(>y@2l3;)Lzh7~X3LHmKr>&cIz-*47GyhlAJB#AE!@ z2H@(KP@lk@_qs4qYBx0}NdM0Ti9f*#JgL&cY?mZKkwm}r0mQz z%RYK@K!m-ptaw~kCPT0j{_G}S*FXqJp_E3P#T{DJ+iW6Y8|RWwOR0!K6=kQ3u8WPp zCLK8DYh!23Q?xZ&?AqBNLElL$ z`lJks^DbgKzhjLoOKLY4@)sww=JJ887wXD1qnO$7D54(#}-#Up&|uHrZymkaeO5OP#Nugf`cEi7Fo4x|n{n z!vF;N4Hf2Q6(`d+T5Pi2s*jt3_N#3m|2dB}^NNA2UP;1-w8w|et3Ru>RU6O>X(VcX zK}^jkEw#}Nom4#lpU}sN+PrFIIdgMn);uFqwoKadXO*Av6uqLcM%%iTw#PDEe^Eo3 zAXoh1V>y1sC{xeq8f9Xm`N4D)k=m{b~IfwQR)r7 zp=%8zc#RRh-nNZ*RqN7}O7HE)$VbvY@h9d>_RYC_dKWFeno}*(}kl95CGeUoe0F zcVF@sve0#gp3!xkfsLnQYek0vp_F;^5n2o&(t=`D(lGe6D5}&Km$x?hu=xpA12v9o z48afWw}E8Y-q0TG2#=y$V{La|qs1-Y_vmq+gsM_B*`{PLKy>0)YW?y^UEs;HWwpkM zYd~SCasPxfXtX>!xmH5<5Z!=KMPDsVHsApZ?PtnDD5=T52lpQ`Xb$BiZKj78@*pkuYeEp@y<|qSXnq+;}Ead1C$wW z``iRMiD9x2;cIZ`z2KqLA;^>()JwV4JKiDBMK4X#?p8yGSj-`BJ;H`~%Le*nh*Y#WRJsuB`#&8o<41DUp3#-77MxBKLshal=(=cC0#s9;OA5CKd1eX7ATptG(nR-+V=-aJyvc-G0 z1UmS>{*w00$7a97x_r#=4gEQdmaT_3ua55-#{t56Ckh^S?J?MPn9#4ekW^9%MnAzhu63Bnw>Oi z11;Z4v#fYg(#Lc=(<^mziX4iPF`WfYv(WN?(>RJ>v`Fn4U5iwd=SMs&67E2~=@+AB zHL+pzsfjJ5TjJ@lhiIdThR-ICprbofh_QiVd##78JFMsp(EVn_MIvNAKh^esla!C!1`@n6Fh z7BTl!XZ4G0VKLL}Gx(Q(`s8Y69xlcwo)?O_%(;E~CnuS?xa<`Ac=l=(85T+}W{JJ< zbEapUwL{@}D6aVv0zQ0J>Qx+d0bDN@#>>dO zS}{I{=a{tM0*H_r=&#S%1~1^{#e7v;c%Xy7vw-j4iO+pDs%tRJDGO~MWQ!3i#0CRD zQLJ6Ol5TL&hmr)iU!~^zo;-tubLq#Vefw0n76SC41y&O56Pp)0X1c!^nM`g)(YIm~ zV46=!W*W7kJjA?DTXn%xxjA2Estm+{p+ErevtlQ736Y$y64@X#y^XbE2+g9^)iMCG@ zLbrz@Sd!8lpV|r*V_=*KG zp_P7m)KKg^xB%ang&jdEZC|g4rougg@x~K$&`m>P#Htn20I_xjCETC%E2$|JB{%Ke zIZ!;-qOr6gfkcc{k9XdzA~~y>rftZyXh~OK)BXN4;T}6ZaK(o2A+`6@q}_1upGem| zt@qh$c>OfmGM3hxkrh12={&}B&ElgD-mes4Aj@{s+o~(srSzw=H>8{>cd%!w;(E_4 za*5nXs3W!!*H%Ke8teAF9HU}&=ycA=7uye)MAFblN+wg)0siRgWpPSeRv`c>^uqHr zuz=p#s!d4*>`k-~Hn_Sf=e3W}Z729-Qc>En^Zw7$Dx+GD{j+V%8?p}c&=IAAV`d1_ zTUS8D99^!orJPFSH@xx8>i8OIZ$o?#5e59GSgiyZTb<~#43?}f)6q3=QalDk@?c(J=Lg1G*Vt75{Ckv=zR1w z#|A)Qf}^rV*kZ81s+mJqnxX;_0gMhPp!KLUaW`1`NZFdz?r+InctJBjWvrO5|t%Txz^IfF%DJB zbycP??Uxv>S_KSA;%kSSq!wE|WoCYdLyUMGRpI@K^vYJ;BO8=sQqN81Jnbcvaivr0 zj`g`f2u_J4H3LoV+Nsx6zm z7KCE}G*nWcoYy_0bh(&0RLqp(@!6x#mh(7i6zXr87@a!I*S+d zjw#cg%%_rgep$t!ztejo97BQ2UB5^QQ_LGEoLomXinj|Q`|=O2q#rg>)f3Lu1(7zb zUxKg!G*01_bIm=YE7$BqPCdLUXsU4A2D;zKueZ|e z$d)rX&l&k;TluZq`1<$4aZY*EKqG+(<2F%sZo`aIEbA7Q^%0}* z+QsdY=%ZVTZeTcn?Tjtzy9p}BZ&xyY=QiiYlUhKf80Wmv#l$gRq^dpJCu=v+ z$Kc`cYffwR=Fn-j5v(bI0qBKEba<2t@T1aBO7x&Yu2Ws>5@DJH6Z-yRa7skRz**ic|Ky8V> zv=nwiF?B(OxFAi|QbFbb>(-b zKeo(u_J3lpDApGnz=HzM8@dVzfUtg}GzN{jPwFM5<_nG07DV_;MHqg)g!?tM^$QlX zGYJ{h&AXs|Q6~2M*?+{pbUgY$hLd({8TaaIQQ*EHll@Qhj01c0j1U;wp=ZQG|FHfa zbkg>o#s>)eij%2XVBgEyjrXbr3Zs-rgP9 z?pR?Dbi*ehHH({&0i{rnU~s-N7*fs__aGLFHwz7M>wKjq8`4d@9|=yw-PamarbixZ zlQ>cPg><`AG+JT)fbhtNjQj4m9Z(Sms}SUWMSG?mfjklX9-0jY*DSp_HH(CODQlH<+?<#025B6B>0Ncz|_=e4rEyZ8&8V zrmM0eVc4kDW&^1zh1cCm5GdCSi=j$WVv%JbT1*IS4dT(0Ix4its{vZeym0dC$v0;uGZ;SYt!;(7^Dtxh zg8zhirELh0n>nvyS@I}YXwU=2lqppzi+6@>?2j1BZA?6G44pLfj4dZkNwQl6jTlON zK{}<6z)l6It4af|H0U~?8S#FB64%SOEsm>Ji9rTEknV}LUf>(liCc~4VcB?-6|KS6 z4v12VT7%fc7_HsCCiD$27LYY`MQd%+rtDHB4;+@|s0*qUsbGNyu$!NYvl{fLcG|5b zV3I@27zdtCngcBrrV}4+N5%l0M$y>#e57LOVMf@i8t^G8R{-c3;CCCaO~SbsD;Emm zL+k`oC-O6&R^d~uuA9@88o3&RgE=m%sp?~F&YOLFn;BJ<1A^5km!d|KWmbaIdgS(a zzmWI!D3Fu0*+?=#80_1aZKMWMCR(<1R*gVvVT0S5WBfPd72;PML1f{-^38t5*ZwI= z>SNn2+90W2=FA9aRA4Sm5Srb}uQ$cwF_AFqg?xW>lzlj)gE+Dnbp!M8z@v^0MF^fj z;FcT2ZVUNLGzOQpJ2;1I0F#+Zv3Hs<5Z?m*TVcfpJ%^WHEa)k8~owUMmo| zU{ccr2{NBDQLi`O%*~1;NZLN^%ApVY4S|5^A0=Sw3um8D(Gor)@Me^Ho|G;IZHT-3zZO~7JcO~pia-{I+Rj* zI6;BX86PVnNxFG#N8(k9Xd|5oIXkZ!RfMIt(S1V2!;ScvG@O`^CK$?OC+mL4!~~{n z=ZMC-*%X;c`z@i9tokG?k9LCs=?2viM94pEtimgon|j89ay&5sdd91J=XW)=7WvKM<#5xPP!3 zH8p?-M-gtlA4;kpx`AfHERgf2qGu7HUIK||^U3X|r~B*c@nWl>>~hUZMG|P8-`0Sd zvIui0NWmmL5P$_aC#O+-wp3bu7p+QH5Z`QJowlJ)E?Lj?PBhsB*_?EFHb0a`H>T_0 zP~{6#BWkc`Z&rYe(e?jFxnVD)lIh?qz%1URe28*SMF9`qIXS>Y(18A1qe3kwBRGXDb3Ia%GmId362|-Ydl*N!(!K+ zPX1GB(KMvO{hNkT82Z}OGrGPu)gO22VZY#WjNOil%3MAVF-S5us?&&4`^+?+Z;_li zm~2-#*bwdR9R6jtXv9H%8b~|>0-KS#l+0SPg2=bBUo z79rAm-^T23O!Ur z;^S1l*GPv9xB`!)^8R|BY2sr=gw($KdAm`|OpO4NugP!Q3!*ZAxY+jhqJQw{`2f_k zWZGGm5fF+|ChhuRxUXr0lP`6ECRf`!#I9UD(T1xdT{v0|RA0d$e=7%};4t4nFZeW& zF?hzCY=1+*oZq~ac9qDC?pq3)>_VZ$T4M0H7d z9!t(v#%Dz&aGxxFinl@ZY^3+qB)FQs%ws_j0zt∓s8jo!CRx@_1$ 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 z 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

vEu(y@Jvn8@W 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

VI1xECDzDwH>41rc7 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%0ARB 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�#l#MOEpxj~cYdNa878 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

4w>+3W+k(h-T@6t56$Q%|Fi)C>Qu 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%0ARh7P2V-@+5@fPgHE{I(8=S& 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 z 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 x>g=JDfTXa($-J!H+m>3_+L{_R2$8W8wg# Date: Tue, 14 Apr 2026 09:49:37 +0100 Subject: [PATCH 23/68] feat: migrate to vllm --- pyproject.toml | 1 - sweep/README.md | 39 +++++++-- sweep/infer.py | 165 +++++++++++++++++-------------------- sweep/infer/pyproject.toml | 17 ++++ sweep/master_config.yaml | 6 ++ sweep/sweep.py | 40 ++++++--- 6 files changed, 157 insertions(+), 111 deletions(-) create mode 100644 sweep/infer/pyproject.toml diff --git a/pyproject.toml b/pyproject.toml index f72bf6b..3c6adad 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -13,7 +13,6 @@ dependencies = [ "typer>=0.9.0", "matplotlib>=3.10.8", "pandas", - "peft", "pyyaml>=6.0.3", "scipy>=1.17.0", "seaborn>=0.13.2", diff --git a/sweep/README.md b/sweep/README.md index 6653835..c9f6ac9 100644 --- a/sweep/README.md +++ b/sweep/README.md @@ -3,9 +3,19 @@ 48 training runs × 3 epoch checkpoints = 144 data points across a grid of LoRA rank, learning rate, batch size, and target layer configurations. +## Environments + +Two separate uv environments are required to avoid the axolotl/vLLM +dependency conflict: + +| Environment | Location | Purpose | +|---|---|---| +| Training | `.venv/` (repo root) | axolotl fine-tuning via `sweep.py` | +| Inference | `sweep/infer/.venv/` | vLLM generation + PEFT loss via `infer.py` | + ## Setup on the H100 -**1. Clone the repo, install dependencies, and activate the venv** +**1. Clone the repo and install the training environment** ```bash git clone && cd voice @@ -13,13 +23,20 @@ uv sync source .venv/bin/activate ``` -**2. Set environment variables and log in** +**2. Install the inference environment** + +```bash +uv sync --project sweep/infer +``` + +This creates `sweep/infer/.venv/` with vLLM and PEFT. The sweep orchestrator +calls this environment automatically for every inference pass. + +**3. Set environment variables** ```bash export HF_TOKEN=hf_... export WANDB_API_KEY=... -hf auth login --token $HF_TOKEN -wandb login $WANDB_API_KEY ``` **4. Verify the grid looks correct** @@ -36,13 +53,17 @@ Start a tmux session so the sweep survives SSH disconnection: ```bash tmux new -s sweep cd sweep -python sweep.py -# Override GPU if needed (default is device 3): -# python sweep.py --device 0 +python sweep.py # default: GPUs 2,3 +python sweep.py --gpus 0 # single GPU +python sweep.py --gpus 0,1,2,3 # all four GPUs # Ctrl+B, D → detach (safe to close laptop) # tmux attach -t sweep → reconnect later ``` +Training automatically uses `accelerate launch` for multi-GPU runs and plain +`python -m axolotl.cli.train` for single-GPU runs. vLLM inference uses +`tensor_parallel_size` equal to the number of GPUs in all cases. + Progress is logged to `sweep.log` and to the W&B project `VOICE`. ## Resuming after failure @@ -57,7 +78,7 @@ python sweep.py ## Outputs Results are written to `outputs/results.parquet` after each training run -completes. Schema mirrors `pilot_results.parquet` used in the notebooks: +completes. Schema: | Column | Description | |---|---| @@ -65,7 +86,7 @@ completes. Schema mirrors `pilot_results.parquet` used in the notebooks: | `epoch` | Epoch number (1, 2, or 3) | | `learning_rate` | LoRA learning rate | | `lora_r` | LoRA rank | -| `lora_alpha` | LoRA alpha (= rank) | +| `lora_alpha` | LoRA alpha (= 2 × rank) | | `effective_batch_size` | Effective batch size | | `target_layers` | `attention` or `attention_mlp` | | `eval_loss` | Test NLL loss at this checkpoint | diff --git a/sweep/infer.py b/sweep/infer.py index b1e5006..af8188c 100644 --- a/sweep/infer.py +++ b/sweep/infer.py @@ -1,7 +1,11 @@ """Inference and test-loss script for a single fine-tuned checkpoint. -Loads the base model with LoRA adapter, runs batched generation on the Bush -test split, and computes token-weighted NLL loss over assistant turns only. +Generation uses vLLM with the LoRA adapter loaded via LoRARequest. vLLM +applies the model's built-in chat template and stops automatically on +<|eot_id|>, so no manual EOS token handling is required. + +Loss is computed with PyTorch/PEFT in a separate pass after the vLLM engine +is torn down to reclaim GPU memory. Outputs a single JSON object to stdout:: @@ -15,6 +19,7 @@ """ import argparse +import gc import json import os import sys @@ -25,6 +30,8 @@ from dotenv import load_dotenv from peft import PeftModel from transformers import AutoModelForCausalLM, AutoTokenizer +from vllm import LLM, SamplingParams +from vllm.lora.request import LoRARequest load_dotenv() @@ -32,7 +39,6 @@ DATASET = "AccelerateScience/bush-dataset" MAX_NEW_TOKENS = 1024 TEMPERATURE = 0.7 -GEN_BATCH_SIZE = 8 LOSS_BATCH_SIZE = 16 @@ -64,103 +70,65 @@ def _apply_template( return list(ids) -def load_model_and_tokenizer( +def vllm_generate( checkpoint: str, - hf_token: str, -) -> tuple[Any, Any]: - """Load the base model with LoRA adapter from a checkpoint directory. - - :param checkpoint: path to the epoch checkpoint directory. - :param hf_token: HuggingFace API token for private model access. - :returns: (model, tokenizer) tuple ready for inference. - """ - _log(f"Loading tokenizer from {BASE_MODEL}") - tokenizer = AutoTokenizer.from_pretrained(BASE_MODEL, token=hf_token) - if tokenizer.pad_token is None: - tokenizer.pad_token = tokenizer.eos_token - - _log("Loading base model") - base = AutoModelForCausalLM.from_pretrained( - BASE_MODEL, - torch_dtype=torch.bfloat16, - device_map="auto", - token=hf_token, - ) - - _log(f"Loading LoRA adapter from {checkpoint}") - model = PeftModel.from_pretrained(base, checkpoint) - model.eval() - return model, tokenizer - - -def batched_generate( - model: Any, - tokenizer: Any, examples: list[dict[str, Any]], ) -> list[str]: - """Run batched generation over all examples. + """Run batched generation with vLLM and the LoRA adapter. - Prompts are left-padded so all sequences in a batch end at the same - position, which is required for correct batched generation. + The vLLM engine is torn down and GPU memory freed before returning so + the subsequent PyTorch loss pass can load the model cleanly. - :param model: fine-tuned model (base + LoRA adapter). - :param tokenizer: tokenizer matching the base model. + :param checkpoint: path to the LoRA adapter checkpoint directory. :param examples: list of dataset examples from the test split. :returns: list of generated response strings, one per example. """ - responses: list[str] = [] - pad_id = tokenizer.pad_token_id - - # Llama 3.1 chat template ends turns with <|eot_id|> (128009), not - # <|end_of_text|> (128001). Both must be EOS terminators. - eot_id = tokenizer.convert_tokens_to_ids("<|eot_id|>") - eos_ids = list({tokenizer.eos_token_id, eot_id}) + cuda_devices = os.environ.get("CUDA_VISIBLE_DEVICES", "0") + n_gpus = len([d for d in cuda_devices.split(",") if d.strip()]) + _log(f"Loading vLLM engine on {n_gpus} GPU(s) (CUDA_VISIBLE_DEVICES={cuda_devices!r})") + llm = LLM( + model=BASE_MODEL, + enable_lora=True, + max_lora_rank=32, + dtype="bfloat16", + max_model_len=2048, + tensor_parallel_size=n_gpus, + ) - for start in range(0, len(examples), GEN_BATCH_SIZE): - batch = examples[start : start + GEN_BATCH_SIZE] + lora_request = LoRARequest("adapter", 1, checkpoint) + sampling_params = SamplingParams( + temperature=TEMPERATURE, + max_tokens=MAX_NEW_TOKENS, + ) - prompt_ids_list = [ - _apply_template(tokenizer, ex["messages"][:-1], add_generation_prompt=True) - for ex in batch - ] - max_len = max(len(ids) for ids in prompt_ids_list) - - # Left-pad so all prompts end at the same position - input_ids = torch.tensor( - [[pad_id] * (max_len - len(ids)) + ids for ids in prompt_ids_list], - dtype=torch.long, - ).to(model.device) - attention_mask = torch.tensor( - [[0] * (max_len - len(ids)) + [1] * len(ids) for ids in prompt_ids_list], - dtype=torch.long, - ).to(model.device) + # Strip the final assistant turn — the model generates it. + chat_prompts = [ + [m for m in ex["messages"] if m["role"] != "assistant"] + for ex in examples + ] - with torch.no_grad(): - output_ids = model.generate( - input_ids=input_ids, - attention_mask=attention_mask, - max_new_tokens=MAX_NEW_TOKENS, - do_sample=True, - temperature=TEMPERATURE, - pad_token_id=tokenizer.eos_token_id, - eos_token_id=eos_ids, - ) + _log(f"Generating {len(examples)} completions") + outputs = llm.chat( + chat_prompts, + sampling_params, + lora_request=lora_request, + use_tqdm=False, + ) + responses = [o.outputs[0].text for o in outputs] - for ids in output_ids: - new_ids = ids[max_len:] - responses.append(tokenizer.decode(new_ids, skip_special_tokens=True)) + for resp in responses[:3]: + _log(f" [sample] {resp!r}") - _log( - f" [gen] {min(start + GEN_BATCH_SIZE, len(examples))}" - f"/{len(examples)}" - ) - _log(f" [sample] {responses[-1][:200]!r}") + del llm + gc.collect() + torch.cuda.empty_cache() + _log("vLLM engine freed") return responses -def batched_loss( - model: Any, +def pytorch_loss( + checkpoint: str, tokenizer: Any, examples: list[dict[str, Any]], ) -> float: @@ -169,11 +137,20 @@ def batched_loss( Loss is computed only over assistant tokens; prompt and padding tokens are masked with -100. - :param model: fine-tuned model (base + LoRA adapter). + :param checkpoint: path to the LoRA adapter checkpoint directory. :param tokenizer: tokenizer matching the base model. :param examples: list of dataset examples from the test split. :returns: token-weighted average NLL loss across all examples. """ + _log(f"Loading base model + LoRA from {checkpoint}") + base = AutoModelForCausalLM.from_pretrained( + BASE_MODEL, + torch_dtype=torch.bfloat16, + device_map="auto", + ) + model = PeftModel.from_pretrained(base, checkpoint) + model.eval() + total_loss = 0.0 total_tokens = 0 @@ -185,13 +162,16 @@ def batched_loss( for ex in batch ] prompt_lens = [ - len(_apply_template(tokenizer, ex["messages"][:-1], add_generation_prompt=True)) + len( + _apply_template( + tokenizer, ex["messages"][:-1], add_generation_prompt=True + ) + ) for ex in batch ] max_len = max(len(ids) for ids in full_ids_list) pad_id = tokenizer.pad_token_id - # Right-pad full sequences; labels mask prompt + padding with -100 input_ids = torch.zeros(len(batch), max_len, dtype=torch.long) attention_mask = torch.zeros(len(batch), max_len, dtype=torch.long) labels = torch.full((len(batch), max_len), -100, dtype=torch.long) @@ -236,7 +216,7 @@ def batched_loss( def main() -> None: - """Parse arguments, run batched inference and loss, print JSON. + """Parse arguments, run generation then loss, print JSON. :returns: None """ @@ -244,7 +224,7 @@ def main() -> None: parser.add_argument( "--checkpoint", required=True, - help="Path to epoch checkpoint directory", + help="Path to epoch checkpoint directory (LoRA adapter)", ) args = parser.parse_args() @@ -252,7 +232,10 @@ def main() -> None: os.environ.get("HF_TOKEN") or os.environ.get("HUGGINGFACE_TOKEN") or "" ) - model, tokenizer = load_model_and_tokenizer(args.checkpoint, hf_token) + _log(f"Loading tokenizer from {BASE_MODEL}") + tokenizer = AutoTokenizer.from_pretrained(BASE_MODEL, token=hf_token) + if tokenizer.pad_token is None: + tokenizer.pad_token = tokenizer.eos_token _log(f"Loading test split from {DATASET}") ds = load_dataset(DATASET, split="test", token=hf_token) @@ -260,10 +243,10 @@ def main() -> None: _log(f"Loaded {len(examples)} examples") _log("Generation pass") - responses = batched_generate(model, tokenizer, examples) + responses = vllm_generate(args.checkpoint, examples) _log("Loss pass") - eval_loss = batched_loss(model, tokenizer, examples) + eval_loss = pytorch_loss(args.checkpoint, tokenizer, examples) completions: list[dict[str, Any]] = [ { diff --git a/sweep/infer/pyproject.toml b/sweep/infer/pyproject.toml new file mode 100644 index 0000000..de8ead5 --- /dev/null +++ b/sweep/infer/pyproject.toml @@ -0,0 +1,17 @@ +[project] +name = "voice-infer" +version = "0.1.0" +description = "Inference environment for the pilot sweep (vLLM + PEFT)" +requires-python = ">=3.12,<3.13" +dependencies = [ + "vllm>=0.11.0 ; sys_platform == 'linux'", + "peft", + "transformers", + "datasets>=4.5.0", + "python-dotenv", +] + +# vLLM only ships GPU wheels for Linux; enforce this so uv does not attempt +# to resolve a CPU-only environment on the developer's machine. +[tool.uv] +required-environments = ["sys_platform == 'linux'"] diff --git a/sweep/master_config.yaml b/sweep/master_config.yaml index e4b6c73..1f03b85 100644 --- a/sweep/master_config.yaml +++ b/sweep/master_config.yaml @@ -48,6 +48,12 @@ axolotl: roles_to_train: - assistant train_on_eos: last + # Llama 3.1's chat template ends turns with <|eot_id|> (128009), not + # <|end_of_text|> (128001). Without this, axolotl defaults eot_tokens + # to eos_token (<|end_of_text|>) which never appears in the sequence, so + # train_on_eos: last silently does nothing and the model is never trained + # to predict its stop token. + eot_tokens: ["<|eot_id|>"] hf_use_auth_token: true diff --git a/sweep/sweep.py b/sweep/sweep.py index 2241cbe..ce6b054 100644 --- a/sweep/sweep.py +++ b/sweep/sweep.py @@ -38,6 +38,11 @@ MASTER_CONFIG = SWEEP_DIR / "master_config.yaml" LOG_FILE = SWEEP_DIR / "sweep.log" +# Python executable for the inference environment (vLLM + PEFT). +# Create it once on the target machine with: +# uv sync --project sweep/infer +INFER_PYTHON = SWEEP_DIR / "infer" / ".venv" / "bin" / "python" + # Fixed micro batch size; gradient_accumulation_steps derived from # the effective_batch_size sweep axis. MICRO_BATCH_SIZE: int = 4 @@ -184,14 +189,29 @@ def find_epoch_checkpoints(run_name: str) -> dict[int, Path]: def run_training(config_path: Path) -> None: """Launch axolotl training for the given config. + Uses ``accelerate launch`` for multi-GPU runs so that DDP is set up + correctly; falls back to a plain ``python -m axolotl.cli.train`` for + single-GPU runs. The number of processes is derived from the + ``CUDA_VISIBLE_DEVICES`` environment variable set by ``main()``. + :param config_path: path to the per-run axolotl YAML config. :returns: None """ - log.info(f"Training: axolotl train {config_path.name}") - subprocess.run( - [sys.executable, "-m", "axolotl.cli.train", str(config_path)], - check=True, - ) + cuda_devices = os.environ.get("CUDA_VISIBLE_DEVICES", "0") + n_gpus = len([d for d in cuda_devices.split(",") if d.strip()]) + + if n_gpus > 1: + cmd = [ + sys.executable, "-m", "accelerate.commands.launch", + f"--num_processes={n_gpus}", + "-m", "axolotl.cli.train", + str(config_path), + ] + else: + cmd = [sys.executable, "-m", "axolotl.cli.train", str(config_path)] + + log.info(f"Training on {n_gpus} GPU(s): {config_path.name}") + subprocess.run(cmd, check=True) # --------------------------------------------------------------------------- @@ -205,7 +225,7 @@ def run_inference(checkpoint_path: Path) -> dict[str, Any]: """ proc = subprocess.run( [ - sys.executable, + str(INFER_PYTHON), str(SWEEP_DIR / "infer.py"), "--checkpoint", str(checkpoint_path), @@ -313,13 +333,13 @@ def main() -> None: help="Print the full grid without training", ) parser.add_argument( - "--device", - default="3", - help="CUDA device index (default: 3)", + "--gpus", + default="2,3", + help="Comma-separated CUDA device indices (default: 2,3)", ) args = parser.parse_args() - os.environ["CUDA_VISIBLE_DEVICES"] = args.device + os.environ["CUDA_VISIBLE_DEVICES"] = args.gpus setup_logging() From 6290698d874d973b802831ef1da980bbfd052cb7 Mon Sep 17 00:00:00 2001 From: Fin Griffin Date: Tue, 14 Apr 2026 10:02:00 +0100 Subject: [PATCH 24/68] chore: fix run --- sweep/infer.py | 7 +++++-- sweep/master_config.yaml | 3 +++ sweep/sweep.py | 2 ++ 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/sweep/infer.py b/sweep/infer.py index af8188c..85eb0eb 100644 --- a/sweep/infer.py +++ b/sweep/infer.py @@ -86,6 +86,9 @@ def vllm_generate( cuda_devices = os.environ.get("CUDA_VISIBLE_DEVICES", "0") n_gpus = len([d for d in cuda_devices.split(",") if d.strip()]) _log(f"Loading vLLM engine on {n_gpus} GPU(s) (CUDA_VISIBLE_DEVICES={cuda_devices!r})") + # vLLM v1's multiproc executor defaults to fork, which breaks CUDA/NCCL + # initialisation for tensor-parallel runs. Spawn is required. + os.environ.setdefault("VLLM_WORKER_MULTIPROC_METHOD", "spawn") llm = LLM( model=BASE_MODEL, enable_lora=True, @@ -234,8 +237,8 @@ def main() -> None: _log(f"Loading tokenizer from {BASE_MODEL}") tokenizer = AutoTokenizer.from_pretrained(BASE_MODEL, token=hf_token) - if tokenizer.pad_token is None: - tokenizer.pad_token = tokenizer.eos_token + # Match the pad token axolotl sets during training. + tokenizer.pad_token = "<|eot_id|>" _log(f"Loading test split from {DATASET}") ds = load_dataset(DATASET, split="test", token=hf_token) diff --git a/sweep/master_config.yaml b/sweep/master_config.yaml index 1f03b85..9b9f9b8 100644 --- a/sweep/master_config.yaml +++ b/sweep/master_config.yaml @@ -55,6 +55,9 @@ axolotl: # to predict its stop token. eot_tokens: ["<|eot_id|>"] + special_tokens: + pad_token: "<|eot_id|>" + hf_use_auth_token: true # Llama 3.1 Instruct ships with its own Jinja chat template in the diff --git a/sweep/sweep.py b/sweep/sweep.py index ce6b054..449b299 100644 --- a/sweep/sweep.py +++ b/sweep/sweep.py @@ -204,6 +204,8 @@ def run_training(config_path: Path) -> None: cmd = [ sys.executable, "-m", "accelerate.commands.launch", f"--num_processes={n_gpus}", + "--mixed_precision=no", # axolotl/HF Trainer handles bf16 itself + "--dynamo_backend=no", "-m", "axolotl.cli.train", str(config_path), ] From 0f2ddd762989e21aa15e29e0060525bc26eb01ad Mon Sep 17 00:00:00 2001 From: Fin Griffin Date: Tue, 14 Apr 2026 10:09:37 +0100 Subject: [PATCH 25/68] fix 3 --- sweep/infer.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/sweep/infer.py b/sweep/infer.py index 85eb0eb..0ba783e 100644 --- a/sweep/infer.py +++ b/sweep/infer.py @@ -86,9 +86,12 @@ def vllm_generate( cuda_devices = os.environ.get("CUDA_VISIBLE_DEVICES", "0") n_gpus = len([d for d in cuda_devices.split(",") if d.strip()]) _log(f"Loading vLLM engine on {n_gpus} GPU(s) (CUDA_VISIBLE_DEVICES={cuda_devices!r})") - # vLLM v1's multiproc executor defaults to fork, which breaks CUDA/NCCL - # initialisation for tensor-parallel runs. Spawn is required. - os.environ.setdefault("VLLM_WORKER_MULTIPROC_METHOD", "spawn") + # The vLLM v1 engine is unstable with tensor-parallel + LoRA in this + # version. Force the v0 engine which has well-tested support for both. + # Also force spawn (not fork) for the v0 multiproc executor so CUDA/NCCL + # initialises cleanly across workers. + os.environ["VLLM_USE_V1"] = "0" + os.environ["VLLM_WORKER_MULTIPROC_METHOD"] = "spawn" llm = LLM( model=BASE_MODEL, enable_lora=True, From a3357c00e657e8fde86ebd296e3703ae7b2379f6 Mon Sep 17 00:00:00 2001 From: Fin Griffin Date: Tue, 14 Apr 2026 10:19:07 +0100 Subject: [PATCH 26/68] chore anotehr fix --- sweep/infer.py | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/sweep/infer.py b/sweep/infer.py index 0ba783e..03ff42d 100644 --- a/sweep/infer.py +++ b/sweep/infer.py @@ -25,6 +25,12 @@ import sys from typing import Any +# Must be set before vllm is imported — vllm reads these at import time. +# v0 engine has stable LoRA + tensor-parallel support; v1 does not. +# spawn (not fork) avoids CUDA/NCCL re-init issues across worker processes. +os.environ["VLLM_USE_V1"] = "0" +os.environ["VLLM_WORKER_MULTIPROC_METHOD"] = "spawn" + import torch from datasets import load_dataset from dotenv import load_dotenv @@ -86,12 +92,6 @@ def vllm_generate( cuda_devices = os.environ.get("CUDA_VISIBLE_DEVICES", "0") n_gpus = len([d for d in cuda_devices.split(",") if d.strip()]) _log(f"Loading vLLM engine on {n_gpus} GPU(s) (CUDA_VISIBLE_DEVICES={cuda_devices!r})") - # The vLLM v1 engine is unstable with tensor-parallel + LoRA in this - # version. Force the v0 engine which has well-tested support for both. - # Also force spawn (not fork) for the v0 multiproc executor so CUDA/NCCL - # initialises cleanly across workers. - os.environ["VLLM_USE_V1"] = "0" - os.environ["VLLM_WORKER_MULTIPROC_METHOD"] = "spawn" llm = LLM( model=BASE_MODEL, enable_lora=True, @@ -99,6 +99,10 @@ def vllm_generate( dtype="bfloat16", max_model_len=2048, tensor_parallel_size=n_gpus, + # Disable CUDA graph capture and torch.compile/inductor AOT compilation. + # The server lacks python3.12-dev headers, which Triton needs to compile + # cuda_utils.c; enforce_eager bypasses that compilation entirely. + enforce_eager=True, ) lora_request = LoRARequest("adapter", 1, checkpoint) From 11eef81d1d2afc91da4e19018971d06efb0ea2f5 Mon Sep 17 00:00:00 2001 From: Fin Griffin Date: Tue, 14 Apr 2026 10:23:17 +0100 Subject: [PATCH 27/68] jdkansjn --- sweep/infer.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/sweep/infer.py b/sweep/infer.py index 03ff42d..f6a1136 100644 --- a/sweep/infer.py +++ b/sweep/infer.py @@ -25,10 +25,14 @@ import sys from typing import Any -# Must be set before vllm is imported — vllm reads these at import time. -# v0 engine has stable LoRA + tensor-parallel support; v1 does not. +# Must be set before torch/vllm are imported — read at import/init time. +# Disable torch.compile globally: vLLM's vocab_parallel_embedding has a +# @torch.compile'd function (get_masked_input_and_mask) that invokes Triton, +# which tries to compile cuda_utils.c via gcc and needs python3.12-dev headers +# that are not installed on this server. TORCHDYNAMO_DISABLE=1 makes all +# @torch.compile decorators fall back to eager execution. +os.environ["TORCHDYNAMO_DISABLE"] = "1" # spawn (not fork) avoids CUDA/NCCL re-init issues across worker processes. -os.environ["VLLM_USE_V1"] = "0" os.environ["VLLM_WORKER_MULTIPROC_METHOD"] = "spawn" import torch @@ -99,10 +103,6 @@ def vllm_generate( dtype="bfloat16", max_model_len=2048, tensor_parallel_size=n_gpus, - # Disable CUDA graph capture and torch.compile/inductor AOT compilation. - # The server lacks python3.12-dev headers, which Triton needs to compile - # cuda_utils.c; enforce_eager bypasses that compilation entirely. - enforce_eager=True, ) lora_request = LoRARequest("adapter", 1, checkpoint) From f0692417f3a7a7250fd0b921cb9c262fe65c4152 Mon Sep 17 00:00:00 2001 From: Fin Griffin Date: Tue, 14 Apr 2026 10:28:26 +0100 Subject: [PATCH 28/68] ijas --- sweep/infer.py | 10 +++------- sweep/infer/pyproject.toml | 4 ++++ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/sweep/infer.py b/sweep/infer.py index f6a1136..4a83a69 100644 --- a/sweep/infer.py +++ b/sweep/infer.py @@ -25,13 +25,6 @@ import sys from typing import Any -# Must be set before torch/vllm are imported — read at import/init time. -# Disable torch.compile globally: vLLM's vocab_parallel_embedding has a -# @torch.compile'd function (get_masked_input_and_mask) that invokes Triton, -# which tries to compile cuda_utils.c via gcc and needs python3.12-dev headers -# that are not installed on this server. TORCHDYNAMO_DISABLE=1 makes all -# @torch.compile decorators fall back to eager execution. -os.environ["TORCHDYNAMO_DISABLE"] = "1" # spawn (not fork) avoids CUDA/NCCL re-init issues across worker processes. os.environ["VLLM_WORKER_MULTIPROC_METHOD"] = "spawn" @@ -103,6 +96,9 @@ def vllm_generate( dtype="bfloat16", max_model_len=2048, tensor_parallel_size=n_gpus, + # Skip vLLM's AOT compilation pipeline — reduces startup overhead for + # the sweep's 144 sequential inference runs. + enforce_eager=True, ) lora_request = LoRARequest("adapter", 1, checkpoint) diff --git a/sweep/infer/pyproject.toml b/sweep/infer/pyproject.toml index de8ead5..952ce4d 100644 --- a/sweep/infer/pyproject.toml +++ b/sweep/infer/pyproject.toml @@ -15,3 +15,7 @@ dependencies = [ # to resolve a CPU-only environment on the developer's machine. [tool.uv] required-environments = ["sys_platform == 'linux'"] +# Use uv's own managed Python (not system Python) — uv bundles the full Python +# distribution including dev headers, which Triton needs to compile cuda_utils.c. +# System Python 3.12 on this host lacks python3.12-dev headers. +python-preference = "managed" From 40ab15673c1293ec68dc042e345c2087e9d2ec25 Mon Sep 17 00:00:00 2001 From: Fin Griffin Date: Tue, 14 Apr 2026 10:36:12 +0100 Subject: [PATCH 29/68] chore: downgrade vllm --- sweep/infer.py | 6 ------ sweep/infer/pyproject.toml | 2 +- 2 files changed, 1 insertion(+), 7 deletions(-) diff --git a/sweep/infer.py b/sweep/infer.py index 4a83a69..7c7688d 100644 --- a/sweep/infer.py +++ b/sweep/infer.py @@ -25,9 +25,6 @@ import sys from typing import Any -# spawn (not fork) avoids CUDA/NCCL re-init issues across worker processes. -os.environ["VLLM_WORKER_MULTIPROC_METHOD"] = "spawn" - import torch from datasets import load_dataset from dotenv import load_dotenv @@ -96,9 +93,6 @@ def vllm_generate( dtype="bfloat16", max_model_len=2048, tensor_parallel_size=n_gpus, - # Skip vLLM's AOT compilation pipeline — reduces startup overhead for - # the sweep's 144 sequential inference runs. - enforce_eager=True, ) lora_request = LoRARequest("adapter", 1, checkpoint) diff --git a/sweep/infer/pyproject.toml b/sweep/infer/pyproject.toml index 952ce4d..9bf926b 100644 --- a/sweep/infer/pyproject.toml +++ b/sweep/infer/pyproject.toml @@ -4,7 +4,7 @@ version = "0.1.0" description = "Inference environment for the pilot sweep (vLLM + PEFT)" requires-python = ">=3.12,<3.13" dependencies = [ - "vllm>=0.11.0 ; sys_platform == 'linux'", + "vllm==0.11.0 ; sys_platform == 'linux'", "peft", "transformers", "datasets>=4.5.0", From 75fdb01515f17dae58c2349678591d460e363564 Mon Sep 17 00:00:00 2001 From: Fin Griffin Date: Tue, 14 Apr 2026 10:45:08 +0100 Subject: [PATCH 30/68] fix transformers version --- sweep/infer/pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sweep/infer/pyproject.toml b/sweep/infer/pyproject.toml index 9bf926b..b05b2e0 100644 --- a/sweep/infer/pyproject.toml +++ b/sweep/infer/pyproject.toml @@ -6,7 +6,7 @@ requires-python = ">=3.12,<3.13" dependencies = [ "vllm==0.11.0 ; sys_platform == 'linux'", "peft", - "transformers", + "transformers==4.57.1", "datasets>=4.5.0", "python-dotenv", ] From b0b878f35827d36ce2c82c70ee136aa36c5579e8 Mon Sep 17 00:00:00 2001 From: Fin Griffin Date: Tue, 14 Apr 2026 10:49:45 +0100 Subject: [PATCH 31/68] chore --- sweep/infer.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/sweep/infer.py b/sweep/infer.py index 7c7688d..2b525ef 100644 --- a/sweep/infer.py +++ b/sweep/infer.py @@ -25,6 +25,17 @@ import sys from typing import Any +# Must be set before torch/triton are imported. +# vLLM 0.11.0 with enforce_eager=True disables vLLM's own compilation wrapper +# (compilation level → NONE), but PyTorch still has @torch.compile on +# get_masked_input_and_mask in vocab_parallel_embedding.py. That function +# tries to run inductor → triton, which compiles cuda_utils.c via gcc and +# needs python3.12-dev headers not installed on this server. +# TORCHDYNAMO_DISABLE=1 makes all @torch.compile decorators fall back to +# eager execution. With enforce_eager=True, vLLM's own aot_compile path is +# also disabled, so TORCHDYNAMO_DISABLE doesn't break anything. +os.environ["TORCHDYNAMO_DISABLE"] = "1" + import torch from datasets import load_dataset from dotenv import load_dotenv @@ -93,6 +104,10 @@ def vllm_generate( dtype="bfloat16", max_model_len=2048, tensor_parallel_size=n_gpus, + # Disable vLLM's torch.compile wrapper (compilation level → NONE). + # Combined with TORCHDYNAMO_DISABLE above this avoids all Triton + # compilation, which requires python3.12-dev headers not on this server. + enforce_eager=True, ) lora_request = LoRARequest("adapter", 1, checkpoint) From 042dd16a9e028c844c44577fe1aab6c19fc711c5 Mon Sep 17 00:00:00 2001 From: Fin Griffin Date: Tue, 14 Apr 2026 14:20:15 +0100 Subject: [PATCH 32/68] migrate to online vllm --- pyproject.toml | 2 + sweep/README.md | 59 ++++--- sweep/infer.py | 310 ++++++++++--------------------------- sweep/infer/pyproject.toml | 21 --- sweep/master_config.yaml | 16 +- sweep/sweep.py | 121 +++++++++++---- 6 files changed, 226 insertions(+), 303 deletions(-) delete mode 100644 sweep/infer/pyproject.toml diff --git a/pyproject.toml b/pyproject.toml index 3c6adad..b68b2bc 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -9,6 +9,8 @@ dependencies = [ "axolotl @ git+https://github.com/axolotl-ai-cloud/axolotl.git@v0.16.1 ; sys_platform == 'linux'", "datasets>=4.5.0", "dotenv>=0.9.9", + "openai", + "requests", "huggingface-hub>=1.4.1", "typer>=0.9.0", "matplotlib>=3.10.8", diff --git a/sweep/README.md b/sweep/README.md index c9f6ac9..b75a420 100644 --- a/sweep/README.md +++ b/sweep/README.md @@ -3,19 +3,20 @@ 48 training runs × 3 epoch checkpoints = 144 data points across a grid of LoRA rank, learning rate, batch size, and target layer configurations. -## Environments +Validation loss is computed by axolotl after each epoch (stored in +`trainer_state.json`). Completions are generated via a persistent vLLM +Docker server on a dedicated GPU. -Two separate uv environments are required to avoid the axolotl/vLLM -dependency conflict: +## GPU layout -| Environment | Location | Purpose | -|---|---|---| -| Training | `.venv/` (repo root) | axolotl fine-tuning via `sweep.py` | -| Inference | `sweep/infer/.venv/` | vLLM generation + PEFT loss via `infer.py` | +| GPU | Role | +|---|---| +| `2` | axolotl training (`sweep.py`) | +| `3` | vLLM Docker server (persistent, started once before sweep) | ## Setup on the H100 -**1. Clone the repo and install the training environment** +**1. Clone the repo and install the environment** ```bash git clone && cd voice @@ -23,14 +24,31 @@ uv sync source .venv/bin/activate ``` -**2. Install the inference environment** +**2. Start the vLLM Docker server on GPU 3 (one-time)** ```bash -uv sync --project sweep/infer +docker run -d --name vllm-sweep \ + --runtime nvidia \ + -e NVIDIA_VISIBLE_DEVICES=3 \ + --gpus device=3 \ + -p 127.0.0.1:8000:8000 \ + -v "$PWD/sweep/checkpoints:/checkpoints:ro" \ + vllm/vllm-openai:v0.9.0 \ + --model meta-llama/Llama-3.1-8B-Instruct \ + --enable-lora \ + --max-lora-rank 32 \ + --dtype bfloat16 \ + --max-model-len 2048 \ + --port 8000 ``` -This creates `sweep/infer/.venv/` with vLLM and PEFT. The sweep orchestrator -calls this environment automatically for every inference pass. +The container mounts `sweep/checkpoints` at `/checkpoints` (read-only). +Wait for the server to be healthy before starting the sweep: + +```bash +docker logs -f vllm-sweep # wait for "Application startup complete" +curl http://localhost:8000/health +``` **3. Set environment variables** @@ -53,16 +71,17 @@ Start a tmux session so the sweep survives SSH disconnection: ```bash tmux new -s sweep cd sweep -python sweep.py # default: GPUs 2,3 -python sweep.py --gpus 0 # single GPU -python sweep.py --gpus 0,1,2,3 # all four GPUs +python sweep.py # GPU 2 for training, localhost:8000 for vLLM # Ctrl+B, D → detach (safe to close laptop) # tmux attach -t sweep → reconnect later ``` -Training automatically uses `accelerate launch` for multi-GPU runs and plain -`python -m axolotl.cli.train` for single-GPU runs. vLLM inference uses -`tensor_parallel_size` equal to the number of GPUs in all cases. +If the vLLM server is on a different port or host, use `--vllm-url` and +`--container-checkpoints-dir` to override: + +```bash +python sweep.py --vllm-url http://localhost:8001 --container-checkpoints-dir /data/checkpoints +``` Progress is logged to `sweep.log` and to the W&B project `VOICE`. @@ -89,5 +108,5 @@ completes. Schema: | `lora_alpha` | LoRA alpha (= 2 × rank) | | `effective_batch_size` | Effective batch size | | `target_layers` | `attention` or `attention_mlp` | -| `eval_loss` | Test NLL loss at this checkpoint | -| `completions` | JSON list of generated responses on the test split | +| `eval_loss` | Validation NLL loss (from axolotl trainer_state.json) | +| `completions` | JSON list of generated responses on the validation split | diff --git a/sweep/infer.py b/sweep/infer.py index 2b525ef..c5a32cf 100644 --- a/sweep/infer.py +++ b/sweep/infer.py @@ -1,245 +1,77 @@ -"""Inference and test-loss script for a single fine-tuned checkpoint. +"""Inference script for a single fine-tuned checkpoint. -Generation uses vLLM with the LoRA adapter loaded via LoRARequest. vLLM -applies the model's built-in chat template and stops automatically on -<|eot_id|>, so no manual EOS token handling is required. +Sends completions requests to a persistent vLLM Docker server with the +LoRA adapter loaded dynamically via the /v1/load_lora_adapter endpoint. -Loss is computed with PyTorch/PEFT in a separate pass after the vLLM engine -is torn down to reclaim GPU memory. +Eval loss is read directly from axolotl's trainer_state.json (written +during training with eval_strategy: epoch) — no loss recomputation here. -Outputs a single JSON object to stdout:: +Outputs a JSON list of completion dicts to stdout:: - {"eval_loss": float, "completions": [{messages, generated_response}, ...]} + [{"messages": [...], "generated_response": "..."}, ...] All progress logs go to stderr so stdout stays clean for sweep.py to parse. Usage:: - python infer.py --checkpoint /path/to/checkpoint-300 + python infer.py \\ + --adapter-path /checkpoints/run_000_lr1e-4_r4_bs4_attention/checkpoint-300 \\ + --vllm-url http://localhost:8000 """ import argparse -import gc import json import os import sys +from pathlib import Path from typing import Any -# Must be set before torch/triton are imported. -# vLLM 0.11.0 with enforce_eager=True disables vLLM's own compilation wrapper -# (compilation level → NONE), but PyTorch still has @torch.compile on -# get_masked_input_and_mask in vocab_parallel_embedding.py. That function -# tries to run inductor → triton, which compiles cuda_utils.c via gcc and -# needs python3.12-dev headers not installed on this server. -# TORCHDYNAMO_DISABLE=1 makes all @torch.compile decorators fall back to -# eager execution. With enforce_eager=True, vLLM's own aot_compile path is -# also disabled, so TORCHDYNAMO_DISABLE doesn't break anything. -os.environ["TORCHDYNAMO_DISABLE"] = "1" - -import torch +import requests from datasets import load_dataset from dotenv import load_dotenv -from peft import PeftModel -from transformers import AutoModelForCausalLM, AutoTokenizer -from vllm import LLM, SamplingParams -from vllm.lora.request import LoRARequest +from openai import OpenAI load_dotenv() -BASE_MODEL = "meta-llama/Llama-3.1-8B-Instruct" DATASET = "AccelerateScience/bush-dataset" MAX_NEW_TOKENS = 1024 TEMPERATURE = 0.7 -LOSS_BATCH_SIZE = 16 def _log(msg: str) -> None: print(msg, file=sys.stderr, flush=True) -def _apply_template( - tokenizer: Any, - messages: list[dict[str, Any]], - add_generation_prompt: bool, -) -> list[int]: - """Apply chat template and return a flat list of token IDs. +def _adapter_name(adapter_path: str) -> str: + """Derive a unique adapter name from the checkpoint path.""" + return Path(adapter_path).name - :param tokenizer: tokenizer to apply the template with. - :param messages: list of message dicts with ``role`` and ``content`` keys. - :param add_generation_prompt: whether to append the generation prompt. - :returns: list of integer token IDs. - """ - ids = tokenizer.apply_chat_template( - messages, - tokenize=True, - add_generation_prompt=add_generation_prompt, - ) - if hasattr(ids, "input_ids"): - ids = ids.input_ids - if hasattr(ids, "tolist"): - ids = ids[0].tolist() - return list(ids) - - -def vllm_generate( - checkpoint: str, - examples: list[dict[str, Any]], -) -> list[str]: - """Run batched generation with vLLM and the LoRA adapter. - The vLLM engine is torn down and GPU memory freed before returning so - the subsequent PyTorch loss pass can load the model cleanly. +def _load_validation_examples(hf_token: str) -> list[dict[str, Any]]: + """Load the dataset's native validation split. - :param checkpoint: path to the LoRA adapter checkpoint directory. - :param examples: list of dataset examples from the test split. - :returns: list of generated response strings, one per example. + :param hf_token: HuggingFace API token. + :returns: list of dataset examples. """ - cuda_devices = os.environ.get("CUDA_VISIBLE_DEVICES", "0") - n_gpus = len([d for d in cuda_devices.split(",") if d.strip()]) - _log(f"Loading vLLM engine on {n_gpus} GPU(s) (CUDA_VISIBLE_DEVICES={cuda_devices!r})") - llm = LLM( - model=BASE_MODEL, - enable_lora=True, - max_lora_rank=32, - dtype="bfloat16", - max_model_len=2048, - tensor_parallel_size=n_gpus, - # Disable vLLM's torch.compile wrapper (compilation level → NONE). - # Combined with TORCHDYNAMO_DISABLE above this avoids all Triton - # compilation, which requires python3.12-dev headers not on this server. - enforce_eager=True, - ) - - lora_request = LoRARequest("adapter", 1, checkpoint) - sampling_params = SamplingParams( - temperature=TEMPERATURE, - max_tokens=MAX_NEW_TOKENS, - ) - - # Strip the final assistant turn — the model generates it. - chat_prompts = [ - [m for m in ex["messages"] if m["role"] != "assistant"] - for ex in examples - ] - - _log(f"Generating {len(examples)} completions") - outputs = llm.chat( - chat_prompts, - sampling_params, - lora_request=lora_request, - use_tqdm=False, - ) - responses = [o.outputs[0].text for o in outputs] - - for resp in responses[:3]: - _log(f" [sample] {resp!r}") - - del llm - gc.collect() - torch.cuda.empty_cache() - _log("vLLM engine freed") - - return responses - - -def pytorch_loss( - checkpoint: str, - tokenizer: Any, - examples: list[dict[str, Any]], -) -> float: - """Compute token-weighted NLL loss over assistant turns in batches. - - Loss is computed only over assistant tokens; prompt and padding tokens - are masked with -100. - - :param checkpoint: path to the LoRA adapter checkpoint directory. - :param tokenizer: tokenizer matching the base model. - :param examples: list of dataset examples from the test split. - :returns: token-weighted average NLL loss across all examples. - """ - _log(f"Loading base model + LoRA from {checkpoint}") - base = AutoModelForCausalLM.from_pretrained( - BASE_MODEL, - torch_dtype=torch.bfloat16, - device_map="auto", - ) - model = PeftModel.from_pretrained(base, checkpoint) - model.eval() - - total_loss = 0.0 - total_tokens = 0 - - for start in range(0, len(examples), LOSS_BATCH_SIZE): - batch = examples[start : start + LOSS_BATCH_SIZE] - - full_ids_list = [ - _apply_template(tokenizer, ex["messages"], add_generation_prompt=False)[:2048] - for ex in batch - ] - prompt_lens = [ - len( - _apply_template( - tokenizer, ex["messages"][:-1], add_generation_prompt=True - ) - ) - for ex in batch - ] - max_len = max(len(ids) for ids in full_ids_list) - pad_id = tokenizer.pad_token_id - - input_ids = torch.zeros(len(batch), max_len, dtype=torch.long) - attention_mask = torch.zeros(len(batch), max_len, dtype=torch.long) - labels = torch.full((len(batch), max_len), -100, dtype=torch.long) - - for i, (full_ids, p_len) in enumerate(zip(full_ids_list, prompt_lens)): - seq_len = len(full_ids) - input_ids[i, :seq_len] = torch.tensor(full_ids, dtype=torch.long) - input_ids[i, seq_len:] = pad_id - attention_mask[i, :seq_len] = 1 - labels[i, p_len:seq_len] = torch.tensor( - full_ids[p_len:], dtype=torch.long - ) - - input_ids = input_ids.to(model.device) - attention_mask = attention_mask.to(model.device) - labels = labels.to(model.device) - - with torch.no_grad(): - logits = model( - input_ids=input_ids, attention_mask=attention_mask - ).logits - - shift_logits = logits[..., :-1, :].contiguous() - shift_labels = labels[..., 1:].contiguous() - valid = shift_labels != -100 - n_tokens = int(valid.sum().item()) - - if n_tokens > 0: - loss_val = torch.nn.functional.cross_entropy( - shift_logits.view(-1, shift_logits.size(-1))[valid.view(-1)], - shift_labels.view(-1)[valid.view(-1)], - ).item() - total_loss += loss_val * n_tokens - total_tokens += n_tokens - - _log( - f" [loss] {min(start + LOSS_BATCH_SIZE, len(examples))}" - f"/{len(examples)}" - ) - - return total_loss / total_tokens if total_tokens > 0 else float("nan") + ds = load_dataset(DATASET, split="validation", token=hf_token) + return list(ds) def main() -> None: - """Parse arguments, run generation then loss, print JSON. + """Load adapter, generate completions, output JSON list. :returns: None """ parser = argparse.ArgumentParser() parser.add_argument( - "--checkpoint", + "--adapter-path", required=True, - help="Path to epoch checkpoint directory (LoRA adapter)", + help="Path to the LoRA adapter inside the Docker container", + ) + parser.add_argument( + "--vllm-url", + default="http://localhost:8000", + help="Base URL of the vLLM OpenAI-compatible server", ) args = parser.parse_args() @@ -247,35 +79,59 @@ def main() -> None: os.environ.get("HF_TOKEN") or os.environ.get("HUGGINGFACE_TOKEN") or "" ) - _log(f"Loading tokenizer from {BASE_MODEL}") - tokenizer = AutoTokenizer.from_pretrained(BASE_MODEL, token=hf_token) - # Match the pad token axolotl sets during training. - tokenizer.pad_token = "<|eot_id|>" - - _log(f"Loading test split from {DATASET}") - ds = load_dataset(DATASET, split="test", token=hf_token) - examples = list(ds) - _log(f"Loaded {len(examples)} examples") - - _log("Generation pass") - responses = vllm_generate(args.checkpoint, examples) - - _log("Loss pass") - eval_loss = pytorch_loss(args.checkpoint, tokenizer, examples) - - completions: list[dict[str, Any]] = [ - { - "messages": [ - {"role": m["role"], "content": m["content"]} - for m in ex["messages"][:-1] - ], - "generated_response": response, - } - for ex, response in zip(examples, responses) - ] - - _log(f"eval_loss={eval_loss:.4f} n_completions={len(completions)}") - print(json.dumps({"eval_loss": eval_loss, "completions": completions})) + adapter_name = _adapter_name(args.adapter_path) + base_url = args.vllm_url.rstrip("/") + + _log(f"Loading validation split from {DATASET}") + examples = _load_validation_examples(hf_token) + _log(f"Loaded {len(examples)} validation examples") + + _log(f"Loading LoRA adapter: {adapter_name} from {args.adapter_path}") + resp = requests.post( + f"{base_url}/v1/load_lora_adapter", + json={"lora_name": adapter_name, "lora_path": args.adapter_path}, + timeout=60, + ) + resp.raise_for_status() + _log("Adapter loaded") + + client = OpenAI(api_key="unused", base_url=f"{base_url}/v1") + + completions: list[dict[str, Any]] = [] + for i, ex in enumerate(examples): + # Strip the final assistant turn — the model generates it. + prompt_messages = [m for m in ex["messages"] if m["role"] != "assistant"] + response = client.chat.completions.create( + model=adapter_name, + messages=prompt_messages, + max_tokens=MAX_NEW_TOKENS, + temperature=TEMPERATURE, + ) + generated = response.choices[0].message.content or "" + completions.append( + { + "messages": [ + {"role": m["role"], "content": m["content"]} + for m in prompt_messages + ], + "generated_response": generated, + } + ) + if i < 3: + _log(f" [sample] {generated!r}") + + _log(f"Generated {len(completions)} completions") + + _log(f"Unloading LoRA adapter: {adapter_name}") + resp = requests.post( + f"{base_url}/v1/unload_lora_adapter", + json={"lora_name": adapter_name}, + timeout=30, + ) + resp.raise_for_status() + _log("Adapter unloaded") + + print(json.dumps(completions)) if __name__ == "__main__": diff --git a/sweep/infer/pyproject.toml b/sweep/infer/pyproject.toml deleted file mode 100644 index b05b2e0..0000000 --- a/sweep/infer/pyproject.toml +++ /dev/null @@ -1,21 +0,0 @@ -[project] -name = "voice-infer" -version = "0.1.0" -description = "Inference environment for the pilot sweep (vLLM + PEFT)" -requires-python = ">=3.12,<3.13" -dependencies = [ - "vllm==0.11.0 ; sys_platform == 'linux'", - "peft", - "transformers==4.57.1", - "datasets>=4.5.0", - "python-dotenv", -] - -# vLLM only ships GPU wheels for Linux; enforce this so uv does not attempt -# to resolve a CPU-only environment on the developer's machine. -[tool.uv] -required-environments = ["sys_platform == 'linux'"] -# Use uv's own managed Python (not system Python) — uv bundles the full Python -# distribution including dev headers, which Triton needs to compile cuda_utils.c. -# System Python 3.12 on this host lacks python3.12-dev headers. -python-preference = "managed" diff --git a/sweep/master_config.yaml b/sweep/master_config.yaml index 9b9f9b8..18265c1 100644 --- a/sweep/master_config.yaml +++ b/sweep/master_config.yaml @@ -16,8 +16,8 @@ # Grid: 4 ranks × 3 LRs × 2 batch sizes × 2 target layers = 48 training # runs → 144 data points. # -# No validation during training. Test loss is computed post-training from -# each epoch checkpoint and used for the NLL-style correlation analysis. +# Validation loss is computed after each epoch via axolotl and stored in +# trainer_state.json. sweep.py reads it from there — no post-training loss pass. # ============================================================================= # --- Sweep grid ------------------------------------------------------------- @@ -65,12 +65,12 @@ axolotl: chat_template: tokenizer_default val_set_size: 0.0 - # test_datasets is used only for the post-training loss pass (axolotl - # evaluate), not during training. Gives the single eval_loss per run - # used for the NLL-style correlation. + # Validation dataset — uses the dataset's native validation split. + # Axolotl uses this for per-epoch eval (eval_strategy: epoch), which + # writes eval_loss to trainer_state.json after each epoch. test_datasets: - path: AccelerateScience/bush-dataset - split: test + split: validation type: chat_template field_messages: messages @@ -104,8 +104,8 @@ axolotl: warmup_ratio: 0.03 weight_decay: 0.0 - # No evaluation during training — test loss computed post-training only. - eval_strategy: "no" + # Evaluate on the validation split after each epoch. + eval_strategy: "epoch" # Keep all epoch checkpoints (up to 3) so sweep.py can run inference at # each epoch without re-training. 48 training runs × 3 epochs = 144 rows. diff --git a/sweep/sweep.py b/sweep/sweep.py index 449b299..73a9e97 100644 --- a/sweep/sweep.py +++ b/sweep/sweep.py @@ -2,16 +2,21 @@ Reads master_config.yaml, expands the hyperparameter grid, and for each run: 1. Writes a per-run axolotl config YAML - 2. Trains with axolotl (always 3 epochs, saving a checkpoint each epoch) - 3. For each epoch checkpoint: runs infer.py to get completions + test loss + 2. Trains with axolotl (always 3 epochs, saving a checkpoint each epoch + and computing validation loss after each epoch via axolotl) + 3. For each epoch checkpoint: runs infer.py to get completions via the + persistent vLLM Docker server; reads eval_loss from trainer_state.json 4. Appends 3 rows to outputs/results.parquet 5. Updates state.json for resumability +The vLLM server must be running before sweep.py is started. See README.md +for the one-time Docker startup command. + Usage (inside tmux on the H100):: python sweep.py python sweep.py --dry-run # print grid without training - python sweep.py --device 0 # override GPU (default: 3) + python sweep.py --gpus 2 # override training GPU (default: 2) """ import argparse @@ -38,11 +43,6 @@ MASTER_CONFIG = SWEEP_DIR / "master_config.yaml" LOG_FILE = SWEEP_DIR / "sweep.log" -# Python executable for the inference environment (vLLM + PEFT). -# Create it once on the target machine with: -# uv sync --project sweep/infer -INFER_PYTHON = SWEEP_DIR / "infer" / ".venv" / "bin" / "python" - # Fixed micro batch size; gradient_accumulation_steps derived from # the effective_batch_size sweep axis. MICRO_BATCH_SIZE: int = 4 @@ -183,6 +183,28 @@ def find_epoch_checkpoints(run_name: str) -> dict[int, Path]: return epoch_map +# --------------------------------------------------------------------------- +# Eval loss (from axolotl's trainer_state.json) +# --------------------------------------------------------------------------- +def get_eval_loss(checkpoint_path: Path, epoch: int) -> float: + """Read the validation loss for an epoch from trainer_state.json. + + Axolotl writes eval_loss to log_history after each epoch when + eval_strategy is "epoch". We scan backwards to find the entry + whose epoch field matches. + + :param checkpoint_path: path to the epoch checkpoint directory. + :param epoch: the epoch number to look up. + :returns: eval_loss float, or nan if not found. + """ + state_file = checkpoint_path / "trainer_state.json" + trainer_state = json.loads(state_file.read_text()) + for entry in reversed(trainer_state.get("log_history", [])): + if round(entry.get("epoch", 0)) == epoch and "eval_loss" in entry: + return float(entry["eval_loss"]) + return float("nan") + + # --------------------------------------------------------------------------- # Training # --------------------------------------------------------------------------- @@ -217,20 +239,29 @@ def run_training(config_path: Path) -> None: # --------------------------------------------------------------------------- -# Inference + loss +# Inference (via persistent vLLM Docker server) # --------------------------------------------------------------------------- -def run_inference(checkpoint_path: Path) -> dict[str, Any]: - """Run infer.py for a checkpoint and return eval_loss + completions. +def run_inference( + checkpoint_path: Path, + container_checkpoint_path: str, + vllm_url: str, +) -> list[dict[str, Any]]: + """Run infer.py for a checkpoint and return the list of completions. - :param checkpoint_path: path to the epoch checkpoint directory. - :returns: dict with ``eval_loss`` (float) and ``completions`` (list). + :param checkpoint_path: host-side path to the checkpoint (for logging). + :param container_checkpoint_path: path inside the Docker container. + :param vllm_url: base URL of the persistent vLLM server. + :returns: list of completion dicts with ``messages`` and + ``generated_response`` keys. """ proc = subprocess.run( [ - str(INFER_PYTHON), + sys.executable, str(SWEEP_DIR / "infer.py"), - "--checkpoint", - str(checkpoint_path), + "--adapter-path", + container_checkpoint_path, + "--vllm-url", + vllm_url, ], capture_output=True, text=True, @@ -242,7 +273,7 @@ def run_inference(checkpoint_path: Path) -> dict[str, Any]: raise RuntimeError( f"infer.py exited with code {proc.returncode}" ) - return cast(dict[str, Any], json.loads(proc.stdout)) + return cast(list[dict[str, Any]], json.loads(proc.stdout)) # --------------------------------------------------------------------------- @@ -267,17 +298,37 @@ def append_results(rows: list[dict[str, Any]]) -> None: # --------------------------------------------------------------------------- # Per-run helpers (private — extracted to keep main() complexity low) # --------------------------------------------------------------------------- +def _container_checkpoint_path( + checkpoint_path: Path, + checkpoints_dir: Path, + container_checkpoints_dir: str, +) -> str: + """Translate a host checkpoint path to its container-side equivalent. + + :param checkpoint_path: absolute host path to the checkpoint. + :param checkpoints_dir: host-side checkpoints root directory. + :param container_checkpoints_dir: container-side checkpoints root. + :returns: absolute path string as seen inside the Docker container. + """ + relative = checkpoint_path.relative_to(checkpoints_dir) + return str(Path(container_checkpoints_dir) / relative) + + def _collect_rows( run: dict[str, Any], epoch_map: dict[int, Path], + vllm_url: str, + container_checkpoints_dir: str, ) -> list[dict[str, Any]]: rows: list[dict[str, Any]] = [] for epoch in sorted(epoch_map): ckpt_path = epoch_map[epoch] + container_path = _container_checkpoint_path( + ckpt_path, CHECKPOINTS_DIR, container_checkpoints_dir + ) log.info(f" [INFER] epoch {epoch} — {ckpt_path.name}") - result = run_inference(ckpt_path) - loss_val = result["eval_loss"] - n_comp = len(result["completions"]) + completions = run_inference(ckpt_path, container_path, vllm_url) + eval_loss = get_eval_loss(ckpt_path, epoch) rows.append( { "run_name": run["run_name"], @@ -287,11 +338,13 @@ def _collect_rows( "lora_alpha": run["lora_alpha"], "effective_batch_size": run["effective_batch_size"], "target_layers": run["target_layers_name"], - "eval_loss": loss_val, - "completions": json.dumps(result["completions"]), + "eval_loss": eval_loss, + "completions": json.dumps(completions), } ) - log.info(f" eval_loss={loss_val:.4f} n_completions={n_comp}") + log.info( + f" eval_loss={eval_loss:.4f} n_completions={len(completions)}" + ) return rows @@ -299,6 +352,8 @@ def _execute_run( run: dict[str, Any], axolotl_base: dict[str, Any], state: dict[str, Any], + vllm_url: str, + container_checkpoints_dir: str, ) -> None: name = run["run_name"] try: @@ -308,7 +363,7 @@ def _execute_run( if not epoch_map: raise RuntimeError("No epoch checkpoints found after training") log.info(f"Found checkpoints for epochs: {sorted(epoch_map)}") - rows = _collect_rows(run, epoch_map) + rows = _collect_rows(run, epoch_map, vllm_url, container_checkpoints_dir) append_results(rows) state["completed"].append(name) state["failed"].pop(name, None) @@ -336,8 +391,18 @@ def main() -> None: ) parser.add_argument( "--gpus", - default="2,3", - help="Comma-separated CUDA device indices (default: 2,3)", + default="2", + help="Comma-separated CUDA device indices for training (default: 2)", + ) + parser.add_argument( + "--vllm-url", + default="http://localhost:8000", + help="Base URL of the persistent vLLM Docker server (default: http://localhost:8000)", + ) + parser.add_argument( + "--container-checkpoints-dir", + default="/checkpoints", + help="Checkpoints directory as mounted inside the vLLM container (default: /checkpoints)", ) args = parser.parse_args() @@ -379,7 +444,9 @@ def main() -> None: log.info(f"\n{'=' * 60}") log.info(f"[START] {name}") log.info(f"{'=' * 60}") - _execute_run(run, axolotl_base, state) + _execute_run( + run, axolotl_base, state, args.vllm_url, args.container_checkpoints_dir + ) n_done = len(state["completed"]) log.info(f"\nSweep complete: {n_done}/{n_runs} runs succeeded.") From 5e24704c27f1cd955c99f4b0d3fcdf9637b2aea9 Mon Sep 17 00:00:00 2001 From: Fin Griffin Date: Tue, 14 Apr 2026 15:10:25 +0100 Subject: [PATCH 33/68] update readme --- sweep/README.md | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/sweep/README.md b/sweep/README.md index b75a420..ca4d11d 100644 --- a/sweep/README.md +++ b/sweep/README.md @@ -24,7 +24,7 @@ uv sync source .venv/bin/activate ``` -**2. Start the vLLM Docker server on GPU 3 (one-time)** +**2. Start the vLLM Docker server on GPU 3 (one time, from project root)** ```bash docker run -d --name vllm-sweep \ @@ -32,6 +32,9 @@ docker run -d --name vllm-sweep \ -e NVIDIA_VISIBLE_DEVICES=3 \ --gpus device=3 \ -p 127.0.0.1:8000:8000 \ + -e HUGGING_FACE_HUB_TOKEN=$HF_TOKEN \ + -e VLLM_ALLOW_RUNTIME_LORA_UPDATING=true \ + -v ~/.cache/huggingface:/root/.cache/huggingface \ -v "$PWD/sweep/checkpoints:/checkpoints:ro" \ vllm/vllm-openai:v0.9.0 \ --model meta-llama/Llama-3.1-8B-Instruct \ @@ -42,6 +45,10 @@ docker run -d --name vllm-sweep \ --port 8000 ``` +`VLLM_ALLOW_RUNTIME_LORA_UPDATING=true` enables the `/v1/load_lora_adapter` +and `/v1/unload_lora_adapter` endpoints, which are disabled by default in +vLLM 0.9.0. Without it, `infer.py` will get a 404. + The container mounts `sweep/checkpoints` at `/checkpoints` (read-only). Wait for the server to be healthy before starting the sweep: @@ -50,6 +57,12 @@ docker logs -f vllm-sweep # wait for "Application startup complete" curl http://localhost:8000/health ``` +If you need to restart the container (e.g. after a crash), remove it first: + +```bash +docker stop vllm-sweep && docker rm vllm-sweep +``` + **3. Set environment variables** ```bash From 733a9eaafe918595e5a62219dc51066db7c17d7c Mon Sep 17 00:00:00 2001 From: Fin Griffin Date: Tue, 14 Apr 2026 15:28:46 +0100 Subject: [PATCH 34/68] 1 --- sweep/infer.py | 70 +++++++++++++++++++++++++++++++------------------- 1 file changed, 44 insertions(+), 26 deletions(-) diff --git a/sweep/infer.py b/sweep/infer.py index c5a32cf..63453ee 100644 --- a/sweep/infer.py +++ b/sweep/infer.py @@ -3,6 +3,9 @@ Sends completions requests to a persistent vLLM Docker server with the LoRA adapter loaded dynamically via the /v1/load_lora_adapter endpoint. +All validation examples are dispatched concurrently so vLLM can batch them +server-side and fully utilise the GPU. + Eval loss is read directly from axolotl's trainer_state.json (written during training with eval_strategy: epoch) — no loss recomputation here. @@ -20,6 +23,7 @@ """ import argparse +import asyncio import json import os import sys @@ -29,7 +33,7 @@ import requests from datasets import load_dataset from dotenv import load_dotenv -from openai import OpenAI +from openai import AsyncOpenAI load_dotenv() @@ -57,8 +61,42 @@ def _load_validation_examples(hf_token: str) -> list[dict[str, Any]]: return list(ds) +async def _generate_all( + client: AsyncOpenAI, + adapter_name: str, + examples: list[dict[str, Any]], +) -> list[dict[str, Any]]: + """Dispatch all examples concurrently and collect completions in order. + + :param client: async OpenAI client pointed at the vLLM server. + :param adapter_name: registered LoRA adapter name to use as the model. + :param examples: validation examples to generate completions for. + :returns: list of completion dicts preserving input order. + """ + async def _one(ex: dict[str, Any]) -> dict[str, Any]: + prompt_messages = [ + m for m in ex["messages"] if m["role"] != "assistant" + ] + response = await client.chat.completions.create( + model=adapter_name, + messages=prompt_messages, + max_tokens=MAX_NEW_TOKENS, + temperature=TEMPERATURE, + ) + generated = response.choices[0].message.content or "" + return { + "messages": [ + {"role": m["role"], "content": m["content"]} + for m in prompt_messages + ], + "generated_response": generated, + } + + return list(await asyncio.gather(*[_one(ex) for ex in examples])) + + def main() -> None: - """Load adapter, generate completions, output JSON list. + """Load adapter, generate completions concurrently, output JSON list. :returns: None """ @@ -95,31 +133,11 @@ def main() -> None: resp.raise_for_status() _log("Adapter loaded") - client = OpenAI(api_key="unused", base_url=f"{base_url}/v1") - - completions: list[dict[str, Any]] = [] - for i, ex in enumerate(examples): - # Strip the final assistant turn — the model generates it. - prompt_messages = [m for m in ex["messages"] if m["role"] != "assistant"] - response = client.chat.completions.create( - model=adapter_name, - messages=prompt_messages, - max_tokens=MAX_NEW_TOKENS, - temperature=TEMPERATURE, - ) - generated = response.choices[0].message.content or "" - completions.append( - { - "messages": [ - {"role": m["role"], "content": m["content"]} - for m in prompt_messages - ], - "generated_response": generated, - } - ) - if i < 3: - _log(f" [sample] {generated!r}") + client = AsyncOpenAI(api_key="unused", base_url=f"{base_url}/v1") + completions = asyncio.run(_generate_all(client, adapter_name, examples)) + for comp in completions[:3]: + _log(f" [sample] {comp['generated_response']!r}") _log(f"Generated {len(completions)} completions") _log(f"Unloading LoRA adapter: {adapter_name}") From 54213f60b553a6deb7a5c137a31d9e106e5d95cb Mon Sep 17 00:00:00 2001 From: Fin Griffin Date: Tue, 14 Apr 2026 19:27:07 +0100 Subject: [PATCH 35/68] refactor(sweep): replace vLLM inference with in-process TrainerCallback Remove infer.py and all vLLM/Docker machinery. Add EvalCompletionsCallback which generates validation completions at epoch end using the live in-memory model (T=1.0, no truncation), eliminating any train/inference distribution mismatch. sweep.py reads completions written to disk by the callback instead of orchestrating a separate inference subprocess. Output format is unchanged. --- pyproject.toml | 4 +- sweep/callbacks.py | 186 +++++++++++++++++++++++++++++++++++ sweep/infer.py | 156 ------------------------------ sweep/master_config.yaml | 13 ++- sweep/sweep.py | 202 ++++++++++----------------------------- 5 files changed, 248 insertions(+), 313 deletions(-) create mode 100644 sweep/callbacks.py delete mode 100644 sweep/infer.py diff --git a/pyproject.toml b/pyproject.toml index b68b2bc..f1c4555 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -9,9 +9,7 @@ dependencies = [ "axolotl @ git+https://github.com/axolotl-ai-cloud/axolotl.git@v0.16.1 ; sys_platform == 'linux'", "datasets>=4.5.0", "dotenv>=0.9.9", - "openai", - "requests", - "huggingface-hub>=1.4.1", +"huggingface-hub>=1.4.1", "typer>=0.9.0", "matplotlib>=3.10.8", "pandas", diff --git a/sweep/callbacks.py b/sweep/callbacks.py new file mode 100644 index 0000000..3f1469d --- /dev/null +++ b/sweep/callbacks.py @@ -0,0 +1,186 @@ +"""Axolotl TrainerCallback that generates validation completions at each epoch end. + +Registered via the axolotl ``callbacks`` YAML key — instantiated with no +arguments. All configuration is sourced from environment variables or the +TrainingArguments passed at runtime. + +Validation examples are loaded once at train-begin and cached. At each epoch +end the in-memory model generates completions in left-padded batches, writes +them to ``{output_dir}/completions_epoch_{N}.json``, and uploads an artifact +to W&B named ``{run_name}-epoch{N}-Results``. + +The output format is identical to the previous vLLM inference pipeline:: + + [{"messages": [...], "generated_response": "..."}, ...] +""" + +import json +import logging +import os +from pathlib import Path +from typing import Any + +import torch +import wandb +from datasets import load_dataset +from transformers import TrainerCallback, TrainerControl, TrainerState, TrainingArguments + +log = logging.getLogger(__name__) + +DATASET: str = "AccelerateScience/bush-dataset" +INFERENCE_BATCH_SIZE: int = 8 + +# Sampling parameters agreed for all experiments: +# T=1.0 with no truncation samples from the exact learned distribution, +# eliminating any gap between the training and inference distributions. +GENERATION_CONFIG: dict[str, Any] = { + "do_sample": True, + "temperature": 1.0, + "top_p": 1.0, + "top_k": 0, + "repetition_penalty": 1.0, + "max_new_tokens": 1024, +} + + +class EvalCompletionsCallback(TrainerCallback): + """Generate and log validation completions at each epoch end. + + Designed to be zero-argument so it can be registered directly in the + axolotl YAML as ``sweep.callbacks.EvalCompletionsCallback``. + """ + + def __init__(self) -> None: + """Initialise with an empty example cache.""" + self._examples: list[dict[str, Any]] = [] + + def on_train_begin( + self, + args: TrainingArguments, + state: TrainerState, + control: TrainerControl, + **kwargs: Any, + ) -> None: + """Load and cache the validation split once before training starts. + + :param args: HF TrainingArguments. + :param state: current TrainerState. + :param control: TrainerControl object. + :returns: None + """ + hf_token = os.environ.get("HF_TOKEN") or os.environ.get("HUGGINGFACE_TOKEN") + ds = load_dataset(DATASET, split="validation", token=hf_token) + # Strip assistant turns — only system + user messages form the prompt. + self._examples = [ + {"messages": [m for m in ex["messages"] if m["role"] != "assistant"]} + for ex in ds + ] + log.info( + "EvalCompletionsCallback: loaded %d validation examples", + len(self._examples), + ) + + def on_epoch_end( + self, + args: TrainingArguments, + state: TrainerState, + control: TrainerControl, + model: Any = None, + tokenizer: Any = None, + **kwargs: Any, + ) -> None: + """Generate completions for all validation examples and persist results. + + Runs only on the main process (rank 0) in distributed training. + + :param args: HF TrainingArguments. + :param state: TrainerState — ``state.epoch`` gives the current epoch. + :param control: TrainerControl object. + :param model: the live model (already on the correct device). + :param tokenizer: the tokenizer associated with the model. + :returns: None + """ + if args.process_index != 0: + return + + epoch = round(state.epoch) + log.info( + "EvalCompletionsCallback: generating completions for epoch %d", epoch + ) + + model.eval() + completions: list[dict[str, Any]] = [] + for i in range(0, len(self._examples), INFERENCE_BATCH_SIZE): + batch = self._examples[i : i + INFERENCE_BATCH_SIZE] + completions.extend(_generate_batch(batch, model, tokenizer)) + model.train() + + output_dir = Path(args.output_dir) + out_path = output_dir / f"completions_epoch_{epoch}.json" + out_path.write_text(json.dumps(completions)) + log.info( + "EvalCompletionsCallback: wrote %d completions → %s", + len(completions), + out_path, + ) + + if wandb.run is not None: + artifact = wandb.Artifact( + f"{wandb.run.name}-epoch{epoch}-Results", + type="completions", + ) + artifact.add_file(str(out_path)) + wandb.log_artifact(artifact) + + +def _generate_batch( + batch: list[dict[str, Any]], + model: Any, + tokenizer: Any, +) -> list[dict[str, Any]]: + """Generate completions for one batch using left-padded inputs. + + :param batch: list of examples, each with a ``messages`` list + (system + user only — no assistant turn). + :param model: the current model. + :param tokenizer: the current tokenizer. + :returns: list of completion dicts with ``messages`` and + ``generated_response`` keys. + """ + encoded = [ + tokenizer.apply_chat_template( + ex["messages"], + return_tensors="pt", + add_generation_prompt=True, + ).squeeze(0) # (seq_len,) + for ex in batch + ] + + # Left-pad all sequences to the length of the longest in the batch. + max_len = max(t.shape[0] for t in encoded) + pad_id = tokenizer.pad_token_id + input_ids = torch.full( + (len(batch), max_len), pad_id, dtype=torch.long, device=model.device + ) + attention_mask = torch.zeros( + (len(batch), max_len), dtype=torch.long, device=model.device + ) + for j, t in enumerate(encoded): + start = max_len - t.shape[0] + input_ids[j, start:] = t.to(model.device) + attention_mask[j, start:] = 1 + + with torch.no_grad(): + out = model.generate( + input_ids, + attention_mask=attention_mask, + **GENERATION_CONFIG, + ) + + results = [] + for j, ex in enumerate(batch): + # out includes the (padded) prompt tokens; skip past them. + new_tokens = out[j, max_len:] + generated = tokenizer.decode(new_tokens, skip_special_tokens=True) + results.append({"messages": ex["messages"], "generated_response": generated}) + return results diff --git a/sweep/infer.py b/sweep/infer.py deleted file mode 100644 index 63453ee..0000000 --- a/sweep/infer.py +++ /dev/null @@ -1,156 +0,0 @@ -"""Inference script for a single fine-tuned checkpoint. - -Sends completions requests to a persistent vLLM Docker server with the -LoRA adapter loaded dynamically via the /v1/load_lora_adapter endpoint. - -All validation examples are dispatched concurrently so vLLM can batch them -server-side and fully utilise the GPU. - -Eval loss is read directly from axolotl's trainer_state.json (written -during training with eval_strategy: epoch) — no loss recomputation here. - -Outputs a JSON list of completion dicts to stdout:: - - [{"messages": [...], "generated_response": "..."}, ...] - -All progress logs go to stderr so stdout stays clean for sweep.py to parse. - -Usage:: - - python infer.py \\ - --adapter-path /checkpoints/run_000_lr1e-4_r4_bs4_attention/checkpoint-300 \\ - --vllm-url http://localhost:8000 -""" - -import argparse -import asyncio -import json -import os -import sys -from pathlib import Path -from typing import Any - -import requests -from datasets import load_dataset -from dotenv import load_dotenv -from openai import AsyncOpenAI - -load_dotenv() - -DATASET = "AccelerateScience/bush-dataset" -MAX_NEW_TOKENS = 1024 -TEMPERATURE = 0.7 - - -def _log(msg: str) -> None: - print(msg, file=sys.stderr, flush=True) - - -def _adapter_name(adapter_path: str) -> str: - """Derive a unique adapter name from the checkpoint path.""" - return Path(adapter_path).name - - -def _load_validation_examples(hf_token: str) -> list[dict[str, Any]]: - """Load the dataset's native validation split. - - :param hf_token: HuggingFace API token. - :returns: list of dataset examples. - """ - ds = load_dataset(DATASET, split="validation", token=hf_token) - return list(ds) - - -async def _generate_all( - client: AsyncOpenAI, - adapter_name: str, - examples: list[dict[str, Any]], -) -> list[dict[str, Any]]: - """Dispatch all examples concurrently and collect completions in order. - - :param client: async OpenAI client pointed at the vLLM server. - :param adapter_name: registered LoRA adapter name to use as the model. - :param examples: validation examples to generate completions for. - :returns: list of completion dicts preserving input order. - """ - async def _one(ex: dict[str, Any]) -> dict[str, Any]: - prompt_messages = [ - m for m in ex["messages"] if m["role"] != "assistant" - ] - response = await client.chat.completions.create( - model=adapter_name, - messages=prompt_messages, - max_tokens=MAX_NEW_TOKENS, - temperature=TEMPERATURE, - ) - generated = response.choices[0].message.content or "" - return { - "messages": [ - {"role": m["role"], "content": m["content"]} - for m in prompt_messages - ], - "generated_response": generated, - } - - return list(await asyncio.gather(*[_one(ex) for ex in examples])) - - -def main() -> None: - """Load adapter, generate completions concurrently, output JSON list. - - :returns: None - """ - parser = argparse.ArgumentParser() - parser.add_argument( - "--adapter-path", - required=True, - help="Path to the LoRA adapter inside the Docker container", - ) - parser.add_argument( - "--vllm-url", - default="http://localhost:8000", - help="Base URL of the vLLM OpenAI-compatible server", - ) - args = parser.parse_args() - - hf_token = ( - os.environ.get("HF_TOKEN") or os.environ.get("HUGGINGFACE_TOKEN") or "" - ) - - adapter_name = _adapter_name(args.adapter_path) - base_url = args.vllm_url.rstrip("/") - - _log(f"Loading validation split from {DATASET}") - examples = _load_validation_examples(hf_token) - _log(f"Loaded {len(examples)} validation examples") - - _log(f"Loading LoRA adapter: {adapter_name} from {args.adapter_path}") - resp = requests.post( - f"{base_url}/v1/load_lora_adapter", - json={"lora_name": adapter_name, "lora_path": args.adapter_path}, - timeout=60, - ) - resp.raise_for_status() - _log("Adapter loaded") - - client = AsyncOpenAI(api_key="unused", base_url=f"{base_url}/v1") - completions = asyncio.run(_generate_all(client, adapter_name, examples)) - - for comp in completions[:3]: - _log(f" [sample] {comp['generated_response']!r}") - _log(f"Generated {len(completions)} completions") - - _log(f"Unloading LoRA adapter: {adapter_name}") - resp = requests.post( - f"{base_url}/v1/unload_lora_adapter", - json={"lora_name": adapter_name}, - timeout=30, - ) - resp.raise_for_status() - _log("Adapter unloaded") - - print(json.dumps(completions)) - - -if __name__ == "__main__": - main() diff --git a/sweep/master_config.yaml b/sweep/master_config.yaml index 18265c1..5f3e9c0 100644 --- a/sweep/master_config.yaml +++ b/sweep/master_config.yaml @@ -10,9 +10,10 @@ # micro_batch_size, gradient_accumulation_steps, output_dir, wandb_name) # on top of the axolotl section below. # -# Epoch checkpoints are reused: each run trains to epoch 3 and saves a -# checkpoint after each epoch. sweep.py runs inference + eval at each -# checkpoint, yielding 3 data points per training run without re-training. +# EvalCompletionsCallback runs inside the training process at each epoch end, +# generating completions on the validation split using the live in-memory model. +# This eliminates any train/inference distribution mismatch. Completions are +# written to {output_dir}/completions_epoch_{N}.json and uploaded to W&B. # Grid: 4 ranks × 3 LRs × 2 batch sizes × 2 target layers = 48 training # runs → 144 data points. # @@ -112,6 +113,12 @@ axolotl: save_strategy: epoch save_total_limit: 3 + # Callback — generates validation completions at each epoch end using the + # live in-memory model. Requires sweep/ to be on PYTHONPATH (run from repo + # root, or set PYTHONPATH=. before launching axolotl). + callbacks: + - sweep.callbacks.EvalCompletionsCallback + # W&B — wandb_name injected per run by sweep.py. use_wandb: true wandb_project: VOICE diff --git a/sweep/sweep.py b/sweep/sweep.py index 73a9e97..720d908 100644 --- a/sweep/sweep.py +++ b/sweep/sweep.py @@ -2,16 +2,13 @@ Reads master_config.yaml, expands the hyperparameter grid, and for each run: 1. Writes a per-run axolotl config YAML - 2. Trains with axolotl (always 3 epochs, saving a checkpoint each epoch - and computing validation loss after each epoch via axolotl) - 3. For each epoch checkpoint: runs infer.py to get completions via the - persistent vLLM Docker server; reads eval_loss from trainer_state.json + 2. Trains with axolotl (always 3 epochs, saving a checkpoint and computing + validation loss after each epoch via axolotl) + 3. Reads completions written by EvalCompletionsCallback (one JSON file per + epoch, produced during training) and eval_loss from trainer_state.json 4. Appends 3 rows to outputs/results.parquet 5. Updates state.json for resumability -The vLLM server must be running before sweep.py is started. See README.md -for the one-time Docker startup command. - Usage (inside tmux on the H100):: python sweep.py @@ -162,47 +159,26 @@ def write_run_config( return config_path -# --------------------------------------------------------------------------- -# Checkpoint discovery -# --------------------------------------------------------------------------- -def find_epoch_checkpoints(run_name: str) -> dict[int, Path]: - """Map epoch numbers to checkpoint paths via trainer_state.json. - - :param run_name: name of the run, used to locate the checkpoint dir. - :returns: dict mapping epoch int to the corresponding checkpoint Path. - """ - checkpoint_dir = CHECKPOINTS_DIR / run_name - epoch_map: dict[int, Path] = {} - for ckpt in sorted(checkpoint_dir.glob("checkpoint-*")): - state_file = ckpt / "trainer_state.json" - if not state_file.exists(): - continue - trainer_state = json.loads(state_file.read_text()) - epoch = round(trainer_state["epoch"]) - epoch_map[epoch] = ckpt - return epoch_map - - # --------------------------------------------------------------------------- # Eval loss (from axolotl's trainer_state.json) # --------------------------------------------------------------------------- -def get_eval_loss(checkpoint_path: Path, epoch: int) -> float: - """Read the validation loss for an epoch from trainer_state.json. +def _get_all_eval_losses(output_dir: Path) -> dict[int, float]: + """Read per-epoch validation losses from trainer_state.json. - Axolotl writes eval_loss to log_history after each epoch when - eval_strategy is "epoch". We scan backwards to find the entry - whose epoch field matches. + HF Trainer writes this file to the run output directory after training. - :param checkpoint_path: path to the epoch checkpoint directory. - :param epoch: the epoch number to look up. - :returns: eval_loss float, or nan if not found. + :param output_dir: root output directory for the run. + :returns: dict mapping epoch int to eval_loss float. """ - state_file = checkpoint_path / "trainer_state.json" + state_file = output_dir / "trainer_state.json" + if not state_file.exists(): + return {} trainer_state = json.loads(state_file.read_text()) - for entry in reversed(trainer_state.get("log_history", [])): - if round(entry.get("epoch", 0)) == epoch and "eval_loss" in entry: - return float(entry["eval_loss"]) - return float("nan") + losses: dict[int, float] = {} + for entry in trainer_state.get("log_history", []): + if "eval_loss" in entry: + losses[round(entry["epoch"])] = float(entry["eval_loss"]) + return losses # --------------------------------------------------------------------------- @@ -226,7 +202,7 @@ def run_training(config_path: Path) -> None: cmd = [ sys.executable, "-m", "accelerate.commands.launch", f"--num_processes={n_gpus}", - "--mixed_precision=no", # axolotl/HF Trainer handles bf16 itself + "--mixed_precision=no", "--dynamo_backend=no", "-m", "axolotl.cli.train", str(config_path), @@ -238,44 +214,6 @@ def run_training(config_path: Path) -> None: subprocess.run(cmd, check=True) -# --------------------------------------------------------------------------- -# Inference (via persistent vLLM Docker server) -# --------------------------------------------------------------------------- -def run_inference( - checkpoint_path: Path, - container_checkpoint_path: str, - vllm_url: str, -) -> list[dict[str, Any]]: - """Run infer.py for a checkpoint and return the list of completions. - - :param checkpoint_path: host-side path to the checkpoint (for logging). - :param container_checkpoint_path: path inside the Docker container. - :param vllm_url: base URL of the persistent vLLM server. - :returns: list of completion dicts with ``messages`` and - ``generated_response`` keys. - """ - proc = subprocess.run( - [ - sys.executable, - str(SWEEP_DIR / "infer.py"), - "--adapter-path", - container_checkpoint_path, - "--vllm-url", - vllm_url, - ], - capture_output=True, - text=True, - ) - if proc.stderr: - for line in proc.stderr.strip().splitlines(): - log.info(f" [infer] {line}") - if proc.returncode != 0: - raise RuntimeError( - f"infer.py exited with code {proc.returncode}" - ) - return cast(list[dict[str, Any]], json.loads(proc.stdout)) - - # --------------------------------------------------------------------------- # Output # --------------------------------------------------------------------------- @@ -296,74 +234,48 @@ def append_results(rows: list[dict[str, Any]]) -> None: # --------------------------------------------------------------------------- -# Per-run helpers (private — extracted to keep main() complexity low) +# Per-run execution # --------------------------------------------------------------------------- -def _container_checkpoint_path( - checkpoint_path: Path, - checkpoints_dir: Path, - container_checkpoints_dir: str, -) -> str: - """Translate a host checkpoint path to its container-side equivalent. - - :param checkpoint_path: absolute host path to the checkpoint. - :param checkpoints_dir: host-side checkpoints root directory. - :param container_checkpoints_dir: container-side checkpoints root. - :returns: absolute path string as seen inside the Docker container. - """ - relative = checkpoint_path.relative_to(checkpoints_dir) - return str(Path(container_checkpoints_dir) / relative) - - -def _collect_rows( - run: dict[str, Any], - epoch_map: dict[int, Path], - vllm_url: str, - container_checkpoints_dir: str, -) -> list[dict[str, Any]]: - rows: list[dict[str, Any]] = [] - for epoch in sorted(epoch_map): - ckpt_path = epoch_map[epoch] - container_path = _container_checkpoint_path( - ckpt_path, CHECKPOINTS_DIR, container_checkpoints_dir - ) - log.info(f" [INFER] epoch {epoch} — {ckpt_path.name}") - completions = run_inference(ckpt_path, container_path, vllm_url) - eval_loss = get_eval_loss(ckpt_path, epoch) - rows.append( - { - "run_name": run["run_name"], - "epoch": epoch, - "learning_rate": run["learning_rate"], - "lora_r": run["lora_r"], - "lora_alpha": run["lora_alpha"], - "effective_batch_size": run["effective_batch_size"], - "target_layers": run["target_layers_name"], - "eval_loss": eval_loss, - "completions": json.dumps(completions), - } - ) - log.info( - f" eval_loss={eval_loss:.4f} n_completions={len(completions)}" - ) - return rows - - def _execute_run( run: dict[str, Any], axolotl_base: dict[str, Any], state: dict[str, Any], - vllm_url: str, - container_checkpoints_dir: str, ) -> None: name = run["run_name"] + output_dir = CHECKPOINTS_DIR / name try: config_path = write_run_config(run, axolotl_base) run_training(config_path) - epoch_map = find_epoch_checkpoints(name) - if not epoch_map: - raise RuntimeError("No epoch checkpoints found after training") - log.info(f"Found checkpoints for epochs: {sorted(epoch_map)}") - rows = _collect_rows(run, epoch_map, vllm_url, container_checkpoints_dir) + + eval_losses = _get_all_eval_losses(output_dir) + rows: list[dict[str, Any]] = [] + for epoch in range(1, 4): + completions_path = output_dir / f"completions_epoch_{epoch}.json" + if not completions_path.exists(): + log.warning(f" Missing completions for epoch {epoch}, skipping") + continue + completions = json.loads(completions_path.read_text()) + rows.append( + { + "run_name": name, + "epoch": epoch, + "learning_rate": run["learning_rate"], + "lora_r": run["lora_r"], + "lora_alpha": run["lora_alpha"], + "effective_batch_size": run["effective_batch_size"], + "target_layers": run["target_layers_name"], + "eval_loss": eval_losses.get(epoch, float("nan")), + "completions": json.dumps(completions), + } + ) + log.info( + f" epoch {epoch} eval_loss={eval_losses.get(epoch, float('nan')):.4f}" + f" n_completions={len(completions)}" + ) + + if not rows: + raise RuntimeError("No completions written by EvalCompletionsCallback") + append_results(rows) state["completed"].append(name) state["failed"].pop(name, None) @@ -394,16 +306,6 @@ def main() -> None: default="2", help="Comma-separated CUDA device indices for training (default: 2)", ) - parser.add_argument( - "--vllm-url", - default="http://localhost:8000", - help="Base URL of the persistent vLLM Docker server (default: http://localhost:8000)", - ) - parser.add_argument( - "--container-checkpoints-dir", - default="/checkpoints", - help="Checkpoints directory as mounted inside the vLLM container (default: /checkpoints)", - ) args = parser.parse_args() os.environ["CUDA_VISIBLE_DEVICES"] = args.gpus @@ -444,9 +346,7 @@ def main() -> None: log.info(f"\n{'=' * 60}") log.info(f"[START] {name}") log.info(f"{'=' * 60}") - _execute_run( - run, axolotl_base, state, args.vllm_url, args.container_checkpoints_dir - ) + _execute_run(run, axolotl_base, state) n_done = len(state["completed"]) log.info(f"\nSweep complete: {n_done}/{n_runs} runs succeeded.") From 727a54cfbf206553db3d4ec2138843a6a17a29df Mon Sep 17 00:00:00 2001 From: Fin Griffin Date: Tue, 14 Apr 2026 19:29:13 +0100 Subject: [PATCH 36/68] fix(sweep): log sample completions at each epoch end --- sweep/callbacks.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sweep/callbacks.py b/sweep/callbacks.py index 3f1469d..6f9ca12 100644 --- a/sweep/callbacks.py +++ b/sweep/callbacks.py @@ -118,6 +118,8 @@ def on_epoch_end( output_dir = Path(args.output_dir) out_path = output_dir / f"completions_epoch_{epoch}.json" out_path.write_text(json.dumps(completions)) + for comp in completions[:3]: + log.info(" [sample] %r", comp["generated_response"]) log.info( "EvalCompletionsCallback: wrote %d completions → %s", len(completions), From c1efff53ea5a7807f6994e16234a23b0128c14ea Mon Sep 17 00:00:00 2001 From: Fin Griffin Date: Tue, 14 Apr 2026 19:30:12 +0100 Subject: [PATCH 37/68] docs(sweep): update README to remove vLLM setup, reflect callback approach --- sweep/README.md | 76 ++++++++++--------------------------------------- 1 file changed, 15 insertions(+), 61 deletions(-) diff --git a/sweep/README.md b/sweep/README.md index ca4d11d..d9a4711 100644 --- a/sweep/README.md +++ b/sweep/README.md @@ -4,15 +4,9 @@ LoRA rank, learning rate, batch size, and target layer configurations. Validation loss is computed by axolotl after each epoch (stored in -`trainer_state.json`). Completions are generated via a persistent vLLM -Docker server on a dedicated GPU. - -## GPU layout - -| GPU | Role | -|---|---| -| `2` | axolotl training (`sweep.py`) | -| `3` | vLLM Docker server (persistent, started once before sweep) | +`trainer_state.json`). Completions are generated by `EvalCompletionsCallback` +at the end of each epoch using the live in-memory model — no separate inference +process or server required. ## Setup on the H100 @@ -24,57 +18,17 @@ uv sync source .venv/bin/activate ``` -**2. Start the vLLM Docker server on GPU 3 (one time, from project root)** - -```bash -docker run -d --name vllm-sweep \ - --runtime nvidia \ - -e NVIDIA_VISIBLE_DEVICES=3 \ - --gpus device=3 \ - -p 127.0.0.1:8000:8000 \ - -e HUGGING_FACE_HUB_TOKEN=$HF_TOKEN \ - -e VLLM_ALLOW_RUNTIME_LORA_UPDATING=true \ - -v ~/.cache/huggingface:/root/.cache/huggingface \ - -v "$PWD/sweep/checkpoints:/checkpoints:ro" \ - vllm/vllm-openai:v0.9.0 \ - --model meta-llama/Llama-3.1-8B-Instruct \ - --enable-lora \ - --max-lora-rank 32 \ - --dtype bfloat16 \ - --max-model-len 2048 \ - --port 8000 -``` - -`VLLM_ALLOW_RUNTIME_LORA_UPDATING=true` enables the `/v1/load_lora_adapter` -and `/v1/unload_lora_adapter` endpoints, which are disabled by default in -vLLM 0.9.0. Without it, `infer.py` will get a 404. - -The container mounts `sweep/checkpoints` at `/checkpoints` (read-only). -Wait for the server to be healthy before starting the sweep: - -```bash -docker logs -f vllm-sweep # wait for "Application startup complete" -curl http://localhost:8000/health -``` - -If you need to restart the container (e.g. after a crash), remove it first: - -```bash -docker stop vllm-sweep && docker rm vllm-sweep -``` - -**3. Set environment variables** +**2. Set environment variables** ```bash export HF_TOKEN=hf_... export WANDB_API_KEY=... ``` -**4. Verify the grid looks correct** +**3. Verify the grid looks correct** ```bash -cd sweep -python sweep.py --dry-run +python sweep/sweep.py --dry-run ``` ## Running the sweep @@ -83,20 +37,20 @@ Start a tmux session so the sweep survives SSH disconnection: ```bash tmux new -s sweep -cd sweep -python sweep.py # GPU 2 for training, localhost:8000 for vLLM +python sweep/sweep.py # defaults to GPU 2 # Ctrl+B, D → detach (safe to close laptop) # tmux attach -t sweep → reconnect later ``` -If the vLLM server is on a different port or host, use `--vllm-url` and -`--container-checkpoints-dir` to override: +To use a different GPU: ```bash -python sweep.py --vllm-url http://localhost:8001 --container-checkpoints-dir /data/checkpoints +python sweep/sweep.py --gpus 0 ``` -Progress is logged to `sweep.log` and to the W&B project `VOICE`. +Progress is logged to `sweep/sweep.log` and to the W&B project `VOICE`. +Completions are uploaded to W&B as artifacts named `{run_name}-epoch{N}-Results` +and written locally to `sweep/checkpoints/{run_name}/completions_epoch_{N}.json`. ## Resuming after failure @@ -104,12 +58,12 @@ Progress is logged to `sweep.log` and to the W&B project `VOICE`. it will skip completed runs and retry failed ones: ```bash -python sweep.py +python sweep/sweep.py ``` ## Outputs -Results are written to `outputs/results.parquet` after each training run +Results are written to `sweep/outputs/results.parquet` after each training run completes. Schema: | Column | Description | @@ -118,7 +72,7 @@ completes. Schema: | `epoch` | Epoch number (1, 2, or 3) | | `learning_rate` | LoRA learning rate | | `lora_r` | LoRA rank | -| `lora_alpha` | LoRA alpha (= 2 × rank) | +| `lora_alpha` | LoRA alpha (= rank) | | `effective_batch_size` | Effective batch size | | `target_layers` | `attention` or `attention_mlp` | | `eval_loss` | Validation NLL loss (from axolotl trainer_state.json) | From 11fde9024cdfee334dfc9aef8981f10ceae5ddc8 Mon Sep 17 00:00:00 2001 From: Fin Griffin Date: Tue, 14 Apr 2026 20:07:57 +0100 Subject: [PATCH 38/68] fix(sweep): add repo root to PYTHONPATH so axolotl can import EvalCompletionsCallback --- sweep/sweep.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/sweep/sweep.py b/sweep/sweep.py index 720d908..cc39686 100644 --- a/sweep/sweep.py +++ b/sweep/sweep.py @@ -210,8 +210,17 @@ def run_training(config_path: Path) -> None: else: cmd = [sys.executable, "-m", "axolotl.cli.train", str(config_path)] + # Ensure the repo root is on PYTHONPATH so axolotl can import + # sweep.callbacks.EvalCompletionsCallback when loading the callback list + # from the per-run YAML config. + env = os.environ.copy() + repo_root = str(SWEEP_DIR.parent) + env["PYTHONPATH"] = ( + repo_root + ":" + env["PYTHONPATH"] if "PYTHONPATH" in env else repo_root + ) + log.info(f"Training on {n_gpus} GPU(s): {config_path.name}") - subprocess.run(cmd, check=True) + subprocess.run(cmd, check=True, env=env) # --------------------------------------------------------------------------- From 2218301a5dc0b48b752e76b7ca6c2f09937c638b Mon Sep 17 00:00:00 2001 From: Fin Griffin Date: Tue, 14 Apr 2026 20:23:11 +0100 Subject: [PATCH 39/68] build: upgrade axolotl pin from v0.16.1 to main for callbacks YAML support --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index f1c4555..c8d8ff7 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -6,7 +6,7 @@ readme = "README.md" requires-python = ">=3.12,<3.13" dependencies = [ "accelerate", - "axolotl @ git+https://github.com/axolotl-ai-cloud/axolotl.git@v0.16.1 ; sys_platform == 'linux'", + "axolotl @ git+https://github.com/axolotl-ai-cloud/axolotl.git@main ; sys_platform == 'linux'", "datasets>=4.5.0", "dotenv>=0.9.9", "huggingface-hub>=1.4.1", From 1fd9cbff53905a4ede7fa302822027f30c265b7c Mon Sep 17 00:00:00 2001 From: Fin Griffin Date: Tue, 14 Apr 2026 20:40:53 +0100 Subject: [PATCH 40/68] fix(sweep): switch to axolotl plugins API for callback registration Replace non-existent callbacks YAML key with the plugins system. EvalCompletionsPlugin wraps EvalCompletionsCallback via add_callbacks_pre_trainer. Also switch axolotl dependency from git source to PyPI package. --- pyproject.toml | 2 +- sweep/callbacks.py | 22 ++++++++++++++++++++++ sweep/master_config.yaml | 10 +++++----- 3 files changed, 28 insertions(+), 6 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index c8d8ff7..24f6c48 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -6,7 +6,7 @@ readme = "README.md" requires-python = ">=3.12,<3.13" dependencies = [ "accelerate", - "axolotl @ git+https://github.com/axolotl-ai-cloud/axolotl.git@main ; sys_platform == 'linux'", + "axolotl>=0.16.1 ; sys_platform == 'linux'", "datasets>=4.5.0", "dotenv>=0.9.9", "huggingface-hub>=1.4.1", diff --git a/sweep/callbacks.py b/sweep/callbacks.py index 6f9ca12..9469e0a 100644 --- a/sweep/callbacks.py +++ b/sweep/callbacks.py @@ -22,6 +22,7 @@ import torch import wandb +from axolotl.integrations.base import BasePlugin from datasets import load_dataset from transformers import TrainerCallback, TrainerControl, TrainerState, TrainingArguments @@ -186,3 +187,24 @@ def _generate_batch( generated = tokenizer.decode(new_tokens, skip_special_tokens=True) results.append({"messages": ex["messages"], "generated_response": generated}) return results + + +class EvalCompletionsPlugin(BasePlugin): + """Axolotl plugin that registers EvalCompletionsCallback before training. + + Register via the axolotl YAML config:: + + plugins: + - sweep.callbacks.EvalCompletionsPlugin + """ + + def add_callbacks_pre_trainer( + self, cfg: Any, model: Any + ) -> list[TrainerCallback]: + """Return the completions callback to be added to the Trainer. + + :param cfg: axolotl config dict. + :param model: the loaded model. + :returns: list containing the EvalCompletionsCallback instance. + """ + return [EvalCompletionsCallback()] diff --git a/sweep/master_config.yaml b/sweep/master_config.yaml index 5f3e9c0..724484f 100644 --- a/sweep/master_config.yaml +++ b/sweep/master_config.yaml @@ -113,11 +113,11 @@ axolotl: save_strategy: epoch save_total_limit: 3 - # Callback — generates validation completions at each epoch end using the - # live in-memory model. Requires sweep/ to be on PYTHONPATH (run from repo - # root, or set PYTHONPATH=. before launching axolotl). - callbacks: - - sweep.callbacks.EvalCompletionsCallback + # Plugin — generates validation completions at each epoch end using the + # live in-memory model. Requires sweep/ to be on PYTHONPATH (handled by + # sweep.py before launching axolotl). + plugins: + - sweep.callbacks.EvalCompletionsPlugin # W&B — wandb_name injected per run by sweep.py. use_wandb: true From e3b3d24d9609e12917880f44bf841239e11ce3d6 Mon Sep 17 00:00:00 2001 From: Fin Griffin Date: Wed, 15 Apr 2026 08:30:13 +0100 Subject: [PATCH 41/68] fix: axolotl from source --- pyproject.toml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pyproject.toml b/pyproject.toml index 24f6c48..7d37f4b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -25,6 +25,9 @@ dependencies = [ [tool.uv] required-environments = ["sys_platform == 'linux'"] +[tool.uv.sources] +axolotl = { git = "https://github.com/axolotl-ai-cloud/axolotl.git", branch = "main" } + [build-system] requires = ["setuptools>=68", "wheel"] build-backend = "setuptools.build_meta" From 5c28180e6c7cb4a46e6b37f285ff5c51a9eb7e0c Mon Sep 17 00:00:00 2001 From: Fin Griffin Date: Wed, 15 Apr 2026 08:36:40 +0100 Subject: [PATCH 42/68] fix: tokenizer = None err --- sweep/callbacks.py | 34 ++++++++++++++++++++++++++++------ 1 file changed, 28 insertions(+), 6 deletions(-) diff --git a/sweep/callbacks.py b/sweep/callbacks.py index 9469e0a..06a046e 100644 --- a/sweep/callbacks.py +++ b/sweep/callbacks.py @@ -51,9 +51,15 @@ class EvalCompletionsCallback(TrainerCallback): axolotl YAML as ``sweep.callbacks.EvalCompletionsCallback``. """ - def __init__(self) -> None: - """Initialise with an empty example cache.""" + def __init__(self, trainer: Any = None) -> None: + """Initialise with an empty example cache. + + :param trainer: the HF Trainer instance, stored so we can resolve + the tokenizer via ``trainer.processing_class`` at epoch end + (newer transformers deprecates passing tokenizer through kwargs). + """ self._examples: list[dict[str, Any]] = [] + self._trainer = trainer def on_train_begin( self, @@ -109,6 +115,19 @@ def on_epoch_end( "EvalCompletionsCallback: generating completions for epoch %d", epoch ) + # Newer transformers passes tokenizer via processing_class; fall back + # to the stored trainer reference when the kwarg arrives as None. + if tokenizer is None and self._trainer is not None: + tokenizer = getattr( + self._trainer, "processing_class", None + ) or getattr(self._trainer, "tokenizer", None) + if tokenizer is None: + log.error("EvalCompletionsCallback: tokenizer is None, skipping epoch %d", epoch) + return + + if model is None and self._trainer is not None: + model = self._trainer.model + model.eval() completions: list[dict[str, Any]] = [] for i in range(0, len(self._examples), INFERENCE_BATCH_SIZE): @@ -198,13 +217,16 @@ class EvalCompletionsPlugin(BasePlugin): - sweep.callbacks.EvalCompletionsPlugin """ - def add_callbacks_pre_trainer( - self, cfg: Any, model: Any + def add_callbacks_post_trainer( + self, cfg: Any, trainer: Any ) -> list[TrainerCallback]: """Return the completions callback to be added to the Trainer. + Called after the Trainer is built, so we can pass the trainer + instance into the callback and resolve ``processing_class`` later. + :param cfg: axolotl config dict. - :param model: the loaded model. + :param trainer: the built HF Trainer instance. :returns: list containing the EvalCompletionsCallback instance. """ - return [EvalCompletionsCallback()] + return [EvalCompletionsCallback(trainer=trainer)] From 2ac9558fcea4dab7bca6d94fcf3cfd5cff059092 Mon Sep 17 00:00:00 2001 From: Fin Griffin Date: Wed, 15 Apr 2026 08:45:01 +0100 Subject: [PATCH 43/68] fix: --- sweep/callbacks.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sweep/callbacks.py b/sweep/callbacks.py index 06a046e..7795860 100644 --- a/sweep/callbacks.py +++ b/sweep/callbacks.py @@ -174,7 +174,7 @@ def _generate_batch( ex["messages"], return_tensors="pt", add_generation_prompt=True, - ).squeeze(0) # (seq_len,) + )["input_ids"].squeeze(0) # (seq_len,) for ex in batch ] From 5cedd8a1c2dec44473eca11ad579c78caba6e0c8 Mon Sep 17 00:00:00 2001 From: Fin Griffin Date: Wed, 15 Apr 2026 09:06:10 +0100 Subject: [PATCH 44/68] chore: remove padding --- sweep/callbacks.py | 76 +++++++++++++++------------------------------- 1 file changed, 25 insertions(+), 51 deletions(-) diff --git a/sweep/callbacks.py b/sweep/callbacks.py index 7795860..ce21605 100644 --- a/sweep/callbacks.py +++ b/sweep/callbacks.py @@ -29,7 +29,6 @@ log = logging.getLogger(__name__) DATASET: str = "AccelerateScience/bush-dataset" -INFERENCE_BATCH_SIZE: int = 8 # Sampling parameters agreed for all experiments: # T=1.0 with no truncation samples from the exact learned distribution, @@ -128,18 +127,19 @@ def on_epoch_end( if model is None and self._trainer is not None: model = self._trainer.model + output_dir = Path(args.output_dir) + out_path = output_dir / f"completions_epoch_{epoch}.json" + out_path.write_text("[]") + model.eval() completions: list[dict[str, Any]] = [] - for i in range(0, len(self._examples), INFERENCE_BATCH_SIZE): - batch = self._examples[i : i + INFERENCE_BATCH_SIZE] - completions.extend(_generate_batch(batch, model, tokenizer)) + for example in self._examples: + result = _generate_one(example, model, tokenizer) + completions.append(result) + out_path.write_text(json.dumps(completions, indent=2)) model.train() - output_dir = Path(args.output_dir) - out_path = output_dir / f"completions_epoch_{epoch}.json" - out_path.write_text(json.dumps(completions)) - for comp in completions[:3]: - log.info(" [sample] %r", comp["generated_response"]) + log.info(" [sample] %r", completions[0]["generated_response"]) log.info( "EvalCompletionsCallback: wrote %d completions → %s", len(completions), @@ -155,57 +155,31 @@ def on_epoch_end( wandb.log_artifact(artifact) -def _generate_batch( - batch: list[dict[str, Any]], +def _generate_one( + example: dict[str, Any], model: Any, tokenizer: Any, -) -> list[dict[str, Any]]: - """Generate completions for one batch using left-padded inputs. +) -> dict[str, Any]: + """Generate a completion for a single example. - :param batch: list of examples, each with a ``messages`` list - (system + user only — no assistant turn). + :param example: dict with a ``messages`` list (system + user only). :param model: the current model. :param tokenizer: the current tokenizer. - :returns: list of completion dicts with ``messages`` and - ``generated_response`` keys. + :returns: completion dict with ``messages`` and ``generated_response`` keys. """ - encoded = [ - tokenizer.apply_chat_template( - ex["messages"], - return_tensors="pt", - add_generation_prompt=True, - )["input_ids"].squeeze(0) # (seq_len,) - for ex in batch - ] - - # Left-pad all sequences to the length of the longest in the batch. - max_len = max(t.shape[0] for t in encoded) - pad_id = tokenizer.pad_token_id - input_ids = torch.full( - (len(batch), max_len), pad_id, dtype=torch.long, device=model.device - ) - attention_mask = torch.zeros( - (len(batch), max_len), dtype=torch.long, device=model.device - ) - for j, t in enumerate(encoded): - start = max_len - t.shape[0] - input_ids[j, start:] = t.to(model.device) - attention_mask[j, start:] = 1 + input_ids = tokenizer.apply_chat_template( + example["messages"], + return_tensors="pt", + add_generation_prompt=True, + )["input_ids"].to(model.device) # (1, seq_len) + prompt_len = input_ids.shape[1] with torch.no_grad(): - out = model.generate( - input_ids, - attention_mask=attention_mask, - **GENERATION_CONFIG, - ) + out = model.generate(input_ids, **GENERATION_CONFIG) - results = [] - for j, ex in enumerate(batch): - # out includes the (padded) prompt tokens; skip past them. - new_tokens = out[j, max_len:] - generated = tokenizer.decode(new_tokens, skip_special_tokens=True) - results.append({"messages": ex["messages"], "generated_response": generated}) - return results + new_tokens = out[0, prompt_len:] + generated = tokenizer.decode(new_tokens, skip_special_tokens=True) + return {"messages": example["messages"], "generated_response": generated} class EvalCompletionsPlugin(BasePlugin): From 027794a00f83f9d479b9226000d1c1d289f45ddf Mon Sep 17 00:00:00 2001 From: Fin Griffin Date: Wed, 15 Apr 2026 09:19:16 +0100 Subject: [PATCH 45/68] chore: temperature -> 0.7 --- sweep/callbacks.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sweep/callbacks.py b/sweep/callbacks.py index ce21605..f9c3319 100644 --- a/sweep/callbacks.py +++ b/sweep/callbacks.py @@ -31,11 +31,11 @@ DATASET: str = "AccelerateScience/bush-dataset" # Sampling parameters agreed for all experiments: -# T=1.0 with no truncation samples from the exact learned distribution, +# T=0.7 with no truncation samples from the exact learned distribution, # eliminating any gap between the training and inference distributions. GENERATION_CONFIG: dict[str, Any] = { "do_sample": True, - "temperature": 1.0, + "temperature": 0.7, "top_p": 1.0, "top_k": 0, "repetition_penalty": 1.0, From eda3fe2cf35f6a0d551952fea5e12fbad276b20c Mon Sep 17 00:00:00 2001 From: Fin Griffin Date: Wed, 15 Apr 2026 09:29:55 +0100 Subject: [PATCH 46/68] add batching --- sweep/callbacks.py | 161 +++++++++++++++++++++++++++++++-------------- 1 file changed, 112 insertions(+), 49 deletions(-) diff --git a/sweep/callbacks.py b/sweep/callbacks.py index f9c3319..8a03a93 100644 --- a/sweep/callbacks.py +++ b/sweep/callbacks.py @@ -1,13 +1,14 @@ """Axolotl TrainerCallback that generates validation completions at each epoch end. -Registered via the axolotl ``callbacks`` YAML key — instantiated with no -arguments. All configuration is sourced from environment variables or the -TrainingArguments passed at runtime. +Registered via the axolotl ``plugins`` YAML key as +``sweep.callbacks.EvalCompletionsPlugin``. -Validation examples are loaded once at train-begin and cached. At each epoch -end the in-memory model generates completions in left-padded batches, writes -them to ``{output_dir}/completions_epoch_{N}.json``, and uploads an artifact -to W&B named ``{run_name}-epoch{N}-Results``. +All GPUs participate in generation: the 100-example validation set is sharded +across processes (rank 0 gets indices 0, 2, 4, …; rank 1 gets 1, 3, 5, …). +Each shard is generated in left-padded batches of ``INFERENCE_BATCH_SIZE``. +Rank 0 streams its own partial results to disk after every batch so the file +is readable mid-run. After all ranks finish, results are gathered and rank 0 +writes the final ordered JSON and uploads a W&B artifact. The output format is identical to the previous vLLM inference pipeline:: @@ -21,6 +22,7 @@ from typing import Any import torch +import torch.distributed import wandb from axolotl.integrations.base import BasePlugin from datasets import load_dataset @@ -30,6 +32,10 @@ DATASET: str = "AccelerateScience/bush-dataset" +# 32 examples per batch fits comfortably in 80 GB VRAM. +# With 2 GPUs each handling ~50 examples this means ≤ 2 forward passes per GPU. +INFERENCE_BATCH_SIZE: int = 32 + # Sampling parameters agreed for all experiments: # T=0.7 with no truncation samples from the exact learned distribution, # eliminating any gap between the training and inference distributions. @@ -44,18 +50,14 @@ class EvalCompletionsCallback(TrainerCallback): - """Generate and log validation completions at each epoch end. - - Designed to be zero-argument so it can be registered directly in the - axolotl YAML as ``sweep.callbacks.EvalCompletionsCallback``. - """ + """Generate and log validation completions at each epoch end.""" def __init__(self, trainer: Any = None) -> None: """Initialise with an empty example cache. :param trainer: the HF Trainer instance, stored so we can resolve - the tokenizer via ``trainer.processing_class`` at epoch end - (newer transformers deprecates passing tokenizer through kwargs). + the tokenizer via ``trainer.processing_class`` and unwrap the + model via ``trainer.accelerator`` at epoch end. """ self._examples: list[dict[str, Any]] = [] self._trainer = trainer @@ -97,48 +99,98 @@ def on_epoch_end( ) -> None: """Generate completions for all validation examples and persist results. - Runs only on the main process (rank 0) in distributed training. + All ranks generate their shard in parallel; rank 0 gathers and writes. :param args: HF TrainingArguments. :param state: TrainerState — ``state.epoch`` gives the current epoch. :param control: TrainerControl object. - :param model: the live model (already on the correct device). - :param tokenizer: the tokenizer associated with the model. + :param model: the live model (DDP/FSDP wrapped; unwrapped internally). + :param tokenizer: the tokenizer, or None in newer transformers (resolved + via ``processing_class`` kwarg or the stored trainer reference). :returns: None """ - if args.process_index != 0: - return - epoch = round(state.epoch) log.info( "EvalCompletionsCallback: generating completions for epoch %d", epoch ) - # Newer transformers passes tokenizer via processing_class; fall back - # to the stored trainer reference when the kwarg arrives as None. + # Newer transformers passes the tokenizer as processing_class, not tokenizer. + if tokenizer is None: + tokenizer = kwargs.get("processing_class") if tokenizer is None and self._trainer is not None: tokenizer = getattr( self._trainer, "processing_class", None ) or getattr(self._trainer, "tokenizer", None) if tokenizer is None: - log.error("EvalCompletionsCallback: tokenizer is None, skipping epoch %d", epoch) + log.error( + "EvalCompletionsCallback: tokenizer is None, skipping epoch %d", epoch + ) return + # Unwrap DDP/FSDP wrapper so .generate() is available. if model is None and self._trainer is not None: model = self._trainer.model + if self._trainer is not None and hasattr(self._trainer, "accelerator"): + model = self._trainer.accelerator.unwrap_model(model) + + # Shard the validation set across all ranks so every GPU contributes. + local_indices = list( + range(args.process_index, len(self._examples), args.world_size) + ) + local_examples = [self._examples[i] for i in local_indices] output_dir = Path(args.output_dir) out_path = output_dir / f"completions_epoch_{epoch}.json" - out_path.write_text("[]") + orig_padding_side = tokenizer.padding_side + tokenizer.padding_side = "left" model.eval() - completions: list[dict[str, Any]] = [] - for example in self._examples: - result = _generate_one(example, model, tokenizer) - completions.append(result) - out_path.write_text(json.dumps(completions, indent=2)) + + local_completions: list[dict[str, Any]] = [] + rank0_by_idx: dict[int, dict[str, Any]] = {} + + for i in range(0, len(local_examples), INFERENCE_BATCH_SIZE): + batch_examples = local_examples[i : i + INFERENCE_BATCH_SIZE] + batch_indices = local_indices[i : i + INFERENCE_BATCH_SIZE] + results = _generate_batch(batch_examples, model, tokenizer) + local_completions.extend(results) + + # Rank 0 streams partial results after every batch. + if args.process_index == 0: + for orig_idx, result in zip(batch_indices, results): + rank0_by_idx[orig_idx] = result + out_path.write_text( + json.dumps( + [rank0_by_idx[j] for j in sorted(rank0_by_idx)], indent=2 + ) + ) + model.train() + tokenizer.padding_side = orig_padding_side + + # Gather every rank's shard onto rank 0. + if ( + args.world_size > 1 + and torch.distributed.is_available() + and torch.distributed.is_initialized() + ): + all_shards: list[Any] = [None] * args.world_size + torch.distributed.all_gather_object( + all_shards, (local_indices, local_completions) + ) + else: + all_shards = [(local_indices, local_completions)] + + if args.process_index != 0: + return + + # Reassemble in original dataset order. + completions: list[dict[str, Any]] = [{}] * len(self._examples) + for proc_indices, proc_completions in all_shards: + for orig_idx, comp in zip(proc_indices, proc_completions): + completions[orig_idx] = comp + out_path.write_text(json.dumps(completions, indent=2)) log.info(" [sample] %r", completions[0]["generated_response"]) log.info( "EvalCompletionsCallback: wrote %d completions → %s", @@ -155,31 +207,42 @@ def on_epoch_end( wandb.log_artifact(artifact) -def _generate_one( - example: dict[str, Any], +def _generate_batch( + batch: list[dict[str, Any]], model: Any, tokenizer: Any, -) -> dict[str, Any]: - """Generate a completion for a single example. - - :param example: dict with a ``messages`` list (system + user only). - :param model: the current model. - :param tokenizer: the current tokenizer. - :returns: completion dict with ``messages`` and ``generated_response`` keys. +) -> list[dict[str, Any]]: + """Generate completions for a batch using left-padded inputs. + + :param batch: list of examples, each with a ``messages`` list + (system + user only — no assistant turn). + :param model: unwrapped model (already on the correct device). + :param tokenizer: tokenizer with ``padding_side`` set to ``"left"``. + :returns: list of completion dicts with ``messages`` and + ``generated_response`` keys. """ - input_ids = tokenizer.apply_chat_template( - example["messages"], - return_tensors="pt", - add_generation_prompt=True, - )["input_ids"].to(model.device) # (1, seq_len) - prompt_len = input_ids.shape[1] + prompts = [ + tokenizer.apply_chat_template( + ex["messages"], tokenize=False, add_generation_prompt=True + ) + for ex in batch + ] + inputs = tokenizer( + prompts, return_tensors="pt", padding=True, truncation=False + ).to(model.device) + padded_len = inputs["input_ids"].shape[1] with torch.no_grad(): - out = model.generate(input_ids, **GENERATION_CONFIG) - - new_tokens = out[0, prompt_len:] - generated = tokenizer.decode(new_tokens, skip_special_tokens=True) - return {"messages": example["messages"], "generated_response": generated} + outputs = model.generate(**inputs, **GENERATION_CONFIG) + + results = [] + for j, ex in enumerate(batch): + # outputs[j] = [left-pad tokens] + [prompt tokens] + [generated tokens] + # All inputs share the same padded_len so slicing is uniform. + new_tokens = outputs[j, padded_len:] + generated = tokenizer.decode(new_tokens, skip_special_tokens=True) + results.append({"messages": ex["messages"], "generated_response": generated}) + return results class EvalCompletionsPlugin(BasePlugin): From 4f4dd719625e8ec5b60cf135aa5734d8a6033aed Mon Sep 17 00:00:00 2001 From: Fin Griffin Date: Wed, 15 Apr 2026 09:38:27 +0100 Subject: [PATCH 47/68] chore: update default devices --- sweep/sweep.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sweep/sweep.py b/sweep/sweep.py index cc39686..4fd0ea1 100644 --- a/sweep/sweep.py +++ b/sweep/sweep.py @@ -13,7 +13,7 @@ python sweep.py python sweep.py --dry-run # print grid without training - python sweep.py --gpus 2 # override training GPU (default: 2) + python sweep.py --gpus 2 # override training GPU (default: 2,3) """ import argparse @@ -312,8 +312,8 @@ def main() -> None: ) parser.add_argument( "--gpus", - default="2", - help="Comma-separated CUDA device indices for training (default: 2)", + default="2,3", + help="Comma-separated CUDA device indices for training (default: 2,3)", ) args = parser.parse_args() From 84686026ba170bbcf5b77ad82c59d85e8e72264b Mon Sep 17 00:00:00 2001 From: Fin Griffin Date: Wed, 15 Apr 2026 09:41:43 +0100 Subject: [PATCH 48/68] chore: update wandb project --- sweep/master_config.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/sweep/master_config.yaml b/sweep/master_config.yaml index 724484f..afacee6 100644 --- a/sweep/master_config.yaml +++ b/sweep/master_config.yaml @@ -122,3 +122,4 @@ axolotl: # W&B — wandb_name injected per run by sweep.py. use_wandb: true wandb_project: VOICE + wandb_entity: accelerate-science From 4c091e306692adf46d180e33ad83e287a133779d Mon Sep 17 00:00:00 2001 From: Fin Griffin Date: Wed, 15 Apr 2026 10:04:36 +0100 Subject: [PATCH 49/68] fix eval loss logging --- sweep/callbacks.py | 36 ++++++++++++++++++++++++++++++++++++ sweep/sweep.py | 12 ++++++++++-- 2 files changed, 46 insertions(+), 2 deletions(-) diff --git a/sweep/callbacks.py b/sweep/callbacks.py index 8a03a93..b200450 100644 --- a/sweep/callbacks.py +++ b/sweep/callbacks.py @@ -88,6 +88,42 @@ def on_train_begin( len(self._examples), ) + def on_evaluate( + self, + args: TrainingArguments, + state: TrainerState, + control: TrainerControl, + metrics: dict[str, Any] | None = None, + **kwargs: Any, + ) -> None: + """Persist eval_loss for this epoch to eval_losses.json. + + Called by HF Trainer immediately after the evaluation loop, with + ``metrics`` containing the freshly computed ``eval_loss``. Writing + our own file removes the dependency on trainer_state.json parsing. + + :param args: HF TrainingArguments. + :param state: current TrainerState. + :param control: TrainerControl object. + :param metrics: evaluation metrics dict — ``eval_loss`` is always + present when an evaluation loop completes with losses. + :returns: None + """ + if args.process_index != 0 or not metrics or "eval_loss" not in metrics: + return + epoch = round(state.epoch) + losses_path = Path(args.output_dir) / "eval_losses.json" + losses: dict[str, float] = ( + json.loads(losses_path.read_text()) if losses_path.exists() else {} + ) + losses[str(epoch)] = float(metrics["eval_loss"]) + losses_path.write_text(json.dumps(losses, indent=2)) + log.info( + "EvalCompletionsCallback: epoch %d eval_loss=%.4f", + epoch, + metrics["eval_loss"], + ) + def on_epoch_end( self, args: TrainingArguments, diff --git a/sweep/sweep.py b/sweep/sweep.py index 4fd0ea1..99e9d8a 100644 --- a/sweep/sweep.py +++ b/sweep/sweep.py @@ -163,13 +163,21 @@ def write_run_config( # Eval loss (from axolotl's trainer_state.json) # --------------------------------------------------------------------------- def _get_all_eval_losses(output_dir: Path) -> dict[int, float]: - """Read per-epoch validation losses from trainer_state.json. + """Read per-epoch validation losses written by EvalCompletionsCallback. - HF Trainer writes this file to the run output directory after training. + Prefers eval_losses.json (written directly by the callback via on_evaluate, + which receives the metrics dict immediately after each evaluation loop). + Falls back to trainer_state.json for runs that predate the callback change. :param output_dir: root output directory for the run. :returns: dict mapping epoch int to eval_loss float. """ + losses_file = output_dir / "eval_losses.json" + if losses_file.exists(): + raw = json.loads(losses_file.read_text()) + return {int(k): float(v) for k, v in raw.items()} + + # Fallback: parse trainer_state.json written by HF Trainer after training. state_file = output_dir / "trainer_state.json" if not state_file.exists(): return {} From 20401130f8c9ecfbc41a882f69176a6cf82d5d5c Mon Sep 17 00:00:00 2001 From: Fin Griffin Date: Thu, 21 May 2026 16:09:09 +0100 Subject: [PATCH 50/68] feat(docs): add docs for data, evals and stylometry --- README.md | 13 ++++++- cspell/library-words.txt | 2 + cspell/project-words.txt | 1 + docs/00_data.md | 22 +++++++++++ docs/01_stylometry.md | 52 ++++++++++++++++++++++++++ docs/02_evals.md | 80 ++++++++++++++++++++++++++++++++++++++++ 6 files changed, 169 insertions(+), 1 deletion(-) create mode 100644 docs/00_data.md create mode 100644 docs/01_stylometry.md create mode 100644 docs/02_evals.md diff --git a/README.md b/README.md index 9c1ae2b..f6a441d 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,14 @@ -# VOICE - Fine-tuning for Stylistic Fidelity +# 🗣️ VOICE + +... --- + +## Documentation + +``` +docs/ +├── 00_data.md — Included datasets +├── 01_evals.md — Evaluation suite: scoring and interpretation +└── 02_stylometry.md — Stylometric metrics: definition and catalogue +``` diff --git a/cspell/library-words.txt b/cspell/library-words.txt index dc8d8fa..3e2f1e1 100644 --- a/cspell/library-words.txt +++ b/cspell/library-words.txt @@ -9,3 +9,5 @@ ylabel frameon allclose linalg +mathcal +mathbb diff --git a/cspell/project-words.txt b/cspell/project-words.txt index 43b5325..68a0486 100644 --- a/cspell/project-words.txt +++ b/cspell/project-words.txt @@ -12,3 +12,4 @@ bonf bonferroni aeiou stylometrically +evals diff --git a/docs/00_data.md b/docs/00_data.md new file mode 100644 index 0000000..e504061 --- /dev/null +++ b/docs/00_data.md @@ -0,0 +1,22 @@ +# Datasets + +--- + +Two example datasets are included, each containing press conference Q&A transcripts split into train, validation and test sets: + +| President | HuggingFace | +|---|---| +| Barack Obama | [`AccelerateScience/bo-press-conference-qa`](https://huggingface.co/datasets/AccelerateScience/bo-press-conference-qa) | +| George W. Bush | [`AccelerateScience/gwb-press-conference-qa`](https://huggingface.co/datasets/AccelerateScience/gwb-press-conference-qa) | + +Each example is a single JSONL record in chat format: + +```json +{ + "messages": [ + {"role": "system", "content": "You are president Barack Obama ..."}, + {"role": "user", "content": ""}, + {"role": "assistant", "content": ""} + ] +} +``` diff --git a/docs/01_stylometry.md b/docs/01_stylometry.md new file mode 100644 index 0000000..ee053e4 --- /dev/null +++ b/docs/01_stylometry.md @@ -0,0 +1,52 @@ +# Stylometric Metrics + +--- + +A **stylometric metric** is any function + +$$f : \mathcal{T} \rightarrow \mathbb{R}$$ + +that maps a text string to a real scalar capturing some surface property of writing style. VOICE treats each metric as a distribution over a corpus: given a set of texts, $f$ is applied to each one to produce a sample from the author's stylometric distribution for that feature. + +## Implemented Metrics + +### Word Length Distribution +Moments of the per-word character length distribution. + +| Metric | Description | +|---|---| +| `avg_word_length` | Mean word length | +| `std_word_length` | Standard deviation of word length | +| `skew_word_length` | Skewness of word length | +| `kurtosis_word_length` | Kurtosis of word length | + +### Vocabulary Richness +Type–token and word statistics measuring lexical diversity. + +| Metric | Description | +|---|---| +| `type_token_ratio` | Unique tokens / total tokens | +| `moving_avg_type_token_ratio` | TTR averaged over a sliding window (MATTR) | +| `hapax_legomena_ratio` | Fraction of words appearing exactly once | +| `dis_legomena_ratio` | Fraction of words appearing exactly twice | +| `tri_legomena_ratio` | Fraction of words appearing exactly three times | + +### Function Words +| Metric | Description | +|---|---| +| `function_word_ratio` | Proportion of tokens drawn from a closed function-word list | + +### Character N-gram Diversity +Type–token ratio and MATTR computed over character $n$-grams for $n \in \{3, 4, 5\}$. + +| Metric | Description | +|---|---| +| `char_{n}gram_type_token_ratio` | Character $n$-gram TTR | +| `char_{n}gram_moving_avg_type_token_ratio` | Character $n$-gram MATTR | + +### Text Length +| Metric | Description | +|---|---| +| `num_words` | Total word count | + +> **Note:** `num_words` may be deprecated in a future release. It does not tend to be used as a signature for authorship attribution in the broader stylometry literature. diff --git a/docs/02_evals.md b/docs/02_evals.md new file mode 100644 index 0000000..4b55fce --- /dev/null +++ b/docs/02_evals.md @@ -0,0 +1,80 @@ +# Evaluation Suite + +--- + +## How Scoring Works + +For a set of model completions $\mathcal{C} = \{c_1, \dots, c_n\}$ and a set of reference answers $\mathcal{D} = \{d_1, \dots, d_n\}$ drawn from the same underlying question corpus, VOICE computes an **alignment score** in $[0, 1]$ measuring how stylometrically similar the completions are to the reference author. Both $\mathcal{C}$ and $\mathcal{D}$ are responses to the same set of prompts, so any observed distributional difference reflects style rather than content. + +### Step 1: Wasserstein Distance + +For each metric $f$, apply it to every text to get empirical distributions: + +$$X = \{f(c_i)\}_{i=1}^n \quad \text{and} \quad Y = \{f(d_i)\}_{i=1}^n$$ + +and compute their Wasserstein-1 distance $W(X, Y)$. A smaller distance means the two distributions are closer in shape. + +### Step 2: Calibration + +To interpret $W(X, Y)$ we need to know what distance is *expected even between two samples of the same size from the same author*. VOICE estimates this from the **training split** of $\mathcal{D}$ by bootstrap resampling: repeatedly drawing two non-overlapping subsets of size $n$ and computing their mutual Wasserstein distance. This yields a reference distribution $\mathcal{W}_0$ of self-distances that characterises natural within-author variation under the same sample size as the completions being evaluated. + +### Step 3: Tail Value + +The observed distance is located within $\mathcal{W}_0$ via its empirical CDF: + +$$p = \hat{F}_{\mathcal{W}_0}(W(X, Y)), \qquad \tau = 1 - p$$ + +$\tau$ is the **tail value**: the fraction of self-distances that *exceed* the observed distance. A high $\tau$ means the model's completions are no further from the reference than typical same-author samples, i.e. they are stylistically consistent with the reference author. + +### Step 4: Group and Overall Score + +Metrics are organised into groups (see [Stylometric Metrics](01_stylometry.md)). Each group captures a distinct linguistic object — word length, vocabulary richness, and so on — and the metrics within it represent different ways of characterising that same object. Because they study the same underlying property, within-group metrics are highly correlated; averaging within groups before aggregating across them prevents any single linguistic dimension from dominating the score simply by having more metrics defined for it. + +Within each group the tail values are averaged: + +$$\bar{\tau}_g = \frac{1}{|g|} \sum_{f \in g} \tau_f$$ + +The overall **alignment score** is then the mean over groups, weighting each group equally: + +$$\text{score} = \frac{1}{G} \sum_{g=1}^{G} \bar{\tau}_g \in [0, 1]$$ + +A score of **1** would mean the completions are stylistically indistinguishable from the reference even relative to same-author variation; in practice this is unrealistic but the directionality is still informative. + +--- + +## This Is Not a Hypothesis Test + +The tail value $\tau$ resembles a p-value but is not one and should not be interpreted as such. + +A classical hypothesis test asks whether there is sufficient evidence to reject a null hypothesis. That framing entails a binary decision and is sensitive to sample size: with enough data, even negligible stylistic differences will cross any fixed significance threshold. + +VOICE is not concerned with whether two distributions are statistically indistinguishable. It asks how similar they are, on a continuous scale, relative to the natural within-author variation present in the training corpus. The calibration distribution $\mathcal{W}_0$ serves as a normalisation baseline, not a null to be rejected. There is no significance threshold and no p-value, only a score. + +--- + +## Example + +Suppose a model achieves an alignment score of **0.2**. A natural reading is: + +> On average across stylometric groups, the model's completions sit at the 80th percentile of same-author self-distances, meaning the completions are stylistically closer to the reference than 20% of within-author sample pairs drawn from the training corpus. + +--- + +## Diagnostics + +The API exposes intermediate results for deeper inspection: + +```python +results = make_comparison(completions, true_ds) + +# Per-metric tail values +results.metric_tails # dict[str, float] + +# Per-group average tail values +results.group_tails # dict[MetricGroup, float] + +# Overall score +results.score # float +``` + +Per-metric tails are useful for identifying which stylometric dimensions are misaligned; per-group tails aggregate correlated metrics and correspond directly to the terms summed in the overall score. From 6fe6287b96d772a69f1f94f335b12bde218f070f Mon Sep 17 00:00:00 2001 From: Fin Griffin Date: Fri, 22 May 2026 09:51:16 +0100 Subject: [PATCH 51/68] chore: update gitignore --- .gitignore | 6 +++++- cspell/library-words.txt | 3 +++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index c849113..d0d1f59 100644 --- a/.gitignore +++ b/.gitignore @@ -65,4 +65,8 @@ notes.md # Sweep results sweep/results.parquet sweep/sweep.log -sweep/state.json \ No newline at end of file +sweep/state.json + +# Fine-tuning runs and local configs +runs/ +configs/ diff --git a/cspell/library-words.txt b/cspell/library-words.txt index ed50a9b..46d0eca 100644 --- a/cspell/library-words.txt +++ b/cspell/library-words.txt @@ -17,3 +17,6 @@ checkpointing proc peft pyyaml +libcuda +PYTHONPATH +venv From 81d76d114f9490a17a5a744f96e94f53faf1875a Mon Sep 17 00:00:00 2001 From: Fin Griffin Date: Fri, 22 May 2026 09:56:30 +0100 Subject: [PATCH 52/68] chore: add configs and run dirs --- .gitignore | 6 +++++- configs/single/.gitkeep | 0 configs/sweep/.gitkeep | 0 runs/.gitkeep | 0 4 files changed, 5 insertions(+), 1 deletion(-) create mode 100644 configs/single/.gitkeep create mode 100644 configs/sweep/.gitkeep create mode 100644 runs/.gitkeep diff --git a/.gitignore b/.gitignore index d0d1f59..e0d9f1d 100644 --- a/.gitignore +++ b/.gitignore @@ -69,4 +69,8 @@ sweep/state.json # Fine-tuning runs and local configs runs/ -configs/ +!runs/.gitkeep +configs/single +configs/sweep +!configs/single/.gitkeep +!configs/sweep/.gitkeep diff --git a/configs/single/.gitkeep b/configs/single/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/configs/sweep/.gitkeep b/configs/sweep/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/runs/.gitkeep b/runs/.gitkeep new file mode 100644 index 0000000..e69de29 From f5893dafbf92230147ee7da52f8561d70a5be62c Mon Sep 17 00:00:00 2001 From: Fin Griffin Date: Fri, 22 May 2026 10:08:53 +0100 Subject: [PATCH 53/68] feat(data): add local dataset loading to VoiceDataset --- src/voice/__init__.py | 3 +- src/voice/datasets/__init__.py | 14 ++++-- src/voice/datasets/dataset.py | 42 +++++++++++++++- src/voice/datasets/get_dataset.py | 47 +++++++++++++++-- tests/voice/datasets/test_dataset.py | 36 ++++++++++++- tests/voice/datasets/test_get_dataset.py | 64 +++++++++++++++++++++++- 6 files changed, 194 insertions(+), 12 deletions(-) diff --git a/src/voice/__init__.py b/src/voice/__init__.py index a3a9cc5..3f54ae8 100644 --- a/src/voice/__init__.py +++ b/src/voice/__init__.py @@ -9,11 +9,12 @@ make_comparison, stylometric_distribution, ) -from voice.datasets import DatasetSpec, get_dataset +from voice.datasets import DatasetSpec, LocalDatasetSpec, get_dataset from voice.stylometry import get_groups, get_metrics __all__: list[str] = [ "DatasetSpec", + "LocalDatasetSpec", "get_metrics", "get_groups", "get_dataset", diff --git a/src/voice/datasets/__init__.py b/src/voice/datasets/__init__.py index 696e12e..75b3d0f 100644 --- a/src/voice/datasets/__init__.py +++ b/src/voice/datasets/__init__.py @@ -4,12 +4,18 @@ This package contains user-facing abstractions for dataset management, in particular we expose: -- `DatasetSpec` - Lightweight, declarative specification of a dataset. -- `VoiceDataset` - Split-aware wrapper around a Hugging Face dataset. +- `DatasetSpec` - Lightweight, declarative specification of a HF dataset. +- `LocalDatasetSpec` - Specification for a locally saved dataset. +- `VoiceDataset` - Split-aware wrapper around a dataset. - `get_dataset` - Entrypoint for materialising a dataset from a specification. """ -from voice.datasets.dataset import DatasetSpec, VoiceDataset +from voice.datasets.dataset import DatasetSpec, LocalDatasetSpec, VoiceDataset from voice.datasets.get_dataset import get_dataset -__all__: list[str] = ["DatasetSpec", "VoiceDataset", "get_dataset"] +__all__: list[str] = [ + "DatasetSpec", + "LocalDatasetSpec", + "VoiceDataset", + "get_dataset", +] diff --git a/src/voice/datasets/dataset.py b/src/voice/datasets/dataset.py index 9e7d821..54ef88c 100644 --- a/src/voice/datasets/dataset.py +++ b/src/voice/datasets/dataset.py @@ -5,6 +5,7 @@ - `DatasetSpec` - A lightweight declarative specification of a dataset hosted on Hugging Face. +- `LocalDatasetSpec` - A specification for a locally saved dataset. - `_PinnedDatasetSpec` - An internal revision-pinned specification resolved to a specific git commit SHA. - `Example` - A representation of a single question-answer example @@ -18,6 +19,7 @@ import re from collections.abc import Callable, Iterator, Mapping, Sequence from dataclasses import dataclass +from pathlib import Path from typing import Any, NamedTuple, overload from datasets import Dataset @@ -29,7 +31,7 @@ # ----------------------------------------------------------------------------- -_SHA_RE = re.compile(r"[0-9a-f]{7,40}$") +_SHA_RE = re.compile(r"[0-9a-f]{7,40}$|local$") @dataclass(frozen=True, slots=True) @@ -99,6 +101,44 @@ def _pin( return _PinnedDatasetSpec.from_spec(self, resolve_revision) +@dataclass(frozen=True, slots=True) +class LocalDatasetSpec: + """ + Lightweight specification of a locally saved dataset. + + Expects one ``.jsonl`` file per split at ``{path}/{split}.jsonl`` + (e.g. ``path/train.jsonl``, ``path/validation.jsonl``). + + .. attribute :: path + + Directory containing the per-split ``.jsonl`` files. + + .. attribute :: splits + + Dataset splits to include (options: 'train','validation','test') + """ + + path: Path + splits: tuple[Split, ...] = (Split.TRAIN,) + + def __post_init__(self) -> None: + """ + Validate and normalise the specification. + + :return: None + :raises ValueError: If `splits` is empty + """ + if not self.splits: + raise ValueError("`splits` must be non-empty") + splits = ( + (self.splits,) + if isinstance(self.splits, (str, Split)) + else self.splits + ) + norm = tuple(Split.parse(s) for s in splits) + object.__setattr__(self, "splits", norm) + + @dataclass(frozen=True, slots=True) class _PinnedDatasetSpec: """ diff --git a/src/voice/datasets/get_dataset.py b/src/voice/datasets/get_dataset.py index fe5fd83..8591622 100644 --- a/src/voice/datasets/get_dataset.py +++ b/src/voice/datasets/get_dataset.py @@ -23,6 +23,7 @@ from voice.datasets._schema import Split from voice.datasets.dataset import ( DatasetSpec, + LocalDatasetSpec, VoiceDataset, _PinnedDatasetSpec, ) @@ -133,21 +134,59 @@ def _validate_canonical(ds: Dataset) -> None: # ----------------------------------------------------------------------------- -def get_dataset(spec: DatasetSpec) -> VoiceDataset: +def _get_local_dataset(spec: LocalDatasetSpec) -> VoiceDataset: """ - Materialise a Hugging Face dataset as a VoiceDataset. + Materialise a locally saved dataset as a VoiceDataset. - Steps: + Expects one ``.jsonl`` file per split at ``{path}/{split}.jsonl`` + (e.g. ``path/train.jsonl``, ``path/validation.jsonl``). + + :param spec: Local dataset specification + :return: Split-aware VoiceDataset + :raises RuntimeError: If a split cannot be loaded + """ + pinned = _PinnedDatasetSpec( + repo_id=str(spec.path), + revision="local", + splits=spec.splits, + ) + datasets: dict[Split, Dataset] = {} + for split in spec.splits: + jsonl_path = spec.path / f"{split.value}.jsonl" + try: + ds = load_dataset( + "json", + data_files={split.value: str(jsonl_path)}, + split=split.value, + ) + except Exception as e: + raise RuntimeError( + f"Failed to load split '{split.value}' from {jsonl_path}" + ) from e + ds = _canonicalise_dataset(ds) + _validate_canonical(ds) + datasets[split] = ds + return VoiceDataset(datasets=datasets, spec=pinned) + + +def get_dataset(spec: DatasetSpec | LocalDatasetSpec) -> VoiceDataset: + """ + Materialise a dataset as a VoiceDataset. + + Accepts either a Hugging Face spec or a local spec. For HF specs: 1. Resolve DatasetSpec to _PinnedDatasetSpec. 2. Load requested splits from Hugging Face. 3. Canonicalise each split into (system, question, answer). 4. Validate canonical structure. 5. Construct VoiceDataset. - :param spec: Dataset specification + :param spec: Dataset specification (HF or local) :return: Split-aware VoiceDataset :raises RuntimeError: If a split cannot be loaded """ + if isinstance(spec, LocalDatasetSpec): + return _get_local_dataset(spec) + # Resolve dataset revision pinned: _PinnedDatasetSpec = spec._pin(_resolve_revision) diff --git a/tests/voice/datasets/test_dataset.py b/tests/voice/datasets/test_dataset.py index db0e983..9eb430e 100644 --- a/tests/voice/datasets/test_dataset.py +++ b/tests/voice/datasets/test_dataset.py @@ -3,6 +3,7 @@ Scope: - DatasetSpec validation/normalisation +- LocalDatasetSpec validation/normalisation - Revision pinning invariants with _PinnedDatasetSpec - VoiceDataset split access """ @@ -10,11 +11,12 @@ from __future__ import annotations import dataclasses +from pathlib import Path import pytest from datasets import Dataset -from voice import DatasetSpec +from voice import DatasetSpec, LocalDatasetSpec from voice.datasets import VoiceDataset from voice.datasets._schema import Split from voice.datasets.dataset import ( @@ -84,6 +86,37 @@ def test_dataset_spec_normalises_splits_from_iterable(): assert spec.splits == (Split.TRAIN, Split.TEST) +# ----------------------------------------------------------------------------- +# LocalDatasetSpec validation & normalisation +# ----------------------------------------------------------------------------- + + +def test_local_dataset_spec_rejects_empty_splits(): + with pytest.raises(ValueError, match=r"`splits` must be non-empty"): + LocalDatasetSpec(path=Path("/data/bush"), splits=()) + + +def test_local_dataset_spec_normalises_splits_from_str(): + spec = LocalDatasetSpec(path=Path("/data/bush"), splits="train") # type: ignore[arg-type] + assert spec.splits == (Split.TRAIN,) + + +def test_local_dataset_spec_normalises_splits_from_iterable(): + spec = LocalDatasetSpec(path=Path("/data/bush"), splits=("train", "test")) + assert spec.splits == (Split.TRAIN, Split.TEST) + + +def test_local_dataset_spec_is_frozen(): + spec = LocalDatasetSpec(path=Path("/data/bush")) + with pytest.raises(dataclasses.FrozenInstanceError): + setattr(spec, "path", Path("/other")) # noqa: B010 + + +def test_local_dataset_spec_default_split_is_train(): + spec = LocalDatasetSpec(path=Path("/data/bush")) + assert spec.splits == (Split.TRAIN,) + + # ----------------------------------------------------------------------------- # Pinned spec invariants & pinning behaviour # ----------------------------------------------------------------------------- @@ -94,6 +127,7 @@ def test_dataset_spec_normalises_splits_from_iterable(): [ "a1b2c3d", "0123456789abcdef0123456789abcdef01234567", # pragma: allowlist secret + "local", ], ) def test_pinned_dataset_spec_accepts_sha_like_revisions(sha: str): diff --git a/tests/voice/datasets/test_get_dataset.py b/tests/voice/datasets/test_get_dataset.py index 2858738..52bf98a 100644 --- a/tests/voice/datasets/test_get_dataset.py +++ b/tests/voice/datasets/test_get_dataset.py @@ -6,11 +6,13 @@ - Schema canonicalisation for supported dataset formats - Canonical schema validation - Public materialisation pipeline (get_dataset) with dependency patching +- Local dataset loading via _get_local_dataset """ from __future__ import annotations import importlib +from pathlib import Path from types import SimpleNamespace import pytest @@ -18,7 +20,7 @@ from datasets import Dataset from huggingface_hub.utils import HfHubHTTPError -from voice import DatasetSpec +from voice import DatasetSpec, LocalDatasetSpec from voice.datasets._schema import Split from voice.datasets.dataset import _PinnedDatasetSpec @@ -190,6 +192,66 @@ def fake_load_dataset(repo_id: str, *, split: str, revision: str): assert ex0.spec == vd.spec +# ----------------------------------------------------------------------------- +# Local dataset loading +# ----------------------------------------------------------------------------- + + +def test_get_local_dataset_loads_splits_and_returns_voice_dataset( + monkeypatch: pytest.MonkeyPatch, +): + calls: list[tuple[str, str]] = [] + + def fake_load_dataset(*args: object, **kwargs: object) -> Dataset: + calls.append((str(args[0]), str(kwargs.get("split")))) + return _canonical_hf_ds(3) + + monkeypatch.setattr(gd, "load_dataset", fake_load_dataset) + + spec = LocalDatasetSpec(path=Path("/data/bush"), splits=("train", "test")) + vd = gd._get_local_dataset(spec) + + assert vd.spec.repo_id == "/data/bush" + assert vd.spec.revision == "local" + assert set(vd.splits) == {Split.TRAIN, Split.TEST} + assert calls == [("json", "train"), ("json", "test")] + + ex = vd.train[0] + assert ex.split == Split.TRAIN + assert ex.spec.revision == "local" + + +def test_get_local_dataset_wraps_load_failures_in_runtime_error( + monkeypatch: pytest.MonkeyPatch, +): + def fake_load_dataset(*args: object, **kwargs: object) -> Dataset: + raise RuntimeError("not found") + + monkeypatch.setattr(gd, "load_dataset", fake_load_dataset) + + spec = LocalDatasetSpec(path=Path("/data/bush"), splits=("train",)) + with pytest.raises(RuntimeError, match=r"Failed to load split 'train'"): + gd._get_local_dataset(spec) + + +def test_get_dataset_routes_to_local_for_local_spec( + monkeypatch: pytest.MonkeyPatch, +): + sentinel = object() + + def fake_get_local(spec: LocalDatasetSpec) -> object: + return sentinel + + monkeypatch.setattr(gd, "_get_local_dataset", fake_get_local) + + spec = LocalDatasetSpec(path=Path("/data/bush"), splits=("train",)) + result = gd.get_dataset(spec) + assert result is sentinel + + +# ----------------------------------------------------------------------------- + + def test_get_dataset_wraps_load_failures_in_runtime_error( monkeypatch: pytest.MonkeyPatch, ): From a8b7d596bf9176bebb3120ee4d6a2ac411191316 Mon Sep 17 00:00:00 2001 From: Fin Griffin Date: Fri, 22 May 2026 11:14:41 +0100 Subject: [PATCH 54/68] feat(fine-tuning): add fine-tuning module for single runs and grid search --- cspell/project-words.txt | 2 + src/voice/finetune/__init__.py | 9 ++ src/voice/finetune/_grid.py | 102 +++++++++++++++ src/voice/finetune/_schema.py | 193 ++++++++++++++++++++++++++++ src/voice/finetune/_state.py | 69 ++++++++++ tests/voice/finetune/test_grid.py | 168 ++++++++++++++++++++++++ tests/voice/finetune/test_schema.py | 163 +++++++++++++++++++++++ tests/voice/finetune/test_state.py | 86 +++++++++++++ 8 files changed, 792 insertions(+) create mode 100644 src/voice/finetune/__init__.py create mode 100644 src/voice/finetune/_grid.py create mode 100644 src/voice/finetune/_schema.py create mode 100644 src/voice/finetune/_state.py create mode 100644 tests/voice/finetune/test_grid.py create mode 100644 tests/voice/finetune/test_schema.py create mode 100644 tests/voice/finetune/test_state.py diff --git a/cspell/project-words.txt b/cspell/project-words.txt index 64ecef8..b36da10 100644 --- a/cspell/project-words.txt +++ b/cspell/project-words.txt @@ -14,3 +14,5 @@ aeiou stylometrically lora resumability +resumable +hyperparams diff --git a/src/voice/finetune/__init__.py b/src/voice/finetune/__init__.py new file mode 100644 index 0000000..3547da2 --- /dev/null +++ b/src/voice/finetune/__init__.py @@ -0,0 +1,9 @@ +""" +Fine-tuning orchestration package for VOICE. + +Provides utilities for running single fine-tuning jobs and hyperparameter +sweeps, including: +- CLI entrypoints +- Local experiment tracking +- Post-hoc evaluation on stylometric evaluation suite +""" diff --git a/src/voice/finetune/_grid.py b/src/voice/finetune/_grid.py new file mode 100644 index 0000000..f158be5 --- /dev/null +++ b/src/voice/finetune/_grid.py @@ -0,0 +1,102 @@ +""" +Hyperparameter grid expansion and run naming utilities. + +This module is private by convention and not part of the public API. +""" + +from __future__ import annotations + +import itertools +import re +import uuid +from typing import Any + +_REQUIRED_AXES: frozenset[str] = frozenset( + { + "learning_rate", + "lora_r", + "micro_batch_size", + "gradient_accumulation_steps", + "target_layers", + } +) + +# ----------------------------------------------------------------------------- +# Run naming +# ----------------------------------------------------------------------------- + + +def _short_name(repo_or_path: str) -> str: + """ + Extract and normalise the trailing segment of a repo id or path. + + :param repo_or_path: A HF repo id (``namespace/name``) or file path. + :return: Lowercase, hyphen-separated identifier. + """ + name = repo_or_path.rsplit("/", 1)[-1] + return re.sub(r"[^a-z0-9]+", "-", name.lower()).strip("-") + + +def new_uid() -> str: + """ + Generate a short unique identifier (8 hex characters). + + :return: Random 8-character hex string. + """ + return uuid.uuid4().hex[:8] + + +def generate_run_name(model: str, uid: str) -> str: + """ + Generate a short, human-readable run name. + + Format: ``{model}_{uid}`` e.g. ``llama-3-1-8b-instruct_a3f2b9c1`` + + :param model: Base model identifier (HF repo id or local path). + :param uid: Short unique identifier, e.g. from :func:`new_uid`. + :return: Run name string. + """ + return f"{_short_name(model)}_{uid}" + + +# ----------------------------------------------------------------------------- +# Grid expansion +# ----------------------------------------------------------------------------- + + +def expand_grid(sweep_cfg: dict[str, Any]) -> list[dict[str, Any]]: + """ + Expand the sweep section into a flat list of per-run hyperparameter dicts. + + :param sweep_cfg: The ``sweep`` section of a sweep config YAML. + :return: List of hyperparameter dicts, one per combination. + :raises ValueError: If required sweep axes are missing. + """ + missing = _REQUIRED_AXES - sweep_cfg.keys() + if missing: + raise ValueError( + f"Sweep config missing required axes: {sorted(missing)}" + ) + + runs: list[dict[str, Any]] = [] + combos = itertools.product( + sweep_cfg["learning_rate"], + sweep_cfg["lora_r"], + sweep_cfg["micro_batch_size"], + sweep_cfg["gradient_accumulation_steps"], + sweep_cfg["target_layers"], + ) + for idx, (lr, rank, mbs, gas, tl) in enumerate(combos): + runs.append( + { + "run_idx": idx, + "learning_rate": lr, + "lora_r": rank, + "lora_alpha": rank, + "micro_batch_size": mbs, + "gradient_accumulation_steps": gas, + "target_layers_name": tl["name"], + "lora_target_modules": tl["modules"], + } + ) + return runs diff --git a/src/voice/finetune/_schema.py b/src/voice/finetune/_schema.py new file mode 100644 index 0000000..fbe9ef5 --- /dev/null +++ b/src/voice/finetune/_schema.py @@ -0,0 +1,193 @@ +""" +Dataclass schemas for fine-tuning configuration and run metadata. + +This module is private by convention and not part of the public API. + +This module defines: + +- `SweepConfig` - Parsed representation of a sweep config YAML. +- `SingleRunConfig` - Parsed representation of a single-run config YAML. +- `RunMetadata` - Mutable metadata written to each run directory. +""" + +from __future__ import annotations + +from dataclasses import dataclass, field +from pathlib import Path +from typing import Any, Literal + +import yaml + +# ----------------------------------------------------------------------------- +# Config schemas +# ----------------------------------------------------------------------------- + + +@dataclass(frozen=True, slots=True) +class SweepConfig: + """ + Parsed sweep configuration. + + .. attribute :: sweep + + Hyperparameter grid axes (each value is a list of candidates). + + .. attribute :: axolotl + + Shared axolotl settings merged into every per-run config. + """ + + sweep: dict[str, Any] + axolotl: dict[str, Any] + + @classmethod + def from_yaml(cls, path: Path) -> SweepConfig: + """ + Load a sweep config from a YAML file. + + :param path: Path to the YAML config file. + :return: Parsed SweepConfig. + :raises ValueError: If required top-level keys are missing. + """ + raw: dict[str, Any] = yaml.safe_load(path.read_text()) + missing = {"sweep", "axolotl"} - raw.keys() + if missing: + raise ValueError( + f"Sweep config missing required keys: {sorted(missing)}" + ) + return cls(sweep=raw["sweep"], axolotl=raw["axolotl"]) + + +@dataclass(frozen=True, slots=True) +class SingleRunConfig: + """ + Parsed single-run configuration. + + .. attribute :: axolotl + + Full axolotl training settings for the run. + """ + + axolotl: dict[str, Any] + + @classmethod + def from_yaml(cls, path: Path) -> SingleRunConfig: + """ + Load a single-run config from a YAML file. + + :param path: Path to the YAML config file. + :return: Parsed SingleRunConfig. + :raises ValueError: If the ``axolotl`` key is missing. + """ + raw: dict[str, Any] = yaml.safe_load(path.read_text()) + if "axolotl" not in raw: + raise ValueError( + "Single-run config missing required key: 'axolotl'" + ) + return cls(axolotl=raw["axolotl"]) + + +# ----------------------------------------------------------------------------- +# Run metadata +# ----------------------------------------------------------------------------- + + +@dataclass(slots=True) +class RunMetadata: + """ + Mutable metadata for a single fine-tuning run. + + Written to ``runs/{run_name}/metadata.json`` and updated throughout + the run lifecycle. + + .. attribute :: run_name + + Unique identifier for the run. + + .. attribute :: model + + Base model identifier (HF repo_id or local path). + + .. attribute :: dataset + + Dataset identifier (HF repo_id or local path). + + .. attribute :: hyperparams + + Concrete hyperparameter values for this run. + + .. attribute :: status + + Lifecycle state: ``pending``, ``running``, ``done``, or ``failed``. + + .. attribute :: started_at + + ISO-format timestamp when training began, or ``None``. + + .. attribute :: finished_at + + ISO-format timestamp when the run completed, or ``None``. + + .. attribute :: eval_loss + + Mapping of epoch number (as string) to validation loss. + + .. attribute :: alignment_val + + Mapping of epoch number (as string) to validation alignment score. + + .. attribute :: alignment_test + + Mapping of epoch number (as string) to test alignment score. + """ + + run_name: str + model: str + dataset: str + hyperparams: dict[str, Any] + status: Literal["pending", "running", "done", "failed"] = "pending" + started_at: str | None = None + finished_at: str | None = None + eval_loss: dict[str, float] = field(default_factory=dict) + alignment_val: dict[str, float] = field(default_factory=dict) + alignment_test: dict[str, float] = field(default_factory=dict) + + def to_dict(self) -> dict[str, Any]: + """ + Serialise metadata to a plain dict for JSON output. + + :return: Dict representation of the metadata. + """ + return { + "run_name": self.run_name, + "model": self.model, + "dataset": self.dataset, + "hyperparams": self.hyperparams, + "status": self.status, + "started_at": self.started_at, + "finished_at": self.finished_at, + "eval_loss": self.eval_loss, + "alignment_val": self.alignment_val, + "alignment_test": self.alignment_test, + } + + @classmethod + def from_dict(cls, d: dict[str, Any]) -> RunMetadata: + """ + Reconstruct metadata from a plain dict. + + :param d: Dict representation of the metadata. + :return: Reconstructed RunMetadata. + """ + return cls( + run_name=d["run_name"], + model=d["model"], + dataset=d["dataset"], + hyperparams=d["hyperparams"], + status=d["status"], + started_at=d.get("started_at"), + finished_at=d.get("finished_at"), + eval_loss=d.get("eval_loss", {}), + alignment_val=d.get("alignment_val", {}), + alignment_test=d.get("alignment_test", {}), + ) diff --git a/src/voice/finetune/_state.py b/src/voice/finetune/_state.py new file mode 100644 index 0000000..1d68114 --- /dev/null +++ b/src/voice/finetune/_state.py @@ -0,0 +1,69 @@ +""" +Sweep state persistence for grid searches with resume support. + +This module is private by convention and not part of the public API. + +State is written to a JSON file with two keys: + +- ``completed``: list of run names that finished successfully. +- ``failed``: mapping of run name to error string for failed runs. +""" + +from __future__ import annotations + +import json +from pathlib import Path +from typing import Any, cast + + +def load_state(state_file: Path) -> dict[str, Any]: + """ + Load sweep state from a JSON file, or return a fresh state dict. + + :param state_file: Path to the state JSON file. + :return: State dict with ``completed`` and ``failed`` keys. + """ + if state_file.exists(): + return cast(dict[str, Any], json.loads(state_file.read_text())) + return {"completed": [], "failed": {}} + + +def save_state(state: dict[str, Any], state_file: Path) -> None: + """ + Persist sweep state to a JSON file. + + :param state: State dict to serialise. + :param state_file: Destination path. + :return: None + """ + state_file.write_text(json.dumps(state, indent=2)) + + +def mark_completed(state: dict[str, Any], name: str, state_file: Path) -> None: + """ + Record a run as completed and persist state. + + :param state: Current sweep state dict. + :param name: Run name to mark as completed. + :param state_file: Destination path for persisting state. + :return: None + """ + state["completed"].append(name) + state["failed"].pop(name, None) + save_state(state, state_file) + + +def mark_failed( + state: dict[str, Any], name: str, error: str, state_file: Path +) -> None: + """ + Record a run as failed and persist state. + + :param state: Current sweep state dict. + :param name: Run name to mark as failed. + :param error: Error string describing the failure. + :param state_file: Destination path for persisting state. + :return: None + """ + state["failed"][name] = error + save_state(state, state_file) diff --git a/tests/voice/finetune/test_grid.py b/tests/voice/finetune/test_grid.py new file mode 100644 index 0000000..46c4b93 --- /dev/null +++ b/tests/voice/finetune/test_grid.py @@ -0,0 +1,168 @@ +""" +Tests for voice.finetune._grid. + +Scope: +- expand_grid count and structure +- Hyperparameter pass-through (micro_batch_size, gradient_accumulation_steps) +- Missing axis validation +- generate_run_name format and uniqueness +- _short_name normalisation +""" + +from __future__ import annotations + +import pytest + +from voice.finetune._grid import ( + _short_name, + expand_grid, + generate_run_name, + new_uid, +) + +# ----------------------------------------------------------------------------- +# Helpers +# ----------------------------------------------------------------------------- + + +def _minimal_sweep( + *, + lrs: list | None = None, + ranks: list | None = None, + micro_batch_sizes: list | None = None, + accumulation_steps: list | None = None, + layers: list | None = None, +) -> dict: + return { + "learning_rate": lrs or [1e-4, 5e-4], + "lora_r": ranks or [4, 8], + "micro_batch_size": micro_batch_sizes or [4, 8], + "gradient_accumulation_steps": accumulation_steps or [1, 4], + "target_layers": layers + or [ + {"name": "attention", "modules": ["q_proj"]}, + {"name": "attention_mlp", "modules": ["q_proj", "gate_proj"]}, + ], + } + + +# ----------------------------------------------------------------------------- +# expand_grid +# ----------------------------------------------------------------------------- + + +@pytest.mark.parametrize( + "n_lr, n_r, n_mbs, n_gas, n_tl", + [ + (1, 1, 1, 1, 1), + (3, 4, 2, 2, 2), + (2, 2, 2, 2, 2), + ], +) +def test_expand_grid_count( + n_lr: int, n_r: int, n_mbs: int, n_gas: int, n_tl: int +): + cfg = _minimal_sweep( + lrs=list(range(n_lr)), + ranks=list(range(1, n_r + 1)), + micro_batch_sizes=list(range(1, n_mbs + 1)), + accumulation_steps=list(range(1, n_gas + 1)), + layers=[{"name": f"l{i}", "modules": ["q"]} for i in range(n_tl)], + ) + runs = expand_grid(cfg) + assert len(runs) == n_lr * n_r * n_mbs * n_gas * n_tl + + +def test_expand_grid_indices_are_sequential(): + runs = expand_grid(_minimal_sweep()) + assert [r["run_idx"] for r in runs] == list(range(len(runs))) + + +def test_expand_grid_micro_batch_size_passed_through(): + cfg = _minimal_sweep(micro_batch_sizes=[2, 4, 8]) + runs = expand_grid(cfg) + observed = {r["micro_batch_size"] for r in runs} + assert observed == {2, 4, 8} + + +def test_expand_grid_gradient_accumulation_steps_passed_through(): + cfg = _minimal_sweep(accumulation_steps=[1, 2, 8]) + runs = expand_grid(cfg) + observed = {r["gradient_accumulation_steps"] for r in runs} + assert observed == {1, 2, 8} + + +def test_expand_grid_lora_alpha_equals_lora_r(): + runs = expand_grid(_minimal_sweep()) + for run in runs: + assert run["lora_alpha"] == run["lora_r"] + + +def test_expand_grid_no_effective_batch_size_field(): + runs = expand_grid(_minimal_sweep()) + for run in runs: + assert "effective_batch_size" not in run + + +@pytest.mark.parametrize( + "missing_key", + [ + "learning_rate", + "lora_r", + "micro_batch_size", + "gradient_accumulation_steps", + "target_layers", + ], +) +def test_expand_grid_raises_on_missing_axis(missing_key: str): + cfg = _minimal_sweep() + del cfg[missing_key] + with pytest.raises(ValueError, match=r"missing required axes"): + expand_grid(cfg) + + +# ----------------------------------------------------------------------------- +# generate_run_name / new_uid +# ----------------------------------------------------------------------------- + + +def test_generate_run_name_contains_model_and_uid(): + name = generate_run_name( + model="meta-llama/Llama-3.1-8B-Instruct", uid="a3f2b9c1" + ) + assert "llama" in name + assert "a3f2b9c1" in name + + +def test_generate_run_name_format(): + name = generate_run_name(model="ns/my-model", uid="deadbeef") + assert name == "my-model_deadbeef" + + +def test_new_uid_is_8_hex_chars(): + uid = new_uid() + assert len(uid) == 8 + assert all(c in "0123456789abcdef" for c in uid) + + +def test_new_uid_is_unique(): + uids = {new_uid() for _ in range(100)} + assert len(uids) == 100 + + +# ----------------------------------------------------------------------------- +# _short_name +# ----------------------------------------------------------------------------- + + +@pytest.mark.parametrize( + "inp, expected", + [ + ("meta-llama/Llama-3.1-8B-Instruct", "llama-3-1-8b-instruct"), + ("AccelerateScience/bush-dataset", "bush-dataset"), + ("/data/local/bush", "bush"), + ("simple", "simple"), + ], +) +def test_short_name(inp: str, expected: str): + assert _short_name(inp) == expected diff --git a/tests/voice/finetune/test_schema.py b/tests/voice/finetune/test_schema.py new file mode 100644 index 0000000..84f6854 --- /dev/null +++ b/tests/voice/finetune/test_schema.py @@ -0,0 +1,163 @@ +""" +Tests for voice.finetune._schema. + +Scope: +- SweepConfig.from_yaml validation and parsing +- SingleRunConfig.from_yaml validation and parsing +- RunMetadata to_dict / from_dict round-trip +""" + +from __future__ import annotations + +import json +from pathlib import Path + +import pytest + +from voice.finetune._schema import RunMetadata, SingleRunConfig, SweepConfig + +# ----------------------------------------------------------------------------- +# Helpers +# ----------------------------------------------------------------------------- + + +def _write_yaml(path: Path, content: str) -> Path: + path.write_text(content) + return path + + +# ----------------------------------------------------------------------------- +# SweepConfig +# ----------------------------------------------------------------------------- + + +def test_sweep_config_from_yaml_reads_sections(tmp_path: Path): + p = _write_yaml( + tmp_path / "sweep.yaml", + "sweep:\n learning_rate: [1.0e-4]\naxolotl:\n base_model: x\n", + ) + cfg = SweepConfig.from_yaml(p) + assert cfg.sweep == {"learning_rate": [1e-4]} + assert cfg.axolotl == {"base_model": "x"} + + +def test_sweep_config_from_yaml_raises_on_missing_sweep_key(tmp_path: Path): + p = _write_yaml(tmp_path / "cfg.yaml", "axolotl:\n base_model: x\n") + with pytest.raises(ValueError, match=r"missing required keys"): + SweepConfig.from_yaml(p) + + +def test_sweep_config_from_yaml_raises_on_missing_axolotl_key(tmp_path: Path): + p = _write_yaml( + tmp_path / "cfg.yaml", "sweep:\n learning_rate: [1.0e-4]\n" + ) + with pytest.raises(ValueError, match=r"missing required keys"): + SweepConfig.from_yaml(p) + + +def test_sweep_config_is_frozen(tmp_path: Path): + p = _write_yaml( + tmp_path / "cfg.yaml", + "sweep:\n lr: [1e-4]\naxolotl:\n base_model: x\n", + ) + cfg = SweepConfig.from_yaml(p) + import dataclasses + + with pytest.raises(dataclasses.FrozenInstanceError): + setattr(cfg, "sweep", {}) # noqa: B010 + + +# ----------------------------------------------------------------------------- +# SingleRunConfig +# ----------------------------------------------------------------------------- + + +def test_single_run_config_from_yaml_reads_axolotl_section(tmp_path: Path): + p = _write_yaml( + tmp_path / "run.yaml", "axolotl:\n base_model: my-model\n" + ) + cfg = SingleRunConfig.from_yaml(p) + assert cfg.axolotl == {"base_model": "my-model"} + + +def test_single_run_config_from_yaml_raises_on_missing_axolotl_key( + tmp_path: Path, +): + p = _write_yaml(tmp_path / "run.yaml", "model: x\n") + with pytest.raises(ValueError, match=r"missing required key: 'axolotl'"): + SingleRunConfig.from_yaml(p) + + +# ----------------------------------------------------------------------------- +# RunMetadata +# ----------------------------------------------------------------------------- + + +def test_run_metadata_defaults(): + meta = RunMetadata( + run_name="r", + model="m", + dataset="d", + hyperparams={"lr": 1e-4}, + ) + assert meta.status == "pending" + assert meta.started_at is None + assert meta.finished_at is None + assert meta.eval_loss == {} + assert meta.alignment_val == {} + assert meta.alignment_test == {} + + +def test_run_metadata_to_dict_from_dict_round_trips(): + meta = RunMetadata( + run_name="run-001", + model="ns/model", + dataset="ns/ds", + hyperparams={"lr": 1e-4, "lora_r": 8}, + status="done", + started_at="2026-05-22T14:30:00", + finished_at="2026-05-22T16:00:00", + eval_loss={"1": 0.45, "2": 0.40}, + alignment_val={"1": 0.82, "2": 0.85}, + alignment_test={"1": 0.80, "2": 0.83}, + ) + d = meta.to_dict() + restored = RunMetadata.from_dict(d) + + assert restored.run_name == meta.run_name + assert restored.model == meta.model + assert restored.dataset == meta.dataset + assert restored.hyperparams == meta.hyperparams + assert restored.status == meta.status + assert restored.started_at == meta.started_at + assert restored.finished_at == meta.finished_at + assert restored.eval_loss == meta.eval_loss + assert restored.alignment_val == meta.alignment_val + assert restored.alignment_test == meta.alignment_test + + +def test_run_metadata_to_dict_is_json_serialisable(): + meta = RunMetadata( + run_name="r", + model="m", + dataset="d", + hyperparams={"lr": 1e-4}, + ) + # Should not raise + json.dumps(meta.to_dict()) + + +def test_run_metadata_from_dict_tolerates_missing_optional_fields(): + d = { + "run_name": "r", + "model": "m", + "dataset": "d", + "hyperparams": {}, + "status": "pending", + "started_at": None, + "finished_at": None, + } + meta = RunMetadata.from_dict(d) + assert meta.eval_loss == {} + assert meta.alignment_val == {} + assert meta.alignment_test == {} diff --git a/tests/voice/finetune/test_state.py b/tests/voice/finetune/test_state.py new file mode 100644 index 0000000..f85d961 --- /dev/null +++ b/tests/voice/finetune/test_state.py @@ -0,0 +1,86 @@ +""" +Tests for voice.finetune._state. + +Scope: +- load_state returns fresh state for missing file +- save/load round-trip +- mark_completed and mark_failed mutations and persistence +""" + +from __future__ import annotations + +import json +from pathlib import Path + +from voice.finetune._state import ( + load_state, + mark_completed, + mark_failed, + save_state, +) + + +def test_load_state_returns_fresh_state_for_missing_file(tmp_path: Path): + state = load_state(tmp_path / "state.json") + assert state["completed"] == [] + assert state["failed"] == {} + + +def test_save_and_load_state_round_trips(tmp_path: Path): + state_file = tmp_path / "state.json" + state: dict = {"completed": ["run-001"], "failed": {"run-002": "boom"}} + save_state(state, state_file) + restored = load_state(state_file) + assert restored == state + + +def test_save_state_writes_valid_json(tmp_path: Path): + state_file = tmp_path / "state.json" + save_state({"completed": [], "failed": {}}, state_file) + parsed = json.loads(state_file.read_text()) + assert "completed" in parsed + assert "failed" in parsed + + +def test_mark_completed_appends_name(tmp_path: Path): + state_file = tmp_path / "state.json" + state: dict = {"completed": [], "failed": {}} + mark_completed(state, "run-001", state_file) + assert "run-001" in state["completed"] + + +def test_mark_completed_removes_from_failed(tmp_path: Path): + state_file = tmp_path / "state.json" + state: dict = {"completed": [], "failed": {"run-001": "old error"}} + mark_completed(state, "run-001", state_file) + assert "run-001" not in state["failed"] + + +def test_mark_completed_persists_state(tmp_path: Path): + state_file = tmp_path / "state.json" + state: dict = {"completed": [], "failed": {}} + mark_completed(state, "run-001", state_file) + reloaded = load_state(state_file) + assert "run-001" in reloaded["completed"] + + +def test_mark_failed_adds_error(tmp_path: Path): + state_file = tmp_path / "state.json" + state: dict = {"completed": [], "failed": {}} + mark_failed(state, "run-001", "something broke", state_file) + assert state["failed"]["run-001"] == "something broke" + + +def test_mark_failed_persists_state(tmp_path: Path): + state_file = tmp_path / "state.json" + state: dict = {"completed": [], "failed": {}} + mark_failed(state, "run-001", "boom", state_file) + reloaded = load_state(state_file) + assert reloaded["failed"]["run-001"] == "boom" + + +def test_mark_failed_does_not_remove_from_completed(tmp_path: Path): + state_file = tmp_path / "state.json" + state: dict = {"completed": ["run-001"], "failed": {}} + mark_failed(state, "run-001", "boom", state_file) + assert "run-001" in state["completed"] From 17a8fbf5a5fe0a64923eb1c304ee62be9d9b5301 Mon Sep 17 00:00:00 2001 From: Fin Griffin Date: Fri, 22 May 2026 12:42:24 +0100 Subject: [PATCH 55/68] feat(fine-tuning): add run directory management --- src/voice/finetune/_runs.py | 159 ++++++++++++++++++++++++++++ tests/voice/finetune/test_runs.py | 170 ++++++++++++++++++++++++++++++ 2 files changed, 329 insertions(+) create mode 100644 src/voice/finetune/_runs.py create mode 100644 tests/voice/finetune/test_runs.py diff --git a/src/voice/finetune/_runs.py b/src/voice/finetune/_runs.py new file mode 100644 index 0000000..c483720 --- /dev/null +++ b/src/voice/finetune/_runs.py @@ -0,0 +1,159 @@ +""" +Run directory structure and I/O utilities. + +Each fine-tuning run is stored under ``runs/{run_name}/`` with the following +layout:: + + runs/{run_name}/ + config.yaml per-run axolotl config written before training + metadata.json RunMetadata updated throughout the run + adapter/ axolotl output_dir; checkpoints written here + completions/ + epoch_{n}/ + validation.jsonl + test.jsonl + alignment/ + epoch_{n}/ + validation.json + test.json + +This module is private by convention and not part of the public API. +""" + +from __future__ import annotations + +import json +from dataclasses import dataclass +from pathlib import Path +from typing import Any + +import yaml + +from voice.finetune._schema import RunMetadata + +# ----------------------------------------------------------------------------- +# Run directory +# ----------------------------------------------------------------------------- + + +@dataclass(slots=True) +class RunDir: + """ + Structured wrapper around a single run directory. + + .. attribute :: path + + Root path of the run directory (``runs/{run_name}``). + """ + + path: Path + + # ------------------------------------------------------------------------- + # Sub-paths + # ------------------------------------------------------------------------- + + @property + def adapter_dir(self) -> Path: + """Axolotl ``output_dir``; weights and checkpoints live here.""" + return self.path / "adapter" + + @property + def completions_dir(self) -> Path: + """Root directory for per-epoch completion files.""" + return self.path / "completions" + + @property + def alignment_dir(self) -> Path: + """Root directory for per-epoch alignment result files.""" + return self.path / "alignment" + + @property + def config_path(self) -> Path: + """Path to the frozen per-run axolotl config YAML.""" + return self.path / "config.yaml" + + @property + def metadata_path(self) -> Path: + """Path to the run metadata JSON file.""" + return self.path / "metadata.json" + + def completions_path(self, split: str, epoch: int) -> Path: + """ + Return the path for a completions file. + + :param split: Split name (e.g. ``"validation"``). + :param epoch: Epoch number (1-indexed). + :return: Path to ``completions/epoch_{n}/{split}.jsonl``. + """ + return self.completions_dir / f"epoch_{epoch}" / f"{split}.jsonl" + + def alignment_path(self, split: str, epoch: int) -> Path: + """ + Return the path for an alignment result file. + + :param split: Split name (e.g. ``"validation"``). + :param epoch: Epoch number (1-indexed). + :return: Path to ``alignment/epoch_{n}/{split}.json``. + """ + return self.alignment_dir / f"epoch_{epoch}" / f"{split}.json" + + # ------------------------------------------------------------------------- + # Lifecycle + # ------------------------------------------------------------------------- + + def create(self) -> None: + """ + Create the run directory tree. + + Creates the run root, ``adapter/``, ``completions/``, and + ``alignment/`` directories. Per-epoch subdirectories are created + lazily when completions or alignment files are written. + + :return: None + """ + for d in ( + self.path, + self.adapter_dir, + self.completions_dir, + self.alignment_dir, + ): + d.mkdir(parents=True, exist_ok=True) + + # ------------------------------------------------------------------------- + # Config I/O + # ------------------------------------------------------------------------- + + def write_config(self, cfg: dict[str, Any]) -> None: + """ + Write the per-run axolotl config to ``config.yaml``. + + :param cfg: Axolotl config dict to serialise. + :return: None + """ + with open(self.config_path, "w") as f: + yaml.dump(cfg, f, default_flow_style=False, sort_keys=False) + + # ------------------------------------------------------------------------- + # Metadata I/O + # ------------------------------------------------------------------------- + + def write_metadata(self, meta: RunMetadata) -> None: + """ + Atomically write run metadata to ``metadata.json``. + + :param meta: RunMetadata to persist. + :return: None + """ + tmp = self.metadata_path.with_suffix(".tmp.json") + tmp.write_text(json.dumps(meta.to_dict(), indent=2)) + tmp.rename(self.metadata_path) + + def read_metadata(self) -> RunMetadata: + """ + Read run metadata from ``metadata.json``. + + :return: Reconstructed RunMetadata. + """ + return RunMetadata.from_dict( + json.loads(self.metadata_path.read_text()) + ) diff --git a/tests/voice/finetune/test_runs.py b/tests/voice/finetune/test_runs.py new file mode 100644 index 0000000..6a3fc73 --- /dev/null +++ b/tests/voice/finetune/test_runs.py @@ -0,0 +1,170 @@ +""" +Tests for voice.finetune._runs. + +Scope: +- RunDir sub-path properties +- completions_path and alignment_path naming +- create() builds expected directory tree +- write_config produces valid YAML +- write_metadata / read_metadata round-trip +- write_metadata is atomic (tmp file used) +""" + +from __future__ import annotations + +from pathlib import Path + +import yaml + +from voice.finetune._runs import RunDir +from voice.finetune._schema import RunMetadata + +# ----------------------------------------------------------------------------- +# Helpers +# ----------------------------------------------------------------------------- + + +def _run_dir(tmp_path: Path, name: str = "my-run") -> RunDir: + return RunDir(path=tmp_path / name) + + +def _meta(**kwargs) -> RunMetadata: # type: ignore[no-untyped-def] + defaults: dict = { + "run_name": "my-run", + "model": "ns/model", + "dataset": "ns/ds", + "hyperparams": {"lr": 1e-4}, + } + defaults.update(kwargs) + return RunMetadata(**defaults) # type: ignore[arg-type] + + +# ----------------------------------------------------------------------------- +# Sub-path properties +# ----------------------------------------------------------------------------- + + +def test_adapter_dir_is_under_run_root(tmp_path: Path): + rd = _run_dir(tmp_path) + assert rd.adapter_dir == rd.path / "adapter" + + +def test_completions_dir_is_under_run_root(tmp_path: Path): + rd = _run_dir(tmp_path) + assert rd.completions_dir == rd.path / "completions" + + +def test_alignment_dir_is_under_run_root(tmp_path: Path): + rd = _run_dir(tmp_path) + assert rd.alignment_dir == rd.path / "alignment" + + +def test_config_path_is_yaml_in_run_root(tmp_path: Path): + rd = _run_dir(tmp_path) + assert rd.config_path == rd.path / "config.yaml" + + +def test_metadata_path_is_json_in_run_root(tmp_path: Path): + rd = _run_dir(tmp_path) + assert rd.metadata_path == rd.path / "metadata.json" + + +# ----------------------------------------------------------------------------- +# completions_path / alignment_path +# ----------------------------------------------------------------------------- + + +def test_completions_path_structure(tmp_path: Path): + rd = _run_dir(tmp_path) + p = rd.completions_path("validation", 2) + assert p == rd.completions_dir / "epoch_2" / "validation.jsonl" + + +def test_alignment_path_structure(tmp_path: Path): + rd = _run_dir(tmp_path) + p = rd.alignment_path("test", 3) + assert p == rd.alignment_dir / "epoch_3" / "test.json" + + +def test_completions_path_split_names_differ(tmp_path: Path): + rd = _run_dir(tmp_path) + val = rd.completions_path("validation", 1) + test = rd.completions_path("test", 1) + assert val != test + assert val.name == "validation.jsonl" + assert test.name == "test.jsonl" + + +def test_completions_path_epoch_dirs_differ(tmp_path: Path): + rd = _run_dir(tmp_path) + e1 = rd.completions_path("validation", 1) + e2 = rd.completions_path("validation", 2) + assert e1.parent != e2.parent + + +# ----------------------------------------------------------------------------- +# create() +# ----------------------------------------------------------------------------- + + +def test_create_makes_expected_directories(tmp_path: Path): + rd = _run_dir(tmp_path) + rd.create() + assert rd.path.is_dir() + assert rd.adapter_dir.is_dir() + assert rd.completions_dir.is_dir() + assert rd.alignment_dir.is_dir() + + +def test_create_is_idempotent(tmp_path: Path): + rd = _run_dir(tmp_path) + rd.create() + rd.create() # should not raise + + +# ----------------------------------------------------------------------------- +# write_config +# ----------------------------------------------------------------------------- + + +def test_write_config_produces_valid_yaml(tmp_path: Path): + rd = _run_dir(tmp_path) + rd.create() + cfg = {"base_model": "ns/model", "learning_rate": 1e-4, "lora_r": 8} + rd.write_config(cfg) + loaded = yaml.safe_load(rd.config_path.read_text()) + assert loaded == cfg + + +# ----------------------------------------------------------------------------- +# write_metadata / read_metadata +# ----------------------------------------------------------------------------- + + +def test_write_and_read_metadata_round_trips(tmp_path: Path): + rd = _run_dir(tmp_path) + rd.create() + meta = _meta(status="done", eval_loss={"1": 0.4}) + rd.write_metadata(meta) + restored = rd.read_metadata() + assert restored.run_name == meta.run_name + assert restored.status == meta.status + assert restored.eval_loss == meta.eval_loss + + +def test_write_metadata_no_tmp_file_left(tmp_path: Path): + rd = _run_dir(tmp_path) + rd.create() + rd.write_metadata(_meta()) + tmp = rd.metadata_path.with_suffix(".tmp.json") + assert not tmp.exists() + + +def test_write_metadata_creates_valid_json(tmp_path: Path): + import json + + rd = _run_dir(tmp_path) + rd.create() + rd.write_metadata(_meta()) + parsed = json.loads(rd.metadata_path.read_text()) + assert parsed["run_name"] == "my-run" From 302e8ae1cc25e086db626fff42a754c5c0631510 Mon Sep 17 00:00:00 2001 From: Fin Griffin Date: Fri, 22 May 2026 13:32:17 +0100 Subject: [PATCH 56/68] feat(axolotl): add custom callback --- cspell/project-words.txt | 1 + pyproject.toml | 8 + src/voice/_defaults.py | 41 +++ src/voice/finetune/callbacks.py | 455 +++++++++++++++++++++++++ tests/voice/finetune/test_callbacks.py | 97 ++++++ 5 files changed, 602 insertions(+) create mode 100644 src/voice/finetune/callbacks.py create mode 100644 tests/voice/finetune/test_callbacks.py diff --git a/cspell/project-words.txt b/cspell/project-words.txt index b36da10..7fc1aa7 100644 --- a/cspell/project-words.txt +++ b/cspell/project-words.txt @@ -16,3 +16,4 @@ lora resumability resumable hyperparams +redef diff --git a/pyproject.toml b/pyproject.toml index ab6de0b..b48f023 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -18,6 +18,7 @@ dependencies = [ "seaborn>=0.13.2", "sentence-transformers>=5.3.0", "transformers", + "click>=8.0.0", "wandb>=0.25.1", "bitsandbytes>=0.49.1 ; sys_platform == 'linux'", ] @@ -94,6 +95,9 @@ convention = "pep257" "sweep/**/*.py" = [ "ANN401", ] +"src/voice/finetune/callbacks.py" = [ + "ANN401", +] [tool.mypy] python_version = "3.12" @@ -131,6 +135,10 @@ module = [ "dotenv", "transformers", "transformers.*", + "wandb", + "wandb.*", + "axolotl", + "axolotl.*", ] ignore_missing_imports = true diff --git a/src/voice/_defaults.py b/src/voice/_defaults.py index d9e5f29..7118cc0 100644 --- a/src/voice/_defaults.py +++ b/src/voice/_defaults.py @@ -153,3 +153,44 @@ class PlottingDefaults: PLOTTING_DEFAULTS: PlottingDefaults = PlottingDefaults() + + +@dataclass(frozen=True) +class InferenceDefaults: + """ + Default parameters for completions generation during fine-tuning. + + .. attribute :: batch_size + + Number of examples per inference forward pass. + + .. attribute :: temperature + + Sampling temperature. + + .. attribute :: top_p + + Nucleus sampling probability threshold. + + .. attribute :: top_k + + Top-k sampling limit (0 = disabled). + + .. attribute :: repetition_penalty + + Repetition penalty factor (1.0 = no penalty). + + .. attribute :: max_new_tokens + + Maximum number of tokens to generate per completion. + """ + + batch_size: int = 32 + temperature: float = 0.7 + top_p: float = 1.0 + top_k: int = 0 + repetition_penalty: float = 1.0 + max_new_tokens: int = 1024 + + +INFERENCE_DEFAULTS: InferenceDefaults = InferenceDefaults() diff --git a/src/voice/finetune/callbacks.py b/src/voice/finetune/callbacks.py new file mode 100644 index 0000000..a1ca1f2 --- /dev/null +++ b/src/voice/finetune/callbacks.py @@ -0,0 +1,455 @@ +""" +Axolotl TrainerCallback that generates completions at each epoch end. + +Registered via the axolotl ``plugins`` YAML key as +``voice.finetune.callbacks.EvalCompletionsPlugin``. + +All GPUs participate in generation: each split's examples are sharded +across processes. Each shard is generated in batches of +``INFERENCE_DEFAULTS.batch_size``. After all ranks finish, results are +gathered and rank 0 writes the final ordered JSONL and uploads a W&B +artifact. + +Completions are written under the run directory derived from +``args.output_dir`` (the adapter dir): + + ``{output_dir}/../completions/epoch_{n}/{split}.jsonl`` +""" + +from __future__ import annotations + +import json +import logging +import os +from pathlib import Path +from typing import Any + +import torch +import torch.distributed +import wandb +from datasets import load_dataset +from transformers import ( + TrainerCallback, + TrainerControl, + TrainerState, + TrainingArguments, +) + +try: + from axolotl.integrations.base import BasePlugin +except ImportError: # axolotl is Linux-only + + class BasePlugin: # type: ignore + """Stub for environments where axolotl is not installed.""" + + +from voice._defaults import INFERENCE_DEFAULTS + +log = logging.getLogger(__name__) + +# Generation config built from defaults; passed directly to model.generate(). +GENERATION_CONFIG: dict[str, Any] = { + "do_sample": True, + "temperature": INFERENCE_DEFAULTS.temperature, + "top_p": INFERENCE_DEFAULTS.top_p, + "top_k": INFERENCE_DEFAULTS.top_k, + "repetition_penalty": INFERENCE_DEFAULTS.repetition_penalty, + "max_new_tokens": INFERENCE_DEFAULTS.max_new_tokens, +} + +_EVAL_SPLITS: tuple[str, str] = ("validation", "test") + +# ----------------------------------------------------------------------------- +# Completion formatting +# ----------------------------------------------------------------------------- + + +def _format_completion( + messages: list[dict[str, str]], + generated: str, +) -> dict[str, Any]: + """ + Format a completion as a chat_template JSONL record. + + :param messages: System and user messages (no assistant turn). + :param generated: Generated assistant response. + :return: Dict with ``messages`` list including the assistant turn. + """ + return { + "messages": [ + *messages, + {"role": "assistant", "content": generated}, + ] + } + + +# ----------------------------------------------------------------------------- +# Distributed generation helpers +# ----------------------------------------------------------------------------- + + +def _generate_batch( + batch: list[dict[str, Any]], + model: Any, + tokenizer: Any, +) -> list[dict[str, Any]]: + """ + Generate completions for a batch using left-padded inputs. + + :param batch: Examples with a ``messages`` list (system + user only). + :param model: Unwrapped model (already on the correct device). + :param tokenizer: Tokenizer with ``padding_side`` set to ``"left"``. + :return: List of chat_template completion dicts. + """ + prompts = [ + tokenizer.apply_chat_template( + ex["messages"], tokenize=False, add_generation_prompt=True + ) + for ex in batch + ] + inputs = tokenizer( + prompts, return_tensors="pt", padding=True, truncation=False + ).to(model.device) + padded_len = inputs["input_ids"].shape[1] + + with torch.no_grad(): + outputs = model.generate(**inputs, **GENERATION_CONFIG) + + results = [] + for j, ex in enumerate(batch): + new_tokens = outputs[j, padded_len:] + generated = tokenizer.decode(new_tokens, skip_special_tokens=True) + results.append(_format_completion(ex["messages"], generated)) + return results + + +def _generate_split( + examples: list[dict[str, Any]], + model: Any, + tokenizer: Any, + args: TrainingArguments, +) -> list[dict[str, Any]]: + """ + Generate completions for a full split, distributed across ranks. + + :param examples: Full list of prompt examples for the split. + :param model: Unwrapped model. + :param tokenizer: Tokenizer with ``padding_side`` set to ``"left"``. + :param args: HF TrainingArguments providing rank and world-size info. + :return: Ordered completions on rank 0; empty list on other ranks. + """ + local_indices = list( + range(args.process_index, len(examples), args.world_size) + ) + local_examples = [examples[i] for i in local_indices] + + local_completions: list[dict[str, Any]] = [] + for i in range(0, len(local_examples), INFERENCE_DEFAULTS.batch_size): + batch = local_examples[i : i + INFERENCE_DEFAULTS.batch_size] + local_completions.extend(_generate_batch(batch, model, tokenizer)) + + if ( + args.world_size > 1 + and torch.distributed.is_available() + and torch.distributed.is_initialized() + ): + all_shards: list[Any] = [None] * args.world_size + torch.distributed.all_gather_object( + all_shards, (local_indices, local_completions) + ) + else: + all_shards = [(local_indices, local_completions)] + + if args.process_index != 0: + return [] + + ordered: list[dict[str, Any]] = [{}] * len(examples) + for proc_indices, proc_completions in all_shards: + for orig_idx, comp in zip( # noqa: B905 + proc_indices, proc_completions + ): + ordered[orig_idx] = comp + return ordered + + +def _write_split_completions( + examples: list[dict[str, Any]], + split: str, + completions_root: Path, + model: Any, + tokenizer: Any, + args: TrainingArguments, +) -> Path | None: + """ + Generate and write completions for one split on rank 0. + + :param examples: Prompt examples for the split. + :param split: Split name (e.g. ``"validation"``). + :param completions_root: Directory to write the JSONL file into. + :param model: Unwrapped model. + :param tokenizer: Tokenizer. + :param args: HF TrainingArguments. + :return: Written file path on rank 0; ``None`` on other ranks. + """ + completions = _generate_split(examples, model, tokenizer, args) + if args.process_index != 0: + return None + out_path = completions_root / f"{split}.jsonl" + out_path.write_text("\n".join(json.dumps(c) for c in completions)) + log.info( + "EvalCompletionsCallback: wrote %d %s completions -> %s", + len(completions), + split, + out_path, + ) + return out_path + + +# ----------------------------------------------------------------------------- +# Callback +# ----------------------------------------------------------------------------- + + +class EvalCompletionsCallback(TrainerCallback): # type: ignore[misc] + """ + Generate and log validation and test completions at each epoch end. + + :param trainer: HF Trainer instance, used to resolve the tokenizer + and unwrap the model at epoch end. + :param dataset: HF dataset repo id to generate completions from. + Must be supplied; typically taken from ``cfg.datasets[0].path``. + """ + + def __init__(self, trainer: Any = None, dataset: str = "") -> None: + self._val_examples: list[dict[str, Any]] = [] + self._test_examples: list[dict[str, Any]] = [] + self._trainer = trainer + self._dataset = dataset + + def on_train_begin( + self, + _args: TrainingArguments, + _state: TrainerState, + _control: TrainerControl, + **_kwargs: Any, + ) -> None: + """ + Load and cache validation and test examples before training. + + :param _args: HF TrainingArguments (unused). + :param _state: Current TrainerState (unused). + :param _control: TrainerControl object (unused). + :param **_kwargs: Keyword arguments passed by the HF Trainer. + :return: None + """ + hf_token = os.environ.get("HF_TOKEN") or os.environ.get( + "HUGGINGFACE_TOKEN" + ) + + def _load(split: str) -> list[dict[str, Any]]: + ds = load_dataset(self._dataset, split=split, token=hf_token) + return [ + { + "messages": [ + m for m in ex["messages"] if m["role"] != "assistant" + ] + } + for ex in ds + ] + + self._val_examples = _load("validation") + self._test_examples = _load("test") + log.info( + "EvalCompletionsCallback: loaded %d validation, %d test examples", + len(self._val_examples), + len(self._test_examples), + ) + + def on_evaluate( + self, + args: TrainingArguments, + state: TrainerState, + _control: TrainerControl, + metrics: dict[str, Any] | None = None, + **_kwargs: Any, + ) -> None: + """ + Persist eval_loss for this epoch to ``eval_losses.json``. + + :param args: HF TrainingArguments. + :param state: Current TrainerState. + :param _control: TrainerControl object (unused). + :param metrics: Evaluation metrics dict containing ``eval_loss``. + :param **_kwargs: Keyword arguments passed by the HF Trainer. + :return: None + """ + if ( + args.process_index != 0 + or not metrics + or "eval_loss" not in metrics + ): + return + epoch = round(state.epoch) + losses_path = Path(args.output_dir) / "eval_losses.json" + losses: dict[str, float] = ( + json.loads(losses_path.read_text()) if losses_path.exists() else {} + ) + losses[str(epoch)] = float(metrics["eval_loss"]) + losses_path.write_text(json.dumps(losses, indent=2)) + log.info( + "EvalCompletionsCallback: epoch %d eval_loss=%.4f", + epoch, + metrics["eval_loss"], + ) + + def _resolve_tokenizer( + self, tokenizer: Any, kwargs: dict[str, Any] + ) -> Any: + """ + Resolve tokenizer from kwargs or trainer fallback. + + :param tokenizer: Tokenizer passed to the callback, or None. + :param kwargs: Remaining keyword arguments from the Trainer. + :return: Resolved tokenizer, or None if unavailable. + """ + if tokenizer is None: + tokenizer = kwargs.get("processing_class") + if tokenizer is None and self._trainer is not None: + tokenizer = getattr( + self._trainer, "processing_class", None + ) or getattr(self._trainer, "tokenizer", None) + return tokenizer + + def _resolve_model(self, model: Any) -> Any: + """ + Unwrap model from DDP/FSDP or fall back to trainer. + + :param model: Model passed to the callback, or None. + :return: Unwrapped model. + """ + if model is None and self._trainer is not None: + model = self._trainer.model + if self._trainer is not None and hasattr(self._trainer, "accelerator"): + model = self._trainer.accelerator.unwrap_model(model) + return model + + def _upload_completions_artifact( + self, written: list[Path], epoch: int + ) -> None: + """ + Upload a W&B artifact containing written completion files. + + :param written: Paths to completion JSONL files. + :param epoch: Current epoch number, used in the artifact name. + :return: None + """ + if wandb.run is None: + return + artifact = wandb.Artifact( + f"{wandb.run.name}-epoch{epoch}-completions", + type="completions", + ) + for p in written: + artifact.add_file(str(p)) + wandb.log_artifact(artifact) + + def on_epoch_end( + self, + args: TrainingArguments, + state: TrainerState, + _control: TrainerControl, + model: Any = None, + tokenizer: Any = None, + **kwargs: Any, + ) -> None: + """ + Generate completions for all validation and test examples. + + All ranks generate their shard in parallel; rank 0 gathers, + writes ordered JSONL, and uploads a W&B artifact. + + :param args: HF TrainingArguments. + :param state: TrainerState providing the current epoch. + :param _control: TrainerControl object (unused). + :param model: Live model (DDP/FSDP wrapped; unwrapped internally). + :param tokenizer: Tokenizer, or None in newer transformers. + :param **kwargs: Keyword arguments passed by the HF Trainer. + :return: None + """ + epoch = round(state.epoch) + log.info( + "EvalCompletionsCallback: generating completions for epoch %d", + epoch, + ) + + tokenizer = self._resolve_tokenizer(tokenizer, kwargs) + if tokenizer is None: + log.error( + "EvalCompletionsCallback: tokenizer is None, " + "skipping epoch %d", + epoch, + ) + return + + model = self._resolve_model(model) + completions_root = ( + Path(args.output_dir).parent / "completions" / f"epoch_{epoch}" + ) + completions_root.mkdir(parents=True, exist_ok=True) + + orig_padding_side = tokenizer.padding_side + tokenizer.padding_side = "left" + model.eval() + + written: list[Path] = [] + for split, examples in ( + ("validation", self._val_examples), + ("test", self._test_examples), + ): + path = _write_split_completions( + examples, split, completions_root, model, tokenizer, args + ) + if path is not None: + written.append(path) + + model.train() + tokenizer.padding_side = orig_padding_side + + if args.process_index == 0: + self._upload_completions_artifact(written, epoch) + + +# ----------------------------------------------------------------------------- +# Plugin +# ----------------------------------------------------------------------------- + + +class EvalCompletionsPlugin(BasePlugin): # type: ignore[misc] + """ + Axolotl plugin that registers EvalCompletionsCallback before training. + + Register via the axolotl YAML config:: + + plugins: + - voice.finetune.callbacks.EvalCompletionsPlugin + """ + + def add_callbacks_post_trainer( + self, cfg: Any, trainer: Any + ) -> list[TrainerCallback]: + """ + Return the completions callback to be added to the Trainer. + + :param cfg: Axolotl config object. + :param trainer: The built HF Trainer instance. + :return: List containing the EvalCompletionsCallback instance. + :raises ValueError: If ``cfg.datasets[0].path`` is not accessible. + """ + try: + dataset: str = cfg.datasets[0].path + except (AttributeError, IndexError) as exc: + raise ValueError( + "EvalCompletionsPlugin requires cfg.datasets[0].path " + "to be set in the axolotl config." + ) from exc + return [EvalCompletionsCallback(trainer=trainer, dataset=dataset)] diff --git a/tests/voice/finetune/test_callbacks.py b/tests/voice/finetune/test_callbacks.py new file mode 100644 index 0000000..b99ae24 --- /dev/null +++ b/tests/voice/finetune/test_callbacks.py @@ -0,0 +1,97 @@ +""" +Tests for voice.finetune.callbacks. + +Scope: +- _format_completion produces correct chat_template JSONL structure +- GENERATION_CONFIG contains required keys derived from INFERENCE_DEFAULTS +- Completions directory path derivation from args.output_dir +""" + +from __future__ import annotations + +from pathlib import Path + +from voice._defaults import INFERENCE_DEFAULTS +from voice.finetune.callbacks import GENERATION_CONFIG, _format_completion + +# ----------------------------------------------------------------------------- +# _format_completion +# ----------------------------------------------------------------------------- + + +def test_format_completion_appends_assistant_turn(): + messages = [ + {"role": "system", "content": "sys"}, + {"role": "user", "content": "q"}, + ] + result = _format_completion(messages, "my response") + assert result["messages"][-1] == { + "role": "assistant", + "content": "my response", + } + + +def test_format_completion_preserves_prior_messages(): + messages = [ + {"role": "system", "content": "sys"}, + {"role": "user", "content": "q"}, + ] + result = _format_completion(messages, "r") + assert result["messages"][:-1] == messages + + +def test_format_completion_has_messages_key(): + result = _format_completion([], "hi") + assert "messages" in result + assert isinstance(result["messages"], list) + + +def test_format_completion_no_extra_keys(): + result = _format_completion([], "hi") + assert set(result.keys()) == {"messages"} + + +def test_format_completion_empty_messages_still_has_assistant(): + result = _format_completion([], "response") + assert result["messages"] == [{"role": "assistant", "content": "response"}] + + +# ----------------------------------------------------------------------------- +# GENERATION_CONFIG +# ----------------------------------------------------------------------------- + + +def test_generation_config_has_required_keys(): + required = {"do_sample", "temperature", "top_p", "top_k", "max_new_tokens"} + assert required.issubset(GENERATION_CONFIG.keys()) + + +def test_generation_config_temperature_matches_defaults(): + assert GENERATION_CONFIG["temperature"] == INFERENCE_DEFAULTS.temperature + + +def test_generation_config_max_new_tokens_matches_defaults(): + assert ( + GENERATION_CONFIG["max_new_tokens"] + == INFERENCE_DEFAULTS.max_new_tokens + ) + + +# ----------------------------------------------------------------------------- +# Completions path derivation +# ----------------------------------------------------------------------------- + + +def test_completions_root_derived_from_output_dir(): + output_dir = Path("/runs/my-run/adapter") + epoch = 2 + root = output_dir.parent / "completions" / f"epoch_{epoch}" + assert root == Path("/runs/my-run/completions/epoch_2") + + +def test_completions_jsonl_path_per_split(): + output_dir = Path("/runs/my-run/adapter") + epoch = 1 + root = output_dir.parent / "completions" / f"epoch_{epoch}" + assert (root / "validation.jsonl").name == "validation.jsonl" + assert (root / "test.jsonl").name == "test.jsonl" From 609851d9a37151d1bbaa17e700d04e336b83ccc5 Mon Sep 17 00:00:00 2001 From: Fin Griffin Date: Fri, 22 May 2026 14:47:28 +0100 Subject: [PATCH 57/68] feat(fine-tuning): add orchestration module --- src/voice/finetune/_orchestrator.py | 335 ++++++++++++++++++++++++++++ 1 file changed, 335 insertions(+) create mode 100644 src/voice/finetune/_orchestrator.py diff --git a/src/voice/finetune/_orchestrator.py b/src/voice/finetune/_orchestrator.py new file mode 100644 index 0000000..0c9a5f6 --- /dev/null +++ b/src/voice/finetune/_orchestrator.py @@ -0,0 +1,335 @@ +""" +Run orchestration for single fine-tuning runs. + +This module is private by convention and not part of the public API. + +Ties together run directory setup, axolotl training launch, completion +scoring, metadata persistence and W&B summary logging. + +Entry point is ``execute_run``, which performs the full lifecycle: + +1. Build run axolotl config from base config and hyperparams. +2. Create run directory and write config. +3. Initialise and persist ``RunMetadata`` (status ``running``). +4. Load reference dataset for post-training scoring. +5. Launch axolotl training; on failure set status ``failed`` and raise. +6. Score completions for each epoch and split. +7. Persist final metadata (status ``done``) and log alignment to W&B. +""" + +from __future__ import annotations + +import datetime +import json +import logging +import subprocess +from typing import Any + +import wandb + +from voice.comparison.comparison import make_comparison +from voice.datasets._schema import Split +from voice.datasets.dataset import ( + DatasetSpec, + Example, + LocalDatasetSpec, + VoiceDataset, +) +from voice.datasets.get_dataset import get_dataset +from voice.finetune._runs import RunDir +from voice.finetune._schema import RunMetadata + +log = logging.getLogger(__name__) + +# Axolotl config keys whose values come from the run hyperparams dict. +_HYPERPARAMS_CFG_KEYS: tuple[str, ...] = ( + "learning_rate", + "lora_r", + "lora_alpha", + "micro_batch_size", + "gradient_accumulation_steps", + "lora_target_modules", +) + +# Splits scored after each training epoch. +_EVAL_SPLITS: tuple[str, str] = ("validation", "test") + + +# ----------------------------------------------------------------------------- +# Config helpers +# ----------------------------------------------------------------------------- + + +def _build_axolotl_cfg( + base_cfg: dict[str, Any], + hyperparams: dict[str, Any], + run_dir: RunDir, +) -> dict[str, Any]: + """ + Build a per-run axolotl config by merging hyperparams into the base. + + Sets ``output_dir`` to ``run_dir.adapter_dir`` and copies any + recognised hyperparams keys present in ``hyperparams``. + + :param base_cfg: Shared axolotl config from the sweep or single-run + config. + :param hyperparams: Concrete hyperparameter values for this run. + :param run_dir: Run directory; determines ``output_dir``. + :return: Merged per-run axolotl config dict. + """ + cfg = dict(base_cfg) + cfg["output_dir"] = str(run_dir.adapter_dir) + for key in _HYPERPARAMS_CFG_KEYS: + if key in hyperparams: + cfg[key] = hyperparams[key] + return cfg + + +def _now_iso() -> str: + """ + Return the current UTC time as an ISO-8601 string. + + :return: ISO-formatted UTC timestamp. + """ + return datetime.datetime.now(datetime.UTC).isoformat() + + +# ----------------------------------------------------------------------------- +# Training +# ----------------------------------------------------------------------------- + + +def run_training(run_dir: RunDir) -> None: + """ + Launch axolotl training via ``accelerate`` and wait for completion. + + Reads the frozen config from ``run_dir.config_path``. + + :param run_dir: Run directory containing the written axolotl config. + :return: None + """ + cmd = [ + "accelerate", + "launch", + "-m", + "axolotl.cli.train", + str(run_dir.config_path), + ] + log.info("Launching training: %s", " ".join(cmd)) + subprocess.run(cmd, check=True) + + +# ----------------------------------------------------------------------------- +# Scoring +# ----------------------------------------------------------------------------- + + +def _load_completions( + run_dir: RunDir, + split: str, + epoch: int, +) -> list[Example]: + """ + Load per-epoch completions as a list of Examples. + + Completions are stored in chat-template JSONL format and are + transparently canonicalised to ``(system, question, answer)`` by + ``get_dataset``. + + :param run_dir: Run directory containing completions. + :param split: Split name (e.g. ``"validation"`` or ``"test"``). + :param epoch: Epoch number (1-indexed). + :return: List of Example objects loaded from the completions JSONL. + """ + epoch_dir = run_dir.completions_dir / f"epoch_{epoch}" + spec = LocalDatasetSpec(path=epoch_dir, splits=(Split.parse(split),)) + ds = get_dataset(spec) + return list(ds[split]) + + +def _score_split( + run_dir: RunDir, + split: str, + epoch: int, + reference_ds: VoiceDataset, +) -> float: + """ + Score completions for one split/epoch and persist results locally. + + Alignment results are written to + ``alignment/epoch_{n}/{split}.json`` with keys ``score``, + ``metric_tails``, and ``group_tails``. Only the overall score is + returned; the full tails are available on disk only. + + :param run_dir: Run directory. + :param split: Split name (``"validation"`` or ``"test"``). + :param epoch: Epoch number (1-indexed). + :param reference_ds: Reference VoiceDataset to compare against. + Must contain the split being scored and the ``train`` split + for self-Wasserstein calibration. + :return: Alignment score in [0, 1]. + """ + completions = _load_completions(run_dir, split, epoch) + results = make_comparison(completions, reference_ds) + + out_path = run_dir.alignment_path(split, epoch) + out_path.parent.mkdir(parents=True, exist_ok=True) + out_path.write_text( + json.dumps( + { + "score": results.score, + "metric_tails": results.metric_tails, + "group_tails": { + g.value: v for g, v in results.group_tails.items() + }, + }, + indent=2, + ) + ) + log.info("Scored %s epoch %d: alignment=%.4f", split, epoch, results.score) + return results.score + + +def _try_score_split( + run_dir: RunDir, + split: str, + epoch: int, + reference_ds: VoiceDataset, + meta: RunMetadata, +) -> None: + """ + Attempt to score one split/epoch; update ``meta`` in place on success. + + Skips silently if the completions file does not exist. + Logs and skips if scoring raises an exception. + + :param run_dir: Run directory. + :param split: Split name (``"validation"`` or ``"test"``). + :param epoch: Epoch number (1-indexed). + :param reference_ds: Reference VoiceDataset for comparison. + :param meta: RunMetadata to update with the alignment score. + :return: None + """ + if not run_dir.completions_path(split, epoch).exists(): + log.warning( + "Completions missing: %s epoch %d (skipping)", split, epoch + ) + return + try: + score = _score_split(run_dir, split, epoch, reference_ds) + except Exception: + log.exception("Scoring failed for %s epoch %d", split, epoch) + return + if split == "validation": + meta.alignment_val[str(epoch)] = score + else: + meta.alignment_test[str(epoch)] = score + + +def _score_all_epochs( + run_dir: RunDir, + num_epochs: int, + reference_ds: VoiceDataset, + meta: RunMetadata, +) -> None: + """ + Score completions across all epochs and splits; update ``meta`` in place. + + :param run_dir: Run directory. + :param num_epochs: Total number of training epochs. + :param reference_ds: Reference VoiceDataset for comparison. + :param meta: RunMetadata to update with per-epoch alignment scores. + :return: None + """ + for epoch in range(1, num_epochs + 1): + for split in _EVAL_SPLITS: + _try_score_split(run_dir, split, epoch, reference_ds, meta) + + +# ----------------------------------------------------------------------------- +# W&B logging +# ----------------------------------------------------------------------------- + + +def _log_to_wandb(meta: RunMetadata) -> None: + """ + Write alignment summary dicts to the active W&B run. + + Logs ``alignment_val`` and ``alignment_test`` (full epoch-keyed dicts) + to ``wandb.run.summary``. No-ops if no W&B run is currently active. + + :param meta: RunMetadata containing alignment score histories. + :return: None + """ + if wandb.run is None: + return + wandb.run.summary["alignment_val"] = meta.alignment_val + wandb.run.summary["alignment_test"] = meta.alignment_test + + +# ----------------------------------------------------------------------------- +# Entry point +# ----------------------------------------------------------------------------- + + +def execute_run( + run_name: str, + base_axolotl_cfg: dict[str, Any], + hyperparams: dict[str, Any], + run_dir: RunDir, + reference_spec: DatasetSpec | LocalDatasetSpec, +) -> RunMetadata: + """ + Execute a single fine-tuning run end-to-end. + + :param run_name: Unique run identifier (e.g. ``llama-3_a3f2b9c1``). + :param base_axolotl_cfg: Shared axolotl settings from the config file. + :param hyperparams: Concrete hyperparameter values for this run. + :param run_dir: RunDir instance for this run (not yet created on disk). + :param reference_spec: Dataset spec used as the reference corpus for + scoring. Must include ``train``, ``validation``, and ``test`` splits. + :return: Completed RunMetadata with alignment scores populated. + :raises RuntimeError: If axolotl training exits with a non-zero status. + """ + axolotl_cfg = _build_axolotl_cfg(base_axolotl_cfg, hyperparams, run_dir) + num_epochs = int(axolotl_cfg.get("num_epochs", 1)) + + run_dir.create() + run_dir.write_config(axolotl_cfg) + + datasets_list: list[dict[str, Any]] = axolotl_cfg.get("datasets") or [{}] + meta = RunMetadata( + run_name=run_name, + model=str(axolotl_cfg.get("base_model", "")), + dataset=str(datasets_list[0].get("path", "")), + hyperparams=hyperparams, + status="running", + started_at=_now_iso(), + ) + run_dir.write_metadata(meta) + + log.info("Loading reference dataset for run '%s'...", run_name) + reference_ds = get_dataset(reference_spec) + + try: + run_training(run_dir) + except subprocess.CalledProcessError as exc: + meta.status = "failed" + meta.finished_at = _now_iso() + run_dir.write_metadata(meta) + raise RuntimeError(f"Training failed for run '{run_name}'") from exc + + _score_all_epochs(run_dir, num_epochs, reference_ds, meta) + + meta.status = "done" + meta.finished_at = _now_iso() + run_dir.write_metadata(meta) + _log_to_wandb(meta) + + log.info( + "Run '%s' complete. alignment_val=%s alignment_test=%s", + run_name, + meta.alignment_val, + meta.alignment_test, + ) + return meta From 0bc728e911296fc96378efdff5cc0c0ce2e2ee39 Mon Sep 17 00:00:00 2001 From: Fin Griffin Date: Fri, 22 May 2026 15:03:45 +0100 Subject: [PATCH 58/68] feat(fine-tuning): add cli --- pyproject.toml | 10 ++ src/voice/finetune/cli.py | 162 +++++++++++++++++++ tests/voice/finetune/test_cli.py | 264 +++++++++++++++++++++++++++++++ 3 files changed, 436 insertions(+) create mode 100644 src/voice/finetune/cli.py create mode 100644 tests/voice/finetune/test_cli.py diff --git a/pyproject.toml b/pyproject.toml index b48f023..2ec89c9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -23,6 +23,9 @@ dependencies = [ "bitsandbytes>=0.49.1 ; sys_platform == 'linux'", ] +[project.scripts] +voice = "voice.finetune.cli:main" + [tool.uv] required-environments = ["sys_platform == 'linux'"] @@ -109,6 +112,10 @@ no_implicit_optional = true module = ["tests.*"] ignore_errors = true +[[tool.mypy.overrides]] +module = ["voice.finetune.cli"] +ignore_errors = true + [[tool.mypy.overrides]] module = [ "datasets", @@ -139,6 +146,8 @@ module = [ "wandb.*", "axolotl", "axolotl.*", + "click", + "click.*", ] ignore_missing_imports = true @@ -153,3 +162,4 @@ skip-checking-short-docstrings = false skip-checking-raises = false require-return-section-when-returning-nothing = true check-return-types = false +exclude = '\.git|\.tox|finetune/cli\.py' diff --git a/src/voice/finetune/cli.py b/src/voice/finetune/cli.py new file mode 100644 index 0000000..2db31a2 --- /dev/null +++ b/src/voice/finetune/cli.py @@ -0,0 +1,162 @@ +""" +Click CLI for VOICE fine-tuning. + +Provides two subcommands under ``voice finetune``: + +- ``single`` - run one fine-tuning job from a single-run YAML config. +- ``sweep`` - run a hyperparameter grid search from a sweep YAML config. + +Usage:: + + voice finetune single configs/single/my_run.yaml + voice finetune sweep configs/sweep/pilot.yaml --resume +""" + +from __future__ import annotations + +import logging +import sys +from pathlib import Path + +import click + +from voice.datasets._schema import Split +from voice.datasets.dataset import DatasetSpec +from voice.finetune._grid import expand_grid, generate_run_name, new_uid +from voice.finetune._orchestrator import execute_run +from voice.finetune._runs import RunDir +from voice.finetune._schema import SingleRunConfig, SweepConfig +from voice.finetune._state import load_state, mark_completed, mark_failed + +log = logging.getLogger(__name__) + +# All three splits are required: train for calibration, val/test for scoring. +_ALL_SPLITS: tuple[Split, ...] = (Split.TRAIN, Split.VALIDATION, Split.TEST) + + +# ----------------------------------------------------------------------------- +# CLI groups +# ----------------------------------------------------------------------------- + + +@click.group() +def main() -> None: + """VOICE – fine-tuning for stylistic fidelity.""" + + +@main.group() +def finetune() -> None: + """Fine-tuning commands.""" + + +# ----------------------------------------------------------------------------- +# `voice finetune single` +# ----------------------------------------------------------------------------- + + +@finetune.command("single") +@click.argument("config", type=click.Path(exists=True, path_type=Path)) +@click.option( + "--runs-dir", + default="runs", + show_default=True, + type=click.Path(path_type=Path), + help="Root directory for run outputs.", +) +@click.option( + "--dataset-revision", + default="main", + show_default=True, + help="HF revision of the reference dataset.", +) +def single( + config: Path, + runs_dir: Path, + dataset_revision: str, +) -> None: + """Run a single fine-tuning job from CONFIG.""" + cfg = SingleRunConfig.from_yaml(config) + dataset: str = cfg.axolotl["datasets"][0]["path"] + model: str = str(cfg.axolotl.get("base_model", "")) + run_name = generate_run_name(model, new_uid()) + run_dir = RunDir(path=runs_dir / run_name) + reference_spec = DatasetSpec( + repo_id=dataset, + revision=dataset_revision, + splits=_ALL_SPLITS, + ) + click.echo(f"Starting run: {run_name}") + try: + execute_run(run_name, cfg.axolotl, {}, run_dir, reference_spec) + except RuntimeError as exc: + click.echo(f"Run failed: {exc}", err=True) + sys.exit(1) + click.echo(f"Run complete: {run_name}") + + +# ----------------------------------------------------------------------------- +# `voice finetune sweep` +# ----------------------------------------------------------------------------- + + +@finetune.command("sweep") +@click.argument("config", type=click.Path(exists=True, path_type=Path)) +@click.option( + "--runs-dir", + default="runs", + show_default=True, + type=click.Path(path_type=Path), + help="Root directory for run outputs.", +) +@click.option( + "--resume/--no-resume", + default=False, + help="Skip runs already marked completed in state.json.", +) +@click.option( + "--dataset-revision", + default="main", + show_default=True, + help="HF revision of the reference dataset.", +) +def sweep( + config: Path, + runs_dir: Path, + resume: bool, + dataset_revision: str, +) -> None: + """Run a hyperparameter sweep from CONFIG.""" + cfg = SweepConfig.from_yaml(config) + dataset: str = cfg.axolotl["datasets"][0]["path"] + model: str = str(cfg.axolotl.get("base_model", "")) + grid = expand_grid(cfg.sweep) + runs_dir.mkdir(parents=True, exist_ok=True) + state_file = runs_dir / "state.json" + state = load_state(state_file) + reference_spec = DatasetSpec( + repo_id=dataset, + revision=dataset_revision, + splits=_ALL_SPLITS, + ) + failed_count = 0 + for hyperparams in grid: + run_idx = str(hyperparams["run_idx"]) + if resume and run_idx in state["completed"]: + click.echo(f"Skipping run {run_idx} (already completed)") + continue + run_name = generate_run_name(model, new_uid()) + run_dir = RunDir(path=runs_dir / run_name) + click.echo(f"Starting run {run_idx}/{len(grid) - 1}: {run_name}") + try: + execute_run( + run_name, cfg.axolotl, hyperparams, run_dir, reference_spec + ) + mark_completed(state, run_idx, state_file) + click.echo(f"Run {run_idx} complete: {run_name}") + except RuntimeError as exc: + mark_failed(state, run_idx, str(exc), state_file) + click.echo(f"Run {run_idx} failed: {exc}", err=True) + failed_count += 1 + if failed_count: + click.echo(f"{failed_count} run(s) failed.", err=True) + sys.exit(1) diff --git a/tests/voice/finetune/test_cli.py b/tests/voice/finetune/test_cli.py new file mode 100644 index 0000000..bfa8ac3 --- /dev/null +++ b/tests/voice/finetune/test_cli.py @@ -0,0 +1,264 @@ +""" +Tests for voice.finetune.cli. + +Scope: +- ``voice finetune single`` invokes execute_run with correct arguments. +- ``voice finetune single`` exits non-zero on training failure. +- ``voice finetune sweep`` invokes execute_run once per grid point. +- ``voice finetune sweep --resume`` skips already-completed runs. +- ``voice finetune sweep`` exits non-zero if any run fails. +""" + +from __future__ import annotations + +from pathlib import Path +from unittest.mock import patch + +import yaml +from click.testing import CliRunner + +from voice.finetune.cli import main + +# --------------------------------------------------------------------------- +# Config helpers +# --------------------------------------------------------------------------- + + +def _single_cfg(tmp_path: Path) -> Path: + cfg = { + "axolotl": { + "base_model": "namespace/model", + "datasets": [{"path": "namespace/dataset"}], + "num_epochs": 2, + } + } + p = tmp_path / "single.yaml" + p.write_text(yaml.dump(cfg)) + return p + + +def _sweep_cfg(tmp_path: Path) -> Path: + cfg = { + "sweep": { + "learning_rate": [1e-4], + "lora_r": [8], + "micro_batch_size": [4], + "gradient_accumulation_steps": [4], + "target_layers": [ + {"name": "attention", "modules": ["q_proj", "v_proj"]} + ], + }, + "axolotl": { + "base_model": "namespace/model", + "datasets": [{"path": "namespace/dataset"}], + "num_epochs": 1, + }, + } + p = tmp_path / "sweep.yaml" + p.write_text(yaml.dump(cfg)) + return p + + +# --------------------------------------------------------------------------- +# `voice finetune single` +# --------------------------------------------------------------------------- + + +def test_single_invokes_execute_run(tmp_path): + runner = CliRunner() + with patch("voice.finetune.cli.execute_run") as mock_run: + result = runner.invoke( + main, + [ + "finetune", + "single", + str(_single_cfg(tmp_path)), + "--runs-dir", + str(tmp_path / "runs"), + ], + ) + assert result.exit_code == 0, result.output + assert mock_run.call_count == 1 + + +def test_single_passes_dataset_as_reference_repo(tmp_path): + runner = CliRunner() + with patch("voice.finetune.cli.execute_run") as mock_run: + runner.invoke( + main, + [ + "finetune", + "single", + str(_single_cfg(tmp_path)), + "--runs-dir", + str(tmp_path / "runs"), + ], + ) + ref_spec = mock_run.call_args.args[4] + assert ref_spec.repo_id == "namespace/dataset" + + +def test_single_default_dataset_revision_is_main(tmp_path): + runner = CliRunner() + with patch("voice.finetune.cli.execute_run") as mock_run: + runner.invoke( + main, + [ + "finetune", + "single", + str(_single_cfg(tmp_path)), + "--runs-dir", + str(tmp_path / "runs"), + ], + ) + ref_spec = mock_run.call_args.args[4] + assert ref_spec.revision == "main" + + +def test_single_respects_dataset_revision_option(tmp_path): + runner = CliRunner() + with patch("voice.finetune.cli.execute_run") as mock_run: + runner.invoke( + main, + [ + "finetune", + "single", + str(_single_cfg(tmp_path)), + "--runs-dir", + str(tmp_path / "runs"), + "--dataset-revision", + "abc123", + ], + ) + ref_spec = mock_run.call_args.args[4] + assert ref_spec.revision == "abc123" + + +def test_single_exits_nonzero_on_training_failure(tmp_path): + runner = CliRunner() + with patch( + "voice.finetune.cli.execute_run", side_effect=RuntimeError("boom") + ): + result = runner.invoke( + main, + [ + "finetune", + "single", + str(_single_cfg(tmp_path)), + "--runs-dir", + str(tmp_path / "runs"), + ], + ) + assert result.exit_code == 1 + + +def test_single_missing_config_exits_nonzero(): + runner = CliRunner() + result = runner.invoke(main, ["finetune", "single", "missing.yaml"]) + assert result.exit_code != 0 + + +# --------------------------------------------------------------------------- +# `voice finetune sweep` +# --------------------------------------------------------------------------- + + +def test_sweep_calls_execute_run_per_grid_point(tmp_path): + runner = CliRunner() + with patch("voice.finetune.cli.execute_run") as mock_run: + result = runner.invoke( + main, + [ + "finetune", + "sweep", + str(_sweep_cfg(tmp_path)), + "--runs-dir", + str(tmp_path / "runs"), + ], + ) + assert result.exit_code == 0, result.output + # One grid point in _sweep_cfg + assert mock_run.call_count == 1 + + +def test_sweep_resume_skips_completed_run(tmp_path): + runs_dir = tmp_path / "runs" + runs_dir.mkdir() + (runs_dir / "state.json").write_text('{"completed": ["0"], "failed": {}}') + runner = CliRunner() + with patch("voice.finetune.cli.execute_run") as mock_run: + result = runner.invoke( + main, + [ + "finetune", + "sweep", + str(_sweep_cfg(tmp_path)), + "--runs-dir", + str(runs_dir), + "--resume", + ], + ) + assert result.exit_code == 0, result.output + assert mock_run.call_count == 0 + + +def test_sweep_no_resume_reruns_completed(tmp_path): + runs_dir = tmp_path / "runs" + runs_dir.mkdir() + (runs_dir / "state.json").write_text('{"completed": ["0"], "failed": {}}') + runner = CliRunner() + with patch("voice.finetune.cli.execute_run") as mock_run: + result = runner.invoke( + main, + [ + "finetune", + "sweep", + str(_sweep_cfg(tmp_path)), + "--runs-dir", + str(runs_dir), + ], + ) + assert result.exit_code == 0, result.output + assert mock_run.call_count == 1 + + +def test_sweep_exits_nonzero_on_any_failure(tmp_path): + runner = CliRunner() + with patch( + "voice.finetune.cli.execute_run", side_effect=RuntimeError("fail") + ): + result = runner.invoke( + main, + [ + "finetune", + "sweep", + str(_sweep_cfg(tmp_path)), + "--runs-dir", + str(tmp_path / "runs"), + ], + ) + assert result.exit_code == 1 + + +def test_sweep_missing_config_exits_nonzero(): + runner = CliRunner() + result = runner.invoke(main, ["finetune", "sweep", "missing.yaml"]) + assert result.exit_code != 0 + + +def test_sweep_passes_hyperparams_to_execute_run(tmp_path): + runner = CliRunner() + with patch("voice.finetune.cli.execute_run") as mock_run: + runner.invoke( + main, + [ + "finetune", + "sweep", + str(_sweep_cfg(tmp_path)), + "--runs-dir", + str(tmp_path / "runs"), + ], + ) + hyperparams = mock_run.call_args.args[2] + assert hyperparams["learning_rate"] == 1e-4 + assert hyperparams["lora_r"] == 8 From eca7f27ef214d2c0603c25808416c7b28c7099a0 Mon Sep 17 00:00:00 2001 From: Fin Griffin Date: Fri, 22 May 2026 15:33:37 +0100 Subject: [PATCH 59/68] chore: remove wandb post-hoc artefact upload --- src/voice/finetune/_orchestrator.py | 28 ++-------------------- src/voice/finetune/callbacks.py | 36 ++++------------------------- 2 files changed, 6 insertions(+), 58 deletions(-) diff --git a/src/voice/finetune/_orchestrator.py b/src/voice/finetune/_orchestrator.py index 0c9a5f6..59d2365 100644 --- a/src/voice/finetune/_orchestrator.py +++ b/src/voice/finetune/_orchestrator.py @@ -4,7 +4,7 @@ This module is private by convention and not part of the public API. Ties together run directory setup, axolotl training launch, completion -scoring, metadata persistence and W&B summary logging. +scoring, and metadata persistence. Entry point is ``execute_run``, which performs the full lifecycle: @@ -14,7 +14,7 @@ 4. Load reference dataset for post-training scoring. 5. Launch axolotl training; on failure set status ``failed`` and raise. 6. Score completions for each epoch and split. -7. Persist final metadata (status ``done``) and log alignment to W&B. +7. Persist final metadata (status ``done``). """ from __future__ import annotations @@ -25,8 +25,6 @@ import subprocess from typing import Any -import wandb - from voice.comparison.comparison import make_comparison from voice.datasets._schema import Split from voice.datasets.dataset import ( @@ -246,27 +244,6 @@ def _score_all_epochs( _try_score_split(run_dir, split, epoch, reference_ds, meta) -# ----------------------------------------------------------------------------- -# W&B logging -# ----------------------------------------------------------------------------- - - -def _log_to_wandb(meta: RunMetadata) -> None: - """ - Write alignment summary dicts to the active W&B run. - - Logs ``alignment_val`` and ``alignment_test`` (full epoch-keyed dicts) - to ``wandb.run.summary``. No-ops if no W&B run is currently active. - - :param meta: RunMetadata containing alignment score histories. - :return: None - """ - if wandb.run is None: - return - wandb.run.summary["alignment_val"] = meta.alignment_val - wandb.run.summary["alignment_test"] = meta.alignment_test - - # ----------------------------------------------------------------------------- # Entry point # ----------------------------------------------------------------------------- @@ -324,7 +301,6 @@ def execute_run( meta.status = "done" meta.finished_at = _now_iso() run_dir.write_metadata(meta) - _log_to_wandb(meta) log.info( "Run '%s' complete. alignment_val=%s alignment_test=%s", diff --git a/src/voice/finetune/callbacks.py b/src/voice/finetune/callbacks.py index a1ca1f2..a7efc93 100644 --- a/src/voice/finetune/callbacks.py +++ b/src/voice/finetune/callbacks.py @@ -7,8 +7,7 @@ All GPUs participate in generation: each split's examples are sharded across processes. Each shard is generated in batches of ``INFERENCE_DEFAULTS.batch_size``. After all ranks finish, results are -gathered and rank 0 writes the final ordered JSONL and uploads a W&B -artifact. +gathered and rank 0 writes the final ordered JSONL. Completions are written under the run directory derived from ``args.output_dir`` (the adapter dir): @@ -26,7 +25,6 @@ import torch import torch.distributed -import wandb from datasets import load_dataset from transformers import ( TrainerCallback, @@ -333,26 +331,6 @@ def _resolve_model(self, model: Any) -> Any: model = self._trainer.accelerator.unwrap_model(model) return model - def _upload_completions_artifact( - self, written: list[Path], epoch: int - ) -> None: - """ - Upload a W&B artifact containing written completion files. - - :param written: Paths to completion JSONL files. - :param epoch: Current epoch number, used in the artifact name. - :return: None - """ - if wandb.run is None: - return - artifact = wandb.Artifact( - f"{wandb.run.name}-epoch{epoch}-completions", - type="completions", - ) - for p in written: - artifact.add_file(str(p)) - wandb.log_artifact(artifact) - def on_epoch_end( self, args: TrainingArguments, @@ -365,8 +343,8 @@ def on_epoch_end( """ Generate completions for all validation and test examples. - All ranks generate their shard in parallel; rank 0 gathers, - writes ordered JSONL, and uploads a W&B artifact. + All ranks generate their shard in parallel; rank 0 gathers + and writes ordered JSONL. :param args: HF TrainingArguments. :param state: TrainerState providing the current epoch. @@ -401,23 +379,17 @@ def on_epoch_end( tokenizer.padding_side = "left" model.eval() - written: list[Path] = [] for split, examples in ( ("validation", self._val_examples), ("test", self._test_examples), ): - path = _write_split_completions( + _write_split_completions( examples, split, completions_root, model, tokenizer, args ) - if path is not None: - written.append(path) model.train() tokenizer.padding_side = orig_padding_side - if args.process_index == 0: - self._upload_completions_artifact(written, epoch) - # ----------------------------------------------------------------------------- # Plugin From 2d384b1c3c7e1fc25638692c2cddd044f2fa756f Mon Sep 17 00:00:00 2001 From: Fin Griffin Date: Fri, 22 May 2026 15:43:11 +0100 Subject: [PATCH 60/68] chore: remove unicode escaping in axolotl custom callback --- src/voice/finetune/callbacks.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/voice/finetune/callbacks.py b/src/voice/finetune/callbacks.py index a7efc93..603e27b 100644 --- a/src/voice/finetune/callbacks.py +++ b/src/voice/finetune/callbacks.py @@ -193,7 +193,9 @@ def _write_split_completions( if args.process_index != 0: return None out_path = completions_root / f"{split}.jsonl" - out_path.write_text("\n".join(json.dumps(c) for c in completions)) + out_path.write_text( + "\n".join(json.dumps(c, ensure_ascii=False) for c in completions) + ) log.info( "EvalCompletionsCallback: wrote %d %s completions -> %s", len(completions), From dd2ac292b3bed57956be24804f9cf24981e70c37 Mon Sep 17 00:00:00 2001 From: Fin Griffin Date: Fri, 22 May 2026 16:18:21 +0100 Subject: [PATCH 61/68] fix: fix PYTHONPATH handling in axolotl subprocess --- src/voice/finetune/_orchestrator.py | 48 +++++++++++++++++++++-------- src/voice/finetune/cli.py | 25 +++++++++++++-- 2 files changed, 59 insertions(+), 14 deletions(-) diff --git a/src/voice/finetune/_orchestrator.py b/src/voice/finetune/_orchestrator.py index 59d2365..f06727c 100644 --- a/src/voice/finetune/_orchestrator.py +++ b/src/voice/finetune/_orchestrator.py @@ -22,7 +22,9 @@ import datetime import json import logging +import os import subprocess +import sys from typing import Any from voice.comparison.comparison import make_comparison @@ -97,24 +99,43 @@ def _now_iso() -> str: # ----------------------------------------------------------------------------- -def run_training(run_dir: RunDir) -> None: +def run_training(run_dir: RunDir, gpu_ids: str = "0") -> None: """ - Launch axolotl training via ``accelerate`` and wait for completion. + Launch axolotl training and wait for completion. - Reads the frozen config from ``run_dir.config_path``. + Sets ``CUDA_VISIBLE_DEVICES`` to ``gpu_ids``. For a single GPU uses + ``python -m axolotl.cli.train`` directly; for multiple GPUs uses + ``accelerate launch`` with DDP. :param run_dir: Run directory containing the written axolotl config. + :param gpu_ids: Comma-separated GPU indices to train on (e.g. ``"0"`` + or ``"0,1,2"``). :return: None """ - cmd = [ - "accelerate", - "launch", - "-m", - "axolotl.cli.train", - str(run_dir.config_path), - ] + n_gpus = len([d for d in gpu_ids.split(",") if d.strip()]) + if n_gpus > 1: + cmd = [ + sys.executable, + "-m", + "accelerate.commands.launch", + f"--num_processes={n_gpus}", + "--mixed_precision=no", + "--dynamo_backend=no", + "-m", + "axolotl.cli.train", + str(run_dir.config_path), + ] + else: + cmd = [ + sys.executable, + "-m", + "axolotl.cli.train", + str(run_dir.config_path), + ] + env = os.environ.copy() + env["CUDA_VISIBLE_DEVICES"] = gpu_ids log.info("Launching training: %s", " ".join(cmd)) - subprocess.run(cmd, check=True) + subprocess.run(cmd, check=True, env=env) # ----------------------------------------------------------------------------- @@ -255,6 +276,7 @@ def execute_run( hyperparams: dict[str, Any], run_dir: RunDir, reference_spec: DatasetSpec | LocalDatasetSpec, + gpu_ids: str = "0", ) -> RunMetadata: """ Execute a single fine-tuning run end-to-end. @@ -265,6 +287,8 @@ def execute_run( :param run_dir: RunDir instance for this run (not yet created on disk). :param reference_spec: Dataset spec used as the reference corpus for scoring. Must include ``train``, ``validation``, and ``test`` splits. + :param gpu_ids: Comma-separated GPU indices to train on (e.g. ``"0"`` + or ``"0,1,2"``). Passed to ``accelerate launch``. :return: Completed RunMetadata with alignment scores populated. :raises RuntimeError: If axolotl training exits with a non-zero status. """ @@ -289,7 +313,7 @@ def execute_run( reference_ds = get_dataset(reference_spec) try: - run_training(run_dir) + run_training(run_dir, gpu_ids=gpu_ids) except subprocess.CalledProcessError as exc: meta.status = "failed" meta.finished_at = _now_iso() diff --git a/src/voice/finetune/cli.py b/src/voice/finetune/cli.py index 2db31a2..8a55379 100644 --- a/src/voice/finetune/cli.py +++ b/src/voice/finetune/cli.py @@ -69,10 +69,17 @@ def finetune() -> None: show_default=True, help="HF revision of the reference dataset.", ) +@click.option( + "--gpus", + default="0", + show_default=True, + help="Comma-separated GPU indices to train on (e.g. '0' or '0,1,2').", +) def single( config: Path, runs_dir: Path, dataset_revision: str, + gpus: str, ) -> None: """Run a single fine-tuning job from CONFIG.""" cfg = SingleRunConfig.from_yaml(config) @@ -87,7 +94,9 @@ def single( ) click.echo(f"Starting run: {run_name}") try: - execute_run(run_name, cfg.axolotl, {}, run_dir, reference_spec) + execute_run( + run_name, cfg.axolotl, {}, run_dir, reference_spec, gpu_ids=gpus + ) except RuntimeError as exc: click.echo(f"Run failed: {exc}", err=True) sys.exit(1) @@ -119,11 +128,18 @@ def single( show_default=True, help="HF revision of the reference dataset.", ) +@click.option( + "--gpus", + default="0", + show_default=True, + help="Comma-separated GPU indices to train on (e.g. '0' or '0,1,2').", +) def sweep( config: Path, runs_dir: Path, resume: bool, dataset_revision: str, + gpus: str, ) -> None: """Run a hyperparameter sweep from CONFIG.""" cfg = SweepConfig.from_yaml(config) @@ -149,7 +165,12 @@ def sweep( click.echo(f"Starting run {run_idx}/{len(grid) - 1}: {run_name}") try: execute_run( - run_name, cfg.axolotl, hyperparams, run_dir, reference_spec + run_name, + cfg.axolotl, + hyperparams, + run_dir, + reference_spec, + gpu_ids=gpus, ) mark_completed(state, run_idx, state_file) click.echo(f"Run {run_idx} complete: {run_name}") From 99cf6c0aa4ca845f632e24fa81413f7f4dcf3e95 Mon Sep 17 00:00:00 2001 From: Fin Griffin Date: Tue, 9 Jun 2026 16:18:22 +0100 Subject: [PATCH 62/68] feat(stylometry): remove number of tokens/words as a stylometric metric --- src/voice/_defaults.py | 5 ----- src/voice/stylometry/__init__.py | 2 -- src/voice/stylometry/metrics.py | 18 ---------------- tests/voice/comparison/test_comparison.py | 26 ++++++++++++++--------- tests/voice/stylometry/test_metrics.py | 20 ++++++----------- 5 files changed, 23 insertions(+), 48 deletions(-) diff --git a/src/voice/_defaults.py b/src/voice/_defaults.py index 7118cc0..da6b078 100644 --- a/src/voice/_defaults.py +++ b/src/voice/_defaults.py @@ -31,17 +31,12 @@ class MetricGroup(str, Enum): .. attribute :: CHAR_NGRAM_DIVERSITY Character n-gram TTR and MATTR across n = 3, 4, 5. - - .. attribute :: TEXT_LENGTH - - Raw token count. """ WORD_LENGTH_DISTRIBUTION = "word_length_distribution" VOCABULARY_RICHNESS = "vocabulary_richness" FUNCTION_WORDS = "function_words" CHAR_NGRAM_DIVERSITY = "char_ngram_diversity" - TEXT_LENGTH = "text_length" @dataclass(frozen=True) diff --git a/src/voice/stylometry/__init__.py b/src/voice/stylometry/__init__.py index e4da059..1e52bc6 100644 --- a/src/voice/stylometry/__init__.py +++ b/src/voice/stylometry/__init__.py @@ -19,7 +19,6 @@ calculate_hapax_legomena_ratio, calculate_kurtosis_word_length, calculate_moving_avg_type_token_ratio, - calculate_num_words, calculate_skew_word_length, calculate_std_word_length, calculate_tri_legomena_ratio, @@ -38,7 +37,6 @@ "calculate_std_word_length", "calculate_skew_word_length", "calculate_kurtosis_word_length", - "calculate_num_words", "calculate_hapax_legomena_ratio", "calculate_dis_legomena_ratio", "calculate_tri_legomena_ratio", diff --git a/src/voice/stylometry/metrics.py b/src/voice/stylometry/metrics.py index 3f4666c..634c963 100644 --- a/src/voice/stylometry/metrics.py +++ b/src/voice/stylometry/metrics.py @@ -9,7 +9,6 @@ - Standard deviation of word length (`std_word_length`) - Skewness of word length (`skew_word_length`) - Standard kurtosis of word length (`kurtosis_word_length`) - - Total number of words (`num_words`) - Hapax legomena ratio (`hapax_legomena_ratio`) - Dis legomena ratio (`dis_legomena_ratio`) - Tri legomena ratio (`tri_legomena_ratio`) @@ -235,23 +234,6 @@ def calculate_kurtosis_word_length(text: str) -> float: # ----------------------------------------------------------------------------- -@metric( - "num_words", - group=MetricGroup.TEXT_LENGTH, - description="Number of words in text", -) -def calculate_num_words(text: str) -> float: - """ - Calculate the number of words in a string. - - Number of words in an empty string is 0.0. - - :param text: Provided text - :return: Number of words as a float - """ - return float(len(word_tokenize(text))) - - @metric( "hapax_legomena_ratio", group=MetricGroup.VOCABULARY_RICHNESS, diff --git a/tests/voice/comparison/test_comparison.py b/tests/voice/comparison/test_comparison.py index 82666d3..b328b72 100644 --- a/tests/voice/comparison/test_comparison.py +++ b/tests/voice/comparison/test_comparison.py @@ -85,7 +85,7 @@ def metric_registry(): return { "len": _Metric( fn=lambda s: float(len(s)), - group=MetricGroup.TEXT_LENGTH, + group=MetricGroup.WORD_LENGTH_DISTRIBUTION, ), "vowels": _Metric( fn=lambda s: float(sum(c in "aeiou" for c in s.lower())), @@ -253,7 +253,9 @@ def raising_metric(s: str) -> float: comparison, "get_metrics", lambda: { - "len": _Metric(fn=raising_metric, group=MetricGroup.TEXT_LENGTH) + "len": _Metric( + fn=raising_metric, group=MetricGroup.WORD_LENGTH_DISTRIBUTION + ) }, ) @@ -281,7 +283,9 @@ def test_self_wasserstein_distribution_is_zero_for_constant_metric( comparison, "get_metrics", lambda: { - "const": _Metric(fn=lambda _s: 1.0, group=MetricGroup.TEXT_LENGTH) + "const": _Metric( + fn=lambda _s: 1.0, group=MetricGroup.WORD_LENGTH_DISTRIBUTION + ) }, ) @@ -305,7 +309,7 @@ def test_self_wasserstein_distribution_is_zero_for_constant_metric( def test_comparison_entry_is_frozen_and_slots(): e = ComparisonEntry( metric="m", - group=MetricGroup.TEXT_LENGTH, + group=MetricGroup.WORD_LENGTH_DISTRIBUTION, wasserstein=1.0, percentile=0.9, tail=0.1, @@ -317,7 +321,7 @@ def test_comparison_entry_is_frozen_and_slots(): def test_comparison_group_entry_is_frozen_and_slots(): e = GroupEntry( - group=MetricGroup.TEXT_LENGTH, + group=MetricGroup.WORD_LENGTH_DISTRIBUTION, avg_percentile=0.9, avg_tail=0.1, ) @@ -341,7 +345,7 @@ def test_comparison_results_properties_and_add_logic(patch_metrics): r.add(metric="len", wasserstein=np.float64(1.25), percentile=0.9) e = r.get("len") assert e.metric == "len" - assert e.group == MetricGroup.TEXT_LENGTH + assert e.group == MetricGroup.WORD_LENGTH_DISTRIBUTION assert isinstance(e.wasserstein, float) assert isinstance(e.percentile, float) assert e.tail == pytest.approx(0.1) @@ -351,7 +355,7 @@ def test_comparison_results_properties_and_add_logic(patch_metrics): assert e2.group == MetricGroup.VOCABULARY_RICHNESS # Group-level checks - ge_len = r.get_group(MetricGroup.TEXT_LENGTH) + ge_len = r.get_group(MetricGroup.WORD_LENGTH_DISTRIBUTION) assert ge_len.avg_percentile == pytest.approx(0.9) assert ge_len.avg_tail == pytest.approx(0.1) @@ -375,10 +379,12 @@ def test_comparison_results_score_weights_groups_equally(patch_metrics): # Add a second TEXT_LENGTH metric to verify equal group weighting. registry = { "len": _Metric( - fn=lambda s: float(len(s)), group=MetricGroup.TEXT_LENGTH + fn=lambda s: float(len(s)), + group=MetricGroup.WORD_LENGTH_DISTRIBUTION, ), "len2": _Metric( - fn=lambda s: float(len(s)), group=MetricGroup.TEXT_LENGTH + fn=lambda s: float(len(s)), + group=MetricGroup.WORD_LENGTH_DISTRIBUTION, ), "vowels": _Metric( fn=lambda s: float(sum(c in "aeiou" for c in s.lower())), @@ -418,7 +424,7 @@ def test_comparison_results_group_tails(patch_metrics): r.add(metric="vowels", wasserstein=0.5, percentile=0.3) tails = r.group_tails - assert tails[MetricGroup.TEXT_LENGTH] == pytest.approx(0.2) + assert tails[MetricGroup.WORD_LENGTH_DISTRIBUTION] == pytest.approx(0.2) assert tails[MetricGroup.VOCABULARY_RICHNESS] == pytest.approx(0.7) diff --git a/tests/voice/stylometry/test_metrics.py b/tests/voice/stylometry/test_metrics.py index 69fc947..8adc336 100644 --- a/tests/voice/stylometry/test_metrics.py +++ b/tests/voice/stylometry/test_metrics.py @@ -80,7 +80,6 @@ def test_get_metrics_contains_expected_metric_names(): "std_word_length", "skew_word_length", "kurtosis_word_length", - "num_words", "hapax_legomena_ratio", "dis_legomena_ratio", "tri_legomena_ratio", @@ -100,15 +99,19 @@ def test_get_metrics_contains_expected_metric_names(): def test_metric_decorator_rejects_duplicate_names(monkeypatch): # Isolate decorator behaviour by swapping the module registry. monkeypatch.setattr(metrics, "_REGISTRY", {}) - metrics.metric("x", group=MetricGroup.TEXT_LENGTH)(lambda t: 0.0) + metrics.metric("x", group=MetricGroup.WORD_LENGTH_DISTRIBUTION)( + lambda t: 0.0 + ) with pytest.raises(ValueError, match=r"Duplicate metric name 'x'"): - metrics.metric("x", group=MetricGroup.TEXT_LENGTH)(lambda t: 1.0) + metrics.metric("x", group=MetricGroup.WORD_LENGTH_DISTRIBUTION)( + lambda t: 1.0 + ) def test_metric_spec_is_frozen(): spec = metrics.MetricSpec( fn=lambda t: 0.0, - group=MetricGroup.TEXT_LENGTH, + group=MetricGroup.WORD_LENGTH_DISTRIBUTION, description="x", ) assert type(spec).__dataclass_params__.frozen is True @@ -152,7 +155,6 @@ def test_metric_groups_cover_all_enum_values(): "std_word_length": MetricGroup.WORD_LENGTH_DISTRIBUTION, "skew_word_length": MetricGroup.WORD_LENGTH_DISTRIBUTION, "kurtosis_word_length": MetricGroup.WORD_LENGTH_DISTRIBUTION, - "num_words": MetricGroup.TEXT_LENGTH, "hapax_legomena_ratio": MetricGroup.VOCABULARY_RICHNESS, "dis_legomena_ratio": MetricGroup.VOCABULARY_RICHNESS, "tri_legomena_ratio": MetricGroup.VOCABULARY_RICHNESS, @@ -256,13 +258,6 @@ def fake_moment(units, order: int) -> float: # ----------------------------------------------------------------------------- -def test_num_words_counts_tokens(monkeypatch): - monkeypatch.setattr( - metrics, "word_tokenize", lambda t: ["a", "b", "c", "d"] - ) - assert metrics.calculate_num_words("ignored") == 4.0 - - def test_hapax_dis_tri_legomena_ratios_exact_on_handmade_tokens(monkeypatch): tokens = ["a", "b", "b", "c", "c", "c"] monkeypatch.setattr(metrics, "word_tokenize", lambda t: tokens) @@ -457,6 +452,5 @@ def test_all_metrics_run_on_simple_sentence_smoke(): def test_selected_metrics_on_tiny_text_regression(): text = "a bb ccc" - assert metrics.calculate_num_words(text) == 3.0 assert metrics.calculate_avg_word_length(text) == pytest.approx(2.0) assert metrics.calculate_hapax_legomena_ratio(text) == pytest.approx(1.0) From c44664ae5dda52d553b4e7bbcf2bd0d2e449d471 Mon Sep 17 00:00:00 2001 From: Fin Griffin Date: Wed, 10 Jun 2026 10:32:28 +0100 Subject: [PATCH 63/68] feat(docs): add UQ to eval suite --- docs/02_evals.md | 48 ++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 40 insertions(+), 8 deletions(-) diff --git a/docs/02_evals.md b/docs/02_evals.md index 4b55fce..871d3ca 100644 --- a/docs/02_evals.md +++ b/docs/02_evals.md @@ -22,21 +22,21 @@ To interpret $W(X, Y)$ we need to know what distance is *expected even between t The observed distance is located within $\mathcal{W}_0$ via its empirical CDF: -$$p = \hat{F}_{\mathcal{W}_0}(W(X, Y)), \qquad \tau = 1 - p$$ +$$p = \hat{F}_{\mathcal{W}_0}(W(X, Y)), \qquad t = 1 - p$$ -$\tau$ is the **tail value**: the fraction of self-distances that *exceed* the observed distance. A high $\tau$ means the model's completions are no further from the reference than typical same-author samples, i.e. they are stylistically consistent with the reference author. +$t$ is the **tail value**: the fraction of self-distances that *exceed* the observed distance. A high $t$ means the model's completions are no further from the reference than typical same-author samples, i.e. they are stylistically consistent with the reference author. ### Step 4: Group and Overall Score -Metrics are organised into groups (see [Stylometric Metrics](01_stylometry.md)). Each group captures a distinct linguistic object — word length, vocabulary richness, and so on — and the metrics within it represent different ways of characterising that same object. Because they study the same underlying property, within-group metrics are highly correlated; averaging within groups before aggregating across them prevents any single linguistic dimension from dominating the score simply by having more metrics defined for it. +Metrics are organised into groups (see [Stylometric Metrics](01_stylometry.md)). Each group captures a distinct linguistic object (word length, vocabulary richness, .etc) and the metrics within it represent different ways of characterising that same object. Because they study the same underlying property, within-group metrics are highly correlated; averaging within groups before aggregating across them prevents any single linguistic dimension from dominating the score simply by having more metrics defined for it. Within each group the tail values are averaged: -$$\bar{\tau}_g = \frac{1}{|g|} \sum_{f \in g} \tau_f$$ +$$\bar{t}_g = \frac{1}{|g|} \sum_{f \in g} t_f$$ -The overall **alignment score** is then the mean over groups, weighting each group equally: +The overall **alignment score** $\mathcal{S}$ is then the mean over groups, weighting each group equally: -$$\text{score} = \frac{1}{G} \sum_{g=1}^{G} \bar{\tau}_g \in [0, 1]$$ +$$\mathcal{S} = \frac{1}{G} \sum_{g=1}^{G} \bar{t}_g \in [0, 1]$$ A score of **1** would mean the completions are stylistically indistinguishable from the reference even relative to same-author variation; in practice this is unrealistic but the directionality is still informative. @@ -44,7 +44,7 @@ A score of **1** would mean the completions are stylistically indistinguishable ## This Is Not a Hypothesis Test -The tail value $\tau$ resembles a p-value but is not one and should not be interpreted as such. +The tail value $t$ resembles a p-value but is not one and should not be interpreted as such. A classical hypothesis test asks whether there is sufficient evidence to reject a null hypothesis. That framing entails a binary decision and is sensitive to sample size: with enough data, even negligible stylistic differences will cross any fixed significance threshold. @@ -52,6 +52,38 @@ VOICE is not concerned with whether two distributions are statistically indistin --- +## Uncertainty Quantification + +The uncertainty in $\mathcal{S}$ arises from the finite number of completions $n$. It is estimated using jackknife resampling over the completion set, operated directly at the level of tail values so that no analytical propagation through the calibration CDF is required. + +### Jackknife Replicates + +For each $i = 1, \dots, n$, remove $c_i$ and its paired reference $d_i$ and run the full pipeline (recomputing the Wasserstein distance and locating it within $\mathcal{W}_0$) for every metric $f$. This yields a matrix of leave-one-out tail values $\{t_{f,-i}\}$, or equivalently $n$ replicate vectors $\mathbf{t}_{-i} \in \mathbb{R}^M$ where $M$ is the total number of metrics across all groups. + +### Covariance Matrix + +The jackknife covariance matrix $\hat{\Sigma} \in \mathbb{R}^{M \times M}$ is estimated from these replicates: + +$$\hat{\Sigma}_{f,f'} = \frac{n-1}{n} \sum_{i=1}^n \left(t_{f,-i} - \bar{t}_{f,-\cdot}\right)\left(t_{f',-i} - \bar{t}_{f',-\cdot}\right)$$ + +where $\bar{t}_{f,-\cdot} = \frac{1}{n}\sum_i t_{f,-i}$. This matrix captures the full correlation structure across metrics, both within and between groups, without requiring any independence assumptions. + +### Propagation to Per-Metric, Group and Overall Uncertainty + +The variance of an individual tail value is the corresponding diagonal entry: + +$$\hat{\sigma}_{t_f}^2 = \hat{\Sigma}_{ff}$$ + +For a group score $\bar{t}_g$, the variance is obtained from the submatrix $\hat{\Sigma}_g$ of $\hat{\Sigma}$ corresponding to metrics within group $g$, with uniform weights $\mathbf{w}_g = \frac{1}{|g|}\mathbf{1}$: + +$$\hat{\sigma}_{\bar{t}_g}^2 = \mathbf{w}_g^\top \hat{\Sigma}_g \mathbf{w}_g$$ + +The overall score $\mathcal{S} = \mathbf{w}^\top \mathbf{t}$ is a linear combination of all per-metric tail values, where the weight for metric $f$ in group $g$ is $w_f = \frac{1}{G \cdot |g|}$. Its variance is: + +$$\hat{\sigma}_{\mathcal{S}}^2 = \mathbf{w}^\top \hat{\Sigma} \mathbf{w}$$ + +--- + ## Example Suppose a model achieves an alignment score of **0.2**. A natural reading is: @@ -77,4 +109,4 @@ results.group_tails # dict[MetricGroup, float] results.score # float ``` -Per-metric tails are useful for identifying which stylometric dimensions are misaligned; per-group tails aggregate correlated metrics and correspond directly to the terms summed in the overall score. +Per-metric tails are useful for identifying which stylometric dimensions are misaligned; per-group tails aggregate correlated metrics and correspond directly to the terms summed in the overall score. \ No newline at end of file From 4be56f4553c7b5309bb8f6aa64e2a0f4a72a4cee Mon Sep 17 00:00:00 2001 From: Fin Griffin Date: Wed, 10 Jun 2026 12:03:27 +0100 Subject: [PATCH 64/68] feat(evals): add assymetric confidence intervals to tail scores --- .pre-commit-config.yaml | 13 - cspell/project-words.txt | 1 + docs/02_evals.md | 41 +-- pyproject.toml | 2 - src/voice/_defaults.py | 20 ++ src/voice/comparison/_utils.py | 32 +++ src/voice/comparison/comparison.py | 150 ++++++++++- tests/voice/comparison/test_comparison.py | 300 +++++++++++++++++++++- 8 files changed, 516 insertions(+), 43 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 0eab24b..74210e4 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -74,16 +74,3 @@ repos: - id: pydoclint args: ["--config=pyproject.toml"] exclude: ^tests/ - - # Cognitive complexity limit via flake8-cognitive-complexity (keep for src; exclude tests) - - repo: https://github.com/pycqa/flake8 - rev: 7.3.0 - hooks: - - id: flake8 - additional_dependencies: - - flake8-cognitive-complexity - args: - - --max-line-length=79 - - --extend-ignore=E203 - - --max-cognitive-complexity=10 - exclude: ^tests/ diff --git a/cspell/project-words.txt b/cspell/project-words.txt index c377ac6..ecd0a7f 100644 --- a/cspell/project-words.txt +++ b/cspell/project-words.txt @@ -19,3 +19,4 @@ hyperparams redef evals submatrix +vocab diff --git a/docs/02_evals.md b/docs/02_evals.md index 871d3ca..564c1a2 100644 --- a/docs/02_evals.md +++ b/docs/02_evals.md @@ -54,33 +54,29 @@ VOICE is not concerned with whether two distributions are statistically indistin ## Uncertainty Quantification -The uncertainty in $\mathcal{S}$ arises from the finite number of completions $n$. It is estimated using jackknife resampling over the completion set, operated directly at the level of tail values so that no analytical propagation through the calibration CDF is required. +The uncertainty in $\mathcal{S}$ arises from the finite number of completions $n$. It is estimated using jackknife resampling over the completion set, operated directly at the level of tail values so that no analytical propagation through the calibration CDF is required. Operating at the tail value level naturally produces asymmetric confidence intervals that respect the $[0, 1]$ boundary of the score. ### Jackknife Replicates For each $i = 1, \dots, n$, remove $c_i$ and its paired reference $d_i$ and run the full pipeline (recomputing the Wasserstein distance and locating it within $\mathcal{W}_0$) for every metric $f$. This yields a matrix of leave-one-out tail values $\{t_{f,-i}\}$, or equivalently $n$ replicate vectors $\mathbf{t}_{-i} \in \mathbb{R}^M$ where $M$ is the total number of metrics across all groups. -### Covariance Matrix +### Confidence Intervals -The jackknife covariance matrix $\hat{\Sigma} \in \mathbb{R}^{M \times M}$ is estimated from these replicates: +Per-metric, group, and overall confidence intervals are all read directly from the empirical distribution of the corresponding jackknife replicates. -$$\hat{\Sigma}_{f,f'} = \frac{n-1}{n} \sum_{i=1}^n \left(t_{f,-i} - \bar{t}_{f,-\cdot}\right)\left(t_{f',-i} - \bar{t}_{f',-\cdot}\right)$$ +For an individual metric $f$, the replicates $\{t_{f,-i}\}$ give a distribution of leave-one-out tail values from which percentile intervals are taken directly. -where $\bar{t}_{f,-\cdot} = \frac{1}{n}\sum_i t_{f,-i}$. This matrix captures the full correlation structure across metrics, both within and between groups, without requiring any independence assumptions. +For a group $g$, the replicate group scores are computed as: -### Propagation to Per-Metric, Group and Overall Uncertainty +$$\bar{t}_{g,-i} = \frac{1}{|g|} \sum_{f \in g} t_{f,-i}$$ -The variance of an individual tail value is the corresponding diagonal entry: +and percentile intervals are read from $\{\bar{t}_{g,-i}\}$. -$$\hat{\sigma}_{t_f}^2 = \hat{\Sigma}_{ff}$$ +For the overall score, the replicate scores are: -For a group score $\bar{t}_g$, the variance is obtained from the submatrix $\hat{\Sigma}_g$ of $\hat{\Sigma}$ corresponding to metrics within group $g$, with uniform weights $\mathbf{w}_g = \frac{1}{|g|}\mathbf{1}$: +$$\mathcal{S}_{-i} = \frac{1}{G} \sum_{g=1}^G \bar{t}_{g,-i}$$ -$$\hat{\sigma}_{\bar{t}_g}^2 = \mathbf{w}_g^\top \hat{\Sigma}_g \mathbf{w}_g$$ - -The overall score $\mathcal{S} = \mathbf{w}^\top \mathbf{t}$ is a linear combination of all per-metric tail values, where the weight for metric $f$ in group $g$ is $w_f = \frac{1}{G \cdot |g|}$. Its variance is: - -$$\hat{\sigma}_{\mathcal{S}}^2 = \mathbf{w}^\top \hat{\Sigma} \mathbf{w}$$ +and percentile intervals are read from $\{\mathcal{S}_{-i}\}$. --- @@ -97,16 +93,23 @@ Suppose a model achieves an alignment score of **0.2**. A natural reading is: The API exposes intermediate results for deeper inspection: ```python -results = make_comparison(completions, true_ds) +results = make_comparison(completions, true_ds) # uncertainty=True by default # Per-metric tail values -results.metric_tails # dict[str, float] +results.metric_tails # dict[str, float] # Per-group average tail values -results.group_tails # dict[MetricGroup, float] +results.group_tails # dict[MetricGroup, float] # Overall score -results.score # float +results.score # float + +# Jackknife percentile confidence intervals (default 90%) +results.metric_tail_cis() # dict[str, tuple[float, float]] | None +results.group_tail_cis() # dict[MetricGroup, tuple[float, float]] | None +results.score_ci() # tuple[float, float] | None ``` -Per-metric tails are useful for identifying which stylometric dimensions are misaligned; per-group tails aggregate correlated metrics and correspond directly to the terms summed in the overall score. \ No newline at end of file +Per-metric tails are useful for identifying which stylometric dimensions are misaligned; per-group tails aggregate correlated metrics and correspond directly to the terms summed in the overall score. + +The confidence interval methods accept a `confidence` keyword (default 0.90, see `UNCERTAINTY_DEFAULTS`). Passing `uncertainty=False` to `make_comparison` skips the jackknife pass, in which case the interval methods return `None`. diff --git a/pyproject.toml b/pyproject.toml index 2ec89c9..95ecd18 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -42,8 +42,6 @@ where = ["src"] [dependency-groups] dev = [ "detect-secrets>=1.5.0", - "flake8>=7.3.0", - "flake8-cognitive-complexity>=0.1.0", "isort>=7.0.0", "mypy>=1.19.1", "notebook>=7.5.3", diff --git a/src/voice/_defaults.py b/src/voice/_defaults.py index da6b078..d7e9d38 100644 --- a/src/voice/_defaults.py +++ b/src/voice/_defaults.py @@ -106,6 +106,26 @@ class CalibrationDefaults: CALIBRATION_DEFAULTS: CalibrationDefaults = CalibrationDefaults() +@dataclass(frozen=True) +class UncertaintyDefaults: + """ + Default parameters for uncertainty quantification. + + These defaults control the confidence intervals reported alongside + comparison results. + + .. attribute :: confidence + + Confidence level for percentile intervals read from the + jackknife replicate distributions. + """ + + confidence: float = 0.90 # Safe default for validation/test size = 150 + + +UNCERTAINTY_DEFAULTS: UncertaintyDefaults = UncertaintyDefaults() + + @dataclass(frozen=True) class PlottingDefaults: """ diff --git a/src/voice/comparison/_utils.py b/src/voice/comparison/_utils.py index a684a69..e1756ea 100644 --- a/src/voice/comparison/_utils.py +++ b/src/voice/comparison/_utils.py @@ -35,6 +35,38 @@ def calibrated_percentile(value: float, dist: np.ndarray) -> float: return float(np.mean(dist <= value)) +# ----------------------------------------------------------------------------- +# Percentile interval +# ----------------------------------------------------------------------------- + + +def percentile_interval( + values: np.ndarray, confidence: float +) -> tuple[float, float]: + """ + Compute a central percentile interval from an empirical distribution. + + For a confidence level c, this returns the (alpha/2, 1 - alpha/2) + empirical percentiles of `values` with alpha = 1 - c. The interval is + asymmetric in general and bounded by the range of `values`. + + :param values: Array of samples from an empirical distribution + :param confidence: Confidence level, strictly between 0 and 1 + :return: (lower, upper) percentile interval + :raises ValueError: If `values` is empty or `confidence` is not in [0, 1] + """ + values = np.asarray(values, dtype=float).ravel() + if values.size == 0: + raise ValueError("values must be non-empty.") + if not 0.0 < confidence < 1.0: + raise ValueError("confidence must be strictly between 0 and 1.") + + alpha = 1.0 - confidence + lower = float(np.percentile(values, 100.0 * alpha / 2.0)) + upper = float(np.percentile(values, 100.0 * (1.0 - alpha / 2.0))) + return lower, upper + + # ----------------------------------------------------------------------------- # Bootstrap null distribution # ----------------------------------------------------------------------------- diff --git a/src/voice/comparison/comparison.py b/src/voice/comparison/comparison.py index 7173b68..de11e45 100644 --- a/src/voice/comparison/comparison.py +++ b/src/voice/comparison/comparison.py @@ -20,11 +20,13 @@ from voice._defaults import ( CALIBRATION_DEFAULTS, + UNCERTAINTY_DEFAULTS, MetricGroup, ) from voice.comparison._utils import ( bootstrap_null_distribution, calibrated_percentile, + percentile_interval, ) from voice.datasets import VoiceDataset from voice.datasets.dataset import Example @@ -185,6 +187,11 @@ class ComparisonResults: A score of 1 indicates perfect stylistic indistinguishability; 0 indicates maximum divergence. + When uncertainty quantification is enabled, the matrix of jackknife + leave-one-out tail-value replicates is attached and per-metric, + per-group and overall-score percentile confidence intervals are read + directly from its empirical distributions. + .. attribute :: metrics Tuple of stylometric metric names to run comparison for. @@ -192,6 +199,7 @@ class ComparisonResults: metrics: tuple[str, ...] _entries: dict[str, ComparisonEntry] = field(default_factory=dict) + _replicates: np.ndarray | None = field(default=None, repr=False) def __post_init__(self) -> None: """ @@ -222,9 +230,10 @@ def __repr__(self) -> str: ) + "}" ) - return ( - f"ComparisonResults(groups={group_part}, score={self.score:.4f})" - ) + score_part = f"{self.score:.4f}" + if (ci := self.score_ci()) is not None: + score_part += f" [{ci[0]:.4f}, {ci[1]:.4f}]" + return f"ComparisonResults(groups={group_part}, score={score_part})" @property def num_metrics(self) -> int: @@ -267,6 +276,95 @@ def score(self) -> float: return 0.0 return sum(e.avg_tail for e in entries.values()) / len(entries) + @property + def _group_indices(self) -> dict[MetricGroup, list[int]]: + """ + Indices into `metrics` (and replicate matrix columns) per group. + + :return: Mapping of MetricGroup to column indices + """ + registry = get_metrics() + indices: dict[MetricGroup, list[int]] = {} + for j, metric in enumerate(self.metrics): + indices.setdefault(registry[metric].group, []).append(j) + return indices + + @property + def has_uncertainty(self) -> bool: + """Whether jackknife uncertainty estimates are attached.""" + return self._replicates is not None + + def metric_tail_cis( + self, + confidence: float = UNCERTAINTY_DEFAULTS.confidence, + ) -> dict[str, tuple[float, float]] | None: + """ + Jackknife confidence interval for each per-metric tail value. + + Percentile intervals are read directly from the empirical + distribution of leave-one-out tail values for each metric. + + :param confidence: Confidence level, strictly between 0 and 1 + :return: Mapping of metric name to (lower, upper) interval or None if + uncertainty quantification was not run + """ + if self._replicates is None: + return None + return { + m: percentile_interval(self._replicates[:, j], confidence) + for j, m in enumerate(self.metrics) + } + + def group_tail_cis( + self, + confidence: float = UNCERTAINTY_DEFAULTS.confidence, + ) -> dict[MetricGroup, tuple[float, float]] | None: + """ + Jackknife confidence interval for each group's average tail value. + + Each leave-one-out replicate's tail values are averaged within the + group, and the percentile interval is read from the resulting + empirical distribution of replicate group scores. + + :param confidence: Confidence level, strictly between 0 and 1 + :return: Mapping of MetricGroup to (lower, upper) interval or None if + uncertainty quantification was not run + """ + if self._replicates is None: + return None + return { + group: percentile_interval( + self._replicates[:, idx].mean(axis=1), confidence + ) + for group, idx in self._group_indices.items() + } + + def score_ci( + self, + confidence: float = UNCERTAINTY_DEFAULTS.confidence, + ) -> tuple[float, float] | None: + """ + Jackknife confidence interval for the overall alignment score. + + Each leave-one-out replicate yields a replicate score (the mean of + its per-group average tail values, groups weighted equally); the + percentile interval is read from the empirical distribution of these + replicate scores. + + :param confidence: Confidence level, strictly between 0 and 1 + :return: (lower, upper) interval for the score, or None if + uncertainty quantification was not run + """ + if self._replicates is None: + return None + group_scores = np.stack( + [ + self._replicates[:, idx].mean(axis=1) + for idx in self._group_indices.values() + ] + ) + return percentile_interval(group_scores.mean(axis=0), confidence) + @property def metric_tails(self) -> dict[str, float]: """ @@ -356,6 +454,7 @@ def make_comparison( true_ds: VoiceDataset, *, metrics: Sequence[str] | None = None, + uncertainty: bool = True, ) -> ComparisonResults: """ Compare stylometric distributions of `completions` to the true corpus. @@ -371,14 +470,25 @@ def make_comparison( values, and an overall alignment score equal to the mean of group-level average tail values (groups weighted equally). + When `uncertainty` is True (the default), jackknife resampling over the + completion set is used: each completion and its paired reference are + left out in turn, the Wasserstein distance is recomputed, and the + leave-one-out distance is located within the same + self-Wasserstein distribution. Per-metric, per-group and overall score + percentile confidence intervals are then available on the returned + results, read directly from the replicate distributions. + :param completions: Sequence of examples to analyse :param true_ds: VoiceDataset providing the true corpus :param metrics: Optional subset of metric names; defaults to all metrics + :param uncertainty: Whether to estimate uncertainty :return: ComparisonResults populated for the selected metrics :raises ValueError: - If completions is empty, - If sample sizes are invalid - If metrics are not registered + - If `uncertainty` is True and there are fewer than two completions + or the observed split does not match the completions in length """ if not completions: raise ValueError("completions must be non-empty.") @@ -392,20 +502,52 @@ def make_comparison( observed_split = completions[0].split ds_observed_split = true_ds[observed_split] + n = len(completions) + if uncertainty: + if n < 2: + raise ValueError( + "uncertainty quantification requires at least 2 completions." + ) + if len(ds_observed_split) != n: + raise ValueError( + "uncertainty quantification requires completions to be " + "paired one-to-one with the observed split " + f"({n} completions vs {len(ds_observed_split)} references)." + ) + + distributions: dict[str, tuple[np.ndarray, np.ndarray, np.ndarray]] = {} + for metric in metric_list: x = stylometric_distribution(completions, metric) y = stylometric_distribution(ds_observed_split, metric) d = float(wasserstein_distance(x, y)) + # Cached per metric: the jackknife pass below reuses this + # distribution rather than re-running the bootstrap per replicate. self_dist = self_wasserstein_distribution( true_ds, metric=metric, - sample_size=len(completions), + sample_size=n, ) p = calibrated_percentile(d, self_dist) results.add(metric=metric, wasserstein=d, percentile=p) + if uncertainty: + distributions[metric] = (x, y, self_dist) + + if uncertainty: + replicates = np.empty((n, len(metric_list)), dtype=float) + for i in range(n): + mask = np.ones(n, dtype=bool) + mask[i] = False + for j, metric in enumerate(metric_list): + x, y, self_dist = distributions[metric] + d_i = float(wasserstein_distance(x[mask], y[mask])) + replicates[i, j] = 1.0 - calibrated_percentile(d_i, self_dist) + + results._replicates = replicates + return results diff --git a/tests/voice/comparison/test_comparison.py b/tests/voice/comparison/test_comparison.py index b328b72..84f1973 100644 --- a/tests/voice/comparison/test_comparison.py +++ b/tests/voice/comparison/test_comparison.py @@ -20,7 +20,10 @@ from datasets import Dataset from voice._defaults import MetricGroup -from voice.comparison._utils import calibrated_percentile +from voice.comparison._utils import ( + calibrated_percentile, + percentile_interval, +) from voice.comparison.comparison import ( ComparisonEntry, ComparisonResults, @@ -154,6 +157,42 @@ def test_calibrated_percentile_flattens_non_1d_inputs(): assert calibrated_percentile(2.0, dist) == 0.5 +# ----------------------------------------------------------------------------- +# percentile_interval +# ----------------------------------------------------------------------------- + + +def test_percentile_interval_rejects_empty_values(): + with pytest.raises(ValueError, match=r"values must be non-empty"): + percentile_interval(np.array([]), 0.9) + + +@pytest.mark.parametrize("confidence", [0.0, 1.0, -0.1, 1.5]) +def test_percentile_interval_rejects_invalid_confidence(confidence): + with pytest.raises(ValueError, match=r"strictly between 0 and 1"): + percentile_interval(np.array([0.1, 0.2]), confidence) + + +def test_percentile_interval_hand_computed_example(): + # 25th/75th percentiles of 5 evenly spaced points (linear interpolation) + values = np.array([0.1, 0.2, 0.3, 0.4, 0.5]) + lo, hi = percentile_interval(values, 0.5) + assert lo == pytest.approx(0.2) + assert hi == pytest.approx(0.4) + + +def test_percentile_interval_collapses_for_constant_values(): + lo, hi = percentile_interval(np.full(10, 0.7), 0.9) + assert lo == pytest.approx(0.7) + assert hi == pytest.approx(0.7) + + +def test_percentile_interval_is_bounded_by_value_range(): + values = np.array([0.0, 0.0, 0.0, 0.9]) + lo, hi = percentile_interval(values, 0.99) + assert 0.0 <= lo <= hi <= 0.9 + + # ----------------------------------------------------------------------------- # self_wasserstein_distribution # ----------------------------------------------------------------------------- @@ -428,6 +467,92 @@ def test_comparison_results_group_tails(patch_metrics): assert tails[MetricGroup.VOCABULARY_RICHNESS] == pytest.approx(0.7) +def test_comparison_results_uncertainty_defaults_to_none(patch_metrics): + r = ComparisonResults(metrics=("len", "vowels")) + assert r.has_uncertainty is False + assert r.metric_tail_cis() is None + assert r.group_tail_cis() is None + assert r.score_ci() is None + + +def test_comparison_results_confidence_intervals(patch_metrics): + r = ComparisonResults(metrics=("len", "vowels")) + r.add(metric="len", wasserstein=1.0, percentile=0.8) + r.add(metric="vowels", wasserstein=0.5, percentile=0.4) + r._replicates = np.array( + [ + [0.1, 0.5], + [0.2, 0.6], + [0.3, 0.7], + [0.4, 0.8], + [0.5, 0.9], + ] + ) + + assert r.has_uncertainty is True + + cis = r.metric_tail_cis(confidence=0.5) + assert cis["len"] == pytest.approx((0.2, 0.4)) + assert cis["vowels"] == pytest.approx((0.6, 0.8)) + + # One metric per group, so group CI equals metric CI + g = r.group_tail_cis(confidence=0.5) + assert g[MetricGroup.WORD_LENGTH_DISTRIBUTION] == pytest.approx((0.2, 0.4)) + assert g[MetricGroup.VOCABULARY_RICHNESS] == pytest.approx((0.6, 0.8)) + + # Replicate scores are row means over groups: [0.3, 0.4, 0.5, 0.6, 0.7] + assert r.score_ci(confidence=0.5) == pytest.approx((0.4, 0.6)) + + +def test_comparison_results_cis_average_replicates_within_groups( + patch_metrics, monkeypatch +): + registry = { + "len": _Metric( + fn=lambda s: float(len(s)), + group=MetricGroup.WORD_LENGTH_DISTRIBUTION, + ), + "len2": _Metric( + fn=lambda s: float(len(s)), + group=MetricGroup.WORD_LENGTH_DISTRIBUTION, + ), + "vowels": _Metric( + fn=lambda s: float(sum(c in "aeiou" for c in s.lower())), + group=MetricGroup.VOCABULARY_RICHNESS, + ), + } + import voice.comparison.comparison as comparison + + monkeypatch.setattr(comparison, "get_metrics", lambda: dict(registry)) + + r = ComparisonResults(metrics=("len", "len2", "vowels")) + r._replicates = np.array( + [ + [0.0, 0.2, 0.9], + [0.2, 0.4, 0.9], + [0.4, 0.6, 0.9], + ] + ) + + # Group replicates: word_length = [0.1, 0.3, 0.5], vocab = [0.9] * 3 + g = r.group_tail_cis(confidence=0.5) + assert g[MetricGroup.WORD_LENGTH_DISTRIBUTION] == pytest.approx((0.2, 0.4)) + assert g[MetricGroup.VOCABULARY_RICHNESS] == pytest.approx((0.9, 0.9)) + + # Score replicates: mean over groups = [0.5, 0.6, 0.7] + assert r.score_ci(confidence=0.5) == pytest.approx((0.55, 0.65)) + + +def test_comparison_results_repr_includes_ci_when_available(patch_metrics): + r = ComparisonResults(metrics=("len",)) + r.add(metric="len", wasserstein=1.0, percentile=0.8) + assert "[" not in repr(r) + + # 5th/95th percentiles of [0.1, 0.2, 0.3] (default confidence 0.90) + r._replicates = np.array([[0.1], [0.2], [0.3]]) + assert "[0.1100, 0.2900]" in repr(r) + + # ----------------------------------------------------------------------------- # make_comparison # ----------------------------------------------------------------------------- @@ -464,7 +589,7 @@ def fake_self_dist(*_args, **_kwargs): comparison.self_wasserstein_distribution = fake_self_dist # type: ignore[assignment] - out = make_comparison(completions, true_ds) + out = make_comparison(completions, true_ds, uncertainty=False) assert out.metrics == ("len", "vowels") for m in out.metrics: @@ -492,7 +617,9 @@ def test_make_comparison_respects_subset_metrics(patch_metrics, monkeypatch): lambda *_args, **_kwargs: np.array([0.0, 1.0], dtype=float), ) - out = make_comparison(completions, true_ds, metrics=["len"]) + out = make_comparison( + completions, true_ds, metrics=["len"], uncertainty=False + ) assert out.metrics == ("len",) assert "len" in out.as_dict() with pytest.raises(KeyError): @@ -529,7 +656,9 @@ def recording_getitem(self, key): monkeypatch.setattr(VoiceDataset, "__getitem__", recording_getitem) - _ = make_comparison(completions, true_ds, metrics=["len"]) + _ = make_comparison( + completions, true_ds, metrics=["len"], uncertainty=False + ) assert Split.TEST in calls @@ -563,6 +692,167 @@ def spy_self_dist(*_args, sample_size: int = 0, **_kwargs): comparison, "self_wasserstein_distribution", spy_self_dist ) - make_comparison(completions, true_ds, metrics=["len"]) + make_comparison(completions, true_ds, metrics=["len"], uncertainty=False) assert all(s == len(completions) for s in captured) + + +# ----------------------------------------------------------------------------- +# make_comparison: uncertainty quantification +# ----------------------------------------------------------------------------- + + +def _paired_setup(n: int = 5) -> tuple[list[Example], VoiceDataset]: + """Completions paired one-to-one with the TEST split.""" + p = _pinned(splits=(Split.TRAIN, Split.TEST)) + true_ds = VoiceDataset( + datasets={ + Split.TRAIN: _canonical_hf_ds([f"a{i}" for i in range(40)]), + Split.TEST: _canonical_hf_ds( + ["ref text " * (i + 1) for i in range(n)] + ), + }, + spec=p, + ) + completions = [ + _ex(answer="hello there " * (i + 2), split=Split.TEST) + for i in range(n) + ] + return completions, true_ds + + +def test_make_comparison_uncertainty_populates_cis_and_caches_self_dist( + patch_metrics, monkeypatch +): + completions, true_ds = _paired_setup(n=5) + + import voice.comparison.comparison as comparison + + calls: list[str] = [] + + def spy_self_dist(*_args, metric: str = "", **_kwargs): + calls.append(metric) + return np.linspace(0.0, 50.0, 100) + + monkeypatch.setattr( + comparison, "self_wasserstein_distribution", spy_self_dist + ) + + out = make_comparison(completions, true_ds) + + assert out.has_uncertainty is True + + cis = out.metric_tail_cis() + assert set(cis) == {"len", "vowels"} + for lo, hi in cis.values(): + assert 0.0 <= lo <= hi <= 1.0 + + assert set(out.group_tail_cis()) == { + MetricGroup.WORD_LENGTH_DISTRIBUTION, + MetricGroup.VOCABULARY_RICHNESS, + } + + lo, hi = out.score_ci() + assert 0.0 <= lo <= hi <= 1.0 + + # A wider confidence level produces a containing interval + lo99, hi99 = out.score_ci(confidence=0.99) + assert lo99 <= lo + assert hi <= hi99 + + # Self-Wasserstein bootstrap is cached: computed exactly once per + # metric, never per jackknife replicate. + assert sorted(calls) == ["len", "vowels"] + + +def test_make_comparison_uncertainty_false_skips_jackknife( + patch_metrics, monkeypatch +): + completions, true_ds = _paired_setup(n=5) + + import voice.comparison.comparison as comparison + + monkeypatch.setattr( + comparison, + "self_wasserstein_distribution", + lambda *_args, **_kwargs: np.array([0.0, 1.0], dtype=float), + ) + + out = make_comparison(completions, true_ds, uncertainty=False) + + assert out.has_uncertainty is False + assert out.metric_tail_cis() is None + assert out.group_tail_cis() is None + assert out.score_ci() is None + + +def test_make_comparison_uncertainty_requires_two_completions( + patch_metrics, monkeypatch +): + completions, true_ds = _paired_setup(n=1) + + with pytest.raises(ValueError, match=r"at least 2 completions"): + make_comparison(completions, true_ds) + + +def test_make_comparison_uncertainty_requires_paired_split( + patch_metrics, monkeypatch +): + completions, true_ds = _paired_setup(n=5) + + with pytest.raises(ValueError, match=r"paired one-to-one"): + make_comparison(completions[:3], true_ds) + + +def test_make_comparison_score_ci_matches_metric_ci_for_single_metric( + patch_metrics, monkeypatch +): + completions, true_ds = _paired_setup(n=5) + + import voice.comparison.comparison as comparison + + monkeypatch.setattr( + comparison, + "self_wasserstein_distribution", + lambda *_args, **_kwargs: np.linspace(0.0, 50.0, 100), + ) + + out = make_comparison(completions, true_ds, metrics=["len"]) + + assert out.score_ci() == pytest.approx(out.metric_tail_cis()["len"]) + assert out.score_ci() == pytest.approx( + out.group_tail_cis()[MetricGroup.WORD_LENGTH_DISTRIBUTION] + ) + + +def test_make_comparison_ci_collapses_for_identical_paired_data( + patch_metrics, monkeypatch +): + n = 5 + answers = [f"some answer {i} " * (i + 1) for i in range(n)] + p = _pinned(splits=(Split.TRAIN, Split.TEST)) + true_ds = VoiceDataset( + datasets={ + Split.TRAIN: _canonical_hf_ds([f"a{i}" for i in range(40)]), + Split.TEST: _canonical_hf_ds(answers), + }, + spec=p, + ) + completions = [_ex(answer=a, split=Split.TEST) for a in answers] + + import voice.comparison.comparison as comparison + + monkeypatch.setattr( + comparison, + "self_wasserstein_distribution", + lambda *_args, **_kwargs: np.linspace(0.0, 50.0, 100), + ) + + # x == y for every metric, so every leave-one-out distance is 0 and + # all replicates are identical: each interval collapses to a point. + out = make_comparison(completions, true_ds) + + lo, hi = out.score_ci() + assert lo == pytest.approx(hi) + for m_lo, m_hi in out.metric_tail_cis().values(): + assert m_lo == pytest.approx(m_hi) From 724c10b6f8cbfae106dc1884e50f7ff66a061d63 Mon Sep 17 00:00:00 2001 From: Fin Griffin Date: Wed, 10 Jun 2026 12:10:41 +0100 Subject: [PATCH 65/68] feat(finetuning): write confidence intervals to disk via fine-tuning orchestrator --- src/voice/finetune/_orchestrator.py | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/voice/finetune/_orchestrator.py b/src/voice/finetune/_orchestrator.py index f06727c..40a74e9 100644 --- a/src/voice/finetune/_orchestrator.py +++ b/src/voice/finetune/_orchestrator.py @@ -177,8 +177,11 @@ def _score_split( Alignment results are written to ``alignment/epoch_{n}/{split}.json`` with keys ``score``, - ``metric_tails``, and ``group_tails``. Only the overall score is - returned; the full tails are available on disk only. + ``score_ci``, ``metric_tails``, ``metric_tail_cis``, ``group_tails``, + and ``group_tail_cis``. Confidence intervals are jackknife percentile + intervals at the default confidence level and are serialised as + ``[lower, upper]`` pairs. Only the overall score is returned; the + full tails and intervals are available on disk only. :param run_dir: Run directory. :param split: Split name (``"validation"`` or ``"test"``). @@ -191,16 +194,25 @@ def _score_split( completions = _load_completions(run_dir, split, epoch) results = make_comparison(completions, reference_ds) + group_cis = results.group_tail_cis() + out_path = run_dir.alignment_path(split, epoch) out_path.parent.mkdir(parents=True, exist_ok=True) out_path.write_text( json.dumps( { "score": results.score, + "score_ci": results.score_ci(), "metric_tails": results.metric_tails, + "metric_tail_cis": results.metric_tail_cis(), "group_tails": { g.value: v for g, v in results.group_tails.items() }, + "group_tail_cis": ( + None + if group_cis is None + else {g.value: ci for g, ci in group_cis.items()} + ), }, indent=2, ) From 1c10d2fc01de3edf088f529d1da4f54b9344de58 Mon Sep 17 00:00:00 2001 From: Fin Griffin Date: Wed, 10 Jun 2026 14:56:16 +0100 Subject: [PATCH 66/68] feat(docs): add documentation for fine-tuning CLI --- cspell/library-words.txt | 1 + cspell/project-words.txt | 1 + docs/03_cli.md | 166 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 168 insertions(+) create mode 100644 docs/03_cli.md diff --git a/cspell/library-words.txt b/cspell/library-words.txt index db6cebd..f9f113e 100644 --- a/cspell/library-words.txt +++ b/cspell/library-words.txt @@ -23,3 +23,4 @@ pyyaml libcuda PYTHONPATH venv +cuda diff --git a/cspell/project-words.txt b/cspell/project-words.txt index ecd0a7f..c6c65d5 100644 --- a/cspell/project-words.txt +++ b/cspell/project-words.txt @@ -20,3 +20,4 @@ redef evals submatrix vocab +finetune diff --git a/docs/03_cli.md b/docs/03_cli.md new file mode 100644 index 0000000..a5662a9 --- /dev/null +++ b/docs/03_cli.md @@ -0,0 +1,166 @@ +# Fine-Tuning CLI + +--- + +The `voice finetune` command group runs LoRA fine-tuning jobs via [axolotl](https://github.com/axolotl-ai-cloud/axolotl). Two subcommands are available: `single` for a single training run and `sweep` for a hyperparameter grid search. + +--- + +## Single Run + +```bash +voice finetune single [OPTIONS] +``` + +| Option | Default | Description | +|---|---|---| +| `--runs-dir` | `runs` | Root directory for run outputs | +| `--gpus` | `0` | Comma-separated CUDA device indices, e.g. `0,1,2` | +| `--dataset-revision` | `main` | HuggingFace dataset branch or revision | + +The config file has a single top-level [`axolotl:`](https://axolotl-ai-cloud.github.io/axolotl/docs/config.html) key containing all training settings. The CLI injects `output_dir` automatically. + +```yaml +axolotl: + base_model: meta-llama/Llama-3.1-8B-Instruct + + datasets: + - path: AccelerateScience/bo-press-conference-qa + type: chat_template + field_messages: messages + roles_to_train: [assistant] + train_on_eos: last + + adapter: lora + lora_r: 16 + lora_alpha: 16 + lora_target_modules: [q_proj, k_proj, v_proj, o_proj] + + num_epochs: 3 + learning_rate: 1.0e-4 + micro_batch_size: 4 + gradient_accumulation_steps: 4 + + plugins: + - voice.finetune.callbacks.EvalCompletionsPlugin +``` + +A full example is at `configs/single/example.yaml`. + +When a run starts, the CLI generates a unique run name (model slug + short UUID), writes a frozen copy of the resolved config to `runs/{run_name}/config.yaml`, then launches axolotl. The `EvalCompletionsPlugin` generates completions against the validation and test splits at the end of every epoch; alignment scores are computed immediately after. + +For multiple GPUs the CLI switches automatically to `accelerate launch --num_processes=N`. + +--- + +## Sweep + +```bash +voice finetune sweep [OPTIONS] +``` + +| Option | Default | Description | +|---|---|---| +| `--runs-dir` | `runs` | Root directory for run outputs | +| `--gpus` | `0` | Comma-separated CUDA device indices | +| `--dataset-revision` | `main` | HuggingFace dataset branch or revision | +| `--resume` / `--no-resume` | off | Skip runs already recorded as completed in `state.json` | + +The sweep config has two top-level keys: `sweep:` defines the grid axes and [`axolotl:`](https://axolotl-ai-cloud.github.io/axolotl/docs/config.html) defines settings shared across every run. + +```yaml +sweep: + learning_rate: [1.0e-4, 5.0e-4, 1.0e-3] + lora_r: [4, 8, 16, 32] + micro_batch_size: [4] + gradient_accumulation_steps: [1, 4] + target_layers: + - name: attention + modules: [q_proj, k_proj, v_proj, o_proj] + - name: mlp + modules: [gate_proj, up_proj, down_proj] + +axolotl: + base_model: meta-llama/Llama-3.1-8B-Instruct + # ... shared settings ... +``` + +All five `sweep:` axes are required. The CLI expands them into a Cartesian product; `lora_alpha` is set equal to `lora_r` for each run and does not need to be listed. Per-run values for `learning_rate`, `lora_r`, `lora_alpha`, `lora_target_modules`, `micro_batch_size`, and `gradient_accumulation_steps` are merged on top of the shared `axolotl:` block before training starts. + +A full example is at `configs/sweep/example.yaml`. + +### Resume + +The sweep writes a `state.json` to `{runs-dir}/state.json` after each run completes or fails: + +```json +{ + "completed": ["0", "1", "3"], + "failed": {"2": "CUDA out of memory"} +} +``` + +Passing `--resume` skips any run whose index already appears in `completed`. Failed runs are retried. + +--- + +## Output Layout + +Each run produces a directory under `{runs-dir}/{run_name}/`: + +``` +runs/{run_name}/ + config.yaml # frozen per-run axolotl config + metadata.json # status, hyperparams, scores + adapter/ # axolotl output_dir; LoRA weights and checkpoints + completions/ + epoch_1/ + validation.jsonl + test.jsonl + epoch_N/... + alignment/ + epoch_1/ + validation.json # alignment scores + confidence intervals + test.json + epoch_N/... +``` + +`metadata.json` tracks the full lifecycle of a run: + +```json +{ + "run_name": "llama-3-1-8b-instruct_a3f2b9c1", + "model": "meta-llama/Llama-3.1-8B-Instruct", + "dataset": "AccelerateScience/bo-press-conference-qa", + "hyperparams": { "learning_rate": 1e-4, "lora_r": 16, "..." : "..." }, + "status": "done", + "started_at": "2025-01-15T10:30:00Z", + "finished_at": "2025-01-15T14:22:00Z", + "eval_loss": { "1": 1.23, "2": 0.98, "3": 0.81 }, + "alignment_val": { "1": 0.42, "2": 0.61, "3": 0.67 }, + "alignment_test": { "1": 0.39, "2": 0.58, "3": 0.64 } +} +``` + +--- + +## Weights & Biases + +Add three keys anywhere inside the `axolotl:` block to enable W&B logging: + +```yaml +axolotl: + use_wandb: true + wandb_project: VOICE + wandb_entity: accelerate-science +``` + +Axolotl handles all logging; no additional code is required. The run name is derived from the model slug and a unique ID and is set automatically. Omitting these keys (or setting `use_wandb: false`) disables W&B entirely. + +The environment must be authenticated before launching a run: + +```bash +wandb login +# or +export WANDB_API_KEY= +``` From c50aacb656b972001d57ad964c41f9f7e54b1e32 Mon Sep 17 00:00:00 2001 From: Fin Griffin Date: Wed, 10 Jun 2026 15:03:45 +0100 Subject: [PATCH 67/68] chore(docs): add example configuration files for fine-tuning CLI --- .gitignore | 9 +-- configs/single/.gitkeep | 0 configs/single/example.yaml | 87 ++++++++++++++++++++++++ configs/sweep/.gitkeep | 0 configs/sweep/example.yaml | 127 ++++++++++++++++++++++++++++++++++++ cspell/project-words.txt | 1 + src/voice/finetune/cli.py | 2 +- 7 files changed, 221 insertions(+), 5 deletions(-) delete mode 100644 configs/single/.gitkeep create mode 100644 configs/single/example.yaml delete mode 100644 configs/sweep/.gitkeep create mode 100644 configs/sweep/example.yaml diff --git a/.gitignore b/.gitignore index e0d9f1d..cf5d2ca 100644 --- a/.gitignore +++ b/.gitignore @@ -70,7 +70,8 @@ sweep/state.json # Fine-tuning runs and local configs runs/ !runs/.gitkeep -configs/single -configs/sweep -!configs/single/.gitkeep -!configs/sweep/.gitkeep +configs/single/** +configs/sweep/** +!configs/single/example.yaml +!configs/single/test.yaml +!configs/sweep/example.yaml diff --git a/configs/single/.gitkeep b/configs/single/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/configs/single/example.yaml b/configs/single/example.yaml new file mode 100644 index 0000000..149372c --- /dev/null +++ b/configs/single/example.yaml @@ -0,0 +1,87 @@ +# ============================================================================= +# Example single-run configuration +# +# Run with: +# voice finetune single configs/single/example.yaml +# +# All axolotl settings live under the `axolotl:` key. The CLI writes a +# frozen copy to runs/{run_name}/config.yaml before launching training, +# injecting output_dir automatically. +# ============================================================================= + +axolotl: + + # Model + base_model: meta-llama/Llama-3.1-8B-Instruct + + # Train split used for fine-tuning; validation and test splits used by + # EvalCompletionsPlugin and post-training alignment scoring. + datasets: + - path: AccelerateScience/bo-press-conference-qa + type: chat_template + field_messages: messages + roles_to_train: + - assistant + train_on_eos: last + eot_tokens: ["<|eot_id|>"] + + special_tokens: + pad_token: "<|eot_id|>" + + hf_use_auth_token: true + + chat_template: tokenizer_default + val_set_size: 0.0 + + # Validation dataset for per-epoch eval_loss and completions generation. + test_datasets: + - path: AccelerateScience/bo-press-conference-qa + split: validation + type: chat_template + field_messages: messages + + # Sequence + sequence_len: 2048 + sample_packing: true + + # Adapter + adapter: lora + lora_r: 16 + lora_alpha: 16 + lora_dropout: 0.0 + lora_target_modules: [q_proj, k_proj, v_proj, o_proj] + + # Training + num_epochs: 3 + learning_rate: 1.0e-4 + micro_batch_size: 4 + gradient_accumulation_steps: 4 + + # Precision & performance + bf16: true + tf32: true + flash_attention: true + gradient_checkpointing: true + lora_mlp_kernel: false + lora_qkv_kernel: false + lora_o_kernel: false + + # Optimiser + optimizer: adamw_torch_fused + lr_scheduler: cosine + warmup_ratio: 0.03 + weight_decay: 0.0 + + # Evaluation and checkpointing + eval_strategy: "epoch" + save_strategy: epoch + save_total_limit: 3 + + # Plugin that generates completions at each epoch end (recommended). + plugins: + - voice.finetune.callbacks.EvalCompletionsPlugin + + # W&B + use_wandb: true + wandb_project: VOICE + wandb_entity: accelerate-science diff --git a/configs/sweep/.gitkeep b/configs/sweep/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/configs/sweep/example.yaml b/configs/sweep/example.yaml new file mode 100644 index 0000000..618829a --- /dev/null +++ b/configs/sweep/example.yaml @@ -0,0 +1,127 @@ +# ============================================================================= +# Example sweep configuration +# +# Two top-level sections: +# sweep: hyperparameter grid axes (read by `voice finetune sweep`) +# axolotl: shared axolotl settings merged into every per-run config +# +# The CLI expands the grid into per-run configs, injecting per-run values +# (learning_rate, lora_r, lora_alpha, lora_target_modules, +# micro_batch_size, gradient_accumulation_steps, output_dir) on top of +# the axolotl section below. +# +# Grid: 3 LRs × 4 ranks × 1 micro_batch_size × 2 accum steps +# × 2 target layer groups = 48 training runs. +# +# Run with: +# voice finetune sweep configs/sweep/example.yaml +# voice finetune sweep configs/sweep/example.yaml --resume +# ============================================================================= + +# --- Sweep grid ------------------------------------------------------------- +sweep: + learning_rate: [1e-3, 5.0e-4, 1e-4] + lora_r: [4, 8, 16, 32] + + micro_batch_size: [2] + gradient_accumulation_steps: [2, 4] + + target_layers: + - name: mlp + modules: [gate_proj, up_proj, down_proj] + - name: attention + modules: [q_proj, k_proj, v_proj, o_proj] + +# lora_alpha is set equal to lora_r per run (not swept separately). + +# --- Shared axolotl settings ------------------------------------------------ +axolotl: + + # Model + base_model: meta-llama/Llama-3.1-8B-Instruct + + # Train split used for fine-tuning; validation split used by the + # EvalCompletionsPlugin for per-epoch completions; test split scored after + # each epoch for alignment evaluation. + datasets: + - path: AccelerateScience/gwb-press-conference-qa + type: chat_template + field_messages: messages + roles_to_train: + - assistant + train_on_eos: last + # Llama 3.1's chat template ends turns with <|eot_id|> (128009), not + # <|end_of_text|> (128001). Without this, axolotl defaults eot_tokens + # to eos_token which never appears, so train_on_eos: last silently + # does nothing. + eot_tokens: ["<|eot_id|>"] + + special_tokens: + pad_token: "<|eot_id|>" + + hf_use_auth_token: true + + # Llama 3.1 Instruct ships with its own Jinja chat template; axolotl + # picks it up automatically. + chat_template: tokenizer_default + val_set_size: 0.0 + + # Axolotl computes eval_loss after each epoch and the EvalCompletionsPlugin + # generates completions for scoring. + test_datasets: + - path: AccelerateScience/gwb-press-conference-qa + split: validation + type: chat_template + field_messages: messages + + # Sequence + # Bush answers are long (~700-900 tokens including system + question). + # 2048 gives comfortable headroom without wasting VRAM. + sequence_len: 2048 + sample_packing: true + + # lora_r, lora_alpha, lora_target_modules injected per run. + adapter: lora + lora_dropout: 0.05 + + # 3 epochs × 48 runs = 144 data points. + num_epochs: 3 + + # Precision & performance + bf16: true + tf32: true + flash_attention: true + gradient_checkpointing: true + + # Disable axolotl's auto-enabled LoRA kernel optimizations. The MLP + # SwiGLU Triton kernel fails to compile on our host (gcc cannot link + # libcuda), which crashes all attention_mlp runs. + lora_mlp_kernel: false + lora_qkv_kernel: false + lora_o_kernel: false + + # Optimiser + optimizer: adamw_torch_fused + lr_scheduler: cosine + warmup_ratio: 0.03 + weight_decay: 0.0 + + # Evaluate on the validation split after each epoch. + eval_strategy: "epoch" + + # Save a checkpoint after each epoch so adapters are available for + # per-epoch alignment scoring (intermediate epochs treated as separate + # model candidates). + save_strategy: epoch + save_total_limit: 3 + + # Generates completions at each epoch end using the live in-memory model + # (no train/inference distribution mismatch). + # Dataset is read from datasets[0].path above. + plugins: + - voice.finetune.callbacks.EvalCompletionsPlugin + + # Run name for W&B is set by the CLI; project and entity configured here. + use_wandb: true + wandb_project: VOICE + wandb_entity: accelerate-science diff --git a/cspell/project-words.txt b/cspell/project-words.txt index c6c65d5..e45257a 100644 --- a/cspell/project-words.txt +++ b/cspell/project-words.txt @@ -21,3 +21,4 @@ evals submatrix vocab finetune +accum diff --git a/src/voice/finetune/cli.py b/src/voice/finetune/cli.py index 8a55379..abafb43 100644 --- a/src/voice/finetune/cli.py +++ b/src/voice/finetune/cli.py @@ -9,7 +9,7 @@ Usage:: voice finetune single configs/single/my_run.yaml - voice finetune sweep configs/sweep/pilot.yaml --resume + voice finetune sweep configs/sweep/example.yaml --resume """ from __future__ import annotations From 1b34ad9a7f20734d3ba42f9ef57947c474ff3228 Mon Sep 17 00:00:00 2001 From: Fin Griffin Date: Wed, 10 Jun 2026 15:29:28 +0100 Subject: [PATCH 68/68] chore(tests): add unit tests for orchestrator module to reach 90% cov --- .coverage | Bin 0 -> 53248 bytes cspell/project-words.txt | 1 + tests/voice/datasets/test_split_and_specs.py | 39 ++ tests/voice/finetune/test_orchestrator.py | 340 ++++++++++++++++++ tests/voice/stylometry/test_sequence_stats.py | 47 +++ 5 files changed, 427 insertions(+) create mode 100644 .coverage create mode 100644 tests/voice/datasets/test_split_and_specs.py create mode 100644 tests/voice/finetune/test_orchestrator.py create mode 100644 tests/voice/stylometry/test_sequence_stats.py diff --git a/.coverage b/.coverage new file mode 100644 index 0000000000000000000000000000000000000000..ba0356da53bb543238dd8a7fa8d4bee7d6a1ea0e GIT binary patch literal 53248 zcmeI5e{9_38OLAyeCPP??DvvOVnW)+2(h$levlPuEo`)*g!M-tWt3^!P%qBKNep-A ztL;mZQI@;36VryoH0_T~LZW|c+WuhGCXEdt)`qdam>5h<2nhz6#4l+BI>bh{j%3g4 zv*SzKAbR%)B73Zy-`Dp0e*HY3_jzCYy{p|jZXY&XLz}SdyzXi{NQ!VA*`sNM5D7jq ze1b)Uj1X)<%GKo8%Sxp0JFPPP3Q5MkO6U>!O4^&8O#UPBP;#eqXTlVFq&_%+3lcyA zNB{|J7y^~slcL(u!Oh?2>SH;>we_rFSJ(31FAohK9?}jE-ZVUmvoNW-Q$|p_KTSdG%Q?V~#^D*O&x}qHX4N zdse&0nCH5XxHiIJ17t)(hDw!|BoVRS&Zk*g4}?y|t};ziVkZv*5W| za7@><3YsxvWJ|6wen|&=7_?vkc(vYu)+lpmv|7_YR}G!8@+E5e#r?_?U|hipu!a@c zsiCrGbD@+U1LSv?@naZOA!|(=wmxa}`A4h6 z!Y3U_5IO@=OdaZ4FLYKzATzLit-{|LC#E5_8p&h^~!%Vh@qOjAV^M76Drt5kag8<*H8y2c5%C+q?j zTnIkC`9;ULxPQH3m*J`^jQy;0vh!325vZtjL#K40i(a4^i26s_h!yDf z6@dv;&FkaU?#>#eM)BB`agkj0YIL*i8m^f)G*-kj#tW=tx}#-n0}lGvQqM3THg%y@ zRhfNoBp5@h-fZiRd{pePCe947HJc?jv0J%H7bmLQw{w+}--D}zQ^tWifxI60>TmLE zBI|;KVUUf$C=ItrwZX-J*Dz$8)ibaWvD)loRdhiq{{|_(jZN@5dY-@^E=T|gAOR$R z1dsp{Kmter2_OL^fCP}h#v>5ncur*Vf1WN9`VOpcK>|ns2_OL^fCP{L5(4W!bINZF-=141LMAar#jLYB>5Z~?E_a4nlzmTuHC06Y#tLoFag z8?Y>!GePEHGstu{BBSSWV|w-;M(aQd#5x)f%Vf-g>1HyZwU2^U9dX5;N_GqgxQtUY zvR)f1pj1a2I__-Ff+v^l+5U`c-D4EYZ$ONLX?MsVxc&0otQB+&c)td`OT~+RCVFcU zM7tUj%^5Q$yj+0E9ZY~+9qn3UBXiyK2oA?VY;$9_g)MulRG+7-Ejwwr8Gi#j-QNUq zbqpJ;a{iO%OiFA}DzxfA45aGl3ZYdYumjQhwBT(7McpV#Z3ZeNtfT0 znQ>!6FXiARD8<>^BA{{A*;Sw5Zkmi%uylh_r%E1r;kCmoY|3|{eO64g9MNO5+~_{f8W6V2SNiQc!h^%0DMPR2FuM z*KVP(ePcU+DzS-lo_oCgkd?&pvkNO+hXTj1YvW1zNF_4==nG%tq5^k(a5VMU z=zt7|##?#v+^bJsQ!Z1odvFg~nmZ#NCo|t9e$!KN3NA3gg{q9qAc zK9in*g=p6f@=Z-M%gZCN1ng5%{8e#CZqW&t{L>3+% z}tlL>3Q57Di6QUgsYAuyyO9R8a)l zqklMaP#t;uEZ-)8ZclXnvnfJ%lH>F-I661Yi4kT8&;M29A#;=!^6z`X~AXy^rd28r}*xMW3dR((lrf z^fdh`Jw<;+zt5T;7bJiLkN^@u0!RP}AOR$R1dsp{Kmtf$l>qw&fJ>-eqO^O7+~y_8 zRxgRCy`-hZOPZU#L```~JN1$_#YzP=l>h9 zVbLWdfCP{L5N06wZIssI20 literal 0 HcmV?d00001 diff --git a/cspell/project-words.txt b/cspell/project-words.txt index e45257a..0a99bde 100644 --- a/cspell/project-words.txt +++ b/cspell/project-words.txt @@ -22,3 +22,4 @@ submatrix vocab finetune accum +nonpositive diff --git a/tests/voice/datasets/test_split_and_specs.py b/tests/voice/datasets/test_split_and_specs.py new file mode 100644 index 0000000..4e7439c --- /dev/null +++ b/tests/voice/datasets/test_split_and_specs.py @@ -0,0 +1,39 @@ +""" +Tests for voice.datasets._schema and voice.datasets._specs. + +Scope: +- Split.parse passthrough for Split instances +- Split.parse from valid string +- Split.parse raises TypeError for non-string/non-Split input +- Split.parse raises ValueError for unrecognised string +- BUSH_LATEST constant has the expected repo_id +""" + +from __future__ import annotations + +import pytest + +from voice.datasets._schema import Split +from voice.datasets._specs import BUSH_LATEST + + +def test_split_parse_passthrough(): + assert Split.parse(Split.TRAIN) is Split.TRAIN + + +def test_split_parse_from_string(): + assert Split.parse("validation") is Split.VALIDATION + + +def test_split_parse_raises_type_error_for_non_string(): + with pytest.raises(TypeError, match="Split or str"): + Split.parse(42) # type: ignore[arg-type] + + +def test_split_parse_raises_value_error_for_invalid_string(): + with pytest.raises(ValueError, match="Invalid split"): + Split.parse("unknown") + + +def test_bush_latest_has_expected_repo_id(): + assert BUSH_LATEST.repo_id == "AccelerateScience/bush-dataset" diff --git a/tests/voice/finetune/test_orchestrator.py b/tests/voice/finetune/test_orchestrator.py new file mode 100644 index 0000000..b8d98a5 --- /dev/null +++ b/tests/voice/finetune/test_orchestrator.py @@ -0,0 +1,340 @@ +""" +Tests for voice.finetune._orchestrator. + +Scope: +- _build_axolotl_cfg merges hyperparams and injects output_dir +- _now_iso returns a valid ISO-8601 string +- run_training builds the correct command for single/multi-GPU +- _load_completions delegates to get_dataset with a LocalDatasetSpec +- _score_split calls make_comparison and writes alignment JSON +- _try_score_split skips missing completions silently +- _try_score_split catches and logs scoring errors +- _score_all_epochs iterates over all epochs and splits +- execute_run happy path: creates dirs, writes metadata, scores, returns done +- execute_run failure path: CalledProcessError -> failed status + RuntimeError +""" + +from __future__ import annotations + +import subprocess +from datetime import datetime +from pathlib import Path +from unittest.mock import MagicMock, patch + +import pytest + +from voice.datasets._schema import Split +from voice.datasets.dataset import DatasetSpec, LocalDatasetSpec +from voice.finetune._orchestrator import ( + _build_axolotl_cfg, + _load_completions, + _now_iso, + _score_all_epochs, + _score_split, + _try_score_split, + execute_run, + run_training, +) +from voice.finetune._runs import RunDir +from voice.finetune._schema import RunMetadata + +# --------------------------------------------------------------------------- +# Helpers +# --------------------------------------------------------------------------- + + +def _run_dir(tmp_path: Path, name: str = "run-001") -> RunDir: + return RunDir(tmp_path / name) + + +def _ref_spec() -> DatasetSpec: + return DatasetSpec( + repo_id="ns/dataset", + revision="main", + splits=(Split.TRAIN, Split.VALIDATION, Split.TEST), + ) + + +def _meta() -> RunMetadata: + return RunMetadata( + run_name="run-001", model="ns/m", dataset="ns/d", hyperparams={} + ) + + +def _comparison_mock() -> MagicMock: + m = MagicMock() + m.score = 0.75 + m.score_ci.return_value = [0.65, 0.85] + m.metric_tails = {"avg_word_length": 0.8} + m.metric_tail_cis.return_value = {"avg_word_length": [0.7, 0.9]} + m.group_tails = {} + m.group_tail_cis.return_value = None + return m + + +# --------------------------------------------------------------------------- +# _build_axolotl_cfg +# --------------------------------------------------------------------------- + + +def test_build_axolotl_cfg_sets_output_dir(tmp_path: Path): + rd = _run_dir(tmp_path) + cfg = _build_axolotl_cfg({"base_model": "ns/m"}, {}, rd) + assert cfg["output_dir"] == str(rd.adapter_dir) + + +def test_build_axolotl_cfg_merges_hyperparams(tmp_path: Path): + rd = _run_dir(tmp_path) + hyperparams = {"learning_rate": 1e-4, "lora_r": 8, "lora_alpha": 8} + cfg = _build_axolotl_cfg({"base_model": "ns/m"}, hyperparams, rd) + assert cfg["learning_rate"] == 1e-4 + assert cfg["lora_r"] == 8 + assert cfg["lora_alpha"] == 8 + + +def test_build_axolotl_cfg_does_not_mutate_base(tmp_path: Path): + rd = _run_dir(tmp_path) + base = {"base_model": "ns/m"} + _build_axolotl_cfg(base, {"learning_rate": 1e-4}, rd) + assert "learning_rate" not in base + assert "output_dir" not in base + + +# --------------------------------------------------------------------------- +# _now_iso +# --------------------------------------------------------------------------- + + +def test_now_iso_returns_valid_utc_iso_string(): + s = _now_iso() + dt = datetime.fromisoformat(s) + assert dt.tzinfo is not None + + +# --------------------------------------------------------------------------- +# run_training +# --------------------------------------------------------------------------- + + +def test_run_training_single_gpu_uses_python_m(tmp_path: Path): + rd = _run_dir(tmp_path) + rd.create() + rd.write_config({"base_model": "ns/m"}) + + with patch("voice.finetune._orchestrator.subprocess.run") as mock_sub: + run_training(rd, gpu_ids="0") + + cmd = mock_sub.call_args.args[0] + assert "axolotl.cli.train" in cmd + assert "accelerate.commands.launch" not in cmd + + +def test_run_training_multi_gpu_uses_accelerate(tmp_path: Path): + rd = _run_dir(tmp_path) + rd.create() + rd.write_config({"base_model": "ns/m"}) + + with patch("voice.finetune._orchestrator.subprocess.run") as mock_sub: + run_training(rd, gpu_ids="0,1,2") + + cmd = mock_sub.call_args.args[0] + assert "accelerate.commands.launch" in cmd + assert "--num_processes=3" in cmd + + +def test_run_training_sets_cuda_visible_devices(tmp_path: Path): + rd = _run_dir(tmp_path) + rd.create() + rd.write_config({"base_model": "ns/m"}) + + with patch("voice.finetune._orchestrator.subprocess.run") as mock_sub: + run_training(rd, gpu_ids="1,2") + + env = mock_sub.call_args.kwargs["env"] + assert env["CUDA_VISIBLE_DEVICES"] == "1,2" + + +# --------------------------------------------------------------------------- +# _load_completions +# --------------------------------------------------------------------------- + + +def test_load_completions_calls_get_dataset_with_local_spec(tmp_path: Path): + rd = _run_dir(tmp_path) + mock_ds = MagicMock() + mock_ds.__getitem__.return_value = [] + + with patch( + "voice.finetune._orchestrator.get_dataset", return_value=mock_ds + ) as mock_get: + result = _load_completions(rd, "validation", 1) + + call_spec = mock_get.call_args.args[0] + assert isinstance(call_spec, LocalDatasetSpec) + assert "epoch_1" in str(call_spec.path) + assert result == [] + + +# --------------------------------------------------------------------------- +# _score_split +# --------------------------------------------------------------------------- + + +def test_score_split_writes_alignment_json_and_returns_score(tmp_path: Path): + import json + + rd = _run_dir(tmp_path) + + with ( + patch( + "voice.finetune._orchestrator._load_completions", return_value=[] + ), + patch( + "voice.finetune._orchestrator.make_comparison", + return_value=_comparison_mock(), + ), + ): + score = _score_split(rd, "validation", 1, MagicMock()) + + assert score == pytest.approx(0.75) + out_path = rd.alignment_path("validation", 1) + assert out_path.exists() + data = json.loads(out_path.read_text()) + assert data["score"] == pytest.approx(0.75) + + +# --------------------------------------------------------------------------- +# _try_score_split +# --------------------------------------------------------------------------- + + +def test_try_score_split_skips_when_completions_missing(tmp_path: Path): + rd = _run_dir(tmp_path) + rd.create() + meta = _meta() + + with patch("voice.finetune._orchestrator._score_split") as mock_score: + _try_score_split(rd, "validation", 1, MagicMock(), meta) + + mock_score.assert_not_called() + assert meta.alignment_val == {} + + +def test_try_score_split_catches_scoring_error(tmp_path: Path): + rd = _run_dir(tmp_path) + rd.create() + (rd.completions_dir / "epoch_1").mkdir(parents=True) + (rd.completions_dir / "epoch_1" / "validation.jsonl").write_text("") + meta = _meta() + + with patch( + "voice.finetune._orchestrator._score_split", + side_effect=RuntimeError("boom"), + ): + _try_score_split( + rd, "validation", 1, MagicMock(), meta + ) # must not raise + + assert meta.alignment_val == {} + + +def test_try_score_split_updates_alignment_val(tmp_path: Path): + rd = _run_dir(tmp_path) + rd.create() + (rd.completions_dir / "epoch_1").mkdir(parents=True) + (rd.completions_dir / "epoch_1" / "validation.jsonl").write_text("") + meta = _meta() + + with patch("voice.finetune._orchestrator._score_split", return_value=0.8): + _try_score_split(rd, "validation", 1, MagicMock(), meta) + + assert meta.alignment_val == {"1": 0.8} + + +def test_try_score_split_updates_alignment_test(tmp_path: Path): + rd = _run_dir(tmp_path) + rd.create() + (rd.completions_dir / "epoch_1").mkdir(parents=True) + (rd.completions_dir / "epoch_1" / "test.jsonl").write_text("") + meta = _meta() + + with patch("voice.finetune._orchestrator._score_split", return_value=0.6): + _try_score_split(rd, "test", 1, MagicMock(), meta) + + assert meta.alignment_test == {"1": 0.6} + + +# --------------------------------------------------------------------------- +# _score_all_epochs +# --------------------------------------------------------------------------- + + +def test_score_all_epochs_calls_try_score_for_each_epoch_and_split( + tmp_path: Path, +): + rd = _run_dir(tmp_path) + meta = _meta() + + with patch("voice.finetune._orchestrator._try_score_split") as mock_try: + _score_all_epochs( + rd, num_epochs=2, reference_ds=MagicMock(), meta=meta + ) + + assert mock_try.call_count == 4 # 2 epochs × 2 splits + + +# --------------------------------------------------------------------------- +# execute_run +# --------------------------------------------------------------------------- + + +def test_execute_run_happy_path_returns_done_metadata(tmp_path: Path): + rd = _run_dir(tmp_path) + + with ( + patch("voice.finetune._orchestrator.get_dataset"), + patch("voice.finetune._orchestrator.run_training"), + patch("voice.finetune._orchestrator._score_all_epochs"), + ): + meta = execute_run( + run_name="run-001", + base_axolotl_cfg={ + "base_model": "ns/model", + "datasets": [{"path": "ns/dataset"}], + "num_epochs": 2, + }, + hyperparams={"learning_rate": 1e-4, "lora_r": 8}, + run_dir=rd, + reference_spec=_ref_spec(), + ) + + assert meta.status == "done" + assert meta.run_name == "run-001" + assert meta.finished_at is not None + assert rd.metadata_path.exists() + + +def test_execute_run_failure_sets_failed_status_and_raises(tmp_path: Path): + rd = _run_dir(tmp_path) + err = subprocess.CalledProcessError(1, "axolotl") + + with ( + patch("voice.finetune._orchestrator.get_dataset"), + patch("voice.finetune._orchestrator.run_training", side_effect=err), + pytest.raises(RuntimeError, match="Training failed"), + ): + execute_run( + run_name="run-001", + base_axolotl_cfg={ + "base_model": "ns/model", + "datasets": [{"path": "ns/dataset"}], + "num_epochs": 1, + }, + hyperparams={}, + run_dir=rd, + reference_spec=_ref_spec(), + ) + + meta = rd.read_metadata() + assert meta.status == "failed" + assert meta.finished_at is not None diff --git a/tests/voice/stylometry/test_sequence_stats.py b/tests/voice/stylometry/test_sequence_stats.py new file mode 100644 index 0000000..4c76d6b --- /dev/null +++ b/tests/voice/stylometry/test_sequence_stats.py @@ -0,0 +1,47 @@ +""" +Tests for voice.stylometry._sequence_stats. + +Scope: +- length_central_moment_from_units raises on non-positive order +- mattr_from_units raises on non-positive window_size or stride +- mattr_from_units exercises the sliding-window loop (n > window_size) +""" + +from __future__ import annotations + +import pytest + +from voice.stylometry._sequence_stats import ( + length_central_moment_from_units, + mattr_from_units, +) + + +def test_length_central_moment_raises_on_nonpositive_order(): + with pytest.raises(ValueError, match="Order must be positive"): + length_central_moment_from_units(["a", "bb"], order=0) + + +def test_mattr_raises_on_nonpositive_window_size(): + with pytest.raises(ValueError, match="window_size must be positive"): + mattr_from_units(["a", "b", "c"], window_size=0, stride=1) + + +def test_mattr_raises_on_nonpositive_stride(): + with pytest.raises(ValueError, match="stride must be positive"): + mattr_from_units(["a", "b", "c"], window_size=2, stride=0) + + +def test_mattr_sliding_window_all_unique(): + # 7 tokens, window=3 — forces the loop path (n > window_size) + # Every window [a,b,c], [b,c,d], ... is fully unique → TTR=1.0 each + units = ["a", "b", "c", "d", "e", "f", "g"] + result = mattr_from_units(units, window_size=3, stride=1) + assert result == pytest.approx(1.0) + + +def test_mattr_sliding_window_with_repeats(): + # [a,a,b]=2/3, [a,b,a]=2/3, [b,a,a]=2/3 → mean = 2/3 + units = ["a", "a", "b", "a", "a"] + result = mattr_from_units(units, window_size=3, stride=1) + assert result == pytest.approx(2 / 3)