From 67aec5339540156bd2db974779694556530b63c8 Mon Sep 17 00:00:00 2001 From: kpuhger Date: Sat, 7 Mar 2026 22:23:16 -0800 Subject: [PATCH 1/8] feat(runtime): add dockerized local Postgres contract --- compose.yaml | 26 ++++++++++++++++++++++++ docs/local-runtime.md | 41 ++++++++++++++++++++++++++++++++++++++ scripts/postgres-down.sh | 11 ++++++++++ scripts/postgres-status.sh | 17 ++++++++++++++++ scripts/postgres-up.sh | 30 ++++++++++++++++++++++++++++ 5 files changed, 125 insertions(+) create mode 100644 compose.yaml create mode 100644 docs/local-runtime.md create mode 100755 scripts/postgres-down.sh create mode 100755 scripts/postgres-status.sh create mode 100755 scripts/postgres-up.sh diff --git a/compose.yaml b/compose.yaml new file mode 100644 index 0000000..5ad5a61 --- /dev/null +++ b/compose.yaml @@ -0,0 +1,26 @@ +services: + postgres: + image: pgvector/pgvector:pg17 + restart: unless-stopped + environment: + POSTGRES_DB: paperchat + POSTGRES_USER: paperchat + POSTGRES_PASSWORD: paperchat + PGDATA: /var/lib/postgresql/data/pgdata + ports: + - "127.0.0.1:5433:5432" + volumes: + - paperchat_postgres_data:/var/lib/postgresql/data + healthcheck: + test: + [ + "CMD-SHELL", + "pg_isready -h 127.0.0.1 -U $$POSTGRES_USER -d $$POSTGRES_DB || exit 1", + ] + interval: 5s + timeout: 5s + retries: 12 + start_period: 5s + +volumes: + paperchat_postgres_data: diff --git a/docs/local-runtime.md b/docs/local-runtime.md new file mode 100644 index 0000000..91652a9 --- /dev/null +++ b/docs/local-runtime.md @@ -0,0 +1,41 @@ +# Local Runtime + +PaperChat PR 2 introduces a single supported local database runtime: + +- Docker-managed Postgres +- `pgvector` enabled through the `pgvector/pgvector` image +- host binding on `127.0.0.1:5433` +- named Docker volume `paperchat_postgres_data` + +## Start + +```bash +./scripts/postgres-up.sh +``` + +This starts the `postgres` service from [`../compose.yaml`](../compose.yaml) +and waits for the container healthcheck to report healthy. + +## Status + +```bash +./scripts/postgres-status.sh +``` + +This shows the Compose service state and the current Docker health status. + +## Stop + +```bash +./scripts/postgres-down.sh +``` + +This stops the Postgres service but leaves the named volume in place. + +## Connection Contract + +- host: `127.0.0.1` +- port: `5433` +- database: `paperchat` +- user: `paperchat` +- password: `paperchat` diff --git a/scripts/postgres-down.sh b/scripts/postgres-down.sh new file mode 100755 index 0000000..ab46fbd --- /dev/null +++ b/scripts/postgres-down.sh @@ -0,0 +1,11 @@ +#!/usr/bin/env bash +set -euo pipefail + +repo_root="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" + +if ! command -v docker >/dev/null 2>&1; then + echo "docker is required to stop the PaperChat local Postgres runtime." >&2 + exit 1 +fi + +docker compose -f "$repo_root/compose.yaml" stop postgres diff --git a/scripts/postgres-status.sh b/scripts/postgres-status.sh new file mode 100755 index 0000000..a0f18bd --- /dev/null +++ b/scripts/postgres-status.sh @@ -0,0 +1,17 @@ +#!/usr/bin/env bash +set -euo pipefail + +repo_root="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" +compose_file="$repo_root/compose.yaml" + +if ! command -v docker >/dev/null 2>&1; then + echo "docker is required to inspect the PaperChat local Postgres runtime." >&2 + exit 1 +fi + +docker compose -f "$compose_file" ps postgres + +container_id="$(docker compose -f "$compose_file" ps -q postgres)" +if [[ -n "$container_id" ]]; then + docker inspect --format 'health={{if .State.Health}}{{.State.Health.Status}}{{else}}{{.State.Status}}{{end}}' "$container_id" +fi diff --git a/scripts/postgres-up.sh b/scripts/postgres-up.sh new file mode 100755 index 0000000..39c753a --- /dev/null +++ b/scripts/postgres-up.sh @@ -0,0 +1,30 @@ +#!/usr/bin/env bash +set -euo pipefail + +repo_root="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" +compose_file="$repo_root/compose.yaml" + +if ! command -v docker >/dev/null 2>&1; then + echo "docker is required to start the PaperChat local Postgres runtime." >&2 + exit 1 +fi + +docker compose -f "$compose_file" up -d postgres + +container_id="$(docker compose -f "$compose_file" ps -q postgres)" +if [[ -z "$container_id" ]]; then + echo "postgres container was not created." >&2 + exit 1 +fi + +for _ in {1..30}; do + status="$(docker inspect --format '{{if .State.Health}}{{.State.Health.Status}}{{else}}{{.State.Status}}{{end}}' "$container_id")" + if [[ "$status" == "healthy" ]]; then + echo "postgres is healthy on 127.0.0.1:5433" + exit 0 + fi + sleep 1 +done + +echo "postgres did not become healthy within 30 seconds." >&2 +exit 1 From ba990a1bb30dfadf8cd1d5e0297e955826cc0312 Mon Sep 17 00:00:00 2001 From: kpuhger Date: Sat, 7 Mar 2026 22:24:13 -0800 Subject: [PATCH 2/8] feat(storage): add backend schema and migration foundation --- backend/alembic.ini | 38 +++ backend/alembic/env.py | 74 +++++ backend/alembic/script.py.mako | 18 ++ .../alembic/versions/0001_initial_schema.py | 174 +++++++++++ backend/paperchat_backend/config.py | 45 +++ backend/paperchat_backend/db/__init__.py | 21 ++ backend/paperchat_backend/db/engine.py | 10 + backend/paperchat_backend/db/schema.py | 175 +++++++++++ backend/pyproject.toml | 4 + backend/uv.lock | 273 ++++++++++++++++++ 10 files changed, 832 insertions(+) create mode 100644 backend/alembic.ini create mode 100644 backend/alembic/env.py create mode 100644 backend/alembic/script.py.mako create mode 100644 backend/alembic/versions/0001_initial_schema.py create mode 100644 backend/paperchat_backend/config.py create mode 100644 backend/paperchat_backend/db/__init__.py create mode 100644 backend/paperchat_backend/db/engine.py create mode 100644 backend/paperchat_backend/db/schema.py diff --git a/backend/alembic.ini b/backend/alembic.ini new file mode 100644 index 0000000..bd2f0bf --- /dev/null +++ b/backend/alembic.ini @@ -0,0 +1,38 @@ +[alembic] +script_location = alembic +prepend_sys_path = . +sqlalchemy.url = postgresql+psycopg://paperchat:paperchat@127.0.0.1:5433/paperchat + +[post_write_hooks] + +[loggers] +keys = root,sqlalchemy,alembic + +[handlers] +keys = console + +[formatters] +keys = generic + +[logger_root] +level = WARN +handlers = console + +[logger_sqlalchemy] +level = WARN +handlers = +qualname = sqlalchemy.engine + +[logger_alembic] +level = INFO +handlers = +qualname = alembic + +[handler_console] +class = StreamHandler +args = (sys.stderr,) +level = NOTSET +formatter = generic + +[formatter_generic] +format = %(levelname)-5.5s [%(name)s] %(message)s diff --git a/backend/alembic/env.py b/backend/alembic/env.py new file mode 100644 index 0000000..b44ea30 --- /dev/null +++ b/backend/alembic/env.py @@ -0,0 +1,74 @@ +"""Alembic environment configuration for backend schema migrations.""" + +from __future__ import annotations + +import os +from logging.config import fileConfig + +from alembic import context +from sqlalchemy import engine_from_config, pool + +from paperchat_backend.db.schema import Base + +config = context.config + +if config.config_file_name is not None: + fileConfig(config.config_file_name) + +target_metadata = Base.metadata + + +def _database_url() -> str: + database_url = os.environ.get( + "PAPERCHAT_DATABASE_URL", + config.get_main_option("sqlalchemy.url"), + ) + if database_url is None: + msg = "sqlalchemy.url must be configured for Alembic migrations." + raise RuntimeError(msg) + + return database_url + + +def run_migrations_offline() -> None: + """Run migrations without creating an Engine.""" + context.configure( + url=_database_url(), + target_metadata=target_metadata, + literal_binds=True, + compare_type=True, + compare_server_default=True, + dialect_opts={"paramstyle": "named"}, + ) + + with context.begin_transaction(): + context.run_migrations() + + +def run_migrations_online() -> None: + """Run migrations using a live database connection.""" + configuration = config.get_section(config.config_ini_section, {}) + configuration["sqlalchemy.url"] = _database_url() + + connectable = engine_from_config( + configuration, + prefix="sqlalchemy.", + poolclass=pool.NullPool, + ) + + with connectable.connect() as connection: + context.configure( + connection=connection, + target_metadata=target_metadata, + compare_type=True, + compare_server_default=True, + ) + + with context.begin_transaction(): + context.run_migrations() + + +if context.is_offline_mode(): + run_migrations_offline() +else: + run_migrations_online() diff --git a/backend/alembic/script.py.mako b/backend/alembic/script.py.mako new file mode 100644 index 0000000..40c6b2b --- /dev/null +++ b/backend/alembic/script.py.mako @@ -0,0 +1,18 @@ +"""${message}""" + +revision = ${repr(up_revision)} +down_revision = ${repr(down_revision)} +branch_labels = ${repr(branch_labels)} +depends_on = ${repr(depends_on)} + +from alembic import op +import sqlalchemy as sa +${imports if imports else ""} + + +def upgrade() -> None: + ${upgrades if upgrades else "pass"} + + +def downgrade() -> None: + ${downgrades if downgrades else "pass"} diff --git a/backend/alembic/versions/0001_initial_schema.py b/backend/alembic/versions/0001_initial_schema.py new file mode 100644 index 0000000..9728490 --- /dev/null +++ b/backend/alembic/versions/0001_initial_schema.py @@ -0,0 +1,174 @@ +"""Create the initial backend database schema.""" + +import sqlalchemy as sa +from alembic import op +from sqlalchemy.dialects import postgresql + +from paperchat_backend.db.schema import ( + DOCUMENT_STATUS_LENGTH, + MESSAGE_ROLE_LENGTH, + Vector, +) + +revision = "0001_initial_schema" +down_revision = None +branch_labels = None +depends_on = None + + +def upgrade() -> None: + op.execute("CREATE EXTENSION IF NOT EXISTS pgcrypto") + op.execute("CREATE EXTENSION IF NOT EXISTS vector") + + op.create_table( + "documents", + sa.Column( + "id", + postgresql.UUID(as_uuid=True), + nullable=False, + server_default=sa.text("gen_random_uuid()"), + ), + sa.Column("content_hash", sa.String(length=128), nullable=False), + sa.Column("original_filename", sa.Text(), nullable=False), + sa.Column("display_name", sa.Text(), nullable=False), + sa.Column("file_path", sa.Text(), nullable=False), + sa.Column( + "status", + sa.String(length=DOCUMENT_STATUS_LENGTH), + nullable=False, + server_default=sa.text("'pending'"), + ), + sa.Column( + "created_at", + sa.DateTime(timezone=True), + nullable=False, + server_default=sa.func.now(), + ), + sa.Column( + "updated_at", + sa.DateTime(timezone=True), + nullable=False, + server_default=sa.func.now(), + ), + sa.PrimaryKeyConstraint("id"), + sa.UniqueConstraint("content_hash"), + ) + op.create_index("ix_documents_status", "documents", ["status"], unique=False) + + op.create_table( + "document_chunks", + sa.Column( + "id", + postgresql.UUID(as_uuid=True), + nullable=False, + server_default=sa.text("gen_random_uuid()"), + ), + sa.Column("document_id", postgresql.UUID(as_uuid=True), nullable=False), + sa.Column("chunk_index", sa.Integer(), nullable=False), + sa.Column("text", sa.Text(), nullable=False), + sa.Column("page_numbers", postgresql.ARRAY(sa.Integer()), nullable=False), + sa.Column("headings", postgresql.ARRAY(sa.Text()), nullable=False), + sa.Column("embedding", Vector(), nullable=False), + sa.Column( + "created_at", + sa.DateTime(timezone=True), + nullable=False, + server_default=sa.func.now(), + ), + sa.ForeignKeyConstraint(["document_id"], ["documents.id"], ondelete="CASCADE"), + sa.PrimaryKeyConstraint("id"), + sa.UniqueConstraint( + "document_id", + "chunk_index", + name="uq_document_chunks_document_id_chunk_index", + ), + ) + op.create_index( + "ix_document_chunks_document_id", "document_chunks", ["document_id"], unique=False + ) + + op.create_table( + "conversations", + sa.Column( + "id", + postgresql.UUID(as_uuid=True), + nullable=False, + server_default=sa.text("gen_random_uuid()"), + ), + sa.Column("title", sa.Text(), nullable=True), + sa.Column( + "created_at", + sa.DateTime(timezone=True), + nullable=False, + server_default=sa.func.now(), + ), + sa.Column( + "updated_at", + sa.DateTime(timezone=True), + nullable=False, + server_default=sa.func.now(), + ), + sa.PrimaryKeyConstraint("id"), + ) + + op.create_table( + "messages", + sa.Column( + "id", + postgresql.UUID(as_uuid=True), + nullable=False, + server_default=sa.text("gen_random_uuid()"), + ), + sa.Column("conversation_id", postgresql.UUID(as_uuid=True), nullable=False), + sa.Column("message_index", sa.Integer(), nullable=False), + sa.Column( + "role", + sa.String(length=MESSAGE_ROLE_LENGTH), + nullable=False, + ), + sa.Column("content", sa.Text(), nullable=False), + sa.Column("citations", postgresql.JSONB(astext_type=sa.Text()), nullable=True), + sa.Column( + "created_at", + sa.DateTime(timezone=True), + nullable=False, + server_default=sa.func.now(), + ), + sa.ForeignKeyConstraint(["conversation_id"], ["conversations.id"], ondelete="CASCADE"), + sa.PrimaryKeyConstraint("id"), + sa.UniqueConstraint( + "conversation_id", + "message_index", + name="uq_messages_conversation_id_message_index", + ), + ) + op.create_index("ix_messages_conversation_id", "messages", ["conversation_id"], unique=False) + + op.create_table( + "app_state", + sa.Column("key", sa.String(length=64), nullable=False), + sa.Column( + "value", + postgresql.JSONB(astext_type=sa.Text()), + nullable=False, + server_default=sa.text("'{}'::jsonb"), + ), + sa.Column( + "updated_at", + sa.DateTime(timezone=True), + nullable=False, + server_default=sa.func.now(), + ), + sa.PrimaryKeyConstraint("key"), + ) + + +def downgrade() -> None: + op.drop_table("app_state") + op.drop_index("ix_messages_conversation_id", table_name="messages") + op.drop_table("messages") + op.drop_table("conversations") + op.drop_index("ix_document_chunks_document_id", table_name="document_chunks") + op.drop_table("document_chunks") + op.drop_index("ix_documents_status", table_name="documents") + op.drop_table("documents") diff --git a/backend/paperchat_backend/config.py b/backend/paperchat_backend/config.py new file mode 100644 index 0000000..21a28dc --- /dev/null +++ b/backend/paperchat_backend/config.py @@ -0,0 +1,45 @@ +import os +from functools import lru_cache +from pathlib import Path + +from sqlalchemy import URL + +DEFAULT_DB_HOST = "127.0.0.1" +DEFAULT_DB_NAME = "paperchat" +DEFAULT_DB_PASSWORD = "paperchat" +DEFAULT_DB_PORT = 5433 +DEFAULT_DB_USER = "paperchat" +DOCKER_BINARY = "docker" +DOCKER_SERVICE = "postgres" +BACKEND_ROOT = Path(__file__).resolve().parents[1] +REPO_ROOT = Path(__file__).resolve().parents[2] +ALEMBIC_INI_PATH = BACKEND_ROOT / "alembic.ini" +ALEMBIC_DIR = BACKEND_ROOT / "alembic" +COMPOSE_FILE = REPO_ROOT / "compose.yaml" + + +def _read_port(name: str, default: int) -> int: + raw_value = os.getenv(name) + if raw_value is None: + return default + + try: + return int(raw_value) + except ValueError as error: + msg = f"{name} must be an integer, got {raw_value!r}." + raise ValueError(msg) from error + + +@lru_cache +def get_database_url() -> str: + if database_url := os.getenv("PAPERCHAT_DATABASE_URL"): + return database_url + + return URL.create( + "postgresql+psycopg", + username=os.getenv("PAPERCHAT_DB_USER", DEFAULT_DB_USER), + password=os.getenv("PAPERCHAT_DB_PASSWORD", DEFAULT_DB_PASSWORD), + host=os.getenv("PAPERCHAT_DB_HOST", DEFAULT_DB_HOST), + port=_read_port("PAPERCHAT_DB_PORT", DEFAULT_DB_PORT), + database=os.getenv("PAPERCHAT_DB_NAME", DEFAULT_DB_NAME), + ).render_as_string(hide_password=False) diff --git a/backend/paperchat_backend/db/__init__.py b/backend/paperchat_backend/db/__init__.py new file mode 100644 index 0000000..019dbdc --- /dev/null +++ b/backend/paperchat_backend/db/__init__.py @@ -0,0 +1,21 @@ +"""Database schema package for the PaperChat backend.""" + +from paperchat_backend.db.schema import ( + AppState, + Base, + Conversation, + Document, + DocumentChunk, + Message, + Vector, +) + +__all__ = [ + "AppState", + "Base", + "Conversation", + "Document", + "DocumentChunk", + "Message", + "Vector", +] diff --git a/backend/paperchat_backend/db/engine.py b/backend/paperchat_backend/db/engine.py new file mode 100644 index 0000000..0748a14 --- /dev/null +++ b/backend/paperchat_backend/db/engine.py @@ -0,0 +1,10 @@ +from functools import lru_cache + +from sqlalchemy import Engine, create_engine + +from paperchat_backend.config import get_database_url + + +@lru_cache +def get_engine() -> Engine: + return create_engine(get_database_url(), pool_pre_ping=True) diff --git a/backend/paperchat_backend/db/schema.py b/backend/paperchat_backend/db/schema.py new file mode 100644 index 0000000..72fa125 --- /dev/null +++ b/backend/paperchat_backend/db/schema.py @@ -0,0 +1,175 @@ +"""Database schema for the local Postgres persistence contract.""" + +from __future__ import annotations + +from datetime import datetime +from typing import Any +from uuid import UUID + +from sqlalchemy import DateTime, ForeignKey, Index, Integer, String, Text, UniqueConstraint, func +from sqlalchemy.dialects.postgresql import ARRAY, JSONB +from sqlalchemy.dialects.postgresql import UUID as PostgresUUID +from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column +from sqlalchemy.sql import expression +from sqlalchemy.types import UserDefinedType + +DOCUMENT_STATUS_LENGTH = 32 +MESSAGE_ROLE_LENGTH = 16 + + +class Base(DeclarativeBase): + """Base metadata for backend database tables.""" + + +class Vector(UserDefinedType[Any]): + """Minimal SQLAlchemy type for pgvector-backed columns.""" + + cache_ok = True + + def __init__(self, dimensions: int | None = None) -> None: + self.dimensions = dimensions + + def get_col_spec(self, **_: Any) -> str: + if self.dimensions is None: + return "vector" + return f"vector({self.dimensions})" + + +class TimestampMixin: + """Shared timestamp columns for mutable tables.""" + + created_at: Mapped[datetime] = mapped_column( + DateTime(timezone=True), + nullable=False, + server_default=func.now(), + ) + updated_at: Mapped[datetime] = mapped_column( + DateTime(timezone=True), + nullable=False, + server_default=func.now(), + ) + + +class Document(TimestampMixin, Base): + """Local document metadata and ingestion lifecycle state.""" + + __tablename__ = "documents" + + id: Mapped[UUID] = mapped_column( + PostgresUUID(as_uuid=True), + primary_key=True, + server_default=expression.text("gen_random_uuid()"), + ) + content_hash: Mapped[str] = mapped_column(String(128), nullable=False, unique=True) + original_filename: Mapped[str] = mapped_column(Text, nullable=False) + display_name: Mapped[str] = mapped_column(Text, nullable=False) + file_path: Mapped[str] = mapped_column(Text, nullable=False) + status: Mapped[str] = mapped_column( + String(DOCUMENT_STATUS_LENGTH), + nullable=False, + server_default=expression.text("'pending'"), + ) + + __table_args__ = (Index("ix_documents_status", "status"),) + + +class DocumentChunk(Base): + """Chunk rows linked to a durable document id.""" + + __tablename__ = "document_chunks" + + id: Mapped[UUID] = mapped_column( + PostgresUUID(as_uuid=True), + primary_key=True, + server_default=expression.text("gen_random_uuid()"), + ) + document_id: Mapped[UUID] = mapped_column( + PostgresUUID(as_uuid=True), + ForeignKey("documents.id", ondelete="CASCADE"), + nullable=False, + ) + chunk_index: Mapped[int] = mapped_column(Integer, nullable=False) + text: Mapped[str] = mapped_column(Text, nullable=False) + page_numbers: Mapped[list[int]] = mapped_column(ARRAY(Integer()), nullable=False) + headings: Mapped[list[str]] = mapped_column(ARRAY(Text()), nullable=False) + embedding: Mapped[Any] = mapped_column(Vector(), nullable=False) + created_at: Mapped[datetime] = mapped_column( + DateTime(timezone=True), + nullable=False, + server_default=func.now(), + ) + + __table_args__ = ( + UniqueConstraint( + "document_id", + "chunk_index", + name="uq_document_chunks_document_id_chunk_index", + ), + Index("ix_document_chunks_document_id", "document_id"), + ) + + +class Conversation(TimestampMixin, Base): + """Chat conversation metadata.""" + + __tablename__ = "conversations" + + id: Mapped[UUID] = mapped_column( + PostgresUUID(as_uuid=True), + primary_key=True, + server_default=expression.text("gen_random_uuid()"), + ) + title: Mapped[str | None] = mapped_column(Text, nullable=True) + + +class Message(Base): + """Persisted chat messages for a local conversation.""" + + __tablename__ = "messages" + + id: Mapped[UUID] = mapped_column( + PostgresUUID(as_uuid=True), + primary_key=True, + server_default=expression.text("gen_random_uuid()"), + ) + conversation_id: Mapped[UUID] = mapped_column( + PostgresUUID(as_uuid=True), + ForeignKey("conversations.id", ondelete="CASCADE"), + nullable=False, + ) + message_index: Mapped[int] = mapped_column(Integer, nullable=False) + role: Mapped[str] = mapped_column(String(MESSAGE_ROLE_LENGTH), nullable=False) + content: Mapped[str] = mapped_column(Text, nullable=False) + citations: Mapped[dict[str, Any] | None] = mapped_column(JSONB, nullable=True) + created_at: Mapped[datetime] = mapped_column( + DateTime(timezone=True), + nullable=False, + server_default=func.now(), + ) + + __table_args__ = ( + UniqueConstraint( + "conversation_id", + "message_index", + name="uq_messages_conversation_id_message_index", + ), + Index("ix_messages_conversation_id", "conversation_id"), + ) + + +class AppState(Base): + """Small key-value store for runtime and schema markers.""" + + __tablename__ = "app_state" + + key: Mapped[str] = mapped_column(String(64), primary_key=True) + value: Mapped[dict[str, Any]] = mapped_column( + JSONB, + nullable=False, + server_default=expression.text("'{}'::jsonb"), + ) + updated_at: Mapped[datetime] = mapped_column( + DateTime(timezone=True), + nullable=False, + server_default=func.now(), + ) diff --git a/backend/pyproject.toml b/backend/pyproject.toml index 8b115f1..9bce894 100644 --- a/backend/pyproject.toml +++ b/backend/pyproject.toml @@ -3,7 +3,10 @@ name = "paperchat-backend" version = "0.1.0" requires-python = ">=3.12" dependencies = [ + "alembic>=1.16.5", "fastapi", + "psycopg[binary]>=3.2.12", + "sqlalchemy>=2.0.44", "uvicorn[standard]", ] @@ -15,6 +18,7 @@ dev = [ "pytest>=8.3.4", "httpx", "ruff>=0.11.0", + "ty>=0.0.20", ] [build-system] diff --git a/backend/uv.lock b/backend/uv.lock index f2d5c7f..5c54122 100644 --- a/backend/uv.lock +++ b/backend/uv.lock @@ -2,6 +2,20 @@ version = 1 revision = 3 requires-python = ">=3.12" +[[package]] +name = "alembic" +version = "1.18.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "mako" }, + { name = "sqlalchemy" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/94/13/8b084e0f2efb0275a1d534838844926f798bd766566b1375174e2448cd31/alembic-1.18.4.tar.gz", hash = "sha256:cb6e1fd84b6174ab8dbb2329f86d631ba9559dd78df550b57804d607672cedbc", size = 2056725, upload-time = "2026-02-10T16:00:47.195Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d2/29/6533c317b74f707ea28f8d633734dbda2119bbadfc61b2f3640ba835d0f7/alembic-1.18.4-py3-none-any.whl", hash = "sha256:a5ed4adcf6d8a4cb575f3d759f071b03cd6e5c7618eb796cb52497be25bfe19a", size = 263893, upload-time = "2026-02-10T16:00:49.997Z" }, +] + [[package]] name = "annotated-doc" version = "0.0.4" @@ -79,6 +93,45 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/e4/72/42e900510195b23a56bde950d26a51f8b723846bfcaa0286e90287f0422b/fastapi-0.135.1-py3-none-any.whl", hash = "sha256:46e2fc5745924b7c840f71ddd277382af29ce1cdb7d5eab5bf697e3fb9999c9e", size = 116999, upload-time = "2026-03-01T18:18:30.831Z" }, ] +[[package]] +name = "greenlet" +version = "3.3.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a3/51/1664f6b78fc6ebbd98019a1fd730e83fa78f2db7058f72b1463d3612b8db/greenlet-3.3.2.tar.gz", hash = "sha256:2eaf067fc6d886931c7962e8c6bede15d2f01965560f3359b27c80bde2d151f2", size = 188267, upload-time = "2026-02-20T20:54:15.531Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ea/ab/1608e5a7578e62113506740b88066bf09888322a311cff602105e619bd87/greenlet-3.3.2-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:ac8d61d4343b799d1e526db579833d72f23759c71e07181c2d2944e429eb09cd", size = 280358, upload-time = "2026-02-20T20:17:43.971Z" }, + { url = "https://files.pythonhosted.org/packages/a5/23/0eae412a4ade4e6623ff7626e38998cb9b11e9ff1ebacaa021e4e108ec15/greenlet-3.3.2-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3ceec72030dae6ac0c8ed7591b96b70410a8be370b6a477b1dbc072856ad02bd", size = 601217, upload-time = "2026-02-20T20:47:31.462Z" }, + { url = "https://files.pythonhosted.org/packages/f8/16/5b1678a9c07098ecb9ab2dd159fafaf12e963293e61ee8d10ecb55273e5e/greenlet-3.3.2-cp312-cp312-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a2a5be83a45ce6188c045bcc44b0ee037d6a518978de9a5d97438548b953a1ac", size = 611792, upload-time = "2026-02-20T20:55:58.423Z" }, + { url = "https://files.pythonhosted.org/packages/50/1f/5155f55bd71cabd03765a4aac9ac446be129895271f73872c36ebd4b04b6/greenlet-3.3.2-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:43e99d1749147ac21dde49b99c9abffcbc1e2d55c67501465ef0930d6e78e070", size = 613875, upload-time = "2026-02-20T20:21:01.102Z" }, + { url = "https://files.pythonhosted.org/packages/fc/dd/845f249c3fcd69e32df80cdab059b4be8b766ef5830a3d0aa9d6cad55beb/greenlet-3.3.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:4c956a19350e2c37f2c48b336a3afb4bff120b36076d9d7fb68cb44e05d95b79", size = 1571467, upload-time = "2026-02-20T20:49:33.495Z" }, + { url = "https://files.pythonhosted.org/packages/2a/50/2649fe21fcc2b56659a452868e695634722a6655ba245d9f77f5656010bf/greenlet-3.3.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:6c6f8ba97d17a1e7d664151284cb3315fc5f8353e75221ed4324f84eb162b395", size = 1640001, upload-time = "2026-02-20T20:21:09.154Z" }, + { url = "https://files.pythonhosted.org/packages/9b/40/cc802e067d02af8b60b6771cea7d57e21ef5e6659912814babb42b864713/greenlet-3.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:34308836d8370bddadb41f5a7ce96879b72e2fdfb4e87729330c6ab52376409f", size = 231081, upload-time = "2026-02-20T20:17:28.121Z" }, + { url = "https://files.pythonhosted.org/packages/58/2e/fe7f36ff1982d6b10a60d5e0740c759259a7d6d2e1dc41da6d96de32fff6/greenlet-3.3.2-cp312-cp312-win_arm64.whl", hash = "sha256:d3a62fa76a32b462a97198e4c9e99afb9ab375115e74e9a83ce180e7a496f643", size = 230331, upload-time = "2026-02-20T20:17:23.34Z" }, + { url = "https://files.pythonhosted.org/packages/ac/48/f8b875fa7dea7dd9b33245e37f065af59df6a25af2f9561efa8d822fde51/greenlet-3.3.2-cp313-cp313-macosx_11_0_universal2.whl", hash = "sha256:aa6ac98bdfd716a749b84d4034486863fd81c3abde9aa3cf8eff9127981a4ae4", size = 279120, upload-time = "2026-02-20T20:19:01.9Z" }, + { url = "https://files.pythonhosted.org/packages/49/8d/9771d03e7a8b1ee456511961e1b97a6d77ae1dea4a34a5b98eee706689d3/greenlet-3.3.2-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ab0c7e7901a00bc0a7284907273dc165b32e0d109a6713babd04471327ff7986", size = 603238, upload-time = "2026-02-20T20:47:32.873Z" }, + { url = "https://files.pythonhosted.org/packages/59/0e/4223c2bbb63cd5c97f28ffb2a8aee71bdfb30b323c35d409450f51b91e3e/greenlet-3.3.2-cp313-cp313-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:d248d8c23c67d2291ffd47af766e2a3aa9fa1c6703155c099feb11f526c63a92", size = 614219, upload-time = "2026-02-20T20:55:59.817Z" }, + { url = "https://files.pythonhosted.org/packages/7a/34/259b28ea7a2a0c904b11cd36c79b8cef8019b26ee5dbe24e73b469dea347/greenlet-3.3.2-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b6997d360a4e6a4e936c0f9625b1c20416b8a0ea18a8e19cabbefc712e7397ab", size = 616774, upload-time = "2026-02-20T20:21:02.454Z" }, + { url = "https://files.pythonhosted.org/packages/0a/03/996c2d1689d486a6e199cb0f1cf9e4aa940c500e01bdf201299d7d61fa69/greenlet-3.3.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:64970c33a50551c7c50491671265d8954046cb6e8e2999aacdd60e439b70418a", size = 1571277, upload-time = "2026-02-20T20:49:34.795Z" }, + { url = "https://files.pythonhosted.org/packages/d9/c4/2570fc07f34a39f2caf0bf9f24b0a1a0a47bc2e8e465b2c2424821389dfc/greenlet-3.3.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:1a9172f5bf6bd88e6ba5a84e0a68afeac9dc7b6b412b245dd64f52d83c81e55b", size = 1640455, upload-time = "2026-02-20T20:21:10.261Z" }, + { url = "https://files.pythonhosted.org/packages/91/39/5ef5aa23bc545aa0d31e1b9b55822b32c8da93ba657295840b6b34124009/greenlet-3.3.2-cp313-cp313-win_amd64.whl", hash = "sha256:a7945dd0eab63ded0a48e4dcade82939783c172290a7903ebde9e184333ca124", size = 230961, upload-time = "2026-02-20T20:16:58.461Z" }, + { url = "https://files.pythonhosted.org/packages/62/6b/a89f8456dcb06becff288f563618e9f20deed8dd29beea14f9a168aef64b/greenlet-3.3.2-cp313-cp313-win_arm64.whl", hash = "sha256:394ead29063ee3515b4e775216cb756b2e3b4a7e55ae8fd884f17fa579e6b327", size = 230221, upload-time = "2026-02-20T20:17:37.152Z" }, + { url = "https://files.pythonhosted.org/packages/3f/ae/8bffcbd373b57a5992cd077cbe8858fff39110480a9d50697091faea6f39/greenlet-3.3.2-cp314-cp314-macosx_11_0_universal2.whl", hash = "sha256:8d1658d7291f9859beed69a776c10822a0a799bc4bfe1bd4272bb60e62507dab", size = 279650, upload-time = "2026-02-20T20:18:00.783Z" }, + { url = "https://files.pythonhosted.org/packages/d1/c0/45f93f348fa49abf32ac8439938726c480bd96b2a3c6f4d949ec0124b69f/greenlet-3.3.2-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:18cb1b7337bca281915b3c5d5ae19f4e76d35e1df80f4ad3c1a7be91fadf1082", size = 650295, upload-time = "2026-02-20T20:47:34.036Z" }, + { url = "https://files.pythonhosted.org/packages/b3/de/dd7589b3f2b8372069ab3e4763ea5329940fc7ad9dcd3e272a37516d7c9b/greenlet-3.3.2-cp314-cp314-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c2e47408e8ce1c6f1ceea0dffcdf6ebb85cc09e55c7af407c99f1112016e45e9", size = 662163, upload-time = "2026-02-20T20:56:01.295Z" }, + { url = "https://files.pythonhosted.org/packages/d2/d8/09bfa816572a4d83bccd6750df1926f79158b1c36c5f73786e26dbe4ee38/greenlet-3.3.2-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:63d10328839d1973e5ba35e98cccbca71b232b14051fd957b6f8b6e8e80d0506", size = 664160, upload-time = "2026-02-20T20:21:04.015Z" }, + { url = "https://files.pythonhosted.org/packages/48/cf/56832f0c8255d27f6c35d41b5ec91168d74ec721d85f01a12131eec6b93c/greenlet-3.3.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:8e4ab3cfb02993c8cc248ea73d7dae6cec0253e9afa311c9b37e603ca9fad2ce", size = 1619181, upload-time = "2026-02-20T20:49:36.052Z" }, + { url = "https://files.pythonhosted.org/packages/0a/23/b90b60a4aabb4cec0796e55f25ffbfb579a907c3898cd2905c8918acaa16/greenlet-3.3.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:94ad81f0fd3c0c0681a018a976e5c2bd2ca2d9d94895f23e7bb1af4e8af4e2d5", size = 1687713, upload-time = "2026-02-20T20:21:11.684Z" }, + { url = "https://files.pythonhosted.org/packages/f3/ca/2101ca3d9223a1dc125140dbc063644dca76df6ff356531eb27bc267b446/greenlet-3.3.2-cp314-cp314-win_amd64.whl", hash = "sha256:8c4dd0f3997cf2512f7601563cc90dfb8957c0cff1e3a1b23991d4ea1776c492", size = 232034, upload-time = "2026-02-20T20:20:08.186Z" }, + { url = "https://files.pythonhosted.org/packages/f6/4a/ecf894e962a59dea60f04877eea0fd5724618da89f1867b28ee8b91e811f/greenlet-3.3.2-cp314-cp314-win_arm64.whl", hash = "sha256:cd6f9e2bbd46321ba3bbb4c8a15794d32960e3b0ae2cc4d49a1a53d314805d71", size = 231437, upload-time = "2026-02-20T20:18:59.722Z" }, + { url = "https://files.pythonhosted.org/packages/98/6d/8f2ef704e614bcf58ed43cfb8d87afa1c285e98194ab2cfad351bf04f81e/greenlet-3.3.2-cp314-cp314t-macosx_11_0_universal2.whl", hash = "sha256:e26e72bec7ab387ac80caa7496e0f908ff954f31065b0ffc1f8ecb1338b11b54", size = 286617, upload-time = "2026-02-20T20:19:29.856Z" }, + { url = "https://files.pythonhosted.org/packages/5e/0d/93894161d307c6ea237a43988f27eba0947b360b99ac5239ad3fe09f0b47/greenlet-3.3.2-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8b466dff7a4ffda6ca975979bab80bdadde979e29fc947ac3be4451428d8b0e4", size = 655189, upload-time = "2026-02-20T20:47:35.742Z" }, + { url = "https://files.pythonhosted.org/packages/f5/2c/d2d506ebd8abcb57386ec4f7ba20f4030cbe56eae541bc6fd6ef399c0b41/greenlet-3.3.2-cp314-cp314t-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:b8bddc5b73c9720bea487b3bffdb1840fe4e3656fba3bd40aa1489e9f37877ff", size = 658225, upload-time = "2026-02-20T20:56:02.527Z" }, + { url = "https://files.pythonhosted.org/packages/8e/30/3a09155fbf728673a1dea713572d2d31159f824a37c22da82127056c44e4/greenlet-3.3.2-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b26b0f4428b871a751968285a1ac9648944cea09807177ac639b030bddebcea4", size = 657907, upload-time = "2026-02-20T20:21:05.259Z" }, + { url = "https://files.pythonhosted.org/packages/f3/fd/d05a4b7acd0154ed758797f0a43b4c0962a843bedfe980115e842c5b2d08/greenlet-3.3.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:1fb39a11ee2e4d94be9a76671482be9398560955c9e568550de0224e41104727", size = 1618857, upload-time = "2026-02-20T20:49:37.309Z" }, + { url = "https://files.pythonhosted.org/packages/6f/e1/50ee92a5db521de8f35075b5eff060dd43d39ebd46c2181a2042f7070385/greenlet-3.3.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:20154044d9085151bc309e7689d6f7ba10027f8f5a8c0676ad398b951913d89e", size = 1680010, upload-time = "2026-02-20T20:21:13.427Z" }, + { url = "https://files.pythonhosted.org/packages/29/4b/45d90626aef8e65336bed690106d1382f7a43665e2249017e9527df8823b/greenlet-3.3.2-cp314-cp314t-win_amd64.whl", hash = "sha256:c04c5e06ec3e022cbfe2cd4a846e1d4e50087444f875ff6d2c2ad8445495cf1a", size = 237086, upload-time = "2026-02-20T20:20:45.786Z" }, +] + [[package]] name = "h11" version = "0.16.0" @@ -163,6 +216,81 @@ 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 = "mako" +version = "1.3.10" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markupsafe" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9e/38/bd5b78a920a64d708fe6bc8e0a2c075e1389d53bef8413725c63ba041535/mako-1.3.10.tar.gz", hash = "sha256:99579a6f39583fa7e5630a28c3c1f440e4e97a414b80372649c0ce338da2ea28", size = 392474, upload-time = "2025-04-10T12:44:31.16Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/87/fb/99f81ac72ae23375f22b7afdb7642aba97c00a713c217124420147681a2f/mako-1.3.10-py3-none-any.whl", hash = "sha256:baef24a52fc4fc514a0887ac600f9f1cff3d82c61d4d700a1fa84d597b88db59", size = 78509, upload-time = "2025-04-10T12:50:53.297Z" }, +] + +[[package]] +name = "markupsafe" +version = "3.0.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7e/99/7690b6d4034fffd95959cbe0c02de8deb3098cc577c67bb6a24fe5d7caa7/markupsafe-3.0.3.tar.gz", hash = "sha256:722695808f4b6457b320fdc131280796bdceb04ab50fe1795cd540799ebe1698", size = 80313, upload-time = "2025-09-27T18:37:40.426Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5a/72/147da192e38635ada20e0a2e1a51cf8823d2119ce8883f7053879c2199b5/markupsafe-3.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d53197da72cc091b024dd97249dfc7794d6a56530370992a5e1a08983ad9230e", size = 11615, upload-time = "2025-09-27T18:36:30.854Z" }, + { url = "https://files.pythonhosted.org/packages/9a/81/7e4e08678a1f98521201c3079f77db69fb552acd56067661f8c2f534a718/markupsafe-3.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1872df69a4de6aead3491198eaf13810b565bdbeec3ae2dc8780f14458ec73ce", size = 12020, upload-time = "2025-09-27T18:36:31.971Z" }, + { url = "https://files.pythonhosted.org/packages/1e/2c/799f4742efc39633a1b54a92eec4082e4f815314869865d876824c257c1e/markupsafe-3.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3a7e8ae81ae39e62a41ec302f972ba6ae23a5c5396c8e60113e9066ef893da0d", size = 24332, upload-time = "2025-09-27T18:36:32.813Z" }, + { url = "https://files.pythonhosted.org/packages/3c/2e/8d0c2ab90a8c1d9a24f0399058ab8519a3279d1bd4289511d74e909f060e/markupsafe-3.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d6dd0be5b5b189d31db7cda48b91d7e0a9795f31430b7f271219ab30f1d3ac9d", size = 22947, upload-time = "2025-09-27T18:36:33.86Z" }, + { url = "https://files.pythonhosted.org/packages/2c/54/887f3092a85238093a0b2154bd629c89444f395618842e8b0c41783898ea/markupsafe-3.0.3-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:94c6f0bb423f739146aec64595853541634bde58b2135f27f61c1ffd1cd4d16a", size = 21962, upload-time = "2025-09-27T18:36:35.099Z" }, + { url = "https://files.pythonhosted.org/packages/c9/2f/336b8c7b6f4a4d95e91119dc8521402461b74a485558d8f238a68312f11c/markupsafe-3.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:be8813b57049a7dc738189df53d69395eba14fb99345e0a5994914a3864c8a4b", size = 23760, upload-time = "2025-09-27T18:36:36.001Z" }, + { url = "https://files.pythonhosted.org/packages/32/43/67935f2b7e4982ffb50a4d169b724d74b62a3964bc1a9a527f5ac4f1ee2b/markupsafe-3.0.3-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:83891d0e9fb81a825d9a6d61e3f07550ca70a076484292a70fde82c4b807286f", size = 21529, upload-time = "2025-09-27T18:36:36.906Z" }, + { url = "https://files.pythonhosted.org/packages/89/e0/4486f11e51bbba8b0c041098859e869e304d1c261e59244baa3d295d47b7/markupsafe-3.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:77f0643abe7495da77fb436f50f8dab76dbc6e5fd25d39589a0f1fe6548bfa2b", size = 23015, upload-time = "2025-09-27T18:36:37.868Z" }, + { 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" }, + { 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]] name = "packaging" version = "26.0" @@ -177,7 +305,10 @@ name = "paperchat-backend" version = "0.1.0" source = { editable = "." } dependencies = [ + { name = "alembic" }, { name = "fastapi" }, + { name = "psycopg", extra = ["binary"] }, + { name = "sqlalchemy" }, { name = "uvicorn", extra = ["standard"] }, ] @@ -186,11 +317,15 @@ dev = [ { name = "httpx" }, { name = "pytest" }, { name = "ruff" }, + { name = "ty" }, ] [package.metadata] requires-dist = [ + { name = "alembic", specifier = ">=1.16.5" }, { name = "fastapi" }, + { name = "psycopg", extras = ["binary"], specifier = ">=3.2.12" }, + { name = "sqlalchemy", specifier = ">=2.0.44" }, { name = "uvicorn", extras = ["standard"] }, ] @@ -199,6 +334,7 @@ dev = [ { name = "httpx" }, { name = "pytest", specifier = ">=8.3.4" }, { name = "ruff", specifier = ">=0.11.0" }, + { name = "ty", specifier = ">=0.0.20" }, ] [[package]] @@ -210,6 +346,64 @@ 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 = "psycopg" +version = "3.3.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions", marker = "python_full_version < '3.13'" }, + { name = "tzdata", marker = "sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/d3/b6/379d0a960f8f435ec78720462fd94c4863e7a31237cf81bf76d0af5883bf/psycopg-3.3.3.tar.gz", hash = "sha256:5e9a47458b3c1583326513b2556a2a9473a1001a56c9efe9e587245b43148dd9", size = 165624, upload-time = "2026-02-18T16:52:16.546Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c8/5b/181e2e3becb7672b502f0ed7f16ed7352aca7c109cfb94cf3878a9186db9/psycopg-3.3.3-py3-none-any.whl", hash = "sha256:f96525a72bcfade6584ab17e89de415ff360748c766f0106959144dcbb38c698", size = 212768, upload-time = "2026-02-18T16:46:27.365Z" }, +] + +[package.optional-dependencies] +binary = [ + { name = "psycopg-binary", marker = "implementation_name != 'pypy'" }, +] + +[[package]] +name = "psycopg-binary" +version = "3.3.3" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/90/15/021be5c0cbc5b7c1ab46e91cc3434eb42569f79a0592e67b8d25e66d844d/psycopg_binary-3.3.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6698dbab5bcef8fdb570fc9d35fd9ac52041771bfcfe6fd0fc5f5c4e36f1e99d", size = 4591170, upload-time = "2026-02-18T16:48:55.594Z" }, + { url = "https://files.pythonhosted.org/packages/f1/54/a60211c346c9a2f8c6b272b5f2bbe21f6e11800ce7f61e99ba75cf8b63e1/psycopg_binary-3.3.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:329ff393441e75f10b673ae99ab45276887993d49e65f141da20d915c05aafd8", size = 4670009, upload-time = "2026-02-18T16:49:03.608Z" }, + { url = "https://files.pythonhosted.org/packages/c1/53/ac7c18671347c553362aadbf65f92786eef9540676ca24114cc02f5be405/psycopg_binary-3.3.3-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:eb072949b8ebf4082ae24289a2b0fd724da9adc8f22743409d6fd718ddb379df", size = 5469735, upload-time = "2026-02-18T16:49:10.128Z" }, + { url = "https://files.pythonhosted.org/packages/7f/c3/4f4e040902b82a344eff1c736cde2f2720f127fe939c7e7565706f96dd44/psycopg_binary-3.3.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:263a24f39f26e19ed7fc982d7859a36f17841b05bebad3eb47bb9cd2dd785351", size = 5152919, upload-time = "2026-02-18T16:49:16.335Z" }, + { url = "https://files.pythonhosted.org/packages/0c/e7/d929679c6a5c212bcf738806c7c89f5b3d0919f2e1685a0e08d6ff877945/psycopg_binary-3.3.3-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5152d50798c2fa5bd9b68ec68eb68a1b71b95126c1d70adaa1a08cd5eefdc23d", size = 6738785, upload-time = "2026-02-18T16:49:22.687Z" }, + { url = "https://files.pythonhosted.org/packages/69/b0/09703aeb69a9443d232d7b5318d58742e8ca51ff79f90ffe6b88f1db45e7/psycopg_binary-3.3.3-cp312-cp312-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:9d6a1e56dd267848edb824dbeb08cf5bac649e02ee0b03ba883ba3f4f0bd54f2", size = 4979008, upload-time = "2026-02-18T16:49:27.313Z" }, + { url = "https://files.pythonhosted.org/packages/cc/a6/e662558b793c6e13a7473b970fee327d635270e41eded3090ef14045a6a5/psycopg_binary-3.3.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:73eaaf4bb04709f545606c1db2f65f4000e8a04cdbf3e00d165a23004692093e", size = 4508255, upload-time = "2026-02-18T16:49:31.575Z" }, + { url = "https://files.pythonhosted.org/packages/5f/7f/0f8b2e1d5e0093921b6f324a948a5c740c1447fbb45e97acaf50241d0f39/psycopg_binary-3.3.3-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:162e5675efb4704192411eaf8e00d07f7960b679cd3306e7efb120bb8d9456cc", size = 4189166, upload-time = "2026-02-18T16:49:35.801Z" }, + { url = "https://files.pythonhosted.org/packages/92/ec/ce2e91c33bc8d10b00c87e2f6b0fb570641a6a60042d6a9ae35658a3a797/psycopg_binary-3.3.3-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:fab6b5e37715885c69f5d091f6ff229be71e235f272ebaa35158d5a46fd548a0", size = 3924544, upload-time = "2026-02-18T16:49:41.129Z" }, + { url = "https://files.pythonhosted.org/packages/c5/2f/7718141485f73a924205af60041c392938852aa447a94c8cbd222ff389a1/psycopg_binary-3.3.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a4aab31bd6d1057f287c96c0effca3a25584eb9cc702f282ecb96ded7814e830", size = 4235297, upload-time = "2026-02-18T16:49:46.726Z" }, + { url = "https://files.pythonhosted.org/packages/57/f9/1add717e2643a003bbde31b1b220172e64fbc0cb09f06429820c9173f7fc/psycopg_binary-3.3.3-cp312-cp312-win_amd64.whl", hash = "sha256:59aa31fe11a0e1d1bcc2ce37ed35fe2ac84cd65bb9036d049b1a1c39064d0f14", size = 3547659, upload-time = "2026-02-18T16:49:52.999Z" }, + { url = "https://files.pythonhosted.org/packages/03/0a/cac9fdf1df16a269ba0e5f0f06cac61f826c94cadb39df028cdfe19d3a33/psycopg_binary-3.3.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:05f32239aec25c5fb15f7948cffdc2dc0dac098e48b80a140e4ba32b572a2e7d", size = 4590414, upload-time = "2026-02-18T16:50:01.441Z" }, + { url = "https://files.pythonhosted.org/packages/9c/c0/d8f8508fbf440edbc0099b1abff33003cd80c9e66eb3a1e78834e3fb4fb9/psycopg_binary-3.3.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:7c84f9d214f2d1de2fafebc17fa68ac3f6561a59e291553dfc45ad299f4898c1", size = 4669021, upload-time = "2026-02-18T16:50:08.803Z" }, + { url = "https://files.pythonhosted.org/packages/04/05/097016b77e343b4568feddf12c72171fc513acef9a4214d21b9478569068/psycopg_binary-3.3.3-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:e77957d2ba17cada11be09a5066d93026cdb61ada7c8893101d7fe1c6e1f3925", size = 5467453, upload-time = "2026-02-18T16:50:14.985Z" }, + { url = "https://files.pythonhosted.org/packages/91/23/73244e5feb55b5ca109cede6e97f32ef45189f0fdac4c80d75c99862729d/psycopg_binary-3.3.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:42961609ac07c232a427da7c87a468d3c82fee6762c220f38e37cfdacb2b178d", size = 5151135, upload-time = "2026-02-18T16:50:24.82Z" }, + { url = "https://files.pythonhosted.org/packages/11/49/5309473b9803b207682095201d8708bbc7842ddf3f192488a69204e36455/psycopg_binary-3.3.3-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ae07a3114313dd91fce686cab2f4c44af094398519af0e0f854bc707e1aeedf1", size = 6737315, upload-time = "2026-02-18T16:50:35.106Z" }, + { url = "https://files.pythonhosted.org/packages/d4/5d/03abe74ef34d460b33c4d9662bf6ec1dd38888324323c1a1752133c10377/psycopg_binary-3.3.3-cp313-cp313-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:d257c58d7b36a621dcce1d01476ad8b60f12d80eb1406aee4cf796f88b2ae482", size = 4979783, upload-time = "2026-02-18T16:50:42.067Z" }, + { url = "https://files.pythonhosted.org/packages/f0/6c/3fbf8e604e15f2f3752900434046c00c90bb8764305a1b81112bff30ba24/psycopg_binary-3.3.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:07c7211f9327d522c9c47560cae00a4ecf6687f4e02d779d035dd3177b41cb12", size = 4509023, upload-time = "2026-02-18T16:50:50.116Z" }, + { url = "https://files.pythonhosted.org/packages/9c/6b/1a06b43b7c7af756c80b67eac8bfaa51d77e68635a8a8d246e4f0bb7604a/psycopg_binary-3.3.3-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:8e7e9eca9b363dbedeceeadd8be97149d2499081f3c52d141d7cd1f395a91f83", size = 4185874, upload-time = "2026-02-18T16:50:55.97Z" }, + { url = "https://files.pythonhosted.org/packages/2b/d3/bf49e3dcaadba510170c8d111e5e69e5ae3f981c1554c5bb71c75ce354bb/psycopg_binary-3.3.3-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:cb85b1d5702877c16f28d7b92ba030c1f49ebcc9b87d03d8c10bf45a2f1c7508", size = 3925668, upload-time = "2026-02-18T16:51:03.299Z" }, + { url = "https://files.pythonhosted.org/packages/f8/92/0aac830ed6a944fe334404e1687a074e4215630725753f0e3e9a9a595b62/psycopg_binary-3.3.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4d4606c84d04b80f9138d72f1e28c6c02dc5ae0c7b8f3f8aaf89c681ce1cd1b1", size = 4234973, upload-time = "2026-02-18T16:51:09.097Z" }, + { url = "https://files.pythonhosted.org/packages/2e/96/102244653ee5a143ece5afe33f00f52fe64e389dfce8dbc87580c6d70d3d/psycopg_binary-3.3.3-cp313-cp313-win_amd64.whl", hash = "sha256:74eae563166ebf74e8d950ff359be037b85723d99ca83f57d9b244a871d6c13b", size = 3551342, upload-time = "2026-02-18T16:51:13.892Z" }, + { url = "https://files.pythonhosted.org/packages/a2/71/7a57e5b12275fe7e7d84d54113f0226080423a869118419c9106c083a21c/psycopg_binary-3.3.3-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:497852c5eaf1f0c2d88ab74a64a8097c099deac0c71de1cbcf18659a8a04a4b2", size = 4607368, upload-time = "2026-02-18T16:51:19.295Z" }, + { url = "https://files.pythonhosted.org/packages/c7/04/cb834f120f2b2c10d4003515ef9ca9d688115b9431735e3936ae48549af8/psycopg_binary-3.3.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:258d1ea53464d29768bf25930f43291949f4c7becc706f6e220c515a63a24edd", size = 4687047, upload-time = "2026-02-18T16:51:23.84Z" }, + { url = "https://files.pythonhosted.org/packages/40/e9/47a69692d3da9704468041aa5ed3ad6fc7f6bb1a5ae788d261a26bbca6c7/psycopg_binary-3.3.3-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:111c59897a452196116db12e7f608da472fbff000693a21040e35fc978b23430", size = 5487096, upload-time = "2026-02-18T16:51:29.645Z" }, + { url = "https://files.pythonhosted.org/packages/0b/b6/0e0dd6a2f802864a4ae3dbadf4ec620f05e3904c7842b326aafc43e5f464/psycopg_binary-3.3.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:17bb6600e2455993946385249a3c3d0af52cd70c1c1cdbf712e9d696d0b0bf1b", size = 5168720, upload-time = "2026-02-18T16:51:36.499Z" }, + { url = "https://files.pythonhosted.org/packages/6f/0d/977af38ac19a6b55d22dff508bd743fd7c1901e1b73657e7937c7cccb0a3/psycopg_binary-3.3.3-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:642050398583d61c9856210568eb09a8e4f2fe8224bf3be21b67a370e677eead", size = 6762076, upload-time = "2026-02-18T16:51:43.167Z" }, + { url = "https://files.pythonhosted.org/packages/34/40/912a39d48322cf86895c0eaf2d5b95cb899402443faefd4b09abbba6b6e1/psycopg_binary-3.3.3-cp314-cp314-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:533efe6dc3a7cba5e2a84e38970786bb966306863e45f3db152007e9f48638a6", size = 4997623, upload-time = "2026-02-18T16:51:47.707Z" }, + { url = "https://files.pythonhosted.org/packages/98/0c/c14d0e259c65dc7be854d926993f151077887391d5a081118907a9d89603/psycopg_binary-3.3.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:5958dbf28b77ce2033482f6cb9ef04d43f5d8f4b7636e6963d5626f000efb23e", size = 4532096, upload-time = "2026-02-18T16:51:51.421Z" }, + { url = "https://files.pythonhosted.org/packages/39/21/8b7c50a194cfca6ea0fd4d1f276158307785775426e90700ab2eba5cd623/psycopg_binary-3.3.3-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:a6af77b6626ce92b5817bf294b4d45ec1a6161dba80fc2d82cdffdd6814fd023", size = 4208884, upload-time = "2026-02-18T16:51:57.336Z" }, + { url = "https://files.pythonhosted.org/packages/c7/2c/a4981bf42cf30ebba0424971d7ce70a222ae9b82594c42fc3f2105d7b525/psycopg_binary-3.3.3-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:47f06fcbe8542b4d96d7392c476a74ada521c5aebdb41c3c0155f6595fc14c8d", size = 3944542, upload-time = "2026-02-18T16:52:04.266Z" }, + { url = "https://files.pythonhosted.org/packages/60/e9/b7c29b56aa0b85a4e0c4d89db691c1ceef08f46a356369144430c155a2f5/psycopg_binary-3.3.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:e7800e6c6b5dc4b0ca7cc7370f770f53ac83886b76afda0848065a674231e856", size = 4254339, upload-time = "2026-02-18T16:52:10.444Z" }, + { url = "https://files.pythonhosted.org/packages/98/5a/291d89f44d3820fffb7a04ebc8f3ef5dda4f542f44a5daea0c55a84abf45/psycopg_binary-3.3.3-cp314-cp314-win_amd64.whl", hash = "sha256:165f22ab5a9513a3d7425ffb7fcc7955ed8ccaeef6d37e369d6cc1dff1582383", size = 3652796, upload-time = "2026-02-18T16:52:14.02Z" }, +] + [[package]] name = "pydantic" version = "2.12.5" @@ -401,6 +595,52 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/fe/4e/cd76eca6db6115604b7626668e891c9dd03330384082e33662fb0f113614/ruff-0.15.5-py3-none-win_arm64.whl", hash = "sha256:b498d1c60d2fe5c10c45ec3f698901065772730b411f164ae270bb6bfcc4740b", size = 10965572, upload-time = "2026-03-05T20:06:16.984Z" }, ] +[[package]] +name = "sqlalchemy" +version = "2.0.48" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "greenlet", marker = "platform_machine == 'AMD64' or platform_machine == 'WIN32' or platform_machine == 'aarch64' or platform_machine == 'amd64' or platform_machine == 'ppc64le' or platform_machine == 'win32' or platform_machine == 'x86_64'" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/1f/73/b4a9737255583b5fa858e0bb8e116eb94b88c910164ed2ed719147bde3de/sqlalchemy-2.0.48.tar.gz", hash = "sha256:5ca74f37f3369b45e1f6b7b06afb182af1fd5dde009e4ffd831830d98cbe5fe7", size = 9886075, upload-time = "2026-03-02T15:28:51.474Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ef/91/a42ae716f8925e9659df2da21ba941f158686856107a61cc97a95e7647a3/sqlalchemy-2.0.48-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:348174f228b99f33ca1f773e85510e08927620caa59ffe7803b37170df30332b", size = 2155737, upload-time = "2026-03-02T15:49:13.207Z" }, + { url = "https://files.pythonhosted.org/packages/b9/52/f75f516a1f3888f027c1cfb5d22d4376f4b46236f2e8669dcb0cddc60275/sqlalchemy-2.0.48-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:53667b5f668991e279d21f94ccfa6e45b4e3f4500e7591ae59a8012d0f010dcb", size = 3337020, upload-time = "2026-03-02T15:50:34.547Z" }, + { url = "https://files.pythonhosted.org/packages/37/9a/0c28b6371e0cdcb14f8f1930778cb3123acfcbd2c95bb9cf6b4a2ba0cce3/sqlalchemy-2.0.48-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:34634e196f620c7a61d18d5cf7dc841ca6daa7961aed75d532b7e58b309ac894", size = 3349983, upload-time = "2026-03-02T15:53:25.542Z" }, + { url = "https://files.pythonhosted.org/packages/1c/46/0aee8f3ff20b1dcbceb46ca2d87fcc3d48b407925a383ff668218509d132/sqlalchemy-2.0.48-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:546572a1793cc35857a2ffa1fe0e58571af1779bcc1ffa7c9fb0839885ed69a9", size = 3279690, upload-time = "2026-03-02T15:50:36.277Z" }, + { url = "https://files.pythonhosted.org/packages/ce/8c/a957bc91293b49181350bfd55e6dfc6e30b7f7d83dc6792d72043274a390/sqlalchemy-2.0.48-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:07edba08061bc277bfdc772dd2a1a43978f5a45994dd3ede26391b405c15221e", size = 3314738, upload-time = "2026-03-02T15:53:27.519Z" }, + { url = "https://files.pythonhosted.org/packages/4b/44/1d257d9f9556661e7bdc83667cc414ba210acfc110c82938cb3611eea58f/sqlalchemy-2.0.48-cp312-cp312-win32.whl", hash = "sha256:908a3fa6908716f803b86896a09a2c4dde5f5ce2bb07aacc71ffebb57986ce99", size = 2115546, upload-time = "2026-03-02T15:54:31.591Z" }, + { url = "https://files.pythonhosted.org/packages/f2/af/c3c7e1f3a2b383155a16454df62ae8c62a30dd238e42e68c24cebebbfae6/sqlalchemy-2.0.48-cp312-cp312-win_amd64.whl", hash = "sha256:68549c403f79a8e25984376480959975212a670405e3913830614432b5daa07a", size = 2142484, upload-time = "2026-03-02T15:54:34.072Z" }, + { url = "https://files.pythonhosted.org/packages/d1/c6/569dc8bf3cd375abc5907e82235923e986799f301cd79a903f784b996fca/sqlalchemy-2.0.48-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:e3070c03701037aa418b55d36532ecb8f8446ed0135acb71c678dbdf12f5b6e4", size = 2152599, upload-time = "2026-03-02T15:49:14.41Z" }, + { url = "https://files.pythonhosted.org/packages/6d/ff/f4e04a4bd5a24304f38cb0d4aa2ad4c0fb34999f8b884c656535e1b2b74c/sqlalchemy-2.0.48-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2645b7d8a738763b664a12a1542c89c940daa55196e8d73e55b169cc5c99f65f", size = 3278825, upload-time = "2026-03-02T15:50:38.269Z" }, + { url = "https://files.pythonhosted.org/packages/fe/88/cb59509e4668d8001818d7355d9995be90c321313078c912420603a7cb95/sqlalchemy-2.0.48-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b19151e76620a412c2ac1c6f977ab1b9fa7ad43140178345136456d5265b32ed", size = 3295200, upload-time = "2026-03-02T15:53:29.366Z" }, + { url = "https://files.pythonhosted.org/packages/87/dc/1609a4442aefd750ea2f32629559394ec92e89ac1d621a7f462b70f736ff/sqlalchemy-2.0.48-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5b193a7e29fd9fa56e502920dca47dffe60f97c863494946bd698c6058a55658", size = 3226876, upload-time = "2026-03-02T15:50:39.802Z" }, + { url = "https://files.pythonhosted.org/packages/37/c3/6ae2ab5ea2fa989fbac4e674de01224b7a9d744becaf59bb967d62e99bed/sqlalchemy-2.0.48-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:36ac4ddc3d33e852da9cb00ffb08cea62ca05c39711dc67062ca2bb1fae35fd8", size = 3265045, upload-time = "2026-03-02T15:53:31.421Z" }, + { url = "https://files.pythonhosted.org/packages/6f/82/ea4665d1bb98c50c19666e672f21b81356bd6077c4574e3d2bbb84541f53/sqlalchemy-2.0.48-cp313-cp313-win32.whl", hash = "sha256:389b984139278f97757ea9b08993e7b9d1142912e046ab7d82b3fbaeb0209131", size = 2113700, upload-time = "2026-03-02T15:54:35.825Z" }, + { url = "https://files.pythonhosted.org/packages/b7/2b/b9040bec58c58225f073f5b0c1870defe1940835549dafec680cbd58c3c3/sqlalchemy-2.0.48-cp313-cp313-win_amd64.whl", hash = "sha256:d612c976cbc2d17edfcc4c006874b764e85e990c29ce9bd411f926bbfb02b9a2", size = 2139487, upload-time = "2026-03-02T15:54:37.079Z" }, + { url = "https://files.pythonhosted.org/packages/f4/f4/7b17bd50244b78a49d22cc63c969d71dc4de54567dc152a9b46f6fae40ce/sqlalchemy-2.0.48-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:69f5bc24904d3bc3640961cddd2523e361257ef68585d6e364166dfbe8c78fae", size = 3558851, upload-time = "2026-03-02T15:57:48.607Z" }, + { url = "https://files.pythonhosted.org/packages/20/0d/213668e9aca61d370f7d2a6449ea4ec699747fac67d4bda1bb3d129025be/sqlalchemy-2.0.48-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fd08b90d211c086181caed76931ecfa2bdfc83eea3cfccdb0f82abc6c4b876cb", size = 3525525, upload-time = "2026-03-02T16:04:38.058Z" }, + { url = "https://files.pythonhosted.org/packages/85/d7/a84edf412979e7d59c69b89a5871f90a49228360594680e667cb2c46a828/sqlalchemy-2.0.48-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:1ccd42229aaac2df431562117ac7e667d702e8e44afdb6cf0e50fa3f18160f0b", size = 3466611, upload-time = "2026-03-02T15:57:50.759Z" }, + { url = "https://files.pythonhosted.org/packages/86/55/42404ce5770f6be26a2b0607e7866c31b9a4176c819e9a7a5e0a055770be/sqlalchemy-2.0.48-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:f0dcbc588cd5b725162c076eb9119342f6579c7f7f55057bb7e3c6ff27e13121", size = 3475812, upload-time = "2026-03-02T16:04:40.092Z" }, + { url = "https://files.pythonhosted.org/packages/ae/ae/29b87775fadc43e627cf582fe3bda4d02e300f6b8f2747c764950d13784c/sqlalchemy-2.0.48-cp313-cp313t-win32.whl", hash = "sha256:9764014ef5e58aab76220c5664abb5d47d5bc858d9debf821e55cfdd0f128485", size = 2141335, upload-time = "2026-03-02T15:52:51.518Z" }, + { url = "https://files.pythonhosted.org/packages/91/44/f39d063c90f2443e5b46ec4819abd3d8de653893aae92df42a5c4f5843de/sqlalchemy-2.0.48-cp313-cp313t-win_amd64.whl", hash = "sha256:e2f35b4cccd9ed286ad62e0a3c3ac21e06c02abc60e20aa51a3e305a30f5fa79", size = 2173095, upload-time = "2026-03-02T15:52:52.79Z" }, + { url = "https://files.pythonhosted.org/packages/f7/b3/f437eaa1cf028bb3c927172c7272366393e73ccd104dcf5b6963f4ab5318/sqlalchemy-2.0.48-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:e2d0d88686e3d35a76f3e15a34e8c12d73fc94c1dea1cd55782e695cc14086dd", size = 2154401, upload-time = "2026-03-02T15:49:17.24Z" }, + { url = "https://files.pythonhosted.org/packages/6c/1c/b3abdf0f402aa3f60f0df6ea53d92a162b458fca2321d8f1f00278506402/sqlalchemy-2.0.48-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:49b7bddc1eebf011ea5ab722fdbe67a401caa34a350d278cc7733c0e88fecb1f", size = 3274528, upload-time = "2026-03-02T15:50:41.489Z" }, + { url = "https://files.pythonhosted.org/packages/f2/5e/327428a034407651a048f5e624361adf3f9fbac9d0fa98e981e9c6ff2f5e/sqlalchemy-2.0.48-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:426c5ca86415d9b8945c7073597e10de9644802e2ff502b8e1f11a7a2642856b", size = 3279523, upload-time = "2026-03-02T15:53:32.962Z" }, + { url = "https://files.pythonhosted.org/packages/2a/ca/ece73c81a918add0965b76b868b7b5359e068380b90ef1656ee995940c02/sqlalchemy-2.0.48-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:288937433bd44e3990e7da2402fabc44a3c6c25d3704da066b85b89a85474ae0", size = 3224312, upload-time = "2026-03-02T15:50:42.996Z" }, + { url = "https://files.pythonhosted.org/packages/88/11/fbaf1ae91fa4ee43f4fe79661cead6358644824419c26adb004941bdce7c/sqlalchemy-2.0.48-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:8183dc57ae7d9edc1346e007e840a9f3d6aa7b7f165203a99e16f447150140d2", size = 3246304, upload-time = "2026-03-02T15:53:34.937Z" }, + { url = "https://files.pythonhosted.org/packages/fa/a8/5fb0deb13930b4f2f698c5541ae076c18981173e27dd00376dbaea7a9c82/sqlalchemy-2.0.48-cp314-cp314-win32.whl", hash = "sha256:1182437cb2d97988cfea04cf6cdc0b0bb9c74f4d56ec3d08b81e23d621a28cc6", size = 2116565, upload-time = "2026-03-02T15:54:38.321Z" }, + { url = "https://files.pythonhosted.org/packages/95/7e/e83615cb63f80047f18e61e31e8e32257d39458426c23006deeaf48f463b/sqlalchemy-2.0.48-cp314-cp314-win_amd64.whl", hash = "sha256:144921da96c08feb9e2b052c5c5c1d0d151a292c6135623c6b2c041f2a45f9e0", size = 2142205, upload-time = "2026-03-02T15:54:39.831Z" }, + { url = "https://files.pythonhosted.org/packages/83/e3/69d8711b3f2c5135e9cde5f063bc1605860f0b2c53086d40c04017eb1f77/sqlalchemy-2.0.48-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5aee45fd2c6c0f2b9cdddf48c48535e7471e42d6fb81adfde801da0bd5b93241", size = 3563519, upload-time = "2026-03-02T15:57:52.387Z" }, + { url = "https://files.pythonhosted.org/packages/f8/4f/a7cce98facca73c149ea4578981594aaa5fd841e956834931de503359336/sqlalchemy-2.0.48-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7cddca31edf8b0653090cbb54562ca027c421c58ddde2c0685f49ff56a1690e0", size = 3528611, upload-time = "2026-03-02T16:04:42.097Z" }, + { url = "https://files.pythonhosted.org/packages/cd/7d/5936c7a03a0b0cb0fa0cc425998821c6029756b0855a8f7ee70fba1de955/sqlalchemy-2.0.48-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:7a936f1bb23d370b7c8cc079d5fce4c7d18da87a33c6744e51a93b0f9e97e9b3", size = 3472326, upload-time = "2026-03-02T15:57:54.423Z" }, + { url = "https://files.pythonhosted.org/packages/f4/33/cea7dfc31b52904efe3dcdc169eb4514078887dff1f5ae28a7f4c5d54b3c/sqlalchemy-2.0.48-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:e004aa9248e8cb0a5f9b96d003ca7c1c0a5da8decd1066e7b53f59eb8ce7c62b", size = 3478453, upload-time = "2026-03-02T16:04:44.584Z" }, + { url = "https://files.pythonhosted.org/packages/c8/95/32107c4d13be077a9cae61e9ae49966a35dc4bf442a8852dd871db31f62e/sqlalchemy-2.0.48-cp314-cp314t-win32.whl", hash = "sha256:b8438ec5594980d405251451c5b7ea9aa58dda38eb7ac35fb7e4c696712ee24f", size = 2147209, upload-time = "2026-03-02T15:52:54.274Z" }, + { url = "https://files.pythonhosted.org/packages/d2/d7/1e073da7a4bc645eb83c76067284a0374e643bc4be57f14cc6414656f92c/sqlalchemy-2.0.48-cp314-cp314t-win_amd64.whl", hash = "sha256:d854b3970067297f3a7fbd7a4683587134aa9b3877ee15aa29eea478dc68f933", size = 2182198, upload-time = "2026-03-02T15:52:55.606Z" }, + { url = "https://files.pythonhosted.org/packages/46/2c/9664130905f03db57961b8980b05cab624afd114bf2be2576628a9f22da4/sqlalchemy-2.0.48-py3-none-any.whl", hash = "sha256:a66fe406437dd65cacd96a72689a3aaaecaebbcd62d81c5ac1c0fdbeac835096", size = 1940202, upload-time = "2026-03-02T15:52:43.285Z" }, +] + [[package]] name = "starlette" version = "0.52.1" @@ -414,6 +654,30 @@ wheels = [ { 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]] +name = "ty" +version = "0.0.21" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ee/20/2ba8fd9493c89c41dfe9dbb73bc70a28b28028463bc0d2897ba8be36230a/ty-0.0.21.tar.gz", hash = "sha256:a4c2ba5d67d64df8fcdefd8b280ac1149d24a73dbda82fa953a0dff9d21400ed", size = 5297967, upload-time = "2026-03-06T01:57:13.809Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/36/70/edf38bb37517531681d1c37f5df64744e5ad02673c02eb48447eae4bea08/ty-0.0.21-py3-none-linux_armv6l.whl", hash = "sha256:7bdf2f572378de78e1f388d24691c89db51b7caf07cf90f2bfcc1d6b18b70a76", size = 10299222, upload-time = "2026-03-06T01:57:16.64Z" }, + { url = "https://files.pythonhosted.org/packages/72/62/0047b0bd19afeefbc7286f20a5f78a2aa39f92b4d89853f0d7185ab89edc/ty-0.0.21-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:7e9613994610431ab8625025bd2880dbcb77c5c9fabdd21134cda12d840a529d", size = 10130513, upload-time = "2026-03-06T01:57:29.93Z" }, + { url = "https://files.pythonhosted.org/packages/a2/20/0b93a9e91aaed23155780258cdfdb4726ef68b6985378ac069bc427291a0/ty-0.0.21-py3-none-macosx_11_0_arm64.whl", hash = "sha256:56d3b198b64dd0a19b2b66e257deaed2ecea568e722ae5352f3c6fb62027f89d", size = 9605425, upload-time = "2026-03-06T01:57:27.115Z" }, + { url = "https://files.pythonhosted.org/packages/ea/fd/9945e2fa2996a1287b1e1d7ce050e97e1f420233b271e770934bfa0880a0/ty-0.0.21-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d23d2c34f7a77d974bb08f0860ef700addc8a683d81a0319f71c08f87506cfd0", size = 10108298, upload-time = "2026-03-06T01:57:35.429Z" }, + { url = "https://files.pythonhosted.org/packages/52/e7/4ec52fcb15f3200826c9f048472c062549a05b0d1ef0b51f32d527b513c4/ty-0.0.21-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:56b01fd2519637a4ca88344f61c96225f540c98ff18bca321d4eaa7bb0f7aa2f", size = 10121556, upload-time = "2026-03-06T01:57:03.242Z" }, + { url = "https://files.pythonhosted.org/packages/ee/c0/ad457be2a8abea0f25549598bd098554540ced66229488daa0d558dad3c8/ty-0.0.21-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e9de7e11c63c6afc40f3e9ba716374add171aee7fabc70b5146a510705c6d41b", size = 10603264, upload-time = "2026-03-06T01:56:52.134Z" }, + { url = "https://files.pythonhosted.org/packages/f8/5b/2ecc7a2175243a4bcb72f5298ae41feabbb93b764bb0dc45722f3752c2c2/ty-0.0.21-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:62f7f5b235c4f7876db305c36997aea07b7af29b1a068f373d0e2547e25f32ff", size = 11196428, upload-time = "2026-03-06T01:57:32.94Z" }, + { url = "https://files.pythonhosted.org/packages/37/f5/aff507d6a901f328ef96a298032b0c11aaaf950a146ed7dd3b5bf2cd3acf/ty-0.0.21-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ee8399f7c453a425291e6688efe430cfae7ab0ac4ffd50eba9f872bf878b54f6", size = 10866355, upload-time = "2026-03-06T01:56:57.831Z" }, + { url = "https://files.pythonhosted.org/packages/be/30/822bbcb92d55b65989aa7ed06d9585f28ade9c9447369194ed4b0fb3b5b9/ty-0.0.21-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:210e7568c9f886c4d01308d751949ee714ad7ad9d7d928d2ba90d329dd880367", size = 10738177, upload-time = "2026-03-06T01:57:11.256Z" }, + { url = "https://files.pythonhosted.org/packages/57/cc/46e7991b6469e93ac2c7e533a028983e402485580150ac864c56352a3a82/ty-0.0.21-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:53508e345b11569f78b21ba8e2b4e61df38a9754947fb3cd9f2ef574367338fb", size = 10079158, upload-time = "2026-03-06T01:57:00.516Z" }, + { url = "https://files.pythonhosted.org/packages/15/c2/0bbdadfbd008240f8f1a87dc877433cb3884436097926107ccf06e618199/ty-0.0.21-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:553e43571f4a35604c36cfd07d8b61a5eb7a714e3c67f8c4ff2cf674fefbaef9", size = 10150535, upload-time = "2026-03-06T01:57:08.815Z" }, + { url = "https://files.pythonhosted.org/packages/c5/b5/2dbdb7b57b5362200ef0a39738ebd31331726328336def0143ac097ee59d/ty-0.0.21-py3-none-musllinux_1_2_i686.whl", hash = "sha256:666f6822e3b9200abfa7e95eb0ddd576460adb8d66b550c0ad2c70abc84a2048", size = 10319803, upload-time = "2026-03-06T01:57:19.106Z" }, + { url = "https://files.pythonhosted.org/packages/72/84/70e52c0b7abc7c2086f9876ef454a73b161d3125315536d8d7e911c94ca4/ty-0.0.21-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:a0854d008347ce4a5fb351af132f660a390ab2a1163444d075251d43e6f74b9b", size = 10826239, upload-time = "2026-03-06T01:57:21.727Z" }, + { url = "https://files.pythonhosted.org/packages/a1/8a/1f72480fd013bbc6cd1929002abbbcde9a0b08ead6a15154de9d7f7fa37e/ty-0.0.21-py3-none-win32.whl", hash = "sha256:bef3ab4c7b966bcc276a8ac6c11b63ba222d21355b48d471ea782c4104eee4e0", size = 9693196, upload-time = "2026-03-06T01:57:24.126Z" }, + { url = "https://files.pythonhosted.org/packages/8d/f8/1104808b875c26c640e536945753a78562d606bef4e241d9dbf3d92477f6/ty-0.0.21-py3-none-win_amd64.whl", hash = "sha256:a709d576e5bea84b745d43058d8b9cd4f27f74a0b24acb4b0cbb7d3d41e0d050", size = 10668660, upload-time = "2026-03-06T01:56:55.06Z" }, + { url = "https://files.pythonhosted.org/packages/1b/b8/25e0adc404bbf986977657b25318991f93097b49f8aea640d93c0b0db68e/ty-0.0.21-py3-none-win_arm64.whl", hash = "sha256:f72047996598ac20553fb7e21ba5741e3c82dee4e9eadf10d954551a5fe09391", size = 10104161, upload-time = "2026-03-06T01:57:06.072Z" }, +] + [[package]] name = "typing-extensions" version = "4.15.0" @@ -435,6 +699,15 @@ 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" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/5e/a7/c202b344c5ca7daf398f3b8a477eeb205cf3b6f32e7ec3a6bac0629ca975/tzdata-2025.3.tar.gz", hash = "sha256:de39c2ca5dc7b0344f2eba86f49d614019d29f060fc4ebc8a417896a620b56a7", size = 196772, upload-time = "2025-12-13T17:45:35.667Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c7/b0/003792df09decd6849a5e39c28b513c06e84436a54440380862b5aeff25d/tzdata-2025.3-py2.py3-none-any.whl", hash = "sha256:06a47e5700f3081aab02b2e513160914ff0694bce9947d6b76ebd6bf57cfc5d1", size = 348521, upload-time = "2025-12-13T17:45:33.889Z" }, +] + [[package]] name = "uvicorn" version = "0.41.0" From c153fc3450c35aa375f33ccf6e929c3aa952bf46 Mon Sep 17 00:00:00 2001 From: kpuhger Date: Sat, 7 Mar 2026 22:24:20 -0800 Subject: [PATCH 3/8] feat(bootstrap): add real storage readiness checks --- backend/paperchat_backend/__init__.py | 1 + backend/paperchat_backend/api/bootstrap.py | 36 +-- backend/paperchat_backend/main.py | 3 +- .../paperchat_backend/services/__init__.py | 3 + .../paperchat_backend/services/bootstrap.py | 227 ++++++++++++++++++ backend/tests/test_bootstrap.py | 171 ++++++++++++- 6 files changed, 397 insertions(+), 44 deletions(-) create mode 100644 backend/paperchat_backend/services/__init__.py create mode 100644 backend/paperchat_backend/services/bootstrap.py diff --git a/backend/paperchat_backend/__init__.py b/backend/paperchat_backend/__init__.py index e69de29..3dc1f76 100644 --- a/backend/paperchat_backend/__init__.py +++ b/backend/paperchat_backend/__init__.py @@ -0,0 +1 @@ +__version__ = "0.1.0" diff --git a/backend/paperchat_backend/api/bootstrap.py b/backend/paperchat_backend/api/bootstrap.py index 659b86a..8e3a758 100644 --- a/backend/paperchat_backend/api/bootstrap.py +++ b/backend/paperchat_backend/api/bootstrap.py @@ -1,12 +1,7 @@ from fastapi import APIRouter -from paperchat_backend.models.bootstrap import ( - BootstrapError, - BootstrapResponse, - BootstrapStatus, - CheckResult, - HealthResponse, -) +from paperchat_backend.models.bootstrap import BootstrapResponse, HealthResponse +from paperchat_backend.services import build_bootstrap_response router = APIRouter() @@ -18,29 +13,4 @@ def health() -> HealthResponse: @router.get("/api/bootstrap") def bootstrap() -> BootstrapResponse: - checks = { - "backend": CheckResult(ok=True), - "database": CheckResult(ok=True), - "docker": CheckResult(ok=True), - "migrations": CheckResult(ok=True), - } - - errors: list[BootstrapError] = [] - for name, check in checks.items(): - if not check.ok: - errors.append( - BootstrapError( - code=f"{name}_failed", - message=check.message or f"{name} check failed", - action=f"Check {name} configuration", - ) - ) - - status = BootstrapStatus.ready if all(c.ok for c in checks.values()) else BootstrapStatus.error - - return BootstrapResponse( - app_version="0.1.0", - status=status, - checks=checks, - errors=errors, - ) + return build_bootstrap_response() diff --git a/backend/paperchat_backend/main.py b/backend/paperchat_backend/main.py index f4d551e..a6defd0 100644 --- a/backend/paperchat_backend/main.py +++ b/backend/paperchat_backend/main.py @@ -1,4 +1,5 @@ import os +from typing import Any, cast import uvicorn from fastapi import FastAPI @@ -10,7 +11,7 @@ def create_app() -> FastAPI: app = FastAPI() app.add_middleware( - CORSMiddleware, + cast(Any, CORSMiddleware), allow_origins=["http://localhost:5173", "http://127.0.0.1:5173"], allow_credentials=True, allow_methods=["*"], diff --git a/backend/paperchat_backend/services/__init__.py b/backend/paperchat_backend/services/__init__.py new file mode 100644 index 0000000..6802b2c --- /dev/null +++ b/backend/paperchat_backend/services/__init__.py @@ -0,0 +1,3 @@ +from paperchat_backend.services.bootstrap import build_bootstrap_response + +__all__ = ["build_bootstrap_response"] diff --git a/backend/paperchat_backend/services/bootstrap.py b/backend/paperchat_backend/services/bootstrap.py new file mode 100644 index 0000000..208f647 --- /dev/null +++ b/backend/paperchat_backend/services/bootstrap.py @@ -0,0 +1,227 @@ +import subprocess +from collections.abc import Sequence +from dataclasses import dataclass +from shutil import which + +from alembic.config import Config +from alembic.runtime.migration import MigrationContext +from alembic.script import ScriptDirectory +from alembic.util.exc import CommandError +from sqlalchemy import text +from sqlalchemy.exc import SQLAlchemyError + +from paperchat_backend import __version__ +from paperchat_backend.config import ( + ALEMBIC_DIR, + ALEMBIC_INI_PATH, + COMPOSE_FILE, + DOCKER_BINARY, + DOCKER_SERVICE, + get_database_url, +) +from paperchat_backend.db.engine import get_engine +from paperchat_backend.models.bootstrap import ( + BootstrapError, + BootstrapResponse, + BootstrapStatus, + CheckResult, +) + +CHECK_ACTIONS = { + "docker": "Install Docker Desktop and start the local PaperChat database container.", + "database": "Start the local Postgres container and confirm the configured port is reachable.", + "migrations": "Run the backend migrations so the database revision matches the application.", + "pgvector": "Recreate the local database with the pgvector image or install the vector extension.", +} +DATABASE_BLOCKED_MESSAGE = "Database must be reachable before this check can run." +DOCKER_COMMAND_TIMEOUT_SECONDS = 5 + + +@dataclass(frozen=True, slots=True) +class CompletedCheck: + name: str + result: CheckResult + + +def _completed_check(name: str, *, ok: bool, message: str) -> CompletedCheck: + return CompletedCheck(name=name, result=CheckResult(ok=ok, message=message)) + + +def build_bootstrap_response() -> BootstrapResponse: + checks = {"backend": CheckResult(ok=True, message=f"Backend {__version__} is running.")} + + for check in (_check_docker_runtime(), _check_database()): + checks[check.name] = check.result + + if checks["database"].ok: + for check in (_check_migrations(), _check_pgvector()): + checks[check.name] = check.result + else: + for name in ("migrations", "pgvector"): + checks[name] = CheckResult(ok=False, message=DATABASE_BLOCKED_MESSAGE) + + errors = [ + BootstrapError( + code=f"{name}_failed", + message=check.message or f"{name} check failed.", + action=CHECK_ACTIONS[name], + ) + for name, check in checks.items() + if name != "backend" and not check.ok + ] + + return BootstrapResponse( + app_version=__version__, + status=BootstrapStatus.ready if not errors else BootstrapStatus.error, + checks=checks, + errors=errors, + ) + + +def _check_docker_runtime() -> CompletedCheck: + if not COMPOSE_FILE.is_file(): + return _completed_check( + "docker", + ok=False, + message=f"Compose file not found at {COMPOSE_FILE}.", + ) + + docker_binary = which(DOCKER_BINARY) + if docker_binary is None: + return _completed_check("docker", ok=False, message="Docker CLI is not installed.") + + version_result = _run_docker_command([docker_binary, "compose", "version"]) + if isinstance(version_result, CompletedCheck): + return version_result + + compose_command = [docker_binary, "compose", "-f", str(COMPOSE_FILE)] + ps_result = _run_docker_command([*compose_command, "ps", "--services", "--status", "running"]) + if isinstance(ps_result, CompletedCheck): + return ps_result + + if DOCKER_SERVICE not in ps_result.stdout.split(): + return _completed_check( + "docker", + ok=False, + message=f"Compose service '{DOCKER_SERVICE}' is not running.", + ) + + return _completed_check("docker", ok=True, message="Docker runtime is ready.") + + +def _check_database() -> CompletedCheck: + try: + with get_engine().connect() as connection: + connection.execute(text("SELECT 1")) + except SQLAlchemyError as error: + return _completed_check( + "database", + ok=False, + message=str(error.__cause__ or error), + ) + + return _completed_check("database", ok=True, message="Connected to Postgres.") + + +def _check_migrations() -> CompletedCheck: + message: str | None = None + head_revision: str | None = None + + if not ALEMBIC_INI_PATH.is_file(): + message = f"Alembic config not found at {ALEMBIC_INI_PATH}." + elif not ALEMBIC_DIR.is_dir(): + message = f"Alembic scripts not found at {ALEMBIC_DIR}." + else: + try: + alembic_config = Config(str(ALEMBIC_INI_PATH)) + alembic_config.set_main_option("script_location", str(ALEMBIC_DIR)) + alembic_config.set_main_option("sqlalchemy.url", get_database_url()) + head_revision = ScriptDirectory.from_config(alembic_config).get_current_head() + except CommandError as error: + message = str(error) + + if message is None and head_revision is None: + message = "No Alembic head revision is defined." + + if message is None: + try: + with get_engine().connect() as connection: + current_revision = MigrationContext.configure(connection).get_current_revision() + except SQLAlchemyError as error: + message = str(error.__cause__ or error) + else: + if current_revision != head_revision: + message = ( + f"Database revision {current_revision or 'none'} does not match " + f"head {head_revision}." + ) + + if message is not None: + return _completed_check("migrations", ok=False, message=message) + + return _completed_check( + "migrations", ok=True, message=f"Migration revision {head_revision} is current." + ) + + +def _check_pgvector() -> CompletedCheck: + try: + with get_engine().connect() as connection: + extension_version = connection.scalar( + text("SELECT extversion FROM pg_extension WHERE extname = 'vector'") + ) + except SQLAlchemyError as error: + return _completed_check( + "pgvector", + ok=False, + message=str(error.__cause__ or error), + ) + + if extension_version is None: + return _completed_check( + "pgvector", + ok=False, + message="pgvector extension is not installed.", + ) + + return _completed_check( + "pgvector", + ok=True, + message=f"pgvector extension {extension_version} is installed.", + ) + + +def _run_command(command: Sequence[str]) -> subprocess.CompletedProcess[str]: + return subprocess.run( + command, + check=False, + capture_output=True, + text=True, + timeout=DOCKER_COMMAND_TIMEOUT_SECONDS, + ) + + +def _run_docker_command( + command: Sequence[str], +) -> subprocess.CompletedProcess[str] | CompletedCheck: + try: + result = _run_command(command) + except subprocess.TimeoutExpired: + return _completed_check("docker", ok=False, message="Docker command timed out.") + + if result.returncode == 0: + return result + + return _completed_check( + "docker", + ok=False, + message=_command_error_message(result.stderr, result.stdout), + ) + + +def _command_error_message(stderr: str, stdout: str) -> str: + message = stderr.strip() or stdout.strip() + if message: + return message + + return "Docker command failed without output." diff --git a/backend/tests/test_bootstrap.py b/backend/tests/test_bootstrap.py index 5adfeec..b90fb1e 100644 --- a/backend/tests/test_bootstrap.py +++ b/backend/tests/test_bootstrap.py @@ -1,34 +1,185 @@ +from typing import Any, cast + +import pytest from fastapi.testclient import TestClient from paperchat_backend.main import create_app +from paperchat_backend.models.bootstrap import CheckResult +from paperchat_backend.services import bootstrap as bootstrap_service client = TestClient(create_app()) -def test_bootstrap_returns_200(): +def make_check(name: str, *, ok: bool, message: str) -> bootstrap_service.CompletedCheck: + return bootstrap_service.CompletedCheck(name=name, result=CheckResult(ok=ok, message=message)) + + +DEFAULT_READY_CHECKS = { + "docker": make_check("docker", ok=True, message="Docker runtime is ready."), + "database": make_check("database", ok=True, message="Connected to Postgres."), + "migrations": make_check( + "migrations", + ok=True, + message="Migration revision 0001_initial_schema is current.", + ), + "pgvector": make_check("pgvector", ok=True, message="pgvector extension 0.8.1 is installed."), +} + + +def patch_bootstrap_checks( + monkeypatch: pytest.MonkeyPatch, + *, + docker: bootstrap_service.CompletedCheck | None = None, + database: bootstrap_service.CompletedCheck | None = None, + migrations: bootstrap_service.CompletedCheck | None = None, + pgvector: bootstrap_service.CompletedCheck | None = None, +) -> None: + checks = { + **DEFAULT_READY_CHECKS, + "docker": docker or DEFAULT_READY_CHECKS["docker"], + "database": database or DEFAULT_READY_CHECKS["database"], + "migrations": migrations or DEFAULT_READY_CHECKS["migrations"], + "pgvector": pgvector or DEFAULT_READY_CHECKS["pgvector"], + } + monkeypatch.setattr( + bootstrap_service, + "_check_docker_runtime", + lambda: checks["docker"], + ) + monkeypatch.setattr( + bootstrap_service, + "_check_database", + lambda: checks["database"], + ) + monkeypatch.setattr( + bootstrap_service, + "_check_migrations", + lambda: checks["migrations"], + ) + monkeypatch.setattr( + bootstrap_service, + "_check_pgvector", + lambda: checks["pgvector"], + ) + + +def get_bootstrap_data( + monkeypatch: pytest.MonkeyPatch, + **checks: bootstrap_service.CompletedCheck | None, +) -> dict[str, Any]: + patch_bootstrap_checks(monkeypatch, **checks) + return cast(dict[str, Any], client.get("/api/bootstrap").json()) + + +def test_bootstrap_returns_200(monkeypatch: pytest.MonkeyPatch): + patch_bootstrap_checks(monkeypatch) response = client.get("/api/bootstrap") assert response.status_code == 200 -def test_bootstrap_has_valid_structure(): - data = client.get("/api/bootstrap").json() +def test_bootstrap_has_valid_structure(monkeypatch: pytest.MonkeyPatch): + data = get_bootstrap_data(monkeypatch) assert "app_version" in data assert "status" in data assert "checks" in data assert "errors" in data -def test_backend_check_is_ok(): - data = client.get("/api/bootstrap").json() +def test_backend_check_is_ok(monkeypatch: pytest.MonkeyPatch): + data = get_bootstrap_data(monkeypatch) assert data["checks"]["backend"]["ok"] is True -def test_status_is_ready(): - data = client.get("/api/bootstrap").json() +def test_status_is_ready(monkeypatch: pytest.MonkeyPatch): + data = get_bootstrap_data(monkeypatch) assert data["status"] == "ready" -def test_all_expected_checks_present(): - data = client.get("/api/bootstrap").json() - expected = {"backend", "database", "docker", "migrations"} +def test_all_expected_checks_present(monkeypatch: pytest.MonkeyPatch): + data = get_bootstrap_data(monkeypatch) + expected = {"backend", "database", "docker", "migrations", "pgvector"} assert set(data["checks"].keys()) == expected + + +@pytest.mark.parametrize( + ("check_patch", "expected_checks", "expected_errors"), + [ + ( + {"docker": make_check("docker", ok=False, message="Docker is unavailable")}, + { + "docker": {"ok": False, "message": "Docker is unavailable"}, + }, + { + "code": "docker_failed", + "message": "Docker is unavailable", + "action": bootstrap_service.CHECK_ACTIONS["docker"], + }, + ), + ( + { + "database": make_check( + "database", + ok=False, + message="Database connection failed", + ) + }, + { + "database": {"ok": False, "message": "Database connection failed"}, + "migrations": { + "ok": False, + "message": bootstrap_service.DATABASE_BLOCKED_MESSAGE, + }, + "pgvector": { + "ok": False, + "message": bootstrap_service.DATABASE_BLOCKED_MESSAGE, + }, + }, + { + "code": "database_failed", + "message": "Database connection failed", + "action": bootstrap_service.CHECK_ACTIONS["database"], + }, + ), + ( + {"migrations": make_check("migrations", ok=False, message="Pending migrations")}, + { + "migrations": {"ok": False, "message": "Pending migrations"}, + }, + { + "code": "migrations_failed", + "message": "Pending migrations", + "action": bootstrap_service.CHECK_ACTIONS["migrations"], + }, + ), + ( + { + "pgvector": make_check( + "pgvector", + ok=False, + message="pgvector extension is missing", + ) + }, + { + "pgvector": {"ok": False, "message": "pgvector extension is missing"}, + }, + { + "code": "pgvector_failed", + "message": "pgvector extension is missing", + "action": bootstrap_service.CHECK_ACTIONS["pgvector"], + }, + ), + ], +) +def test_bootstrap_reports_storage_failure_paths( + monkeypatch: pytest.MonkeyPatch, + check_patch: dict[str, bootstrap_service.CompletedCheck], + expected_checks: dict[str, dict[str, str | bool | None]], + expected_errors: dict[str, str], +): + data = get_bootstrap_data(monkeypatch, **check_patch) + + assert data["status"] != "ready" + for check_name, expected_check in expected_checks.items(): + assert data["checks"][check_name] == expected_check + + assert expected_errors in data["errors"] From 9e9f43a1bcd6bbc9cabdd1c76a4a13171a1cfca5 Mon Sep 17 00:00:00 2001 From: kpuhger Date: Sat, 7 Mar 2026 22:24:26 -0800 Subject: [PATCH 4/8] ci(repo): validate the storage runtime in automation --- .github/workflows/ci.yml | 98 ++++++++++++++++++++++++++++++++++++++++ frontend/package.json | 1 + 2 files changed, 99 insertions(+) create mode 100644 .github/workflows/ci.yml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..58628f5 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,98 @@ +name: CI + +on: + pull_request: + push: + branches: + - main + workflow_dispatch: + +permissions: + contents: read + +jobs: + frontend: + name: Frontend + runs-on: ubuntu-latest + timeout-minutes: 10 + + steps: + - name: Check Out Repository + uses: actions/checkout@v6 + + - name: Set Up pnpm + uses: pnpm/action-setup@v4 + + - name: Set Up Node.js + uses: actions/setup-node@v6 + with: + node-version: 22 + cache: pnpm + cache-dependency-path: frontend/pnpm-lock.yaml + + - name: Install Frontend Dependencies + working-directory: frontend + run: pnpm install --frozen-lockfile + + - name: Lint Frontend + working-directory: frontend + run: pnpm lint + + - name: Build Frontend + working-directory: frontend + run: pnpm build + + backend: + name: Backend + runs-on: ubuntu-latest + timeout-minutes: 15 + env: + PAPERCHAT_DATABASE_URL: postgresql+psycopg://paperchat:paperchat@127.0.0.1:5433/paperchat + + steps: + - name: Check Out Repository + uses: actions/checkout@v6 + + - name: Set Up uv + uses: astral-sh/setup-uv@v7 + with: + python-version: "3.12" + enable-cache: true + + - name: Install Backend Dependencies + working-directory: backend + run: uv sync --locked --group dev + + - name: Validate Compose Configuration + run: docker compose -f compose.yaml config + + - name: Start Local Postgres Runtime + run: ./scripts/postgres-up.sh + + - name: Apply Backend Migrations + working-directory: backend + run: uv run alembic upgrade head + + - name: Lint Backend + working-directory: backend + run: uv run ruff check + + - name: Check Backend Formatting + working-directory: backend + run: uv run ruff format --check + + - name: Type Check Backend + working-directory: backend + run: uv run ty check + + - name: Test Backend + working-directory: backend + run: uv run pytest + + - name: Show Postgres Logs On Failure + if: failure() + run: docker compose -f compose.yaml logs postgres + + - name: Stop Local Postgres Runtime + if: always() + run: docker compose -f compose.yaml down -v diff --git a/frontend/package.json b/frontend/package.json index 6c11f40..15f8b62 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -3,6 +3,7 @@ "private": true, "version": "0.0.0", "type": "module", + "packageManager": "pnpm@10.30.3", "scripts": { "dev": "vite", "build": "tsc -b && vite build", From f1768d0e39579b995fdd692a39da873cf91aea50 Mon Sep 17 00:00:00 2001 From: kpuhger Date: Sat, 7 Mar 2026 22:27:31 -0800 Subject: [PATCH 5/8] fix(storage): normalize alembic imports --- backend/alembic/env.py | 2 +- backend/alembic/versions/0001_initial_schema.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/backend/alembic/env.py b/backend/alembic/env.py index b44ea30..63954c4 100644 --- a/backend/alembic/env.py +++ b/backend/alembic/env.py @@ -5,9 +5,9 @@ import os from logging.config import fileConfig -from alembic import context from sqlalchemy import engine_from_config, pool +from alembic import context from paperchat_backend.db.schema import Base config = context.config diff --git a/backend/alembic/versions/0001_initial_schema.py b/backend/alembic/versions/0001_initial_schema.py index 9728490..d780546 100644 --- a/backend/alembic/versions/0001_initial_schema.py +++ b/backend/alembic/versions/0001_initial_schema.py @@ -1,9 +1,9 @@ """Create the initial backend database schema.""" import sqlalchemy as sa -from alembic import op from sqlalchemy.dialects import postgresql +from alembic import op from paperchat_backend.db.schema import ( DOCUMENT_STATUS_LENGTH, MESSAGE_ROLE_LENGTH, From 775635046266e4e8b25a74a713a28ccf07c49bff Mon Sep 17 00:00:00 2001 From: kpuhger Date: Sat, 7 Mar 2026 22:30:31 -0800 Subject: [PATCH 6/8] chore(lint): align pre-commit with backend ruff commands --- .pre-commit-config.yaml | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index e9f2526..fda1989 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -12,10 +12,17 @@ repos: - id: check-merge-conflict - id: check-executables-have-shebangs - - repo: https://github.com/astral-sh/ruff-pre-commit - rev: "v0.15.1" + - repo: local hooks: - id: ruff - args: [--exit-non-zero-on-fix, --config=backend/pyproject.toml] + name: ruff (legacy alias) + entry: /bin/zsh -lc 'cd backend && uv run ruff check' + language: system + files: ^backend/ + pass_filenames: false - id: ruff-format - args: [--config=backend/pyproject.toml] + name: ruff format + entry: /bin/zsh -lc 'cd backend && uv run ruff format --check' + language: system + files: ^backend/ + pass_filenames: false From 3d3cb0820a66d972dc259cf742f44b0013451ae0 Mon Sep 17 00:00:00 2001 From: kpuhger Date: Sat, 7 Mar 2026 22:32:23 -0800 Subject: [PATCH 7/8] chore(repo): remove legacy prototype code --- .python-version | 1 - LICENSE | 21 - app.py | 107 - docs/assets/logo.png | Bin 760849 -> 0 bytes evaluation/calculate_metrics.py | 177 -- evaluation/download_beir.py | 85 - evaluation/run_evaluation.py | 215 -- evaluation/run_retrieval.py | 320 --- paperchat/__init__.py | 0 paperchat/cli.py | 9 - paperchat/core/__init__.py | 6 - paperchat/core/embeddings.py | 134 - paperchat/core/ingestion.py | 87 - paperchat/core/rag_pipeline.py | 97 - paperchat/core/vector_store.py | 486 ---- paperchat/llms/__init__.py | 15 - paperchat/llms/anthropic.py | 106 - paperchat/llms/common.py | 183 -- paperchat/llms/gemini.py | 106 - paperchat/llms/manager.py | 63 - paperchat/llms/openai.py | 95 - paperchat/ui/__init__.py | 38 - paperchat/ui/api_settings.py | 177 -- paperchat/ui/chat.py | 209 -- paperchat/ui/common.py | 206 -- paperchat/ui/document.py | 454 ---- paperchat/ui/settings.py | 608 ----- paperchat/utils/__init__.py | 0 paperchat/utils/api_keys.py | 184 -- paperchat/utils/config.py | 32 - paperchat/utils/formatting.py | 164 -- paperchat/utils/logging.py | 83 - paperchat/utils/settings.py | 116 - pyproject.toml | 96 - tests/__init__.py | 0 tests/test_api_keys.py | 177 -- tests/test_ingestion.py | 134 - tests/test_rag_pipeline.py | 162 -- tests/test_vector_store.py | 523 ---- uv.lock | 4065 ------------------------------- 40 files changed, 9741 deletions(-) delete mode 100644 .python-version delete mode 100644 LICENSE delete mode 100644 app.py delete mode 100644 docs/assets/logo.png delete mode 100644 evaluation/calculate_metrics.py delete mode 100644 evaluation/download_beir.py delete mode 100644 evaluation/run_evaluation.py delete mode 100644 evaluation/run_retrieval.py delete mode 100644 paperchat/__init__.py delete mode 100644 paperchat/cli.py delete mode 100644 paperchat/core/__init__.py delete mode 100644 paperchat/core/embeddings.py delete mode 100644 paperchat/core/ingestion.py delete mode 100644 paperchat/core/rag_pipeline.py delete mode 100644 paperchat/core/vector_store.py delete mode 100644 paperchat/llms/__init__.py delete mode 100644 paperchat/llms/anthropic.py delete mode 100644 paperchat/llms/common.py delete mode 100644 paperchat/llms/gemini.py delete mode 100644 paperchat/llms/manager.py delete mode 100644 paperchat/llms/openai.py delete mode 100644 paperchat/ui/__init__.py delete mode 100644 paperchat/ui/api_settings.py delete mode 100644 paperchat/ui/chat.py delete mode 100644 paperchat/ui/common.py delete mode 100644 paperchat/ui/document.py delete mode 100644 paperchat/ui/settings.py delete mode 100644 paperchat/utils/__init__.py delete mode 100644 paperchat/utils/api_keys.py delete mode 100644 paperchat/utils/config.py delete mode 100644 paperchat/utils/formatting.py delete mode 100644 paperchat/utils/logging.py delete mode 100644 paperchat/utils/settings.py delete mode 100644 pyproject.toml delete mode 100644 tests/__init__.py delete mode 100644 tests/test_api_keys.py delete mode 100644 tests/test_ingestion.py delete mode 100644 tests/test_rag_pipeline.py delete mode 100644 tests/test_vector_store.py delete mode 100644 uv.lock diff --git a/.python-version b/.python-version deleted file mode 100644 index 24ee5b1..0000000 --- a/.python-version +++ /dev/null @@ -1 +0,0 @@ -3.13 diff --git a/LICENSE b/LICENSE deleted file mode 100644 index 6d6e9cd..0000000 --- a/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2025 Kyle Puhger - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/app.py b/app.py deleted file mode 100644 index 519f35f..0000000 --- a/app.py +++ /dev/null @@ -1,107 +0,0 @@ -import os - -import streamlit as st - -from paperchat.ui import ( - check_model_config_changes, - refresh_model_state, - render_api_key_setup, - render_main_content, - render_settings_page, - render_sidebar, - set_css_styles, -) -from paperchat.utils.api_keys import get_api_key -from paperchat.utils.config import DEFAULT_MAX_TOKENS, DEFAULT_MODEL, DEFAULT_PROVIDER - -os.environ["TOKENIZERS_PARALLELISM"] = "false" - -st.set_page_config( - page_title="PaperChat - PDF Chat", - page_icon="📚", - layout="wide", - initial_sidebar_state="expanded", -) - - -set_css_styles() - - -def initialize_document_state() -> None: - """Initialize document-related session state variables.""" - if "filenames" not in st.session_state: - # stores hash -> original filename string - st.session_state.filenames = {} - if "active_document_hash" not in st.session_state: - # hash of the currently selected doc for chatting - st.session_state.active_document_hash = None - if "document_sources" not in st.session_state: - # stores hash -> source info ("vector_store" or "session") - st.session_state.document_sources = {} - - -def initialize_model_state() -> None: - """Initialize model and settings-related session state variables.""" - if "config" not in st.session_state: - st.session_state.config = { - "provider_name": DEFAULT_PROVIDER, - "model_id": DEFAULT_MODEL, - "temperature": 0.7, - "max_tokens": DEFAULT_MAX_TOKENS, - "top_k": 5, - } - - if "provider_settings" not in st.session_state: - provider_name = st.session_state.config.get("provider_name", DEFAULT_PROVIDER) - st.session_state.provider_settings = { - provider_name: { - "model": st.session_state.config.get("model_id", DEFAULT_MODEL), - "temperature": st.session_state.config.get("temperature", 0.7), - } - } - - if "settings" not in st.session_state: - st.session_state.settings = {"top_k": st.session_state.config.get("top_k", 5)} - - if "llm_manager" not in st.session_state or "rag_pipeline" not in st.session_state: - refresh_model_state() - - -def initialize_session() -> None: - """Initialize all session state variables and components in one place.""" - if "messages" not in st.session_state: - st.session_state.messages = [] - - initialize_document_state() - initialize_model_state() - - if "show_api_setup" not in st.session_state: - st.session_state.show_api_setup = False - if "show_settings" not in st.session_state: - st.session_state.show_settings = False - - -def main() -> None: - """Main entry point for the Streamlit app.""" - initialize_session() - check_model_config_changes() - provider_name = st.session_state.config.get("provider_name", DEFAULT_PROVIDER) - provider_key = get_api_key(provider_name) - - if not provider_key or st.session_state.show_api_setup: - render_api_key_setup() - st.stop() - - st.title("🤖 PaperChat - Chat with your research library") - if st.session_state.show_settings: - render_settings_page(on_save_callback=lambda: refresh_model_state()) - st.stop() - - with st.sidebar: - render_sidebar() - - render_main_content() - - -if __name__ == "__main__": - main() diff --git a/docs/assets/logo.png b/docs/assets/logo.png deleted file mode 100644 index 95c1afef02026c025ef09050f76230626b9c5757..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 760849 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

  • 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

    )8~ipvk@4*h?H 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

  • s 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%0A=6_|9R7G7=}VzEJ$SXx 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

    i@Rr*^memh@oXV& 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

    J%G5$OKH)9DJ_19D|VorNA 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 z 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

    XK#= zqF@-+x50%s)ydV~sln&=>|=s#yBaOm_vuA?lQ1=v>3fTL@zfkpNvsf4gF*AP&!{oY z93nl?bJl7f|DJ3H7#B_+tyVyW4Ic1dlv)pi3yr_3JUW#$HJNBdhTgxJm8@OIcsf@J z#I$3=VP?Wd8;CyP1+Y}M-6Wi_5eQTtx7`>;z#_w&8I0-#qPNOE;`jUyZrxd8b>Megp`dln+4&-uphIA=n_g_yG-;BX38WfA_5<=|<9b zfHU zPG2zYcec=8hU>5@AjC${fc96+ie~X^BE(vTG9!*Ot8@T|dD7GjDB6&5isK}lI*Q0{ zV}>2*=^*Z-6?f|5YGM*&1)`F6rpK4R=*P!;e(!s)=l7N8l|!?hT?;`)#~ZH|Pgh%n zVU{5t*^U%r{*U16fJFa z&)ZQ)gV#tL9v?e*+PQ?G<@&01^FwWX^|OBvHoi$UZc;@JT1NJ}dBtsTp7I7BvZkq> zWPG071&S1^;6t@2`UptK4D&-W#8D}T5cs48{$3?3X8pXp(TYDJKglvs?`Ev0ul5G> zEIkVcUZ=6mF!o8SW2<7FTE%=lRm)y$zcMXmGvLIK8}8u|fi}P6uceXN*@T_5I4Gr9 z_4|yo

    - PaperChat logo -

    +# PaperChat ---- +PaperChat is a local web app for grounded chat over user-owned PDFs. -Paperchat is an AI-powered assistant that helps you take your research to the next level by enabling you to chat with your research library. +The live code paths are: -## Installation +- `frontend/` for the React app +- `backend/` for the local Python API +- `compose.yaml` for the local Postgres + `pgvector` runtime -The easiest and fastest way to install PaperChat is using [uv](https://github.com/astral-sh/uv): +## Local Development -```bash -uv tool install git+https://github.com/kpeez/paperchat.git -``` - -This will install PaperChat and make it available as a command-line tool. - -To launch PaperChat, run: +Start the database: ```bash -paperchat +./scripts/postgres-up.sh ``` -Alternatively, you can install PaperChat into your Python environment (requires Python 3.12 or newer): +Start the backend: ```bash -pip install git+https://github.com/kpeez/paperchat.git +cd backend +uv sync --locked --group dev +uv run alembic upgrade head +uv run paperchat-backend ``` -and then launch PaperChat by running: +Start the frontend in a second shell: ```bash -paperchat +cd frontend +pnpm install --frozen-lockfile +pnpm dev ``` -## Quick Start - -1. Launch PaperChat: `paperchat` -2. Upload a PDF document using the sidebar -3. Wait for processing to complete -4. Start asking questions about your document! +## Verification -## Settings +Backend: -PaperChat uses your own model API keys to connect to the AI providers. If you have API keys set as environment variables, they will be automatically detected. Otherwise, you can set them in the settings page. To get API keys, you can sign up for a free account on the providers' websites: +```bash +cd backend +uv run ruff check +uv run ruff format --check +uv run ty check +uv run pytest +``` -- [Gemini](https://aistudio.google.com/apikey) (recommended) - - This is the recommend provider since you can access models for free (e.g., `gemini-2.5-pro-exp-03-25` and `gemini-2.0-flash`), and their text-embedding model is currently the best available on the [MTEB leaderboard](https://huggingface.co/spaces/mteb/leaderboard). -- [OpenAI](https://platform.openai.com/api-keys) -- [Anthropic](https://console.anthropic.com/settings/keys) +Frontend: -## Troubleshooting +```bash +cd frontend +pnpm lint +pnpm build +``` -- Report issues on our [GitHub Issues page](https://github.com/kpeez/paperchat/issues) +Runtime details are documented in [`docs/local-runtime.md`](docs/local-runtime.md).

    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%0A~R7 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 diff --git a/evaluation/calculate_metrics.py b/evaluation/calculate_metrics.py deleted file mode 100644 index e0ae8cb..0000000 --- a/evaluation/calculate_metrics.py +++ /dev/null @@ -1,177 +0,0 @@ -"""Calculates BEIR evaluation metrics from saved retrieval results.""" - -import json -import logging -from pathlib import Path -from typing import Annotated - -import typer -from beir.datasets.data_loader import GenericDataLoader -from beir.retrieval.evaluation import EvaluateRetrieval -from rich.console import Console -from rich.table import Table - -logging.basicConfig(level=logging.INFO, format="%(asctime)s - %(levelname)s - %(message)s") - -app = typer.Typer(help="Calculate BEIR evaluation metrics from retrieval results.") -console = Console() - - -def load_qrels(data_path: Path, split: str = "test") -> dict[str, dict[str, int]]: - """Loads the qrels (relevance judgments) for a given dataset split.""" - if not data_path.exists(): - raise FileNotFoundError( - f"BEIR dataset not found at {data_path}. Run download_data.py first." - ) - logging.info(f"Loading qrels from: {data_path}") - try: - _, _, qrels = GenericDataLoader(data_folder=str(data_path)).load(split=split) - logging.info(f"Loaded {len(qrels)} queries with relevance judgements.") - return qrels - except Exception as e: - logging.error(f"Failed to load qrels from {data_path}: {e}", exc_info=True) - raise - - -def load_results(results_path: Path) -> dict[str, dict[str, float]]: - """Loads the retrieval results from a JSON file.""" - if not results_path.exists(): - raise FileNotFoundError(f"Results file not found at {results_path}") - logging.info(f"Loading retrieval results from: {results_path}") - with open(results_path) as f: - results = json.load(f) - logging.info(f"Loaded results for {len(results)} queries.") - return results - - -def display_metrics(metrics: dict[str, dict[str, float]], title: str = "Retrieval Metrics") -> None: - """Displays the calculated metrics in a formatted table.""" - table = Table(title=title) - table.add_column("Metric", style="cyan", no_wrap=True) - if metrics: - first_metric_dict = next(iter(metrics.values()), None) - if first_metric_dict: - first_metric_keys = list(first_metric_dict.keys()) - for k_header in first_metric_keys: - table.add_column(k_header, style="magenta") - - for metric_name, k_values in metrics.items(): - row = [metric_name] - for k_header in first_metric_keys: - value = k_values.get(k_header, float("nan")) - row.append(f"{value:.4f}") - table.add_row(*row) - - console.print(table) - - -@app.command() -def main( - results_path: Annotated[ - Path, - typer.Argument( - help="Path to the JSON file containing retrieval results.", - exists=True, - file_okay=True, - dir_okay=False, - readable=True, - resolve_path=True, - ), - ], - dataset: Annotated[ - str, - typer.Option( - "--dataset", - "-d", - help="Name of the BEIR dataset evaluated (e.g., 'scidocs'). Used to find qrels.", - ), - ] = "scidocs", - data_dir: Annotated[ - Path, - typer.Option("--data-dir", help="Directory containing BEIR datasets.", resolve_path=True), - ] = Path(__file__).parent / "datasets", - split: Annotated[str, typer.Option("--split", help="Dataset split used for qrels.")] = "test", - metrics_ks_arg: Annotated[ - list[int] | None, - typer.Option( - "--k", - help="Values of k for recall/precision metrics. Defaults to [1, 3, 5, 10, 100, 1000].", - ), - ] = None, - output_file: Annotated[ - Path | None, - typer.Option( - "--output", - "-o", - help="Optional path to save calculated metrics as JSON.", - resolve_path=True, - ), - ] = None, -) -> None: - """ - Calculates and displays BEIR retrieval metrics (NDCG, MAP, Recall, P) for given results. - """ - metrics_ks = metrics_ks_arg if metrics_ks_arg is not None else [1, 3, 5, 10, 100, 1000] - - dataset_path = data_dir / dataset - model_name = results_path.stem.replace(f"{dataset}_", "").replace("_results", "") - title = f"Retrieval Metrics: [{dataset}/{split}] - Model: [{model_name}]" - - try: - logging.info(f"Calculating metrics for results: {results_path}") - logging.info(f"Using qrels for dataset: {dataset}, split: {split}") - - qrels = load_qrels(dataset_path, split) - results = load_results(results_path) - - if not qrels: - typer.echo(typer.style("Error: Qrels are empty.", fg=typer.colors.RED)) - raise typer.Exit(code=1) - if not results: - typer.echo(typer.style("Error: Results are empty.", fg=typer.colors.RED)) - raise typer.Exit(code=1) - - common_queries = set(results.keys()) & set(qrels.keys()) - if len(common_queries) < len(results): - logging.warning( - f"Results contain {len(results) - len(common_queries)} queries not found in qrels. Evaluating only on {len(common_queries)} common queries." - ) - results = {qid: results[qid] for qid in common_queries} - if not common_queries: - typer.echo( - typer.style( - "Error: No common queries between results and qrels.", fg=typer.colors.RED - ) - ) - raise typer.Exit(code=1) - - evaluator = EvaluateRetrieval() - ndcg, map_score, recall, precision = evaluator.evaluate(qrels, results, metrics_ks) - - all_metrics = { - "NDCG": ndcg, - "MAP": map_score, - "Recall": recall, - "Precision": precision, - } - - display_metrics(all_metrics, title=title) - - if output_file: - output_file.parent.mkdir(parents=True, exist_ok=True) - with open(output_file, "w") as f: - json.dump(all_metrics, f, indent=4) - typer.echo(typer.style(f"Metrics saved to {output_file}", fg=typer.colors.GREEN)) - - except FileNotFoundError as e: - logging.error(f"File loading error: {e}") - typer.echo(typer.style(f"Error: {e}", fg=typer.colors.RED)) - raise typer.Exit(code=1) from e - except Exception as e: - logging.error(f"An unexpected error occurred: {e}", exc_info=True) - typer.echo(typer.style(f"An unexpected error occurred: {e}", fg=typer.colors.RED)) - raise typer.Exit(code=1) from e - - -if __name__ == "__main__": - app() diff --git a/evaluation/download_beir.py b/evaluation/download_beir.py deleted file mode 100644 index dac7d53..0000000 --- a/evaluation/download_beir.py +++ /dev/null @@ -1,85 +0,0 @@ -"""Download a BEIR dataset (e.g., scidocs) for evaluation using Typer.""" - -import logging -from pathlib import Path -from typing import Annotated - -import typer -from beir import util -from beir.datasets.data_loader import GenericDataLoader - -logging.basicConfig(level=logging.INFO, format="%(asctime)s - %(levelname)s - %(message)s") - -app = typer.Typer(help="BEIR Dataset Download Utility") - - -def download_beir_dataset( - dataset_name: str, output_dir: Path, data_path: Path | None = None -) -> Path: - """ - Downloads the specified BEIR dataset using beir.util and returns the path. - - Args: - dataset_name: The name of the BEIR dataset (e.g., "scidocs"). - output_dir: The directory to save the downloaded dataset. - data_path: The specific path where the dataset was extracted (optional, for logging). - - Returns: - The path to the downloaded dataset directory. - - Raises: - Exception: If the download fails. - """ - output_dir.mkdir(parents=True, exist_ok=True) - url = f"https://public.ukp.informatik.tu-darmstadt.de/thakur/BEIR/datasets/{dataset_name}.zip" - extracted_path_str = util.download_and_unzip(url, str(output_dir)) - extracted_path = Path(extracted_path_str) - logging.info(f"Dataset '{dataset_name}' downloaded and extracted to: {extracted_path}") - return extracted_path - - -@app.command() -def main( - dataset: Annotated[ - str, - typer.Option( - "--dataset", - "-d", - help="Name of the BEIR dataset to download (e.g., 'scidocs', 'nfcorpus').", - ), - ] = "scidocs", - output_dir: Annotated[ - Path, - typer.Option( - "--output-dir", - "-o", - help="Directory to save the downloaded dataset.", - resolve_path=True, - ), - ] = Path(__file__).parent / "datasets", -) -> None: - """ - Downloads and verifies a specified BEIR dataset. - """ - logging.info(f"Starting download for dataset: {dataset}") - try: - data_path = download_beir_dataset(dataset, output_dir) - logging.info(f"Verifying dataset integrity by loading '{dataset}/test' split...") - corpus, queries, qrels = GenericDataLoader(data_folder=str(data_path)).load(split="test") - logging.info( - f"Successfully downloaded and verified dataset '{dataset}'. " - f"Corpus size: {len(corpus)}, Queries size: {len(queries)}, Qrels size: {len(qrels)}" - ) - typer.echo( - typer.style( - f"Dataset '{dataset}' downloaded successfully to {data_path}", - fg=typer.colors.GREEN, - ) - ) - except Exception as e: - logging.error(f"Failed to download or verify dataset '{dataset}': {e}", exc_info=True) - raise typer.Exit(code=1) from e - - -if __name__ == "__main__": - app() diff --git a/evaluation/run_evaluation.py b/evaluation/run_evaluation.py deleted file mode 100644 index f6d7b42..0000000 --- a/evaluation/run_evaluation.py +++ /dev/null @@ -1,215 +0,0 @@ -"""Coordinates the BEIR evaluation workflow: download, retrieve, calculate, summarize.""" - -import csv -import datetime -import json -import logging -import subprocess -import sys -from pathlib import Path -from typing import Annotated, Any - -import typer - -logging.basicConfig(level=logging.INFO, format="%(asctime)s - %(levelname)s - %(message)s") - -BASE_EVAL_DIR = Path(__file__).parent -DEFAULT_DATA_DIR = BASE_EVAL_DIR / "datasets" -DEFAULT_RESULTS_DIR = BASE_EVAL_DIR / "results" -DEFAULT_DB_DIR = BASE_EVAL_DIR / "data" -DEFAULT_SUMMARY_FILE = DEFAULT_RESULTS_DIR / "evaluation_summary.csv" - -app = typer.Typer(help="Run the full BEIR evaluation workflow.") - - -def _run_command(command: list[str], step_name: str) -> None: - """Helper function to run a command as a subprocess and handle errors.""" - logging.info(f"Starting step: {step_name}...") - try: - subprocess.run( - command, - check=True, - capture_output=True, - text=True, - cwd=BASE_EVAL_DIR.parent, - ) - logging.info(f"{step_name} completed successfully.") - except subprocess.CalledProcessError as e: - logging.error(f"{step_name} failed with exit code {e.returncode}") - logging.error(f"Stdout:\n{e.stdout}") - logging.error(f"Stderr:\n{e.stderr}") - raise typer.Exit(code=e.returncode) from e - except Exception as e: - logging.error(f"An unexpected error occurred during {step_name}: {e}", exc_info=True) - raise typer.Exit(code=1) from e - - -def _append_to_summary( - summary_file: Path, run_info: dict[str, Any], metrics: dict[str, dict[str, float]] -) -> None: - """Appends run information and key metrics to the summary CSV file.""" - summary_file.parent.mkdir(parents=True, exist_ok=True) - header = ["timestamp", "dataset", "split", "model_id", "metric", "value"] - key_metrics_to_log = {"NDCG@10", "Recall@100", "Recall@1000", "MAP@1000", "P@10"} - - rows_to_write = [] - file_exists = summary_file.is_file() - - for _metric_group_name, metric_values in metrics.items(): - for metric_name_at_k, value in metric_values.items(): - if metric_name_at_k in key_metrics_to_log: - row = run_info.copy() - row["metric"] = metric_name_at_k - row["value"] = f"{value:.4f}" - rows_to_write.append(row) - - if not rows_to_write: - logging.warning("No key metrics found to log in the summary file.") - return - - try: - with open(summary_file, mode="a", newline="", encoding="utf-8") as csvfile: - writer = csv.DictWriter(csvfile, fieldnames=header) - if not file_exists: - writer.writeheader() - writer.writerows(rows_to_write) - logging.info(f"Successfully appended results to {summary_file}") - except Exception as e: - logging.error( - f"Failed to append results to summary file {summary_file}: {e}", exc_info=True - ) - - -@app.command() -def run( - model_id: Annotated[ - str, - typer.Option("--model-id", "-m", help="Embedding model identifier (required)."), - ], - dataset: Annotated[ - str, - typer.Option("--dataset", "-d", help="Name of the BEIR dataset."), - ] = "scidocs", - data_dir: Annotated[ - Path, - typer.Option("--data-dir", help="Directory containing BEIR datasets.", resolve_path=True), - ] = DEFAULT_DATA_DIR, - results_dir: Annotated[ - Path, - typer.Option("--results-dir", help="Directory to save results.", resolve_path=True), - ] = DEFAULT_RESULTS_DIR, - db_dir: Annotated[ - Path, - typer.Option( - "--db-dir", help="Base directory for evaluation databases.", resolve_path=True - ), - ] = DEFAULT_DB_DIR, - split: Annotated[str, typer.Option("--split", help="Dataset split.")] = "test", - metrics_ks_arg: Annotated[ - list[int] | None, - typer.Option("--k", help="Values of k for metrics. Defaults to [1, 3, 5, 10, 100, 1000]."), - ] = None, - skip_ingestion: Annotated[ - bool, - typer.Option("--skip-ingestion", help="Skip ingestion if collection exists."), - ] = False, - force_download: Annotated[ - bool, - typer.Option("--force-download", help="Force download dataset even if it exists."), - ] = False, - summary_file: Annotated[ - Path, - typer.Option("--summary-file", help="Path to the CSV summary file.", resolve_path=True), - ] = DEFAULT_SUMMARY_FILE, -) -> None: - """Runs the full BEIR evaluation workflow and logs results to a summary file.""" - - timestamp = datetime.datetime.now().isoformat() - dataset_path = data_dir / dataset - sanitized_model_name = model_id.replace("/", "_") - results_json_path = results_dir / f"{dataset}_{sanitized_model_name}_results.json" - metrics_ks = metrics_ks_arg if metrics_ks_arg is not None else [1, 3, 5, 10, 100, 1000] - metrics_ks_str = [str(k) for k in metrics_ks] - - if not dataset_path.exists() or force_download: - logging.info(f"Dataset '{dataset}' not found at {data_dir} or download forced.") - download_cmd = [ - sys.executable, - str(BASE_EVAL_DIR / "download_beir.py"), - "--dataset", - dataset, - "--output-dir", - str(data_dir), - ] - _run_command(download_cmd, "Data Download") - else: - logging.info(f"Dataset '{dataset}' found at {data_dir}. Skipping download.") - - retrieval_cmd = [ - sys.executable, - str(BASE_EVAL_DIR / "run_retrieval.py"), - "--model-id", - model_id, - "--dataset", - dataset, - "--data-dir", - str(data_dir), - "--results-dir", - str(results_dir), - "--db-dir", - str(db_dir), - "--split", - split, - ] - if skip_ingestion: - retrieval_cmd.append("--skip-ingestion") - - _run_command(retrieval_cmd, "Retrieval Execution") - - calc_cmd = [ - sys.executable, - str(BASE_EVAL_DIR / "calculate_metrics.py"), - str(results_json_path), - "--dataset", - dataset, - "--data-dir", - str(data_dir), - "--split", - split, - ] - for k in metrics_ks_str: - calc_cmd.extend(["--k", k]) - metrics_json_output = results_dir / f"{dataset}_{sanitized_model_name}_metrics.json" - calc_cmd.extend(["--output", str(metrics_json_output)]) - - _run_command(calc_cmd, "Metrics Calculation") - - try: - with open(metrics_json_output) as f: - calculated_metrics = json.load(f) - - run_info = { - "timestamp": timestamp, - "dataset": dataset, - "split": split, - "model_id": model_id, - } - _append_to_summary(summary_file, run_info, calculated_metrics) - - except FileNotFoundError as e: - logging.error( - f"Metrics JSON file not found: {metrics_json_output}. Cannot append to summary." - ) - raise typer.Exit(code=1) from e - except Exception as e: - logging.error(f"Failed to read metrics JSON or append to summary: {e}", exc_info=True) - raise typer.Exit(code=1) from e - - logging.info("Evaluation workflow complete.") - typer.echo( - typer.style("Evaluation workflow finished successfully!", fg=typer.colors.BRIGHT_GREEN) - ) - - -if __name__ == "__main__": - app() diff --git a/evaluation/run_retrieval.py b/evaluation/run_retrieval.py deleted file mode 100644 index 44dce90..0000000 --- a/evaluation/run_retrieval.py +++ /dev/null @@ -1,320 +0,0 @@ -"""Runs retrieval on a BEIR dataset and saves results using Typer.""" - -import json -import logging -from pathlib import Path -from typing import Annotated, Any - -import typer -from beir.datasets.data_loader import GenericDataLoader -from tqdm import tqdm - -from paperchat.core import VectorStore, get_embedding_model - -logging.basicConfig(level=logging.INFO, format="%(asctime)s - %(levelname)s - %(message)s") -DEFAULT_EMBEDDING_BATCH_SIZE = 32 -BASE_EVAL_DIR = Path(__file__).parent -DEFAULT_DATA_DIR = BASE_EVAL_DIR / "datasets" -DEFAULT_RESULTS_DIR = BASE_EVAL_DIR / "results" -DEFAULT_DB_DIR = BASE_EVAL_DIR / "data" - -app = typer.Typer(help="Run BEIR retrieval evaluation and save results.") - - -def load_beir_dataset( - data_path: Path, split: str = "test" -) -> tuple[dict[str, dict[str, str]], dict[str, str]]: - """ - Loads the corpus and queries from a downloaded BEIR dataset folder. - - Args: - data_path: Path to the BEIR dataset directory (e.g., evaluation/datasets/scidocs). - split: The dataset split to load (e.g., "test", "train", "dev"). - - Returns: - A tuple containing the corpus and queries dictionaries. - """ - if not data_path.exists(): - raise FileNotFoundError( - f"BEIR dataset not found at {data_path}. Run download_data.py first." - ) - logging.info(f"Loading BEIR dataset from: {data_path}") - corpus, queries, _ = GenericDataLoader(data_folder=str(data_path)).load(split=split) - logging.info(f"Loaded corpus with {len(corpus)} documents and {len(queries)} queries.") - return corpus, queries - - -def prepare_and_embed_corpus( - corpus: dict[str, dict[str, str]], embed_fn: Any, batch_size: int -) -> list[dict[str, Any]]: - """ - Formats BEIR corpus and generates embeddings for direct Milvus insertion. - - Args: - corpus: The BEIR corpus dictionary {doc_id: {'title': ..., 'text': ...}}. - embed_fn: The embedding function instance. - batch_size: Batch size for embedding generation. - - Returns: - A list of dictionaries ready for client.insert, including embeddings. - """ - doc_ids = list(corpus.keys()) - texts_to_embed = [ - (corpus[doc_id].get("title", "") + " " + corpus[doc_id].get("text", "")).strip() - for doc_id in doc_ids - ] - - all_embeddings = [] - logging.info( - f"Generating embeddings for {len(texts_to_embed)} documents in batches of {batch_size}..." - ) - for i in tqdm(range(0, len(texts_to_embed), batch_size), desc="Embedding Corpus"): - batch_texts = texts_to_embed[i : i + batch_size] - embeddings = embed_fn.encode_documents(batch_texts) - if hasattr(embeddings, "tolist"): - all_embeddings.extend(embeddings.tolist()) - else: - all_embeddings.extend(embeddings) - - if len(all_embeddings) != len(doc_ids): - raise RuntimeError("Mismatch between number of documents and generated embeddings.") - - data_for_milvus = [] - for i, doc_id in enumerate(doc_ids): - data_for_milvus.append( - { - "text": texts_to_embed[i], - "embedding": all_embeddings[i], - "source": doc_id, - "chunk_id": f"{doc_id}_chunk0", - "label": [], - "page_numbers": [], - "headings": corpus[doc_id].get("title", ""), - } - ) - - return data_for_milvus - - -def run_retrieval( - vector_store: VectorStore, queries: dict[str, str], k: int = 100 -) -> dict[str, dict[str, float]]: - """ - Runs retrieval for all queries against the vector store. - - Args: - vector_store: The initialized VectorStore. - queries: The dictionary of queries {query_id: query_text}. - k: The number of documents to retrieve for each query. - - Returns: - A dictionary containing the retrieval results in BEIR format: - {query_id: {beir_doc_id1: score1, beir_doc_id2: score2, ...}} - """ - results: dict[str, dict[str, float]] = {} - logging.info(f"Running retrieval for {len(queries)} queries...") - - output_fields = ["source"] - - for query_id, query_text in tqdm(queries.items(), desc="Retrieving"): - try: - retrieved_hits = vector_store.search(query_text, top_k=k, output_fields=output_fields) - query_results = {} - for hit in retrieved_hits: - original_doc_id = hit.get("entity", {}).get("source") - if original_doc_id: - score = hit.get("distance", 0.0) - query_results[original_doc_id] = float(score) - else: - logging.warning( - f"Retrieved hit for query {query_id} is missing 'source' field. Hit: {hit}" - ) - results[query_id] = query_results - except Exception as e: - logging.error(f"Error retrieving results for query_id {query_id}: {e}", exc_info=True) - results[query_id] = {} - logging.info("Retrieval finished.") - return results - - -def save_results(results: dict[str, dict[str, float]], output_path: Path) -> None: - """Saves the retrieval results to a JSON file.""" - output_path.parent.mkdir(parents=True, exist_ok=True) - with open(output_path, "w") as f: - json.dump(results, f, indent=4) - logging.info(f"Retrieval results saved to: {output_path}") - - -def _ingest_corpus_if_needed( - vector_store: VectorStore, - corpus: dict[str, dict[str, str]], - embedding_model: Any, - batch_size: int, -) -> None: - """Handles the logic for checking, dropping, creating, and ingesting into a collection automatically.""" - expected_doc_count = len(corpus) - collection_name = vector_store.collection_name - needs_ingestion = True - - if vector_store.client.has_collection(collection_name): - vector_store.client.load_collection(collection_name) - current_doc_count = vector_store.client.num_entities(collection_name) - logging.info(f"Collection '{collection_name}' exists with {current_doc_count} entities.") - - if current_doc_count == expected_doc_count: - logging.info( - f"Collection appears complete ({current_doc_count}/{expected_doc_count}). Skipping ingestion." - ) - needs_ingestion = False - else: - logging.warning( - f"Collection '{collection_name}' exists but is incomplete ({current_doc_count}/{expected_doc_count}). " - f"Dropping and re-creating for full ingestion." - ) - vector_store.client.release_collection(collection_name) - vector_store.client.drop_collection(collection_name) - vector_store._get_or_create_collection(collection_name, vector_store.main_schema) - vector_store._build_indices() - else: - logging.info(f"Collection '{collection_name}' does not exist. Creating and ingesting.") - vector_store._get_or_create_collection(collection_name, vector_store.main_schema) - vector_store._build_indices() - - if needs_ingestion: - logging.info(f"Preparing and embedding corpus for '{collection_name}'...") - data_to_insert = prepare_and_embed_corpus(corpus, embedding_model, batch_size) - logging.info(f"Ingesting {len(data_to_insert)} documents into '{collection_name}'...") - insert_result = vector_store.client.insert( - collection_name=collection_name, data=data_to_insert - ) - insert_count = insert_result.get("insert_count", 0) - if insert_count != len(data_to_insert): - raise RuntimeError( - f"Mismatch in document insertion count. Expected {len(data_to_insert)}, got {insert_count}." - ) - logging.info(f"Ingestion complete and flushed for '{collection_name}'.") - - -def run_evaluation_pipeline( - dataset: str, - data_dir: Path, - db_dir: Path, - split: str, - embedding_model_id: str, - results_dir: Path, - top_k: int, - batch_size: int, -) -> Path | None: - """Runs the full pipeline: load, init, ingest, retrieve, save. Returns results file path or None.""" - dataset_path = data_dir / dataset - sanitized_model_name = embedding_model_id.replace("/", "_") - results_file = results_dir / f"{dataset}_{sanitized_model_name}_results.json" - - if results_file.exists(): - logging.info(f"Results file already exists: {results_file}. Skipping retrieval.") - typer.echo( - typer.style( - f"Skipping retrieval, results found at {results_file}", fg=typer.colors.YELLOW - ) - ) - return results_file - - db_dir.mkdir(parents=True, exist_ok=True) - eval_db_path = str(db_dir / f"evaluation_{dataset}_{sanitized_model_name}.db") - logging.info(f"Using evaluation database: {eval_db_path}") - - vector_store = None - try: - corpus, queries = load_beir_dataset(dataset_path, split) - - logging.info(f"Initializing VectorStore for model: {embedding_model_id}") - embedding_model = get_embedding_model(embedding_model_id) - vector_store = VectorStore( - db_path=eval_db_path, - model_identifier=embedding_model_id, - ) - - _ingest_corpus_if_needed( - vector_store=vector_store, - corpus=corpus, - embedding_model=embedding_model, - batch_size=batch_size, - ) - - results = run_retrieval(vector_store, queries, k=top_k) - save_results(results, results_file) - typer.echo(typer.style(f"Retrieval results saved to {results_file}", fg=typer.colors.GREEN)) - return results_file - - except FileNotFoundError as e: - logging.error(f"Data loading error: {e}") - raise typer.Exit(code=1) from e - except Exception as e: - logging.error(f"An unexpected error occurred in pipeline: {e}", exc_info=True) - raise typer.Exit(code=1) from e - finally: - if vector_store and hasattr(vector_store, "client") and vector_store.client: - try: - logging.info("Milvus client cleanup check.") - except Exception as disconnect_e: - logging.warning(f"Error during Milvus cleanup attempt: {disconnect_e}") - - -@app.command() -def main( - embedding_model_id: Annotated[ - str, - typer.Option("--model-id", "-m", help="Embedding model identifier (required)."), - ], - dataset: Annotated[ - str, - typer.Option("--dataset", "-d", help="Name of the BEIR dataset."), - ] = "scidocs", - data_dir: Annotated[ - Path, - typer.Option("--data-dir", help="Directory containing BEIR datasets.", resolve_path=True), - ] = DEFAULT_DATA_DIR, - split: Annotated[str, typer.Option("--split", help="Dataset split.")] = "test", - results_dir: Annotated[ - Path, - typer.Option("--results-dir", help="Directory to save results.", resolve_path=True), - ] = DEFAULT_RESULTS_DIR, - db_dir: Annotated[ - Path, - typer.Option( - "--db-dir", help="Base directory for evaluation databases.", resolve_path=True - ), - ] = DEFAULT_DB_DIR, - top_k: Annotated[int, typer.Option("--top-k", help="Number of documents to retrieve.")] = 100, - batch_size: Annotated[ - int, typer.Option("--batch-size", help="Batch size for embedding generation.") - ] = DEFAULT_EMBEDDING_BATCH_SIZE, -) -> None: - """ - Runs BEIR retrieval evaluation using dataset-specific DBs. - """ - try: - results_path = run_evaluation_pipeline( - dataset=dataset, - data_dir=data_dir, - db_dir=db_dir, - split=split, - embedding_model_id=embedding_model_id, - results_dir=results_dir, - top_k=top_k, - batch_size=batch_size, - ) - if results_path: - logging.info("Retrieval pipeline completed successfully.") - else: - logging.info("Retrieval step skipped as results already exist.") - except typer.Exit: - logging.error("Retrieval pipeline failed.") - raise - except Exception as e: - logging.error(f"Unexpected error in main: {e}", exc_info=True) - raise typer.Exit(code=1) from e - - -if __name__ == "__main__": - app() diff --git a/paperchat/__init__.py b/paperchat/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/paperchat/cli.py b/paperchat/cli.py deleted file mode 100644 index d994121..0000000 --- a/paperchat/cli.py +++ /dev/null @@ -1,9 +0,0 @@ -import subprocess -import sys -from pathlib import Path - - -def main(): - app_path = Path(__file__).parent.parent / "app.py" - args = ["streamlit", "run", str(app_path)] + sys.argv[1:] - subprocess.run(args, check=False) diff --git a/paperchat/core/__init__.py b/paperchat/core/__init__.py deleted file mode 100644 index 63c21a3..0000000 --- a/paperchat/core/__init__.py +++ /dev/null @@ -1,6 +0,0 @@ -from .embeddings import get_embedding_model -from .ingestion import process_pdf_document -from .rag_pipeline import RAGPipeline -from .vector_store import VectorStore - -__all__ = ["RAGPipeline", "VectorStore", "get_embedding_model", "process_pdf_document"] diff --git a/paperchat/core/embeddings.py b/paperchat/core/embeddings.py deleted file mode 100644 index fa825c8..0000000 --- a/paperchat/core/embeddings.py +++ /dev/null @@ -1,134 +0,0 @@ -"""Load text embedding models from Milvus""" - -from typing import Any - -from pymilvus.model import DefaultEmbeddingFunction, dense - -from paperchat.utils.api_keys import get_api_key -from paperchat.utils.logging import get_component_logger - -logger = get_component_logger("embeddings") - -PROVIDERS_REQUIRING_KEYS = {"openai", "gemini"} -SUPPORTED_EMBEDDING_MODELS = { - "openai/text-embedding-3-small": { - "class": dense.OpenAIEmbeddingFunction, - "init_args": {"model_name": "text-embedding-3-small"}, - "dimensions": 1536, - }, - "openai/text-embedding-3-large": { - "class": dense.OpenAIEmbeddingFunction, - "init_args": {"model_name": "text-embedding-3-large"}, - "dimensions": 3072, - }, - "gemini/gemini-embedding-exp-03-07": { - "class": dense.GeminiEmbeddingFunction, - "init_args": {"model_name": "gemini-embedding-exp-03-07"}, - "dimensions": 3072, - }, - "gemini/models/text-embedding-004": { - "class": dense.GeminiEmbeddingFunction, - "init_args": {"model_name": "models/text-embedding-004"}, - "dimensions": 768, - }, -} - - -def list_embedding_models() -> list[dict[str, Any]]: - """List all supported embedding models, indicating if they require an API key.""" - available_models = [] - for identifier, config in SUPPORTED_EMBEDDING_MODELS.items(): - try: - provider = identifier.split("/")[0] - except IndexError: - logger.warning(f"Skipping invalid embedding model identifier: {identifier}") - continue - - api_key_present_or_not_required = True - if provider in PROVIDERS_REQUIRING_KEYS and get_api_key(provider) is None: - api_key_present_or_not_required = False - - if api_key_present_or_not_required: - available_models.append( - { - "id": identifier, - "name": identifier, - "dimensions": config.get("dimensions"), - "provider": provider, - } - ) - return available_models - - -def get_embedding_model(model_identifier: str) -> Any: - """ - Get an initialized embedding function instance from Milvus. - - Args: - model_identifier: The unique identifier ('provider/model_name'). - - Returns: - An initialized embedding function instance from pymilvus.model. - """ - if model_identifier == "pymilvus/default": - try: - logger.info( - "[get_embedding_model] Using generic default. Instantiating DefaultEmbeddingFunction()" - ) - embedding_function = DefaultEmbeddingFunction() - if not ( - hasattr(embedding_function, "dim") - and isinstance(embedding_function.dim, int) - and embedding_function.dim > 0 - ): - raise AttributeError( - "DefaultEmbeddingFunction instance lacks a valid .dim attribute." - ) - logger.info( - f"[get_embedding_model] Successfully instantiated pymilvus default: {type(embedding_function)} with dim {embedding_function.dim}" - ) - return embedding_function - except Exception as e: - logger.error(f"Error instantiating DefaultEmbeddingFunction: {e!s}", exc_info=True) - raise RuntimeError("Failed to instantiate the pymilvus default embedding model.") from e - - if "/" not in model_identifier: - raise ValueError( - f"Invalid model identifier format: '{model_identifier}'. Expected 'provider/model_name'." - ) - - if model_identifier not in SUPPORTED_EMBEDDING_MODELS: - available = [m["id"] for m in list_embedding_models()] - raise ValueError( - f"Unsupported embedding model identifier: '{model_identifier}'. " - f"Available models (with keys): {available}" - ) - - config = SUPPORTED_EMBEDDING_MODELS[model_identifier] - provider = model_identifier.split("/")[0] - model_class = config["class"] - init_args = config["init_args"].copy() - - if provider in PROVIDERS_REQUIRING_KEYS: - api_key = get_api_key(provider) - if not api_key: - raise ValueError( - f"API key for provider '{provider}' not found, required by '{model_identifier}'" - ) - if provider in ["openai", "gemini"]: - init_args["api_key"] = api_key - - try: - embedding_function = model_class(**init_args) - - return embedding_function - - except Exception as e: - logger.error( - f"Error instantiating {model_class.__name__} for {model_identifier}: {e!s}", - exc_info=True, - ) - raise RuntimeError( - f"Failed to instantiate embedding model '{model_identifier}' for provider '{provider}'. " - f"Check API keys, model availability, and pymilvus installation." - ) from e diff --git a/paperchat/core/ingestion.py b/paperchat/core/ingestion.py deleted file mode 100644 index fe9b29b..0000000 --- a/paperchat/core/ingestion.py +++ /dev/null @@ -1,87 +0,0 @@ -import datetime -from pathlib import Path -from typing import Any - -from docling.chunking import DocChunk, HybridChunker -from docling.datamodel.document import DoclingDocument -from docling.document_converter import DocumentConverter -from pymilvus import model - - -def parse_pdf(pdf_path: str | Path) -> DoclingDocument: - """Convert a PDF file to a Docling document. - - Args: - pdf_path: Path to the PDF file (can be string or Path object) - - Returns: - Parsed Docling document - """ - converter = DocumentConverter() - pdf_path = Path(pdf_path).resolve() - result = converter.convert(str(pdf_path)) - - return result.document - - -def extract_page_numbers(chunk: DocChunk) -> list[int]: - """Extract page numbers from a DocChunk. - - Args: - chunk: DocChunk to extract page numbers from - - Returns: - List of page numbers - """ - page_numbers = set() - for item in chunk.meta.doc_items: - for prov in item.prov: - page_numbers.add(prov.page_no) - - return sorted(page_numbers) - - -def process_pdf_document( - pdf_path: str | Path, - embed_fn: Any | None = None, - max_tokens_per_chunk: int = 1024, -) -> list[dict[str, Any]]: - """Process a PDF document into a list of dictionaries ready for vector database insertion. - - This function handles the document processing pipeline and returns data in a format - ready to be directly inserted into a vector database. - - Args: - pdf_path: Path to the PDF file - embed_fn: Function to use for embedding generation, defaults to Milvus DefaultEmbeddingFunction - max_tokens_per_chunk: Maximum number of tokens per chunk - - Returns: - List of dictionaries with fields matching the Milvus schema, ready for direct insertion - """ - if embed_fn is None: - embed_fn = model.DefaultEmbeddingFunction() - - pdf_file = Path(pdf_path) - pdf_doc = parse_pdf(pdf_file) - chunker = HybridChunker(max_tokens=max_tokens_per_chunk, merge_peers=True) - pdf_chunks = list(chunker.chunk(pdf_doc)) - - texts = [chunker.contextualize(chunk) for chunk in pdf_chunks] - embeddings = embed_fn.encode_documents(texts) - - data_entries = [] - for i, (chunk, embedding) in enumerate(zip(pdf_chunks, embeddings, strict=True)): - data_entry = { - "chunk_id": f"chunk_{i:02d}", - "embedding": embedding, - "text": chunk.text, - "label": [item.label for item in chunk.meta.doc_items or []], - "source": pdf_file.stem, - "page_numbers": extract_page_numbers(chunk), - "headings": ", ".join(chunk.meta.headings).lower() if chunk.meta.headings else "", - "timestamp": datetime.datetime.now().isoformat(), - } - data_entries.append(data_entry) - - return data_entries diff --git a/paperchat/core/rag_pipeline.py b/paperchat/core/rag_pipeline.py deleted file mode 100644 index 24c9d11..0000000 --- a/paperchat/core/rag_pipeline.py +++ /dev/null @@ -1,97 +0,0 @@ -from typing import Any, Generator - -from ..llms.manager import LLMManager -from ..utils.formatting import format_context -from ..utils.settings import get_active_embedding_model -from .vector_store import DEFAULT_SIMILARITY_THRESHOLD, VectorStore - - -class RAGPipeline: - """ - Orchestrates the Retrieval-Augmented Generation (RAG) pipeline. - - Handles document processing, retrieval of relevant chunks, and generation - of responses using a configured LLM. - """ - - def __init__(self, llm_manager: LLMManager): - """ - Initializes the RAG pipeline with necessary components. - - Args: - llm_manager: An instance of LLMManager to handle LLM interactions. - """ - self.llm_manager = llm_manager - active_model = get_active_embedding_model() - self.vector_store = VectorStore(model_identifier=active_model) - - def retrieve( - self, - query: str, - top_k: int = 5, - threshold: float = DEFAULT_SIMILARITY_THRESHOLD, - filter_expression: str | None = None, - ) -> list[dict[str, Any]]: - """ - Retrieves relevant document chunks based on the query. - - Args: - query: The user's query text. - top_k: The number of chunks to retrieve. - threshold: The minimum similarity score to return. - filter_expression: A filter expression to apply to the query. - Returns: - A list of retrieved document chunk dictionaries with metadata. - """ - results = self.vector_store.search( - query_text=query, - top_k=top_k, - threshold=threshold, - filter_expression=filter_expression, - ) - return results - - def generate( - self, query: str, retrieved_results: list[dict[str, Any]], stream: bool = False - ) -> str | Generator[str, None, None]: - """ - Generates a response using the LLM based on the query and retrieved context. - - Args: - query: The user's query text. - retrieved_results: List of document text and metadata retrieved as context. - stream: Whether to stream the response. - - Returns: - The generated response (str or Generator). - """ - context = format_context(retrieved_results, include_metadata=True) - - if stream: - return self.llm_manager.generate_streaming_response(query, context) - else: - return self.llm_manager.generate_response(query, context) - - def run( - self, - query: str, - top_k: int = 5, - stream: bool = False, - ) -> tuple[str | Generator[str, None, None], list[dict[str, Any]]]: - """ - Executes the full RAG pipeline: process/ensure doc data, retrieve, generate. - - Args: - query: The user's query. - document_data: Optional pre-processed document data. - pdf_path: Optional path to a PDF file (used if document_data is None). - top_k: Number of chunks to retrieve. - stream: Whether to stream the LLM response. - - Returns: - A tuple containing the generated response and the list of retrieved chunks. - """ - retrieved_chunks = self.retrieve(query, top_k) - response = self.generate(query, retrieved_chunks, stream) - - return response, retrieved_chunks diff --git a/paperchat/core/vector_store.py b/paperchat/core/vector_store.py deleted file mode 100644 index 0455c8a..0000000 --- a/paperchat/core/vector_store.py +++ /dev/null @@ -1,486 +0,0 @@ -"""Vector storage implementation using Milvus.""" - -import re -from datetime import datetime -from pathlib import Path -from typing import Any - -from pymilvus import ( - CollectionSchema, - DataType, - FieldSchema, - MilvusClient, -) - -from paperchat.core.embeddings import get_embedding_model - -from ..utils.logging import get_component_logger -from .ingestion import ( - process_pdf_document, -) - -DEFAULT_SIMILARITY_TOP_K = 5 -DEFAULT_SIMILARITY_THRESHOLD = 0.2 - - -class VectorStore: - """ - Handles interactions with a Milvus vector store collection for document chunks. - - Attributes: - db_path (str): Path to the Milvus Lite database file. - collection_name (str): Name of the collection managed by this instance (dynamic based on model). - model_identifier (str): Identifier of the embedding model being used. - metadata_collection_name (str): Name of the shared metadata collection. - client (MilvusClient): The initialized Milvus client. - _embed_fn (Any): The loaded embedding function instance. - embedding_dim (int): Dimension of the vectors, derived from the model. - main_schema (CollectionSchema): The schema used for the main collection. - metadata_schema (CollectionSchema): The schema used for the metadata collection. - """ - - METADATA_COLLECTION_NAME = "paperchat_metadata" - VECTOR_DB_DIR = str(Path.home() / ".paperchat" / "paperchat.db") - - def __init__( - self, - db_path: str = VECTOR_DB_DIR, - model_identifier: str = "pymilvus/default", - ): - """ - Initializes the VectorStore, connects to Milvus, determines the correct - data collection based on the model_identifier, and ensures both the - model-specific data collection and the shared metadata collection exist. - """ - self.db_path = db_path - self.model_identifier = model_identifier - self.logger = get_component_logger("VectorStore") - - try: - self.logger.info(f"Loading embedding model: {model_identifier}") - self._embed_fn = get_embedding_model(model_identifier) - self.embedding_dim = self._embed_fn.dim - self.logger.info(f"Using embedding dimension from _embed_fn.dim: {self.embedding_dim}") - - except ( - ValueError, - RuntimeError, - AttributeError, - ) as e: - self.logger.exception( - f"Failed to load embedding model '{model_identifier}' or get its dimension: {e}" - ) - raise - - if self.model_identifier == "pymilvus/default": - sanitized_suffix = sanitize_model_identifier(self._embed_fn.model_name) - self.logger.info( - f"Default model resolved to: '{self._embed_fn.model_name}'. Using sanitized name for collection suffix." - ) - else: - sanitized_suffix = sanitize_model_identifier(self.model_identifier) - self.collection_name = f"paperchat_docs_{sanitized_suffix}" - self.logger.info(f"Using data collection: {self.collection_name}") - - self.metadata_collection_name = self.METADATA_COLLECTION_NAME - self.logger.info(f"Using metadata collection: {self.metadata_collection_name}") - - try: - self.client = MilvusClient(uri=self.db_path) - self.logger.info(f"Connected to Milvus: {self.db_path}") - except Exception as e: - self.logger.exception(f"Failed to initialize MilvusClient: {e}") - raise - - self.main_schema = self._define_main_schema() - self.metadata_schema = self._define_metadata_schema() - self._get_or_create_collection(self.collection_name, self.main_schema) - self._get_or_create_collection(self.metadata_collection_name, self.metadata_schema) - self._build_indices() - - def add_document(self, pdf_path: str | Path, source_id: str, max_tokens: int = 1024) -> bool: - """ - Processes a PDF document, adds chunks to the main collection, - and adds metadata to the metadata collection. Skips if the document - (based on source) already exists in the metadata collection. - - Args: - pdf_path: Path to the PDF file. - source_id: The unique identifier (e.g., original filename stem) for this document. - max_tokens: Maximum number of tokens per chunk. - - Returns: - True if the document was successfully processed and added (or already existed), - False if an error occurred during processing or insertion. - """ - pdf_file = Path(pdf_path) - self.logger.info(f"Processing request for document: {pdf_file.name} (ID: {source_id})") - - try: - # 1. check metadata existence - existing = self.client.query( - collection_name=self.metadata_collection_name, - filter=f'source == "{source_id}"', - output_fields=["source"], - limit=1, - ) - - if existing: - self.logger.info(f"Document ID '{source_id}' already exists in metadata. Skipping.") - return True - - # 2. process pdf into chunks (if new) - self.logger.info(f"Document ID '{source_id}' not found. Processing PDF...") - pdf_data = process_pdf_document( - pdf_path, embed_fn=self._embed_fn, max_tokens_per_chunk=max_tokens - ) - - for chunk in pdf_data: - chunk["source"] = source_id - - # 3. insert chunks into main collection - self.logger.info(f"Inserting {len(pdf_data)} chunks into '{self.collection_name}'") - chunk_result = self.client.insert(collection_name=self.collection_name, data=pdf_data) - insert_count = chunk_result.get("insert_count", 0) - if insert_count != len(pdf_data): - self.logger.error( - f"Mismatch in chunk insertion count for {source_id}. Expected {len(pdf_data)}, got {insert_count}. IDs: {chunk_result.get('primary_keys')}" - ) - # Decide on rollback or error state? For now, log error and continue to metadata attempt, but return False later. - # Consider deleting inserted chunks if possible? client.delete might be complex with specific IDs. - return False - - self.logger.info(f"Successfully inserted {insert_count} chunks for {source_id}") - - # 4. insert metadata entry - iso_timestamp = datetime.now().isoformat() - metadata_entry = [ - { - "source": source_id, - "original_filename": pdf_file.name, - "date_added": iso_timestamp, - } - ] - self.logger.info( - f"Inserting metadata for '{source_id}' into '{self.metadata_collection_name}'" - ) - meta_result = self.client.insert( - collection_name=self.metadata_collection_name, data=metadata_entry - ) - meta_insert_count = meta_result.get("insert_count", 0) - - if meta_insert_count != 1: - self.logger.error( - f"Failed to insert metadata for {source_id}. Result: {meta_result}" - ) - return False - - self.logger.info(f"Successfully added document '{source_id}'") - return True - - except Exception as e: - self.logger.exception(f"Failed processing/adding document {source_id}: {e}") - return False - - def search( - self, - query_text: str, - top_k: int = DEFAULT_SIMILARITY_TOP_K, - threshold: float = DEFAULT_SIMILARITY_THRESHOLD, - output_fields: list[str] | None = None, - filter_expression: str | None = None, - ) -> list[dict[str, Any]]: - """ - Searches the main collection for text chunks similar to the query text. - - Args: - query_text: The text to search for. - top_k: The maximum number of results to return. - threshold: The minimum similarity score to return. - output_fields: List of field names to include in the results. - Defaults to main schema fields except embedding. - filter_expression: Milvus filter expression string (e.g., "source == 'doc1.pdf'"). - - Returns: - A list of dictionaries representing the retrieved chunks, ordered by similarity. - Returns an empty list if no results are found or an error occurs. - """ - if output_fields is None: - output_fields = [f.name for f in self.main_schema.fields if f.name != "embedding"] - - try: - self.logger.debug(f"Loading collection '{self.collection_name}' for search.") - query_embedding = self._embed_fn.encode_queries([query_text])[0] - except Exception as e: - self.logger.exception(f"Failed to generate query embedding or load collection: {e}") - return [] - - search_params = { - "nprobe": 10, - "metric_type": "COSINE", - "radius": threshold, - "range_filter": 1.0, - } - - try: - raw_results = self.client.search( - collection_name=self.collection_name, - data=[query_embedding], - search_params=search_params, - limit=top_k, - output_fields=output_fields, - filter=filter_expression, - ) - results = raw_results[0] - - except Exception as e: - self.logger.exception(f"Search failed: {e}") - results = [] - - return results - - def list_documents(self) -> list[dict[str, Any]]: - """ - Lists all documents by querying the metadata collection. - - Returns: - A list of dictionaries, each containing metadata for one document - (source, original_filename, date_added). - Returns an empty list if there are no documents or an error occurs. - """ - self.logger.debug(f"Listing documents from '{self.metadata_collection_name}'") - try: - results = self.client.query( - collection_name=self.metadata_collection_name, - output_fields=["source", "original_filename", "date_added"], - limit=100, - ) - self.logger.info(f"Found {len(results)} documents in metadata.") - return results - - except Exception as e: - self.logger.exception(f"Failed to list documents from metadata: {e}") - return [] - - def remove_document(self, source_id: str) -> tuple[int, int]: - """ - Removes a document and its associated data from both the metadata - and main document collections based on the source identifier. - - Args: - source_id: The unique identifier (e.g., file stem) of the document to delete. - - Returns: - A tuple containing: - (number of metadata entries deleted, number of chunks deleted). - Typically (1, N) on success, (0, 0) if not found, or potentially - (0, N) or (1, 0) if deletion from one collection fails. - """ - self.logger.info(f"Attempting to remove document with ID: '{source_id}'") - metadata_deleted_count = 0 - chunks_deleted_count = 0 - - # step 1: remove from metadata - try: - self.logger.debug( - f"Removing metadata entry for '{source_id}' from '{self.metadata_collection_name}'" - ) - meta_del_result = self.client.delete( - collection_name=self.metadata_collection_name, - filter=f'source == "{source_id}"', - ) - if hasattr(meta_del_result, "delete_count"): - metadata_deleted_count = meta_del_result.delete_count - elif hasattr(meta_del_result, "primary_keys"): - metadata_deleted_count = len(meta_del_result.primary_keys) - else: - metadata_deleted_count = 1 if meta_del_result else 0 - - self.logger.info( - f"Removed {metadata_deleted_count} entries from metadata for '{source_id}'" - ) - except Exception as e: - self.logger.exception( - f"Failed to remove from metadata collection for '{source_id}': {e}" - ) - - # step 2: remove from main collection - try: - self.logger.debug(f"Removing chunks for '{source_id}' from '{self.collection_name}'") - chunk_del_result = self.client.delete( - collection_name=self.collection_name, - filter=f'source == "{source_id}"', - ) - if hasattr(chunk_del_result, "delete_count"): - chunks_deleted_count = chunk_del_result.delete_count - elif hasattr(chunk_del_result, "primary_keys"): - chunks_deleted_count = len(chunk_del_result.primary_keys) - else: - chunks_deleted_count = 0 - - self.logger.info( - f"Removed {chunks_deleted_count} chunks from main collection for '{source_id}'" - ) - except Exception as e: - self.logger.exception( - f"Failed to remove chunks from main collection for '{source_id}': {e}" - ) - - self.logger.info( - f"Removal complete for '{source_id}'. Metadata removed: {metadata_deleted_count}, Chunks removed: {chunks_deleted_count}" - ) - return metadata_deleted_count, chunks_deleted_count - - def _define_main_schema(self) -> CollectionSchema: - """Defines the Milvus collection schema for document chunks.""" - fields = [ - FieldSchema(name="pk", dtype=DataType.INT64, is_primary=True, auto_id=True), - FieldSchema( - name="chunk_id", - dtype=DataType.VARCHAR, - max_length=64, - description="Original chunk identifier", - ), - FieldSchema(name="embedding", dtype=DataType.FLOAT_VECTOR, dim=self.embedding_dim), - FieldSchema(name="text", dtype=DataType.VARCHAR, max_length=32768), - FieldSchema( - name="label", dtype=DataType.ARRAY, element_type=DataType.VARCHAR, max_length=64 - ), - FieldSchema(name="page_numbers", dtype=DataType.ARRAY, element_type=DataType.INT16), - FieldSchema(name="headings", dtype=DataType.VARCHAR, max_length=512), - FieldSchema( - name="source", - dtype=DataType.VARCHAR, - max_length=512, - description="Source document filename stem (e.g., pdf_file.stem)", - ), - ] - return CollectionSchema( - fields, description="Document Chunks Collection", enable_dynamic_field=True - ) - - def _define_metadata_schema(self) -> CollectionSchema: - """Defines the Milvus collection schema for document metadata.""" - fields = [ - FieldSchema(name="pk", dtype=DataType.INT64, is_primary=True, auto_id=True), - FieldSchema( - name="source", - dtype=DataType.VARCHAR, - max_length=512, - description="Unique source identifier/filename stem (e.g., pdf_file.stem)", - ), - FieldSchema( - name="original_filename", - dtype=DataType.VARCHAR, - max_length=1024, - description="Original filename of the source document", - ), - FieldSchema( - name="date_added", - dtype=DataType.VARCHAR, - max_length=64, - description="ISO 8601 timestamp when the document was added", - ), - ] - return CollectionSchema( - fields, description="Document Metadata Collection", enable_dynamic_field=False - ) - - def _get_or_create_collection(self, collection_name: str, schema: CollectionSchema) -> None: - """Creates the specified collection if it doesn't exist.""" - try: - collection_exists = self.client.has_collection(collection_name) - if not collection_exists: - self.logger.info(f"Creating collection '{collection_name}'") - self.client.create_collection(collection_name=collection_name, schema=schema) - else: - self.logger.info(f"Collection '{collection_name}' already exists.") - if collection_name == self.collection_name: - self._check_collection_dimension(collection_name) - - except Exception as e: - self.logger.exception(f"Failed to check/create collection '{collection_name}': {e}") - raise - - def _check_collection_dimension(self, collection_name: str) -> None: - """Verify the dimension of the existing collection's embedding field.""" - try: - collection_info = self.client.describe_collection(collection_name) - for field in collection_info["fields"]: - if field["name"] == "embedding": - existing_dim = field["params"]["dim"] - if existing_dim != self.embedding_dim: - error_msg = ( - f"Dimension mismatch for collection '{collection_name}'! " - f"Expected (from model '{self.model_identifier}'): {self.embedding_dim}. " - f"Found in existing collection: {existing_dim}. " - f"Must drop and recreate collection or use matching model." - ) - self.logger.critical(error_msg) - raise ValueError(error_msg) - return # Found the embedding field - self.logger.warning( - f"Could not find 'embedding' field in existing collection '{collection_name}' description." - ) - except Exception as e: - self.logger.exception( - f"Failed to check dimension for existing collection '{collection_name}': {e}" - ) - # Decide if this should be a critical error? For now, just log. - - def _build_indices(self) -> None: - """Creates indices for both main and metadata collections if they don't exist.""" - try: - self.logger.info( - f"Ensuring vector index exists on 'embedding' for '{self.collection_name}'" - ) - index_params = self.client.prepare_index_params() - index_params.add_index( - field_name="embedding", - index_type="IVF_FLAT", - metric_type="COSINE", - params={"nlist": 128}, - ) - self.client.create_index( - collection_name=self.collection_name, index_params=index_params - ) - self.logger.info(f"Vector index ensured for '{self.collection_name}'") - except Exception as e: - self.logger.warning(f"Could not ensure vector index for '{self.collection_name}': {e}") - - # metadata db index - metadata_index_field = "source" - try: - metadata_index_params = self.client.prepare_index_params() - metadata_index_params.add_index(field_name=metadata_index_field) - self.logger.info( - f"Ensuring scalar index exists on '{metadata_index_field}' for '{self.metadata_collection_name}'" - ) - self.client.create_index( - collection_name=self.metadata_collection_name, index_params=metadata_index_params - ) - self.logger.info(f"Scalar index ensured for '{self.metadata_collection_name}'") - except Exception as e: - self.logger.warning( - f"Could not ensure scalar index for '{self.metadata_collection_name}': {e}" - ) - - -def sanitize_model_identifier(model_identifier: str) -> str: - """ - Sanitizes a model identifier string to be suitable for a Milvus collection name suffix. - - Replaces potentially problematic characters like '/', '.', '-' with underscores '_' - and ensures the name starts and ends with alphanumeric characters. - """ - sanitized = re.sub(r"[^a-zA-Z0-9_]", "_", model_identifier) - sanitized = sanitized.strip("_") - if not sanitized: - return "default_model" - if not re.match(r"^[a-zA-Z_]", sanitized): - sanitized = "_" + sanitized - max_len = 200 # Milvus char limit for collection names is 255 - if len(sanitized) > max_len: - sanitized = sanitized[:max_len] - - return sanitized diff --git a/paperchat/llms/__init__.py b/paperchat/llms/__init__.py deleted file mode 100644 index c83a7f3..0000000 --- a/paperchat/llms/__init__.py +++ /dev/null @@ -1,15 +0,0 @@ -""" -LLM provider interface for multiple AI model providers. -""" - -from .anthropic import AnthropicAdapter -from .gemini import GeminiAdapter -from .manager import LLMManager -from .openai import OpenAIAdapter - -__all__ = [ - "AnthropicAdapter", - "GeminiAdapter", - "LLMManager", - "OpenAIAdapter", -] diff --git a/paperchat/llms/anthropic.py b/paperchat/llms/anthropic.py deleted file mode 100644 index 49a6bf6..0000000 --- a/paperchat/llms/anthropic.py +++ /dev/null @@ -1,106 +0,0 @@ -""" -Anthropic provider implementation. -""" - -from typing import Any, Generator - -from anthropic import Anthropic - -from ..utils.api_keys import get_api_key -from ..utils.config import DEFAULT_SYSTEM_PROMPT - - -class AnthropicAdapter: - """Anthropic provider implementation.""" - - @staticmethod - def list_models(client: Any | None = None) -> list[dict[str, Any]]: - """List available models from Anthropic.""" - return [ - {"id": "claude-3-7-sonnet-20250219"}, - {"id": "claude-3-5-sonnet-20241022"}, - {"id": "claude-3-5-haiku-20241022"}, - {"id": "claude-3-opus-20240229"}, - ] - - @staticmethod - def get_client(api_key: str | None = None) -> Anthropic: - """Get an Anthropic client with appropriate API key.""" - if not api_key: - api_key = get_api_key("anthropic") - if not api_key: - return None - - return Anthropic(api_key=api_key) - - @staticmethod - def build_prompt(query: str, context: str) -> dict[str, Any]: - """Build a prompt for the Anthropic API.""" - return { - "system": DEFAULT_SYSTEM_PROMPT, - "messages": [ - { - "role": "user", - "content": f"Here is the relevant context from the paper:\n\n{context}\n\nQuestion: {query}", - } - ], - } - - @staticmethod - def generate_response( - query: str, - context: str, - model: str, - temperature: float, - max_tokens: int, - client: Anthropic | None = None, - ) -> str: - """Generate a response from Anthropic.""" - if client is None: - client = AnthropicAdapter.get_client() - - if client is None: - return "Error: Unable to create Anthropic client. Please check your API key." - - prompt = AnthropicAdapter.build_prompt(query, context) - - try: - message = client.messages.create( - model=model, - system=prompt["system"], - messages=prompt["messages"], - temperature=temperature, - max_tokens=max_tokens, - ) - return message.content[0].text - - except Exception as e: - return f"Error generating response: {e!s}" - - @staticmethod - def generate_streaming_response( - query: str, - context: str, - model: str, - temperature: float, - max_tokens: int, - client: Anthropic | None = None, - ) -> Generator[str, None, None]: - """Generate a streaming response from Anthropic.""" - if client is None: - client = AnthropicAdapter.get_client() - prompt = AnthropicAdapter.build_prompt(query, context) - - try: - with client.messages.stream( - model=model, - system=prompt["system"], - messages=prompt["messages"], - temperature=temperature, - max_tokens=max_tokens, - ) as stream: - for text in stream.text_stream: - yield text - - except Exception as e: - yield f"Error generating response: {e!s}" diff --git a/paperchat/llms/common.py b/paperchat/llms/common.py deleted file mode 100644 index 94b58d9..0000000 --- a/paperchat/llms/common.py +++ /dev/null @@ -1,183 +0,0 @@ -""" -Common protocols and interfaces for LLM providers. -""" - -import logging -from typing import Any, Generator, Protocol, Type, runtime_checkable - -from ..utils.config import DEFAULT_PROVIDER -from .anthropic import AnthropicAdapter -from .gemini import GeminiAdapter -from .openai import OpenAIAdapter - -logger = logging.getLogger(__name__) - - -@runtime_checkable -class LLMProvider(Protocol): - """Protocol defining the interface for LLM providers.""" - - @staticmethod - def get_client(api_key: str | None = None) -> Any: - """Get a client for this provider.""" - ... - - @staticmethod - def build_prompt(query: str, context: str) -> Any: - """Build a provider-specific prompt.""" - ... - - @staticmethod - def generate_response( - query: str, - context: str, - model: str, - temperature: float, - max_tokens: int, - client: Any | None = None, - ) -> str: - """Generate a response from the LLM.""" - ... - - @staticmethod - def generate_streaming_response( - query: str, - context: str, - model: str, - temperature: float, - max_tokens: int, - client: Any | None = None, - ) -> Generator[str, None, None]: - """Generate a streaming response from the LLM.""" - ... - - @staticmethod - def list_models(client: Any | None = None) -> list[dict[str, Any]]: - """List available models from the provider.""" - ... - - -# registry of available LLM providers -PROVIDERS: dict[str, Type[LLMProvider]] = { - "openai": OpenAIAdapter, - "anthropic": AnthropicAdapter, - "gemini": GeminiAdapter, -} - - -def get_provider(provider_name: str = DEFAULT_PROVIDER) -> Type[LLMProvider]: - """ - Get the provider class for the specified provider name. - - Args: - provider_name: Name of the provider to use - - Returns: - Provider class - - Raises: - ValueError: If the provider is not supported - """ - provider = PROVIDERS.get(provider_name) - if provider is None: - supported = ", ".join(PROVIDERS.keys()) - raise ValueError(f"Unsupported provider: {provider_name}. Supported providers: {supported}") - - return provider - - -def get_client(provider_name: str = DEFAULT_PROVIDER, api_key: str | None = None) -> Any: - """Get a client for the specified provider.""" - provider = get_provider(provider_name) - - return provider.get_client(api_key) - - -def generate_response( - query: str, - context: str, - model: str, - temperature: float, - max_tokens: int, - client: Any | None = None, - provider_name: str = DEFAULT_PROVIDER, -) -> str: - """ - Generate a response using the specified provider. - - Args: - query: User's question - context: Context from retrieved document chunks - model: Model to use - temperature: Temperature parameter (0-1) - max_tokens: Maximum tokens in response - client: Optional client instance - provider_name: Name of the provider to use - - Returns: - Generated response - """ - provider = get_provider(provider_name) - - return provider.generate_response( - query=query, - context=context, - model=model, - temperature=temperature, - max_tokens=max_tokens, - client=client, - ) - - -def generate_streaming_response( - query: str, - context: str, - model: str, - temperature: float, - max_tokens: int, - client: Any | None = None, - provider_name: str = DEFAULT_PROVIDER, -) -> Generator[str, None, None]: - """ - Generate a streaming response using the specified provider. - - Args: - query: User's question - context: Context from retrieved document chunks - model: Model to use - temperature: Temperature parameter (0-1) - max_tokens: Maximum tokens in response - client: Optional client instance - provider_name: Name of the provider to use - - Yields: - Chunks of the generated response - """ - provider = get_provider(provider_name) - - yield from provider.generate_streaming_response( - query=query, - context=context, - model=model, - temperature=temperature, - max_tokens=max_tokens, - client=client, - ) - - -def register_provider(name: str, provider_class: Type[LLMProvider]) -> None: - """Register a new LLM provider.""" - PROVIDERS[name] = provider_class - - -def list_available_providers() -> list[str]: - """List all available provider names.""" - - return list(PROVIDERS.keys()) - - -def list_llm_models(provider_name: str = DEFAULT_PROVIDER) -> list[dict[str, Any]]: - """List LLM models available from the specified provider.""" - provider = get_provider(provider_name) - - return provider.list_models() diff --git a/paperchat/llms/gemini.py b/paperchat/llms/gemini.py deleted file mode 100644 index 840644d..0000000 --- a/paperchat/llms/gemini.py +++ /dev/null @@ -1,106 +0,0 @@ -""" -Gemini provider implementation. -""" - -from typing import Any, Generator - -from google import genai -from google.genai import types - -from ..utils.api_keys import get_api_key -from ..utils.config import DEFAULT_SYSTEM_PROMPT - - -class GeminiAdapter: - """Gemini provider implementation.""" - - @staticmethod - def list_models(client: Any | None = None) -> list[dict[str, Any]]: - """List available models from Gemini.""" - return [ - {"id": "gemini-2.5-pro-exp-03-25"}, - {"id": "gemini-2.5-flash-preview-04-17"}, - {"id": "gemini-2.0-flash"}, - {"id": "gemini-2.5-pro-preview-03-25"}, - ] - - @staticmethod - def get_client(api_key: str | None = None) -> Any: - """Get a Gemini client with appropriate API key.""" - if not api_key: - api_key = get_api_key("gemini") - if not api_key: - return None - - return genai.Client(api_key=api_key) - - @staticmethod - def build_prompt(query: str, context: str) -> str: - """Build a prompt for the Gemini API.""" - return f"Here is the relevant context from the paper:\n\n{context}\n\nQuestion: {query}" - - @staticmethod - def generate_response( - query: str, - context: str, - model: str, - temperature: float, - max_tokens: int, - client: Any | None = None, - ) -> str: - """Generate a response from Gemini.""" - if client is None: - client = GeminiAdapter.get_client() - if client is None: - return "Error: Unable to create Gemini client. Please check your API key." - - prompt = GeminiAdapter.build_prompt(query, context) - - try: - response = client.models.generate_content( - model=model, - contents=prompt, - config=types.GenerateContentConfig( - temperature=temperature, - max_output_tokens=max_tokens, - system_instruction=DEFAULT_SYSTEM_PROMPT, - ), - ) - return response.text - - except Exception as e: - return f"Error generating response: {e!s}" - - @staticmethod - def generate_streaming_response( - query: str, - context: str, - model: str, - temperature: float, - max_tokens: int, - client: Any | None = None, - ) -> Generator[str, None, None]: - """Generate a streaming response from Gemini.""" - if client is None: - client = GeminiAdapter.get_client() - if client is None: - yield "Error: Unable to create Gemini client. Please check your API key." - return - - prompt = GeminiAdapter.build_prompt(query, context) - - try: - for chunk in client.models.generate_content_stream( - model=model, - contents=prompt, - config=types.GenerateContentConfig( - temperature=temperature, - max_output_tokens=max_tokens, - system_instruction=DEFAULT_SYSTEM_PROMPT, - ), - ): - if chunk.text: - yield chunk.text - - except Exception as e: - yield f"Error generating response: {e!s}" diff --git a/paperchat/llms/manager.py b/paperchat/llms/manager.py deleted file mode 100644 index e1e312c..0000000 --- a/paperchat/llms/manager.py +++ /dev/null @@ -1,63 +0,0 @@ -from typing import Any, Generator - -from .common import get_provider - - -class LLMManager: - """Manager class for handling LLM providers and clients.""" - - def __init__(self, config: dict[str, Any], api_key: str | None = None): - """Initialize the LLM manager with a configuration dictionary. - - Args: - config: Dictionary with 'provider_name', 'model_id', 'temperature', 'max_tokens' - api_key: Optional API key for the provider - """ - self.config = config - self._api_key = api_key - self._client = None - - @property - def client(self) -> Any: - """Get or create the LLM client.""" - if self._client is None: - self._client = self._create_client() - return self._client - - def _create_client(self) -> Any: - """Create a new client for the configured provider.""" - provider = get_provider(self.config["provider_name"]) - return provider.get_client(self._api_key) - - def generate_response(self, query: str, context: str) -> str: - """Generate a response from the LLM.""" - provider = get_provider(self.config["provider_name"]) - return provider.generate_response( - query=query, - context=context, - model=self.config["model_id"], - temperature=self.config["temperature"], - max_tokens=self.config["max_tokens"], - client=self.client, - ) - - def generate_streaming_response(self, query: str, context: str) -> Generator[str, None, None]: - """Generate a streaming response from the LLM.""" - provider = get_provider(self.config["provider_name"]) - yield from provider.generate_streaming_response( - query=query, - context=context, - model=self.config["model_id"], - temperature=self.config["temperature"], - max_tokens=self.config["max_tokens"], - client=self.client, - ) - - def update_config(self, **kwargs) -> None: - """Update the configuration with new values.""" - provider_changed = "provider_name" in kwargs - - self.config.update(kwargs) - - if provider_changed: - self._client = None diff --git a/paperchat/llms/openai.py b/paperchat/llms/openai.py deleted file mode 100644 index f7f49d5..0000000 --- a/paperchat/llms/openai.py +++ /dev/null @@ -1,95 +0,0 @@ -""" -OpenAI provider implementation. -""" - -from typing import Any, Generator - -from openai import OpenAI - -from ..utils.api_keys import get_api_key -from ..utils.config import DEFAULT_SYSTEM_PROMPT - - -class OpenAIAdapter: - """OpenAI provider implementation.""" - - @staticmethod - def list_models(client: Any | None = None) -> list[dict[str, Any]]: - """List available models from OpenAI.""" - return [{"id": "gpt-4.1"}, {"id": "gpt-4.1-mini"}, {"id": "gpt-4.1-nano"}] - - @staticmethod - def get_client(api_key: str | None = None) -> OpenAI: - """Get an OpenAI client with appropriate API key.""" - if not api_key: - api_key = get_api_key("openai") - if not api_key: - return None - - return OpenAI(api_key=api_key) - - @staticmethod - def build_prompt(query: str, context: str) -> list[dict[str, str]]: - """Build a prompt for the OpenAI API.""" - return [ - {"role": "system", "content": DEFAULT_SYSTEM_PROMPT}, - { - "role": "user", - "content": f"Here is the relevant context from the paper:\n\n{context}\n\nQuestion: {query}", - }, - ] - - @staticmethod - def generate_response( - query: str, - context: str, - model: str, - temperature: float, - max_tokens: int, - client: OpenAI | None = None, - ) -> str: - """Generate a response from OpenAI.""" - if client is None: - client = OpenAIAdapter.get_client() - if client is None: - return "Error: Unable to create OpenAI client. Please check your API key." - - messages = OpenAIAdapter.build_prompt(query, context) - try: - completion = client.chat.completions.create( - model=model, messages=messages, temperature=temperature, max_tokens=max_tokens - ) - return completion.choices[0].message.content - - except Exception as e: - return f"Error generating response: {e!s}" - - @staticmethod - def generate_streaming_response( - query: str, - context: str, - model: str, - temperature: float, - max_tokens: int, - client: OpenAI | None = None, - ) -> Generator[str, None, None]: - """Generate a streaming response from OpenAI.""" - if client is None: - client = OpenAIAdapter.get_client() - - messages = OpenAIAdapter.build_prompt(query, context) - try: - stream = client.chat.completions.create( - model=model, - messages=messages, - temperature=temperature, - max_tokens=max_tokens, - stream=True, - ) - - for chunk in stream: - if chunk.choices and chunk.choices[0].delta.content: - yield chunk.choices[0].delta.content - - except Exception as e: - yield f"Error generating response: {e!s}" diff --git a/paperchat/ui/__init__.py b/paperchat/ui/__init__.py deleted file mode 100644 index cc2ba02..0000000 --- a/paperchat/ui/__init__.py +++ /dev/null @@ -1,38 +0,0 @@ -""" -UI components for the Streamlit application. - -This module exports UI rendering components that can be used -to build and display different parts of the Streamlit application. -""" - -from .api_settings import render_api_key_manager -from .chat import render_api_key_setup, render_main_content -from .common import ( - check_model_config_changes, - refresh_model_state, - render_page_header, - set_css_styles, -) -from .document import render_sidebar -from .settings import ( - render_api_key_table, - render_settings_page, -) - -__all__ = [ - # Common UI components - "check_model_config_changes", - "refresh_model_state", - # API Settings - "render_api_key_manager", - # Chat UI - "render_api_key_setup", - # Settings UI - "render_api_key_table", - "render_main_content", - "render_page_header", - "render_settings_page", - # Document UI - "render_sidebar", - "set_css_styles", -] diff --git a/paperchat/ui/api_settings.py b/paperchat/ui/api_settings.py deleted file mode 100644 index c4703b3..0000000 --- a/paperchat/ui/api_settings.py +++ /dev/null @@ -1,177 +0,0 @@ -""" -API key settings UI components for Streamlit. -""" - -from typing import Callable, Optional - -import streamlit as st - -from paperchat.utils.api_keys import ( - get_api_key, - get_provider_display_name, - remove_api_key, - set_api_key, -) - - -def render_api_key_form(provider: str, on_save_callback: Optional[Callable] = None) -> bool: - """ - Render an API key configuration form for a provider and handle the form submission. - - Args: - provider: Provider ID (e.g., 'openai') - on_save_callback: Function to call when settings are saved - - Returns: - True if form was submitted, False otherwise - """ - provider_name = get_provider_display_name(provider) - - form_key = f"{provider}_api_key_form" - - with st.form(form_key): - api_key = st.text_input( - f"{provider_name} API Key", - type="password", - value=get_api_key(provider) or "", - placeholder=f"Enter your {provider_name} API key", - help=f"API key for {provider_name} services. This will be securely stored on your device.", - ) - - submitted = st.form_submit_button("Save") - - if submitted: - # Check for empty value - if not api_key: - st.error("API key cannot be empty.") - return False - - # Save the API key - success, error_msg = set_api_key(provider, api_key) - if success: - st.success(f"{provider_name} API key saved successfully!") - if on_save_callback: - on_save_callback() - return True - else: - st.error(f"Failed to save API key: {error_msg}") - return False - - return False - - -def render_api_key_section(provider: str, on_save_callback: Optional[Callable] = None) -> bool: - """ - Render a provider API key section with current status and edit form. - - Args: - provider: Provider ID - on_save_callback: Function to call when settings are saved - - Returns: - True if API key is configured, False otherwise - """ - provider_name = get_provider_display_name(provider) - api_key = get_api_key(provider) - is_configured = api_key is not None - - col1, col2 = st.columns([3, 1]) - - with col1: - if is_configured: - st.success(f"{provider_name} API key is configured") - else: - st.info(f"No {provider_name} API key configured") - - with col2: - if is_configured and st.button(f"Remove {provider} Key", key=f"remove_{provider}_key"): - success, message = remove_api_key(provider) - if success: - st.success(message) - if on_save_callback: - on_save_callback() - st.rerun() - else: - st.error(message) - return is_configured - - # Render the form if not configured or edit button pressed - if not is_configured or st.button(f"Edit {provider} Key", key=f"edit_{provider}_key"): - render_api_key_form(provider, on_save_callback) - - return is_configured - - -def render_api_key_manager(provider: str, on_save_callback: Optional[Callable] = None) -> bool: - """ - Render a complete API key management UI for a provider. - - Args: - provider: Provider ID (e.g., 'openai') - on_save_callback: Function to call when settings are saved - - Returns: - True if API key is configured, False otherwise - """ - provider_name = get_provider_display_name(provider) - api_key = get_api_key(provider) - is_configured = api_key is not None - - st.subheader(f"{provider_name} API Key") - - if is_configured: - st.success(f"{provider_name} API key is configured") - - col1, col2 = st.columns(2) - with col1: - if st.button("Edit API Key", key=f"edit_{provider}_api_key"): - st.session_state[f"show_{provider}_edit"] = True - with col2: - if st.button("Remove API Key", key=f"remove_{provider}_api_key"): - success, message = remove_api_key(provider) - if success: - st.success(message) - if on_save_callback: - on_save_callback() - st.rerun() - else: - st.error(message) - else: - st.info(f"No {provider_name} API key configured") - st.session_state[f"show_{provider}_edit"] = True - - if st.session_state.get(f"show_{provider}_edit", False): - render_api_key_form(provider, on_save_callback) - - return is_configured - - -def render_api_keys_section(on_save_callback: Optional[Callable] = None) -> None: - """ - Render a section showing all available API providers and their configuration status. - - Args: - on_save_callback: Function to call when settings are saved - """ - from paperchat.utils.api_keys import get_available_providers - - st.subheader("API Keys") - st.markdown("Configure API keys for language model providers:") - - for provider in get_available_providers(): - with st.expander(get_provider_display_name(provider), expanded=True): - render_api_key_section(provider, on_save_callback) - if provider == "openai": - st.caption( - "Get an OpenAI API key from [OpenAI API Keys](https://platform.openai.com/api-keys)" - ) - elif provider == "anthropic": - st.caption( - "Get an Anthropic API key from [Anthropic Console](https://console.anthropic.com/)" - ) - elif provider == "gemini": - st.caption( - "Get a Gemini API key from [Google AI Studio](https://aistudio.google.com/app/apikey)" - ) - - st.divider() diff --git a/paperchat/ui/chat.py b/paperchat/ui/chat.py deleted file mode 100644 index 213ee19..0000000 --- a/paperchat/ui/chat.py +++ /dev/null @@ -1,209 +0,0 @@ -""" -Chat interface UI components for Streamlit. -""" - -from typing import Generator - -import streamlit as st - -from ..utils.formatting import ( - format_response_with_citations, - format_retrieved_chunks_for_display, - process_citations, -) -from .common import check_model_config_changes, render_page_header - - -def render_api_key_setup() -> None: - """Render the API key setup screen when no keys are configured.""" - from paperchat.ui.api_settings import render_api_key_manager - - render_page_header("Welcome to PaperChat 🔑", "Configure your API key to get started") - - st.markdown(""" - To use PaperChat, you'll need at least one API key from a supported provider. - Please configure an API key below to continue. - """) - - tab1, tab2 = st.tabs(["OpenAI", "Anthropic"]) - - with tab1: - openai_configured = render_api_key_manager("openai", on_save_callback=lambda: st.rerun()) - st.markdown(""" - **Need an OpenAI API key?** - 1. Go to [OpenAI API Keys](https://platform.openai.com/api-keys) - 2. Create an account or sign in - 3. Click "Create new secret key" - 4. Copy the key and paste it above - """) - - with tab2: - anthropic_configured = render_api_key_manager( - "anthropic", on_save_callback=lambda: st.rerun() - ) - st.markdown(""" - **Need an Anthropic API key?** - 1. Go to [Anthropic Console](https://console.anthropic.com/) - 2. Create an account or sign in - 3. Navigate to API Keys and create a new key - 4. Copy the key and paste it above - """) - - if (openai_configured or anthropic_configured) and st.button( - "Continue to PaperChat", use_container_width=True - ): - st.session_state.show_api_setup = False - st.rerun() - - -def _get_retrieval_filter() -> str | None: - """Determine the Milvus filter expression based on selected documents.""" - selected_docs = st.session_state.get("selected_documents") - filter_expression = None - - if not selected_docs: - st.info("ℹ️ No specific documents selected. Searching across the entire knowledge base.") - return None - - # build the filter basd on list items - if isinstance(selected_docs, list) and len(selected_docs) > 0: - # construct a Milvus 'in' filter expression - # e.g., source in ["doc1", "doc2"] - formatted_sources = [f'"{doc_name}"' for doc_name in selected_docs] - filter_expression = f"source in [{', '.join(formatted_sources)}]" - else: - st.warning("Selected documents state is invalid. Searching across all documents.") - # fallback to searching all if state is weird - filter_expression = None - - return filter_expression - - -def _handle_rag_query( - user_query: str, filter_expression: str | None, top_k: int -) -> tuple[Generator[str, None, None], list] | tuple[None, None]: - """ - Execute RAG pipeline: retrieve chunks and return generator stream + retrieved chunks. - - Args: - user_query: The user's query string. - filter_expression: Milvus filter expression for retrieval. - top_k: Number of chunks to retrieve. - - Returns: - A tuple containing the LLM response generator and the list of retrieved chunks, - or (None, None) if an error occurs. - """ - try: - rag_pipeline = st.session_state.rag_pipeline - - retrieved_chunks = rag_pipeline.retrieve( - query=user_query, top_k=top_k, filter_expression=filter_expression - ) - - llm_response_stream = rag_pipeline.generate( - query=user_query, - retrieved_results=retrieved_chunks, - stream=True, - ) - return llm_response_stream, retrieved_chunks - - except Exception as e: - error_message = f"Sorry, I encountered an error: {e!s}" - st.error(error_message) - return None, None - - -def render_chat_interface() -> None: - """Render the chat interface.""" - chat_container = st.container() - - with chat_container: - if st.session_state.messages: - for msg in st.session_state.messages: - with st.chat_message(msg["role"]): - if msg["role"] == "assistant": - formatted_content = format_response_with_citations(msg["content"]) - st.markdown(formatted_content, unsafe_allow_html=True) - if msg.get("sources"): - with st.expander("📚 Sources", expanded=False): - sources_md = format_retrieved_chunks_for_display(msg["sources"]) - st.markdown(sources_md, unsafe_allow_html=True) - else: - st.markdown(msg["content"]) - - chat_input_placeholder = "Ask a question..." - user_query = st.chat_input(chat_input_placeholder) - - if user_query: - st.session_state.messages.append({"role": "user", "content": user_query}) - with st.chat_message("user"): - st.markdown(user_query) - - with st.chat_message("assistant"): - response_placeholder = st.empty() - response_placeholder.markdown("Thinking...▌") - - check_model_config_changes() - top_k = st.session_state.config.get("top_k", 5) - - filter_expression = _get_retrieval_filter() - llm_response_stream, retrieved_chunks = _handle_rag_query( - user_query, filter_expression, top_k - ) - - if llm_response_stream and retrieved_chunks is not None: - full_response = response_placeholder.write_stream(llm_response_stream) - - processed_response, cited_chunks_filtered = process_citations( - full_response, retrieved_chunks - ) - - formatted_final_content = format_response_with_citations(processed_response) - response_placeholder.markdown(formatted_final_content, unsafe_allow_html=True) - - message_data = { - "role": "assistant", - "content": processed_response, - "sources": cited_chunks_filtered, - } - st.session_state.messages.append(message_data) - - if cited_chunks_filtered: - with st.expander("📚 Sources", expanded=False): - sources_md = format_retrieved_chunks_for_display(cited_chunks_filtered) - st.markdown(sources_md, unsafe_allow_html=True) - else: - response_placeholder.error("An error occurred while processing your request.") - st.session_state.messages.append( - { - "role": "assistant", - "content": "Sorry, I couldn't process your request due to an error.", - "sources": [], - } - ) - - -def render_main_content() -> None: - """Render the main content area with chat or welcome screen.""" - selected_docs = st.session_state.get("selected_documents") - - if selected_docs and isinstance(selected_docs, list) and len(selected_docs) > 0: - render_chat_interface() - elif selected_docs is not None and isinstance(selected_docs, list) and len(selected_docs) == 0: - st.info( - "Please select one or more documents from the 'Select Chat Context' dropdown in the sidebar to begin chatting." - ) - else: - # this branch covers cases where selected_documents hasn't been initialized yet - # (e.g., on first run or if pipeline failed) - st.markdown(""" - ### 👋 Welcome to PaperChat! - - To get started: - 1. Upload one or more PDFs using the sidebar - 2. Select the document(s) you want to chat with - 3. Ask questions about the document content - - PaperChat will use AI to retrieve relevant information and provide answers based on the selected document(s). - """) diff --git a/paperchat/ui/common.py b/paperchat/ui/common.py deleted file mode 100644 index 1d17661..0000000 --- a/paperchat/ui/common.py +++ /dev/null @@ -1,206 +0,0 @@ -""" -Common UI components. -""" - -import streamlit as st - -from paperchat.core import RAGPipeline -from paperchat.llms import LLMManager -from paperchat.utils.api_keys import get_api_key -from paperchat.utils.config import DEFAULT_MODEL, DEFAULT_PROVIDER - - -def set_css_styles() -> None: - """ - Apply custom CSS styles to improve the UI appearance. - - This function adds custom CSS to the Streamlit app to enhance the appearance - of various UI elements. - """ - st.markdown( - """ - - """, - unsafe_allow_html=True, - ) - - -def refresh_model_state() -> None: - """ - Refresh LLM manager and RAG pipeline with current config settings. - - This function should be called whenever model settings change to ensure - the LLM provider and model are correctly updated. - """ - provider_name = st.session_state.config.get("provider_name", DEFAULT_PROVIDER) - api_key = get_api_key(provider_name) - - st.session_state.llm_manager = LLMManager(config=st.session_state.config, api_key=api_key) - st.session_state.rag_pipeline = RAGPipeline(llm_manager=st.session_state.llm_manager) - - if "previous_config" not in st.session_state: - st.session_state.previous_config = {} - - st.session_state.previous_config = { - "provider_name": provider_name, - "model_id": st.session_state.config.get("model_id", DEFAULT_MODEL), - "temperature": st.session_state.config.get("temperature", 0.7), - } - - -def check_model_config_changes() -> bool: - """ - Check if model configuration has changed and needs refresh. - - Returns: - bool: True if config changed and model state was refreshed - """ - if "previous_config" not in st.session_state: - refresh_model_state() - return True - - prev_config = st.session_state.previous_config - current_config = st.session_state.config - if prev_config.get("provider_name") != current_config.get("provider_name") or prev_config.get( - "model_id" - ) != current_config.get("model_id"): - refresh_model_state() - return True - - return False - - -def render_page_header(title: str, subtitle: str | None = None) -> None: - """ - Render a consistent page header with title and optional subtitle. - - Args: - title: Main page title - subtitle: Optional subtitle text - """ - st.title(title) - if subtitle: - st.markdown(f"**{subtitle}**") - st.divider() diff --git a/paperchat/ui/document.py b/paperchat/ui/document.py deleted file mode 100644 index abb7fd6..0000000 --- a/paperchat/ui/document.py +++ /dev/null @@ -1,454 +0,0 @@ -""" -Document handling UI components for Streamlit. -""" - -import hashlib -import logging -import os -import tempfile -from pathlib import Path - -import streamlit as st - -from paperchat.llms.common import list_llm_models -from paperchat.ui.common import refresh_model_state -from paperchat.ui.settings import ( - update_global_settings, -) -from paperchat.utils.api_keys import get_api_key, get_available_providers - -logger = logging.getLogger("document_ui") - - -def render_compact_settings_ui() -> None: - """Render a compact settings UI for the sidebar.""" - - all_models = [] - active_provider = st.session_state.config.get("provider_name", "") - active_model = st.session_state.config.get("model_id", "") - - for provider in get_available_providers(): - if not get_api_key(provider): - continue - - models = list_llm_models(provider_name=provider) - for model in models: - model_display = f"{model['id']}" - all_models.append( - {"display": model_display, "provider": provider, "model_id": model["id"]} - ) - - if not all_models: - st.warning("No models available. Please configure API keys in settings.") - return - - st.markdown("**Model Selection**") - - selected_index = 0 - for i, model_info in enumerate(all_models): - if model_info["provider"] == active_provider and model_info["model_id"] == active_model: - selected_index = i - break - - selected_model = st.selectbox( - "Select model:", - options=range(len(all_models)), - format_func=lambda i: all_models[i]["display"], - index=selected_index, - ) - - selected_provider = all_models[selected_model]["provider"] - selected_model_id = all_models[selected_model]["model_id"] - - if selected_provider != active_provider or selected_model_id != active_model: - st.session_state.config.update( - { - "provider_name": selected_provider, - "model_id": selected_model_id, - } - ) - - current_temp = st.session_state.config.get("temperature", 0.7) - temperature = st.slider( - "Temperature", - min_value=0.0, - max_value=2.0, - value=current_temp, - step=0.1, - help="Controls randomness: 0=deterministic, 2=creative", - ) - - st.session_state.config["temperature"] = temperature - - st.markdown("---") - st.markdown("**Retrieval settings:**") - top_k = st.slider( - "Chunks to retrieve", - min_value=1, - max_value=10, - value=st.session_state.config.get("top_k", 5), - help="Higher values retrieve more chunks but may include less relevant information", - ) - - update_global_settings(selected_provider, selected_model_id, temperature) - - st.session_state.config["top_k"] = top_k - - -def check_vector_store_for_document(content_hash: str, original_filename: str) -> bool: - """Check if a document exists in the vector store. - - Args: - content_hash: Hash of the document - original_filename: Original filename - - Returns: - True if document was found in vector store, False otherwise - """ - vector_store = st.session_state.vector_store - - exists, doc_info = vector_store.get_document_info(content_hash) - - if exists: - collection_name = doc_info["collection_name"] - logger.debug(f"Found document in registry: {original_filename} -> {collection_name}") - - collections = vector_store.list_collections() - - if collection_name in collections: - info = vector_store.get_collection_info(collection_name) - - if info["count"] > 0: - doc_data = vector_store.get_document_texts(collection_name) - - st.session_state.processed_documents[content_hash] = { - "collection_name": collection_name, - "chunk_texts": doc_data["documents"], - "chunk_metadata": doc_data["metadatas"], - } - - st.session_state.filenames[content_hash] = original_filename - st.session_state.document_sources[content_hash] = "vector_store" - - return True - - return False - - -def _process_uploaded_pdf(file_content: bytes, original_filename: str, content_hash: str) -> None: - """Helper function to process a new PDF file and update state.""" - with st.spinner(f"Processing {original_filename}..."): - pdf_path = None - try: - with tempfile.NamedTemporaryFile(delete=False, suffix=".pdf") as tmp_file: - tmp_file.write(file_content) - pdf_path = tmp_file.name - - original_stem = Path(original_filename).stem - success = st.session_state.rag_pipeline.vector_store.add_document( - pdf_path=pdf_path, - source_id=original_stem, - ) - - if success: - st.session_state.filenames[content_hash] = original_filename - st.session_state.document_sources[content_hash] = "vector_store" - st.session_state.messages = [] - - if "selected_documents" in st.session_state and isinstance( - st.session_state.selected_documents, list - ): - if original_stem not in st.session_state.selected_documents: - st.session_state.selected_documents.append(original_stem) - logger.info(f"Added '{original_stem}' to selected documents.") - else: - st.session_state.selected_documents = [original_stem] - logger.info(f"Initialized selected documents with '{original_stem}'.") - - st.success(f"Document processed and added: {original_filename}") - st.rerun() - else: - st.error(f"Failed to process {original_filename}. Check logs.") - - except Exception as e: - logger.exception(f"Error processing uploaded file {original_filename}: {e}") - st.error(f"Error processing document: {e}") - finally: - if pdf_path and os.path.exists(pdf_path): - try: - os.unlink(pdf_path) - except Exception as e: - logger.error(f"Failed to delete temp file {pdf_path}: {e}") - - -def render_upload_section() -> None: - """Render document upload section in the sidebar.""" - st.markdown("Upload a PDF to start chatting with its content.") - - uploaded_file = st.file_uploader( - "Choose a PDF file", type=["pdf"], help="Select a PDF file to upload and process" - ) - - if uploaded_file is not None: - original_filename = uploaded_file.name - file_content = uploaded_file.getvalue() - content_hash = hashlib.md5(file_content).hexdigest() - - # check if already known - if content_hash in st.session_state.filenames: - st.success(f"Document ready: {original_filename}") - # We might re-introduce setting active_document_hash if needed for single-doc focus later - # if st.session_state.active_document_hash != content_hash: - # st.session_state.active_document_hash = content_hash - # st.session_state.messages = [] - # st.rerun() - else: - _process_uploaded_pdf(file_content, original_filename, content_hash) - - -def render_document_list() -> None: - """Render the list of processed documents.""" - if not st.session_state.filenames: - st.info("No document loaded. Please upload a PDF file to start.") - return - - st.header("📚 Loaded Documents") - - doc_items = [ - (st.session_state.filenames[hash_val], hash_val) for hash_val in st.session_state.filenames - ] - - if not doc_items: - st.info("Upload a PDF to begin.") - return - - doc_items.sort() - cols = st.columns([5, 1]) - - with cols[0]: - st.markdown("**Select a document to chat with:**") - - active_hash = st.session_state.active_document_hash - - selected_doc_hash = None - - for filename, file_hash in doc_items: - source_icon = "💾" - tooltip = f"Source: {filename} (Stored)" - - label = f"{source_icon} {filename}" - - button_type = "primary" if file_hash == active_hash else "secondary" - button_key = f"doc_select_{file_hash}" - - if st.button( - label, key=button_key, help=tooltip, type=button_type, use_container_width=True - ): - selected_doc_hash = file_hash - - if selected_doc_hash and selected_doc_hash != active_hash: - st.session_state.active_document_hash = selected_doc_hash - st.session_state.messages = [] - st.rerun() - - -def render_model_selection() -> tuple[str | None, str | None]: - """Render the model selection dropdown in the sidebar.""" - all_models = [] - active_provider = st.session_state.config.get("provider_name", "") - active_model = st.session_state.config.get("model_id", "") - - for provider in get_available_providers(): - if not get_api_key(provider): - continue - - models = list_llm_models(provider_name=provider) - for model in models: - model_display = f"{model['id']}" - all_models.append( - {"display": model_display, "provider": provider, "model_id": model["id"]} - ) - - if not all_models: - return None, None - - selected_index = 0 - for i, model_info in enumerate(all_models): - if model_info["provider"] == active_provider and model_info["model_id"] == active_model: - selected_index = i - break - - selected_model = st.selectbox( - "Model:", - options=range(len(all_models)), - format_func=lambda i: all_models[i]["display"], - index=selected_index, - ) - - selected_provider = all_models[selected_model]["provider"] - selected_model_id = all_models[selected_model]["model_id"] - - if selected_provider != active_provider or selected_model_id != active_model: - st.session_state.config.update( - { - "provider_name": selected_provider, - "model_id": selected_model_id, - } - ) - - temperature = st.session_state.config.get("temperature", 0.7) - update_global_settings(selected_provider, selected_model_id, temperature) - refresh_model_state() - st.success(f"Switched to {selected_provider.capitalize()} model: {selected_model_id}") - - return selected_provider, selected_model_id - - -def render_advanced_settings(selected_provider: str, selected_model_id: str) -> None: - """Render advanced settings like temperature and retrieval settings.""" - with st.expander("Advanced Settings", expanded=False): - if selected_provider and selected_model_id: - current_temp = st.session_state.config.get("temperature", 0.7) - temperature = st.slider( - "Temperature", - min_value=0.0, - max_value=2.0, - value=current_temp, - step=0.1, - help="Controls randomness: 0=deterministic, 2=creative", - ) - - if temperature != current_temp: - st.session_state.config["temperature"] = temperature - update_global_settings(selected_provider, selected_model_id, temperature) - refresh_model_state() - - st.markdown("**Retrieval settings:**") - top_k = st.slider( - "Chunks to retrieve", - min_value=1, - max_value=10, - value=st.session_state.config.get("top_k", 5), - help="Higher values retrieve more chunks but may include less relevant information", - ) - - if "config" in st.session_state: - st.session_state.config["top_k"] = top_k - - -def _render_document_selector(doc_names: list[str]) -> None: - """Renders the document selection checkboxes and syncs state.""" - # Apply custom CSS to shrink checkbox label font size - st.markdown( - """ - - """, - unsafe_allow_html=True, - ) - - # default to all documents - if "selected_documents" not in st.session_state: - st.session_state.selected_documents = doc_names[:] - - with st.expander("Select Chat Context", expanded=True): - st.caption("Check/uncheck boxes to select documents. Default is all selected.") - - col1, col2 = st.columns(2) - select_all_clicked = col1.button("Select All", key="select_all_docs") - deselect_all_clicked = col2.button("Deselect All", key="deselect_all_docs") - - if select_all_clicked and set(st.session_state.selected_documents) != set(doc_names): - st.session_state.selected_documents = doc_names[:] - logger.info("Selected all documents.") - st.rerun() - - if deselect_all_clicked and st.session_state.selected_documents: - st.session_state.selected_documents = [] - logger.info("Deselected all documents.") - st.rerun() - - # render checkboxes based on current session state - if doc_names: - current_ui_selection = [] - for doc_name in doc_names: - is_selected = doc_name in st.session_state.selected_documents - if st.checkbox(doc_name, value=is_selected, key=f"cb_{doc_name}"): - current_ui_selection.append(doc_name) - - # compare UI state with session state and update if checkbox interaction caused change - # this check is important to only trigger rerun on direct checkbox clicks, - # not after button clicks (which already reran). - if set(current_ui_selection) != set(st.session_state.selected_documents): - st.session_state.selected_documents = current_ui_selection - logger.info( - f"Updated selected documents via checkboxes: {st.session_state.selected_documents}" - ) - st.rerun() - else: - st.info("No documents found in the vector store.") - if st.session_state.selected_documents: - st.session_state.selected_documents = [] - # no rerun needed here as it implies doc_names just became empty - - -def render_sidebar() -> None: - """Render the app sidebar.""" - st.header("📚 Sources") - - with st.expander("Add Document", expanded=True): - render_upload_section() - - try: - if "rag_pipeline" in st.session_state and st.session_state.rag_pipeline: - vector_store = st.session_state.rag_pipeline.vector_store - doc_list = vector_store.list_documents() - doc_names = sorted([doc.get("source", "Unknown") for doc in doc_list]) - - _render_document_selector(doc_names) - - else: - st.warning("RAG Pipeline not initialized. Cannot list documents.") - if "selected_documents" not in st.session_state or st.session_state.selected_documents: - st.session_state.selected_documents = [] - - except AttributeError as e: - logger.error(f"Attribute error accessing vector store: {e}") - st.error("Could not access vector store components.") - except Exception as e: - logger.error(f"Failed to list documents from vector store: {e}") - st.error("Could not retrieve document list.") - - st.divider() - - st.header("⚙️ Settings") - - if st.button("Open Settings", key="open_settings"): - st.session_state.show_settings = True - st.rerun() - - selected_provider, selected_model_id = render_model_selection() - render_advanced_settings(selected_provider, selected_model_id) - - st.divider() - - st.header("🔄 Actions") - - col1, col2 = st.columns(2) - with col1: - if st.button("🗑️ Clear Chat"): - st.session_state.messages = [] - st.rerun() - - with col2: - if st.button("🔄 Reset All"): - st.session_state.processed_documents = {} - st.session_state.messages = [] - st.rerun() diff --git a/paperchat/ui/settings.py b/paperchat/ui/settings.py deleted file mode 100644 index 060e9d8..0000000 --- a/paperchat/ui/settings.py +++ /dev/null @@ -1,608 +0,0 @@ -""" -Settings UI components for Streamlit. -""" - -from typing import Callable - -import streamlit as st - -from paperchat.core.embeddings import ( - PROVIDERS_REQUIRING_KEYS, - list_embedding_models, -) -from paperchat.ui.common import render_page_header -from paperchat.utils.api_keys import ( - get_api_key, - get_available_providers, - get_provider_display_name, - mask_api_key, - remove_api_key, - set_api_key, -) -from paperchat.utils.settings import get_active_embedding_model, set_active_embedding_model - -from ..llms.common import list_llm_models - - -def add_api_table_css() -> None: - """ - Add custom CSS for the API key table styling. - """ - st.markdown( - """ - - """, - unsafe_allow_html=True, - ) - - -def handle_api_key_popup(provider: str) -> None: - """ - Handle the API key popup interaction for a provider. - - Args: - provider: Provider ID (e.g., 'openai') - """ - provider_name = get_provider_display_name(provider) - current_key = get_api_key(provider) or "" - - with st.form(key=f"{provider}_popup_form"): - api_key = st.text_input( - label="Edit Provider API Key", - value=current_key, - type="password" if current_key else "default", - placeholder=f"Enter {provider_name} API key...", - key=f"{provider}_popup_input", - ) - - col1, col2 = st.columns(2) - with col1: - save = st.form_submit_button("Save", use_container_width=True) - with col2: - if current_key: - delete = st.form_submit_button("Delete", use_container_width=True) - else: - close_popover = st.form_submit_button("Close", use_container_width=True) - - if save and api_key: - success, error_msg = set_api_key(provider, api_key) - if success: - st.success(f"{provider_name} API key saved successfully!") - st.rerun() - else: - st.error(f"Failed to save API key: {error_msg}") - - if current_key and delete: - success, message = remove_api_key(provider) - if success: - st.success(message) - st.rerun() - else: - st.error(message) - - if not current_key and close_popover: - st.rerun() - - -def render_model_table() -> None: - """ - Render a table of all available models across providers. - """ - st.markdown("#### Available Models") - - all_models = [] - for provider in get_available_providers(): - if not get_api_key(provider): - continue - - models = list_llm_models(provider_name=provider) - for model in models: - all_models.append( - { - "provider": provider, - "provider_display": get_provider_display_name(provider), - "model_id": model["id"], - } - ) - - if not all_models: - st.info("No models available. Please configure API keys first.") - return - - active_provider = st.session_state.config.get("provider_name", "") - active_model = st.session_state.config.get("model_id", "") - - col1, col2, col3 = st.columns([2, 3, 2]) - with col1: - st.markdown("**Provider**") - with col2: - st.markdown("**Model ID**") - with col3: - st.markdown("**Status**") - - st.divider() - - for model_info in all_models: - col1, col2, col3 = st.columns([2, 3, 2]) - - with col1: - st.markdown(f"{model_info['provider_display']}") - - with col2: - st.markdown(f"`{model_info['model_id']}`") - - with col3: - is_selected = ( - model_info["provider"] == active_provider and model_info["model_id"] == active_model - ) - if is_selected: - st.markdown("✅ **Active**") - elif st.button( - "Select", key=f"select_{model_info['provider']}_{model_info['model_id']}" - ): - st.session_state.config["provider_name"] = model_info["provider"] - st.session_state.config["model_id"] = model_info["model_id"] - - st.success(f"Selected {model_info['model_id']} as active model") - st.rerun() - - st.divider() - - -def render_api_key_table() -> None: - """ - Render a table of API providers using Streamlit's column layout for a native look. - This approach allows embedding interactive buttons directly in the table. - """ - providers = get_available_providers() - - if not providers: - st.info("No API providers are configured.") - return - - col1, col2, col3, col4 = st.columns([1, 1, 1, 1]) - with col1: - st.markdown("**ID**") - with col2: - st.markdown("**Type**") - with col3: - st.markdown("**API Key**") - with col4: - st.markdown("**Actions**") - - st.divider() - - for provider in providers: - col1, col2, col3, col4 = st.columns([1, 1, 1, 1]) - - with col1: - st.markdown(f"{provider.lower()}") - - with col2: - st.markdown(f"{get_provider_display_name(provider)}") - - with col3: - api_key = get_api_key(provider) - if api_key: - st.code(mask_api_key(api_key), language=None) - else: - st.markdown("No API Key set") - - with col4, st.popover("⚙️", use_container_width=False): - handle_api_key_popup(provider) - - st.divider() - - -def render_model_selector(provider: str) -> str: - """ - Render model selection dropdown for the specified provider. - - Args: - provider: Provider ID - - Returns: - The selected model ID - """ - st.subheader("2️⃣ Model") - - models = list_llm_models(provider_name=provider) - model_ids = [model["id"] for model in models] - - if not model_ids: - st.warning(f"No models configured for {provider.capitalize()}.") - return "" - - current_settings = st.session_state.provider_settings.get(provider, {}) - current_model = current_settings.get("model", "") - - model_index = model_ids.index(current_model) if current_model in model_ids else 0 - - selected_model = st.selectbox( - f"Select {provider.capitalize()} Model:", - options=model_ids, - index=model_index, - key=f"{provider}_model_selector", - ) - - if "provider_settings" in st.session_state and provider in st.session_state.provider_settings: - st.session_state.provider_settings[provider]["model"] = selected_model - - return selected_model - - -def render_model_settings(provider: str) -> None: - """ - Render model-specific settings UI for a provider. - - Args: - provider: Provider name (e.g., "openai") - """ - provider = provider.lower() - models = list_llm_models(provider_name=provider) - model_ids = [model["id"] for model in models] - - if model_ids: - st.selectbox( - "Default model", - model_ids, - help="Select which model to use by default", - key=f"{provider}_default_model", - ) - - st.slider( - "Temperature", - min_value=0.0, - max_value=2.0, - value=0.7, - step=0.1, - help="Controls randomness in responses: 0=deterministic, 1=creative", - key=f"{provider}_temperature", - ) - - -def render_provider_selector() -> str: - """ - Render provider selection section and return the selected provider. - - Returns: - The selected provider ID - """ - st.subheader("1️⃣ Provider") - - providers = get_available_providers() - configured_providers = [p for p in providers if get_api_key(p)] - - if not configured_providers: - st.warning("No API keys configured. Please add provider API keys in settings.") - return st.session_state.active_provider - - selected_provider = st.radio( - "Select AI Provider:", - options=configured_providers, - format_func=lambda x: x.capitalize(), - index=configured_providers.index(st.session_state.active_provider) - if st.session_state.active_provider in configured_providers - else 0, - key="provider_selector", - horizontal=True, - ) - - if selected_provider != st.session_state.active_provider: - st.session_state.active_provider = selected_provider - st.rerun() - - return selected_provider - - -def render_parameter_settings(provider: str) -> float: - """ - Render common parameter settings (temperature, etc). - - Args: - provider: Provider ID - - Returns: - The selected temperature value - """ - st.subheader("3️⃣ Parameters") - - current_settings = st.session_state.provider_settings.get(provider, {}) - current_temp = current_settings.get("temperature", 0.7) - - temperature = st.slider( - "Temperature", - min_value=0.0, - max_value=2.0, - value=current_temp, - step=0.1, - help="Controls randomness in responses: 0=deterministic, higher=more creative", - key=f"{provider}_temperature", - ) - - if "provider_settings" in st.session_state and provider in st.session_state.provider_settings: - st.session_state.provider_settings[provider]["temperature"] = temperature - - return temperature - - -def update_global_settings(provider: str, model: str, temperature: float) -> None: - """ - Update global settings based on provider selections. - - Args: - provider: Selected provider ID - model: Selected model ID - temperature: Selected temperature value - """ - if "config" not in st.session_state: - st.session_state.config = { - "provider_name": provider, - "model_id": model, - "temperature": temperature, - "max_tokens": 1000, - "top_k": 5, - } - else: - st.session_state.config.update( - { - "model_id": model, - "temperature": temperature, - "provider_name": provider, - } - ) - - -def _render_llm_settings_form_section() -> tuple[str | None, str | None, float]: - """Renders the LLM provider, model, and temperature selectors.""" - st.markdown("### LLM Configuration") - available_llm_providers = get_available_providers() - selected_model_id = None - selected_temperature = 0.7 - - if not available_llm_providers: - st.warning("No LLM providers available. Please configure API keys first.") - current_llm_provider = None - else: - current_llm_provider_name = st.session_state.config.get( - "provider_name", get_available_providers()[0] - ) - if current_llm_provider_name not in available_llm_providers: - current_llm_provider_name = available_llm_providers[0] - - llm_provider_index = available_llm_providers.index(current_llm_provider_name) - current_llm_provider = st.selectbox( - "LLM Provider", - options=available_llm_providers, - index=llm_provider_index, - format_func=get_provider_display_name, - key="llm_provider_selector", - help="Select the Large Language Model provider.", - ) - - if current_llm_provider: - models = list_llm_models(provider_name=current_llm_provider) - model_ids = [m["id"] for m in models] - current_model_id = st.session_state.config.get("model_id", "") - if current_model_id not in model_ids: - current_model_id = model_ids[0] if model_ids else "" - model_index = model_ids.index(current_model_id) if current_model_id in model_ids else 0 - - selected_model_id = st.selectbox( - "Model", - options=model_ids, - index=model_index, - key="model_selector", - help="Select the specific model to use.", - disabled=not model_ids, - ) - - current_temperature = st.session_state.config.get("temperature", 0.7) - selected_temperature = st.slider( - "Temperature", - min_value=0.0, - max_value=1.0, - value=current_temperature, - step=0.05, - key="temperature_slider", - help="Controls randomness. Lower values make responses more deterministic.", - ) - else: - st.selectbox("Model", options=[], disabled=True) - st.slider("Temperature", min_value=0.0, max_value=1.0, value=0.7, disabled=True) - - return current_llm_provider, selected_model_id, selected_temperature - - -def _render_embedding_settings_form_section() -> str | None: - """Renders the Embedding model selector.""" - st.markdown("### Embedding Configuration") - available_embed_models = list_embedding_models() - embed_model_ids = [m["id"] for m in available_embed_models] - selected_embed_model_id = None - - if not embed_model_ids: - st.warning( - "No Embedding models available. Configure required API keys (e.g., Gemini or OpenAI) or rely on the offline default." - ) - st.info("Offline default: `milvus/all-MiniLM-L6-v2` will be used.") - current_embed_model_id = "milvus/all-MiniLM-L6-v2" - st.selectbox( - "Embedding Model", - options=[current_embed_model_id], - index=0, - key="embedding_model_selector", - help="Select the model used for document embedding and search. Requires API keys for some models.", - disabled=True, - ) - else: - current_embed_model_id = get_active_embedding_model() - if current_embed_model_id not in embed_model_ids: - embed_model_index = 0 - current_embed_model_id = embed_model_ids[0] - else: - embed_model_index = embed_model_ids.index(current_embed_model_id) - - selected_embed_model_id = st.selectbox( - "Embedding Model", - options=embed_model_ids, - index=embed_model_index, - key="embedding_model_selector", - help="Select the model used for document embedding and search. API keys required for OpenAI/Gemini models.", - ) - return selected_embed_model_id - - -def _save_llm_settings( - selected_llm_provider: str | None, - selected_llm_model: str | None, - selected_llm_temp: float, -) -> bool: - """Saves LLM settings to session state and returns True if changed.""" - changed = False - if selected_llm_provider and selected_llm_model: - if st.session_state.config.get("provider_name") != selected_llm_provider: - st.session_state.config["provider_name"] = selected_llm_provider - changed = True - if st.session_state.config.get("model_id") != selected_llm_model: - st.session_state.config["model_id"] = selected_llm_model - changed = True - if st.session_state.config.get("temperature") != selected_llm_temp: - st.session_state.config["temperature"] = selected_llm_temp - changed = True - - if changed: - st.success( - f"LLM settings saved: Provider '{selected_llm_provider}', Model '{selected_llm_model}', Temp {selected_llm_temp:.2f}" - ) - return changed # Return True if anything was actually changed - else: - st.warning("LLM Provider/Model not fully selected. LLM settings not saved.") - return False - - -def _save_embedding_settings(selected_embed_model: str | None) -> bool | None: - """Saves embedding setting after checking API key. Returns True on success, False on key error, None if no model selected.""" - if selected_embed_model is None: - return None # Indicate no action taken - - provider = selected_embed_model.split("/")[0] - key_needed = provider in PROVIDERS_REQUIRING_KEYS - key_present = get_api_key(provider) is not None - - if key_needed and not key_present: - st.error( - f"Cannot save: Embedding model '{selected_embed_model}' requires an API key for '{provider}', which is missing." - ) - return False # Indicate failure due to missing key - - if get_active_embedding_model() != selected_embed_model: - save_attempt = set_active_embedding_model(selected_embed_model) - if save_attempt: - st.success(f"Embedding model saved: '{selected_embed_model}'") - return True # Indicate successful save - else: - st.error("Failed to save embedding model setting.") - return False # Indicate failure during save - else: - return True # Indicate success (no change needed) - - -def _handle_settings_form_submission( - selected_llm_provider: str | None, - selected_llm_model: str | None, - selected_llm_temp: float, - selected_embed_model: str | None, - on_save_callback: Callable | None, -) -> None: - """Handles the logic after the settings form is submitted.""" - llm_settings_changed = _save_llm_settings( - selected_llm_provider, selected_llm_model, selected_llm_temp - ) - embedding_save_status = _save_embedding_settings(selected_embed_model) - - # --- Callback and Rerun Logic --- - # Callback if *any* setting was successfully changed or saved (even if value didn't change) - if (llm_settings_changed or embedding_save_status is True) and on_save_callback: - on_save_callback() - - # Rerun if *any* setting was successfully changed or saved, - # *unless* the only action was an embedding save failure (due to key error). - if llm_settings_changed or embedding_save_status is True: - st.rerun() - # No explicit else needed, as we don't rerun on embedding_save_status == False or None - # if llm_settings_changed is also False. - - -def render_unified_settings_page(on_save_callback: Callable | None = None) -> None: - """Render the unified settings page with LLM and Embedding settings.""" - if st.button("← Back"): - st.session_state.show_settings = False - st.rerun() - - render_page_header("Application Settings", "Configure API Keys, LLM, and Embedding models.") - add_api_table_css() - - st.markdown("### API Key Management") - st.info( - "Enter API keys for the providers you wish to use. Keys are stored securely.", icon="🔑" - ) - render_api_key_table() - - st.divider() - - # LLM and Embedding settings within a form - with st.form(key="unified_settings_form"): - col1, col2 = st.columns(2) - with col1: - # Render LLM settings section - selected_llm_provider, selected_llm_model, selected_llm_temp = ( - _render_llm_settings_form_section() - ) - with col2: - # Render Embedding settings section - selected_embed_model = _render_embedding_settings_form_section() - - submitted = st.form_submit_button("Save Settings", use_container_width=True) - - if submitted: - # Handle form submission logic - _handle_settings_form_submission( - selected_llm_provider, - selected_llm_model, - selected_llm_temp, - selected_embed_model, - on_save_callback, - ) - - -def render_settings_page(on_save_callback: Callable | None = None) -> None: - """Main function to render the settings page content.""" - render_unified_settings_page(on_save_callback) diff --git a/paperchat/utils/__init__.py b/paperchat/utils/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/paperchat/utils/api_keys.py b/paperchat/utils/api_keys.py deleted file mode 100644 index afb1d0e..0000000 --- a/paperchat/utils/api_keys.py +++ /dev/null @@ -1,184 +0,0 @@ -""" -API Key Management Utilities using System Keyring. -""" - -import os -from typing import Final - -import keyring -import keyring.errors - -_KEYRING_SERVICE_NAME: Final[str] = "paperchat" -_PROVIDER_CONFIG: Final[dict[str, dict[str, str | None]]] = { - "openai": {"env_var": "OPENAI_API_KEY", "prefix": "sk-", "name": "OpenAI"}, - "gemini": {"env_var": "GEMINI_API_KEY", "prefix": None, "name": "Gemini"}, - "anthropic": {"env_var": "ANTHROPIC_API_KEY", "prefix": "sk-ant-", "name": "Anthropic"}, -} - - -def _get_keyring_username(provider: str) -> str: - """Generates the username for storing the provider's key in keyring.""" - return f"{provider.lower()}_api_key" - - -def _validate_key(provider: str, key: str) -> tuple[bool, str | None]: - """ - Performs basic validation on the API key format. - - Args: - provider: The name of the provider (e.g., 'openai', 'anthropic') - key: The API key to validate - - Returns: - Tuple of (is_valid, error_message) - - is_valid: True if the key is valid, False otherwise - - error_message: None if valid, error description if invalid - """ - config = _PROVIDER_CONFIG.get(provider.lower()) - if not config: - return True, None # Cannot validate unknown providers - - prefix = config.get("prefix") - provider_name = config.get("name", provider.capitalize()) - - if not key: - return False, "API key cannot be empty." - - if prefix and not key.startswith(prefix): - return False, f"Invalid format. {provider_name} API keys should start with '{prefix}'" - - return True, None - - -def get_api_key(provider: str) -> str | None: - """ - Gets the API key for the specified provider. - - Checks environment variables first, then the system keyring. - - Args: - provider: The name of the provider (e.g., 'openai', 'anthropic'). Case-insensitive. - - Returns: - The API key string, or None if not found or if keyring access fails. - """ - provider_lower = provider.lower() - config = _PROVIDER_CONFIG.get(provider_lower) - env_var_name = config.get("env_var") if config else None - - if env_var_name: - api_key = os.environ.get(env_var_name) - if api_key: - return api_key - - try: - keyring_username = _get_keyring_username(provider_lower) - api_key = keyring.get_password(_KEYRING_SERVICE_NAME, keyring_username) - if api_key: - return api_key - except Exception: - # Just return None to indicate key not found - pass - - return None - - -def set_api_key(provider: str, api_key: str) -> tuple[bool, str | None]: - """ - Securely saves the API key for the specified provider using the system keyring. - - Args: - provider: The name of the provider (e.g., 'openai'). Case-insensitive. - api_key: The API key string to save. - - Returns: - Tuple of (success, error_message) - - success: True if saving was successful, False otherwise - - error_message: None if successful, error description if failed - """ - provider_lower = provider.lower() - is_valid, error_msg = _validate_key(provider_lower, api_key) - - if not is_valid: - return False, error_msg - - try: - keyring_username = _get_keyring_username(provider_lower) - keyring.set_password(_KEYRING_SERVICE_NAME, keyring_username, api_key) - return True, None - except Exception as e: - return False, f"Error saving API key to keyring: {e}" - - -def remove_api_key(provider: str) -> tuple[bool, str | None]: - """ - Removes the API key for the specified provider from the system keyring. - - Note: This does not affect environment variables. - - Args: - provider: The name of the provider (e.g., 'openai'). Case-insensitive. - - Returns: - Tuple of (success, error_message) - - success: True if the key was successfully removed or was not present - - error_message: None if successful, error description if failed - """ - provider_lower = provider.lower() - provider_name = _PROVIDER_CONFIG.get(provider_lower, {}).get("name", provider.capitalize()) - keyring_username = _get_keyring_username(provider_lower) - - try: - # Check if key exists in keyring before attempting delete - current_key = keyring.get_password(_KEYRING_SERVICE_NAME, keyring_username) - if current_key is None: - return True, f"No {provider_name} key found in keyring." - - keyring.delete_password(_KEYRING_SERVICE_NAME, keyring_username) - return True, f"{provider_name} API key successfully removed from keyring." - except keyring.errors.PasswordDeleteError: - # This specific error often means the password was not found - return True, f"No {provider_name} key found in keyring to delete." - except Exception as e: - return False, f"Error removing {provider_name} API key from keyring: {e}" - - -def get_provider_display_name(provider: str) -> str: - """ - Get the display name for a provider. - - Args: - provider: The provider identifier (e.g., 'openai') - - Returns: - The display name (e.g., 'OpenAI') - """ - provider_lower = provider.lower() - return _PROVIDER_CONFIG.get(provider_lower, {}).get("name", provider.capitalize()) - - -def get_available_providers() -> list[str]: - """ - Get list of all configured providers. - - Returns: - List of provider identifiers - """ - return list(_PROVIDER_CONFIG.keys()) - - -def mask_api_key(api_key: str) -> str: - """ - Create a masked version of an API key for display. - - Args: - api_key: The API key to mask - - Returns: - Masked API key showing only first and last few characters - """ - if not api_key or len(api_key) < 8: - return "****" - - mask_len = max(len(api_key) - 8, 0) - return api_key[:4] + "*" * mask_len + api_key[-4:] diff --git a/paperchat/utils/config.py b/paperchat/utils/config.py deleted file mode 100644 index cd53993..0000000 --- a/paperchat/utils/config.py +++ /dev/null @@ -1,32 +0,0 @@ -import torch - -from .api_keys import get_api_key - -DEVICE = "auto" - - -def get_device(): - if DEVICE == "auto": - return ( - "cuda" - if torch.cuda.is_available() - else "mps" - if torch.backends.mps.is_available() - else "cpu" - ) - return DEVICE - - -# LLM -DEFAULT_PROVIDER = "gemini" if get_api_key("gemini") else "openai" -DEFAULT_MODEL = "gemini-2.0-flash" if get_api_key("gemini") else "gpt-4.1-nano" -DEFAULT_TEMPERATURE = 0.7 -DEFAULT_MAX_TOKENS = 1000 - -DEFAULT_SYSTEM_PROMPT = """ -You are a helpful academic research assistant helping with scientific papers. -Act as an expert in the field of the paper you're discussing. -Answer questions based on your knowledge of the paper and the context provided. -When citing information, refer to the specific section of the paper where it appears. -Be precise, scholarly, and focus on the factual content of the paper. -""" diff --git a/paperchat/utils/formatting.py b/paperchat/utils/formatting.py deleted file mode 100644 index d52dd22..0000000 --- a/paperchat/utils/formatting.py +++ /dev/null @@ -1,164 +0,0 @@ -import re -from typing import Any - - -def format_context(retrieved_results: list[dict[str, Any]], include_metadata: bool = True) -> str: - """ - Format retrieved chunks into a context string for the LLM. - - Args: - retrieved_results: List of retrieval results - include_metadata: Whether to include metadata in the context - - Returns: - Formatted context string - """ - context_parts = [] - - for i, result in enumerate(retrieved_results): - if include_metadata: - text = result["entity"]["text"] - pages = result["entity"].get("page_numbers", []) - page_str = ", ".join(map(str, pages)) if pages else "Unknown" - source = result["entity"]["source"] - context_parts.append(f"[CHUNK {i + 1} | Source: {source} | {page_str}]:\n{text}\n") - else: - context_parts.append(f"[CHUNK {i + 1}]:\n{text}\n") - - return "\n\n".join(context_parts) - - -def process_citations( - raw_response: str, retrieved_chunks: list[dict[str, Any]] -) -> tuple[str, list[dict[str, Any]]]: - """ - Processes citations in the raw LLM response to use sequential footnote-style - references and filters chunks to only include cited ones. - - Finds citations like "Chunk 1", "(see CHUNK 1)", "(Chunks 1, 2)", etc., replaces them - with sequential markers like [1], [2], etc., based on the order of appearance, - and returns the processed response and the list of corresponding cited chunks - in the correct order. - - Args: - raw_response: The raw text response from the LLM. - retrieved_chunks: The list of all retrieved chunk dictionaries. - - Returns: - A tuple containing: - - The response string with sequential citations ([1], [2], ...). - - A list of chunk dictionaries that were actually cited, ordered - by their citation number. - """ - # captures the chunk type (group 1) and the number list (group 2). - citation_pattern = re.compile(r"\b(Chunks?)\s+(\d+(?:\s*(?:,|and)\s*\d+)*)\b", re.IGNORECASE) - - cited_chunk_indices: list[int] = [] - unique_citations: dict[int, int] = {} # map original chunk index -> citation number [1], [2]... - processed_parts: list[str] = [] - last_end = 0 - - for match in citation_pattern.finditer(raw_response): - start, end = match.span() - processed_parts.append(raw_response[last_end:start]) - chunk_nums_str = match.group(2) - chunk_indices_0_based = [] - try: - # use more robust split logic allowing flexible spacing - indices_1_based = [int(n.strip()) for n in re.split(r"\s*(?:and|,)\s*", chunk_nums_str)] - chunk_indices_0_based = [idx - 1 for idx in indices_1_based] - except ValueError: - # if number parsing fails, append the original matched text and skip - processed_parts.append(match.group(0)) - last_end = end - continue - - # validate chunk indices - if not all(0 <= idx < len(retrieved_chunks) for idx in chunk_indices_0_based): - processed_parts.append(match.group(0)) # append original if invalid index - last_end = end - continue - - # generate citation numbers and update tracking - citation_numbers_for_this_match = [] - for original_chunk_index in chunk_indices_0_based: - if original_chunk_index not in unique_citations: - current_citation_num = len(unique_citations) + 1 - unique_citations[original_chunk_index] = current_citation_num - cited_chunk_indices.append(original_chunk_index) - citation_numbers_for_this_match.append(str(current_citation_num)) - else: - citation_numbers_for_this_match.append(str(unique_citations[original_chunk_index])) - - citation_numbers_for_this_match.sort(key=int) - # create the replacement footnote string, e.g., "[1]" or "[1, 2]" - replacement_string = f"[{', '.join(citation_numbers_for_this_match)}]" - processed_parts.append(replacement_string) - - last_end = end - - # append any remaining text after the last match - processed_parts.append(raw_response[last_end:]) - - processed_response = "".join(processed_parts) - - # ensure cited chunks are ordered by their *first* appearance (citation number) - cited_chunks_ordered = [ - retrieved_chunks[i] for i in cited_chunk_indices if 0 <= i < len(retrieved_chunks) - ] - - return processed_response, cited_chunks_ordered - - -def format_response_with_citations(response: str) -> str: - """ - Format the response with highlighted citations. Now expects [1], [2] style. - - Args: - response: Response text from the LLM, potentially with [N] citations. - - Returns: - Response with HTML-formatted citation highlights - """ - # find [1] or [1, 2] style citations - citation_pattern = r"(\[\d+(?:,\s*\d+)*\])" - formatted_response = re.sub( - citation_pattern, - lambda m: f'{m.group(1)}', - response, - ) - return formatted_response - - -def format_retrieved_chunks_for_display(chunks: list[dict[str, Any]]) -> str: - """ - Format retrieved chunks for display in the UI. - Handles the Milvus result structure. - - Args: - chunks: List of retrieved chunk dictionaries from Milvus search. - Expected structure: [{'id': ..., 'distance': ..., 'entity': {...}}] - - Returns: - Markdown-formatted text for displaying chunks in Streamlit - """ - if not chunks: - return "No sources retrieved." - - formatted_text = "### Sources\n\n" - for i, result in enumerate(chunks): - entity = result.get("entity", {}) - text = entity.get("text", "No text found.") - page_numbers = entity.get("page_numbers", []) - source = entity.get("source", "Unknown source") - - if page_numbers: - page_str = ", ".join(map(str, sorted(set(page_numbers)))) - page_info = f"Page(s) {page_str}" - else: - page_info = "Unknown page" - - formatted_text += f"**Source [{i + 1}]** ({source} | {page_info})\n\n" - formatted_text += f"{text}\n\n---\n\n" - - return formatted_text diff --git a/paperchat/utils/logging.py b/paperchat/utils/logging.py deleted file mode 100644 index c5276dc..0000000 --- a/paperchat/utils/logging.py +++ /dev/null @@ -1,83 +0,0 @@ -"""Logging utilities for PaperChat components.""" - -import logging -import logging.handlers -import os -from datetime import date -from pathlib import Path - - -def setup_logger( - logger_name: str, - log_file: str | None = None, - console_level: int = logging.WARNING, - file_level: int = logging.DEBUG, - propagate: bool = False, -) -> logging.Logger: - """Set up a logger with console and optional file handlers. - - Args: - logger_name: Name of the logger - log_file: Path to log file. If None, no file logging is configured. - console_level: Logging level for console output - file_level: Logging level for file output - propagate: Whether to propagate to parent loggers - - Returns: - Configured logger instance - """ - logger = logging.getLogger(logger_name) - logger.setLevel(min(console_level, file_level)) - logger.propagate = propagate - - if logger.handlers: - logger.handlers.clear() - - console_handler = logging.StreamHandler() - console_handler.setLevel(console_level) - console_format = logging.Formatter("%(levelname)s - %(message)s") - console_handler.setFormatter(console_format) - logger.addHandler(console_handler) - - if log_file: - log_dir = os.path.dirname(log_file) - if log_dir: - os.makedirs(log_dir, exist_ok=True) - - file_handler = logging.FileHandler(log_file) - file_handler.setLevel(file_level) - file_format = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s") - file_handler.setFormatter(file_format) - logger.addHandler(file_handler) - - return logger - - -def get_component_logger(component_name: str) -> logging.Logger: - """Get a logger for a specific component with standard configuration. - - Logs will be stored in date-based subdirectories, with a unique - log file per process execution based on PID. - - Args: - component_name: Name of the component (e.g., 'vector_store', 'embeddings') - - Returns: - Configured logger for the component - """ - today_str = date.today().strftime("%Y-%m-%d") - log_dir_base = Path.home() / ".paperchat" / "logs" - log_dir_dated = log_dir_base / today_str - - os.makedirs(log_dir_dated, exist_ok=True) - - pid = os.getpid() - log_file = log_dir_dated / f"{component_name}_pid{pid}.log" - - return setup_logger( - logger_name=component_name, - log_file=str(log_file), - console_level=logging.WARNING, - file_level=logging.DEBUG, - propagate=False, - ) diff --git a/paperchat/utils/settings.py b/paperchat/utils/settings.py deleted file mode 100644 index 050bcf8..0000000 --- a/paperchat/utils/settings.py +++ /dev/null @@ -1,116 +0,0 @@ -"""Handles loading and saving application settings.""" - -import json -from pathlib import Path -from typing import Any - -from paperchat.core.embeddings import SUPPORTED_EMBEDDING_MODELS - -from .logging import get_component_logger - -DEFAULT_EMBEDDING_MODEL = "pymilvus/default" -SETTINGS_DIR = Path.home() / ".paperchat" -SETTINGS_FILE = SETTINGS_DIR / "settings.json" -EMBEDDING_MODEL_SETTING_KEY = "embedding_model_identifier" - -logger = get_component_logger("Settings") - - -def _ensure_settings_dir_exists() -> None: - """Creates the settings directory if it doesn't exist.""" - SETTINGS_DIR.mkdir(parents=True, exist_ok=True) - - -def load_settings() -> dict[str, Any]: - """Loads settings from the JSON file. - - Returns: - A dictionary containing the settings, or an empty dictionary - if the file doesn't exist or is invalid. - """ - _ensure_settings_dir_exists() - if not SETTINGS_FILE.is_file(): - logger.info(f"Settings file not found ({SETTINGS_FILE}), returning empty settings.") - return {} - try: - with open(SETTINGS_FILE, "r", encoding="utf-8") as f: - settings = json.load(f) - if not isinstance(settings, dict): - logger.warning( - f"Settings file ({SETTINGS_FILE}) does not contain a valid JSON object, returning empty settings." - ) - return {} - logger.info(f"Loaded settings from {SETTINGS_FILE}") - return settings - except json.JSONDecodeError: - logger.exception(f"Error decoding JSON from {SETTINGS_FILE}, returning empty settings.") - return {} - except Exception: - logger.exception(f"Failed to load settings from {SETTINGS_FILE}, returning empty settings.") - return {} - - -def save_settings(settings: dict[str, Any]) -> bool: - """Saves the provided settings dictionary to the JSON file.""" - _ensure_settings_dir_exists() - try: - with open(SETTINGS_FILE, "w", encoding="utf-8") as f: - json.dump(settings, f, indent=4) - logger.info(f"Saved settings to {SETTINGS_FILE}") - return True - except Exception: - logger.exception(f"Failed to save settings to {SETTINGS_FILE}") - return False - - -def get_active_embedding_model() -> str: - """Determines the active embedding model identifier. - - Checks user settings first, then falls back to the application default. - Ensures the chosen model is currently supported. - """ - settings = load_settings() - user_choice = settings.get(EMBEDDING_MODEL_SETTING_KEY) - - if user_choice and isinstance(user_choice, str): - if user_choice in SUPPORTED_EMBEDDING_MODELS: - logger.info(f"Using user-selected embedding model: {user_choice}") - return user_choice - else: - logger.warning( - f"User-selected embedding model '{user_choice}' is not currently supported. " - f"Falling back to default: {DEFAULT_EMBEDDING_MODEL}" - ) - else: - logger.info("No valid user setting found for embedding model.") - - # fallback to default - logger.info(f"Using default embedding model: {DEFAULT_EMBEDDING_MODEL}") - if DEFAULT_EMBEDDING_MODEL not in SUPPORTED_EMBEDDING_MODELS: - logger.critical( - f"Default embedding model '{DEFAULT_EMBEDDING_MODEL}' from config is not in SUPPORTED_EMBEDDING_MODELS! " - "Please check core/embeddings.py and utils/config.py." - ) - # last resort, try to find *any* supported model - fallback = next(iter(SUPPORTED_EMBEDDING_MODELS), None) - if fallback: - logger.warning(f"Falling back to first available supported model: {fallback}") - return fallback - else: - # fatal configuration error - raise RuntimeError("Configuration Error: No supported embedding models found!") - - return DEFAULT_EMBEDDING_MODEL - - -def set_active_embedding_model(model_identifier: str) -> bool: - """Saves the user's chosen embedding model to settings.""" - if model_identifier not in SUPPORTED_EMBEDDING_MODELS: - logger.error( - f"Attempted to set unsupported embedding model '{model_identifier}' in settings." - ) - return False - - settings = load_settings() - settings[EMBEDDING_MODEL_SETTING_KEY] = model_identifier - return save_settings(settings) diff --git a/pyproject.toml b/pyproject.toml deleted file mode 100644 index 7b5e202..0000000 --- a/pyproject.toml +++ /dev/null @@ -1,96 +0,0 @@ -[project] -name = "paperchat" -version = "0.1.0" -description = "An AI-powered assistant that enables you to chat with your research library." -authors = [{ name="Kyle Puhger", email="kpuhger@gmail.com" }] -readme = "README.md" -license = { text = "MIT" } -keywords = ["chat", "research"] -classifiers = [ - "Development Status :: 3 - Alpha", - "Intended Audience :: Science/Research", - "License :: OSI Approved :: MIT License", - "Programming Language :: Python :: 3.12", - "Programming Language :: Python :: 3.13", -] -requires-python = ">=3.12" -dependencies = [ - "anthropic>=0.50.0", - "docling>=2.31.0", - "google-genai>=1.12.1", - "keyring>=25.6.0", - "openai>=1.76.0", - "pymilvus[model]>=2.5.7", - "streamlit>=1.44.1", - "torch>=2.6.0", -] - -[dependency-groups] -dev = [ - "prek>=0.3.4", - "pytest>=8.3.4", - "ruff>=0.11.0", -] - -[project.optional-dependencies] -eval = [ - "beir>=2.1.0", - "typer>=0.15.2", -] - -[project.scripts] -paperchat = "paperchat.cli:main" - -[project.urls] -"Homepage" = "https://github.com/kpeez/paperchat" - -[build-system] -requires = ["hatchling"] -build-backend = "hatchling.build" - -[tool.pytest.ini_options] -testpaths = ["tests"] -addopts = "--log-cli-level=INFO -s --durations=0" - -[tool.ruff] -line-length = 100 -target-version = "py311" - -[tool.ruff.lint] -select = [ - "E", # pycodestyle - "W", - "F", # pyflakes - "PL", # pylint - "I", # isort - "B", # flake8-bugbear - "SIM", # flake8-simplify - "C4", # flake8-comprehensions - "RUF", # ruff -] -fixable = ["ALL"] -ignore = [ - "RUF001", #ambiguous unicode character - "PLR0913", # too many arguments - "PLR0914", # too many local variables - "PLR0917", # too many positional arguments - "PLR2004", # magic number - "PLW2901", # for loop variable overwritten by assignment target - "E501", # line too long - "B008", # function-call-in-default-argument -] - -[tool.ruff.lint.isort] -known-first-party = ["paperchat", "paperchat_backend"] - -[tool.ruff.lint.per-file-ignores] -"__init__.py" = ["E402", "F401", "D104"] - -[tool.ruff.lint.pydocstyle] -convention = "google" - -[tool.ruff.format] -quote-style = "double" -indent-style = "space" -skip-magic-trailing-comma = false -line-ending = "auto" diff --git a/tests/__init__.py b/tests/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/tests/test_api_keys.py b/tests/test_api_keys.py deleted file mode 100644 index 531324d..0000000 --- a/tests/test_api_keys.py +++ /dev/null @@ -1,177 +0,0 @@ -"""Tests for the API key management utilities.""" - -import os -from unittest import mock - -import keyring - -from paperchat.utils.api_keys import ( - _get_keyring_username, - _validate_key, - get_api_key, - get_available_providers, - get_provider_display_name, - mask_api_key, - remove_api_key, - set_api_key, -) - - -def test_get_keyring_username(): - """Test the username generation for keyring storage.""" - assert _get_keyring_username("openai") == "openai_api_key" - assert _get_keyring_username("ANTHROPIC") == "anthropic_api_key" - assert _get_keyring_username("custom") == "custom_api_key" - - -def test_validate_key(): - """Test API key validation logic.""" - is_valid, error = _validate_key("openai", "sk-abcdefghijklmnop") - assert is_valid - assert error is None - - is_valid, error = _validate_key("anthropic", "sk-ant-api12345") - assert is_valid - assert error is None - - is_valid, error = _validate_key("openai", "") - assert not is_valid - assert "cannot be empty" in error - - is_valid, error = _validate_key("anthropic", "not-a-valid-key") - assert not is_valid - assert "should start with" in error - - is_valid, error = _validate_key("custom", "any-key-works") - assert is_valid - assert error is None - - -@mock.patch.dict(os.environ, {"OPENAI_API_KEY": "env-openai-key", "ANTHROPIC_API_KEY": ""}) -def test_get_api_key_from_env(): - """Test retrieving API key from environment variables.""" - assert get_api_key("openai") == "env-openai-key" - - -@mock.patch.dict(os.environ, {"OPENAI_API_KEY": "", "ANTHROPIC_API_KEY": ""}) -@mock.patch("keyring.get_password") -def test_get_api_key_from_keyring(mock_get_password): - """Test retrieving API key from keyring when not in env vars.""" - mock_get_password.return_value = "keyring-anthropic-key" - assert get_api_key("anthropic") == "keyring-anthropic-key" - mock_get_password.assert_called_once() - - -@mock.patch.dict(os.environ, {"OPENAI_API_KEY": "", "ANTHROPIC_API_KEY": ""}) -@mock.patch("keyring.get_password") -def test_get_api_key_not_found(mock_get_password): - """Test behavior when API key is not found anywhere.""" - mock_get_password.return_value = None - assert get_api_key("openai") is None - - -@mock.patch.dict(os.environ, {"OPENAI_API_KEY": "", "ANTHROPIC_API_KEY": ""}) -@mock.patch("keyring.get_password") -def test_get_api_key_keyring_exception(mock_get_password): - """Test handling keyring exception gracefully.""" - mock_get_password.side_effect = Exception("Keyring error") - assert get_api_key("openai") is None - - -@mock.patch("keyring.set_password") -def test_set_api_key_success(mock_set_password): - """Test setting an API key successfully.""" - success, error = set_api_key("openai", "sk-validkey12345") - assert success - assert error is None - mock_set_password.assert_called_once() - - -@mock.patch("keyring.set_password") -def test_set_api_key_invalid(mock_set_password): - """Test setting an invalid API key.""" - success, error = set_api_key("anthropic", "invalid-key") - assert not success - assert "should start with" in error - mock_set_password.assert_not_called() - - -@mock.patch("keyring.set_password") -def test_set_api_key_exception(mock_set_password): - """Test handling exception when setting API key.""" - mock_set_password.side_effect = Exception("Set password error") - success, error = set_api_key("openai", "sk-validkey12345") - assert not success - assert "Error saving" in error - - -@mock.patch("keyring.get_password") -@mock.patch("keyring.delete_password") -def test_remove_api_key_success(mock_delete, mock_get): - """Test removing an API key successfully.""" - mock_get.return_value = "some-key" - success, message = remove_api_key("openai") - assert success - assert "successfully removed" in message - mock_delete.assert_called_once() - - -@mock.patch("keyring.get_password") -@mock.patch("keyring.delete_password") -def test_remove_api_key_not_found(mock_delete, mock_get): - """Test removing a non-existent API key.""" - mock_get.return_value = None - success, message = remove_api_key("openai") - assert success - assert "No OpenAI key found" in message - mock_delete.assert_not_called() - - -@mock.patch("keyring.get_password") -@mock.patch("keyring.delete_password") -def test_remove_api_key_delete_error(mock_delete, mock_get): - """Test handling error when deleting API key.""" - mock_get.return_value = "some-key" - mock_delete.side_effect = keyring.errors.PasswordDeleteError() - success, message = remove_api_key("openai") - assert success - assert "No OpenAI key found" in message - - -@mock.patch("keyring.get_password") -@mock.patch("keyring.delete_password") -def test_remove_api_key_other_exception(mock_delete, mock_get): - """Test handling other exceptions when removing API key.""" - mock_get.return_value = "some-key" - mock_delete.side_effect = Exception("Generic error") - success, message = remove_api_key("openai") - assert not success - assert "Error removing" in message - - -def test_get_provider_display_name(): - """Test getting display names for providers.""" - assert get_provider_display_name("openai") == "OpenAI" - assert get_provider_display_name("anthropic") == "Anthropic" - assert get_provider_display_name("custom") == "Custom" - - -def test_get_available_providers(): - """Test getting list of available providers.""" - providers = get_available_providers() - assert "openai" in providers - assert "anthropic" in providers - assert isinstance(providers, list) - - -def test_mask_api_key(): - """Test masking API keys for display.""" - masked = mask_api_key("sk-1234567890abcdef") - assert masked.startswith("sk-1") - assert masked.endswith("cdef") - assert "*" in masked - - assert mask_api_key("short") == "****" - assert mask_api_key("") == "****" - assert mask_api_key("12345678").startswith("1234") - assert mask_api_key("12345678").endswith("5678") diff --git a/tests/test_ingestion.py b/tests/test_ingestion.py deleted file mode 100644 index bfa13ab..0000000 --- a/tests/test_ingestion.py +++ /dev/null @@ -1,134 +0,0 @@ -"""Tests for the ingestion module.""" - -import datetime -from pathlib import Path -from unittest import mock - -import numpy as np -import pytest -from docling.chunking import DocChunk -from docling.datamodel.document import DoclingDocument - -from paperchat.core.ingestion import extract_page_numbers, parse_pdf, process_pdf_document - - -@pytest.fixture -def mock_docling_doc(): - """Return a mock DoclingDocument.""" - doc = mock.MagicMock(spec=DoclingDocument) - return doc - - -@pytest.fixture -def mock_doc_converter(): - """Create a mock DocumentConverter.""" - with mock.patch("paperchat.core.ingestion.DocumentConverter") as mock_converter_cls: - mock_converter = mock.MagicMock() - mock_converter_cls.return_value = mock_converter - - mock_result = mock.MagicMock() - mock_result.document = mock.MagicMock(spec=DoclingDocument) - mock_converter.convert.return_value = mock_result - - yield mock_converter - - -def test_parse_pdf(mock_doc_converter): - """Test that parse_pdf calls DocumentConverter correctly.""" - pdf_path = "/path/to/test.pdf" - doc = parse_pdf(pdf_path) - mock_doc_converter.convert.assert_called_once_with(str(Path(pdf_path).resolve())) - - assert doc is mock_doc_converter.convert.return_value.document - - -def test_extract_page_numbers(): - """Test extracting page numbers from a DocChunk.""" - # Create a mock DocChunk with page numbers 1, 2, 1 - chunk = mock.MagicMock(spec=DocChunk) - chunk.meta = mock.MagicMock() - doc_item1 = mock.MagicMock() - doc_item1.prov = [mock.MagicMock(page_no=1)] - doc_item2 = mock.MagicMock() - doc_item2.prov = [mock.MagicMock(page_no=2)] - doc_item3 = mock.MagicMock() - doc_item3.prov = [mock.MagicMock(page_no=1)] - - chunk.meta.doc_items = [doc_item1, doc_item2, doc_item3] - - page_numbers = extract_page_numbers(chunk) - - assert page_numbers == [1, 2] - - -@mock.patch("paperchat.core.ingestion.parse_pdf") -@mock.patch("paperchat.core.ingestion.HybridChunker") -def test_process_pdf_document(mock_chunker_cls, mock_parse_pdf): - """Test processing a PDF document.""" - pdf_path = "/path/to/test.pdf" - mock_doc = mock.MagicMock() - mock_parse_pdf.return_value = mock_doc - - mock_chunker = mock.MagicMock() - mock_chunker_cls.return_value = mock_chunker - - # Create two mock chunks - mock_chunk1 = mock.MagicMock(spec=DocChunk) - mock_chunk1.text = "This is chunk 1" - mock_chunk1.meta = mock.MagicMock() - mock_chunk1.meta.doc_items = [mock.MagicMock()] - mock_chunk1.meta.doc_items[0].prov = [mock.MagicMock(page_no=1)] - mock_chunk1.meta.doc_items[0].label = "label1" - mock_chunk1.meta.headings = ["Heading 1"] - - mock_chunk2 = mock.MagicMock(spec=DocChunk) - mock_chunk2.text = "This is chunk 2" - mock_chunk2.meta = mock.MagicMock() - mock_chunk2.meta.doc_items = [mock.MagicMock()] - mock_chunk2.meta.doc_items[0].prov = [mock.MagicMock(page_no=2)] - mock_chunk2.meta.doc_items[0].label = "label2" - mock_chunk2.meta.headings = ["Heading 2"] - - mock_chunks = [mock_chunk1, mock_chunk2] - mock_chunker.chunk.return_value = mock_chunks - - mock_chunker.contextualize.side_effect = lambda chunk: f"Contextualized {chunk.text}" - - mock_embed_fn = mock.MagicMock() - mock_embed_fn.encode_documents.return_value = [ - np.array([0.1, 0.2, 0.3]), - np.array([0.4, 0.5, 0.6]), - ] - - mock_datetime = datetime.datetime(2023, 1, 1, 12, 0, 0) - with mock.patch("paperchat.core.ingestion.datetime.datetime") as mock_dt: - mock_dt.now.return_value = mock_datetime - - result = process_pdf_document(pdf_path, embed_fn=mock_embed_fn) - - mock_parse_pdf.assert_called_once_with(Path(pdf_path)) - mock_chunker_cls.assert_called_once_with(max_tokens=1024, merge_peers=True) - mock_chunker.chunk.assert_called_once_with(mock_doc) - - assert len(result) == 2 - - assert result[0]["chunk_id"] == "chunk_00" - assert result[0]["text"] == "This is chunk 1" - assert result[0]["label"] == ["label1"] - assert result[0]["page_numbers"] == [1] - assert result[0]["headings"] == "heading 1" - assert result[0]["source"] == Path(pdf_path).stem - assert result[0]["timestamp"] == "2023-01-01T12:00:00" - - assert result[1]["chunk_id"] == "chunk_01" - assert result[1]["text"] == "This is chunk 2" - assert result[1]["label"] == ["label2"] - assert result[1]["page_numbers"] == [2] - assert result[1]["headings"] == "heading 2" - assert result[1]["source"] == Path(pdf_path).stem - assert result[1]["timestamp"] == "2023-01-01T12:00:00" - - # check that embed_fn was called with contextualized chunks - mock_embed_fn.encode_documents.assert_called_once_with( - ["Contextualized This is chunk 1", "Contextualized This is chunk 2"] - ) diff --git a/tests/test_rag_pipeline.py b/tests/test_rag_pipeline.py deleted file mode 100644 index d65b924..0000000 --- a/tests/test_rag_pipeline.py +++ /dev/null @@ -1,162 +0,0 @@ -"""Tests for the llm.py module that contains the RAGPipeline.""" - -from unittest import mock - -import pytest - -from paperchat.core import RAGPipeline - -TEST_MODEL_ID = "test-embedding-model" - - -@pytest.fixture -def mock_llm_manager(): - """Create a mock LLMManager instance.""" - return mock.MagicMock() - - -@pytest.fixture -def mock_vector_store(): - """Create a mock VectorStore instance.""" - with mock.patch("paperchat.core.VectorStore") as mock_vs_cls: - mock_vs = mock.MagicMock() - mock_vs_cls.return_value = mock_vs - yield mock_vs - - -@pytest.fixture -def rag_pipeline(mock_llm_manager, mock_vector_store): - """Fixture to create a RAGPipeline instance with mocked dependencies.""" - with ( - mock.patch( - "paperchat.core.rag_pipeline.get_active_embedding_model", - return_value=TEST_MODEL_ID, - ), - mock.patch("paperchat.core.rag_pipeline.VectorStore", return_value=mock_vector_store), - ): - pipeline = RAGPipeline(llm_manager=mock_llm_manager) - return pipeline - - -def test_init(mock_llm_manager): - """Test initialization of RAGPipeline.""" - with ( - mock.patch( - "paperchat.core.rag_pipeline.get_active_embedding_model", - return_value=TEST_MODEL_ID, - ) as mock_get_active_model, - mock.patch("paperchat.core.rag_pipeline.VectorStore") as mock_vs_cls, - ): - mock_vs_instance = mock.MagicMock() - mock_vs_cls.return_value = mock_vs_instance - - pipeline = RAGPipeline(llm_manager=mock_llm_manager) - - assert pipeline.llm_manager is mock_llm_manager - mock_get_active_model.assert_called_once() - mock_vs_cls.assert_called_once_with(model_identifier=TEST_MODEL_ID) - assert pipeline.vector_store is mock_vs_instance - - -def test_retrieve(rag_pipeline, mock_vector_store): - """Test the retrieve method.""" - query = "test query" - top_k = 3 - threshold = 0.8 - filter_expression = "source == 'test.pdf'" - - mock_inner_results = [{"text": "test result"}] - mock_vector_store.search.return_value = mock_inner_results - - results = rag_pipeline.retrieve(query, top_k, threshold, filter_expression) - - assert results == mock_inner_results - mock_vector_store.search.assert_called_once_with( - query_text=query, - top_k=top_k, - threshold=threshold, - filter_expression=filter_expression, - ) - - -def test_generate_non_streaming(rag_pipeline, mock_llm_manager): - """Test the generate method in non-streaming mode.""" - query = "test query" - retrieved_results = [ - {"text": "context 1", "source": "doc1"}, - {"text": "context 2", "source": "doc2"}, - ] - expected_response = "This is the answer." - - with mock.patch("paperchat.core.rag_pipeline.format_context") as mock_format_context: - mock_format_context.return_value = "formatted context" - mock_llm_manager.generate_response.return_value = expected_response - - response = rag_pipeline.generate(query, retrieved_results, stream=False) - - assert response == expected_response - mock_format_context.assert_called_once_with(retrieved_results, include_metadata=True) - mock_llm_manager.generate_response.assert_called_once_with(query, "formatted context") - mock_llm_manager.generate_streaming_response.assert_not_called() - - -def test_generate_streaming(rag_pipeline, mock_llm_manager): - """Test the generate method in streaming mode.""" - query = "test query" - retrieved_results = [ - {"text": "context 1", "source": "doc1"}, - {"text": "context 2", "source": "doc2"}, - ] - - mock_generator = mock.MagicMock() - - with mock.patch("paperchat.core.rag_pipeline.format_context") as mock_format_context: - mock_format_context.return_value = "formatted context" - mock_llm_manager.generate_streaming_response.return_value = mock_generator - - response = rag_pipeline.generate(query, retrieved_results, stream=True) - - assert response == mock_generator - mock_format_context.assert_called_once_with(retrieved_results, include_metadata=True) - mock_llm_manager.generate_streaming_response.assert_called_once_with( - query, "formatted context" - ) - mock_llm_manager.generate_response.assert_not_called() - - -def test_run_non_streaming(rag_pipeline): - """Test the run method in non-streaming mode.""" - query = "test query" - top_k = 3 - - retrieved_chunks = [{"text": "chunk 1"}] - expected_response = "This is the answer." - - rag_pipeline.retrieve = mock.MagicMock(return_value=retrieved_chunks) - rag_pipeline.generate = mock.MagicMock(return_value=expected_response) - - response, chunks = rag_pipeline.run(query, top_k, stream=False) - - assert response == expected_response - assert chunks == retrieved_chunks - rag_pipeline.retrieve.assert_called_once_with(query, top_k) - rag_pipeline.generate.assert_called_once_with(query, retrieved_chunks, False) - - -def test_run_streaming(rag_pipeline): - """Test the run method in streaming mode.""" - query = "test query" - top_k = 3 - - retrieved_chunks = [{"text": "chunk 1"}] - mock_generator = mock.MagicMock() - - rag_pipeline.retrieve = mock.MagicMock(return_value=retrieved_chunks) - rag_pipeline.generate = mock.MagicMock(return_value=mock_generator) - - response, chunks = rag_pipeline.run(query, top_k, stream=True) - - assert response == mock_generator - assert chunks == retrieved_chunks - rag_pipeline.retrieve.assert_called_once_with(query, top_k) - rag_pipeline.generate.assert_called_once_with(query, retrieved_chunks, True) diff --git a/tests/test_vector_store.py b/tests/test_vector_store.py deleted file mode 100644 index 8604abd..0000000 --- a/tests/test_vector_store.py +++ /dev/null @@ -1,523 +0,0 @@ -"""Tests for the vector store module.""" - -import tempfile -from datetime import datetime -from pathlib import Path -from unittest import mock - -import numpy as np -import pytest - -from paperchat.core.vector_store import ( - DEFAULT_SIMILARITY_THRESHOLD, - DEFAULT_SIMILARITY_TOP_K, - VectorStore, - sanitize_model_identifier, -) - -MAIN_FIELD_NAMES = { - "pk", - "chunk_id", - "embedding", - "text", - "label", - "page_numbers", - "headings", - "source", -} -METADATA_FIELD_NAMES = {"pk", "source", "original_filename", "date_added"} - -DEFAULT_MODEL_ID = "pymilvus/default" -DEFAULT_MODEL_NAME = "GPTCache/paraphrase-albert-onnx" -DEFAULT_MODEL_DIM = 768 -EXPLICIT_MODEL_ID = "openai/text-embedding-3-small" -EXPLICIT_MODEL_DIM = 1536 - - -@pytest.fixture -def temp_db_path(): - """Create a temporary directory for the test database.""" - with tempfile.TemporaryDirectory() as tmpdir: - yield str(Path(tmpdir) / "paperchat.db") - - -@pytest.fixture -def mock_milvus_client(): - """Create a mock MilvusClient.""" - with mock.patch("paperchat.core.vector_store.MilvusClient") as mock_client_class: - mock_client = mock.MagicMock() - mock_client.query.return_value = [] - mock_client.insert.return_value = {"insert_count": 1} - mock_delete_result = mock.MagicMock() - mock_delete_result.delete_count = 1 - mock_client.delete.return_value = mock_delete_result - mock_client_class.return_value = mock_client - yield mock_client - - -@pytest.fixture -def vector_store_init_mocks(): - """Mocks dependencies for VectorStore initialization testing.""" - with ( - mock.patch("paperchat.core.vector_store.MilvusClient") as mock_client_class, - mock.patch( - "paperchat.core.vector_store.VectorStore._get_or_create_collection" - ) as mock_get_create, - mock.patch("paperchat.core.vector_store.VectorStore._build_indices") as mock_build_indices, - mock.patch("paperchat.core.vector_store.get_component_logger") as mock_get_logger, - mock.patch("paperchat.core.vector_store.get_embedding_model") as mock_get_model, - ): - mock_client = mock.MagicMock() - mock_client_class.return_value = mock_client - mock_get_logger.return_value = mock.MagicMock() - - def mock_model_loader(model_id): - mock_embed_fn = mock.MagicMock() - if model_id == DEFAULT_MODEL_ID: - mock_embed_fn.dim = DEFAULT_MODEL_DIM - mock_embed_fn.model_name = DEFAULT_MODEL_NAME - elif model_id == EXPLICIT_MODEL_ID: - mock_embed_fn.dim = EXPLICIT_MODEL_DIM - else: - raise ValueError(f"Unexpected model_id in mock: {model_id}") - return mock_embed_fn - - mock_get_model.side_effect = mock_model_loader - - yield { - "mock_client_class": mock_client_class, - "mock_get_create": mock_get_create, - "mock_build_indices": mock_build_indices, - "mock_get_model": mock_get_model, - } - - -@pytest.fixture -def vector_store(mock_milvus_client, temp_db_path): - """Create a VectorStore instance using the default model.""" - with ( - mock.patch("paperchat.core.vector_store.VectorStore._get_or_create_collection"), - mock.patch("paperchat.core.vector_store.VectorStore._build_indices"), - mock.patch("paperchat.core.vector_store.get_component_logger") as mock_get_logger, - mock.patch("paperchat.core.vector_store.get_embedding_model") as mock_get_model, - ): - mock_get_logger.return_value = mock.MagicMock() - mock_embed_fn = mock.MagicMock() - mock_embed_fn.dim = DEFAULT_MODEL_DIM - mock_embed_fn.model_name = DEFAULT_MODEL_NAME - mock_embed_fn.encode_queries.return_value = [np.array([0.1] * DEFAULT_MODEL_DIM)] - mock_get_model.return_value = mock_embed_fn - - store = VectorStore(db_path=temp_db_path, model_identifier=DEFAULT_MODEL_ID) - store.client = mock_milvus_client - store._embed_fn = mock_embed_fn - store.main_schema = store._define_main_schema() - store.metadata_schema = store._define_metadata_schema() - yield store - - -def test_init_default_model(vector_store_init_mocks, temp_db_path): - """Test initialization with the default model identifier.""" - mocks = vector_store_init_mocks - mock_get_model = mocks["mock_get_model"] - mock_get_create = mocks["mock_get_create"] - mock_build_indices = mocks["mock_build_indices"] - - store = VectorStore(db_path=temp_db_path, model_identifier=DEFAULT_MODEL_ID) - - assert store.model_identifier == DEFAULT_MODEL_ID - mock_get_model.assert_called_once_with(DEFAULT_MODEL_ID) - assert store.embedding_dim == DEFAULT_MODEL_DIM - - expected_default_suffix = sanitize_model_identifier(DEFAULT_MODEL_NAME) - expected_collection_name = f"paperchat_docs_{expected_default_suffix}" - assert store.collection_name == expected_collection_name - assert store.metadata_collection_name == VectorStore.METADATA_COLLECTION_NAME - - mock_get_create.assert_has_calls( - [ - mock.call(expected_collection_name, mock.ANY), - mock.call(store.metadata_collection_name, mock.ANY), - ], - any_order=True, - ) - mock_build_indices.assert_called_once() - - -def test_init_explicit_model(vector_store_init_mocks, temp_db_path): - """Test initialization with an explicit model identifier.""" - mocks = vector_store_init_mocks - mock_get_model = mocks["mock_get_model"] - mock_get_create = mocks["mock_get_create"] - mock_build_indices = mocks["mock_build_indices"] - - store = VectorStore(db_path=temp_db_path, model_identifier=EXPLICIT_MODEL_ID) - - assert store.model_identifier == EXPLICIT_MODEL_ID - mock_get_model.assert_called_once_with(EXPLICIT_MODEL_ID) - assert store.embedding_dim == EXPLICIT_MODEL_DIM - - expected_explicit_suffix = sanitize_model_identifier(EXPLICIT_MODEL_ID) - expected_collection_name = f"paperchat_docs_{expected_explicit_suffix}" - assert store.collection_name == expected_collection_name - assert store.metadata_collection_name == VectorStore.METADATA_COLLECTION_NAME - - mock_get_create.assert_has_calls( - [ - mock.call(expected_collection_name, mock.ANY), - mock.call(store.metadata_collection_name, mock.ANY), - ], - any_order=True, - ) - mock_build_indices.assert_called_once() - - -@mock.patch("paperchat.core.vector_store.datetime") -def test_add_document_success(mock_dt, vector_store): - """Test successfully adding a new document inserts chunks and metadata.""" - pdf_path = Path("/fake/path/to/document.pdf") - source_id = pdf_path.stem - mock_now = datetime(2023, 1, 1, 12, 0, 0) - mock_dt.now.return_value = mock_now - iso_timestamp = mock_now.isoformat() - - mock_chunk_data = [{"chunk_id": "chunk1", "embedding": [0.1], "text": "text1"}] - expected_insert_data = [ - {"chunk_id": "chunk1", "embedding": [0.1], "text": "text1", "source": source_id} - ] - expected_metadata = [ - { - "source": source_id, - "original_filename": pdf_path.name, - "date_added": iso_timestamp, - } - ] - - with mock.patch( - "paperchat.core.vector_store.process_pdf_document", return_value=mock_chunk_data - ) as mock_process: - vector_store.client.reset_mock() - vector_store.client.query.return_value = [] - vector_store.client.insert.side_effect = [ - {"insert_count": len(expected_insert_data)}, - {"insert_count": 1}, - ] - - result = vector_store.add_document(str(pdf_path), source_id=source_id) - - assert result is True - vector_store.client.query.assert_called_once_with( - collection_name=vector_store.metadata_collection_name, - filter=f'source == "{source_id}"', - output_fields=["source"], - limit=1, - ) - mock_process.assert_called_once() - assert vector_store.client.insert.call_count == 2 - vector_store.client.insert.assert_has_calls( - [ - mock.call(collection_name=vector_store.collection_name, data=expected_insert_data), - mock.call( - collection_name=vector_store.metadata_collection_name, data=expected_metadata - ), - ] - ) - - -def test_add_document_already_exists(vector_store): - """Test adding a document that already exists skips processing and insertion.""" - pdf_path = Path("/path/to/existing.pdf") - source_id = pdf_path.stem - vector_store.client.reset_mock() - vector_store.client.query.return_value = [{"source": source_id}] - - with mock.patch("paperchat.core.vector_store.process_pdf_document") as mock_process: - result = vector_store.add_document(str(pdf_path), source_id=source_id) - - assert result is True - vector_store.client.query.assert_called_once_with( - collection_name=vector_store.metadata_collection_name, - filter=f'source == "{source_id}"', - output_fields=["source"], - limit=1, - ) - mock_process.assert_not_called() - vector_store.client.insert.assert_not_called() - vector_store.logger.info.assert_any_call( - f"Document ID '{source_id}' already exists in metadata. Skipping." - ) - - -@mock.patch("paperchat.core.vector_store.process_pdf_document", return_value=[{"text": "chunk"}]) -def test_add_document_chunk_insert_failure(mock_process, vector_store): - """Test failure during chunk insertion logs error and returns False.""" - pdf_path = Path("/path/to/fail_chunk.pdf") - source_id = pdf_path.stem - vector_store.client.reset_mock() - vector_store.logger.reset_mock() - vector_store.client.query.return_value = [] - - vector_store.client.insert.side_effect = [ - {"insert_count": 0, "primary_keys": []}, - {"insert_count": 1}, - ] - - result = vector_store.add_document(str(pdf_path), source_id=source_id) - - assert result is False - vector_store.client.query.assert_called_once() - mock_process.assert_called_once() - assert vector_store.client.insert.call_count == 1 - vector_store.client.insert.assert_any_call( - collection_name=vector_store.collection_name, data=mock.ANY - ) - vector_store.logger.error.assert_called_once() - assert ( - f"Mismatch in chunk insertion count for {source_id}" - in vector_store.logger.error.call_args[0][0] - ) - - -@mock.patch("paperchat.core.vector_store.datetime") -@mock.patch("paperchat.core.vector_store.process_pdf_document", return_value=[{"text": "chunk"}]) -def test_add_document_metadata_insert_failure(mock_process, mock_dt, vector_store): - """Test failure during metadata insertion logs error and returns False.""" - pdf_path = Path("/path/to/fail_meta.pdf") - source_id = pdf_path.stem - mock_now = datetime(2023, 1, 1, 12, 0, 0) - mock_dt.now.return_value = mock_now - - vector_store.client.reset_mock() - vector_store.logger.reset_mock() - vector_store.client.query.return_value = [] - - vector_store.client.insert.side_effect = [ - {"insert_count": 1}, - {"insert_count": 0}, - ] - - result = vector_store.add_document(str(pdf_path), source_id=source_id) - - assert result is False - vector_store.client.query.assert_called_once() - mock_process.assert_called_once() - assert vector_store.client.insert.call_count == 2 - vector_store.client.insert.assert_has_calls( - [ - mock.call(collection_name=vector_store.collection_name, data=mock.ANY), - mock.call(collection_name=vector_store.metadata_collection_name, data=mock.ANY), - ] - ) - vector_store.logger.error.assert_called_once() - assert f"Failed to insert metadata for {source_id}" in vector_store.logger.error.call_args[0][0] - - -def test_retrieve_success(vector_store): - """Test retrieving documents successfully.""" - query_text = "test query" - expected_results = [{"entity": {"text": "result", "pk": 1, "source": "s1"}, "distance": 0.9}] - vector_store.client.reset_mock() - mock_client_output = [expected_results] - vector_store.client.search.return_value = mock_client_output - - output_fields = [f.name for f in vector_store.main_schema.fields if f.name != "embedding"] - - results = vector_store.search(query_text) - - assert results == expected_results - vector_store.client.search.assert_called_once() - call_args, call_kwargs = vector_store.client.search.call_args - assert call_kwargs["collection_name"] == vector_store.collection_name - assert len(call_kwargs["data"]) == 1 - assert call_kwargs["limit"] == DEFAULT_SIMILARITY_TOP_K - assert call_kwargs["output_fields"] == output_fields - assert call_kwargs["filter"] is None - assert call_kwargs["search_params"]["radius"] == DEFAULT_SIMILARITY_THRESHOLD - - -def test_retrieve_with_filter_and_custom_params(vector_store): - """Test retrieve with a filter expression and custom top_k/threshold.""" - query_text = "filtered query" - filter_expr = "source == 'doc1'" - custom_k = 3 - custom_threshold = 0.5 - custom_output_fields = ["text", "source"] - expected_results = [{"entity": {"text": "filtered result", "source": "doc1"}, "distance": 0.6}] - vector_store.client.reset_mock() - mock_client_output = [expected_results] - vector_store.client.search.return_value = mock_client_output - - results = vector_store.search( - query_text, - top_k=custom_k, - threshold=custom_threshold, - output_fields=custom_output_fields, - filter_expression=filter_expr, - ) - - assert results == expected_results - vector_store.client.search.assert_called_once() - call_args, call_kwargs = vector_store.client.search.call_args - assert call_kwargs["collection_name"] == vector_store.collection_name - assert len(call_kwargs["data"]) == 1 - assert call_kwargs["limit"] == custom_k - assert call_kwargs["output_fields"] == custom_output_fields - assert call_kwargs["filter"] == filter_expr - assert call_kwargs["search_params"]["radius"] == custom_threshold - - -def test_retrieve_embedding_failure(vector_store): - """Test retrieve returns empty list if embedding fails.""" - vector_store._embed_fn.encode_queries.side_effect = Exception("Embedding error") - vector_store.client.reset_mock() - vector_store.logger.reset_mock() - - results = vector_store.search("query") - - assert results == [] - vector_store.client.search.assert_not_called() - vector_store.logger.exception.assert_called_once() - - -def test_retrieve_search_failure(vector_store): - """Test retrieve returns empty list if search fails.""" - vector_store.client.search.side_effect = Exception("Search error") - vector_store.client.reset_mock() - vector_store.logger.reset_mock() - - results = vector_store.search("query") - - assert results == [] - vector_store.client.search.assert_called_once() - vector_store.logger.exception.assert_called_once() - - -def test_list_documents_success(vector_store): - """Test listing documents successfully.""" - expected_metadata = [ - {"source": "doc1", "original_filename": "doc1.pdf", "date_added": "t1"}, - {"source": "doc2", "original_filename": "doc2.pdf", "date_added": "t2"}, - ] - vector_store.client.reset_mock() - vector_store.client.query.return_value = expected_metadata - - results = vector_store.list_documents() - - assert results == expected_metadata - vector_store.client.query.assert_called_once_with( - collection_name=vector_store.metadata_collection_name, - output_fields=["source", "original_filename", "date_added"], - limit=100, - ) - - -def test_list_documents_failure(vector_store): - """Test listing documents returns empty list on failure.""" - vector_store.client.reset_mock() - vector_store.logger.reset_mock() - vector_store.client.query.side_effect = Exception("Query failed") - - results = vector_store.list_documents() - - assert results == [] - vector_store.client.query.assert_called_once() - vector_store.logger.exception.assert_called_once() - - -def test_remove_document_success(vector_store): - """Test removing a document successfully deletes from both collections.""" - source_id = "doc_to_remove" - vector_store.client.reset_mock() - - mock_meta_delete = mock.MagicMock() - mock_meta_delete.delete_count = 1 - mock_chunk_delete = mock.MagicMock() - mock_chunk_delete.delete_count = 5 - vector_store.client.delete.side_effect = [mock_meta_delete, mock_chunk_delete] - - meta_deleted, chunks_deleted = vector_store.remove_document(source_id) - - assert meta_deleted == 1 - assert chunks_deleted == 5 - assert vector_store.client.delete.call_count == 2 - expected_filter = f'source == "{source_id}"' - vector_store.client.delete.assert_has_calls( - [ - mock.call( - collection_name=vector_store.metadata_collection_name, filter=expected_filter - ), - mock.call(collection_name=vector_store.collection_name, filter=expected_filter), - ] - ) - - -def test_remove_document_not_found(vector_store): - """Test removing a non-existent document returns (0, 0).""" - source_id = "doc_not_found" - vector_store.client.reset_mock() - - mock_zero_delete = mock.MagicMock() - mock_zero_delete.delete_count = 0 - vector_store.client.delete.return_value = mock_zero_delete - - meta_deleted, chunks_deleted = vector_store.remove_document(source_id) - - assert meta_deleted == 0 - assert chunks_deleted == 0 - assert vector_store.client.delete.call_count == 2 - - -def test_remove_document_metadata_delete_failure(vector_store): - """Test failure during metadata deletion logs error, attempts chunk deletion, returns 0 meta count.""" - source_id = "fail_meta_delete" - vector_store.client.reset_mock() - vector_store.logger.reset_mock() - - mock_chunk_delete = mock.MagicMock() - mock_chunk_delete.delete_count = 5 - vector_store.client.delete.side_effect = [ - Exception("Metadata delete failed"), - mock_chunk_delete, - ] - - meta_deleted, chunks_deleted = vector_store.remove_document(source_id) - - assert meta_deleted == 0 - assert chunks_deleted == 5 - assert vector_store.client.delete.call_count == 2 - vector_store.logger.exception.assert_called_once() - assert ( - f"Failed to remove from metadata collection for '{source_id}'" - in vector_store.logger.exception.call_args[0][0] - ) - - -def test_remove_document_chunk_delete_failure(vector_store): - """Test failure during chunk deletion logs error and returns 0 chunk count.""" - source_id = "fail_chunk_delete" - vector_store.client.reset_mock() - vector_store.logger.reset_mock() - - mock_meta_delete = mock.MagicMock() - mock_meta_delete.delete_count = 1 - vector_store.client.delete.side_effect = [mock_meta_delete, Exception("Chunk delete failed")] - - meta_deleted, chunks_deleted = vector_store.remove_document(source_id) - - assert meta_deleted == 1 - assert chunks_deleted == 0 - assert vector_store.client.delete.call_count == 2 - vector_store.logger.exception.assert_called_once() - assert ( - f"Failed to remove chunks from main collection for '{source_id}'" - in vector_store.logger.exception.call_args[0][0] - ) - - -@pytest.fixture(autouse=True) -def reset_delete_mock_attributes(mock_milvus_client): - yield - if hasattr(mock_milvus_client.delete.return_value, "delete_count"): - pass - if hasattr(mock_milvus_client.delete.return_value, "primary_keys"): - pass diff --git a/uv.lock b/uv.lock deleted file mode 100644 index 100b83e..0000000 --- a/uv.lock +++ /dev/null @@ -1,4065 +0,0 @@ -version = 1 -revision = 3 -requires-python = ">=3.12" - -[[package]] -name = "accelerate" -version = "1.13.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "huggingface-hub" }, - { name = "numpy" }, - { 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 = "aiohappyeyeballs" -version = "2.6.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/26/30/f84a107a9c4331c14b2b586036f40965c128aa4fee4dda5d3d51cb14ad54/aiohappyeyeballs-2.6.1.tar.gz", hash = "sha256:c3f9d0113123803ccadfdf3f0faa505bc78e6a72d1cc4806cbd719826e943558", size = 22760, upload-time = "2025-03-12T01:42:48.764Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/0f/15/5bf3b99495fb160b63f95972b81750f18f7f4e02ad051373b669d17d44f2/aiohappyeyeballs-2.6.1-py3-none-any.whl", hash = "sha256:f349ba8f4b75cb25c99c5c2d84e997e485204d2902a9597802b0371f09331fb8", size = 15265, upload-time = "2025-03-12T01:42:47.083Z" }, -] - -[[package]] -name = "aiohttp" -version = "3.13.3" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "aiohappyeyeballs" }, - { name = "aiosignal" }, - { name = "attrs" }, - { name = "frozenlist" }, - { name = "multidict" }, - { name = "propcache" }, - { name = "yarl" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/50/42/32cf8e7704ceb4481406eb87161349abb46a57fee3f008ba9cb610968646/aiohttp-3.13.3.tar.gz", hash = "sha256:a949eee43d3782f2daae4f4a2819b2cb9b0c5d3b7f7a927067cc84dafdbb9f88", size = 7844556, upload-time = "2026-01-03T17:33:05.204Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a0/be/4fc11f202955a69e0db803a12a062b8379c970c7c84f4882b6da17337cc1/aiohttp-3.13.3-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:b903a4dfee7d347e2d87697d0713be59e0b87925be030c9178c5faa58ea58d5c", size = 739732, upload-time = "2026-01-03T17:30:14.23Z" }, - { url = "https://files.pythonhosted.org/packages/97/2c/621d5b851f94fa0bb7430d6089b3aa970a9d9b75196bc93bb624b0db237a/aiohttp-3.13.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:a45530014d7a1e09f4a55f4f43097ba0fd155089372e105e4bff4ca76cb1b168", size = 494293, upload-time = "2026-01-03T17:30:15.96Z" }, - { url = "https://files.pythonhosted.org/packages/5d/43/4be01406b78e1be8320bb8316dc9c42dbab553d281c40364e0f862d5661c/aiohttp-3.13.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:27234ef6d85c914f9efeb77ff616dbf4ad2380be0cda40b4db086ffc7ddd1b7d", size = 493533, upload-time = "2026-01-03T17:30:17.431Z" }, - { url = "https://files.pythonhosted.org/packages/8d/a8/5a35dc56a06a2c90d4742cbf35294396907027f80eea696637945a106f25/aiohttp-3.13.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d32764c6c9aafb7fb55366a224756387cd50bfa720f32b88e0e6fa45b27dcf29", size = 1737839, upload-time = "2026-01-03T17:30:19.422Z" }, - { url = "https://files.pythonhosted.org/packages/bf/62/4b9eeb331da56530bf2e198a297e5303e1c1ebdceeb00fe9b568a65c5a0c/aiohttp-3.13.3-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:b1a6102b4d3ebc07dad44fbf07b45bb600300f15b552ddf1851b5390202ea2e3", size = 1703932, upload-time = "2026-01-03T17:30:21.756Z" }, - { url = "https://files.pythonhosted.org/packages/7c/f6/af16887b5d419e6a367095994c0b1332d154f647e7dc2bd50e61876e8e3d/aiohttp-3.13.3-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c014c7ea7fb775dd015b2d3137378b7be0249a448a1612268b5a90c2d81de04d", size = 1771906, upload-time = "2026-01-03T17:30:23.932Z" }, - { url = "https://files.pythonhosted.org/packages/ce/83/397c634b1bcc24292fa1e0c7822800f9f6569e32934bdeef09dae7992dfb/aiohttp-3.13.3-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:2b8d8ddba8f95ba17582226f80e2de99c7a7948e66490ef8d947e272a93e9463", size = 1871020, upload-time = "2026-01-03T17:30:26Z" }, - { url = "https://files.pythonhosted.org/packages/86/f6/a62cbbf13f0ac80a70f71b1672feba90fdb21fd7abd8dbf25c0105fb6fa3/aiohttp-3.13.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9ae8dd55c8e6c4257eae3a20fd2c8f41edaea5992ed67156642493b8daf3cecc", size = 1755181, upload-time = "2026-01-03T17:30:27.554Z" }, - { url = "https://files.pythonhosted.org/packages/0a/87/20a35ad487efdd3fba93d5843efdfaa62d2f1479eaafa7453398a44faf13/aiohttp-3.13.3-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:01ad2529d4b5035578f5081606a465f3b814c542882804e2e8cda61adf5c71bf", size = 1561794, upload-time = "2026-01-03T17:30:29.254Z" }, - { url = "https://files.pythonhosted.org/packages/de/95/8fd69a66682012f6716e1bc09ef8a1a2a91922c5725cb904689f112309c4/aiohttp-3.13.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:bb4f7475e359992b580559e008c598091c45b5088f28614e855e42d39c2f1033", size = 1697900, upload-time = "2026-01-03T17:30:31.033Z" }, - { url = "https://files.pythonhosted.org/packages/e5/66/7b94b3b5ba70e955ff597672dad1691333080e37f50280178967aff68657/aiohttp-3.13.3-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:c19b90316ad3b24c69cd78d5c9b4f3aa4497643685901185b65166293d36a00f", size = 1728239, upload-time = "2026-01-03T17:30:32.703Z" }, - { url = "https://files.pythonhosted.org/packages/47/71/6f72f77f9f7d74719692ab65a2a0252584bf8d5f301e2ecb4c0da734530a/aiohttp-3.13.3-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:96d604498a7c782cb15a51c406acaea70d8c027ee6b90c569baa6e7b93073679", size = 1740527, upload-time = "2026-01-03T17:30:34.695Z" }, - { url = "https://files.pythonhosted.org/packages/fa/b4/75ec16cbbd5c01bdaf4a05b19e103e78d7ce1ef7c80867eb0ace42ff4488/aiohttp-3.13.3-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:084911a532763e9d3dd95adf78a78f4096cd5f58cdc18e6fdbc1b58417a45423", size = 1554489, upload-time = "2026-01-03T17:30:36.864Z" }, - { url = "https://files.pythonhosted.org/packages/52/8f/bc518c0eea29f8406dcf7ed1f96c9b48e3bc3995a96159b3fc11f9e08321/aiohttp-3.13.3-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:7a4a94eb787e606d0a09404b9c38c113d3b099d508021faa615d70a0131907ce", size = 1767852, upload-time = "2026-01-03T17:30:39.433Z" }, - { 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" }, - { 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 = "aiosignal" -version = "1.4.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "frozenlist" }, - { name = "typing-extensions", marker = "python_full_version < '3.13'" }, -] -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 = [ - { url = "https://files.pythonhosted.org/packages/fb/76/641ae371508676492379f16e2fa48f4e2c11741bd63c48be4b12a6b09cba/aiosignal-1.4.0-py3-none-any.whl", hash = "sha256:053243f8b92b990551949e63930a839ff0cf0b0ebbe0597b0f3fb19e1a0fe82e", size = 7490, upload-time = "2025-07-03T22:54:42.156Z" }, -] - -[[package]] -name = "altair" -version = "6.0.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "jinja2" }, - { name = "jsonschema" }, - { name = "narwhals" }, - { name = "packaging" }, - { name = "typing-extensions", marker = "python_full_version < '3.15'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/f7/c0/184a89bd5feba14ff3c41cfaf1dd8a82c05f5ceedbc92145e17042eb08a4/altair-6.0.0.tar.gz", hash = "sha256:614bf5ecbe2337347b590afb111929aa9c16c9527c4887d96c9bc7f6640756b4", size = 763834, upload-time = "2025-11-12T08:59:11.519Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/db/33/ef2f2409450ef6daa61459d5de5c08128e7d3edb773fefd0a324d1310238/altair-6.0.0-py3-none-any.whl", hash = "sha256:09ae95b53d5fe5b16987dccc785a7af8588f2dca50de1e7a156efa8a461515f8", size = 795410, upload-time = "2025-11-12T08:59:09.804Z" }, -] - -[[package]] -name = "annotated-doc" -version = "0.0.4" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/57/ba/046ceea27344560984e26a590f90bc7f4a75b06701f653222458922b558c/annotated_doc-0.0.4.tar.gz", hash = "sha256:fbcda96e87e9c92ad167c2e53839e57503ecfda18804ea28102353485033faa4", size = 7288, upload-time = "2025-11-10T22:07:42.062Z" } -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 = "anthropic" -version = "0.84.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "anyio" }, - { name = "distro" }, - { name = "docstring-parser" }, - { name = "httpx" }, - { name = "jiter" }, - { name = "pydantic" }, - { name = "sniffio" }, - { name = "typing-extensions" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/04/ea/0869d6df9ef83dcf393aeefc12dd81677d091c6ffc86f783e51cf44062f2/anthropic-0.84.0.tar.gz", hash = "sha256:72f5f90e5aebe62dca316cb013629cfa24996b0f5a4593b8c3d712bc03c43c37", size = 539457, upload-time = "2026-02-25T05:22:38.54Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/64/ca/218fa25002a332c0aa149ba18ffc0543175998b1f65de63f6d106689a345/anthropic-0.84.0-py3-none-any.whl", hash = "sha256:861c4c50f91ca45f942e091d83b60530ad6d4f98733bfe648065364da05d29e7", size = 455156, upload-time = "2026-02-25T05:22:40.468Z" }, -] - -[[package]] -name = "antlr4-python3-runtime" -version = "4.9.3" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/3e/38/7859ff46355f76f8d19459005ca000b6e7012f2f1ca597746cbcd1fbfe5e/antlr4-python3-runtime-4.9.3.tar.gz", hash = "sha256:f224469b4168294902bb1efa80a8bf7855f24c99aef99cbefc1bcd3cce77881b", size = 117034, upload-time = "2021-11-06T17:52:23.524Z" } - -[[package]] -name = "anyio" -version = "4.12.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "idna" }, - { name = "typing-extensions", marker = "python_full_version < '3.13'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/96/f0/5eb65b2bb0d09ac6776f2eb54adee6abe8228ea05b20a5ad0e4945de8aac/anyio-4.12.1.tar.gz", hash = "sha256:41cfcc3a4c85d3f05c932da7c26d0201ac36f72abd4435ba90d0464a3ffed703", size = 228685, upload-time = "2026-01-06T11:45:21.246Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/38/0e/27be9fdef66e72d64c0cdc3cc2823101b80585f8119b5c112c2e8f5f7dab/anyio-4.12.1-py3-none-any.whl", hash = "sha256:d405828884fc140aa80a3c667b8beed277f1dfedec42ba031bd6ac3db606ab6c", size = 113592, upload-time = "2026-01-06T11:45:19.497Z" }, -] - -[[package]] -name = "attrs" -version = "25.4.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/6b/5c/685e6633917e101e5dcb62b9dd76946cbb57c26e133bae9e0cd36033c0a9/attrs-25.4.0.tar.gz", hash = "sha256:16d5969b87f0859ef33a48b35d55ac1be6e42ae49d5e853b597db70c35c57e11", size = 934251, upload-time = "2025-10-06T13:54:44.725Z" } -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 = "beautifulsoup4" -version = "4.14.3" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "soupsieve" }, - { name = "typing-extensions" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/c3/b0/1c6a16426d389813b48d95e26898aff79abbde42ad353958ad95cc8c9b21/beautifulsoup4-4.14.3.tar.gz", hash = "sha256:6292b1c5186d356bba669ef9f7f051757099565ad9ada5dd630bd9de5fa7fb86", size = 627737, upload-time = "2025-11-30T15:08:26.084Z" } -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 = "beir" -version = "2.2.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "datasets" }, - { name = "pytrec-eval-terrier" }, - { name = "sentence-transformers" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/14/23/10e19fa9601fe50c71f65408847e9eccdf3c32a5ed7e382d5bf51de16ebb/beir-2.2.0.tar.gz", hash = "sha256:3bef26652cf9fa209190c3b3b9e9ff684343d66cf39ec637998a6a57e523f786", size = 63959, upload-time = "2025-06-04T17:42:42.731Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/8b/bc/fa7702f4d37e4821a55b26a87f95641ce12d09252bc4202025b34bef44a0/beir-2.2.0-py3-none-any.whl", hash = "sha256:46fe4d0a3a6e719090eabc0d1f8aa0c51c6c1379639e6381de5b49e445ab36d1", size = 77357, upload-time = "2025-06-04T17:42:41.252Z" }, -] - -[[package]] -name = "blinker" -version = "1.9.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/21/28/9b3f50ce0e048515135495f198351908d99540d69bfdc8c1d15b73dc55ce/blinker-1.9.0.tar.gz", hash = "sha256:b4ce2265a7abece45e7cc896e98dbebe6cead56bcf805a3d23136d145f5445bf", size = 22460, upload-time = "2024-11-08T17:25:47.436Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/10/cb/f2ad4230dc2eb1a74edf38f1a38b9b52277f75bef262d8908e60d957e13c/blinker-1.9.0-py3-none-any.whl", hash = "sha256:ba0efaa9080b619ff2f3459d1d500c57bddea4a6b424b60a91141db6fd2f08bc", size = 8458, upload-time = "2024-11-08T17:25:46.184Z" }, -] - -[[package]] -name = "cachetools" -version = "7.0.3" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/48/5c/3b882b82e9af737906539a2eafb62f96a229f1fa80255bede0c7b554cbc4/cachetools-7.0.3.tar.gz", hash = "sha256:8c246313b95849964e54a909c03b327a87ab0428b068fac10da7b105ca275ef6", size = 37187, upload-time = "2026-03-05T21:00:57.918Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/05/4a/573185481c50a8841331f54ddae44e4a3469c46aa0b397731c53a004369a/cachetools-7.0.3-py3-none-any.whl", hash = "sha256:c128ffca156eef344c25fcd08a96a5952803786fa33097f5f2d49edf76f79d53", size = 13907, upload-time = "2026-03-05T21:00:56.486Z" }, -] - -[[package]] -name = "certifi" -version = "2026.2.25" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/af/2d/7bf41579a8986e348fa033a31cdd0e4121114f6bce2457e8876010b092dd/certifi-2026.2.25.tar.gz", hash = "sha256:e887ab5cee78ea814d3472169153c2d12cd43b14bd03329a39a9c6e2e80bfba7", size = 155029, upload-time = "2026-02-25T02:54:17.342Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/9a/3c/c17fb3ca2d9c3acff52e30b309f538586f9f5b9c9cf454f3845fc9af4881/certifi-2026.2.25-py3-none-any.whl", hash = "sha256:027692e4402ad994f1c42e52a4997a9763c646b73e4096e4d5d6db8af1d6f0fa", size = 153684, upload-time = "2026-02-25T02:54:15.766Z" }, -] - -[[package]] -name = "cffi" -version = "2.0.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "pycparser", marker = "implementation_name != 'PyPy'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/eb/56/b1ba7935a17738ae8453301356628e8147c79dbb825bcbc73dc7401f9846/cffi-2.0.0.tar.gz", hash = "sha256:44d1b5909021139fe36001ae048dbdde8214afa20200eda0f64c068cac5d5529", size = 523588, upload-time = "2025-09-08T23:24:04.541Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ea/47/4f61023ea636104d4f16ab488e268b93008c3d0bb76893b1b31db1f96802/cffi-2.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6d02d6655b0e54f54c4ef0b94eb6be0607b70853c45ce98bd278dc7de718be5d", size = 185271, upload-time = "2025-09-08T23:22:44.795Z" }, - { url = "https://files.pythonhosted.org/packages/df/a2/781b623f57358e360d62cdd7a8c681f074a71d445418a776eef0aadb4ab4/cffi-2.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8eca2a813c1cb7ad4fb74d368c2ffbbb4789d377ee5bb8df98373c2cc0dee76c", size = 181048, upload-time = "2025-09-08T23:22:45.938Z" }, - { url = "https://files.pythonhosted.org/packages/ff/df/a4f0fbd47331ceeba3d37c2e51e9dfc9722498becbeec2bd8bc856c9538a/cffi-2.0.0-cp312-cp312-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:21d1152871b019407d8ac3985f6775c079416c282e431a4da6afe7aefd2bccbe", size = 212529, upload-time = "2025-09-08T23:22:47.349Z" }, - { url = "https://files.pythonhosted.org/packages/d5/72/12b5f8d3865bf0f87cf1404d8c374e7487dcf097a1c91c436e72e6badd83/cffi-2.0.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:b21e08af67b8a103c71a250401c78d5e0893beff75e28c53c98f4de42f774062", size = 220097, upload-time = "2025-09-08T23:22:48.677Z" }, - { url = "https://files.pythonhosted.org/packages/c2/95/7a135d52a50dfa7c882ab0ac17e8dc11cec9d55d2c18dda414c051c5e69e/cffi-2.0.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:1e3a615586f05fc4065a8b22b8152f0c1b00cdbc60596d187c2a74f9e3036e4e", size = 207983, upload-time = "2025-09-08T23:22:50.06Z" }, - { url = "https://files.pythonhosted.org/packages/3a/c8/15cb9ada8895957ea171c62dc78ff3e99159ee7adb13c0123c001a2546c1/cffi-2.0.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:81afed14892743bbe14dacb9e36d9e0e504cd204e0b165062c488942b9718037", size = 206519, upload-time = "2025-09-08T23:22:51.364Z" }, - { url = "https://files.pythonhosted.org/packages/78/2d/7fa73dfa841b5ac06c7b8855cfc18622132e365f5b81d02230333ff26e9e/cffi-2.0.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3e17ed538242334bf70832644a32a7aae3d83b57567f9fd60a26257e992b79ba", size = 219572, upload-time = "2025-09-08T23:22:52.902Z" }, - { url = "https://files.pythonhosted.org/packages/07/e0/267e57e387b4ca276b90f0434ff88b2c2241ad72b16d31836adddfd6031b/cffi-2.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3925dd22fa2b7699ed2617149842d2e6adde22b262fcbfada50e3d195e4b3a94", size = 222963, upload-time = "2025-09-08T23:22:54.518Z" }, - { url = "https://files.pythonhosted.org/packages/b6/75/1f2747525e06f53efbd878f4d03bac5b859cbc11c633d0fb81432d98a795/cffi-2.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2c8f814d84194c9ea681642fd164267891702542f028a15fc97d4674b6206187", size = 221361, upload-time = "2025-09-08T23:22:55.867Z" }, - { url = "https://files.pythonhosted.org/packages/7b/2b/2b6435f76bfeb6bbf055596976da087377ede68df465419d192acf00c437/cffi-2.0.0-cp312-cp312-win32.whl", hash = "sha256:da902562c3e9c550df360bfa53c035b2f241fed6d9aef119048073680ace4a18", size = 172932, upload-time = "2025-09-08T23:22:57.188Z" }, - { url = "https://files.pythonhosted.org/packages/f8/ed/13bd4418627013bec4ed6e54283b1959cf6db888048c7cf4b4c3b5b36002/cffi-2.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:da68248800ad6320861f129cd9c1bf96ca849a2771a59e0344e88681905916f5", size = 183557, upload-time = "2025-09-08T23:22:58.351Z" }, - { url = "https://files.pythonhosted.org/packages/95/31/9f7f93ad2f8eff1dbc1c3656d7ca5bfd8fb52c9d786b4dcf19b2d02217fa/cffi-2.0.0-cp312-cp312-win_arm64.whl", hash = "sha256:4671d9dd5ec934cb9a73e7ee9676f9362aba54f7f34910956b84d727b0d73fb6", size = 177762, upload-time = "2025-09-08T23:22:59.668Z" }, - { url = "https://files.pythonhosted.org/packages/4b/8d/a0a47a0c9e413a658623d014e91e74a50cdd2c423f7ccfd44086ef767f90/cffi-2.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:00bdf7acc5f795150faa6957054fbbca2439db2f775ce831222b66f192f03beb", size = 185230, upload-time = "2025-09-08T23:23:00.879Z" }, - { url = "https://files.pythonhosted.org/packages/4a/d2/a6c0296814556c68ee32009d9c2ad4f85f2707cdecfd7727951ec228005d/cffi-2.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:45d5e886156860dc35862657e1494b9bae8dfa63bf56796f2fb56e1679fc0bca", size = 181043, upload-time = "2025-09-08T23:23:02.231Z" }, - { url = "https://files.pythonhosted.org/packages/b0/1e/d22cc63332bd59b06481ceaac49d6c507598642e2230f201649058a7e704/cffi-2.0.0-cp313-cp313-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:07b271772c100085dd28b74fa0cd81c8fb1a3ba18b21e03d7c27f3436a10606b", size = 212446, upload-time = "2025-09-08T23:23:03.472Z" }, - { url = "https://files.pythonhosted.org/packages/a9/f5/a2c23eb03b61a0b8747f211eb716446c826ad66818ddc7810cc2cc19b3f2/cffi-2.0.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d48a880098c96020b02d5a1f7d9251308510ce8858940e6fa99ece33f610838b", size = 220101, upload-time = "2025-09-08T23:23:04.792Z" }, - { url = "https://files.pythonhosted.org/packages/f2/7f/e6647792fc5850d634695bc0e6ab4111ae88e89981d35ac269956605feba/cffi-2.0.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:f93fd8e5c8c0a4aa1f424d6173f14a892044054871c771f8566e4008eaa359d2", size = 207948, upload-time = "2025-09-08T23:23:06.127Z" }, - { url = "https://files.pythonhosted.org/packages/cb/1e/a5a1bd6f1fb30f22573f76533de12a00bf274abcdc55c8edab639078abb6/cffi-2.0.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:dd4f05f54a52fb558f1ba9f528228066954fee3ebe629fc1660d874d040ae5a3", size = 206422, upload-time = "2025-09-08T23:23:07.753Z" }, - { url = "https://files.pythonhosted.org/packages/98/df/0a1755e750013a2081e863e7cd37e0cdd02664372c754e5560099eb7aa44/cffi-2.0.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c8d3b5532fc71b7a77c09192b4a5a200ea992702734a2e9279a37f2478236f26", size = 219499, upload-time = "2025-09-08T23:23:09.648Z" }, - { url = "https://files.pythonhosted.org/packages/50/e1/a969e687fcf9ea58e6e2a928ad5e2dd88cc12f6f0ab477e9971f2309b57c/cffi-2.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d9b29c1f0ae438d5ee9acb31cadee00a58c46cc9c0b2f9038c6b0b3470877a8c", size = 222928, upload-time = "2025-09-08T23:23:10.928Z" }, - { url = "https://files.pythonhosted.org/packages/36/54/0362578dd2c9e557a28ac77698ed67323ed5b9775ca9d3fe73fe191bb5d8/cffi-2.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6d50360be4546678fc1b79ffe7a66265e28667840010348dd69a314145807a1b", size = 221302, upload-time = "2025-09-08T23:23:12.42Z" }, - { url = "https://files.pythonhosted.org/packages/eb/6d/bf9bda840d5f1dfdbf0feca87fbdb64a918a69bca42cfa0ba7b137c48cb8/cffi-2.0.0-cp313-cp313-win32.whl", hash = "sha256:74a03b9698e198d47562765773b4a8309919089150a0bb17d829ad7b44b60d27", size = 172909, upload-time = "2025-09-08T23:23:14.32Z" }, - { url = "https://files.pythonhosted.org/packages/37/18/6519e1ee6f5a1e579e04b9ddb6f1676c17368a7aba48299c3759bbc3c8b3/cffi-2.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:19f705ada2530c1167abacb171925dd886168931e0a7b78f5bffcae5c6b5be75", size = 183402, upload-time = "2025-09-08T23:23:15.535Z" }, - { url = "https://files.pythonhosted.org/packages/cb/0e/02ceeec9a7d6ee63bb596121c2c8e9b3a9e150936f4fbef6ca1943e6137c/cffi-2.0.0-cp313-cp313-win_arm64.whl", hash = "sha256:256f80b80ca3853f90c21b23ee78cd008713787b1b1e93eae9f3d6a7134abd91", size = 177780, upload-time = "2025-09-08T23:23:16.761Z" }, - { url = "https://files.pythonhosted.org/packages/92/c4/3ce07396253a83250ee98564f8d7e9789fab8e58858f35d07a9a2c78de9f/cffi-2.0.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:fc33c5141b55ed366cfaad382df24fe7dcbc686de5be719b207bb248e3053dc5", size = 185320, upload-time = "2025-09-08T23:23:18.087Z" }, - { url = "https://files.pythonhosted.org/packages/59/dd/27e9fa567a23931c838c6b02d0764611c62290062a6d4e8ff7863daf9730/cffi-2.0.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c654de545946e0db659b3400168c9ad31b5d29593291482c43e3564effbcee13", size = 181487, upload-time = "2025-09-08T23:23:19.622Z" }, - { url = "https://files.pythonhosted.org/packages/d6/43/0e822876f87ea8a4ef95442c3d766a06a51fc5298823f884ef87aaad168c/cffi-2.0.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:24b6f81f1983e6df8db3adc38562c83f7d4a0c36162885ec7f7b77c7dcbec97b", size = 220049, upload-time = "2025-09-08T23:23:20.853Z" }, - { url = "https://files.pythonhosted.org/packages/b4/89/76799151d9c2d2d1ead63c2429da9ea9d7aac304603de0c6e8764e6e8e70/cffi-2.0.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:12873ca6cb9b0f0d3a0da705d6086fe911591737a59f28b7936bdfed27c0d47c", size = 207793, upload-time = "2025-09-08T23:23:22.08Z" }, - { url = "https://files.pythonhosted.org/packages/bb/dd/3465b14bb9e24ee24cb88c9e3730f6de63111fffe513492bf8c808a3547e/cffi-2.0.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:d9b97165e8aed9272a6bb17c01e3cc5871a594a446ebedc996e2397a1c1ea8ef", size = 206300, upload-time = "2025-09-08T23:23:23.314Z" }, - { url = "https://files.pythonhosted.org/packages/47/d9/d83e293854571c877a92da46fdec39158f8d7e68da75bf73581225d28e90/cffi-2.0.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:afb8db5439b81cf9c9d0c80404b60c3cc9c3add93e114dcae767f1477cb53775", size = 219244, upload-time = "2025-09-08T23:23:24.541Z" }, - { url = "https://files.pythonhosted.org/packages/2b/0f/1f177e3683aead2bb00f7679a16451d302c436b5cbf2505f0ea8146ef59e/cffi-2.0.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:737fe7d37e1a1bffe70bd5754ea763a62a066dc5913ca57e957824b72a85e205", size = 222828, upload-time = "2025-09-08T23:23:26.143Z" }, - { url = "https://files.pythonhosted.org/packages/c6/0f/cafacebd4b040e3119dcb32fed8bdef8dfe94da653155f9d0b9dc660166e/cffi-2.0.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:38100abb9d1b1435bc4cc340bb4489635dc2f0da7456590877030c9b3d40b0c1", size = 220926, upload-time = "2025-09-08T23:23:27.873Z" }, - { url = "https://files.pythonhosted.org/packages/3e/aa/df335faa45b395396fcbc03de2dfcab242cd61a9900e914fe682a59170b1/cffi-2.0.0-cp314-cp314-win32.whl", hash = "sha256:087067fa8953339c723661eda6b54bc98c5625757ea62e95eb4898ad5e776e9f", size = 175328, upload-time = "2025-09-08T23:23:44.61Z" }, - { url = "https://files.pythonhosted.org/packages/bb/92/882c2d30831744296ce713f0feb4c1cd30f346ef747b530b5318715cc367/cffi-2.0.0-cp314-cp314-win_amd64.whl", hash = "sha256:203a48d1fb583fc7d78a4c6655692963b860a417c0528492a6bc21f1aaefab25", size = 185650, upload-time = "2025-09-08T23:23:45.848Z" }, - { url = "https://files.pythonhosted.org/packages/9f/2c/98ece204b9d35a7366b5b2c6539c350313ca13932143e79dc133ba757104/cffi-2.0.0-cp314-cp314-win_arm64.whl", hash = "sha256:dbd5c7a25a7cb98f5ca55d258b103a2054f859a46ae11aaf23134f9cc0d356ad", size = 180687, upload-time = "2025-09-08T23:23:47.105Z" }, - { url = "https://files.pythonhosted.org/packages/3e/61/c768e4d548bfa607abcda77423448df8c471f25dbe64fb2ef6d555eae006/cffi-2.0.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:9a67fc9e8eb39039280526379fb3a70023d77caec1852002b4da7e8b270c4dd9", size = 188773, upload-time = "2025-09-08T23:23:29.347Z" }, - { url = "https://files.pythonhosted.org/packages/2c/ea/5f76bce7cf6fcd0ab1a1058b5af899bfbef198bea4d5686da88471ea0336/cffi-2.0.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7a66c7204d8869299919db4d5069a82f1561581af12b11b3c9f48c584eb8743d", size = 185013, upload-time = "2025-09-08T23:23:30.63Z" }, - { url = "https://files.pythonhosted.org/packages/be/b4/c56878d0d1755cf9caa54ba71e5d049479c52f9e4afc230f06822162ab2f/cffi-2.0.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7cc09976e8b56f8cebd752f7113ad07752461f48a58cbba644139015ac24954c", size = 221593, upload-time = "2025-09-08T23:23:31.91Z" }, - { url = "https://files.pythonhosted.org/packages/e0/0d/eb704606dfe8033e7128df5e90fee946bbcb64a04fcdaa97321309004000/cffi-2.0.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:92b68146a71df78564e4ef48af17551a5ddd142e5190cdf2c5624d0c3ff5b2e8", size = 209354, upload-time = "2025-09-08T23:23:33.214Z" }, - { url = "https://files.pythonhosted.org/packages/d8/19/3c435d727b368ca475fb8742ab97c9cb13a0de600ce86f62eab7fa3eea60/cffi-2.0.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:b1e74d11748e7e98e2f426ab176d4ed720a64412b6a15054378afdb71e0f37dc", size = 208480, upload-time = "2025-09-08T23:23:34.495Z" }, - { url = "https://files.pythonhosted.org/packages/d0/44/681604464ed9541673e486521497406fadcc15b5217c3e326b061696899a/cffi-2.0.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:28a3a209b96630bca57cce802da70c266eb08c6e97e5afd61a75611ee6c64592", size = 221584, upload-time = "2025-09-08T23:23:36.096Z" }, - { url = "https://files.pythonhosted.org/packages/25/8e/342a504ff018a2825d395d44d63a767dd8ebc927ebda557fecdaca3ac33a/cffi-2.0.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:7553fb2090d71822f02c629afe6042c299edf91ba1bf94951165613553984512", size = 224443, upload-time = "2025-09-08T23:23:37.328Z" }, - { url = "https://files.pythonhosted.org/packages/e1/5e/b666bacbbc60fbf415ba9988324a132c9a7a0448a9a8f125074671c0f2c3/cffi-2.0.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:6c6c373cfc5c83a975506110d17457138c8c63016b563cc9ed6e056a82f13ce4", size = 223437, upload-time = "2025-09-08T23:23:38.945Z" }, - { url = "https://files.pythonhosted.org/packages/a0/1d/ec1a60bd1a10daa292d3cd6bb0b359a81607154fb8165f3ec95fe003b85c/cffi-2.0.0-cp314-cp314t-win32.whl", hash = "sha256:1fc9ea04857caf665289b7a75923f2c6ed559b8298a1b8c49e59f7dd95c8481e", size = 180487, upload-time = "2025-09-08T23:23:40.423Z" }, - { url = "https://files.pythonhosted.org/packages/bf/41/4c1168c74fac325c0c8156f04b6749c8b6a8f405bbf91413ba088359f60d/cffi-2.0.0-cp314-cp314t-win_amd64.whl", hash = "sha256:d68b6cef7827e8641e8ef16f4494edda8b36104d79773a334beaa1e3521430f6", size = 191726, upload-time = "2025-09-08T23:23:41.742Z" }, - { url = "https://files.pythonhosted.org/packages/ae/3a/dbeec9d1ee0844c679f6bb5d6ad4e9f198b1224f4e7a32825f47f6192b0c/cffi-2.0.0-cp314-cp314t-win_arm64.whl", hash = "sha256:0a1527a803f0a659de1af2e1fd700213caba79377e27e4693648c2923da066f9", size = 184195, upload-time = "2025-09-08T23:23:43.004Z" }, -] - -[[package]] -name = "charset-normalizer" -version = "3.4.5" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/1d/35/02daf95b9cd686320bb622eb148792655c9412dbb9b67abb5694e5910a24/charset_normalizer-3.4.5.tar.gz", hash = "sha256:95adae7b6c42a6c5b5b559b1a99149f090a57128155daeea91732c8d970d8644", size = 134804, upload-time = "2026-03-06T06:03:19.46Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/9c/b6/9ee9c1a608916ca5feae81a344dffbaa53b26b90be58cc2159e3332d44ec/charset_normalizer-3.4.5-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:ed97c282ee4f994ef814042423a529df9497e3c666dca19be1d4cd1129dc7ade", size = 280976, upload-time = "2026-03-06T06:01:15.276Z" }, - { url = "https://files.pythonhosted.org/packages/f8/d8/a54f7c0b96f1df3563e9190f04daf981e365a9b397eedfdfb5dbef7e5c6c/charset_normalizer-3.4.5-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0294916d6ccf2d069727d65973c3a1ca477d68708db25fd758dd28b0827cff54", size = 189356, upload-time = "2026-03-06T06:01:16.511Z" }, - { url = "https://files.pythonhosted.org/packages/42/69/2bf7f76ce1446759a5787cb87d38f6a61eb47dbbdf035cfebf6347292a65/charset_normalizer-3.4.5-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:dc57a0baa3eeedd99fafaef7511b5a6ef4581494e8168ee086031744e2679467", size = 206369, upload-time = "2026-03-06T06:01:17.853Z" }, - { url = "https://files.pythonhosted.org/packages/10/9c/949d1a46dab56b959d9a87272482195f1840b515a3380e39986989a893ae/charset_normalizer-3.4.5-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:ed1a9a204f317ef879b32f9af507d47e49cd5e7f8e8d5d96358c98373314fc60", size = 203285, upload-time = "2026-03-06T06:01:19.473Z" }, - { url = "https://files.pythonhosted.org/packages/67/5c/ae30362a88b4da237d71ea214a8c7eb915db3eec941adda511729ac25fa2/charset_normalizer-3.4.5-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7ad83b8f9379176c841f8865884f3514d905bcd2a9a3b210eaa446e7d2223e4d", size = 196274, upload-time = "2026-03-06T06:01:20.728Z" }, - { url = "https://files.pythonhosted.org/packages/b2/07/c9f2cb0e46cb6d64fdcc4f95953747b843bb2181bda678dc4e699b8f0f9a/charset_normalizer-3.4.5-cp312-cp312-manylinux_2_31_armv7l.whl", hash = "sha256:a118e2e0b5ae6b0120d5efa5f866e58f2bb826067a646431da4d6a2bdae7950e", size = 184715, upload-time = "2026-03-06T06:01:22.194Z" }, - { url = "https://files.pythonhosted.org/packages/36/64/6b0ca95c44fddf692cd06d642b28f63009d0ce325fad6e9b2b4d0ef86a52/charset_normalizer-3.4.5-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:754f96058e61a5e22e91483f823e07df16416ce76afa4ebf306f8e1d1296d43f", size = 193426, upload-time = "2026-03-06T06:01:23.795Z" }, - { url = "https://files.pythonhosted.org/packages/50/bc/a730690d726403743795ca3f5bb2baf67838c5fea78236098f324b965e40/charset_normalizer-3.4.5-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:0c300cefd9b0970381a46394902cd18eaf2aa00163f999590ace991989dcd0fc", size = 191780, upload-time = "2026-03-06T06:01:25.053Z" }, - { url = "https://files.pythonhosted.org/packages/97/4f/6c0bc9af68222b22951552d73df4532b5be6447cee32d58e7e8c74ecbb7b/charset_normalizer-3.4.5-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:c108f8619e504140569ee7de3f97d234f0fbae338a7f9f360455071ef9855a95", size = 185805, upload-time = "2026-03-06T06:01:26.294Z" }, - { url = "https://files.pythonhosted.org/packages/dd/b9/a523fb9b0ee90814b503452b2600e4cbc118cd68714d57041564886e7325/charset_normalizer-3.4.5-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:d1028de43596a315e2720a9849ee79007ab742c06ad8b45a50db8cdb7ed4a82a", size = 208342, upload-time = "2026-03-06T06:01:27.55Z" }, - { url = "https://files.pythonhosted.org/packages/4d/61/c59e761dee4464050713e50e27b58266cc8e209e518c0b378c1580c959ba/charset_normalizer-3.4.5-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:19092dde50335accf365cce21998a1c6dd8eafd42c7b226eb54b2747cdce2fac", size = 193661, upload-time = "2026-03-06T06:01:29.051Z" }, - { url = "https://files.pythonhosted.org/packages/1c/43/729fa30aad69783f755c5ad8649da17ee095311ca42024742701e202dc59/charset_normalizer-3.4.5-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:4354e401eb6dab9aed3c7b4030514328a6c748d05e1c3e19175008ca7de84fb1", size = 204819, upload-time = "2026-03-06T06:01:30.298Z" }, - { url = "https://files.pythonhosted.org/packages/87/33/d9b442ce5a91b96fc0840455a9e49a611bbadae6122778d0a6a79683dd31/charset_normalizer-3.4.5-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a68766a3c58fde7f9aaa22b3786276f62ab2f594efb02d0a1421b6282e852e98", size = 198080, upload-time = "2026-03-06T06:01:31.478Z" }, - { url = "https://files.pythonhosted.org/packages/56/5a/b8b5a23134978ee9885cee2d6995f4c27cc41f9baded0a9685eabc5338f0/charset_normalizer-3.4.5-cp312-cp312-win32.whl", hash = "sha256:1827734a5b308b65ac54e86a618de66f935a4f63a8a462ff1e19a6788d6c2262", size = 132630, upload-time = "2026-03-06T06:01:33.056Z" }, - { url = "https://files.pythonhosted.org/packages/70/53/e44a4c07e8904500aec95865dc3f6464dc3586a039ef0df606eb3ac38e35/charset_normalizer-3.4.5-cp312-cp312-win_amd64.whl", hash = "sha256:728c6a963dfab66ef865f49286e45239384249672cd598576765acc2a640a636", size = 142856, upload-time = "2026-03-06T06:01:34.489Z" }, - { url = "https://files.pythonhosted.org/packages/ea/aa/c5628f7cad591b1cf45790b7a61483c3e36cf41349c98af7813c483fd6e8/charset_normalizer-3.4.5-cp312-cp312-win_arm64.whl", hash = "sha256:75dfd1afe0b1647449e852f4fb428195a7ed0588947218f7ba929f6538487f02", size = 132982, upload-time = "2026-03-06T06:01:35.641Z" }, - { url = "https://files.pythonhosted.org/packages/f5/48/9f34ec4bb24aa3fdba1890c1bddb97c8a4be1bd84ef5c42ac2352563ad05/charset_normalizer-3.4.5-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ac59c15e3f1465f722607800c68713f9fbc2f672b9eb649fe831da4019ae9b23", size = 280788, upload-time = "2026-03-06T06:01:37.126Z" }, - { url = "https://files.pythonhosted.org/packages/0e/09/6003e7ffeb90cc0560da893e3208396a44c210c5ee42efff539639def59b/charset_normalizer-3.4.5-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:165c7b21d19365464e8f70e5ce5e12524c58b48c78c1f5a57524603c1ab003f8", size = 188890, upload-time = "2026-03-06T06:01:38.73Z" }, - { url = "https://files.pythonhosted.org/packages/42/1e/02706edf19e390680daa694d17e2b8eab4b5f7ac285e2a51168b4b22ee6b/charset_normalizer-3.4.5-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:28269983f25a4da0425743d0d257a2d6921ea7d9b83599d4039486ec5b9f911d", size = 206136, upload-time = "2026-03-06T06:01:40.016Z" }, - { url = "https://files.pythonhosted.org/packages/c7/87/942c3def1b37baf3cf786bad01249190f3ca3d5e63a84f831e704977de1f/charset_normalizer-3.4.5-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d27ce22ec453564770d29d03a9506d449efbb9fa13c00842262b2f6801c48cce", size = 202551, upload-time = "2026-03-06T06:01:41.522Z" }, - { url = "https://files.pythonhosted.org/packages/94/0a/af49691938dfe175d71b8a929bd7e4ace2809c0c5134e28bc535660d5262/charset_normalizer-3.4.5-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0625665e4ebdddb553ab185de5db7054393af8879fb0c87bd5690d14379d6819", size = 195572, upload-time = "2026-03-06T06:01:43.208Z" }, - { url = "https://files.pythonhosted.org/packages/20/ea/dfb1792a8050a8e694cfbde1570ff97ff74e48afd874152d38163d1df9ae/charset_normalizer-3.4.5-cp313-cp313-manylinux_2_31_armv7l.whl", hash = "sha256:c23eb3263356d94858655b3e63f85ac5d50970c6e8febcdde7830209139cc37d", size = 184438, upload-time = "2026-03-06T06:01:44.755Z" }, - { url = "https://files.pythonhosted.org/packages/72/12/c281e2067466e3ddd0595bfaea58a6946765ace5c72dfa3edc2f5f118026/charset_normalizer-3.4.5-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e6302ca4ae283deb0af68d2fbf467474b8b6aedcd3dab4db187e07f94c109763", size = 193035, upload-time = "2026-03-06T06:01:46.051Z" }, - { url = "https://files.pythonhosted.org/packages/ba/4f/3792c056e7708e10464bad0438a44708886fb8f92e3c3d29ec5e2d964d42/charset_normalizer-3.4.5-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e51ae7d81c825761d941962450f50d041db028b7278e7b08930b4541b3e45cb9", size = 191340, upload-time = "2026-03-06T06:01:47.547Z" }, - { url = "https://files.pythonhosted.org/packages/e7/86/80ddba897127b5c7a9bccc481b0cd36c8fefa485d113262f0fe4332f0bf4/charset_normalizer-3.4.5-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:597d10dec876923e5c59e48dbd366e852eacb2b806029491d307daea6b917d7c", size = 185464, upload-time = "2026-03-06T06:01:48.764Z" }, - { url = "https://files.pythonhosted.org/packages/4d/00/b5eff85ba198faacab83e0e4b6f0648155f072278e3b392a82478f8b988b/charset_normalizer-3.4.5-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:5cffde4032a197bd3b42fd0b9509ec60fb70918d6970e4cc773f20fc9180ca67", size = 208014, upload-time = "2026-03-06T06:01:50.371Z" }, - { url = "https://files.pythonhosted.org/packages/c8/11/d36f70be01597fd30850dde8a1269ebc8efadd23ba5785808454f2389bde/charset_normalizer-3.4.5-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:2da4eedcb6338e2321e831a0165759c0c620e37f8cd044a263ff67493be8ffb3", size = 193297, upload-time = "2026-03-06T06:01:51.933Z" }, - { url = "https://files.pythonhosted.org/packages/1a/1d/259eb0a53d4910536c7c2abb9cb25f4153548efb42800c6a9456764649c0/charset_normalizer-3.4.5-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:65a126fb4b070d05340a84fc709dd9e7c75d9b063b610ece8a60197a291d0adf", size = 204321, upload-time = "2026-03-06T06:01:53.887Z" }, - { url = "https://files.pythonhosted.org/packages/84/31/faa6c5b9d3688715e1ed1bb9d124c384fe2fc1633a409e503ffe1c6398c1/charset_normalizer-3.4.5-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:c7a80a9242963416bd81f99349d5f3fce1843c303bd404f204918b6d75a75fd6", size = 197509, upload-time = "2026-03-06T06:01:56.439Z" }, - { url = "https://files.pythonhosted.org/packages/fd/a5/c7d9dd1503ffc08950b3260f5d39ec2366dd08254f0900ecbcf3a6197c7c/charset_normalizer-3.4.5-cp313-cp313-win32.whl", hash = "sha256:f1d725b754e967e648046f00c4facc42d414840f5ccc670c5670f59f83693e4f", size = 132284, upload-time = "2026-03-06T06:01:57.812Z" }, - { url = "https://files.pythonhosted.org/packages/b9/0f/57072b253af40c8aa6636e6de7d75985624c1eb392815b2f934199340a89/charset_normalizer-3.4.5-cp313-cp313-win_amd64.whl", hash = "sha256:e37bd100d2c5d3ba35db9c7c5ba5a9228cbcffe5c4778dc824b164e5257813d7", size = 142630, upload-time = "2026-03-06T06:01:59.062Z" }, - { url = "https://files.pythonhosted.org/packages/31/41/1c4b7cc9f13bd9d369ce3bc993e13d374ce25fa38a2663644283ecf422c1/charset_normalizer-3.4.5-cp313-cp313-win_arm64.whl", hash = "sha256:93b3b2cc5cf1b8743660ce77a4f45f3f6d1172068207c1defc779a36eea6bb36", size = 133254, upload-time = "2026-03-06T06:02:00.281Z" }, - { url = "https://files.pythonhosted.org/packages/43/be/0f0fd9bb4a7fa4fb5067fb7d9ac693d4e928d306f80a0d02bde43a7c4aee/charset_normalizer-3.4.5-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:8197abe5ca1ffb7d91e78360f915eef5addff270f8a71c1fc5be24a56f3e4873", size = 280232, upload-time = "2026-03-06T06:02:01.508Z" }, - { url = "https://files.pythonhosted.org/packages/28/02/983b5445e4bef49cd8c9da73a8e029f0825f39b74a06d201bfaa2e55142a/charset_normalizer-3.4.5-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a2aecdb364b8a1802afdc7f9327d55dad5366bc97d8502d0f5854e50712dbc5f", size = 189688, upload-time = "2026-03-06T06:02:02.857Z" }, - { url = "https://files.pythonhosted.org/packages/d0/88/152745c5166437687028027dc080e2daed6fe11cfa95a22f4602591c42db/charset_normalizer-3.4.5-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a66aa5022bf81ab4b1bebfb009db4fd68e0c6d4307a1ce5ef6a26e5878dfc9e4", size = 206833, upload-time = "2026-03-06T06:02:05.127Z" }, - { url = "https://files.pythonhosted.org/packages/cb/0f/ebc15c8b02af2f19be9678d6eed115feeeccc45ce1f4b098d986c13e8769/charset_normalizer-3.4.5-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d77f97e515688bd615c1d1f795d540f32542d514242067adcb8ef532504cb9ee", size = 202879, upload-time = "2026-03-06T06:02:06.446Z" }, - { url = "https://files.pythonhosted.org/packages/38/9c/71336bff6934418dc8d1e8a1644176ac9088068bc571da612767619c97b3/charset_normalizer-3.4.5-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:01a1ed54b953303ca7e310fafe0fe347aab348bd81834a0bcd602eb538f89d66", size = 195764, upload-time = "2026-03-06T06:02:08.763Z" }, - { url = "https://files.pythonhosted.org/packages/b7/95/ce92fde4f98615661871bc282a856cf9b8a15f686ba0af012984660d480b/charset_normalizer-3.4.5-cp314-cp314-manylinux_2_31_armv7l.whl", hash = "sha256:b2d37d78297b39a9eb9eb92c0f6df98c706467282055419df141389b23f93362", size = 183728, upload-time = "2026-03-06T06:02:10.137Z" }, - { url = "https://files.pythonhosted.org/packages/1c/e7/f5b4588d94e747ce45ae680f0f242bc2d98dbd4eccfab73e6160b6893893/charset_normalizer-3.4.5-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e71bbb595973622b817c042bd943c3f3667e9c9983ce3d205f973f486fec98a7", size = 192937, upload-time = "2026-03-06T06:02:11.663Z" }, - { url = "https://files.pythonhosted.org/packages/f9/29/9d94ed6b929bf9f48bf6ede6e7474576499f07c4c5e878fb186083622716/charset_normalizer-3.4.5-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:4cd966c2559f501c6fd69294d082c2934c8dd4719deb32c22961a5ac6db0df1d", size = 192040, upload-time = "2026-03-06T06:02:13.489Z" }, - { url = "https://files.pythonhosted.org/packages/15/d2/1a093a1cf827957f9445f2fe7298bcc16f8fc5e05c1ed2ad1af0b239035e/charset_normalizer-3.4.5-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:d5e52d127045d6ae01a1e821acfad2f3a1866c54d0e837828538fabe8d9d1bd6", size = 184107, upload-time = "2026-03-06T06:02:14.83Z" }, - { url = "https://files.pythonhosted.org/packages/0f/7d/82068ce16bd36135df7b97f6333c5d808b94e01d4599a682e2337ed5fd14/charset_normalizer-3.4.5-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:30a2b1a48478c3428d047ed9690d57c23038dac838a87ad624c85c0a78ebeb39", size = 208310, upload-time = "2026-03-06T06:02:16.165Z" }, - { url = "https://files.pythonhosted.org/packages/84/4e/4dfb52307bb6af4a5c9e73e482d171b81d36f522b21ccd28a49656baa680/charset_normalizer-3.4.5-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:d8ed79b8f6372ca4254955005830fd61c1ccdd8c0fac6603e2c145c61dd95db6", size = 192918, upload-time = "2026-03-06T06:02:18.144Z" }, - { url = "https://files.pythonhosted.org/packages/08/a4/159ff7da662cf7201502ca89980b8f06acf3e887b278956646a8aeb178ab/charset_normalizer-3.4.5-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:c5af897b45fa606b12464ccbe0014bbf8c09191e0a66aab6aa9d5cf6e77e0c94", size = 204615, upload-time = "2026-03-06T06:02:19.821Z" }, - { url = "https://files.pythonhosted.org/packages/d6/62/0dd6172203cb6b429ffffc9935001fde42e5250d57f07b0c28c6046deb6b/charset_normalizer-3.4.5-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:1088345bcc93c58d8d8f3d783eca4a6e7a7752bbff26c3eee7e73c597c191c2e", size = 197784, upload-time = "2026-03-06T06:02:21.86Z" }, - { url = "https://files.pythonhosted.org/packages/c7/5e/1aab5cb737039b9c59e63627dc8bbc0d02562a14f831cc450e5f91d84ce1/charset_normalizer-3.4.5-cp314-cp314-win32.whl", hash = "sha256:ee57b926940ba00bca7ba7041e665cc956e55ef482f851b9b65acb20d867e7a2", size = 133009, upload-time = "2026-03-06T06:02:23.289Z" }, - { url = "https://files.pythonhosted.org/packages/40/65/e7c6c77d7aaa4c0d7974f2e403e17f0ed2cb0fc135f77d686b916bf1eead/charset_normalizer-3.4.5-cp314-cp314-win_amd64.whl", hash = "sha256:4481e6da1830c8a1cc0b746b47f603b653dadb690bcd851d039ffaefe70533aa", size = 143511, upload-time = "2026-03-06T06:02:26.195Z" }, - { url = "https://files.pythonhosted.org/packages/ba/91/52b0841c71f152f563b8e072896c14e3d83b195c188b338d3cc2e582d1d4/charset_normalizer-3.4.5-cp314-cp314-win_arm64.whl", hash = "sha256:97ab7787092eb9b50fb47fa04f24c75b768a606af1bcba1957f07f128a7219e4", size = 133775, upload-time = "2026-03-06T06:02:27.473Z" }, - { url = "https://files.pythonhosted.org/packages/c5/60/3a621758945513adfd4db86827a5bafcc615f913dbd0b4c2ed64a65731be/charset_normalizer-3.4.5-py3-none-any.whl", hash = "sha256:9db5e3fcdcee89a78c04dffb3fe33c79f77bd741a624946db2591c81b2fc85b0", size = 55455, upload-time = "2026-03-06T06:03:17.827Z" }, -] - -[[package]] -name = "click" -version = "8.3.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "colorama", marker = "sys_platform == 'win32'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/3d/fa/656b739db8587d7b5dfa22e22ed02566950fbfbcdc20311993483657a5c0/click-8.3.1.tar.gz", hash = "sha256:12ff4785d337a1bb490bb7e9c2b1ee5da3112e94a8622f26a6c77f5d2fc6842a", size = 295065, upload-time = "2025-11-15T20:45:42.706Z" } -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 = "colorama" -version = "0.4.6" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697, upload-time = "2022-10-25T02:36:22.414Z" } -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 = "colorlog" -version = "6.10.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "colorama", marker = "sys_platform == 'win32'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/a2/61/f083b5ac52e505dfc1c624eafbf8c7589a0d7f32daa398d2e7590efa5fda/colorlog-6.10.1.tar.gz", hash = "sha256:eb4ae5cb65fe7fec7773c2306061a8e63e02efc2c72eba9d27b0fa23c94f1321", size = 17162, upload-time = "2025-10-16T16:14:11.978Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/6d/c1/e419ef3723a074172b68aaa89c9f3de486ed4c2399e2dbd8113a4fdcaf9e/colorlog-6.10.1-py3-none-any.whl", hash = "sha256:2d7e8348291948af66122cff006c9f8da6255d224e7cf8e37d8de2df3bad8c9c", size = 11743, upload-time = "2025-10-16T16:14:10.512Z" }, -] - -[[package]] -name = "cryptography" -version = "46.0.5" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "cffi", marker = "platform_python_implementation != 'PyPy'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/60/04/ee2a9e8542e4fa2773b81771ff8349ff19cdd56b7258a0cc442639052edb/cryptography-46.0.5.tar.gz", hash = "sha256:abace499247268e3757271b2f1e244b36b06f8515cf27c4d49468fc9eb16e93d", size = 750064, upload-time = "2026-02-10T19:18:38.255Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/f7/81/b0bb27f2ba931a65409c6b8a8b358a7f03c0e46eceacddff55f7c84b1f3b/cryptography-46.0.5-cp311-abi3-macosx_10_9_universal2.whl", hash = "sha256:351695ada9ea9618b3500b490ad54c739860883df6c1f555e088eaf25b1bbaad", size = 7176289, upload-time = "2026-02-10T19:17:08.274Z" }, - { url = "https://files.pythonhosted.org/packages/ff/9e/6b4397a3e3d15123de3b1806ef342522393d50736c13b20ec4c9ea6693a6/cryptography-46.0.5-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:c18ff11e86df2e28854939acde2d003f7984f721eba450b56a200ad90eeb0e6b", size = 4275637, upload-time = "2026-02-10T19:17:10.53Z" }, - { url = "https://files.pythonhosted.org/packages/63/e7/471ab61099a3920b0c77852ea3f0ea611c9702f651600397ac567848b897/cryptography-46.0.5-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:4d7e3d356b8cd4ea5aff04f129d5f66ebdc7b6f8eae802b93739ed520c47c79b", size = 4424742, upload-time = "2026-02-10T19:17:12.388Z" }, - { url = "https://files.pythonhosted.org/packages/37/53/a18500f270342d66bf7e4d9f091114e31e5ee9e7375a5aba2e85a91e0044/cryptography-46.0.5-cp311-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:50bfb6925eff619c9c023b967d5b77a54e04256c4281b0e21336a130cd7fc263", size = 4277528, upload-time = "2026-02-10T19:17:13.853Z" }, - { url = "https://files.pythonhosted.org/packages/22/29/c2e812ebc38c57b40e7c583895e73c8c5adb4d1e4a0cc4c5a4fdab2b1acc/cryptography-46.0.5-cp311-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:803812e111e75d1aa73690d2facc295eaefd4439be1023fefc4995eaea2af90d", size = 4947993, upload-time = "2026-02-10T19:17:15.618Z" }, - { url = "https://files.pythonhosted.org/packages/6b/e7/237155ae19a9023de7e30ec64e5d99a9431a567407ac21170a046d22a5a3/cryptography-46.0.5-cp311-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:3ee190460e2fbe447175cda91b88b84ae8322a104fc27766ad09428754a618ed", size = 4456855, upload-time = "2026-02-10T19:17:17.221Z" }, - { url = "https://files.pythonhosted.org/packages/2d/87/fc628a7ad85b81206738abbd213b07702bcbdada1dd43f72236ef3cffbb5/cryptography-46.0.5-cp311-abi3-manylinux_2_31_armv7l.whl", hash = "sha256:f145bba11b878005c496e93e257c1e88f154d278d2638e6450d17e0f31e558d2", size = 3984635, upload-time = "2026-02-10T19:17:18.792Z" }, - { url = "https://files.pythonhosted.org/packages/84/29/65b55622bde135aedf4565dc509d99b560ee4095e56989e815f8fd2aa910/cryptography-46.0.5-cp311-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:e9251e3be159d1020c4030bd2e5f84d6a43fe54b6c19c12f51cde9542a2817b2", size = 4277038, upload-time = "2026-02-10T19:17:20.256Z" }, - { url = "https://files.pythonhosted.org/packages/bc/36/45e76c68d7311432741faf1fbf7fac8a196a0a735ca21f504c75d37e2558/cryptography-46.0.5-cp311-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:47fb8a66058b80e509c47118ef8a75d14c455e81ac369050f20ba0d23e77fee0", size = 4912181, upload-time = "2026-02-10T19:17:21.825Z" }, - { url = "https://files.pythonhosted.org/packages/6d/1a/c1ba8fead184d6e3d5afcf03d569acac5ad063f3ac9fb7258af158f7e378/cryptography-46.0.5-cp311-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:4c3341037c136030cb46e4b1e17b7418ea4cbd9dd207e4a6f3b2b24e0d4ac731", size = 4456482, upload-time = "2026-02-10T19:17:25.133Z" }, - { url = "https://files.pythonhosted.org/packages/f9/e5/3fb22e37f66827ced3b902cf895e6a6bc1d095b5b26be26bd13c441fdf19/cryptography-46.0.5-cp311-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:890bcb4abd5a2d3f852196437129eb3667d62630333aacc13dfd470fad3aaa82", size = 4405497, upload-time = "2026-02-10T19:17:26.66Z" }, - { url = "https://files.pythonhosted.org/packages/1a/df/9d58bb32b1121a8a2f27383fabae4d63080c7ca60b9b5c88be742be04ee7/cryptography-46.0.5-cp311-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:80a8d7bfdf38f87ca30a5391c0c9ce4ed2926918e017c29ddf643d0ed2778ea1", size = 4667819, upload-time = "2026-02-10T19:17:28.569Z" }, - { url = "https://files.pythonhosted.org/packages/ea/ed/325d2a490c5e94038cdb0117da9397ece1f11201f425c4e9c57fe5b9f08b/cryptography-46.0.5-cp311-abi3-win32.whl", hash = "sha256:60ee7e19e95104d4c03871d7d7dfb3d22ef8a9b9c6778c94e1c8fcc8365afd48", size = 3028230, upload-time = "2026-02-10T19:17:30.518Z" }, - { url = "https://files.pythonhosted.org/packages/e9/5a/ac0f49e48063ab4255d9e3b79f5def51697fce1a95ea1370f03dc9db76f6/cryptography-46.0.5-cp311-abi3-win_amd64.whl", hash = "sha256:38946c54b16c885c72c4f59846be9743d699eee2b69b6988e0a00a01f46a61a4", size = 3480909, upload-time = "2026-02-10T19:17:32.083Z" }, - { url = "https://files.pythonhosted.org/packages/00/13/3d278bfa7a15a96b9dc22db5a12ad1e48a9eb3d40e1827ef66a5df75d0d0/cryptography-46.0.5-cp314-cp314t-macosx_10_9_universal2.whl", hash = "sha256:94a76daa32eb78d61339aff7952ea819b1734b46f73646a07decb40e5b3448e2", size = 7119287, upload-time = "2026-02-10T19:17:33.801Z" }, - { url = "https://files.pythonhosted.org/packages/67/c8/581a6702e14f0898a0848105cbefd20c058099e2c2d22ef4e476dfec75d7/cryptography-46.0.5-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:5be7bf2fb40769e05739dd0046e7b26f9d4670badc7b032d6ce4db64dddc0678", size = 4265728, upload-time = "2026-02-10T19:17:35.569Z" }, - { url = "https://files.pythonhosted.org/packages/dd/4a/ba1a65ce8fc65435e5a849558379896c957870dd64fecea97b1ad5f46a37/cryptography-46.0.5-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:fe346b143ff9685e40192a4960938545c699054ba11d4f9029f94751e3f71d87", size = 4408287, upload-time = "2026-02-10T19:17:36.938Z" }, - { url = "https://files.pythonhosted.org/packages/f8/67/8ffdbf7b65ed1ac224d1c2df3943553766914a8ca718747ee3871da6107e/cryptography-46.0.5-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:c69fd885df7d089548a42d5ec05be26050ebcd2283d89b3d30676eb32ff87dee", size = 4270291, upload-time = "2026-02-10T19:17:38.748Z" }, - { url = "https://files.pythonhosted.org/packages/f8/e5/f52377ee93bc2f2bba55a41a886fd208c15276ffbd2569f2ddc89d50e2c5/cryptography-46.0.5-cp314-cp314t-manylinux_2_28_ppc64le.whl", hash = "sha256:8293f3dea7fc929ef7240796ba231413afa7b68ce38fd21da2995549f5961981", size = 4927539, upload-time = "2026-02-10T19:17:40.241Z" }, - { url = "https://files.pythonhosted.org/packages/3b/02/cfe39181b02419bbbbcf3abdd16c1c5c8541f03ca8bda240debc467d5a12/cryptography-46.0.5-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:1abfdb89b41c3be0365328a410baa9df3ff8a9110fb75e7b52e66803ddabc9a9", size = 4442199, upload-time = "2026-02-10T19:17:41.789Z" }, - { url = "https://files.pythonhosted.org/packages/c0/96/2fcaeb4873e536cf71421a388a6c11b5bc846e986b2b069c79363dc1648e/cryptography-46.0.5-cp314-cp314t-manylinux_2_31_armv7l.whl", hash = "sha256:d66e421495fdb797610a08f43b05269e0a5ea7f5e652a89bfd5a7d3c1dee3648", size = 3960131, upload-time = "2026-02-10T19:17:43.379Z" }, - { url = "https://files.pythonhosted.org/packages/d8/d2/b27631f401ddd644e94c5cf33c9a4069f72011821cf3dc7309546b0642a0/cryptography-46.0.5-cp314-cp314t-manylinux_2_34_aarch64.whl", hash = "sha256:4e817a8920bfbcff8940ecfd60f23d01836408242b30f1a708d93198393a80b4", size = 4270072, upload-time = "2026-02-10T19:17:45.481Z" }, - { url = "https://files.pythonhosted.org/packages/f4/a7/60d32b0370dae0b4ebe55ffa10e8599a2a59935b5ece1b9f06edb73abdeb/cryptography-46.0.5-cp314-cp314t-manylinux_2_34_ppc64le.whl", hash = "sha256:68f68d13f2e1cb95163fa3b4db4bf9a159a418f5f6e7242564fc75fcae667fd0", size = 4892170, upload-time = "2026-02-10T19:17:46.997Z" }, - { url = "https://files.pythonhosted.org/packages/d2/b9/cf73ddf8ef1164330eb0b199a589103c363afa0cf794218c24d524a58eab/cryptography-46.0.5-cp314-cp314t-manylinux_2_34_x86_64.whl", hash = "sha256:a3d1fae9863299076f05cb8a778c467578262fae09f9dc0ee9b12eb4268ce663", size = 4441741, upload-time = "2026-02-10T19:17:48.661Z" }, - { url = "https://files.pythonhosted.org/packages/5f/eb/eee00b28c84c726fe8fa0158c65afe312d9c3b78d9d01daf700f1f6e37ff/cryptography-46.0.5-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:c4143987a42a2397f2fc3b4d7e3a7d313fbe684f67ff443999e803dd75a76826", size = 4396728, upload-time = "2026-02-10T19:17:50.058Z" }, - { url = "https://files.pythonhosted.org/packages/65/f4/6bc1a9ed5aef7145045114b75b77c2a8261b4d38717bd8dea111a63c3442/cryptography-46.0.5-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:7d731d4b107030987fd61a7f8ab512b25b53cef8f233a97379ede116f30eb67d", size = 4652001, upload-time = "2026-02-10T19:17:51.54Z" }, - { url = "https://files.pythonhosted.org/packages/86/ef/5d00ef966ddd71ac2e6951d278884a84a40ffbd88948ef0e294b214ae9e4/cryptography-46.0.5-cp314-cp314t-win32.whl", hash = "sha256:c3bcce8521d785d510b2aad26ae2c966092b7daa8f45dd8f44734a104dc0bc1a", size = 3003637, upload-time = "2026-02-10T19:17:52.997Z" }, - { url = "https://files.pythonhosted.org/packages/b7/57/f3f4160123da6d098db78350fdfd9705057aad21de7388eacb2401dceab9/cryptography-46.0.5-cp314-cp314t-win_amd64.whl", hash = "sha256:4d8ae8659ab18c65ced284993c2265910f6c9e650189d4e3f68445ef82a810e4", size = 3469487, upload-time = "2026-02-10T19:17:54.549Z" }, - { url = "https://files.pythonhosted.org/packages/e2/fa/a66aa722105ad6a458bebd64086ca2b72cdd361fed31763d20390f6f1389/cryptography-46.0.5-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:4108d4c09fbbf2789d0c926eb4152ae1760d5a2d97612b92d508d96c861e4d31", size = 7170514, upload-time = "2026-02-10T19:17:56.267Z" }, - { url = "https://files.pythonhosted.org/packages/0f/04/c85bdeab78c8bc77b701bf0d9bdcf514c044e18a46dcff330df5448631b0/cryptography-46.0.5-cp38-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7d1f30a86d2757199cb2d56e48cce14deddf1f9c95f1ef1b64ee91ea43fe2e18", size = 4275349, upload-time = "2026-02-10T19:17:58.419Z" }, - { url = "https://files.pythonhosted.org/packages/5c/32/9b87132a2f91ee7f5223b091dc963055503e9b442c98fc0b8a5ca765fab0/cryptography-46.0.5-cp38-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:039917b0dc418bb9f6edce8a906572d69e74bd330b0b3fea4f79dab7f8ddd235", size = 4420667, upload-time = "2026-02-10T19:18:00.619Z" }, - { url = "https://files.pythonhosted.org/packages/a1/a6/a7cb7010bec4b7c5692ca6f024150371b295ee1c108bdc1c400e4c44562b/cryptography-46.0.5-cp38-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:ba2a27ff02f48193fc4daeadf8ad2590516fa3d0adeeb34336b96f7fa64c1e3a", size = 4276980, upload-time = "2026-02-10T19:18:02.379Z" }, - { url = "https://files.pythonhosted.org/packages/8e/7c/c4f45e0eeff9b91e3f12dbd0e165fcf2a38847288fcfd889deea99fb7b6d/cryptography-46.0.5-cp38-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:61aa400dce22cb001a98014f647dc21cda08f7915ceb95df0c9eaf84b4b6af76", size = 4939143, upload-time = "2026-02-10T19:18:03.964Z" }, - { url = "https://files.pythonhosted.org/packages/37/19/e1b8f964a834eddb44fa1b9a9976f4e414cbb7aa62809b6760c8803d22d1/cryptography-46.0.5-cp38-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:3ce58ba46e1bc2aac4f7d9290223cead56743fa6ab94a5d53292ffaac6a91614", size = 4453674, upload-time = "2026-02-10T19:18:05.588Z" }, - { url = "https://files.pythonhosted.org/packages/db/ed/db15d3956f65264ca204625597c410d420e26530c4e2943e05a0d2f24d51/cryptography-46.0.5-cp38-abi3-manylinux_2_31_armv7l.whl", hash = "sha256:420d0e909050490d04359e7fdb5ed7e667ca5c3c402b809ae2563d7e66a92229", size = 3978801, upload-time = "2026-02-10T19:18:07.167Z" }, - { url = "https://files.pythonhosted.org/packages/41/e2/df40a31d82df0a70a0daf69791f91dbb70e47644c58581d654879b382d11/cryptography-46.0.5-cp38-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:582f5fcd2afa31622f317f80426a027f30dc792e9c80ffee87b993200ea115f1", size = 4276755, upload-time = "2026-02-10T19:18:09.813Z" }, - { url = "https://files.pythonhosted.org/packages/33/45/726809d1176959f4a896b86907b98ff4391a8aa29c0aaaf9450a8a10630e/cryptography-46.0.5-cp38-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:bfd56bb4b37ed4f330b82402f6f435845a5f5648edf1ad497da51a8452d5d62d", size = 4901539, upload-time = "2026-02-10T19:18:11.263Z" }, - { url = "https://files.pythonhosted.org/packages/99/0f/a3076874e9c88ecb2ecc31382f6e7c21b428ede6f55aafa1aa272613e3cd/cryptography-46.0.5-cp38-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:a3d507bb6a513ca96ba84443226af944b0f7f47dcc9a399d110cd6146481d24c", size = 4452794, upload-time = "2026-02-10T19:18:12.914Z" }, - { url = "https://files.pythonhosted.org/packages/02/ef/ffeb542d3683d24194a38f66ca17c0a4b8bf10631feef44a7ef64e631b1a/cryptography-46.0.5-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:9f16fbdf4da055efb21c22d81b89f155f02ba420558db21288b3d0035bafd5f4", size = 4404160, upload-time = "2026-02-10T19:18:14.375Z" }, - { url = "https://files.pythonhosted.org/packages/96/93/682d2b43c1d5f1406ed048f377c0fc9fc8f7b0447a478d5c65ab3d3a66eb/cryptography-46.0.5-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:ced80795227d70549a411a4ab66e8ce307899fad2220ce5ab2f296e687eacde9", size = 4667123, upload-time = "2026-02-10T19:18:15.886Z" }, - { url = "https://files.pythonhosted.org/packages/45/2d/9c5f2926cb5300a8eefc3f4f0b3f3df39db7f7ce40c8365444c49363cbda/cryptography-46.0.5-cp38-abi3-win32.whl", hash = "sha256:02f547fce831f5096c9a567fd41bc12ca8f11df260959ecc7c3202555cc47a72", size = 3010220, upload-time = "2026-02-10T19:18:17.361Z" }, - { url = "https://files.pythonhosted.org/packages/48/ef/0c2f4a8e31018a986949d34a01115dd057bf536905dca38897bacd21fac3/cryptography-46.0.5-cp38-abi3-win_amd64.whl", hash = "sha256:556e106ee01aa13484ce9b0239bca667be5004efb0aabbed28d353df86445595", size = 3467050, upload-time = "2026-02-10T19:18:18.899Z" }, -] - -[[package]] -name = "cuda-bindings" -version = "12.9.4" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "cuda-pathfinder" }, -] -wheels = [ - { url = "https://files.pythonhosted.org/packages/a9/c1/dabe88f52c3e3760d861401bb994df08f672ec893b8f7592dc91626adcf3/cuda_bindings-12.9.4-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fda147a344e8eaeca0c6ff113d2851ffca8f7dfc0a6c932374ee5c47caa649c8", size = 12151019, upload-time = "2025-10-21T14:51:43.167Z" }, - { url = "https://files.pythonhosted.org/packages/63/56/e465c31dc9111be3441a9ba7df1941fe98f4aa6e71e8788a3fb4534ce24d/cuda_bindings-12.9.4-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:32bdc5a76906be4c61eb98f546a6786c5773a881f3b166486449b5d141e4a39f", size = 11906628, upload-time = "2025-10-21T14:51:49.905Z" }, - { url = "https://files.pythonhosted.org/packages/a3/84/1e6be415e37478070aeeee5884c2022713c1ecc735e6d82d744de0252eee/cuda_bindings-12.9.4-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:56e0043c457a99ac473ddc926fe0dc4046694d99caef633e92601ab52cbe17eb", size = 11925991, upload-time = "2025-10-21T14:51:56.535Z" }, - { url = "https://files.pythonhosted.org/packages/d1/af/6dfd8f2ed90b1d4719bc053ff8940e494640fe4212dc3dd72f383e4992da/cuda_bindings-12.9.4-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8b72ee72a9cc1b531db31eebaaee5c69a8ec3500e32c6933f2d3b15297b53686", size = 11922703, upload-time = "2025-10-21T14:52:03.585Z" }, - { url = "https://files.pythonhosted.org/packages/6c/19/90ac264acc00f6df8a49378eedec9fd2db3061bf9263bf9f39fd3d8377c3/cuda_bindings-12.9.4-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d80bffc357df9988dca279734bc9674c3934a654cab10cadeed27ce17d8635ee", size = 11924658, upload-time = "2025-10-21T14:52:10.411Z" }, -] - -[[package]] -name = "cuda-pathfinder" -version = "1.4.1" -source = { registry = "https://pypi.org/simple" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/07/02/59a5bc738a09def0b49aea0e460bdf97f65206d0d041246147cf6207e69c/cuda_pathfinder-1.4.1-py3-none-any.whl", hash = "sha256:40793006082de88e0950753655e55558a446bed9a7d9d0bcb48b2506d50ed82a", size = 43903, upload-time = "2026-03-06T21:05:24.372Z" }, -] - -[[package]] -name = "datasets" -version = "4.6.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "dill" }, - { name = "filelock" }, - { name = "fsspec", extra = ["http"] }, - { name = "httpx" }, - { name = "huggingface-hub" }, - { name = "multiprocess" }, - { name = "numpy" }, - { name = "packaging" }, - { name = "pandas" }, - { name = "pyarrow" }, - { name = "pyyaml" }, - { name = "requests" }, - { name = "tqdm" }, - { name = "xxhash" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/d7/94/eb81c6fe32e9b6ef92223141b5a553aeff2e9456968424a8533cbe88f476/datasets-4.6.1.tar.gz", hash = "sha256:140ce500bc41939ff6ce995702d66b1f4b2ee7f117bb9b07512fab6804d4070a", size = 593865, upload-time = "2026-02-27T23:26:49.482Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/37/f0/99fe6eb530c7ee9ee1faee48059eb8a6437f80c893a496b98a78864e0fc6/datasets-4.6.1-py3-none-any.whl", hash = "sha256:f53228e6dadc9f837037b1bf3051d7d8c054abbb3eb29f1f022926e08090e0da", size = 520667, upload-time = "2026-02-27T23:26:46.855Z" }, -] - -[[package]] -name = "defusedxml" -version = "0.7.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/0f/d5/c66da9b79e5bdb124974bfe172b4daf3c984ebd9c2a06e2b8a4dc7331c72/defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69", size = 75520, upload-time = "2021-03-08T10:59:26.269Z" } -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 = "dill" -version = "0.4.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/12/80/630b4b88364e9a8c8c5797f4602d0f76ef820909ee32f0bacb9f90654042/dill-0.4.0.tar.gz", hash = "sha256:0633f1d2df477324f53a895b02c901fb961bdbf65a17122586ea7019292cbcf0", size = 186976, upload-time = "2025-04-16T00:41:48.867Z" } -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 = "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 = "docling" -version = "2.77.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "accelerate" }, - { name = "beautifulsoup4" }, - { name = "certifi" }, - { name = "defusedxml" }, - { name = "docling-core", extra = ["chunking"] }, - { name = "docling-ibm-models" }, - { name = "docling-parse" }, - { name = "filetype" }, - { name = "huggingface-hub" }, - { name = "lxml" }, - { name = "marko" }, - { name = "ocrmac", marker = "sys_platform == 'darwin'" }, - { name = "openpyxl" }, - { name = "pandas" }, - { name = "pillow" }, - { name = "pluggy" }, - { name = "polyfactory" }, - { name = "pydantic" }, - { name = "pydantic-settings" }, - { name = "pylatexenc" }, - { name = "pypdfium2" }, - { name = "python-docx" }, - { name = "python-pptx" }, - { name = "rapidocr" }, - { name = "requests" }, - { name = "rtree" }, - { name = "scipy" }, - { name = "tqdm" }, - { name = "typer" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/5e/2c/5fd1ff2666c3e7a75f9bfa058056be10c3495d57c16a9a4fd60b91b47ba8/docling-2.77.0.tar.gz", hash = "sha256:d410e9a4f457951f9da43a2ed2e6103747d60494f5e75ac64c54038d57ef903d", size = 372156, upload-time = "2026-03-06T13:46:44.234Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/6b/08/0330d839d618b79188f8087551662dfbb8efd6fbfd5d33a2511138d98df0/docling-2.77.0-py3-none-any.whl", hash = "sha256:e6f7df5fbd878a47e9c6ce4d1746aada8c4d674c5342345c8992bd19bd07a9ac", size = 400712, upload-time = "2026-03-06T13:46:42.377Z" }, -] - -[[package]] -name = "docling-core" -version = "2.67.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "defusedxml" }, - { name = "jsonref" }, - { name = "jsonschema" }, - { name = "latex2mathml" }, - { name = "pandas" }, - { name = "pillow" }, - { name = "pydantic" }, - { name = "pyyaml" }, - { name = "tabulate" }, - { name = "typer" }, - { name = "typing-extensions" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/cf/fd/ab17be001cd51ce15adcae0ba873263ad144603acb279e0b631affa810a4/docling_core-2.67.1.tar.gz", hash = "sha256:9ab34fbd03e5afedd20c21007d7ac0dc9cf97fdb9eaf87b29fd40da6272958f0", size = 264637, upload-time = "2026-03-05T09:12:02.162Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/d4/06/bb8d1f236a1560003b19ba4b005313a95366d9de852fa4062f1f45753f09/docling_core-2.67.1-py3-none-any.whl", hash = "sha256:8e47dd13eef1ca2ce6585e042aabc4b13a51f5c25f6137fc4a7075300ec4c24f", size = 245613, upload-time = "2026-03-05T09:12:00.599Z" }, -] - -[package.optional-dependencies] -chunking = [ - { name = "semchunk" }, - { name = "transformers" }, - { name = "tree-sitter" }, - { name = "tree-sitter-c" }, - { name = "tree-sitter-javascript" }, - { name = "tree-sitter-python" }, - { name = "tree-sitter-typescript" }, -] - -[[package]] -name = "docling-ibm-models" -version = "3.11.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "accelerate" }, - { name = "docling-core" }, - { name = "huggingface-hub" }, - { name = "jsonlines" }, - { name = "numpy" }, - { name = "pillow" }, - { name = "pydantic" }, - { name = "rtree" }, - { name = "safetensors", extra = ["torch"] }, - { name = "torch" }, - { name = "torchvision" }, - { name = "tqdm" }, - { name = "transformers" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/b6/91/f883e0a2b3466e1126dfd4463f386c70f5b90d271c27b6f5a97d2f8312e6/docling_ibm_models-3.11.0.tar.gz", hash = "sha256:454401563a8e79cb33b718bc559d9bacca8a0183583e48f8e616c9184c1f5eb1", size = 87721, upload-time = "2026-01-23T12:29:35.384Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ef/5d/97e9c2e10fbd3ee1723ac82c335f8211a9633c0397cc11ed057c3ba4006e/docling_ibm_models-3.11.0-py3-none-any.whl", hash = "sha256:68f7961069d643bfdab21b1c9ef24a979db293496f4c2283d95b1025a9ac5347", size = 87352, upload-time = "2026-01-23T12:29:34.045Z" }, -] - -[[package]] -name = "docling-parse" -version = "5.5.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "docling-core" }, - { name = "pillow" }, - { name = "pydantic" }, - { name = "pywin32", marker = "sys_platform == 'win32'" }, - { name = "tabulate" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/e6/94/68453bf4136e82f7c94168f0332466822cdb5f226c8a0e1335de21c595ed/docling_parse-5.5.0.tar.gz", hash = "sha256:0914c7174f8fe497d406f4814a70cdfccb4e09d8b2ba90a6e92d02704f5a4a65", size = 57526362, upload-time = "2026-03-04T10:27:44.689Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/6a/f5/7fbebe472f2964be18527e6728a3d8e618b6272b9555a08f38f9e7912515/docling_parse-5.5.0-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:75521736460264dc77ee54b2f5bb96fa2607983ba97c99a06e3f4a4d534dbf53", size = 7795798, upload-time = "2026-03-04T10:27:23.044Z" }, - { url = "https://files.pythonhosted.org/packages/78/43/c4443f5f88e892a6337165c541cc348e3c4ecf29fa04781e144cde56064b/docling_parse-5.5.0-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0a464610e170c50ba25c41f053ba5141fa4fa338fcabec1c857416cfcf23dfa8", size = 8196508, upload-time = "2026-03-04T10:27:24.564Z" }, - { url = "https://files.pythonhosted.org/packages/15/12/0d71fa0ce26b7f77ebd86de1108a4954a08be4969ff48fd027ed90a90594/docling_parse-5.5.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:574b0d3d2beaeaa6e4aeafc63563204ae784758179c14980fa63e26a4b315a39", size = 8295306, upload-time = "2026-03-04T10:27:25.898Z" }, - { url = "https://files.pythonhosted.org/packages/b3/12/a0f6d8ad390d27d300ea04834ccd1c776e3713534c78c0cecc08a5af0414/docling_parse-5.5.0-cp312-cp312-win_amd64.whl", hash = "sha256:be0ee5c30455a9865e1fa6b5d9ff0a2fdc42094ac12c04902296429e3f4d8c39", size = 9203995, upload-time = "2026-03-04T10:27:28.045Z" }, - { url = "https://files.pythonhosted.org/packages/e9/5d/e09e9d8a994cea16cec13276a9d5a67703fd27f1c67fcea04bb175ea8acf/docling_parse-5.5.0-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:a6916033bab153741f97fe96020f8db9b3567d5d5db71d470ac9a7184889ca59", size = 7795798, upload-time = "2026-03-04T10:27:29.875Z" }, - { url = "https://files.pythonhosted.org/packages/4f/27/2b7e67cd1fe918fe91b62afea242d9fac8d49da50f90271962b40823edaa/docling_parse-5.5.0-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:88f9dde1903652bd6b153fdeaa1f9043f3cc6762386b2b69258ad2414019db1d", size = 8196635, upload-time = "2026-03-04T10:27:32.272Z" }, - { url = "https://files.pythonhosted.org/packages/a3/29/352858ee62c09d27aad6312f383d15608526b63a0c7f10fe769ffc7e8735/docling_parse-5.5.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b0e78c3b32078b2ffa8ea08dbada5e3708c70f302a1b9d1468626d2682b93901", size = 8295906, upload-time = "2026-03-04T10:27:33.831Z" }, - { url = "https://files.pythonhosted.org/packages/51/74/34fbe48a058fb4fef8e3ded0392b8ba64741a32561e5f23b677cb29b39a2/docling_parse-5.5.0-cp313-cp313-win_amd64.whl", hash = "sha256:db271c7b2323b09b8296eb9c321e016262241bf62f3586a9d3b12f53b97d5a29", size = 9203923, upload-time = "2026-03-04T10:27:35.779Z" }, - { url = "https://files.pythonhosted.org/packages/bd/b0/c2ca426423abc6bf92cafa02c0d1b16c03223d9c8e90c46bf12b247890ab/docling_parse-5.5.0-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:fbee5f433bc26bd643affb391c8eea2ffb59207526caded09327f1ac25bc5164", size = 7796472, upload-time = "2026-03-04T10:27:37.329Z" }, - { url = "https://files.pythonhosted.org/packages/49/93/8fe80eaf72b514b6ba0e2a07f57a006572608bda05ac18279482cc547958/docling_parse-5.5.0-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0f29ee02a63fac5a5611f318954d4ae383758cd22c851b5298a926320e368a4e", size = 8196803, upload-time = "2026-03-04T10:27:38.989Z" }, - { url = "https://files.pythonhosted.org/packages/14/58/af4769eb8c716e232f5fddc369c1ac821d8f9030f8c9f85d22ef104930c2/docling_parse-5.5.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:75753287a042f47119fbb131effc17668bd54fce71b940dac41d7ed1a37a1a0d", size = 8296215, upload-time = "2026-03-04T10:27:40.646Z" }, - { url = "https://files.pythonhosted.org/packages/92/c8/8c04fe1582fae1e65e1ada2dd651a2bd229caa031ffbcdc0f4719392f50e/docling_parse-5.5.0-cp314-cp314-win_amd64.whl", hash = "sha256:ce24075b85557ae5943d99793d007379c0ef61f2529cf942334fa1306c58022c", size = 9564482, upload-time = "2026-03-04T10:27:42.254Z" }, -] - -[[package]] -name = "docstring-parser" -version = "0.17.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b2/9d/c3b43da9515bd270df0f80548d9944e389870713cc1fe2b8fb35fe2bcefd/docstring_parser-0.17.0.tar.gz", hash = "sha256:583de4a309722b3315439bb31d64ba3eebada841f2e2cee23b99df001434c912", size = 27442, upload-time = "2025-07-21T07:35:01.868Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/55/e2/2537ebcff11c1ee1ff17d8d0b6f4db75873e3b0fb32c2d4a2ee31ecb310a/docstring_parser-0.17.0-py3-none-any.whl", hash = "sha256:cf2569abd23dce8099b300f9b4fa8191e9582dda731fd533daf54c4551658708", size = 36896, upload-time = "2025-07-21T07:35:00.684Z" }, -] - -[[package]] -name = "et-xmlfile" -version = "2.0.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d3/38/af70d7ab1ae9d4da450eeec1fa3918940a5fafb9055e934af8d6eb0c2313/et_xmlfile-2.0.0.tar.gz", hash = "sha256:dab3f4764309081ce75662649be815c4c9081e88f0837825f90fd28317d4da54", size = 17234, upload-time = "2024-10-25T17:25:40.039Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/c1/8b/5fe2cc11fee489817272089c4203e679c63b570a5aaeb18d852ae3cbba6a/et_xmlfile-2.0.0-py3-none-any.whl", hash = "sha256:7a91720bc756843502c3b7504c77b8fe44217c85c537d85037f0f536151b2caa", size = 18059, upload-time = "2024-10-25T17:25:39.051Z" }, -] - -[[package]] -name = "faker" -version = "40.8.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "tzdata", marker = "sys_platform == 'win32'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/70/03/14428edc541467c460d363f6e94bee9acc271f3e62470630fc9a647d0cf2/faker-40.8.0.tar.gz", hash = "sha256:936a3c9be6c004433f20aa4d99095df5dec82b8c7ad07459756041f8c1728875", size = 1956493, upload-time = "2026-03-04T16:18:48.161Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/4c/3b/c6348f1e285e75b069085b18110a4e6325b763a5d35d5e204356fc7c20b3/faker-40.8.0-py3-none-any.whl", hash = "sha256:eb21bdba18f7a8375382eb94fb436fce07046893dc94cb20817d28deb0c3d579", size = 1989124, upload-time = "2026-03-04T16:18:46.45Z" }, -] - -[[package]] -name = "filelock" -version = "3.25.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/77/18/a1fd2231c679dcb9726204645721b12498aeac28e1ad0601038f94b42556/filelock-3.25.0.tar.gz", hash = "sha256:8f00faf3abf9dc730a1ffe9c354ae5c04e079ab7d3a683b7c32da5dd05f26af3", size = 40158, upload-time = "2026-03-01T15:08:45.916Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/f9/0b/de6f54d4a8bedfe8645c41497f3c18d749f0bd3218170c667bf4b81d0cdd/filelock-3.25.0-py3-none-any.whl", hash = "sha256:5ccf8069f7948f494968fc0713c10e5c182a9c9d9eef3a636307a20c2490f047", size = 26427, upload-time = "2026-03-01T15:08:44.593Z" }, -] - -[[package]] -name = "filetype" -version = "1.2.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/bb/29/745f7d30d47fe0f251d3ad3dc2978a23141917661998763bebb6da007eb1/filetype-1.2.0.tar.gz", hash = "sha256:66b56cd6474bf41d8c54660347d37afcc3f7d1970648de365c102ef77548aadb", size = 998020, upload-time = "2022-11-02T17:34:04.141Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/18/79/1b8fa1bb3568781e84c9200f951c735f3f157429f44be0495da55894d620/filetype-1.2.0-py2.py3-none-any.whl", hash = "sha256:7ce71b6880181241cf7ac8697a2f1eb6a8bd9b429f7ad6d27b8db9ba5f1c2d25", size = 19970, upload-time = "2022-11-02T17:34:01.425Z" }, -] - -[[package]] -name = "flatbuffers" -version = "25.12.19" -source = { registry = "https://pypi.org/simple" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e8/2d/d2a548598be01649e2d46231d151a6c56d10b964d94043a335ae56ea2d92/flatbuffers-25.12.19-py2.py3-none-any.whl", hash = "sha256:7634f50c427838bb021c2d66a3d1168e9d199b0607e6329399f04846d42e20b4", size = 26661, upload-time = "2025-12-19T23:16:13.622Z" }, -] - -[[package]] -name = "frozenlist" -version = "1.8.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/2d/f5/c831fac6cc817d26fd54c7eaccd04ef7e0288806943f7cc5bbf69f3ac1f0/frozenlist-1.8.0.tar.gz", hash = "sha256:3ede829ed8d842f6cd48fc7081d7a41001a56f1f38603f9d49bf3020d59a31ad", size = 45875, upload-time = "2025-10-06T05:38:17.865Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/69/29/948b9aa87e75820a38650af445d2ef2b6b8a6fab1a23b6bb9e4ef0be2d59/frozenlist-1.8.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:78f7b9e5d6f2fdb88cdde9440dc147259b62b9d3b019924def9f6478be254ac1", size = 87782, upload-time = "2025-10-06T05:36:06.649Z" }, - { url = "https://files.pythonhosted.org/packages/64/80/4f6e318ee2a7c0750ed724fa33a4bdf1eacdc5a39a7a24e818a773cd91af/frozenlist-1.8.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:229bf37d2e4acdaf808fd3f06e854a4a7a3661e871b10dc1f8f1896a3b05f18b", size = 50594, upload-time = "2025-10-06T05:36:07.69Z" }, - { url = "https://files.pythonhosted.org/packages/2b/94/5c8a2b50a496b11dd519f4a24cb5496cf125681dd99e94c604ccdea9419a/frozenlist-1.8.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f833670942247a14eafbb675458b4e61c82e002a148f49e68257b79296e865c4", size = 50448, upload-time = "2025-10-06T05:36:08.78Z" }, - { url = "https://files.pythonhosted.org/packages/6a/bd/d91c5e39f490a49df14320f4e8c80161cfcce09f1e2cde1edd16a551abb3/frozenlist-1.8.0-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:494a5952b1c597ba44e0e78113a7266e656b9794eec897b19ead706bd7074383", size = 242411, upload-time = "2025-10-06T05:36:09.801Z" }, - { url = "https://files.pythonhosted.org/packages/8f/83/f61505a05109ef3293dfb1ff594d13d64a2324ac3482be2cedc2be818256/frozenlist-1.8.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:96f423a119f4777a4a056b66ce11527366a8bb92f54e541ade21f2374433f6d4", size = 243014, upload-time = "2025-10-06T05:36:11.394Z" }, - { url = "https://files.pythonhosted.org/packages/d8/cb/cb6c7b0f7d4023ddda30cf56b8b17494eb3a79e3fda666bf735f63118b35/frozenlist-1.8.0-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:3462dd9475af2025c31cc61be6652dfa25cbfb56cbbf52f4ccfe029f38decaf8", size = 234909, upload-time = "2025-10-06T05:36:12.598Z" }, - { url = "https://files.pythonhosted.org/packages/31/c5/cd7a1f3b8b34af009fb17d4123c5a778b44ae2804e3ad6b86204255f9ec5/frozenlist-1.8.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c4c800524c9cd9bac5166cd6f55285957fcfc907db323e193f2afcd4d9abd69b", size = 250049, upload-time = "2025-10-06T05:36:14.065Z" }, - { url = "https://files.pythonhosted.org/packages/c0/01/2f95d3b416c584a1e7f0e1d6d31998c4a795f7544069ee2e0962a4b60740/frozenlist-1.8.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d6a5df73acd3399d893dafc71663ad22534b5aa4f94e8a2fabfe856c3c1b6a52", size = 256485, upload-time = "2025-10-06T05:36:15.39Z" }, - { url = "https://files.pythonhosted.org/packages/ce/03/024bf7720b3abaebcff6d0793d73c154237b85bdf67b7ed55e5e9596dc9a/frozenlist-1.8.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:405e8fe955c2280ce66428b3ca55e12b3c4e9c336fb2103a4937e891c69a4a29", size = 237619, upload-time = "2025-10-06T05:36:16.558Z" }, - { url = "https://files.pythonhosted.org/packages/69/fa/f8abdfe7d76b731f5d8bd217827cf6764d4f1d9763407e42717b4bed50a0/frozenlist-1.8.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:908bd3f6439f2fef9e85031b59fd4f1297af54415fb60e4254a95f75b3cab3f3", size = 250320, upload-time = "2025-10-06T05:36:17.821Z" }, - { url = "https://files.pythonhosted.org/packages/f5/3c/b051329f718b463b22613e269ad72138cc256c540f78a6de89452803a47d/frozenlist-1.8.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:294e487f9ec720bd8ffcebc99d575f7eff3568a08a253d1ee1a0378754b74143", size = 246820, upload-time = "2025-10-06T05:36:19.046Z" }, - { url = "https://files.pythonhosted.org/packages/0f/ae/58282e8f98e444b3f4dd42448ff36fa38bef29e40d40f330b22e7108f565/frozenlist-1.8.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:74c51543498289c0c43656701be6b077f4b265868fa7f8a8859c197006efb608", size = 250518, upload-time = "2025-10-06T05:36:20.763Z" }, - { url = "https://files.pythonhosted.org/packages/8f/96/007e5944694d66123183845a106547a15944fbbb7154788cbf7272789536/frozenlist-1.8.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:776f352e8329135506a1d6bf16ac3f87bc25b28e765949282dcc627af36123aa", size = 239096, upload-time = "2025-10-06T05:36:22.129Z" }, - { 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/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" }, -] - -[[package]] -name = "fsspec" -version = "2026.2.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/51/7c/f60c259dcbf4f0c47cc4ddb8f7720d2dcdc8888c8e5ad84c73ea4531cc5b/fsspec-2026.2.0.tar.gz", hash = "sha256:6544e34b16869f5aacd5b90bdf1a71acb37792ea3ddf6125ee69a22a53fb8bff", size = 313441, upload-time = "2026-02-05T21:50:53.743Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e6/ab/fb21f4c939bb440104cc2b396d3be1d9b7a9fd3c6c2a53d98c45b3d7c954/fsspec-2026.2.0-py3-none-any.whl", hash = "sha256:98de475b5cb3bd66bedd5c4679e87b4fdfe1a3bf4d707b151b3c07e58c9a2437", size = 202505, upload-time = "2026-02-05T21:50:51.819Z" }, -] - -[package.optional-dependencies] -http = [ - { name = "aiohttp" }, -] - -[[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-auth" -version = "2.49.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "cryptography" }, - { name = "pyasn1-modules" }, - { name = "rsa" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/7d/59/7371175bfd949abfb1170aa076352131d7281bd9449c0f978604fc4431c3/google_auth-2.49.0.tar.gz", hash = "sha256:9cc2d9259d3700d7a257681f81052db6737495a1a46b610597f4b8bafe5286ae", size = 333444, upload-time = "2026-03-06T21:53:06.07Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/37/45/de64b823b639103de4b63dd193480dce99526bd36be6530c2dba85bf7817/google_auth-2.49.0-py3-none-any.whl", hash = "sha256:f893ef7307f19cf53700b7e2f61b5a6affe3aa0edf9943b13788920ab92d8d87", size = 240676, upload-time = "2026-03-06T21:52:38.304Z" }, -] - -[package.optional-dependencies] -requests = [ - { name = "requests" }, -] - -[[package]] -name = "google-genai" -version = "1.66.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "anyio" }, - { name = "distro" }, - { name = "google-auth", extra = ["requests"] }, - { name = "httpx" }, - { name = "pydantic" }, - { name = "requests" }, - { name = "sniffio" }, - { name = "tenacity" }, - { name = "typing-extensions" }, - { name = "websockets" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/9b/ba/0b343b0770d4710ad2979fd9301d7caa56c940174d5361ed4a7cc4979241/google_genai-1.66.0.tar.gz", hash = "sha256:ffc01647b65046bca6387320057aa51db0ad64bcc72c8e3e914062acfa5f7c49", size = 504386, upload-time = "2026-03-04T22:15:28.156Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/d1/dd/403949d922d4e261b08b64aaa132af4e456c3b15c8e2a2d9e6ef693f66e2/google_genai-1.66.0-py3-none-any.whl", hash = "sha256:7f127a39cf695277104ce4091bb26e417c59bb46e952ff3699c3a982d9c474ee", size = 732174, upload-time = "2026-03-04T22:15:26.63Z" }, -] - -[[package]] -name = "grpcio" -version = "1.78.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "typing-extensions" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/06/8a/3d098f35c143a89520e568e6539cc098fcd294495910e359889ce8741c84/grpcio-1.78.0.tar.gz", hash = "sha256:7382b95189546f375c174f53a5fa873cef91c4b8005faa05cc5b3beea9c4f1c5", size = 12852416, upload-time = "2026-02-06T09:57:18.093Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/4e/f4/7384ed0178203d6074446b3c4f46c90a22ddf7ae0b3aee521627f54cfc2a/grpcio-1.78.0-cp312-cp312-linux_armv7l.whl", hash = "sha256:f9ab915a267fc47c7e88c387a3a28325b58c898e23d4995f765728f4e3dedb97", size = 5913985, upload-time = "2026-02-06T09:55:26.832Z" }, - { url = "https://files.pythonhosted.org/packages/81/ed/be1caa25f06594463f685b3790b320f18aea49b33166f4141bfdc2bfb236/grpcio-1.78.0-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:3f8904a8165ab21e07e58bf3e30a73f4dffc7a1e0dbc32d51c61b5360d26f43e", size = 11811853, upload-time = "2026-02-06T09:55:29.224Z" }, - { url = "https://files.pythonhosted.org/packages/24/a7/f06d151afc4e64b7e3cc3e872d331d011c279aaab02831e40a81c691fb65/grpcio-1.78.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:859b13906ce098c0b493af92142ad051bf64c7870fa58a123911c88606714996", size = 6475766, upload-time = "2026-02-06T09:55:31.825Z" }, - { url = "https://files.pythonhosted.org/packages/8a/a8/4482922da832ec0082d0f2cc3a10976d84a7424707f25780b82814aafc0a/grpcio-1.78.0-cp312-cp312-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:b2342d87af32790f934a79c3112641e7b27d63c261b8b4395350dad43eff1dc7", size = 7170027, upload-time = "2026-02-06T09:55:34.7Z" }, - { url = "https://files.pythonhosted.org/packages/54/bf/f4a3b9693e35d25b24b0b39fa46d7d8a3c439e0a3036c3451764678fec20/grpcio-1.78.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:12a771591ae40bc65ba67048fa52ef4f0e6db8279e595fd349f9dfddeef571f9", size = 6690766, upload-time = "2026-02-06T09:55:36.902Z" }, - { url = "https://files.pythonhosted.org/packages/c7/b9/521875265cc99fe5ad4c5a17010018085cae2810a928bf15ebe7d8bcd9cc/grpcio-1.78.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:185dea0d5260cbb2d224c507bf2a5444d5abbb1fa3594c1ed7e4c709d5eb8383", size = 7266161, upload-time = "2026-02-06T09:55:39.824Z" }, - { url = "https://files.pythonhosted.org/packages/05/86/296a82844fd40a4ad4a95f100b55044b4f817dece732bf686aea1a284147/grpcio-1.78.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:51b13f9aed9d59ee389ad666b8c2214cc87b5de258fa712f9ab05f922e3896c6", size = 8253303, upload-time = "2026-02-06T09:55:42.353Z" }, - { url = "https://files.pythonhosted.org/packages/f3/e4/ea3c0caf5468537f27ad5aab92b681ed7cc0ef5f8c9196d3fd42c8c2286b/grpcio-1.78.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fd5f135b1bd58ab088930b3c613455796dfa0393626a6972663ccdda5b4ac6ce", size = 7698222, upload-time = "2026-02-06T09:55:44.629Z" }, - { url = "https://files.pythonhosted.org/packages/d7/47/7f05f81e4bb6b831e93271fb12fd52ba7b319b5402cbc101d588f435df00/grpcio-1.78.0-cp312-cp312-win32.whl", hash = "sha256:94309f498bcc07e5a7d16089ab984d42ad96af1d94b5a4eb966a266d9fcabf68", size = 4066123, upload-time = "2026-02-06T09:55:47.644Z" }, - { url = "https://files.pythonhosted.org/packages/ad/e7/d6914822c88aa2974dbbd10903d801a28a19ce9cd8bad7e694cbbcf61528/grpcio-1.78.0-cp312-cp312-win_amd64.whl", hash = "sha256:9566fe4ababbb2610c39190791e5b829869351d14369603702e890ef3ad2d06e", size = 4797657, upload-time = "2026-02-06T09:55:49.86Z" }, - { url = "https://files.pythonhosted.org/packages/05/a9/8f75894993895f361ed8636cd9237f4ab39ef87fd30db17467235ed1c045/grpcio-1.78.0-cp313-cp313-linux_armv7l.whl", hash = "sha256:ce3a90455492bf8bfa38e56fbbe1dbd4f872a3d8eeaf7337dc3b1c8aa28c271b", size = 5920143, upload-time = "2026-02-06T09:55:52.035Z" }, - { url = "https://files.pythonhosted.org/packages/55/06/0b78408e938ac424100100fd081189451b472236e8a3a1f6500390dc4954/grpcio-1.78.0-cp313-cp313-macosx_11_0_universal2.whl", hash = "sha256:2bf5e2e163b356978b23652c4818ce4759d40f4712ee9ec5a83c4be6f8c23a3a", size = 11803926, upload-time = "2026-02-06T09:55:55.494Z" }, - { url = "https://files.pythonhosted.org/packages/88/93/b59fe7832ff6ae3c78b813ea43dac60e295fa03606d14d89d2e0ec29f4f3/grpcio-1.78.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:8f2ac84905d12918e4e55a16da17939eb63e433dc11b677267c35568aa63fc84", size = 6478628, upload-time = "2026-02-06T09:55:58.533Z" }, - { url = "https://files.pythonhosted.org/packages/ed/df/e67e3734527f9926b7d9c0dde6cd998d1d26850c3ed8eeec81297967ac67/grpcio-1.78.0-cp313-cp313-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:b58f37edab4a3881bc6c9bca52670610e0c9ca14e2ea3cf9debf185b870457fb", size = 7173574, upload-time = "2026-02-06T09:56:01.786Z" }, - { url = "https://files.pythonhosted.org/packages/a6/62/cc03fffb07bfba982a9ec097b164e8835546980aec25ecfa5f9c1a47e022/grpcio-1.78.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:735e38e176a88ce41840c21bb49098ab66177c64c82426e24e0082500cc68af5", size = 6692639, upload-time = "2026-02-06T09:56:04.529Z" }, - { url = "https://files.pythonhosted.org/packages/bf/9a/289c32e301b85bdb67d7ec68b752155e674ee3ba2173a1858f118e399ef3/grpcio-1.78.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:2045397e63a7a0ee7957c25f7dbb36ddc110e0cfb418403d110c0a7a68a844e9", size = 7268838, upload-time = "2026-02-06T09:56:08.397Z" }, - { url = "https://files.pythonhosted.org/packages/0e/79/1be93f32add280461fa4773880196572563e9c8510861ac2da0ea0f892b6/grpcio-1.78.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:a9f136fbafe7ccf4ac7e8e0c28b31066e810be52d6e344ef954a3a70234e1702", size = 8251878, upload-time = "2026-02-06T09:56:10.914Z" }, - { url = "https://files.pythonhosted.org/packages/65/65/793f8e95296ab92e4164593674ae6291b204bb5f67f9d4a711489cd30ffa/grpcio-1.78.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:748b6138585379c737adc08aeffd21222abbda1a86a0dca2a39682feb9196c20", size = 7695412, upload-time = "2026-02-06T09:56:13.593Z" }, - { url = "https://files.pythonhosted.org/packages/1c/9f/1e233fe697ecc82845942c2822ed06bb522e70d6771c28d5528e4c50f6a4/grpcio-1.78.0-cp313-cp313-win32.whl", hash = "sha256:271c73e6e5676afe4fc52907686670c7cea22ab2310b76a59b678403ed40d670", size = 4064899, upload-time = "2026-02-06T09:56:15.601Z" }, - { url = "https://files.pythonhosted.org/packages/4d/27/d86b89e36de8a951501fb06a0f38df19853210f341d0b28f83f4aa0ffa08/grpcio-1.78.0-cp313-cp313-win_amd64.whl", hash = "sha256:f2d4e43ee362adfc05994ed479334d5a451ab7bc3f3fee1b796b8ca66895acb4", size = 4797393, upload-time = "2026-02-06T09:56:17.882Z" }, - { url = "https://files.pythonhosted.org/packages/29/f2/b56e43e3c968bfe822fa6ce5bca10d5c723aa40875b48791ce1029bb78c7/grpcio-1.78.0-cp314-cp314-linux_armv7l.whl", hash = "sha256:e87cbc002b6f440482b3519e36e1313eb5443e9e9e73d6a52d43bd2004fcfd8e", size = 5920591, upload-time = "2026-02-06T09:56:20.758Z" }, - { url = "https://files.pythonhosted.org/packages/5d/81/1f3b65bd30c334167bfa8b0d23300a44e2725ce39bba5b76a2460d85f745/grpcio-1.78.0-cp314-cp314-macosx_11_0_universal2.whl", hash = "sha256:c41bc64626db62e72afec66b0c8a0da76491510015417c127bfc53b2fe6d7f7f", size = 11813685, upload-time = "2026-02-06T09:56:24.315Z" }, - { url = "https://files.pythonhosted.org/packages/0e/1c/bbe2f8216a5bd3036119c544d63c2e592bdf4a8ec6e4a1867592f4586b26/grpcio-1.78.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:8dfffba826efcf366b1e3ccc37e67afe676f290e13a3b48d31a46739f80a8724", size = 6487803, upload-time = "2026-02-06T09:56:27.367Z" }, - { url = "https://files.pythonhosted.org/packages/16/5c/a6b2419723ea7ddce6308259a55e8e7593d88464ce8db9f4aa857aba96fa/grpcio-1.78.0-cp314-cp314-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:74be1268d1439eaaf552c698cdb11cd594f0c49295ae6bb72c34ee31abbe611b", size = 7173206, upload-time = "2026-02-06T09:56:29.876Z" }, - { url = "https://files.pythonhosted.org/packages/df/1e/b8801345629a415ea7e26c83d75eb5dbe91b07ffe5210cc517348a8d4218/grpcio-1.78.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:be63c88b32e6c0f1429f1398ca5c09bc64b0d80950c8bb7807d7d7fb36fb84c7", size = 6693826, upload-time = "2026-02-06T09:56:32.305Z" }, - { url = "https://files.pythonhosted.org/packages/34/84/0de28eac0377742679a510784f049738a80424b17287739fc47d63c2439e/grpcio-1.78.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:3c586ac70e855c721bda8f548d38c3ca66ac791dc49b66a8281a1f99db85e452", size = 7277897, upload-time = "2026-02-06T09:56:34.915Z" }, - { url = "https://files.pythonhosted.org/packages/ca/9c/ad8685cfe20559a9edb66f735afdcb2b7d3de69b13666fdfc542e1916ebd/grpcio-1.78.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:35eb275bf1751d2ffbd8f57cdbc46058e857cf3971041521b78b7db94bdaf127", size = 8252404, upload-time = "2026-02-06T09:56:37.553Z" }, - { url = "https://files.pythonhosted.org/packages/3c/05/33a7a4985586f27e1de4803887c417ec7ced145ebd069bc38a9607059e2b/grpcio-1.78.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:207db540302c884b8848036b80db352a832b99dfdf41db1eb554c2c2c7800f65", size = 7696837, upload-time = "2026-02-06T09:56:40.173Z" }, - { url = "https://files.pythonhosted.org/packages/73/77/7382241caf88729b106e49e7d18e3116216c778e6a7e833826eb96de22f7/grpcio-1.78.0-cp314-cp314-win32.whl", hash = "sha256:57bab6deef2f4f1ca76cc04565df38dc5713ae6c17de690721bdf30cb1e0545c", size = 4142439, upload-time = "2026-02-06T09:56:43.258Z" }, - { url = "https://files.pythonhosted.org/packages/48/b2/b096ccce418882fbfda4f7496f9357aaa9a5af1896a9a7f60d9f2b275a06/grpcio-1.78.0-cp314-cp314-win_amd64.whl", hash = "sha256:dce09d6116df20a96acfdbf85e4866258c3758180e8c49845d6ba8248b6d0bbb", size = 4929852, upload-time = "2026-02-06T09:56:45.885Z" }, -] - -[[package]] -name = "h11" -version = "0.16.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/01/ee/02a2c011bdab74c6fb3c75474d40b3052059d95df7e73351460c8588d963/h11-0.16.0.tar.gz", hash = "sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1", size = 101250, upload-time = "2025-04-24T03:35:25.427Z" } -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 = "hf-xet" -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/ba/75/9d54c1ae1d05fb704f977eca1671747babf1957f19f38ae75c5933bc2dc1/hf_xet-1.3.2-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:c34e2c7aefad15792d57067c1c89b2b02c1bbaeabd7f8456ae3d07b4bbaf4094", size = 3761076, upload-time = "2026-02-27T17:25:55.42Z" }, - { url = "https://files.pythonhosted.org/packages/f2/8a/08a24b6c6f52b5d26848c16e4b6d790bb810d1bf62c3505bed179f7032d3/hf_xet-1.3.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:4bc995d6c41992831f762096020dc14a65fdf3963f86ffed580b596d04de32e3", size = 3521745, upload-time = "2026-02-27T17:25:54.217Z" }, - { url = "https://files.pythonhosted.org/packages/b5/db/a75cf400dd8a1a8acf226a12955ff6ee999f272dfc0505bafd8079a61267/hf_xet-1.3.2-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:959083c89dee30f7d6f890b36cdadda823386c4de63b1a30384a75bfd2ae995d", size = 4176301, upload-time = "2026-02-27T17:25:46.044Z" }, - { url = "https://files.pythonhosted.org/packages/01/40/6c4c798ffdd83e740dd3925c4e47793b07442a9efa3bc3866ba141a82365/hf_xet-1.3.2-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:cfa760888633b08c01b398d212ce7e8c0d7adac6c86e4b20dfb2397d8acd78ee", size = 3955437, upload-time = "2026-02-27T17:25:44.703Z" }, - { url = "https://files.pythonhosted.org/packages/0c/09/9a3aa7c5f07d3e5cc57bb750d12a124ffa72c273a87164bd848f9ac5cc14/hf_xet-1.3.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:3155a02e083aa21fd733a7485c7c36025e49d5975c8d6bda0453d224dd0b0ac4", size = 4154535, upload-time = "2026-02-27T17:26:05.207Z" }, - { url = "https://files.pythonhosted.org/packages/ae/e0/831f7fa6d90cb47a230bc23284b502c700e1483bbe459437b3844cdc0776/hf_xet-1.3.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:91b1dc03c31cbf733d35dc03df7c5353686233d86af045e716f1e0ea4a2673cf", size = 4393891, upload-time = "2026-02-27T17:26:06.607Z" }, - { url = "https://files.pythonhosted.org/packages/ab/96/6ed472fdce7f8b70f5da6e3f05be76816a610063003bfd6d9cea0bbb58a3/hf_xet-1.3.2-cp314-cp314t-win_amd64.whl", hash = "sha256:211f30098512d95e85ad03ae63bd7dd2c4df476558a5095d09f9e38e78cbf674", size = 3637583, upload-time = "2026-02-27T17:26:17.349Z" }, - { url = "https://files.pythonhosted.org/packages/8b/e8/a069edc4570b3f8e123c0b80fadc94530f3d7b01394e1fc1bb223339366c/hf_xet-1.3.2-cp314-cp314t-win_arm64.whl", hash = "sha256:4a6817c41de7c48ed9270da0b02849347e089c5ece9a0e72ae4f4b3a57617f82", size = 3497977, upload-time = "2026-02-27T17:26:14.966Z" }, - { 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 = "httpcore" -version = "1.0.9" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "certifi" }, - { name = "h11" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/06/94/82699a10bca87a5556c9c59b5963f2d039dbd239f25bc2a63907a05a14cb/httpcore-1.0.9.tar.gz", hash = "sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8", size = 85484, upload-time = "2025-04-24T22:06:22.219Z" } -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 = "httpx" -version = "0.28.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "anyio" }, - { name = "certifi" }, - { name = "httpcore" }, - { name = "idna" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/b1/df/48c586a5fe32a0f01324ee087459e112ebb7224f646c0b5023f5e79e9956/httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc", size = 141406, upload-time = "2024-12-06T15:37:23.222Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad", size = 73517, upload-time = "2024-12-06T15:37:21.509Z" }, -] - -[[package]] -name = "huggingface-hub" -version = "0.36.2" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "filelock" }, - { name = "fsspec" }, - { name = "hf-xet", marker = "platform_machine == 'aarch64' or platform_machine == 'amd64' or platform_machine == 'arm64' or platform_machine == 'x86_64'" }, - { name = "packaging" }, - { name = "pyyaml" }, - { name = "requests" }, - { name = "tqdm" }, - { name = "typing-extensions" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/7c/b7/8cb61d2eece5fb05a83271da168186721c450eb74e3c31f7ef3169fa475b/huggingface_hub-0.36.2.tar.gz", hash = "sha256:1934304d2fb224f8afa3b87007d58501acfda9215b334eed53072dd5e815ff7a", size = 649782, upload-time = "2026-02-06T09:24:13.098Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a8/af/48ac8483240de756d2438c380746e7130d1c6f75802ef22f3c6d49982787/huggingface_hub-0.36.2-py3-none-any.whl", hash = "sha256:48f0c8eac16145dfce371e9d2d7772854a4f591bcb56c9cf548accf531d54270", size = 566395, upload-time = "2026-02-06T09:24:11.133Z" }, -] - -[[package]] -name = "idna" -version = "3.11" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/6f/6d/0703ccc57f3a7233505399edb88de3cbd678da106337b9fcde432b65ed60/idna-3.11.tar.gz", hash = "sha256:795dafcc9c04ed0c1fb032c2aa73654d8e8c5023a7df64a53f39190ada629902", size = 194582, upload-time = "2025-10-12T14:55:20.501Z" } -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 = "iniconfig" -version = "2.3.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/72/34/14ca021ce8e5dfedc35312d08ba8bf51fdd999c576889fc2c24cb97f4f10/iniconfig-2.3.0.tar.gz", hash = "sha256:c76315c77db068650d49c5b56314774a7804df16fee4402c1f19d6d15d8c4730", size = 20503, upload-time = "2025-10-18T21:55:43.219Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl", hash = "sha256:f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53fbf12", size = 7484, upload-time = "2025-10-18T21:55:41.639Z" }, -] - -[[package]] -name = "jaraco-classes" -version = "3.4.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "more-itertools" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/06/c0/ed4a27bc5571b99e3cff68f8a9fa5b56ff7df1c2251cc715a652ddd26402/jaraco.classes-3.4.0.tar.gz", hash = "sha256:47a024b51d0239c0dd8c8540c6c7f484be3b8fcf0b2d85c13825780d3b3f3acd", size = 11780, upload-time = "2024-03-31T07:27:36.643Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/7f/66/b15ce62552d84bbfcec9a4873ab79d993a1dd4edb922cbfccae192bd5b5f/jaraco.classes-3.4.0-py3-none-any.whl", hash = "sha256:f662826b6bed8cace05e7ff873ce0f9283b5c924470fe664fff1c2f00f581790", size = 6777, upload-time = "2024-03-31T07:27:34.792Z" }, -] - -[[package]] -name = "jaraco-context" -version = "6.1.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/cb/9c/a788f5bb29c61e456b8ee52ce76dbdd32fd72cd73dd67bc95f42c7a8d13c/jaraco_context-6.1.0.tar.gz", hash = "sha256:129a341b0a85a7db7879e22acd66902fda67882db771754574338898b2d5d86f", size = 15850, upload-time = "2026-01-13T02:53:53.847Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/8d/48/aa685dbf1024c7bd82bede569e3a85f82c32fd3d79ba5fea578f0159571a/jaraco_context-6.1.0-py3-none-any.whl", hash = "sha256:a43b5ed85815223d0d3cfdb6d7ca0d2bc8946f28f30b6f3216bda070f68badda", size = 7065, upload-time = "2026-01-13T02:53:53.031Z" }, -] - -[[package]] -name = "jaraco-functools" -version = "4.4.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "more-itertools" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/0f/27/056e0638a86749374d6f57d0b0db39f29509cce9313cf91bdc0ac4d91084/jaraco_functools-4.4.0.tar.gz", hash = "sha256:da21933b0417b89515562656547a77b4931f98176eb173644c0d35032a33d6bb", size = 19943, upload-time = "2025-12-21T09:29:43.6Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/fd/c4/813bb09f0985cb21e959f21f2464169eca882656849adf727ac7bb7e1767/jaraco_functools-4.4.0-py3-none-any.whl", hash = "sha256:9eec1e36f45c818d9bf307c8948eb03b2b56cd44087b3cdc989abca1f20b9176", size = 10481, upload-time = "2025-12-21T09:29:42.27Z" }, -] - -[[package]] -name = "jeepney" -version = "0.9.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/7b/6f/357efd7602486741aa73ffc0617fb310a29b588ed0fd69c2399acbb85b0c/jeepney-0.9.0.tar.gz", hash = "sha256:cf0e9e845622b81e4a28df94c40345400256ec608d0e55bb8a3feaa9163f5732", size = 106758, upload-time = "2025-02-27T18:51:01.684Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/b2/a3/e137168c9c44d18eff0376253da9f1e9234d0239e0ee230d2fee6cea8e55/jeepney-0.9.0-py3-none-any.whl", hash = "sha256:97e5714520c16fc0a45695e5365a2e11b81ea79bba796e26f9f1d178cb182683", size = 49010, upload-time = "2025-02-27T18:51:00.104Z" }, -] - -[[package]] -name = "jinja2" -version = "3.1.6" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "markupsafe" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/df/bf/f7da0350254c0ed7c72f3e33cef02e048281fec7ecec5f032d4aac52226b/jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d", size = 245115, upload-time = "2025-03-05T20:05:02.478Z" } -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.13.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/0d/5e/4ec91646aee381d01cdb9974e30882c9cd3b8c5d1079d6b5ff4af522439a/jiter-0.13.0.tar.gz", hash = "sha256:f2839f9c2c7e2dffc1bc5929a510e14ce0a946be9365fd1219e7ef342dae14f4", size = 164847, upload-time = "2026-02-02T12:37:56.441Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/2e/30/7687e4f87086829955013ca12a9233523349767f69653ebc27036313def9/jiter-0.13.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:0a2bd69fc1d902e89925fc34d1da51b2128019423d7b339a45d9e99c894e0663", size = 307958, upload-time = "2026-02-02T12:35:57.165Z" }, - { url = "https://files.pythonhosted.org/packages/c3/27/e57f9a783246ed95481e6749cc5002a8a767a73177a83c63ea71f0528b90/jiter-0.13.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f917a04240ef31898182f76a332f508f2cc4b57d2b4d7ad2dbfebbfe167eb505", size = 318597, upload-time = "2026-02-02T12:35:58.591Z" }, - { url = "https://files.pythonhosted.org/packages/cf/52/e5719a60ac5d4d7c5995461a94ad5ef962a37c8bf5b088390e6fad59b2ff/jiter-0.13.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c1e2b199f446d3e82246b4fd9236d7cb502dc2222b18698ba0d986d2fecc6152", size = 348821, upload-time = "2026-02-02T12:36:00.093Z" }, - { url = "https://files.pythonhosted.org/packages/61/db/c1efc32b8ba4c740ab3fc2d037d8753f67685f475e26b9d6536a4322bcdd/jiter-0.13.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:04670992b576fa65bd056dbac0c39fe8bd67681c380cb2b48efa885711d9d726", size = 364163, upload-time = "2026-02-02T12:36:01.937Z" }, - { url = "https://files.pythonhosted.org/packages/55/8a/fb75556236047c8806995671a18e4a0ad646ed255276f51a20f32dceaeec/jiter-0.13.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5a1aff1fbdb803a376d4d22a8f63f8e7ccbce0b4890c26cc7af9e501ab339ef0", size = 483709, upload-time = "2026-02-02T12:36:03.41Z" }, - { url = "https://files.pythonhosted.org/packages/7e/16/43512e6ee863875693a8e6f6d532e19d650779d6ba9a81593ae40a9088ff/jiter-0.13.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3b3fb8c2053acaef8580809ac1d1f7481a0a0bdc012fd7f5d8b18fb696a5a089", size = 370480, upload-time = "2026-02-02T12:36:04.791Z" }, - { url = "https://files.pythonhosted.org/packages/f8/4c/09b93e30e984a187bc8aaa3510e1ec8dcbdcd71ca05d2f56aac0492453aa/jiter-0.13.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bdaba7d87e66f26a2c45d8cbadcbfc4bf7884182317907baf39cfe9775bb4d93", size = 360735, upload-time = "2026-02-02T12:36:06.994Z" }, - { url = "https://files.pythonhosted.org/packages/1a/1b/46c5e349019874ec5dfa508c14c37e29864ea108d376ae26d90bee238cd7/jiter-0.13.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7b88d649135aca526da172e48083da915ec086b54e8e73a425ba50999468cc08", size = 391814, upload-time = "2026-02-02T12:36:08.368Z" }, - { url = "https://files.pythonhosted.org/packages/15/9e/26184760e85baee7162ad37b7912797d2077718476bf91517641c92b3639/jiter-0.13.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:e404ea551d35438013c64b4f357b0474c7abf9f781c06d44fcaf7a14c69ff9e2", size = 513990, upload-time = "2026-02-02T12:36:09.993Z" }, - { url = "https://files.pythonhosted.org/packages/e9/34/2c9355247d6debad57a0a15e76ab1566ab799388042743656e566b3b7de1/jiter-0.13.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:1f4748aad1b4a93c8bdd70f604d0f748cdc0e8744c5547798acfa52f10e79228", size = 548021, upload-time = "2026-02-02T12:36:11.376Z" }, - { url = "https://files.pythonhosted.org/packages/ac/4a/9f2c23255d04a834398b9c2e0e665382116911dc4d06b795710503cdad25/jiter-0.13.0-cp312-cp312-win32.whl", hash = "sha256:0bf670e3b1445fc4d31612199f1744f67f889ee1bbae703c4b54dc097e5dd394", size = 203024, upload-time = "2026-02-02T12:36:12.682Z" }, - { url = "https://files.pythonhosted.org/packages/09/ee/f0ae675a957ae5a8f160be3e87acea6b11dc7b89f6b7ab057e77b2d2b13a/jiter-0.13.0-cp312-cp312-win_amd64.whl", hash = "sha256:15db60e121e11fe186c0b15236bd5d18381b9ddacdcf4e659feb96fc6c969c92", size = 205424, upload-time = "2026-02-02T12:36:13.93Z" }, - { url = "https://files.pythonhosted.org/packages/1b/02/ae611edf913d3cbf02c97cdb90374af2082c48d7190d74c1111dde08bcdd/jiter-0.13.0-cp312-cp312-win_arm64.whl", hash = "sha256:41f92313d17989102f3cb5dd533a02787cdb99454d494344b0361355da52fcb9", size = 186818, upload-time = "2026-02-02T12:36:15.308Z" }, - { url = "https://files.pythonhosted.org/packages/91/9c/7ee5a6ff4b9991e1a45263bfc46731634c4a2bde27dfda6c8251df2d958c/jiter-0.13.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:1f8a55b848cbabf97d861495cd65f1e5c590246fabca8b48e1747c4dfc8f85bf", size = 306897, upload-time = "2026-02-02T12:36:16.748Z" }, - { url = "https://files.pythonhosted.org/packages/7c/02/be5b870d1d2be5dd6a91bdfb90f248fbb7dcbd21338f092c6b89817c3dbf/jiter-0.13.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f556aa591c00f2c45eb1b89f68f52441a016034d18b65da60e2d2875bbbf344a", size = 317507, upload-time = "2026-02-02T12:36:18.351Z" }, - { url = "https://files.pythonhosted.org/packages/da/92/b25d2ec333615f5f284f3a4024f7ce68cfa0604c322c6808b2344c7f5d2b/jiter-0.13.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f7e1d61da332ec412350463891923f960c3073cf1aae93b538f0bb4c8cd46efb", size = 350560, upload-time = "2026-02-02T12:36:19.746Z" }, - { url = "https://files.pythonhosted.org/packages/be/ec/74dcb99fef0aca9fbe56b303bf79f6bd839010cb18ad41000bf6cc71eec0/jiter-0.13.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3097d665a27bc96fd9bbf7f86178037db139f319f785e4757ce7ccbf390db6c2", size = 363232, upload-time = "2026-02-02T12:36:21.243Z" }, - { url = "https://files.pythonhosted.org/packages/1b/37/f17375e0bb2f6a812d4dd92d7616e41917f740f3e71343627da9db2824ce/jiter-0.13.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9d01ecc3a8cbdb6f25a37bd500510550b64ddf9f7d64a107d92f3ccb25035d0f", size = 483727, upload-time = "2026-02-02T12:36:22.688Z" }, - { url = "https://files.pythonhosted.org/packages/77/d2/a71160a5ae1a1e66c1395b37ef77da67513b0adba73b993a27fbe47eb048/jiter-0.13.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ed9bbc30f5d60a3bdf63ae76beb3f9db280d7f195dfcfa61af792d6ce912d159", size = 370799, upload-time = "2026-02-02T12:36:24.106Z" }, - { url = "https://files.pythonhosted.org/packages/01/99/ed5e478ff0eb4e8aa5fd998f9d69603c9fd3f32de3bd16c2b1194f68361c/jiter-0.13.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:98fbafb6e88256f4454de33c1f40203d09fc33ed19162a68b3b257b29ca7f663", size = 359120, upload-time = "2026-02-02T12:36:25.519Z" }, - { url = "https://files.pythonhosted.org/packages/16/be/7ffd08203277a813f732ba897352797fa9493faf8dc7995b31f3d9cb9488/jiter-0.13.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5467696f6b827f1116556cb0db620440380434591e93ecee7fd14d1a491b6daa", size = 390664, upload-time = "2026-02-02T12:36:26.866Z" }, - { url = "https://files.pythonhosted.org/packages/d1/84/e0787856196d6d346264d6dcccb01f741e5f0bd014c1d9a2ebe149caf4f3/jiter-0.13.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:2d08c9475d48b92892583df9da592a0e2ac49bcd41fae1fec4f39ba6cf107820", size = 513543, upload-time = "2026-02-02T12:36:28.217Z" }, - { url = "https://files.pythonhosted.org/packages/65/50/ecbd258181c4313cf79bca6c88fb63207d04d5bf5e4f65174114d072aa55/jiter-0.13.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:aed40e099404721d7fcaf5b89bd3b4568a4666358bcac7b6b15c09fb6252ab68", size = 547262, upload-time = "2026-02-02T12:36:29.678Z" }, - { url = "https://files.pythonhosted.org/packages/27/da/68f38d12e7111d2016cd198161b36e1f042bd115c169255bcb7ec823a3bf/jiter-0.13.0-cp313-cp313-win32.whl", hash = "sha256:36ebfbcffafb146d0e6ffb3e74d51e03d9c35ce7c625c8066cdbfc7b953bdc72", size = 200630, upload-time = "2026-02-02T12:36:31.808Z" }, - { url = "https://files.pythonhosted.org/packages/25/65/3bd1a972c9a08ecd22eb3b08a95d1941ebe6938aea620c246cf426ae09c2/jiter-0.13.0-cp313-cp313-win_amd64.whl", hash = "sha256:8d76029f077379374cf0dbc78dbe45b38dec4a2eb78b08b5194ce836b2517afc", size = 202602, upload-time = "2026-02-02T12:36:33.679Z" }, - { url = "https://files.pythonhosted.org/packages/15/fe/13bd3678a311aa67686bb303654792c48206a112068f8b0b21426eb6851e/jiter-0.13.0-cp313-cp313-win_arm64.whl", hash = "sha256:bb7613e1a427cfcb6ea4544f9ac566b93d5bf67e0d48c787eca673ff9c9dff2b", size = 185939, upload-time = "2026-02-02T12:36:35.065Z" }, - { url = "https://files.pythonhosted.org/packages/49/19/a929ec002ad3228bc97ca01dbb14f7632fffdc84a95ec92ceaf4145688ae/jiter-0.13.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:fa476ab5dd49f3bf3a168e05f89358c75a17608dbabb080ef65f96b27c19ab10", size = 316616, upload-time = "2026-02-02T12:36:36.579Z" }, - { url = "https://files.pythonhosted.org/packages/52/56/d19a9a194afa37c1728831e5fb81b7722c3de18a3109e8f282bfc23e587a/jiter-0.13.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ade8cb6ff5632a62b7dbd4757d8c5573f7a2e9ae285d6b5b841707d8363205ef", size = 346850, upload-time = "2026-02-02T12:36:38.058Z" }, - { url = "https://files.pythonhosted.org/packages/36/4a/94e831c6bf287754a8a019cb966ed39ff8be6ab78cadecf08df3bb02d505/jiter-0.13.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9950290340acc1adaded363edd94baebcee7dabdfa8bee4790794cd5cfad2af6", size = 358551, upload-time = "2026-02-02T12:36:39.417Z" }, - { url = "https://files.pythonhosted.org/packages/a2/ec/a4c72c822695fa80e55d2b4142b73f0012035d9fcf90eccc56bc060db37c/jiter-0.13.0-cp313-cp313t-win_amd64.whl", hash = "sha256:2b4972c6df33731aac0742b64fd0d18e0a69bc7d6e03108ce7d40c85fd9e3e6d", size = 201950, upload-time = "2026-02-02T12:36:40.791Z" }, - { url = "https://files.pythonhosted.org/packages/b6/00/393553ec27b824fbc29047e9c7cd4a3951d7fbe4a76743f17e44034fa4e4/jiter-0.13.0-cp313-cp313t-win_arm64.whl", hash = "sha256:701a1e77d1e593c1b435315ff625fd071f0998c5f02792038a5ca98899261b7d", size = 185852, upload-time = "2026-02-02T12:36:42.077Z" }, - { url = "https://files.pythonhosted.org/packages/6e/f5/f1997e987211f6f9bd71b8083047b316208b4aca0b529bb5f8c96c89ef3e/jiter-0.13.0-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:cc5223ab19fe25e2f0bf2643204ad7318896fe3729bf12fde41b77bfc4fafff0", size = 308804, upload-time = "2026-02-02T12:36:43.496Z" }, - { url = "https://files.pythonhosted.org/packages/cd/8f/5482a7677731fd44881f0204981ce2d7175db271f82cba2085dd2212e095/jiter-0.13.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:9776ebe51713acf438fd9b4405fcd86893ae5d03487546dae7f34993217f8a91", size = 318787, upload-time = "2026-02-02T12:36:45.071Z" }, - { url = "https://files.pythonhosted.org/packages/f3/b9/7257ac59778f1cd025b26a23c5520a36a424f7f1b068f2442a5b499b7464/jiter-0.13.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:879e768938e7b49b5e90b7e3fecc0dbec01b8cb89595861fb39a8967c5220d09", size = 353880, upload-time = "2026-02-02T12:36:47.365Z" }, - { url = "https://files.pythonhosted.org/packages/c3/87/719eec4a3f0841dad99e3d3604ee4cba36af4419a76f3cb0b8e2e691ad67/jiter-0.13.0-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:682161a67adea11e3aae9038c06c8b4a9a71023228767477d683f69903ebc607", size = 366702, upload-time = "2026-02-02T12:36:48.871Z" }, - { url = "https://files.pythonhosted.org/packages/d2/65/415f0a75cf6921e43365a1bc227c565cb949caca8b7532776e430cbaa530/jiter-0.13.0-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a13b68cd1cd8cc9de8f244ebae18ccb3e4067ad205220ef324c39181e23bbf66", size = 486319, upload-time = "2026-02-02T12:36:53.006Z" }, - { url = "https://files.pythonhosted.org/packages/54/a2/9e12b48e82c6bbc6081fd81abf915e1443add1b13d8fc586e1d90bb02bb8/jiter-0.13.0-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:87ce0f14c6c08892b610686ae8be350bf368467b6acd5085a5b65441e2bf36d2", size = 372289, upload-time = "2026-02-02T12:36:54.593Z" }, - { url = "https://files.pythonhosted.org/packages/4e/c1/e4693f107a1789a239c759a432e9afc592366f04e901470c2af89cfd28e1/jiter-0.13.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c365005b05505a90d1c47856420980d0237adf82f70c4aff7aebd3c1cc143ad", size = 360165, upload-time = "2026-02-02T12:36:56.112Z" }, - { url = "https://files.pythonhosted.org/packages/17/08/91b9ea976c1c758240614bd88442681a87672eebc3d9a6dde476874e706b/jiter-0.13.0-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1317fdffd16f5873e46ce27d0e0f7f4f90f0cdf1d86bf6abeaea9f63ca2c401d", size = 389634, upload-time = "2026-02-02T12:36:57.495Z" }, - { url = "https://files.pythonhosted.org/packages/18/23/58325ef99390d6d40427ed6005bf1ad54f2577866594bcf13ce55675f87d/jiter-0.13.0-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:c05b450d37ba0c9e21c77fef1f205f56bcee2330bddca68d344baebfc55ae0df", size = 514933, upload-time = "2026-02-02T12:36:58.909Z" }, - { url = "https://files.pythonhosted.org/packages/5b/25/69f1120c7c395fd276c3996bb8adefa9c6b84c12bb7111e5c6ccdcd8526d/jiter-0.13.0-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:775e10de3849d0631a97c603f996f518159272db00fdda0a780f81752255ee9d", size = 548842, upload-time = "2026-02-02T12:37:00.433Z" }, - { url = "https://files.pythonhosted.org/packages/18/05/981c9669d86850c5fbb0d9e62bba144787f9fba84546ba43d624ee27ef29/jiter-0.13.0-cp314-cp314-win32.whl", hash = "sha256:632bf7c1d28421c00dd8bbb8a3bac5663e1f57d5cd5ed962bce3c73bf62608e6", size = 202108, upload-time = "2026-02-02T12:37:01.718Z" }, - { url = "https://files.pythonhosted.org/packages/8d/96/cdcf54dd0b0341db7d25413229888a346c7130bd20820530905fdb65727b/jiter-0.13.0-cp314-cp314-win_amd64.whl", hash = "sha256:f22ef501c3f87ede88f23f9b11e608581c14f04db59b6a801f354397ae13739f", size = 204027, upload-time = "2026-02-02T12:37:03.075Z" }, - { url = "https://files.pythonhosted.org/packages/fb/f9/724bcaaab7a3cd727031fe4f6995cb86c4bd344909177c186699c8dec51a/jiter-0.13.0-cp314-cp314-win_arm64.whl", hash = "sha256:07b75fe09a4ee8e0c606200622e571e44943f47254f95e2436c8bdcaceb36d7d", size = 187199, upload-time = "2026-02-02T12:37:04.414Z" }, - { url = "https://files.pythonhosted.org/packages/62/92/1661d8b9fd6a3d7a2d89831db26fe3c1509a287d83ad7838831c7b7a5c7e/jiter-0.13.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:964538479359059a35fb400e769295d4b315ae61e4105396d355a12f7fef09f0", size = 318423, upload-time = "2026-02-02T12:37:05.806Z" }, - { url = "https://files.pythonhosted.org/packages/4f/3b/f77d342a54d4ebcd128e520fc58ec2f5b30a423b0fd26acdfc0c6fef8e26/jiter-0.13.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e104da1db1c0991b3eaed391ccd650ae8d947eab1480c733e5a3fb28d4313e40", size = 351438, upload-time = "2026-02-02T12:37:07.189Z" }, - { url = "https://files.pythonhosted.org/packages/76/b3/ba9a69f0e4209bd3331470c723c2f5509e6f0482e416b612431a5061ed71/jiter-0.13.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0e3a5f0cde8ff433b8e88e41aa40131455420fb3649a3c7abdda6145f8cb7202", size = 364774, upload-time = "2026-02-02T12:37:08.579Z" }, - { url = "https://files.pythonhosted.org/packages/b3/16/6cdb31fa342932602458dbb631bfbd47f601e03d2e4950740e0b2100b570/jiter-0.13.0-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:57aab48f40be1db920a582b30b116fe2435d184f77f0e4226f546794cedd9cf0", size = 487238, upload-time = "2026-02-02T12:37:10.066Z" }, - { url = "https://files.pythonhosted.org/packages/ed/b1/956cc7abaca8d95c13aa8d6c9b3f3797241c246cd6e792934cc4c8b250d2/jiter-0.13.0-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7772115877c53f62beeb8fd853cab692dbc04374ef623b30f997959a4c0e7e95", size = 372892, upload-time = "2026-02-02T12:37:11.656Z" }, - { url = "https://files.pythonhosted.org/packages/26/c4/97ecde8b1e74f67b8598c57c6fccf6df86ea7861ed29da84629cdbba76c4/jiter-0.13.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1211427574b17b633cfceba5040de8081e5abf114f7a7602f73d2e16f9fdaa59", size = 360309, upload-time = "2026-02-02T12:37:13.244Z" }, - { url = "https://files.pythonhosted.org/packages/4b/d7/eabe3cf46715854ccc80be2cd78dd4c36aedeb30751dbf85a1d08c14373c/jiter-0.13.0-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7beae3a3d3b5212d3a55d2961db3c292e02e302feb43fce6a3f7a31b90ea6dfe", size = 389607, upload-time = "2026-02-02T12:37:14.881Z" }, - { url = "https://files.pythonhosted.org/packages/df/2d/03963fc0804e6109b82decfb9974eb92df3797fe7222428cae12f8ccaa0c/jiter-0.13.0-cp314-cp314t-musllinux_1_1_aarch64.whl", hash = "sha256:e5562a0f0e90a6223b704163ea28e831bd3a9faa3512a711f031611e6b06c939", size = 514986, upload-time = "2026-02-02T12:37:16.326Z" }, - { url = "https://files.pythonhosted.org/packages/f6/6c/8c83b45eb3eb1c1e18d841fe30b4b5bc5619d781267ca9bc03e005d8fd0a/jiter-0.13.0-cp314-cp314t-musllinux_1_1_x86_64.whl", hash = "sha256:6c26a424569a59140fb51160a56df13f438a2b0967365e987889186d5fc2f6f9", size = 548756, upload-time = "2026-02-02T12:37:17.736Z" }, - { url = "https://files.pythonhosted.org/packages/47/66/eea81dfff765ed66c68fd2ed8c96245109e13c896c2a5015c7839c92367e/jiter-0.13.0-cp314-cp314t-win32.whl", hash = "sha256:24dc96eca9f84da4131cdf87a95e6ce36765c3b156fc9ae33280873b1c32d5f6", size = 201196, upload-time = "2026-02-02T12:37:19.101Z" }, - { url = "https://files.pythonhosted.org/packages/ff/32/4ac9c7a76402f8f00d00842a7f6b83b284d0cf7c1e9d4227bc95aa6d17fa/jiter-0.13.0-cp314-cp314t-win_amd64.whl", hash = "sha256:0a8d76c7524087272c8ae913f5d9d608bd839154b62c4322ef65723d2e5bb0b8", size = 204215, upload-time = "2026-02-02T12:37:20.495Z" }, - { url = "https://files.pythonhosted.org/packages/f9/8e/7def204fea9f9be8b3c21a6f2dd6c020cf56c7d5ff753e0e23ed7f9ea57e/jiter-0.13.0-cp314-cp314t-win_arm64.whl", hash = "sha256:2c26cf47e2cad140fa23b6d58d435a7c0161f5c514284802f25e87fddfe11024", size = 187152, upload-time = "2026-02-02T12:37:22.124Z" }, - { url = "https://files.pythonhosted.org/packages/80/60/e50fa45dd7e2eae049f0ce964663849e897300433921198aef94b6ffa23a/jiter-0.13.0-graalpy312-graalpy250_312_native-macosx_10_12_x86_64.whl", hash = "sha256:3d744a6061afba08dd7ae375dcde870cffb14429b7477e10f67e9e6d68772a0a", size = 305169, upload-time = "2026-02-02T12:37:50.376Z" }, - { url = "https://files.pythonhosted.org/packages/d2/73/a009f41c5eed71c49bec53036c4b33555afcdee70682a18c6f66e396c039/jiter-0.13.0-graalpy312-graalpy250_312_native-macosx_11_0_arm64.whl", hash = "sha256:ff732bd0a0e778f43d5009840f20b935e79087b4dc65bd36f1cd0f9b04b8ff7f", size = 303808, upload-time = "2026-02-02T12:37:52.092Z" }, - { url = "https://files.pythonhosted.org/packages/c4/10/528b439290763bff3d939268085d03382471b442f212dca4ff5f12802d43/jiter-0.13.0-graalpy312-graalpy250_312_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ab44b178f7981fcaea7e0a5df20e773c663d06ffda0198f1a524e91b2fde7e59", size = 337384, upload-time = "2026-02-02T12:37:53.582Z" }, - { url = "https://files.pythonhosted.org/packages/67/8a/a342b2f0251f3dac4ca17618265d93bf244a2a4d089126e81e4c1056ac50/jiter-0.13.0-graalpy312-graalpy250_312_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7bb00b6d26db67a05fe3e12c76edc75f32077fb51deed13822dc648fa373bc19", size = 343768, upload-time = "2026-02-02T12:37:55.055Z" }, -] - -[[package]] -name = "joblib" -version = "1.5.3" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/41/f2/d34e8b3a08a9cc79a50b2208a93dce981fe615b64d5a4d4abee421d898df/joblib-1.5.3.tar.gz", hash = "sha256:8561a3269e6801106863fd0d6d84bb737be9e7631e33aaed3fb9ce5953688da3", size = 331603, upload-time = "2025-12-15T08:41:46.427Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/7b/91/984aca2ec129e2757d1e4e3c81c3fcda9d0f85b74670a094cc443d9ee949/joblib-1.5.3-py3-none-any.whl", hash = "sha256:5fc3c5039fc5ca8c0276333a188bbd59d6b7ab37fe6632daa76bc7f9ec18e713", size = 309071, upload-time = "2025-12-15T08:41:44.973Z" }, -] - -[[package]] -name = "jsonlines" -version = "4.0.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "attrs" }, -] -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 = "jsonref" -version = "1.1.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/aa/0d/c1f3277e90ccdb50d33ed5ba1ec5b3f0a242ed8c1b1a85d3afeb68464dca/jsonref-1.1.0.tar.gz", hash = "sha256:32fe8e1d85af0fdefbebce950af85590b22b60f9e95443176adbde4e1ecea552", size = 8814, upload-time = "2023-01-16T16:10:04.455Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/0c/ec/e1db9922bceb168197a558a2b8c03a7963f1afe93517ddd3cf99f202f996/jsonref-1.1.0-py3-none-any.whl", hash = "sha256:590dc7773df6c21cbf948b5dac07a72a251db28b0238ceecce0a2abfa8ec30a9", size = 9425, upload-time = "2023-01-16T16:10:02.255Z" }, -] - -[[package]] -name = "jsonschema" -version = "4.26.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "attrs" }, - { name = "jsonschema-specifications" }, - { name = "referencing" }, - { name = "rpds-py" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/b3/fc/e067678238fa451312d4c62bf6e6cf5ec56375422aee02f9cb5f909b3047/jsonschema-4.26.0.tar.gz", hash = "sha256:0c26707e2efad8aa1bfc5b7ce170f3fccc2e4918ff85989ba9ffa9facb2be326", size = 366583, upload-time = "2026-01-07T13:41:07.246Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/69/90/f63fb5873511e014207a475e2bb4e8b2e570d655b00ac19a9a0ca0a385ee/jsonschema-4.26.0-py3-none-any.whl", hash = "sha256:d489f15263b8d200f8387e64b4c3a75f06629559fb73deb8fdfb525f2dab50ce", size = 90630, upload-time = "2026-01-07T13:41:05.306Z" }, -] - -[[package]] -name = "jsonschema-specifications" -version = "2025.9.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "referencing" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/19/74/a633ee74eb36c44aa6d1095e7cc5569bebf04342ee146178e2d36600708b/jsonschema_specifications-2025.9.1.tar.gz", hash = "sha256:b540987f239e745613c7a9176f3edb72b832a4ac465cf02712288397832b5e8d", size = 32855, upload-time = "2025-09-08T01:34:59.186Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl", hash = "sha256:98802fee3a11ee76ecaca44429fda8a41bff98b00a0f2838151b113f210cc6fe", size = 18437, upload-time = "2025-09-08T01:34:57.871Z" }, -] - -[[package]] -name = "keyring" -version = "25.7.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "jaraco-classes" }, - { name = "jaraco-context" }, - { name = "jaraco-functools" }, - { name = "jeepney", marker = "sys_platform == 'linux'" }, - { name = "pywin32-ctypes", marker = "sys_platform == 'win32'" }, - { name = "secretstorage", marker = "sys_platform == 'linux'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/43/4b/674af6ef2f97d56f0ab5153bf0bfa28ccb6c3ed4d1babf4305449668807b/keyring-25.7.0.tar.gz", hash = "sha256:fe01bd85eb3f8fb3dd0405defdeac9a5b4f6f0439edbb3149577f244a2e8245b", size = 63516, upload-time = "2025-11-16T16:26:09.482Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/81/db/e655086b7f3a705df045bf0933bdd9c2f79bb3c97bfef1384598bb79a217/keyring-25.7.0-py3-none-any.whl", hash = "sha256:be4a0b195f149690c166e850609a477c532ddbfbaed96a404d4e43f8d5e2689f", size = 39160, upload-time = "2025-11-16T16:26:08.402Z" }, -] - -[[package]] -name = "latex2mathml" -version = "3.78.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/1a/26/57b1034c08922d0aefea79430a5e0006ffaee4f0ec59d566613f667ab2f7/latex2mathml-3.78.1.tar.gz", hash = "sha256:f941db80bf41db33f31df87b304e8b588f8166b813b0257c11c98f7a9d0aac71", size = 74030, upload-time = "2025-08-29T23:34:23.178Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/3e/76/d661ea2e529c3d464f9efd73f9ac31626b45279eb4306e684054ea20e3d4/latex2mathml-3.78.1-py3-none-any.whl", hash = "sha256:f089b6d75e85b937f99693c93e8c16c0804008672c3dd2a3d25affd36f238100", size = 73892, upload-time = "2025-08-29T23:34:21.98Z" }, -] - -[[package]] -name = "lxml" -version = "6.0.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/aa/88/262177de60548e5a2bfc46ad28232c9e9cbde697bd94132aeb80364675cb/lxml-6.0.2.tar.gz", hash = "sha256:cd79f3367bd74b317dda655dc8fcfa304d9eb6e4fb06b7168c5cf27f96e0cd62", size = 4073426, upload-time = "2025-09-22T04:04:59.287Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/f3/c8/8ff2bc6b920c84355146cd1ab7d181bc543b89241cfb1ebee824a7c81457/lxml-6.0.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:a59f5448ba2ceccd06995c95ea59a7674a10de0810f2ce90c9006f3cbc044456", size = 8661887, upload-time = "2025-09-22T04:01:17.265Z" }, - { url = "https://files.pythonhosted.org/packages/37/6f/9aae1008083bb501ef63284220ce81638332f9ccbfa53765b2b7502203cf/lxml-6.0.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:e8113639f3296706fbac34a30813929e29247718e88173ad849f57ca59754924", size = 4667818, upload-time = "2025-09-22T04:01:19.688Z" }, - { url = "https://files.pythonhosted.org/packages/f1/ca/31fb37f99f37f1536c133476674c10b577e409c0a624384147653e38baf2/lxml-6.0.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:a8bef9b9825fa8bc816a6e641bb67219489229ebc648be422af695f6e7a4fa7f", size = 4950807, upload-time = "2025-09-22T04:01:21.487Z" }, - { url = "https://files.pythonhosted.org/packages/da/87/f6cb9442e4bada8aab5ae7e1046264f62fdbeaa6e3f6211b93f4c0dd97f1/lxml-6.0.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:65ea18d710fd14e0186c2f973dc60bb52039a275f82d3c44a0e42b43440ea534", size = 5109179, upload-time = "2025-09-22T04:01:23.32Z" }, - { url = "https://files.pythonhosted.org/packages/c8/20/a7760713e65888db79bbae4f6146a6ae5c04e4a204a3c48896c408cd6ed2/lxml-6.0.2-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c371aa98126a0d4c739ca93ceffa0fd7a5d732e3ac66a46e74339acd4d334564", size = 5023044, upload-time = "2025-09-22T04:01:25.118Z" }, - { url = "https://files.pythonhosted.org/packages/a2/b0/7e64e0460fcb36471899f75831509098f3fd7cd02a3833ac517433cb4f8f/lxml-6.0.2-cp312-cp312-manylinux_2_26_i686.manylinux_2_28_i686.whl", hash = "sha256:700efd30c0fa1a3581d80a748157397559396090a51d306ea59a70020223d16f", size = 5359685, upload-time = "2025-09-22T04:01:27.398Z" }, - { url = "https://files.pythonhosted.org/packages/b9/e1/e5df362e9ca4e2f48ed6411bd4b3a0ae737cc842e96877f5bf9428055ab4/lxml-6.0.2-cp312-cp312-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c33e66d44fe60e72397b487ee92e01da0d09ba2d66df8eae42d77b6d06e5eba0", size = 5654127, upload-time = "2025-09-22T04:01:29.629Z" }, - { url = "https://files.pythonhosted.org/packages/c6/d1/232b3309a02d60f11e71857778bfcd4acbdb86c07db8260caf7d008b08f8/lxml-6.0.2-cp312-cp312-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:90a345bbeaf9d0587a3aaffb7006aa39ccb6ff0e96a57286c0cb2fd1520ea192", size = 5253958, upload-time = "2025-09-22T04:01:31.535Z" }, - { url = "https://files.pythonhosted.org/packages/35/35/d955a070994725c4f7d80583a96cab9c107c57a125b20bb5f708fe941011/lxml-6.0.2-cp312-cp312-manylinux_2_31_armv7l.whl", hash = "sha256:064fdadaf7a21af3ed1dcaa106b854077fbeada827c18f72aec9346847cd65d0", size = 4711541, upload-time = "2025-09-22T04:01:33.801Z" }, - { url = "https://files.pythonhosted.org/packages/1e/be/667d17363b38a78c4bd63cfd4b4632029fd68d2c2dc81f25ce9eb5224dd5/lxml-6.0.2-cp312-cp312-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:fbc74f42c3525ac4ffa4b89cbdd00057b6196bcefe8bce794abd42d33a018092", size = 5267426, upload-time = "2025-09-22T04:01:35.639Z" }, - { url = "https://files.pythonhosted.org/packages/ea/47/62c70aa4a1c26569bc958c9ca86af2bb4e1f614e8c04fb2989833874f7ae/lxml-6.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6ddff43f702905a4e32bc24f3f2e2edfe0f8fde3277d481bffb709a4cced7a1f", size = 5064917, upload-time = "2025-09-22T04:01:37.448Z" }, - { url = "https://files.pythonhosted.org/packages/bd/55/6ceddaca353ebd0f1908ef712c597f8570cc9c58130dbb89903198e441fd/lxml-6.0.2-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:6da5185951d72e6f5352166e3da7b0dc27aa70bd1090b0eb3f7f7212b53f1bb8", size = 4788795, upload-time = "2025-09-22T04:01:39.165Z" }, - { url = "https://files.pythonhosted.org/packages/cf/e8/fd63e15da5e3fd4c2146f8bbb3c14e94ab850589beab88e547b2dbce22e1/lxml-6.0.2-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:57a86e1ebb4020a38d295c04fc79603c7899e0df71588043eb218722dabc087f", size = 5676759, upload-time = "2025-09-22T04:01:41.506Z" }, - { url = "https://files.pythonhosted.org/packages/76/47/b3ec58dc5c374697f5ba37412cd2728f427d056315d124dd4b61da381877/lxml-6.0.2-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:2047d8234fe735ab77802ce5f2297e410ff40f5238aec569ad7c8e163d7b19a6", size = 5255666, upload-time = "2025-09-22T04:01:43.363Z" }, - { url = "https://files.pythonhosted.org/packages/19/93/03ba725df4c3d72afd9596eef4a37a837ce8e4806010569bedfcd2cb68fd/lxml-6.0.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:6f91fd2b2ea15a6800c8e24418c0775a1694eefc011392da73bc6cef2623b322", size = 5277989, upload-time = "2025-09-22T04:01:45.215Z" }, - { url = "https://files.pythonhosted.org/packages/c6/80/c06de80bfce881d0ad738576f243911fccf992687ae09fd80b734712b39c/lxml-6.0.2-cp312-cp312-win32.whl", hash = "sha256:3ae2ce7d6fedfb3414a2b6c5e20b249c4c607f72cb8d2bb7cc9c6ec7c6f4e849", size = 3611456, upload-time = "2025-09-22T04:01:48.243Z" }, - { url = "https://files.pythonhosted.org/packages/f7/d7/0cdfb6c3e30893463fb3d1e52bc5f5f99684a03c29a0b6b605cfae879cd5/lxml-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:72c87e5ee4e58a8354fb9c7c84cbf95a1c8236c127a5d1b7683f04bed8361e1f", size = 4011793, upload-time = "2025-09-22T04:01:50.042Z" }, - { url = "https://files.pythonhosted.org/packages/ea/7b/93c73c67db235931527301ed3785f849c78991e2e34f3fd9a6663ffda4c5/lxml-6.0.2-cp312-cp312-win_arm64.whl", hash = "sha256:61cb10eeb95570153e0c0e554f58df92ecf5109f75eacad4a95baa709e26c3d6", size = 3672836, upload-time = "2025-09-22T04:01:52.145Z" }, - { url = "https://files.pythonhosted.org/packages/53/fd/4e8f0540608977aea078bf6d79f128e0e2c2bba8af1acf775c30baa70460/lxml-6.0.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:9b33d21594afab46f37ae58dfadd06636f154923c4e8a4d754b0127554eb2e77", size = 8648494, upload-time = "2025-09-22T04:01:54.242Z" }, - { url = "https://files.pythonhosted.org/packages/5d/f4/2a94a3d3dfd6c6b433501b8d470a1960a20ecce93245cf2db1706adf6c19/lxml-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:6c8963287d7a4c5c9a432ff487c52e9c5618667179c18a204bdedb27310f022f", size = 4661146, upload-time = "2025-09-22T04:01:56.282Z" }, - { url = "https://files.pythonhosted.org/packages/25/2e/4efa677fa6b322013035d38016f6ae859d06cac67437ca7dc708a6af7028/lxml-6.0.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:1941354d92699fb5ffe6ed7b32f9649e43c2feb4b97205f75866f7d21aa91452", size = 4946932, upload-time = "2025-09-22T04:01:58.989Z" }, - { url = "https://files.pythonhosted.org/packages/ce/0f/526e78a6d38d109fdbaa5049c62e1d32fdd70c75fb61c4eadf3045d3d124/lxml-6.0.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:bb2f6ca0ae2d983ded09357b84af659c954722bbf04dea98030064996d156048", size = 5100060, upload-time = "2025-09-22T04:02:00.812Z" }, - { url = "https://files.pythonhosted.org/packages/81/76/99de58d81fa702cc0ea7edae4f4640416c2062813a00ff24bd70ac1d9c9b/lxml-6.0.2-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:eb2a12d704f180a902d7fa778c6d71f36ceb7b0d317f34cdc76a5d05aa1dd1df", size = 5019000, upload-time = "2025-09-22T04:02:02.671Z" }, - { url = "https://files.pythonhosted.org/packages/b5/35/9e57d25482bc9a9882cb0037fdb9cc18f4b79d85df94fa9d2a89562f1d25/lxml-6.0.2-cp313-cp313-manylinux_2_26_i686.manylinux_2_28_i686.whl", hash = "sha256:6ec0e3f745021bfed19c456647f0298d60a24c9ff86d9d051f52b509663feeb1", size = 5348496, upload-time = "2025-09-22T04:02:04.904Z" }, - { url = "https://files.pythonhosted.org/packages/a6/8e/cb99bd0b83ccc3e8f0f528e9aa1f7a9965dfec08c617070c5db8d63a87ce/lxml-6.0.2-cp313-cp313-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:846ae9a12d54e368933b9759052d6206a9e8b250291109c48e350c1f1f49d916", size = 5643779, upload-time = "2025-09-22T04:02:06.689Z" }, - { url = "https://files.pythonhosted.org/packages/d0/34/9e591954939276bb679b73773836c6684c22e56d05980e31d52a9a8deb18/lxml-6.0.2-cp313-cp313-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ef9266d2aa545d7374938fb5c484531ef5a2ec7f2d573e62f8ce722c735685fd", size = 5244072, upload-time = "2025-09-22T04:02:08.587Z" }, - { url = "https://files.pythonhosted.org/packages/8d/27/b29ff065f9aaca443ee377aff699714fcbffb371b4fce5ac4ca759e436d5/lxml-6.0.2-cp313-cp313-manylinux_2_31_armv7l.whl", hash = "sha256:4077b7c79f31755df33b795dc12119cb557a0106bfdab0d2c2d97bd3cf3dffa6", size = 4718675, upload-time = "2025-09-22T04:02:10.783Z" }, - { url = "https://files.pythonhosted.org/packages/2b/9f/f756f9c2cd27caa1a6ef8c32ae47aadea697f5c2c6d07b0dae133c244fbe/lxml-6.0.2-cp313-cp313-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:a7c5d5e5f1081955358533be077166ee97ed2571d6a66bdba6ec2f609a715d1a", size = 5255171, upload-time = "2025-09-22T04:02:12.631Z" }, - { url = "https://files.pythonhosted.org/packages/61/46/bb85ea42d2cb1bd8395484fd72f38e3389611aa496ac7772da9205bbda0e/lxml-6.0.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:8f8d0cbd0674ee89863a523e6994ac25fd5be9c8486acfc3e5ccea679bad2679", size = 5057175, upload-time = "2025-09-22T04:02:14.718Z" }, - { url = "https://files.pythonhosted.org/packages/95/0c/443fc476dcc8e41577f0af70458c50fe299a97bb6b7505bb1ae09aa7f9ac/lxml-6.0.2-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:2cbcbf6d6e924c28f04a43f3b6f6e272312a090f269eff68a2982e13e5d57659", size = 4785688, upload-time = "2025-09-22T04:02:16.957Z" }, - { url = "https://files.pythonhosted.org/packages/48/78/6ef0b359d45bb9697bc5a626e1992fa5d27aa3f8004b137b2314793b50a0/lxml-6.0.2-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:dfb874cfa53340009af6bdd7e54ebc0d21012a60a4e65d927c2e477112e63484", size = 5660655, upload-time = "2025-09-22T04:02:18.815Z" }, - { url = "https://files.pythonhosted.org/packages/ff/ea/e1d33808f386bc1339d08c0dcada6e4712d4ed8e93fcad5f057070b7988a/lxml-6.0.2-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:fb8dae0b6b8b7f9e96c26fdd8121522ce5de9bb5538010870bd538683d30e9a2", size = 5247695, upload-time = "2025-09-22T04:02:20.593Z" }, - { url = "https://files.pythonhosted.org/packages/4f/47/eba75dfd8183673725255247a603b4ad606f4ae657b60c6c145b381697da/lxml-6.0.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:358d9adae670b63e95bc59747c72f4dc97c9ec58881d4627fe0120da0f90d314", size = 5269841, upload-time = "2025-09-22T04:02:22.489Z" }, - { url = "https://files.pythonhosted.org/packages/76/04/5c5e2b8577bc936e219becb2e98cdb1aca14a4921a12995b9d0c523502ae/lxml-6.0.2-cp313-cp313-win32.whl", hash = "sha256:e8cd2415f372e7e5a789d743d133ae474290a90b9023197fd78f32e2dc6873e2", size = 3610700, upload-time = "2025-09-22T04:02:24.465Z" }, - { url = "https://files.pythonhosted.org/packages/fe/0a/4643ccc6bb8b143e9f9640aa54e38255f9d3b45feb2cbe7ae2ca47e8782e/lxml-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:b30d46379644fbfc3ab81f8f82ae4de55179414651f110a1514f0b1f8f6cb2d7", size = 4010347, upload-time = "2025-09-22T04:02:26.286Z" }, - { url = "https://files.pythonhosted.org/packages/31/ef/dcf1d29c3f530577f61e5fe2f1bd72929acf779953668a8a47a479ae6f26/lxml-6.0.2-cp313-cp313-win_arm64.whl", hash = "sha256:13dcecc9946dca97b11b7c40d29fba63b55ab4170d3c0cf8c0c164343b9bfdcf", size = 3671248, upload-time = "2025-09-22T04:02:27.918Z" }, - { url = "https://files.pythonhosted.org/packages/03/15/d4a377b385ab693ce97b472fe0c77c2b16ec79590e688b3ccc71fba19884/lxml-6.0.2-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:b0c732aa23de8f8aec23f4b580d1e52905ef468afb4abeafd3fec77042abb6fe", size = 8659801, upload-time = "2025-09-22T04:02:30.113Z" }, - { url = "https://files.pythonhosted.org/packages/c8/e8/c128e37589463668794d503afaeb003987373c5f94d667124ffd8078bbd9/lxml-6.0.2-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:4468e3b83e10e0317a89a33d28f7aeba1caa4d1a6fd457d115dd4ffe90c5931d", size = 4659403, upload-time = "2025-09-22T04:02:32.119Z" }, - { url = "https://files.pythonhosted.org/packages/00/ce/74903904339decdf7da7847bb5741fc98a5451b42fc419a86c0c13d26fe2/lxml-6.0.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:abd44571493973bad4598a3be7e1d807ed45aa2adaf7ab92ab7c62609569b17d", size = 4966974, upload-time = "2025-09-22T04:02:34.155Z" }, - { url = "https://files.pythonhosted.org/packages/1f/d3/131dec79ce61c5567fecf82515bd9bc36395df42501b50f7f7f3bd065df0/lxml-6.0.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:370cd78d5855cfbffd57c422851f7d3864e6ae72d0da615fca4dad8c45d375a5", size = 5102953, upload-time = "2025-09-22T04:02:36.054Z" }, - { url = "https://files.pythonhosted.org/packages/3a/ea/a43ba9bb750d4ffdd885f2cd333572f5bb900cd2408b67fdda07e85978a0/lxml-6.0.2-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:901e3b4219fa04ef766885fb40fa516a71662a4c61b80c94d25336b4934b71c0", size = 5055054, upload-time = "2025-09-22T04:02:38.154Z" }, - { url = "https://files.pythonhosted.org/packages/60/23/6885b451636ae286c34628f70a7ed1fcc759f8d9ad382d132e1c8d3d9bfd/lxml-6.0.2-cp314-cp314-manylinux_2_26_i686.manylinux_2_28_i686.whl", hash = "sha256:a4bf42d2e4cf52c28cc1812d62426b9503cdb0c87a6de81442626aa7d69707ba", size = 5352421, upload-time = "2025-09-22T04:02:40.413Z" }, - { url = "https://files.pythonhosted.org/packages/48/5b/fc2ddfc94ddbe3eebb8e9af6e3fd65e2feba4967f6a4e9683875c394c2d8/lxml-6.0.2-cp314-cp314-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:b2c7fdaa4d7c3d886a42534adec7cfac73860b89b4e5298752f60aa5984641a0", size = 5673684, upload-time = "2025-09-22T04:02:42.288Z" }, - { url = "https://files.pythonhosted.org/packages/29/9c/47293c58cc91769130fbf85531280e8cc7868f7fbb6d92f4670071b9cb3e/lxml-6.0.2-cp314-cp314-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:98a5e1660dc7de2200b00d53fa00bcd3c35a3608c305d45a7bbcaf29fa16e83d", size = 5252463, upload-time = "2025-09-22T04:02:44.165Z" }, - { url = "https://files.pythonhosted.org/packages/9b/da/ba6eceb830c762b48e711ded880d7e3e89fc6c7323e587c36540b6b23c6b/lxml-6.0.2-cp314-cp314-manylinux_2_31_armv7l.whl", hash = "sha256:dc051506c30b609238d79eda75ee9cab3e520570ec8219844a72a46020901e37", size = 4698437, upload-time = "2025-09-22T04:02:46.524Z" }, - { url = "https://files.pythonhosted.org/packages/a5/24/7be3f82cb7990b89118d944b619e53c656c97dc89c28cfb143fdb7cd6f4d/lxml-6.0.2-cp314-cp314-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:8799481bbdd212470d17513a54d568f44416db01250f49449647b5ab5b5dccb9", size = 5269890, upload-time = "2025-09-22T04:02:48.812Z" }, - { url = "https://files.pythonhosted.org/packages/1b/bd/dcfb9ea1e16c665efd7538fc5d5c34071276ce9220e234217682e7d2c4a5/lxml-6.0.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:9261bb77c2dab42f3ecd9103951aeca2c40277701eb7e912c545c1b16e0e4917", size = 5097185, upload-time = "2025-09-22T04:02:50.746Z" }, - { url = "https://files.pythonhosted.org/packages/21/04/a60b0ff9314736316f28316b694bccbbabe100f8483ad83852d77fc7468e/lxml-6.0.2-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:65ac4a01aba353cfa6d5725b95d7aed6356ddc0a3cd734de00124d285b04b64f", size = 4745895, upload-time = "2025-09-22T04:02:52.968Z" }, - { url = "https://files.pythonhosted.org/packages/d6/bd/7d54bd1846e5a310d9c715921c5faa71cf5c0853372adf78aee70c8d7aa2/lxml-6.0.2-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:b22a07cbb82fea98f8a2fd814f3d1811ff9ed76d0fc6abc84eb21527596e7cc8", size = 5695246, upload-time = "2025-09-22T04:02:54.798Z" }, - { url = "https://files.pythonhosted.org/packages/fd/32/5643d6ab947bc371da21323acb2a6e603cedbe71cb4c99c8254289ab6f4e/lxml-6.0.2-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:d759cdd7f3e055d6bc8d9bec3ad905227b2e4c785dc16c372eb5b5e83123f48a", size = 5260797, upload-time = "2025-09-22T04:02:57.058Z" }, - { url = "https://files.pythonhosted.org/packages/33/da/34c1ec4cff1eea7d0b4cd44af8411806ed943141804ac9c5d565302afb78/lxml-6.0.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:945da35a48d193d27c188037a05fec5492937f66fb1958c24fc761fb9d40d43c", size = 5277404, upload-time = "2025-09-22T04:02:58.966Z" }, - { url = "https://files.pythonhosted.org/packages/82/57/4eca3e31e54dc89e2c3507e1cd411074a17565fa5ffc437c4ae0a00d439e/lxml-6.0.2-cp314-cp314-win32.whl", hash = "sha256:be3aaa60da67e6153eb15715cc2e19091af5dc75faef8b8a585aea372507384b", size = 3670072, upload-time = "2025-09-22T04:03:38.05Z" }, - { url = "https://files.pythonhosted.org/packages/e3/e0/c96cf13eccd20c9421ba910304dae0f619724dcf1702864fd59dd386404d/lxml-6.0.2-cp314-cp314-win_amd64.whl", hash = "sha256:fa25afbadead523f7001caf0c2382afd272c315a033a7b06336da2637d92d6ed", size = 4080617, upload-time = "2025-09-22T04:03:39.835Z" }, - { url = "https://files.pythonhosted.org/packages/d5/5d/b3f03e22b3d38d6f188ef044900a9b29b2fe0aebb94625ce9fe244011d34/lxml-6.0.2-cp314-cp314-win_arm64.whl", hash = "sha256:063eccf89df5b24e361b123e257e437f9e9878f425ee9aae3144c77faf6da6d8", size = 3754930, upload-time = "2025-09-22T04:03:41.565Z" }, - { url = "https://files.pythonhosted.org/packages/5e/5c/42c2c4c03554580708fc738d13414801f340c04c3eff90d8d2d227145275/lxml-6.0.2-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:6162a86d86893d63084faaf4ff937b3daea233e3682fb4474db07395794fa80d", size = 8910380, upload-time = "2025-09-22T04:03:01.645Z" }, - { url = "https://files.pythonhosted.org/packages/bf/4f/12df843e3e10d18d468a7557058f8d3733e8b6e12401f30b1ef29360740f/lxml-6.0.2-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:414aaa94e974e23a3e92e7ca5b97d10c0cf37b6481f50911032c69eeb3991bba", size = 4775632, upload-time = "2025-09-22T04:03:03.814Z" }, - { url = "https://files.pythonhosted.org/packages/e4/0c/9dc31e6c2d0d418483cbcb469d1f5a582a1cd00a1f4081953d44051f3c50/lxml-6.0.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:48461bd21625458dd01e14e2c38dd0aea69addc3c4f960c30d9f59d7f93be601", size = 4975171, upload-time = "2025-09-22T04:03:05.651Z" }, - { url = "https://files.pythonhosted.org/packages/e7/2b/9b870c6ca24c841bdd887504808f0417aa9d8d564114689266f19ddf29c8/lxml-6.0.2-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:25fcc59afc57d527cfc78a58f40ab4c9b8fd096a9a3f964d2781ffb6eb33f4ed", size = 5110109, upload-time = "2025-09-22T04:03:07.452Z" }, - { url = "https://files.pythonhosted.org/packages/bf/0c/4f5f2a4dd319a178912751564471355d9019e220c20d7db3fb8307ed8582/lxml-6.0.2-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5179c60288204e6ddde3f774a93350177e08876eaf3ab78aa3a3649d43eb7d37", size = 5041061, upload-time = "2025-09-22T04:03:09.297Z" }, - { url = "https://files.pythonhosted.org/packages/12/64/554eed290365267671fe001a20d72d14f468ae4e6acef1e179b039436967/lxml-6.0.2-cp314-cp314t-manylinux_2_26_i686.manylinux_2_28_i686.whl", hash = "sha256:967aab75434de148ec80597b75062d8123cadf2943fb4281f385141e18b21338", size = 5306233, upload-time = "2025-09-22T04:03:11.651Z" }, - { url = "https://files.pythonhosted.org/packages/7a/31/1d748aa275e71802ad9722df32a7a35034246b42c0ecdd8235412c3396ef/lxml-6.0.2-cp314-cp314t-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:d100fcc8930d697c6561156c6810ab4a508fb264c8b6779e6e61e2ed5e7558f9", size = 5604739, upload-time = "2025-09-22T04:03:13.592Z" }, - { url = "https://files.pythonhosted.org/packages/8f/41/2c11916bcac09ed561adccacceaedd2bf0e0b25b297ea92aab99fd03d0fa/lxml-6.0.2-cp314-cp314t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2ca59e7e13e5981175b8b3e4ab84d7da57993eeff53c07764dcebda0d0e64ecd", size = 5225119, upload-time = "2025-09-22T04:03:15.408Z" }, - { url = "https://files.pythonhosted.org/packages/99/05/4e5c2873d8f17aa018e6afde417c80cc5d0c33be4854cce3ef5670c49367/lxml-6.0.2-cp314-cp314t-manylinux_2_31_armv7l.whl", hash = "sha256:957448ac63a42e2e49531b9d6c0fa449a1970dbc32467aaad46f11545be9af1d", size = 4633665, upload-time = "2025-09-22T04:03:17.262Z" }, - { url = "https://files.pythonhosted.org/packages/0f/c9/dcc2da1bebd6275cdc723b515f93edf548b82f36a5458cca3578bc899332/lxml-6.0.2-cp314-cp314t-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:b7fc49c37f1786284b12af63152fe1d0990722497e2d5817acfe7a877522f9a9", size = 5234997, upload-time = "2025-09-22T04:03:19.14Z" }, - { url = "https://files.pythonhosted.org/packages/9c/e2/5172e4e7468afca64a37b81dba152fc5d90e30f9c83c7c3213d6a02a5ce4/lxml-6.0.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e19e0643cc936a22e837f79d01a550678da8377d7d801a14487c10c34ee49c7e", size = 5090957, upload-time = "2025-09-22T04:03:21.436Z" }, - { url = "https://files.pythonhosted.org/packages/a5/b3/15461fd3e5cd4ddcb7938b87fc20b14ab113b92312fc97afe65cd7c85de1/lxml-6.0.2-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:1db01e5cf14345628e0cbe71067204db658e2fb8e51e7f33631f5f4735fefd8d", size = 4764372, upload-time = "2025-09-22T04:03:23.27Z" }, - { url = "https://files.pythonhosted.org/packages/05/33/f310b987c8bf9e61c4dd8e8035c416bd3230098f5e3cfa69fc4232de7059/lxml-6.0.2-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:875c6b5ab39ad5291588aed6925fac99d0097af0dd62f33c7b43736043d4a2ec", size = 5634653, upload-time = "2025-09-22T04:03:25.767Z" }, - { url = "https://files.pythonhosted.org/packages/70/ff/51c80e75e0bc9382158133bdcf4e339b5886c6ee2418b5199b3f1a61ed6d/lxml-6.0.2-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:cdcbed9ad19da81c480dfd6dd161886db6096083c9938ead313d94b30aadf272", size = 5233795, upload-time = "2025-09-22T04:03:27.62Z" }, - { url = "https://files.pythonhosted.org/packages/56/4d/4856e897df0d588789dd844dbed9d91782c4ef0b327f96ce53c807e13128/lxml-6.0.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:80dadc234ebc532e09be1975ff538d154a7fa61ea5031c03d25178855544728f", size = 5257023, upload-time = "2025-09-22T04:03:30.056Z" }, - { url = "https://files.pythonhosted.org/packages/0f/85/86766dfebfa87bea0ab78e9ff7a4b4b45225df4b4d3b8cc3c03c5cd68464/lxml-6.0.2-cp314-cp314t-win32.whl", hash = "sha256:da08e7bb297b04e893d91087df19638dc7a6bb858a954b0cc2b9f5053c922312", size = 3911420, upload-time = "2025-09-22T04:03:32.198Z" }, - { url = "https://files.pythonhosted.org/packages/fe/1a/b248b355834c8e32614650b8008c69ffeb0ceb149c793961dd8c0b991bb3/lxml-6.0.2-cp314-cp314t-win_amd64.whl", hash = "sha256:252a22982dca42f6155125ac76d3432e548a7625d56f5a273ee78a5057216eca", size = 4406837, upload-time = "2025-09-22T04:03:34.027Z" }, - { url = "https://files.pythonhosted.org/packages/92/aa/df863bcc39c5e0946263454aba394de8a9084dbaff8ad143846b0d844739/lxml-6.0.2-cp314-cp314t-win_arm64.whl", hash = "sha256:bb4c1847b303835d89d785a18801a883436cdfd5dc3d62947f9c49e24f0f5a2c", size = 3822205, upload-time = "2025-09-22T04:03:36.249Z" }, -] - -[[package]] -name = "markdown-it-py" -version = "4.0.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "mdurl" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/5b/f5/4ec618ed16cc4f8fb3b701563655a69816155e79e24a17b651541804721d/markdown_it_py-4.0.0.tar.gz", hash = "sha256:cb0a2b4aa34f932c007117b194e945bd74e0ec24133ceb5bac59009cda1cb9f3", size = 73070, upload-time = "2025-08-11T12:57:52.854Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/94/54/e7d793b573f298e1c9013b8c4dade17d481164aa517d1d7148619c2cedbf/markdown_it_py-4.0.0-py3-none-any.whl", hash = "sha256:87327c59b172c5011896038353a81343b6754500a08cd7a4973bb48c6d578147", size = 87321, upload-time = "2025-08-11T12:57:51.923Z" }, -] - -[[package]] -name = "marko" -version = "2.2.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e3/2f/050b6d485f052ddf17d76a41f9334d6fb2a8a85df35347a12d97ed3bc5c1/marko-2.2.2.tar.gz", hash = "sha256:6940308e655f63733ca518c47a68ec9510279dbb916c83616e4c4b5829f052e8", size = 143641, upload-time = "2026-01-05T11:04:41.935Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/83/f8/36d79bac5701e6786f9880c61bbe57574760a13c1af84ab71e5ed21faecc/marko-2.2.2-py3-none-any.whl", hash = "sha256:f064ae8c10416285ad1d96048dc11e98ef04e662d3342ae416f662b70aa7959e", size = 42701, upload-time = "2026-01-05T11:04:40.75Z" }, -] - -[[package]] -name = "markupsafe" -version = "3.0.3" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/7e/99/7690b6d4034fffd95959cbe0c02de8deb3098cc577c67bb6a24fe5d7caa7/markupsafe-3.0.3.tar.gz", hash = "sha256:722695808f4b6457b320fdc131280796bdceb04ab50fe1795cd540799ebe1698", size = 80313, upload-time = "2025-09-27T18:37:40.426Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/5a/72/147da192e38635ada20e0a2e1a51cf8823d2119ce8883f7053879c2199b5/markupsafe-3.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d53197da72cc091b024dd97249dfc7794d6a56530370992a5e1a08983ad9230e", size = 11615, upload-time = "2025-09-27T18:36:30.854Z" }, - { url = "https://files.pythonhosted.org/packages/9a/81/7e4e08678a1f98521201c3079f77db69fb552acd56067661f8c2f534a718/markupsafe-3.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1872df69a4de6aead3491198eaf13810b565bdbeec3ae2dc8780f14458ec73ce", size = 12020, upload-time = "2025-09-27T18:36:31.971Z" }, - { url = "https://files.pythonhosted.org/packages/1e/2c/799f4742efc39633a1b54a92eec4082e4f815314869865d876824c257c1e/markupsafe-3.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3a7e8ae81ae39e62a41ec302f972ba6ae23a5c5396c8e60113e9066ef893da0d", size = 24332, upload-time = "2025-09-27T18:36:32.813Z" }, - { url = "https://files.pythonhosted.org/packages/3c/2e/8d0c2ab90a8c1d9a24f0399058ab8519a3279d1bd4289511d74e909f060e/markupsafe-3.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d6dd0be5b5b189d31db7cda48b91d7e0a9795f31430b7f271219ab30f1d3ac9d", size = 22947, upload-time = "2025-09-27T18:36:33.86Z" }, - { url = "https://files.pythonhosted.org/packages/2c/54/887f3092a85238093a0b2154bd629c89444f395618842e8b0c41783898ea/markupsafe-3.0.3-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:94c6f0bb423f739146aec64595853541634bde58b2135f27f61c1ffd1cd4d16a", size = 21962, upload-time = "2025-09-27T18:36:35.099Z" }, - { url = "https://files.pythonhosted.org/packages/c9/2f/336b8c7b6f4a4d95e91119dc8521402461b74a485558d8f238a68312f11c/markupsafe-3.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:be8813b57049a7dc738189df53d69395eba14fb99345e0a5994914a3864c8a4b", size = 23760, upload-time = "2025-09-27T18:36:36.001Z" }, - { url = "https://files.pythonhosted.org/packages/32/43/67935f2b7e4982ffb50a4d169b724d74b62a3964bc1a9a527f5ac4f1ee2b/markupsafe-3.0.3-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:83891d0e9fb81a825d9a6d61e3f07550ca70a076484292a70fde82c4b807286f", size = 21529, upload-time = "2025-09-27T18:36:36.906Z" }, - { url = "https://files.pythonhosted.org/packages/89/e0/4486f11e51bbba8b0c041098859e869e304d1c261e59244baa3d295d47b7/markupsafe-3.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:77f0643abe7495da77fb436f50f8dab76dbc6e5fd25d39589a0f1fe6548bfa2b", size = 23015, upload-time = "2025-09-27T18:36:37.868Z" }, - { 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" }, - { 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]] -name = "mdurl" -version = "0.1.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d6/54/cfe61301667036ec958cb99bd3efefba235e65cdeb9c84d24a8293ba1d90/mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba", size = 8729, upload-time = "2022-08-14T12:40:10.846Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979, upload-time = "2022-08-14T12:40:09.779Z" }, -] - -[[package]] -name = "more-itertools" -version = "10.8.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ea/5d/38b681d3fce7a266dd9ab73c66959406d565b3e85f21d5e66e1181d93721/more_itertools-10.8.0.tar.gz", hash = "sha256:f638ddf8a1a0d134181275fb5d58b086ead7c6a72429ad725c67503f13ba30bd", size = 137431, upload-time = "2025-09-02T15:23:11.018Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a4/8e/469e5a4a2f5855992e425f3cb33804cc07bf18d48f2db061aec61ce50270/more_itertools-10.8.0-py3-none-any.whl", hash = "sha256:52d4362373dcf7c52546bc4af9a86ee7c4579df9a8dc268be0a2f949d376cc9b", size = 69667, upload-time = "2025-09-02T15:23:09.635Z" }, -] - -[[package]] -name = "mpire" -version = "2.10.2" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "pygments" }, - { name = "pywin32", marker = "sys_platform == 'win32'" }, - { name = "tqdm" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/3a/93/80ac75c20ce54c785648b4ed363c88f148bf22637e10c9863db4fbe73e74/mpire-2.10.2.tar.gz", hash = "sha256:f66a321e93fadff34585a4bfa05e95bd946cf714b442f51c529038eb45773d97", size = 271270, upload-time = "2024-05-07T14:00:31.815Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/20/14/1db1729ad6db4999c3a16c47937d601fcb909aaa4224f5eca5a2f145a605/mpire-2.10.2-py3-none-any.whl", hash = "sha256:d627707f7a8d02aa4c7f7d59de399dec5290945ddf7fbd36cbb1d6ebb37a51fb", size = 272756, upload-time = "2024-05-07T14:00:29.633Z" }, -] - -[package.optional-dependencies] -dill = [ - { name = "multiprocess" }, -] - -[[package]] -name = "mpmath" -version = "1.3.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e0/47/dd32fa426cc72114383ac549964eecb20ecfd886d1e5ccf5340b55b02f57/mpmath-1.3.0.tar.gz", hash = "sha256:7a28eb2a9774d00c7bc92411c19a89209d5da7c4c9a9e227be8330a23a25b91f", size = 508106, upload-time = "2023-03-07T16:47:11.061Z" } -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 = "multidict" -version = "6.7.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/1a/c2/c2d94cbe6ac1753f3fc980da97b3d930efe1da3af3c9f5125354436c073d/multidict-6.7.1.tar.gz", hash = "sha256:ec6652a1bee61c53a3e5776b6049172c53b6aaba34f18c9ad04f82712bac623d", size = 102010, upload-time = "2026-01-26T02:46:45.979Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/8d/9c/f20e0e2cf80e4b2e4b1c365bf5fe104ee633c751a724246262db8f1a0b13/multidict-6.7.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:a90f75c956e32891a4eda3639ce6dd86e87105271f43d43442a3aedf3cddf172", size = 76893, upload-time = "2026-01-26T02:43:52.754Z" }, - { url = "https://files.pythonhosted.org/packages/fe/cf/18ef143a81610136d3da8193da9d80bfe1cb548a1e2d1c775f26b23d024a/multidict-6.7.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:3fccb473e87eaa1382689053e4a4618e7ba7b9b9b8d6adf2027ee474597128cd", size = 45456, upload-time = "2026-01-26T02:43:53.893Z" }, - { url = "https://files.pythonhosted.org/packages/a9/65/1caac9d4cd32e8433908683446eebc953e82d22b03d10d41a5f0fefe991b/multidict-6.7.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b0fa96985700739c4c7853a43c0b3e169360d6855780021bfc6d0f1ce7c123e7", size = 43872, upload-time = "2026-01-26T02:43:55.041Z" }, - { url = "https://files.pythonhosted.org/packages/cf/3b/d6bd75dc4f3ff7c73766e04e705b00ed6dbbaccf670d9e05a12b006f5a21/multidict-6.7.1-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:cb2a55f408c3043e42b40cc8eecd575afa27b7e0b956dfb190de0f8499a57a53", size = 251018, upload-time = "2026-01-26T02:43:56.198Z" }, - { url = "https://files.pythonhosted.org/packages/fd/80/c959c5933adedb9ac15152e4067c702a808ea183a8b64cf8f31af8ad3155/multidict-6.7.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:eb0ce7b2a32d09892b3dd6cc44877a0d02a33241fafca5f25c8b6b62374f8b75", size = 258883, upload-time = "2026-01-26T02:43:57.499Z" }, - { url = "https://files.pythonhosted.org/packages/86/85/7ed40adafea3d4f1c8b916e3b5cc3a8e07dfcdcb9cd72800f4ed3ca1b387/multidict-6.7.1-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:c3a32d23520ee37bf327d1e1a656fec76a2edd5c038bf43eddfa0572ec49c60b", size = 242413, upload-time = "2026-01-26T02:43:58.755Z" }, - { url = "https://files.pythonhosted.org/packages/d2/57/b8565ff533e48595503c785f8361ff9a4fde4d67de25c207cd0ba3befd03/multidict-6.7.1-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:9c90fed18bffc0189ba814749fdcc102b536e83a9f738a9003e569acd540a733", size = 268404, upload-time = "2026-01-26T02:44:00.216Z" }, - { url = "https://files.pythonhosted.org/packages/e0/50/9810c5c29350f7258180dfdcb2e52783a0632862eb334c4896ac717cebcb/multidict-6.7.1-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:da62917e6076f512daccfbbde27f46fed1c98fee202f0559adec8ee0de67f71a", size = 269456, upload-time = "2026-01-26T02:44:02.202Z" }, - { url = "https://files.pythonhosted.org/packages/f3/8d/5e5be3ced1d12966fefb5c4ea3b2a5b480afcea36406559442c6e31d4a48/multidict-6.7.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bfde23ef6ed9db7eaee6c37dcec08524cb43903c60b285b172b6c094711b3961", size = 256322, upload-time = "2026-01-26T02:44:03.56Z" }, - { url = "https://files.pythonhosted.org/packages/31/6e/d8a26d81ac166a5592782d208dd90dfdc0a7a218adaa52b45a672b46c122/multidict-6.7.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3758692429e4e32f1ba0df23219cd0b4fc0a52f476726fff9337d1a57676a582", size = 253955, upload-time = "2026-01-26T02:44:04.845Z" }, - { url = "https://files.pythonhosted.org/packages/59/4c/7c672c8aad41534ba619bcd4ade7a0dc87ed6b8b5c06149b85d3dd03f0cd/multidict-6.7.1-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:398c1478926eca669f2fd6a5856b6de9c0acf23a2cb59a14c0ba5844fa38077e", size = 251254, upload-time = "2026-01-26T02:44:06.133Z" }, - { url = "https://files.pythonhosted.org/packages/7b/bd/84c24de512cbafbdbc39439f74e967f19570ce7924e3007174a29c348916/multidict-6.7.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:c102791b1c4f3ab36ce4101154549105a53dc828f016356b3e3bcae2e3a039d3", size = 252059, upload-time = "2026-01-26T02:44:07.518Z" }, - { url = "https://files.pythonhosted.org/packages/fa/ba/f5449385510825b73d01c2d4087bf6d2fccc20a2d42ac34df93191d3dd03/multidict-6.7.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:a088b62bd733e2ad12c50dad01b7d0166c30287c166e137433d3b410add807a6", size = 263588, upload-time = "2026-01-26T02:44:09.382Z" }, - { url = "https://files.pythonhosted.org/packages/d7/11/afc7c677f68f75c84a69fe37184f0f82fce13ce4b92f49f3db280b7e92b3/multidict-6.7.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:3d51ff4785d58d3f6c91bdbffcb5e1f7ddfda557727043aa20d20ec4f65e324a", size = 259642, upload-time = "2026-01-26T02:44:10.73Z" }, - { url = "https://files.pythonhosted.org/packages/2b/17/ebb9644da78c4ab36403739e0e6e0e30ebb135b9caf3440825001a0bddcb/multidict-6.7.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fc5907494fccf3e7d3f94f95c91d6336b092b5fc83811720fae5e2765890dfba", size = 251377, upload-time = "2026-01-26T02:44:12.042Z" }, - { 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/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" }, -] - -[[package]] -name = "multiprocess" -version = "0.70.18" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "dill" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/72/fd/2ae3826f5be24c6ed87266bc4e59c46ea5b059a103f3d7e7eb76a52aeecb/multiprocess-0.70.18.tar.gz", hash = "sha256:f9597128e6b3e67b23956da07cf3d2e5cba79e2f4e0fba8d7903636663ec6d0d", size = 1798503, upload-time = "2025-04-17T03:11:27.742Z" } -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" }, -] - -[[package]] -name = "narwhals" -version = "2.17.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/75/59/81d0f4cad21484083466f278e6b392addd9f4205b48d45b5c8771670ebf8/narwhals-2.17.0.tar.gz", hash = "sha256:ebd5bc95bcfa2f8e89a8ac09e2765a63055162837208e67b42d6eeb6651d5e67", size = 620306, upload-time = "2026-02-23T09:44:34.142Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/4b/27/20770bd6bf8fbe1e16f848ba21da9df061f38d2e6483952c29d2bb5d1d8b/narwhals-2.17.0-py3-none-any.whl", hash = "sha256:2ac5307b7c2b275a7d66eeda906b8605e3d7a760951e188dcfff86e8ebe083dd", size = 444897, upload-time = "2026-02-23T09:44:32.006Z" }, -] - -[[package]] -name = "networkx" -version = "3.6.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/6a/51/63fe664f3908c97be9d2e4f1158eb633317598cfa6e1fc14af5383f17512/networkx-3.6.1.tar.gz", hash = "sha256:26b7c357accc0c8cde558ad486283728b65b6a95d85ee1cd66bafab4c8168509", size = 2517025, upload-time = "2025-12-08T17:02:39.908Z" } -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 = "numpy" -version = "2.4.2" -source = { registry = "https://pypi.org/simple" } -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" }, - { 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-cu12" -version = "12.8.4.1" -source = { registry = "https://pypi.org/simple" } -wheels = [ - { 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-cu12" -version = "12.8.90" -source = { registry = "https://pypi.org/simple" } -wheels = [ - { 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-cu12" -version = "12.8.93" -source = { registry = "https://pypi.org/simple" } -wheels = [ - { 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-cu12" -version = "12.8.90" -source = { registry = "https://pypi.org/simple" } -wheels = [ - { 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-cu12" -version = "9.10.2.21" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "nvidia-cublas-cu12" }, -] -wheels = [ - { 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-cu12" -version = "11.3.3.83" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "nvidia-nvjitlink-cu12" }, -] -wheels = [ - { 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-cu12" -version = "1.13.1.3" -source = { registry = "https://pypi.org/simple" } -wheels = [ - { 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-cu12" -version = "10.3.9.90" -source = { registry = "https://pypi.org/simple" } -wheels = [ - { 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-cu12" -version = "11.7.3.90" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "nvidia-cublas-cu12" }, - { name = "nvidia-cusparse-cu12" }, - { name = "nvidia-nvjitlink-cu12" }, -] -wheels = [ - { 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-cu12" -version = "12.5.8.93" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "nvidia-nvjitlink-cu12" }, -] -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-nccl-cu12" -version = "2.27.5" -source = { registry = "https://pypi.org/simple" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/6e/89/f7a07dc961b60645dbbf42e80f2bc85ade7feb9a491b11a1e973aa00071f/nvidia_nccl_cu12-2.27.5-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:ad730cf15cb5d25fe849c6e6ca9eb5b76db16a80f13f425ac68d8e2e55624457", size = 322348229, upload-time = "2025-06-26T04:11:28.385Z" }, -] - -[[package]] -name = "nvidia-nvjitlink-cu12" -version = "12.8.93" -source = { registry = "https://pypi.org/simple" } -wheels = [ - { 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-nvshmem-cu12" -version = "3.4.5" -source = { registry = "https://pypi.org/simple" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/b5/09/6ea3ea725f82e1e76684f0708bbedd871fc96da89945adeba65c3835a64c/nvidia_nvshmem_cu12-3.4.5-py3-none-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:042f2500f24c021db8a06c5eec2539027d57460e1c1a762055a6554f72c369bd", size = 139103095, upload-time = "2025-09-06T00:32:31.266Z" }, -] - -[[package]] -name = "nvidia-nvtx-cu12" -version = "12.8.90" -source = { registry = "https://pypi.org/simple" } -wheels = [ - { 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 = "ocrmac" -version = "1.0.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "click" }, - { name = "pillow" }, - { name = "pyobjc-framework-vision" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/5e/07/3e15ab404f75875c5e48c47163300eb90b7409044d8711fc3aaf52503f2e/ocrmac-1.0.1.tar.gz", hash = "sha256:507fe5e4cbd67b2d03f6729a52bbc11f9d0b58241134eb958a5daafd4b9d93d9", size = 1454317, upload-time = "2026-01-08T16:44:26.412Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/37/15/7cc16507a2aca927abe395f1c545f17ae76b1f8ed44f43ebe4e8670ee203/ocrmac-1.0.1-py3-none-any.whl", hash = "sha256:1cef25426f7ae6bbd57fe3dc5553b25461ae8ad0d2b428a9bbadbf5907349024", size = 9955, upload-time = "2026-01-08T16:44:25.555Z" }, -] - -[[package]] -name = "omegaconf" -version = "2.3.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "antlr4-python3-runtime" }, - { name = "pyyaml" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/09/48/6388f1bb9da707110532cb70ec4d2822858ddfb44f1cdf1233c20a80ea4b/omegaconf-2.3.0.tar.gz", hash = "sha256:d5d4b6d29955cc50ad50c46dc269bcd92c6e00f5f90d23ab5fee7bfca4ba4cc7", size = 3298120, upload-time = "2022-12-08T20:59:22.753Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e3/94/1843518e420fa3ed6919835845df698c7e27e183cb997394e4a670973a65/omegaconf-2.3.0-py3-none-any.whl", hash = "sha256:7b4df175cdb08ba400f45cae3bdcae7ba8365db4d165fc65fd04b050ab63b46b", size = 79500, upload-time = "2022-12-08T20:59:19.686Z" }, -] - -[[package]] -name = "onnxruntime" -version = "1.24.3" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "flatbuffers" }, - { name = "numpy" }, - { name = "packaging" }, - { name = "protobuf" }, - { name = "sympy" }, -] -wheels = [ - { url = "https://files.pythonhosted.org/packages/d0/7f/dfdc4e52600fde4c02d59bfe98c4b057931c1114b701e175aee311a9bc11/onnxruntime-1.24.3-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:0d244227dc5e00a9ae15a7ac1eba4c4460d7876dfecafe73fb00db9f1d914d91", size = 17342578, upload-time = "2026-03-05T17:19:02.403Z" }, - { url = "https://files.pythonhosted.org/packages/1c/dc/1f5489f7b21817d4ad352bf7a92a252bd5b438bcbaa7ad20ea50814edc79/onnxruntime-1.24.3-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0a9847b870b6cb462652b547bc98c49e0efb67553410a082fde1918a38707452", size = 15150105, upload-time = "2026-03-05T16:34:56.897Z" }, - { url = "https://files.pythonhosted.org/packages/28/7c/fd253da53594ab8efbefdc85b3638620ab1a6aab6eb7028a513c853559ce/onnxruntime-1.24.3-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b354afce3333f2859c7e8706d84b6c552beac39233bcd3141ce7ab77b4cabb5d", size = 17237101, upload-time = "2026-03-05T17:18:02.561Z" }, - { url = "https://files.pythonhosted.org/packages/71/5f/eaabc5699eeed6a9188c5c055ac1948ae50138697a0428d562ac970d7db5/onnxruntime-1.24.3-cp312-cp312-win_amd64.whl", hash = "sha256:44ea708c34965439170d811267c51281d3897ecfc4aa0087fa25d4a4c3eb2e4a", size = 12597638, upload-time = "2026-03-05T17:18:52.141Z" }, - { url = "https://files.pythonhosted.org/packages/cc/5c/d8066c320b90610dbeb489a483b132c3b3879b2f93f949fb5d30cfa9b119/onnxruntime-1.24.3-cp312-cp312-win_arm64.whl", hash = "sha256:48d1092b44ca2ba6f9543892e7c422c15a568481403c10440945685faf27a8d8", size = 12270943, upload-time = "2026-03-05T17:18:42.006Z" }, - { url = "https://files.pythonhosted.org/packages/51/8d/487ece554119e2991242d4de55de7019ac6e47ee8dfafa69fcf41d37f8ed/onnxruntime-1.24.3-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:34a0ea5ff191d8420d9c1332355644148b1bf1a0d10c411af890a63a9f662aa7", size = 17342706, upload-time = "2026-03-05T16:35:10.813Z" }, - { url = "https://files.pythonhosted.org/packages/dd/25/8b444f463c1ac6106b889f6235c84f01eec001eaf689c3eff8c69cf48fae/onnxruntime-1.24.3-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1fd2ec7bb0fabe42f55e8337cfc9b1969d0d14622711aac73d69b4bd5abb5ed7", size = 15149956, upload-time = "2026-03-05T16:34:59.264Z" }, - { url = "https://files.pythonhosted.org/packages/34/fc/c9182a3e1ab46940dd4f30e61071f59eee8804c1f641f37ce6e173633fb6/onnxruntime-1.24.3-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:df8e70e732fe26346faaeec9147fa38bef35d232d2495d27e93dd221a2d473a9", size = 17237370, upload-time = "2026-03-05T17:18:05.258Z" }, - { url = "https://files.pythonhosted.org/packages/05/7e/3b549e1f4538514118bff98a1bcd6481dd9a17067f8c9af77151621c9a5c/onnxruntime-1.24.3-cp313-cp313-win_amd64.whl", hash = "sha256:2d3706719be6ad41d38a2250998b1d87758a20f6ea4546962e21dc79f1f1fd2b", size = 12597939, upload-time = "2026-03-05T17:18:54.772Z" }, - { url = "https://files.pythonhosted.org/packages/80/41/9696a5c4631a0caa75cc8bc4efd30938fd483694aa614898d087c3ee6d29/onnxruntime-1.24.3-cp313-cp313-win_arm64.whl", hash = "sha256:b082f3ba9519f0a1a1e754556bc7e635c7526ef81b98b3f78da4455d25f0437b", size = 12270705, upload-time = "2026-03-05T17:18:44.774Z" }, - { url = "https://files.pythonhosted.org/packages/b7/65/a26c5e59e3b210852ee04248cf8843c81fe7d40d94cf95343b66efe7eec9/onnxruntime-1.24.3-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:72f956634bc2e4bd2e8b006bef111849bd42c42dea37bd0a4c728404fdaf4d34", size = 15161796, upload-time = "2026-03-05T16:35:02.871Z" }, - { url = "https://files.pythonhosted.org/packages/f3/25/2035b4aa2ccb5be6acf139397731ec507c5f09e199ab39d3262b22ffa1ac/onnxruntime-1.24.3-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:78d1f25eed4ab9959db70a626ed50ee24cf497e60774f59f1207ac8556399c4d", size = 17240936, upload-time = "2026-03-05T17:18:09.534Z" }, - { url = "https://files.pythonhosted.org/packages/f9/a4/b3240ea84b92a3efb83d49cc16c04a17ade1ab47a6a95c4866d15bf0ac35/onnxruntime-1.24.3-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:a6b4bce87d96f78f0a9bf5cefab3303ae95d558c5bfea53d0bf7f9ea207880a8", size = 17344149, upload-time = "2026-03-05T16:35:13.382Z" }, - { url = "https://files.pythonhosted.org/packages/bb/4a/4b56757e51a56265e8c56764d9c36d7b435045e05e3b8a38bedfc5aedba3/onnxruntime-1.24.3-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d48f36c87b25ab3b2b4c88826c96cf1399a5631e3c2c03cc27d6a1e5d6b18eb4", size = 15151571, upload-time = "2026-03-05T16:35:05.679Z" }, - { url = "https://files.pythonhosted.org/packages/cf/14/c6fb84980cec8f682a523fcac7c2bdd6b311e7f342c61ce48d3a9cb87fc6/onnxruntime-1.24.3-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e104d33a409bf6e3f30f0e8198ec2aaf8d445b8395490a80f6e6ad56da98e400", size = 17238951, upload-time = "2026-03-05T17:18:12.394Z" }, - { url = "https://files.pythonhosted.org/packages/57/14/447e1400165aca8caf35dabd46540eb943c92f3065927bb4d9bcbc91e221/onnxruntime-1.24.3-cp314-cp314-win_amd64.whl", hash = "sha256:e785d73fbd17421c2513b0bb09eb25d88fa22c8c10c3f5d6060589efa5537c5b", size = 12903820, upload-time = "2026-03-05T17:18:57.123Z" }, - { url = "https://files.pythonhosted.org/packages/1d/ec/6b2fa5702e4bbba7339ca5787a9d056fc564a16079f8833cc6ba4798da1c/onnxruntime-1.24.3-cp314-cp314-win_arm64.whl", hash = "sha256:951e897a275f897a05ffbcaa615d98777882decaeb80c9216c68cdc62f849f53", size = 12594089, upload-time = "2026-03-05T17:18:47.169Z" }, - { url = "https://files.pythonhosted.org/packages/12/dc/cd06cba3ddad92ceb17b914a8e8d49836c79e38936e26bde6e368b62c1fe/onnxruntime-1.24.3-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4d4e70ce578aa214c74c7a7a9226bc8e229814db4a5b2d097333b81279ecde36", size = 15162789, upload-time = "2026-03-05T16:35:08.282Z" }, - { url = "https://files.pythonhosted.org/packages/a6/d6/413e98ab666c6fb9e8be7d1c6eb3bd403b0bea1b8d42db066dab98c7df07/onnxruntime-1.24.3-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:02aaf6ddfa784523b6873b4176a79d508e599efe12ab0ea1a3a6e7314408b7aa", size = 17240738, upload-time = "2026-03-05T17:18:15.203Z" }, -] - -[[package]] -name = "openai" -version = "2.26.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "anyio" }, - { name = "distro" }, - { name = "httpx" }, - { name = "jiter" }, - { name = "pydantic" }, - { name = "sniffio" }, - { name = "tqdm" }, - { name = "typing-extensions" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/d7/91/2a06c4e9597c338cac1e5e5a8dd6f29e1836fc229c4c523529dca387fda8/openai-2.26.0.tar.gz", hash = "sha256:b41f37c140ae0034a6e92b0c509376d907f3a66109935fba2c1b471a7c05a8fb", size = 666702, upload-time = "2026-03-05T23:17:35.874Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/c6/2e/3f73e8ca53718952222cacd0cf7eecc9db439d020f0c1fe7ae717e4e199a/openai-2.26.0-py3-none-any.whl", hash = "sha256:6151bf8f83802f036117f06cc8a57b3a4da60da9926826cc96747888b57f394f", size = 1136409, upload-time = "2026-03-05T23:17:34.072Z" }, -] - -[[package]] -name = "opencv-python" -version = "4.13.0.92" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "numpy" }, -] -wheels = [ - { url = "https://files.pythonhosted.org/packages/fc/6f/5a28fef4c4a382be06afe3938c64cc168223016fa520c5abaf37e8862aa5/opencv_python-4.13.0.92-cp37-abi3-macosx_13_0_arm64.whl", hash = "sha256:caf60c071ec391ba51ed00a4a920f996d0b64e3e46068aac1f646b5de0326a19", size = 46247052, upload-time = "2026-02-05T07:01:25.046Z" }, - { url = "https://files.pythonhosted.org/packages/08/ac/6c98c44c650b8114a0fb901691351cfb3956d502e8e9b5cd27f4ee7fbf2f/opencv_python-4.13.0.92-cp37-abi3-macosx_14_0_x86_64.whl", hash = "sha256:5868a8c028a0b37561579bfb8ac1875babdc69546d236249fff296a8c010ccf9", size = 32568781, upload-time = "2026-02-05T07:01:41.379Z" }, - { url = "https://files.pythonhosted.org/packages/3e/51/82fed528b45173bf629fa44effb76dff8bc9f4eeaee759038362dfa60237/opencv_python-4.13.0.92-cp37-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:0bc2596e68f972ca452d80f444bc404e08807d021fbba40df26b61b18e01838a", size = 47685527, upload-time = "2026-02-05T06:59:11.24Z" }, - { url = "https://files.pythonhosted.org/packages/db/07/90b34a8e2cf9c50fe8ed25cac9011cde0676b4d9d9c973751ac7616223a2/opencv_python-4.13.0.92-cp37-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:402033cddf9d294693094de5ef532339f14ce821da3ad7df7c9f6e8316da32cf", size = 70460872, upload-time = "2026-02-05T06:59:19.162Z" }, - { url = "https://files.pythonhosted.org/packages/02/6d/7a9cc719b3eaf4377b9c2e3edeb7ed3a81de41f96421510c0a169ca3cfd4/opencv_python-4.13.0.92-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:bccaabf9eb7f897ca61880ce2869dcd9b25b72129c28478e7f2a5e8dee945616", size = 46708208, upload-time = "2026-02-05T06:59:15.419Z" }, - { url = "https://files.pythonhosted.org/packages/fd/55/b3b49a1b97aabcfbbd6c7326df9cb0b6fa0c0aefa8e89d500939e04aa229/opencv_python-4.13.0.92-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:620d602b8f7d8b8dab5f4b99c6eb353e78d3fb8b0f53db1bd258bb1aa001c1d5", size = 72927042, upload-time = "2026-02-05T06:59:23.389Z" }, - { url = "https://files.pythonhosted.org/packages/fb/17/de5458312bcb07ddf434d7bfcb24bb52c59635ad58c6e7c751b48949b009/opencv_python-4.13.0.92-cp37-abi3-win32.whl", hash = "sha256:372fe164a3148ac1ca51e5f3ad0541a4a276452273f503441d718fab9c5e5f59", size = 30932638, upload-time = "2026-02-05T07:02:14.98Z" }, - { url = "https://files.pythonhosted.org/packages/e9/a5/1be1516390333ff9be3a9cb648c9f33df79d5096e5884b5df71a588af463/opencv_python-4.13.0.92-cp37-abi3-win_amd64.whl", hash = "sha256:423d934c9fafb91aad38edf26efb46da91ffbc05f3f59c4b0c72e699720706f5", size = 40212062, upload-time = "2026-02-05T07:02:12.724Z" }, -] - -[[package]] -name = "openpyxl" -version = "3.1.5" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "et-xmlfile" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/3d/f9/88d94a75de065ea32619465d2f77b29a0469500e99012523b91cc4141cd1/openpyxl-3.1.5.tar.gz", hash = "sha256:cf0e3cf56142039133628b5acffe8ef0c12bc902d2aadd3e0fe5878dc08d1050", size = 186464, upload-time = "2024-06-28T14:03:44.161Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/c0/da/977ded879c29cbd04de313843e76868e6e13408a94ed6b987245dc7c8506/openpyxl-3.1.5-py2.py3-none-any.whl", hash = "sha256:5282c12b107bffeef825f4617dc029afaf41d0ea60823bbb665ef3079dc79de2", size = 250910, upload-time = "2024-06-28T14:03:41.161Z" }, -] - -[[package]] -name = "orjson" -version = "3.11.7" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/53/45/b268004f745ede84e5798b48ee12b05129d19235d0e15267aa57dcdb400b/orjson-3.11.7.tar.gz", hash = "sha256:9b1a67243945819ce55d24a30b59d6a168e86220452d2c96f4d1f093e71c0c49", size = 6144992, upload-time = "2026-02-02T15:38:49.29Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/80/bf/76f4f1665f6983385938f0e2a5d7efa12a58171b8456c252f3bae8a4cf75/orjson-3.11.7-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:bd03ea7606833655048dab1a00734a2875e3e86c276e1d772b2a02556f0d895f", size = 228545, upload-time = "2026-02-02T15:37:46.376Z" }, - { url = "https://files.pythonhosted.org/packages/79/53/6c72c002cb13b5a978a068add59b25a8bdf2800ac1c9c8ecdb26d6d97064/orjson-3.11.7-cp312-cp312-macosx_15_0_arm64.whl", hash = "sha256:89e440ebc74ce8ab5c7bc4ce6757b4a6b1041becb127df818f6997b5c71aa60b", size = 125224, upload-time = "2026-02-02T15:37:47.697Z" }, - { url = "https://files.pythonhosted.org/packages/2c/83/10e48852865e5dd151bdfe652c06f7da484578ed02c5fca938e3632cb0b8/orjson-3.11.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5ede977b5fe5ac91b1dffc0a517ca4542d2ec8a6a4ff7b2652d94f640796342a", size = 128154, upload-time = "2026-02-02T15:37:48.954Z" }, - { url = "https://files.pythonhosted.org/packages/6e/52/a66e22a2b9abaa374b4a081d410edab6d1e30024707b87eab7c734afe28d/orjson-3.11.7-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b7b1dae39230a393df353827c855a5f176271c23434cfd2db74e0e424e693e10", size = 123548, upload-time = "2026-02-02T15:37:50.187Z" }, - { url = "https://files.pythonhosted.org/packages/de/38/605d371417021359f4910c496f764c48ceb8997605f8c25bf1dfe58c0ebe/orjson-3.11.7-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ed46f17096e28fb28d2975834836a639af7278aa87c84f68ab08fbe5b8bd75fa", size = 129000, upload-time = "2026-02-02T15:37:51.426Z" }, - { url = "https://files.pythonhosted.org/packages/44/98/af32e842b0ffd2335c89714d48ca4e3917b42f5d6ee5537832e069a4b3ac/orjson-3.11.7-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3726be79e36e526e3d9c1aceaadbfb4a04ee80a72ab47b3f3c17fefb9812e7b8", size = 141686, upload-time = "2026-02-02T15:37:52.607Z" }, - { url = "https://files.pythonhosted.org/packages/96/0b/fc793858dfa54be6feee940c1463370ece34b3c39c1ca0aa3845f5ba9892/orjson-3.11.7-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0724e265bc548af1dedebd9cb3d24b4e1c1e685a343be43e87ba922a5c5fff2f", size = 130812, upload-time = "2026-02-02T15:37:53.944Z" }, - { url = "https://files.pythonhosted.org/packages/dc/91/98a52415059db3f374757d0b7f0f16e3b5cd5976c90d1c2b56acaea039e6/orjson-3.11.7-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e7745312efa9e11c17fbd3cb3097262d079da26930ae9ae7ba28fb738367cbad", size = 133440, upload-time = "2026-02-02T15:37:55.615Z" }, - { url = "https://files.pythonhosted.org/packages/dc/b6/cb540117bda61791f46381f8c26c8f93e802892830a6055748d3bb1925ab/orjson-3.11.7-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:f904c24bdeabd4298f7a977ef14ca2a022ca921ed670b92ecd16ab6f3d01f867", size = 138386, upload-time = "2026-02-02T15:37:56.814Z" }, - { url = "https://files.pythonhosted.org/packages/63/1a/50a3201c334a7f17c231eee5f841342190723794e3b06293f26e7cf87d31/orjson-3.11.7-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:b9fc4d0f81f394689e0814617aadc4f2ea0e8025f38c226cbf22d3b5ddbf025d", size = 408853, upload-time = "2026-02-02T15:37:58.291Z" }, - { url = "https://files.pythonhosted.org/packages/87/cd/8de1c67d0be44fdc22701e5989c0d015a2adf391498ad42c4dc589cd3013/orjson-3.11.7-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:849e38203e5be40b776ed2718e587faf204d184fc9a008ae441f9442320c0cab", size = 144130, upload-time = "2026-02-02T15:38:00.163Z" }, - { url = "https://files.pythonhosted.org/packages/0f/fe/d605d700c35dd55f51710d159fc54516a280923cd1b7e47508982fbb387d/orjson-3.11.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:4682d1db3bcebd2b64757e0ddf9e87ae5f00d29d16c5cdf3a62f561d08cc3dd2", size = 134818, upload-time = "2026-02-02T15:38:01.507Z" }, - { url = "https://files.pythonhosted.org/packages/e4/e4/15ecc67edb3ddb3e2f46ae04475f2d294e8b60c1825fbe28a428b93b3fbd/orjson-3.11.7-cp312-cp312-win32.whl", hash = "sha256:f4f7c956b5215d949a1f65334cf9d7612dde38f20a95f2315deef167def91a6f", size = 127923, upload-time = "2026-02-02T15:38:02.75Z" }, - { url = "https://files.pythonhosted.org/packages/34/70/2e0855361f76198a3965273048c8e50a9695d88cd75811a5b46444895845/orjson-3.11.7-cp312-cp312-win_amd64.whl", hash = "sha256:bf742e149121dc5648ba0a08ea0871e87b660467ef168a3a5e53bc1fbd64bb74", size = 125007, upload-time = "2026-02-02T15:38:04.032Z" }, - { url = "https://files.pythonhosted.org/packages/68/40/c2051bd19fc467610fed469dc29e43ac65891571138f476834ca192bc290/orjson-3.11.7-cp312-cp312-win_arm64.whl", hash = "sha256:26c3b9132f783b7d7903bf1efb095fed8d4a3a85ec0d334ee8beff3d7a4749d5", size = 126089, upload-time = "2026-02-02T15:38:05.297Z" }, - { url = "https://files.pythonhosted.org/packages/89/25/6e0e52cac5aab51d7b6dcd257e855e1dec1c2060f6b28566c509b4665f62/orjson-3.11.7-cp313-cp313-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:1d98b30cc1313d52d4af17d9c3d307b08389752ec5f2e5febdfada70b0f8c733", size = 228390, upload-time = "2026-02-02T15:38:06.8Z" }, - { url = "https://files.pythonhosted.org/packages/a5/29/a77f48d2fc8a05bbc529e5ff481fb43d914f9e383ea2469d4f3d51df3d00/orjson-3.11.7-cp313-cp313-macosx_15_0_arm64.whl", hash = "sha256:d897e81f8d0cbd2abb82226d1860ad2e1ab3ff16d7b08c96ca00df9d45409ef4", size = 125189, upload-time = "2026-02-02T15:38:08.181Z" }, - { url = "https://files.pythonhosted.org/packages/89/25/0a16e0729a0e6a1504f9d1a13cdd365f030068aab64cec6958396b9969d7/orjson-3.11.7-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:814be4b49b228cfc0b3c565acf642dd7d13538f966e3ccde61f4f55be3e20785", size = 128106, upload-time = "2026-02-02T15:38:09.41Z" }, - { url = "https://files.pythonhosted.org/packages/66/da/a2e505469d60666a05ab373f1a6322eb671cb2ba3a0ccfc7d4bc97196787/orjson-3.11.7-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d06e5c5fed5caedd2e540d62e5b1c25e8c82431b9e577c33537e5fa4aa909539", size = 123363, upload-time = "2026-02-02T15:38:10.73Z" }, - { url = "https://files.pythonhosted.org/packages/23/bf/ed73f88396ea35c71b38961734ea4a4746f7ca0768bf28fd551d37e48dd0/orjson-3.11.7-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:31c80ce534ac4ea3739c5ee751270646cbc46e45aea7576a38ffec040b4029a1", size = 129007, upload-time = "2026-02-02T15:38:12.138Z" }, - { url = "https://files.pythonhosted.org/packages/73/3c/b05d80716f0225fc9008fbf8ab22841dcc268a626aa550561743714ce3bf/orjson-3.11.7-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f50979824bde13d32b4320eedd513431c921102796d86be3eee0b58e58a3ecd1", size = 141667, upload-time = "2026-02-02T15:38:13.398Z" }, - { url = "https://files.pythonhosted.org/packages/61/e8/0be9b0addd9bf86abfc938e97441dcd0375d494594b1c8ad10fe57479617/orjson-3.11.7-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9e54f3808e2b6b945078c41aa8d9b5834b28c50843846e97807e5adb75fa9705", size = 130832, upload-time = "2026-02-02T15:38:14.698Z" }, - { url = "https://files.pythonhosted.org/packages/c9/ec/c68e3b9021a31d9ec15a94931db1410136af862955854ed5dd7e7e4f5bff/orjson-3.11.7-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a12b80df61aab7b98b490fe9e4879925ba666fccdfcd175252ce4d9035865ace", size = 133373, upload-time = "2026-02-02T15:38:16.109Z" }, - { url = "https://files.pythonhosted.org/packages/d2/45/f3466739aaafa570cc8e77c6dbb853c48bf56e3b43738020e2661e08b0ac/orjson-3.11.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:996b65230271f1a97026fd0e6a753f51fbc0c335d2ad0c6201f711b0da32693b", size = 138307, upload-time = "2026-02-02T15:38:17.453Z" }, - { url = "https://files.pythonhosted.org/packages/e1/84/9f7f02288da1ffb31405c1be07657afd1eecbcb4b64ee2817b6fe0f785fa/orjson-3.11.7-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:ab49d4b2a6a1d415ddb9f37a21e02e0d5dbfe10b7870b21bf779fc21e9156157", size = 408695, upload-time = "2026-02-02T15:38:18.831Z" }, - { url = "https://files.pythonhosted.org/packages/18/07/9dd2f0c0104f1a0295ffbe912bc8d63307a539b900dd9e2c48ef7810d971/orjson-3.11.7-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:390a1dce0c055ddf8adb6aa94a73b45a4a7d7177b5c584b8d1c1947f2ba60fb3", size = 144099, upload-time = "2026-02-02T15:38:20.28Z" }, - { url = "https://files.pythonhosted.org/packages/a5/66/857a8e4a3292e1f7b1b202883bcdeb43a91566cf59a93f97c53b44bd6801/orjson-3.11.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:1eb80451a9c351a71dfaf5b7ccc13ad065405217726b59fdbeadbcc544f9d223", size = 134806, upload-time = "2026-02-02T15:38:22.186Z" }, - { url = "https://files.pythonhosted.org/packages/0a/5b/6ebcf3defc1aab3a338ca777214966851e92efb1f30dc7fc8285216e6d1b/orjson-3.11.7-cp313-cp313-win32.whl", hash = "sha256:7477aa6a6ec6139c5cb1cc7b214643592169a5494d200397c7fc95d740d5fcf3", size = 127914, upload-time = "2026-02-02T15:38:23.511Z" }, - { url = "https://files.pythonhosted.org/packages/00/04/c6f72daca5092e3117840a1b1e88dfc809cc1470cf0734890d0366b684a1/orjson-3.11.7-cp313-cp313-win_amd64.whl", hash = "sha256:b9f95dcdea9d4f805daa9ddf02617a89e484c6985fa03055459f90e87d7a0757", size = 124986, upload-time = "2026-02-02T15:38:24.836Z" }, - { url = "https://files.pythonhosted.org/packages/03/ba/077a0f6f1085d6b806937246860fafbd5b17f3919c70ee3f3d8d9c713f38/orjson-3.11.7-cp313-cp313-win_arm64.whl", hash = "sha256:800988273a014a0541483dc81021247d7eacb0c845a9d1a34a422bc718f41539", size = 126045, upload-time = "2026-02-02T15:38:26.216Z" }, - { url = "https://files.pythonhosted.org/packages/e9/1e/745565dca749813db9a093c5ebc4bac1a9475c64d54b95654336ac3ed961/orjson-3.11.7-cp314-cp314-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:de0a37f21d0d364954ad5de1970491d7fbd0fb1ef7417d4d56a36dc01ba0c0a0", size = 228391, upload-time = "2026-02-02T15:38:27.757Z" }, - { url = "https://files.pythonhosted.org/packages/46/19/e40f6225da4d3aa0c8dc6e5219c5e87c2063a560fe0d72a88deb59776794/orjson-3.11.7-cp314-cp314-macosx_15_0_arm64.whl", hash = "sha256:c2428d358d85e8da9d37cba18b8c4047c55222007a84f97156a5b22028dfbfc0", size = 125188, upload-time = "2026-02-02T15:38:29.241Z" }, - { url = "https://files.pythonhosted.org/packages/9d/7e/c4de2babef2c0817fd1f048fd176aa48c37bec8aef53d2fa932983032cce/orjson-3.11.7-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3c4bc6c6ac52cdaa267552544c73e486fecbd710b7ac09bc024d5a78555a22f6", size = 128097, upload-time = "2026-02-02T15:38:30.618Z" }, - { url = "https://files.pythonhosted.org/packages/eb/74/233d360632bafd2197f217eee7fb9c9d0229eac0c18128aee5b35b0014fe/orjson-3.11.7-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bd0d68edd7dfca1b2eca9361a44ac9f24b078de3481003159929a0573f21a6bf", size = 123364, upload-time = "2026-02-02T15:38:32.363Z" }, - { url = "https://files.pythonhosted.org/packages/79/51/af79504981dd31efe20a9e360eb49c15f06df2b40e7f25a0a52d9ae888e8/orjson-3.11.7-cp314-cp314-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:623ad1b9548ef63886319c16fa317848e465a21513b31a6ad7b57443c3e0dcf5", size = 129076, upload-time = "2026-02-02T15:38:33.68Z" }, - { url = "https://files.pythonhosted.org/packages/67/e2/da898eb68b72304f8de05ca6715870d09d603ee98d30a27e8a9629abc64b/orjson-3.11.7-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6e776b998ac37c0396093d10290e60283f59cfe0fc3fccbd0ccc4bd04dd19892", size = 141705, upload-time = "2026-02-02T15:38:34.989Z" }, - { url = "https://files.pythonhosted.org/packages/c5/89/15364d92acb3d903b029e28d834edb8780c2b97404cbf7929aa6b9abdb24/orjson-3.11.7-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:652c6c3af76716f4a9c290371ba2e390ede06f6603edb277b481daf37f6f464e", size = 130855, upload-time = "2026-02-02T15:38:36.379Z" }, - { url = "https://files.pythonhosted.org/packages/c2/8b/ecdad52d0b38d4b8f514be603e69ccd5eacf4e7241f972e37e79792212ec/orjson-3.11.7-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a56df3239294ea5964adf074c54bcc4f0ccd21636049a2cf3ca9cf03b5d03cf1", size = 133386, upload-time = "2026-02-02T15:38:37.704Z" }, - { url = "https://files.pythonhosted.org/packages/b9/0e/45e1dcf10e17d0924b7c9162f87ec7b4ca79e28a0548acf6a71788d3e108/orjson-3.11.7-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:bda117c4148e81f746655d5a3239ae9bd00cb7bc3ca178b5fc5a5997e9744183", size = 138295, upload-time = "2026-02-02T15:38:39.096Z" }, - { url = "https://files.pythonhosted.org/packages/63/d7/4d2e8b03561257af0450f2845b91fbd111d7e526ccdf737267108075e0ba/orjson-3.11.7-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:23d6c20517a97a9daf1d48b580fcdc6f0516c6f4b5038823426033690b4d2650", size = 408720, upload-time = "2026-02-02T15:38:40.634Z" }, - { url = "https://files.pythonhosted.org/packages/78/cf/d45343518282108b29c12a65892445fc51f9319dc3c552ceb51bb5905ed2/orjson-3.11.7-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:8ff206156006da5b847c9304b6308a01e8cdbc8cce824e2779a5ba71c3def141", size = 144152, upload-time = "2026-02-02T15:38:42.262Z" }, - { url = "https://files.pythonhosted.org/packages/a9/3a/d6001f51a7275aacd342e77b735c71fa04125a3f93c36fee4526bc8c654e/orjson-3.11.7-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:962d046ee1765f74a1da723f4b33e3b228fe3a48bd307acce5021dfefe0e29b2", size = 134814, upload-time = "2026-02-02T15:38:43.627Z" }, - { url = "https://files.pythonhosted.org/packages/1d/d3/f19b47ce16820cc2c480f7f1723e17f6d411b3a295c60c8ad3aa9ff1c96a/orjson-3.11.7-cp314-cp314-win32.whl", hash = "sha256:89e13dd3f89f1c38a9c9eba5fbf7cdc2d1feca82f5f290864b4b7a6aac704576", size = 127997, upload-time = "2026-02-02T15:38:45.06Z" }, - { url = "https://files.pythonhosted.org/packages/12/df/172771902943af54bf661a8d102bdf2e7f932127968080632bda6054b62c/orjson-3.11.7-cp314-cp314-win_amd64.whl", hash = "sha256:845c3e0d8ded9c9271cd79596b9b552448b885b97110f628fb687aee2eed11c1", size = 124985, upload-time = "2026-02-02T15:38:46.388Z" }, - { url = "https://files.pythonhosted.org/packages/6f/1c/f2a8d8a1b17514660a614ce5f7aac74b934e69f5abc2700cc7ced882a009/orjson-3.11.7-cp314-cp314-win_arm64.whl", hash = "sha256:4a2e9c5be347b937a2e0203866f12bba36082e89b402ddb9e927d5822e43088d", size = 126038, upload-time = "2026-02-02T15:38:47.703Z" }, -] - -[[package]] -name = "packaging" -version = "26.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/65/ee/299d360cdc32edc7d2cf530f3accf79c4fca01e96ffc950d8a52213bd8e4/packaging-26.0.tar.gz", hash = "sha256:00243ae351a257117b6a241061796684b084ed1c516a08c48a3f7e147a9d80b4", size = 143416, upload-time = "2026-01-21T20:50:39.064Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/b7/b9/c538f279a4e237a006a2c98387d081e9eb060d203d8ed34467cc0f0b9b53/packaging-26.0-py3-none-any.whl", hash = "sha256:b36f1fef9334a5588b4166f8bcd26a14e521f2b55e6b9de3aaa80d3ff7a37529", size = 74366, upload-time = "2026-01-21T20:50:37.788Z" }, -] - -[[package]] -name = "pandas" -version = "2.3.3" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "numpy" }, - { name = "python-dateutil" }, - { 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" }, - { url = "https://files.pythonhosted.org/packages/04/fd/74903979833db8390b73b3a8a7d30d146d710bd32703724dd9083950386f/pandas-2.3.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:ee15f284898e7b246df8087fc82b87b01686f98ee67d85a17b7ab44143a3a9a0", size = 11540635, upload-time = "2025-09-29T23:25:52.486Z" }, - { url = "https://files.pythonhosted.org/packages/21/00/266d6b357ad5e6d3ad55093a7e8efc7dd245f5a842b584db9f30b0f0a287/pandas-2.3.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:1611aedd912e1ff81ff41c745822980c49ce4a7907537be8692c8dbc31924593", size = 10759079, upload-time = "2025-09-29T23:26:33.204Z" }, - { url = "https://files.pythonhosted.org/packages/ca/05/d01ef80a7a3a12b2f8bbf16daba1e17c98a2f039cbc8e2f77a2c5a63d382/pandas-2.3.3-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6d2cefc361461662ac48810cb14365a365ce864afe85ef1f447ff5a1e99ea81c", size = 11814049, upload-time = "2025-09-29T23:27:15.384Z" }, - { url = "https://files.pythonhosted.org/packages/15/b2/0e62f78c0c5ba7e3d2c5945a82456f4fac76c480940f805e0b97fcbc2f65/pandas-2.3.3-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ee67acbbf05014ea6c763beb097e03cd629961c8a632075eeb34247120abcb4b", size = 12332638, upload-time = "2025-09-29T23:27:51.625Z" }, - { url = "https://files.pythonhosted.org/packages/c5/33/dd70400631b62b9b29c3c93d2feee1d0964dc2bae2e5ad7a6c73a7f25325/pandas-2.3.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c46467899aaa4da076d5abc11084634e2d197e9460643dd455ac3db5856b24d6", size = 12886834, upload-time = "2025-09-29T23:28:21.289Z" }, - { url = "https://files.pythonhosted.org/packages/d3/18/b5d48f55821228d0d2692b34fd5034bb185e854bdb592e9c640f6290e012/pandas-2.3.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:6253c72c6a1d990a410bc7de641d34053364ef8bcd3126f7e7450125887dffe3", size = 13409925, upload-time = "2025-09-29T23:28:58.261Z" }, - { url = "https://files.pythonhosted.org/packages/a6/3d/124ac75fcd0ecc09b8fdccb0246ef65e35b012030defb0e0eba2cbbbe948/pandas-2.3.3-cp314-cp314-win_amd64.whl", hash = "sha256:1b07204a219b3b7350abaae088f451860223a52cfb8a6c53358e7948735158e5", size = 11109071, upload-time = "2025-09-29T23:32:27.484Z" }, - { url = "https://files.pythonhosted.org/packages/89/9c/0e21c895c38a157e0faa1fb64587a9226d6dd46452cac4532d80c3c4a244/pandas-2.3.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:2462b1a365b6109d275250baaae7b760fd25c726aaca0054649286bcfbb3e8ec", size = 12048504, upload-time = "2025-09-29T23:29:31.47Z" }, - { url = "https://files.pythonhosted.org/packages/d7/82/b69a1c95df796858777b68fbe6a81d37443a33319761d7c652ce77797475/pandas-2.3.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:0242fe9a49aa8b4d78a4fa03acb397a58833ef6199e9aa40a95f027bb3a1b6e7", size = 11410702, upload-time = "2025-09-29T23:29:54.591Z" }, - { url = "https://files.pythonhosted.org/packages/f9/88/702bde3ba0a94b8c73a0181e05144b10f13f29ebfc2150c3a79062a8195d/pandas-2.3.3-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a21d830e78df0a515db2b3d2f5570610f5e6bd2e27749770e8bb7b524b89b450", size = 11634535, upload-time = "2025-09-29T23:30:21.003Z" }, - { url = "https://files.pythonhosted.org/packages/a4/1e/1bac1a839d12e6a82ec6cb40cda2edde64a2013a66963293696bbf31fbbb/pandas-2.3.3-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2e3ebdb170b5ef78f19bfb71b0dc5dc58775032361fa188e814959b74d726dd5", size = 12121582, upload-time = "2025-09-29T23:30:43.391Z" }, - { url = "https://files.pythonhosted.org/packages/44/91/483de934193e12a3b1d6ae7c8645d083ff88dec75f46e827562f1e4b4da6/pandas-2.3.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:d051c0e065b94b7a3cea50eb1ec32e912cd96dba41647eb24104b6c6c14c5788", size = 12699963, upload-time = "2025-09-29T23:31:10.009Z" }, - { url = "https://files.pythonhosted.org/packages/70/44/5191d2e4026f86a2a109053e194d3ba7a31a2d10a9c2348368c63ed4e85a/pandas-2.3.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:3869faf4bd07b3b66a9f462417d0ca3a9df29a9f6abd5d0d0dbab15dac7abe87", size = 13202175, upload-time = "2025-09-29T23:31:59.173Z" }, -] - -[[package]] -name = "paperchat" -version = "0.1.0" -source = { editable = "." } -dependencies = [ - { name = "anthropic" }, - { name = "docling" }, - { name = "google-genai" }, - { name = "keyring" }, - { name = "openai" }, - { name = "pymilvus", extra = ["model"] }, - { name = "streamlit" }, - { name = "torch" }, -] - -[package.optional-dependencies] -eval = [ - { name = "beir" }, - { name = "typer" }, -] - -[package.dev-dependencies] -dev = [ - { name = "prek" }, - { name = "pytest" }, - { name = "ruff" }, -] - -[package.metadata] -requires-dist = [ - { name = "anthropic", specifier = ">=0.50.0" }, - { name = "beir", marker = "extra == 'eval'", specifier = ">=2.1.0" }, - { name = "docling", specifier = ">=2.31.0" }, - { name = "google-genai", specifier = ">=1.12.1" }, - { name = "keyring", specifier = ">=25.6.0" }, - { name = "openai", specifier = ">=1.76.0" }, - { name = "pymilvus", extras = ["model"], specifier = ">=2.5.7" }, - { name = "streamlit", specifier = ">=1.44.1" }, - { name = "torch", specifier = ">=2.6.0" }, - { name = "typer", marker = "extra == 'eval'", specifier = ">=0.15.2" }, -] -provides-extras = ["eval"] - -[package.metadata.requires-dev] -dev = [ - { name = "prek", specifier = ">=0.3.4" }, - { name = "pytest", specifier = ">=8.3.4" }, - { name = "ruff", specifier = ">=0.11.0" }, -] - -[[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" }, -] - -[[package]] -name = "pluggy" -version = "1.6.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f9/e2/3e91f31a7d2b083fe6ef3fa267035b518369d9511ffab804f839851d2779/pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3", size = 69412, upload-time = "2025-05-15T12:30:07.975Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746", size = 20538, upload-time = "2025-05-15T12:30:06.134Z" }, -] - -[[package]] -name = "polyfactory" -version = "3.3.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "faker" }, - { name = "typing-extensions" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/85/68/7717bd9e63ed254617a7d3dc9260904fb736d6ea203e58ffddcb186c64e4/polyfactory-3.3.0.tar.gz", hash = "sha256:237258b6ff43edf362ffd1f68086bb796466f786adfa002b0ac256dbf2246e9a", size = 348668, upload-time = "2026-02-22T09:46:28.01Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/dd/34/b6f19941adcdaf415b5e8a8d577499f5b6a76b59cbae37f9b125a9ffe9f2/polyfactory-3.3.0-py3-none-any.whl", hash = "sha256:686abcaa761930d3df87b91e95b26b8d8cb9fdbbbe0b03d5f918acff5c72606e", size = 62707, upload-time = "2026-02-22T09:46:25.985Z" }, -] - -[[package]] -name = "prek" -version = "0.3.4" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/c6/51/2324eaad93a4b144853ca1c56da76f357d3a70c7b4fd6659e972d7bb8660/prek-0.3.4.tar.gz", hash = "sha256:56a74d02d8b7dfe3c774ecfcd8c1b4e5f1e1b84369043a8003e8e3a779fce72d", size = 356633, upload-time = "2026-02-28T03:47:13.452Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/09/20/1a964cb72582307c2f1dc7f583caab90f42810ad41551e5220592406a4c3/prek-0.3.4-py3-none-linux_armv6l.whl", hash = "sha256:c35192d6e23fe7406bd2f333d1c7dab1a4b34ab9289789f453170f33550aa74d", size = 4641915, upload-time = "2026-02-28T03:47:03.772Z" }, - { url = "https://files.pythonhosted.org/packages/c5/cb/4a21f37102bac37e415b61818344aa85de8d29a581253afa7db8c08d5a33/prek-0.3.4-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:6f784d78de72a8bbe58a5fe7bde787c364ae88f0aff5222c5c5c7287876c510a", size = 4649166, upload-time = "2026-02-28T03:47:06.164Z" }, - { url = "https://files.pythonhosted.org/packages/85/9c/a7c0d117a098d57931428bdb60fcb796e0ebc0478c59288017a2e22eca96/prek-0.3.4-py3-none-macosx_11_0_arm64.whl", hash = "sha256:50a43f522625e8c968e8c9992accf9e29017abad6c782d6d176b73145ad680b7", size = 4274422, upload-time = "2026-02-28T03:46:59.356Z" }, - { url = "https://files.pythonhosted.org/packages/59/84/81d06df1724d09266df97599a02543d82fde7dfaefd192f09d9b2ccb092f/prek-0.3.4-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.musllinux_1_1_aarch64.whl", hash = "sha256:4bbb1d3912a88935f35c6ba4466b4242732e3e3a8c608623c708e83cea85de00", size = 4629873, upload-time = "2026-02-28T03:46:56.419Z" }, - { url = "https://files.pythonhosted.org/packages/09/cd/bb0aefa25cfacd8dbced75b9a9d9945707707867fa5635fb69ae1bbc2d88/prek-0.3.4-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ca4d4134db8f6e8de3c418317becdf428957e3cab271807f475318105fd46d04", size = 4552507, upload-time = "2026-02-28T03:47:05.004Z" }, - { url = "https://files.pythonhosted.org/packages/9b/c0/578a7af4861afb64ec81c03bfdcc1bb3341bb61f2fff8a094ecf13987a56/prek-0.3.4-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7fb6395f6eb76133bb1e11fc718db8144522466cdc2e541d05e7813d1bbcae7d", size = 4865929, upload-time = "2026-02-28T03:47:09.231Z" }, - { url = "https://files.pythonhosted.org/packages/fc/48/f169406590028f7698ef2e1ff5bffd92ca05e017636c1163a2f5ef0f8275/prek-0.3.4-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aae17813239ddcb4ae7b38418de4d49afff740f48f8e0556029c96f58e350412", size = 5390286, upload-time = "2026-02-28T03:47:10.796Z" }, - { url = "https://files.pythonhosted.org/packages/05/c5/98a73fec052059c3ae06ce105bef67caca42334c56d84e9ef75df72ba152/prek-0.3.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10a621a690d9c127afc3d21c275030d364d1fbef3296c095068d3ae80a59546e", size = 4891028, upload-time = "2026-02-28T03:47:07.916Z" }, - { url = "https://files.pythonhosted.org/packages/a3/b4/029966e35e59b59c142be7e1d2208ad261709ac1a66aa4a3ce33c5b9f91f/prek-0.3.4-py3-none-manylinux_2_28_aarch64.whl", hash = "sha256:d978c31bc3b1f0b3d58895b7c6ac26f077e0ea846da54f46aeee4c7088b1b105", size = 4633986, upload-time = "2026-02-28T03:47:14.351Z" }, - { url = "https://files.pythonhosted.org/packages/1d/27/d122802555745b6940c99fcb41496001c192ddcdf56ec947ec10a0298e05/prek-0.3.4-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:a8e089a030f0a023c22a4bb2ec4ff3fcc153585d701cff67acbfca2f37e173ae", size = 4680722, upload-time = "2026-02-28T03:47:12.224Z" }, - { url = "https://files.pythonhosted.org/packages/34/40/92318c96b3a67b4e62ed82741016ede34d97ea9579d3cc1332b167632222/prek-0.3.4-py3-none-musllinux_1_1_armv7l.whl", hash = "sha256:8060c72b764f0b88112616763da9dd3a7c293e010f8520b74079893096160a2f", size = 4535623, upload-time = "2026-02-28T03:46:52.221Z" }, - { url = "https://files.pythonhosted.org/packages/df/f5/6b383d94e722637da4926b4f609d36fe432827bb6f035ad46ee02bde66b6/prek-0.3.4-py3-none-musllinux_1_1_i686.whl", hash = "sha256:65b23268456b5a763278d4e1ec532f2df33918f13ded85869a1ddff761eb9697", size = 4729879, upload-time = "2026-02-28T03:46:57.886Z" }, - { url = "https://files.pythonhosted.org/packages/79/f8/fdc705b807d813fd713ffa4f67f96741542ed1dafbb221206078c06f3df4/prek-0.3.4-py3-none-musllinux_1_1_x86_64.whl", hash = "sha256:3975c61139c7b3200e38dc3955e050b0f2615701d3deb9715696a902e850509e", size = 5001569, upload-time = "2026-02-28T03:47:00.892Z" }, - { url = "https://files.pythonhosted.org/packages/84/92/b007a41f58e8192a1e611a21b396ad870d51d7873b7af12068ebae7fc15f/prek-0.3.4-py3-none-win32.whl", hash = "sha256:37449ae82f4dc08b72e542401e3d7318f05d1163e87c31ab260a40f425d6516e", size = 4297057, upload-time = "2026-02-28T03:47:02.219Z" }, - { url = "https://files.pythonhosted.org/packages/bb/dc/bcb02de9b11461e8e0c7d3c8fdf8cfa15ac6efe73472a4375549ba5defd2/prek-0.3.4-py3-none-win_amd64.whl", hash = "sha256:60e9aa86ca65de963510ae28c5d94b9d7a97bcbaa6e4cdb5bf5083ed4c45dc71", size = 4655174, upload-time = "2026-02-28T03:46:53.749Z" }, - { url = "https://files.pythonhosted.org/packages/0b/86/98f5598569f4cd3de7161e266fab6a8981e65555f79d4704810c1502ad0a/prek-0.3.4-py3-none-win_arm64.whl", hash = "sha256:486bdae8f4512d3b4f6eb61b83e5b7595da2adca385af4b2b7823c0ab38d1827", size = 4367817, upload-time = "2026-02-28T03:46:55.264Z" }, -] - -[[package]] -name = "propcache" -version = "0.4.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/9e/da/e9fc233cf63743258bff22b3dfa7ea5baef7b5bc324af47a0ad89b8ffc6f/propcache-0.4.1.tar.gz", hash = "sha256:f48107a8c637e80362555f37ecf49abe20370e557cc4ab374f04ec4423c97c3d", size = 46442, upload-time = "2025-10-08T19:49:02.291Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a2/0f/f17b1b2b221d5ca28b4b876e8bb046ac40466513960646bda8e1853cdfa2/propcache-0.4.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:e153e9cd40cc8945138822807139367f256f89c6810c2634a4f6902b52d3b4e2", size = 80061, upload-time = "2025-10-08T19:46:46.075Z" }, - { url = "https://files.pythonhosted.org/packages/76/47/8ccf75935f51448ba9a16a71b783eb7ef6b9ee60f5d14c7f8a8a79fbeed7/propcache-0.4.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:cd547953428f7abb73c5ad82cbb32109566204260d98e41e5dfdc682eb7f8403", size = 46037, upload-time = "2025-10-08T19:46:47.23Z" }, - { url = "https://files.pythonhosted.org/packages/0a/b6/5c9a0e42df4d00bfb4a3cbbe5cf9f54260300c88a0e9af1f47ca5ce17ac0/propcache-0.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f048da1b4f243fc44f205dfd320933a951b8d89e0afd4c7cacc762a8b9165207", size = 47324, upload-time = "2025-10-08T19:46:48.384Z" }, - { url = "https://files.pythonhosted.org/packages/9e/d3/6c7ee328b39a81ee877c962469f1e795f9db87f925251efeb0545e0020d0/propcache-0.4.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ec17c65562a827bba85e3872ead335f95405ea1674860d96483a02f5c698fa72", size = 225505, upload-time = "2025-10-08T19:46:50.055Z" }, - { url = "https://files.pythonhosted.org/packages/01/5d/1c53f4563490b1d06a684742cc6076ef944bc6457df6051b7d1a877c057b/propcache-0.4.1-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:405aac25c6394ef275dee4c709be43745d36674b223ba4eb7144bf4d691b7367", size = 230242, upload-time = "2025-10-08T19:46:51.815Z" }, - { url = "https://files.pythonhosted.org/packages/20/e1/ce4620633b0e2422207c3cb774a0ee61cac13abc6217763a7b9e2e3f4a12/propcache-0.4.1-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:0013cb6f8dde4b2a2f66903b8ba740bdfe378c943c4377a200551ceb27f379e4", size = 238474, upload-time = "2025-10-08T19:46:53.208Z" }, - { url = "https://files.pythonhosted.org/packages/46/4b/3aae6835b8e5f44ea6a68348ad90f78134047b503765087be2f9912140ea/propcache-0.4.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:15932ab57837c3368b024473a525e25d316d8353016e7cc0e5ba9eb343fbb1cf", size = 221575, upload-time = "2025-10-08T19:46:54.511Z" }, - { url = "https://files.pythonhosted.org/packages/6e/a5/8a5e8678bcc9d3a1a15b9a29165640d64762d424a16af543f00629c87338/propcache-0.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:031dce78b9dc099f4c29785d9cf5577a3faf9ebf74ecbd3c856a7b92768c3df3", size = 216736, upload-time = "2025-10-08T19:46:56.212Z" }, - { url = "https://files.pythonhosted.org/packages/f1/63/b7b215eddeac83ca1c6b934f89d09a625aa9ee4ba158338854c87210cc36/propcache-0.4.1-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:ab08df6c9a035bee56e31af99be621526bd237bea9f32def431c656b29e41778", size = 213019, upload-time = "2025-10-08T19:46:57.595Z" }, - { url = "https://files.pythonhosted.org/packages/57/74/f580099a58c8af587cac7ba19ee7cb418506342fbbe2d4a4401661cca886/propcache-0.4.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:4d7af63f9f93fe593afbf104c21b3b15868efb2c21d07d8732c0c4287e66b6a6", size = 220376, upload-time = "2025-10-08T19:46:59.067Z" }, - { url = "https://files.pythonhosted.org/packages/c4/ee/542f1313aff7eaf19c2bb758c5d0560d2683dac001a1c96d0774af799843/propcache-0.4.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:cfc27c945f422e8b5071b6e93169679e4eb5bf73bbcbf1ba3ae3a83d2f78ebd9", size = 226988, upload-time = "2025-10-08T19:47:00.544Z" }, - { url = "https://files.pythonhosted.org/packages/8f/18/9c6b015dd9c6930f6ce2229e1f02fb35298b847f2087ea2b436a5bfa7287/propcache-0.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:35c3277624a080cc6ec6f847cbbbb5b49affa3598c4535a0a4682a697aaa5c75", size = 215615, upload-time = "2025-10-08T19:47:01.968Z" }, - { 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/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 = "protobuf" -version = "6.33.5" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ba/25/7c72c307aafc96fa87062aa6291d9f7c94836e43214d43722e86037aac02/protobuf-6.33.5.tar.gz", hash = "sha256:6ddcac2a081f8b7b9642c09406bc6a4290128fce5f471cddd165960bb9119e5c", size = 444465, upload-time = "2026-01-29T21:51:33.494Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/b1/79/af92d0a8369732b027e6d6084251dd8e782c685c72da161bd4a2e00fbabb/protobuf-6.33.5-cp310-abi3-win32.whl", hash = "sha256:d71b040839446bac0f4d162e758bea99c8251161dae9d0983a3b88dee345153b", size = 425769, upload-time = "2026-01-29T21:51:21.751Z" }, - { url = "https://files.pythonhosted.org/packages/55/75/bb9bc917d10e9ee13dee8607eb9ab963b7cf8be607c46e7862c748aa2af7/protobuf-6.33.5-cp310-abi3-win_amd64.whl", hash = "sha256:3093804752167bcab3998bec9f1048baae6e29505adaf1afd14a37bddede533c", size = 437118, upload-time = "2026-01-29T21:51:24.022Z" }, - { url = "https://files.pythonhosted.org/packages/a2/6b/e48dfc1191bc5b52950246275bf4089773e91cb5ba3592621723cdddca62/protobuf-6.33.5-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:a5cb85982d95d906df1e2210e58f8e4f1e3cdc088e52c921a041f9c9a0386de5", size = 427766, upload-time = "2026-01-29T21:51:25.413Z" }, - { url = "https://files.pythonhosted.org/packages/4e/b1/c79468184310de09d75095ed1314b839eb2f72df71097db9d1404a1b2717/protobuf-6.33.5-cp39-abi3-manylinux2014_aarch64.whl", hash = "sha256:9b71e0281f36f179d00cbcb119cb19dec4d14a81393e5ea220f64b286173e190", size = 324638, upload-time = "2026-01-29T21:51:26.423Z" }, - { url = "https://files.pythonhosted.org/packages/c5/f5/65d838092fd01c44d16037953fd4c2cc851e783de9b8f02b27ec4ffd906f/protobuf-6.33.5-cp39-abi3-manylinux2014_s390x.whl", hash = "sha256:8afa18e1d6d20af15b417e728e9f60f3aa108ee76f23c3b2c07a2c3b546d3afd", size = 339411, upload-time = "2026-01-29T21:51:27.446Z" }, - { url = "https://files.pythonhosted.org/packages/9b/53/a9443aa3ca9ba8724fdfa02dd1887c1bcd8e89556b715cfbacca6b63dbec/protobuf-6.33.5-cp39-abi3-manylinux2014_x86_64.whl", hash = "sha256:cbf16ba3350fb7b889fca858fb215967792dc125b35c7976ca4818bee3521cf0", size = 323465, upload-time = "2026-01-29T21:51:28.925Z" }, - { url = "https://files.pythonhosted.org/packages/57/bf/2086963c69bdac3d7cff1cc7ff79b8ce5ea0bec6797a017e1be338a46248/protobuf-6.33.5-py3-none-any.whl", hash = "sha256:69915a973dd0f60f31a08b8318b73eab2bd6a392c79184b3612226b0a3f8ec02", size = 170687, upload-time = "2026-01-29T21:51:32.557Z" }, -] - -[[package]] -name = "psutil" -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/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" }, - { url = "https://files.pythonhosted.org/packages/63/65/37648c0c158dc222aba51c089eb3bdfa238e621674dc42d48706e639204f/psutil-7.2.2-cp36-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b0726cecd84f9474419d67252add4ac0cd9811b04d61123054b9fb6f57df6e9e", size = 156997, upload-time = "2026-01-28T18:15:27.794Z" }, - { url = "https://files.pythonhosted.org/packages/8e/13/125093eadae863ce03c6ffdbae9929430d116a246ef69866dad94da3bfbc/psutil-7.2.2-cp36-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:fd04ef36b4a6d599bbdb225dd1d3f51e00105f6d48a28f006da7f9822f2606d8", size = 148972, upload-time = "2026-01-28T18:15:29.342Z" }, - { url = "https://files.pythonhosted.org/packages/04/78/0acd37ca84ce3ddffaa92ef0f571e073faa6d8ff1f0559ab1272188ea2be/psutil-7.2.2-cp36-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:b58fabe35e80b264a4e3bb23e6b96f9e45a3df7fb7eed419ac0e5947c61e47cc", size = 148266, upload-time = "2026-01-28T18:15:31.597Z" }, - { url = "https://files.pythonhosted.org/packages/b4/90/e2159492b5426be0c1fef7acba807a03511f97c5f86b3caeda6ad92351a7/psutil-7.2.2-cp37-abi3-win_amd64.whl", hash = "sha256:eb7e81434c8d223ec4a219b5fc1c47d0417b12be7ea866e24fb5ad6e84b3d988", size = 137737, upload-time = "2026-01-28T18:15:33.849Z" }, - { url = "https://files.pythonhosted.org/packages/8c/c7/7bb2e321574b10df20cbde462a94e2b71d05f9bbda251ef27d104668306a/psutil-7.2.2-cp37-abi3-win_arm64.whl", hash = "sha256:8c233660f575a5a89e6d4cb65d9f938126312bca76d8fe087b947b3a1aaac9ee", size = 134617, upload-time = "2026-01-28T18:15:36.514Z" }, -] - -[[package]] -name = "pyarrow" -version = "23.0.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/88/22/134986a4cc224d593c1afde5494d18ff629393d74cc2eddb176669f234a4/pyarrow-23.0.1.tar.gz", hash = "sha256:b8c5873e33440b2bc2f4a79d2b47017a89c5a24116c055625e6f2ee50523f019", size = 1167336, upload-time = "2026-02-16T10:14:12.39Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/9a/4b/4166bb5abbfe6f750fc60ad337c43ecf61340fa52ab386da6e8dbf9e63c4/pyarrow-23.0.1-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:f4b0dbfa124c0bb161f8b5ebb40f1a680b70279aa0c9901d44a2b5a20806039f", size = 34214575, upload-time = "2026-02-16T10:09:56.225Z" }, - { url = "https://files.pythonhosted.org/packages/e1/da/3f941e3734ac8088ea588b53e860baeddac8323ea40ce22e3d0baa865cc9/pyarrow-23.0.1-cp312-cp312-macosx_12_0_x86_64.whl", hash = "sha256:7707d2b6673f7de054e2e83d59f9e805939038eebe1763fe811ee8fa5c0cd1a7", size = 35832540, upload-time = "2026-02-16T10:10:03.428Z" }, - { url = "https://files.pythonhosted.org/packages/88/7c/3d841c366620e906d54430817531b877ba646310296df42ef697308c2705/pyarrow-23.0.1-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:86ff03fb9f1a320266e0de855dee4b17da6794c595d207f89bba40d16b5c78b9", size = 44470940, upload-time = "2026-02-16T10:10:10.704Z" }, - { url = "https://files.pythonhosted.org/packages/2c/a5/da83046273d990f256cb79796a190bbf7ec999269705ddc609403f8c6b06/pyarrow-23.0.1-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:813d99f31275919c383aab17f0f455a04f5a429c261cc411b1e9a8f5e4aaaa05", size = 47586063, upload-time = "2026-02-16T10:10:17.95Z" }, - { url = "https://files.pythonhosted.org/packages/5b/3c/b7d2ebcff47a514f47f9da1e74b7949138c58cfeb108cdd4ee62f43f0cf3/pyarrow-23.0.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:bf5842f960cddd2ef757d486041d57c96483efc295a8c4a0e20e704cbbf39c67", size = 48173045, upload-time = "2026-02-16T10:10:25.363Z" }, - { url = "https://files.pythonhosted.org/packages/43/b2/b40961262213beaba6acfc88698eb773dfce32ecdf34d19291db94c2bd73/pyarrow-23.0.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:564baf97c858ecc03ec01a41062e8f4698abc3e6e2acd79c01c2e97880a19730", size = 50621741, upload-time = "2026-02-16T10:10:33.477Z" }, - { url = "https://files.pythonhosted.org/packages/f6/70/1fdda42d65b28b078e93d75d371b2185a61da89dda4def8ba6ba41ebdeb4/pyarrow-23.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:07deae7783782ac7250989a7b2ecde9b3c343a643f82e8a4df03d93b633006f0", size = 27620678, upload-time = "2026-02-16T10:10:39.31Z" }, - { url = "https://files.pythonhosted.org/packages/47/10/2cbe4c6f0fb83d2de37249567373d64327a5e4d8db72f486db42875b08f6/pyarrow-23.0.1-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:6b8fda694640b00e8af3c824f99f789e836720aa8c9379fb435d4c4953a756b8", size = 34210066, upload-time = "2026-02-16T10:10:45.487Z" }, - { url = "https://files.pythonhosted.org/packages/cb/4f/679fa7e84dadbaca7a65f7cdba8d6c83febbd93ca12fa4adf40ba3b6362b/pyarrow-23.0.1-cp313-cp313-macosx_12_0_x86_64.whl", hash = "sha256:8ff51b1addc469b9444b7c6f3548e19dc931b172ab234e995a60aea9f6e6025f", size = 35825526, upload-time = "2026-02-16T10:10:52.266Z" }, - { url = "https://files.pythonhosted.org/packages/f9/63/d2747d930882c9d661e9398eefc54f15696547b8983aaaf11d4a2e8b5426/pyarrow-23.0.1-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:71c5be5cbf1e1cb6169d2a0980850bccb558ddc9b747b6206435313c47c37677", size = 44473279, upload-time = "2026-02-16T10:11:01.557Z" }, - { url = "https://files.pythonhosted.org/packages/b3/93/10a48b5e238de6d562a411af6467e71e7aedbc9b87f8d3a35f1560ae30fb/pyarrow-23.0.1-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:9b6f4f17b43bc39d56fec96e53fe89d94bac3eb134137964371b45352d40d0c2", size = 47585798, upload-time = "2026-02-16T10:11:09.401Z" }, - { url = "https://files.pythonhosted.org/packages/5c/20/476943001c54ef078dbf9542280e22741219a184a0632862bca4feccd666/pyarrow-23.0.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:9fc13fc6c403d1337acab46a2c4346ca6c9dec5780c3c697cf8abfd5e19b6b37", size = 48179446, upload-time = "2026-02-16T10:11:17.781Z" }, - { url = "https://files.pythonhosted.org/packages/4b/b6/5dd0c47b335fcd8edba9bfab78ad961bd0fd55ebe53468cc393f45e0be60/pyarrow-23.0.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5c16ed4f53247fa3ffb12a14d236de4213a4415d127fe9cebed33d51671113e2", size = 50623972, upload-time = "2026-02-16T10:11:26.185Z" }, - { url = "https://files.pythonhosted.org/packages/d5/09/a532297c9591a727d67760e2e756b83905dd89adb365a7f6e9c72578bcc1/pyarrow-23.0.1-cp313-cp313-win_amd64.whl", hash = "sha256:cecfb12ef629cf6be0b1887f9f86463b0dd3dc3195ae6224e74006be4736035a", size = 27540749, upload-time = "2026-02-16T10:12:23.297Z" }, - { url = "https://files.pythonhosted.org/packages/a5/8e/38749c4b1303e6ae76b3c80618f84861ae0c55dd3c2273842ea6f8258233/pyarrow-23.0.1-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:29f7f7419a0e30264ea261fdc0e5fe63ce5a6095003db2945d7cd78df391a7e1", size = 34471544, upload-time = "2026-02-16T10:11:32.535Z" }, - { url = "https://files.pythonhosted.org/packages/a3/73/f237b2bc8c669212f842bcfd842b04fc8d936bfc9d471630569132dc920d/pyarrow-23.0.1-cp313-cp313t-macosx_12_0_x86_64.whl", hash = "sha256:33d648dc25b51fd8055c19e4261e813dfc4d2427f068bcecc8b53d01b81b0500", size = 35949911, upload-time = "2026-02-16T10:11:39.813Z" }, - { url = "https://files.pythonhosted.org/packages/0c/86/b912195eee0903b5611bf596833def7d146ab2d301afeb4b722c57ffc966/pyarrow-23.0.1-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:cd395abf8f91c673dd3589cadc8cc1ee4e8674fa61b2e923c8dd215d9c7d1f41", size = 44520337, upload-time = "2026-02-16T10:11:47.764Z" }, - { url = "https://files.pythonhosted.org/packages/69/c2/f2a717fb824f62d0be952ea724b4f6f9372a17eed6f704b5c9526f12f2f1/pyarrow-23.0.1-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:00be9576d970c31defb5c32eb72ef585bf600ef6d0a82d5eccaae96639cf9d07", size = 47548944, upload-time = "2026-02-16T10:11:56.607Z" }, - { url = "https://files.pythonhosted.org/packages/84/a7/90007d476b9f0dc308e3bc57b832d004f848fd6c0da601375d20d92d1519/pyarrow-23.0.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:c2139549494445609f35a5cda4eb94e2c9e4d704ce60a095b342f82460c73a83", size = 48236269, upload-time = "2026-02-16T10:12:04.47Z" }, - { url = "https://files.pythonhosted.org/packages/b0/3f/b16fab3e77709856eb6ac328ce35f57a6d4a18462c7ca5186ef31b45e0e0/pyarrow-23.0.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:7044b442f184d84e2351e5084600f0d7343d6117aabcbc1ac78eb1ae11eb4125", size = 50604794, upload-time = "2026-02-16T10:12:11.797Z" }, - { url = "https://files.pythonhosted.org/packages/e9/a1/22df0620a9fac31d68397a75465c344e83c3dfe521f7612aea33e27ab6c0/pyarrow-23.0.1-cp313-cp313t-win_amd64.whl", hash = "sha256:a35581e856a2fafa12f3f54fce4331862b1cfb0bef5758347a858a4aa9d6bae8", size = 27660642, upload-time = "2026-02-16T10:12:17.746Z" }, - { url = "https://files.pythonhosted.org/packages/8d/1b/6da9a89583ce7b23ac611f183ae4843cd3a6cf54f079549b0e8c14031e73/pyarrow-23.0.1-cp314-cp314-macosx_12_0_arm64.whl", hash = "sha256:5df1161da23636a70838099d4aaa65142777185cc0cdba4037a18cee7d8db9ca", size = 34238755, upload-time = "2026-02-16T10:12:32.819Z" }, - { url = "https://files.pythonhosted.org/packages/ae/b5/d58a241fbe324dbaeb8df07be6af8752c846192d78d2272e551098f74e88/pyarrow-23.0.1-cp314-cp314-macosx_12_0_x86_64.whl", hash = "sha256:fa8e51cb04b9f8c9c5ace6bab63af9a1f88d35c0d6cbf53e8c17c098552285e1", size = 35847826, upload-time = "2026-02-16T10:12:38.949Z" }, - { url = "https://files.pythonhosted.org/packages/54/a5/8cbc83f04aba433ca7b331b38f39e000efd9f0c7ce47128670e737542996/pyarrow-23.0.1-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:0b95a3994f015be13c63148fef8832e8a23938128c185ee951c98908a696e0eb", size = 44536859, upload-time = "2026-02-16T10:12:45.467Z" }, - { url = "https://files.pythonhosted.org/packages/36/2e/c0f017c405fcdc252dbccafbe05e36b0d0eb1ea9a958f081e01c6972927f/pyarrow-23.0.1-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:4982d71350b1a6e5cfe1af742c53dfb759b11ce14141870d05d9e540d13bc5d1", size = 47614443, upload-time = "2026-02-16T10:12:55.525Z" }, - { url = "https://files.pythonhosted.org/packages/af/6b/2314a78057912f5627afa13ba43809d9d653e6630859618b0fd81a4e0759/pyarrow-23.0.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c250248f1fe266db627921c89b47b7c06fee0489ad95b04d50353537d74d6886", size = 48232991, upload-time = "2026-02-16T10:13:04.729Z" }, - { url = "https://files.pythonhosted.org/packages/40/f2/1bcb1d3be3460832ef3370d621142216e15a2c7c62602a4ea19ec240dd64/pyarrow-23.0.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5f4763b83c11c16e5f4c15601ba6dfa849e20723b46aa2617cb4bffe8768479f", size = 50645077, upload-time = "2026-02-16T10:13:14.147Z" }, - { url = "https://files.pythonhosted.org/packages/eb/3f/b1da7b61cd66566a4d4c8383d376c606d1c34a906c3f1cb35c479f59d1aa/pyarrow-23.0.1-cp314-cp314-win_amd64.whl", hash = "sha256:3a4c85ef66c134161987c17b147d6bffdca4566f9a4c1d81a0a01cdf08414ea5", size = 28234271, upload-time = "2026-02-16T10:14:09.397Z" }, - { url = "https://files.pythonhosted.org/packages/b5/78/07f67434e910a0f7323269be7bfbf58699bd0c1d080b18a1ab49ba943fe8/pyarrow-23.0.1-cp314-cp314t-macosx_12_0_arm64.whl", hash = "sha256:17cd28e906c18af486a499422740298c52d7c6795344ea5002a7720b4eadf16d", size = 34488692, upload-time = "2026-02-16T10:13:21.541Z" }, - { url = "https://files.pythonhosted.org/packages/50/76/34cf7ae93ece1f740a04910d9f7e80ba166b9b4ab9596a953e9e62b90fe1/pyarrow-23.0.1-cp314-cp314t-macosx_12_0_x86_64.whl", hash = "sha256:76e823d0e86b4fb5e1cf4a58d293036e678b5a4b03539be933d3b31f9406859f", size = 35964383, upload-time = "2026-02-16T10:13:28.63Z" }, - { url = "https://files.pythonhosted.org/packages/46/90/459b827238936d4244214be7c684e1b366a63f8c78c380807ae25ed92199/pyarrow-23.0.1-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:a62e1899e3078bf65943078b3ad2a6ddcacf2373bc06379aac61b1e548a75814", size = 44538119, upload-time = "2026-02-16T10:13:35.506Z" }, - { url = "https://files.pythonhosted.org/packages/28/a1/93a71ae5881e99d1f9de1d4554a87be37da11cd6b152239fb5bd924fdc64/pyarrow-23.0.1-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:df088e8f640c9fae3b1f495b3c64755c4e719091caf250f3a74d095ddf3c836d", size = 47571199, upload-time = "2026-02-16T10:13:42.504Z" }, - { url = "https://files.pythonhosted.org/packages/88/a3/d2c462d4ef313521eaf2eff04d204ac60775263f1fb08c374b543f79f610/pyarrow-23.0.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:46718a220d64677c93bc243af1d44b55998255427588e400677d7192671845c7", size = 48259435, upload-time = "2026-02-16T10:13:49.226Z" }, - { url = "https://files.pythonhosted.org/packages/cc/f1/11a544b8c3d38a759eb3fbb022039117fd633e9a7b19e4841cc3da091915/pyarrow-23.0.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:a09f3876e87f48bc2f13583ab551f0379e5dfb83210391e68ace404181a20690", size = 50629149, upload-time = "2026-02-16T10:13:57.238Z" }, - { url = "https://files.pythonhosted.org/packages/50/f2/c0e76a0b451ffdf0cf788932e182758eb7558953f4f27f1aff8e2518b653/pyarrow-23.0.1-cp314-cp314t-win_amd64.whl", hash = "sha256:527e8d899f14bd15b740cd5a54ad56b7f98044955373a17179d5956ddb93d9ce", size = 28365807, upload-time = "2026-02-16T10:14:03.892Z" }, -] - -[[package]] -name = "pyasn1" -version = "0.6.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/fe/b6/6e630dff89739fcd427e3f72b3d905ce0acb85a45d4ec3e2678718a3487f/pyasn1-0.6.2.tar.gz", hash = "sha256:9b59a2b25ba7e4f8197db7686c09fb33e658b98339fadb826e9512629017833b", size = 146586, upload-time = "2026-01-16T18:04:18.534Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/44/b5/a96872e5184f354da9c84ae119971a0a4c221fe9b27a4d94bd43f2596727/pyasn1-0.6.2-py3-none-any.whl", hash = "sha256:1eb26d860996a18e9b6ed05e7aae0e9fc21619fcee6af91cca9bad4fbea224bf", size = 83371, upload-time = "2026-01-16T18:04:17.174Z" }, -] - -[[package]] -name = "pyasn1-modules" -version = "0.4.2" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "pyasn1" }, -] -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]] -name = "pyclipper" -version = "1.4.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f6/21/3c06205bb407e1f79b73b7b4dfb3950bd9537c4f625a68ab5cc41177f5bc/pyclipper-1.4.0.tar.gz", hash = "sha256:9882bd889f27da78add4dd6f881d25697efc740bf840274e749988d25496c8e1", size = 54489, upload-time = "2025-12-01T13:15:35.015Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/90/1b/7a07b68e0842324d46c03e512d8eefa9cb92ba2a792b3b4ebf939dafcac3/pyclipper-1.4.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:222ac96c8b8281b53d695b9c4fedc674f56d6d4320ad23f1bdbd168f4e316140", size = 265676, upload-time = "2025-12-01T13:15:04.15Z" }, - { url = "https://files.pythonhosted.org/packages/6b/dd/8bd622521c05d04963420ae6664093f154343ed044c53ea260a310c8bb4d/pyclipper-1.4.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:f3672dbafbb458f1b96e1ee3e610d174acb5ace5bd2ed5d1252603bb797f2fc6", size = 140458, upload-time = "2025-12-01T13:15:05.76Z" }, - { url = "https://files.pythonhosted.org/packages/7a/06/6e3e241882bf7d6ab23d9c69ba4e85f1ec47397cbbeee948a16cf75e21ed/pyclipper-1.4.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d1f807e2b4760a8e5c6d6b4e8c1d71ef52b7fe1946ff088f4fa41e16a881a5ca", size = 978235, upload-time = "2025-12-01T13:15:06.993Z" }, - { url = "https://files.pythonhosted.org/packages/cf/f4/3418c1cd5eea640a9fa2501d4bc0b3655fa8d40145d1a4f484b987990a75/pyclipper-1.4.0-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ce1f83c9a4e10ea3de1959f0ae79e9a5bd41346dff648fee6228ba9eaf8b3872", size = 961388, upload-time = "2025-12-01T13:15:08.467Z" }, - { url = "https://files.pythonhosted.org/packages/ac/94/c85401d24be634af529c962dd5d781f3cb62a67cd769534df2cb3feee97a/pyclipper-1.4.0-cp312-cp312-win32.whl", hash = "sha256:3ef44b64666ebf1cb521a08a60c3e639d21b8c50bfbe846ba7c52a0415e936f4", size = 95169, upload-time = "2025-12-01T13:15:10.098Z" }, - { url = "https://files.pythonhosted.org/packages/97/77/dfea08e3b230b82ee22543c30c35d33d42f846a77f96caf7c504dd54fab1/pyclipper-1.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:d1e5498d883b706a4ce636247f0d830c6eb34a25b843a1b78e2c969754ca9037", size = 104619, upload-time = "2025-12-01T13:15:11.592Z" }, - { url = "https://files.pythonhosted.org/packages/67/d0/cbce7d47de1e6458f66a4d999b091640134deb8f2c7351eab993b70d2e10/pyclipper-1.4.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:d49df13cbb2627ccb13a1046f3ea6ebf7177b5504ec61bdef87d6a704046fd6e", size = 264342, upload-time = "2025-12-01T13:15:12.697Z" }, - { url = "https://files.pythonhosted.org/packages/ce/cc/742b9d69d96c58ac156947e1b56d0f81cbacbccf869e2ac7229f2f86dc4e/pyclipper-1.4.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:37bfec361e174110cdddffd5ecd070a8064015c99383d95eb692c253951eee8a", size = 139839, upload-time = "2025-12-01T13:15:13.911Z" }, - { url = "https://files.pythonhosted.org/packages/db/48/dd301d62c1529efdd721b47b9e5fb52120fcdac5f4d3405cfc0d2f391414/pyclipper-1.4.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:14c8bdb5a72004b721c4e6f448d2c2262d74a7f0c9e3076aeff41e564a92389f", size = 972142, upload-time = "2025-12-01T13:15:15.477Z" }, - { url = "https://files.pythonhosted.org/packages/07/bf/d493fd1b33bb090fa64e28c1009374d5d72fa705f9331cd56517c35e381e/pyclipper-1.4.0-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f2a50c22c3a78cb4e48347ecf06930f61ce98cf9252f2e292aa025471e9d75b1", size = 952789, upload-time = "2025-12-01T13:15:17.042Z" }, - { url = "https://files.pythonhosted.org/packages/cf/88/b95ea8ea21ddca34aa14b123226a81526dd2faaa993f9aabd3ed21231604/pyclipper-1.4.0-cp313-cp313-win32.whl", hash = "sha256:c9a3faa416ff536cee93417a72bfb690d9dea136dc39a39dbbe1e5dadf108c9c", size = 94817, upload-time = "2025-12-01T13:15:18.724Z" }, - { url = "https://files.pythonhosted.org/packages/ba/42/0a1920d276a0e1ca21dc0d13ee9e3ba10a9a8aa3abac76cd5e5a9f503306/pyclipper-1.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:d4b2d7c41086f1927d14947c563dfc7beed2f6c0d9af13c42fe3dcdc20d35832", size = 104007, upload-time = "2025-12-01T13:15:19.763Z" }, - { url = "https://files.pythonhosted.org/packages/1a/20/04d58c70f3ccd404f179f8dd81d16722a05a3bf1ab61445ee64e8218c1f8/pyclipper-1.4.0-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:7c87480fc91a5af4c1ba310bdb7de2f089a3eeef5fe351a3cedc37da1fcced1c", size = 265167, upload-time = "2025-12-01T13:15:20.844Z" }, - { url = "https://files.pythonhosted.org/packages/bd/2e/a570c1abe69b7260ca0caab4236ce6ea3661193ebf8d1bd7f78ccce537a5/pyclipper-1.4.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:81d8bb2d1fb9d66dc7ea4373b176bb4b02443a7e328b3b603a73faec088b952e", size = 139966, upload-time = "2025-12-01T13:15:22.036Z" }, - { url = "https://files.pythonhosted.org/packages/e8/3b/e0859e54adabdde8a24a29d3f525ebb31c71ddf2e8d93edce83a3c212ffc/pyclipper-1.4.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:773c0e06b683214dcfc6711be230c83b03cddebe8a57eae053d4603dd63582f9", size = 968216, upload-time = "2025-12-01T13:15:23.18Z" }, - { url = "https://files.pythonhosted.org/packages/f6/6b/e3c4febf0a35ae643ee579b09988dd931602b5bf311020535fd9e5b7e715/pyclipper-1.4.0-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9bc45f2463d997848450dbed91c950ca37c6cf27f84a49a5cad4affc0b469e39", size = 954198, upload-time = "2025-12-01T13:15:24.522Z" }, - { url = "https://files.pythonhosted.org/packages/fc/74/728efcee02e12acb486ce9d56fa037120c9bf5b77c54bbdbaa441c14a9d9/pyclipper-1.4.0-cp314-cp314-win32.whl", hash = "sha256:0b8c2105b3b3c44dbe1a266f64309407fe30bf372cf39a94dc8aaa97df00da5b", size = 96951, upload-time = "2025-12-01T13:15:25.79Z" }, - { url = "https://files.pythonhosted.org/packages/e3/d7/7f4354e69f10a917e5c7d5d72a499ef2e10945312f5e72c414a0a08d2ae4/pyclipper-1.4.0-cp314-cp314-win_amd64.whl", hash = "sha256:6c317e182590c88ec0194149995e3d71a979cfef3b246383f4e035f9d4a11826", size = 106782, upload-time = "2025-12-01T13:15:26.945Z" }, - { url = "https://files.pythonhosted.org/packages/63/60/fc32c7a3d7f61a970511ec2857ecd09693d8ac80d560ee7b8e67a6d268c9/pyclipper-1.4.0-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:f160a2c6ba036f7eaf09f1f10f4fbfa734234af9112fb5187877efed78df9303", size = 269880, upload-time = "2025-12-01T13:15:28.117Z" }, - { url = "https://files.pythonhosted.org/packages/49/df/c4a72d3f62f0ba03ec440c4fff56cd2d674a4334d23c5064cbf41c9583f6/pyclipper-1.4.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:a9f11ad133257c52c40d50de7a0ca3370a0cdd8e3d11eec0604ad3c34ba549e9", size = 141706, upload-time = "2025-12-01T13:15:30.134Z" }, - { url = "https://files.pythonhosted.org/packages/c5/0b/cf55df03e2175e1e2da9db585241401e0bc98f76bee3791bed39d0313449/pyclipper-1.4.0-cp314-cp314t-win32.whl", hash = "sha256:bbc827b77442c99deaeee26e0e7f172355ddb097a5e126aea206d447d3b26286", size = 105308, upload-time = "2025-12-01T13:15:31.225Z" }, - { url = "https://files.pythonhosted.org/packages/8f/dc/53df8b6931d47080b4fe4ee8450d42e660ee1c5c1556c7ab73359182b769/pyclipper-1.4.0-cp314-cp314t-win_amd64.whl", hash = "sha256:29dae3e0296dff8502eeb7639fcfee794b0eec8590ba3563aee28db269da6b04", size = 117608, upload-time = "2025-12-01T13:15:32.69Z" }, -] - -[[package]] -name = "pycparser" -version = "3.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/1b/7d/92392ff7815c21062bea51aa7b87d45576f649f16458d78b7cf94b9ab2e6/pycparser-3.0.tar.gz", hash = "sha256:600f49d217304a5902ac3c37e1281c9fe94e4d0489de643a9504c5cdfdfc6b29", size = 103492, upload-time = "2026-01-21T14:26:51.89Z" } -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/ea/28/46b7c5c9635ae96ea0fbb779e271a38129df2550f763937659ee6c5dbc65/pydantic_core-2.41.5-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:3f37a19d7ebcdd20b96485056ba9e8b304e27d9904d233d7b1015db320e51f0a", size = 2119622, upload-time = "2025-11-04T13:40:56.68Z" }, - { url = "https://files.pythonhosted.org/packages/74/1a/145646e5687e8d9a1e8d09acb278c8535ebe9e972e1f162ed338a622f193/pydantic_core-2.41.5-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:1d1d9764366c73f996edd17abb6d9d7649a7eb690006ab6adbda117717099b14", size = 1891725, upload-time = "2025-11-04T13:40:58.807Z" }, - { url = "https://files.pythonhosted.org/packages/23/04/e89c29e267b8060b40dca97bfc64a19b2a3cf99018167ea1677d96368273/pydantic_core-2.41.5-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:25e1c2af0fce638d5f1988b686f3b3ea8cd7de5f244ca147c777769e798a9cd1", size = 1915040, upload-time = "2025-11-04T13:41:00.853Z" }, - { url = "https://files.pythonhosted.org/packages/84/a3/15a82ac7bd97992a82257f777b3583d3e84bdb06ba6858f745daa2ec8a85/pydantic_core-2.41.5-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:506d766a8727beef16b7adaeb8ee6217c64fc813646b424d0804d67c16eddb66", size = 2063691, upload-time = "2025-11-04T13:41:03.504Z" }, - { url = "https://files.pythonhosted.org/packages/74/9b/0046701313c6ef08c0c1cf0e028c67c770a4e1275ca73131563c5f2a310a/pydantic_core-2.41.5-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4819fa52133c9aa3c387b3328f25c1facc356491e6135b459f1de698ff64d869", size = 2213897, upload-time = "2025-11-04T13:41:05.804Z" }, - { url = "https://files.pythonhosted.org/packages/8a/cd/6bac76ecd1b27e75a95ca3a9a559c643b3afcd2dd62086d4b7a32a18b169/pydantic_core-2.41.5-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2b761d210c9ea91feda40d25b4efe82a1707da2ef62901466a42492c028553a2", size = 2333302, upload-time = "2025-11-04T13:41:07.809Z" }, - { url = "https://files.pythonhosted.org/packages/4c/d2/ef2074dc020dd6e109611a8be4449b98cd25e1b9b8a303c2f0fca2f2bcf7/pydantic_core-2.41.5-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:22f0fb8c1c583a3b6f24df2470833b40207e907b90c928cc8d3594b76f874375", size = 2064877, upload-time = "2025-11-04T13:41:09.827Z" }, - { url = "https://files.pythonhosted.org/packages/18/66/e9db17a9a763d72f03de903883c057b2592c09509ccfe468187f2a2eef29/pydantic_core-2.41.5-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2782c870e99878c634505236d81e5443092fba820f0373997ff75f90f68cd553", size = 2180680, upload-time = "2025-11-04T13:41:12.379Z" }, - { url = "https://files.pythonhosted.org/packages/d3/9e/3ce66cebb929f3ced22be85d4c2399b8e85b622db77dad36b73c5387f8f8/pydantic_core-2.41.5-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:0177272f88ab8312479336e1d777f6b124537d47f2123f89cb37e0accea97f90", size = 2138960, upload-time = "2025-11-04T13:41:14.627Z" }, - { url = "https://files.pythonhosted.org/packages/a6/62/205a998f4327d2079326b01abee48e502ea739d174f0a89295c481a2272e/pydantic_core-2.41.5-cp314-cp314-musllinux_1_1_armv7l.whl", hash = "sha256:63510af5e38f8955b8ee5687740d6ebf7c2a0886d15a6d65c32814613681bc07", size = 2339102, upload-time = "2025-11-04T13:41:16.868Z" }, - { url = "https://files.pythonhosted.org/packages/3c/0d/f05e79471e889d74d3d88f5bd20d0ed189ad94c2423d81ff8d0000aab4ff/pydantic_core-2.41.5-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:e56ba91f47764cc14f1daacd723e3e82d1a89d783f0f5afe9c364b8bb491ccdb", size = 2326039, upload-time = "2025-11-04T13:41:18.934Z" }, - { url = "https://files.pythonhosted.org/packages/ec/e1/e08a6208bb100da7e0c4b288eed624a703f4d129bde2da475721a80cab32/pydantic_core-2.41.5-cp314-cp314-win32.whl", hash = "sha256:aec5cf2fd867b4ff45b9959f8b20ea3993fc93e63c7363fe6851424c8a7e7c23", size = 1995126, upload-time = "2025-11-04T13:41:21.418Z" }, - { url = "https://files.pythonhosted.org/packages/48/5d/56ba7b24e9557f99c9237e29f5c09913c81eeb2f3217e40e922353668092/pydantic_core-2.41.5-cp314-cp314-win_amd64.whl", hash = "sha256:8e7c86f27c585ef37c35e56a96363ab8de4e549a95512445b85c96d3e2f7c1bf", size = 2015489, upload-time = "2025-11-04T13:41:24.076Z" }, - { url = "https://files.pythonhosted.org/packages/4e/bb/f7a190991ec9e3e0ba22e4993d8755bbc4a32925c0b5b42775c03e8148f9/pydantic_core-2.41.5-cp314-cp314-win_arm64.whl", hash = "sha256:e672ba74fbc2dc8eea59fb6d4aed6845e6905fc2a8afe93175d94a83ba2a01a0", size = 1977288, upload-time = "2025-11-04T13:41:26.33Z" }, - { url = "https://files.pythonhosted.org/packages/92/ed/77542d0c51538e32e15afe7899d79efce4b81eee631d99850edc2f5e9349/pydantic_core-2.41.5-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:8566def80554c3faa0e65ac30ab0932b9e3a5cd7f8323764303d468e5c37595a", size = 2120255, upload-time = "2025-11-04T13:41:28.569Z" }, - { url = "https://files.pythonhosted.org/packages/bb/3d/6913dde84d5be21e284439676168b28d8bbba5600d838b9dca99de0fad71/pydantic_core-2.41.5-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:b80aa5095cd3109962a298ce14110ae16b8c1aece8b72f9dafe81cf597ad80b3", size = 1863760, upload-time = "2025-11-04T13:41:31.055Z" }, - { url = "https://files.pythonhosted.org/packages/5a/f0/e5e6b99d4191da102f2b0eb9687aaa7f5bea5d9964071a84effc3e40f997/pydantic_core-2.41.5-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3006c3dd9ba34b0c094c544c6006cc79e87d8612999f1a5d43b769b89181f23c", size = 1878092, upload-time = "2025-11-04T13:41:33.21Z" }, - { url = "https://files.pythonhosted.org/packages/71/48/36fb760642d568925953bcc8116455513d6e34c4beaa37544118c36aba6d/pydantic_core-2.41.5-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:72f6c8b11857a856bcfa48c86f5368439f74453563f951e473514579d44aa612", size = 2053385, upload-time = "2025-11-04T13:41:35.508Z" }, - { url = "https://files.pythonhosted.org/packages/20/25/92dc684dd8eb75a234bc1c764b4210cf2646479d54b47bf46061657292a8/pydantic_core-2.41.5-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5cb1b2f9742240e4bb26b652a5aeb840aa4b417c7748b6f8387927bc6e45e40d", size = 2218832, upload-time = "2025-11-04T13:41:37.732Z" }, - { url = "https://files.pythonhosted.org/packages/e2/09/f53e0b05023d3e30357d82eb35835d0f6340ca344720a4599cd663dca599/pydantic_core-2.41.5-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bd3d54f38609ff308209bd43acea66061494157703364ae40c951f83ba99a1a9", size = 2327585, upload-time = "2025-11-04T13:41:40Z" }, - { url = "https://files.pythonhosted.org/packages/aa/4e/2ae1aa85d6af35a39b236b1b1641de73f5a6ac4d5a7509f77b814885760c/pydantic_core-2.41.5-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2ff4321e56e879ee8d2a879501c8e469414d948f4aba74a2d4593184eb326660", size = 2041078, upload-time = "2025-11-04T13:41:42.323Z" }, - { url = "https://files.pythonhosted.org/packages/cd/13/2e215f17f0ef326fc72afe94776edb77525142c693767fc347ed6288728d/pydantic_core-2.41.5-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d0d2568a8c11bf8225044aa94409e21da0cb09dcdafe9ecd10250b2baad531a9", size = 2173914, upload-time = "2025-11-04T13:41:45.221Z" }, - { url = "https://files.pythonhosted.org/packages/02/7a/f999a6dcbcd0e5660bc348a3991c8915ce6599f4f2c6ac22f01d7a10816c/pydantic_core-2.41.5-cp314-cp314t-musllinux_1_1_aarch64.whl", hash = "sha256:a39455728aabd58ceabb03c90e12f71fd30fa69615760a075b9fec596456ccc3", size = 2129560, upload-time = "2025-11-04T13:41:47.474Z" }, - { url = "https://files.pythonhosted.org/packages/3a/b1/6c990ac65e3b4c079a4fb9f5b05f5b013afa0f4ed6780a3dd236d2cbdc64/pydantic_core-2.41.5-cp314-cp314t-musllinux_1_1_armv7l.whl", hash = "sha256:239edca560d05757817c13dc17c50766136d21f7cd0fac50295499ae24f90fdf", size = 2329244, upload-time = "2025-11-04T13:41:49.992Z" }, - { url = "https://files.pythonhosted.org/packages/d9/02/3c562f3a51afd4d88fff8dffb1771b30cfdfd79befd9883ee094f5b6c0d8/pydantic_core-2.41.5-cp314-cp314t-musllinux_1_1_x86_64.whl", hash = "sha256:2a5e06546e19f24c6a96a129142a75cee553cc018ffee48a460059b1185f4470", size = 2331955, upload-time = "2025-11-04T13:41:54.079Z" }, - { url = "https://files.pythonhosted.org/packages/5c/96/5fb7d8c3c17bc8c62fdb031c47d77a1af698f1d7a406b0f79aaa1338f9ad/pydantic_core-2.41.5-cp314-cp314t-win32.whl", hash = "sha256:b4ececa40ac28afa90871c2cc2b9ffd2ff0bf749380fbdf57d165fd23da353aa", size = 1988906, upload-time = "2025-11-04T13:41:56.606Z" }, - { url = "https://files.pythonhosted.org/packages/22/ed/182129d83032702912c2e2d8bbe33c036f342cc735737064668585dac28f/pydantic_core-2.41.5-cp314-cp314t-win_amd64.whl", hash = "sha256:80aa89cad80b32a912a65332f64a4450ed00966111b6615ca6816153d3585a8c", size = 1981607, upload-time = "2025-11-04T13:41:58.889Z" }, - { url = "https://files.pythonhosted.org/packages/9f/ed/068e41660b832bb0b1aa5b58011dea2a3fe0ba7861ff38c4d4904c1c1a99/pydantic_core-2.41.5-cp314-cp314t-win_arm64.whl", hash = "sha256:35b44f37a3199f771c3eaa53051bc8a70cd7b54f333531c59e29fd4db5d15008", size = 1974769, upload-time = "2025-11-04T13:42:01.186Z" }, - { 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-settings" -version = "2.13.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "pydantic" }, - { name = "python-dotenv" }, - { name = "typing-inspection" }, -] -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 = "pydeck" -version = "0.9.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "jinja2" }, - { name = "numpy" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/a1/ca/40e14e196864a0f61a92abb14d09b3d3da98f94ccb03b49cf51688140dab/pydeck-0.9.1.tar.gz", hash = "sha256:f74475ae637951d63f2ee58326757f8d4f9cd9f2a457cf42950715003e2cb605", size = 3832240, upload-time = "2024-05-10T15:36:21.153Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ab/4c/b888e6cf58bd9db9c93f40d1c6be8283ff49d88919231afe93a6bcf61626/pydeck-0.9.1-py2.py3-none-any.whl", hash = "sha256:b3f75ba0d273fc917094fa61224f3f6076ca8752b93d46faf3bcfd9f9d59b038", size = 6900403, upload-time = "2024-05-10T15:36:17.36Z" }, -] - -[[package]] -name = "pygments" -version = "2.19.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b0/77/a5b8c569bf593b0140bde72ea885a803b82086995367bf2037de0159d924/pygments-2.19.2.tar.gz", hash = "sha256:636cb2477cec7f8952536970bc533bc43743542f70392ae026374600add5b887", size = 4968631, upload-time = "2025-06-21T13:39:12.283Z" } -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 = "pylatexenc" -version = "2.10" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/5d/ab/34ec41718af73c00119d0351b7a2531d2ebddb51833a36448fc7b862be60/pylatexenc-2.10.tar.gz", hash = "sha256:3dd8fd84eb46dc30bee1e23eaab8d8fb5a7f507347b23e5f38ad9675c84f40d3", size = 162597, upload-time = "2021-04-06T07:56:07.854Z" } - -[[package]] -name = "pymilvus" -version = "2.6.9" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "cachetools" }, - { name = "grpcio" }, - { name = "orjson" }, - { name = "pandas" }, - { name = "protobuf" }, - { name = "python-dotenv" }, - { name = "setuptools" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/94/0c/92adff800a04cd3e9b3f17c06fa972c8d590846b1e0bac0ccf39e054b596/pymilvus-2.6.9.tar.gz", hash = "sha256:c53a3d84ff15814e251be13edda70a98a1c8a6090d7597a908387cbb94a9504a", size = 1493560, upload-time = "2026-02-10T11:01:27.415Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/6a/56/ab7f0a5aba6fc06dc210a059d6f6d2ee1f3371d40e2b4366a409576554b8/pymilvus-2.6.9-py3-none-any.whl", hash = "sha256:3e14e8072f6429dcd79d52a24dc021c594cb80841ddd76cb974bc539d1f4cdda", size = 301225, upload-time = "2026-02-10T11:01:25.796Z" }, -] - -[package.optional-dependencies] -model = [ - { name = "pymilvus-model" }, -] - -[[package]] -name = "pymilvus-model" -version = "0.3.2" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "numpy" }, - { name = "onnxruntime" }, - { name = "protobuf" }, - { name = "scipy" }, - { name = "transformers" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/0c/8f/a8212f3d932d566fdec354b49befa09174b239c8b8ad25a33b798cee393b/pymilvus_model-0.3.2.tar.gz", hash = "sha256:10ab49a989396943e08555b971f85182ddb50da47076e699a157c9a5ff542872", size = 36268, upload-time = "2025-03-31T08:47:45.007Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/5b/ba/b34e3f8c57c453c02daf1a1eff9c4b62a2e89fc10a29bc83fb685155fe14/pymilvus_model-0.3.2-py3-none-any.whl", hash = "sha256:df8a90519a2adc47bd40f37d8c250b0ad0c7aaafc6139b52dc896d5cfda55d35", size = 47699, upload-time = "2025-03-31T08:47:43.372Z" }, -] - -[[package]] -name = "pyobjc-core" -version = "12.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b8/b6/d5612eb40be4fd5ef88c259339e6313f46ba67577a95d86c3470b951fce0/pyobjc_core-12.1.tar.gz", hash = "sha256:2bb3903f5387f72422145e1466b3ac3f7f0ef2e9960afa9bcd8961c5cbf8bd21", size = 1000532, upload-time = "2025-11-14T10:08:28.292Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/64/5a/6b15e499de73050f4a2c88fff664ae154307d25dc04da8fb38998a428358/pyobjc_core-12.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:818bcc6723561f207e5b5453efe9703f34bc8781d11ce9b8be286bb415eb4962", size = 678335, upload-time = "2025-11-14T09:32:20.107Z" }, - { url = "https://files.pythonhosted.org/packages/f4/d2/29e5e536adc07bc3d33dd09f3f7cf844bf7b4981820dc2a91dd810f3c782/pyobjc_core-12.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:01c0cf500596f03e21c23aef9b5f326b9fb1f8f118cf0d8b66749b6cf4cbb37a", size = 677370, upload-time = "2025-11-14T09:33:05.273Z" }, - { url = "https://files.pythonhosted.org/packages/1b/f0/4b4ed8924cd04e425f2a07269943018d43949afad1c348c3ed4d9d032787/pyobjc_core-12.1-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:177aaca84bb369a483e4961186704f64b2697708046745f8167e818d968c88fc", size = 719586, upload-time = "2025-11-14T09:33:53.302Z" }, - { url = "https://files.pythonhosted.org/packages/25/98/9f4ed07162de69603144ff480be35cd021808faa7f730d082b92f7ebf2b5/pyobjc_core-12.1-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:844515f5d86395b979d02152576e7dee9cc679acc0b32dc626ef5bda315eaa43", size = 670164, upload-time = "2025-11-14T09:34:37.458Z" }, - { url = "https://files.pythonhosted.org/packages/62/50/dc076965c96c7f0de25c0a32b7f8aa98133ed244deaeeacfc758783f1f30/pyobjc_core-12.1-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:453b191df1a4b80e756445b935491b974714456ae2cbae816840bd96f86db882", size = 712204, upload-time = "2025-11-14T09:35:24.148Z" }, -] - -[[package]] -name = "pyobjc-framework-cocoa" -version = "12.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "pyobjc-core" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/02/a3/16ca9a15e77c061a9250afbae2eae26f2e1579eb8ca9462ae2d2c71e1169/pyobjc_framework_cocoa-12.1.tar.gz", hash = "sha256:5556c87db95711b985d5efdaaf01c917ddd41d148b1e52a0c66b1a2e2c5c1640", size = 2772191, upload-time = "2025-11-14T10:13:02.069Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/95/bf/ee4f27ec3920d5c6fc63c63e797c5b2cc4e20fe439217085d01ea5b63856/pyobjc_framework_cocoa-12.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:547c182837214b7ec4796dac5aee3aa25abc665757b75d7f44f83c994bcb0858", size = 384590, upload-time = "2025-11-14T09:41:17.336Z" }, - { url = "https://files.pythonhosted.org/packages/ad/31/0c2e734165abb46215797bd830c4bdcb780b699854b15f2b6240515edcc6/pyobjc_framework_cocoa-12.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:5a3dcd491cacc2f5a197142b3c556d8aafa3963011110102a093349017705118", size = 384689, upload-time = "2025-11-14T09:41:41.478Z" }, - { url = "https://files.pythonhosted.org/packages/23/3b/b9f61be7b9f9b4e0a6db18b3c35c4c4d589f2d04e963e2174d38c6555a92/pyobjc_framework_cocoa-12.1-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:914b74328c22d8ca261d78c23ef2befc29776e0b85555973927b338c5734ca44", size = 388843, upload-time = "2025-11-14T09:42:05.719Z" }, - { url = "https://files.pythonhosted.org/packages/59/bb/f777cc9e775fc7dae77b569254570fe46eb842516b3e4fe383ab49eab598/pyobjc_framework_cocoa-12.1-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:03342a60fc0015bcdf9b93ac0b4f457d3938e9ef761b28df9564c91a14f0129a", size = 384932, upload-time = "2025-11-14T09:42:29.771Z" }, - { url = "https://files.pythonhosted.org/packages/58/27/b457b7b37089cad692c8aada90119162dfb4c4a16f513b79a8b2b022b33b/pyobjc_framework_cocoa-12.1-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:6ba1dc1bfa4da42d04e93d2363491275fb2e2be5c20790e561c8a9e09b8cf2cc", size = 388970, upload-time = "2025-11-14T09:42:53.964Z" }, -] - -[[package]] -name = "pyobjc-framework-coreml" -version = "12.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "pyobjc-core" }, - { name = "pyobjc-framework-cocoa" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/30/2d/baa9ea02cbb1c200683cb7273b69b4bee5070e86f2060b77e6a27c2a9d7e/pyobjc_framework_coreml-12.1.tar.gz", hash = "sha256:0d1a4216891a18775c9e0170d908714c18e4f53f9dc79fb0f5263b2aa81609ba", size = 40465, upload-time = "2025-11-14T10:14:02.265Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/bb/39/4defef0deb25c5d7e3b7826d301e71ac5b54ef901b7dac4db1adc00f172d/pyobjc_framework_coreml-12.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:10dc8e8db53d7631ebc712cad146e3a9a9a443f4e1a037e844149a24c3c42669", size = 11356, upload-time = "2025-11-14T09:45:52.271Z" }, - { url = "https://files.pythonhosted.org/packages/ae/3f/3749964aa3583f8c30d9996f0d15541120b78d307bb3070f5e47154ef38d/pyobjc_framework_coreml-12.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:48fa3bb4a03fa23e0e36c93936dca2969598e4102f4b441e1663f535fc99cd31", size = 11371, upload-time = "2025-11-14T09:45:54.105Z" }, - { url = "https://files.pythonhosted.org/packages/9c/c8/cf20ea91ae33f05f3b92dec648c6f44a65f86d1a64c1d6375c95b85ccb7c/pyobjc_framework_coreml-12.1-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:71de5b37e6a017e3ed16645c5d6533138f24708da5b56c35c818ae49d0253ee1", size = 11600, upload-time = "2025-11-14T09:45:55.976Z" }, - { url = "https://files.pythonhosted.org/packages/bc/5c/510ae8e3663238d32e653ed6a09ac65611dd045a7241f12633c1ab48bb9b/pyobjc_framework_coreml-12.1-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:a04a96e512ecf6999aa9e1f60ad5635cb9d1cd839be470341d8d1541797baef6", size = 11418, upload-time = "2025-11-14T09:45:57.75Z" }, - { url = "https://files.pythonhosted.org/packages/d3/1a/b7367819381b07c440fa5797d2b0487e31f09aa72079a693ceab6875fa0a/pyobjc_framework_coreml-12.1-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:7762b3dd2de01565b7cf3049ce1e4c27341ba179d97016b0b7607448e1c39865", size = 11593, upload-time = "2025-11-14T09:45:59.623Z" }, -] - -[[package]] -name = "pyobjc-framework-quartz" -version = "12.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "pyobjc-core" }, - { name = "pyobjc-framework-cocoa" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/94/18/cc59f3d4355c9456fc945eae7fe8797003c4da99212dd531ad1b0de8a0c6/pyobjc_framework_quartz-12.1.tar.gz", hash = "sha256:27f782f3513ac88ec9b6c82d9767eef95a5cf4175ce88a1e5a65875fee799608", size = 3159099, upload-time = "2025-11-14T10:21:24.31Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e9/9b/780f057e5962f690f23fdff1083a4cfda5a96d5b4d3bb49505cac4f624f2/pyobjc_framework_quartz-12.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:7730cdce46c7e985535b5a42c31381af4aa6556e5642dc55b5e6597595e57a16", size = 218798, upload-time = "2025-11-14T10:00:01.236Z" }, - { url = "https://files.pythonhosted.org/packages/ba/2d/e8f495328101898c16c32ac10e7b14b08ff2c443a756a76fd1271915f097/pyobjc_framework_quartz-12.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:629b7971b1b43a11617f1460cd218bd308dfea247cd4ee3842eb40ca6f588860", size = 219206, upload-time = "2025-11-14T10:00:15.623Z" }, - { url = "https://files.pythonhosted.org/packages/67/43/b1f0ad3b842ab150a7e6b7d97f6257eab6af241b4c7d14cb8e7fde9214b8/pyobjc_framework_quartz-12.1-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:53b84e880c358ba1ddcd7e8d5ea0407d760eca58b96f0d344829162cda5f37b3", size = 224317, upload-time = "2025-11-14T10:00:30.703Z" }, - { url = "https://files.pythonhosted.org/packages/4a/00/96249c5c7e5aaca5f688ca18b8d8ad05cd7886ebd639b3c71a6a4cadbe75/pyobjc_framework_quartz-12.1-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:42d306b07f05ae7d155984503e0fb1b701fecd31dcc5c79fe8ab9790ff7e0de0", size = 219558, upload-time = "2025-11-14T10:00:45.476Z" }, - { url = "https://files.pythonhosted.org/packages/4d/a6/708a55f3ff7a18c403b30a29a11dccfed0410485a7548c60a4b6d4cc0676/pyobjc_framework_quartz-12.1-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:0cc08fddb339b2760df60dea1057453557588908e42bdc62184b6396ce2d6e9a", size = 224580, upload-time = "2025-11-14T10:01:00.091Z" }, -] - -[[package]] -name = "pyobjc-framework-vision" -version = "12.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "pyobjc-core" }, - { name = "pyobjc-framework-cocoa" }, - { name = "pyobjc-framework-coreml" }, - { name = "pyobjc-framework-quartz" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/c2/5a/08bb3e278f870443d226c141af14205ff41c0274da1e053b72b11dfc9fb2/pyobjc_framework_vision-12.1.tar.gz", hash = "sha256:a30959100e85dcede3a786c544e621ad6eb65ff6abf85721f805822b8c5fe9b0", size = 59538, upload-time = "2025-11-14T10:23:21.979Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/3a/5a/23502935b3fc877d7573e743fc3e6c28748f33a45c43851d503bde52cde7/pyobjc_framework_vision-12.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:6b3211d84f3a12aad0cde752cfd43a80d0218960ac9e6b46b141c730e7d655bd", size = 16625, upload-time = "2025-11-14T10:06:44.422Z" }, - { url = "https://files.pythonhosted.org/packages/f5/e4/e87361a31b82b22f8c0a59652d6e17625870dd002e8da75cb2343a84f2f9/pyobjc_framework_vision-12.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:7273e2508db4c2e88523b4b7ff38ac54808756e7ba01d78e6c08ea68f32577d2", size = 16640, upload-time = "2025-11-14T10:06:46.653Z" }, - { url = "https://files.pythonhosted.org/packages/b1/dd/def55d8a80b0817f486f2712fc6243482c3264d373dc5ff75037b3aeb7ea/pyobjc_framework_vision-12.1-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:04296f0848cc8cdead66c76df6063720885cbdf24fdfd1900749a6e2297313db", size = 16782, upload-time = "2025-11-14T10:06:48.816Z" }, - { url = "https://files.pythonhosted.org/packages/a7/a4/ee1ef14d6e1df6617e64dbaaa0ecf8ecb9e0af1425613fa633f6a94049c1/pyobjc_framework_vision-12.1-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:631add775ed1dafb221a6116137cdcd78432addc16200ca434571c2a039c0e03", size = 16614, upload-time = "2025-11-14T10:06:50.852Z" }, - { url = "https://files.pythonhosted.org/packages/af/53/187743d9244becd4499a77f8ee699ae286e2f6ade7c0c7ad2975ae60f187/pyobjc_framework_vision-12.1-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:fe41a1a70cc91068aee7b5293fa09dc66d1c666a8da79fdf948900988b439df6", size = 16771, upload-time = "2025-11-14T10:06:53.04Z" }, -] - -[[package]] -name = "pypdfium2" -version = "5.5.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/fb/f6/42f5f1b9beb7e036f5532832b9c590fd107c52a78f704302c03bc6793954/pypdfium2-5.5.0.tar.gz", hash = "sha256:3283c61f54c3c546d140da201ef48a51c18b0ad54293091a010029ac13ece23a", size = 270502, upload-time = "2026-02-18T23:22:37.643Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/08/c0/cdddce35108c118cc110c1c2ed16de82d74d7646b9bcf98eae2fa440966b/pypdfium2-5.5.0-py3-none-android_23_arm64_v8a.whl", hash = "sha256:414f0b4aef7413e04df7355043fb752f2efb6f9777e04fd880d302612dacf89f", size = 2760984, upload-time = "2026-02-18T23:21:56.668Z" }, - { url = "https://files.pythonhosted.org/packages/d0/c7/23a6fbd6d23fd8dbe657696acd81fba858639ef221254ce05970152ad1d8/pypdfium2-5.5.0-py3-none-android_23_armeabi_v7a.whl", hash = "sha256:126ff8b131d12f16ce96b3e85b7f413e5073212be06b571f157fe11ad221c274", size = 2303146, upload-time = "2026-02-18T23:21:58.466Z" }, - { url = "https://files.pythonhosted.org/packages/bc/a9/379ec56c4481f39f0e37a7ce42f4844e6ddd7662571922e2b348105960ab/pypdfium2-5.5.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:0770bd3f0be5c68443fc4017e43b1b1fe8f36877481cab70fd29b68b2c362e1b", size = 2815036, upload-time = "2026-02-18T23:22:00.288Z" }, - { url = "https://files.pythonhosted.org/packages/91/a4/b0cc01aaae1fdf1ca4e080cc55bb432f5a2234f33209a602bc498a47850d/pypdfium2-5.5.0-py3-none-macosx_11_0_x86_64.whl", hash = "sha256:5ab41a3b9953d9be44be35c36a2340f1d67c602db98a0d6f70006610871ae43a", size = 2948686, upload-time = "2026-02-18T23:22:02.213Z" }, - { url = "https://files.pythonhosted.org/packages/26/99/25a0c71b551d100b505c618910afec0df402b230e087078c8078f8b1fcff/pypdfium2-5.5.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2492a22c3126a004cee2fa208ea4aa03ede2c7e205d05814934ab18f83d073e9", size = 2977311, upload-time = "2026-02-18T23:22:03.603Z" }, - { url = "https://files.pythonhosted.org/packages/85/64/691e21539566f7a0521295948b5589d2fdfe3df5acab9c29ff410633a839/pypdfium2-5.5.0-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:83ff93e08b1fadb00040564e2eccc99147fc1a632ba5daff745126b373d78446", size = 2762449, upload-time = "2026-02-18T23:22:05.044Z" }, - { url = "https://files.pythonhosted.org/packages/74/b1/9af288557291e2964bf5ffd460b7ed1090fcb8c54addfd6c7c5deb9ba7c7/pypdfium2-5.5.0-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b7e85de3332bedf8e5f157c248063b4eaf968660e1e490353b6e581d9f96a4c6", size = 3074851, upload-time = "2026-02-18T23:22:07.431Z" }, - { url = "https://files.pythonhosted.org/packages/a4/1e/c61fddbdea5ea1ba478dc7ecc9d68069d17b858e5fed04e4e071811f0858/pypdfium2-5.5.0-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e258365f34b6e334bb415e44dd9b1ee78a6e525bf854a1e74af67af7ede7555b", size = 3423003, upload-time = "2026-02-18T23:22:09.749Z" }, - { url = "https://files.pythonhosted.org/packages/36/5f/d2eb58c54abba3a6c3bc4c297b3a11348dd4b4deb073f1aa8a872a298278/pypdfium2-5.5.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bec21d833404ca771f02fa5cefb0b73e2148f05cbdb3b5b9989bdd51d9b5cbac", size = 3002104, upload-time = "2026-02-18T23:22:12.035Z" }, - { url = "https://files.pythonhosted.org/packages/1c/33/87423eec4f5d4287d5a1726dbb9f06fb1f1aebc38ff75dcff817c492769d/pypdfium2-5.5.0-py3-none-manylinux_2_27_s390x.manylinux_2_28_s390x.whl", hash = "sha256:1dd6ccbe1b5e2e778e8b021e47f9485b4fd42eaa6c9bdda2631641724e1fcc04", size = 3097209, upload-time = "2026-02-18T23:22:13.809Z" }, - { url = "https://files.pythonhosted.org/packages/97/0a/a3fd71f00838bba7922691107219bee67f50fbda6d12df330ef485a97848/pypdfium2-5.5.0-py3-none-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:da3eada345570cec5e34872d1472d4ac542f0e650ccdb6c2eac08ae1a5f07c82", size = 2965027, upload-time = "2026-02-18T23:22:16.324Z" }, - { url = "https://files.pythonhosted.org/packages/75/4a/2181260bd8a0b1b30ac50b7fd6ee3366e04f3a9f1c29351d882652da7fa7/pypdfium2-5.5.0-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:a087fb4088c7433fd3d78833dbe42cfb66df3d5ac98e3edf66110520fb33c0f0", size = 4131431, upload-time = "2026-02-18T23:22:18.469Z" }, - { url = "https://files.pythonhosted.org/packages/15/bb/3ccf481191346eda11c0c208bd4e46f8de019ae7d9e9c1b660633f0bb3f4/pypdfium2-5.5.0-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:e6418cdc500ef85a90319f9bc7f1c54fc133460379f509429403225d8a4c157f", size = 3747468, upload-time = "2026-02-18T23:22:20.679Z" }, - { url = "https://files.pythonhosted.org/packages/15/51/17e50ec72cf2235ac18d9cbe907859501c769d3e964818fefac6a3e10727/pypdfium2-5.5.0-py3-none-musllinux_1_2_i686.whl", hash = "sha256:8f7b66eedfac26eb2df4b00936e081b0a1c76fb8ee1c12639d85c2e73b0769ef", size = 4337579, upload-time = "2026-02-18T23:22:23.245Z" }, - { url = "https://files.pythonhosted.org/packages/c6/e4/f9bdf06f4d3f1e56eff9d997392a00a4b66cbc9c20f33934c4edc2a7943f/pypdfium2-5.5.0-py3-none-musllinux_1_2_ppc64le.whl", hash = "sha256:faea3246591ce2ea6218cd06679071275e3c65f11c3f5c9091eb7fb07610af6a", size = 4376104, upload-time = "2026-02-18T23:22:25.337Z" }, - { url = "https://files.pythonhosted.org/packages/8c/20/06baf1f5d494e035f50fc895fa1da5ed652d03ecc59aeb3aabb0daa5adfc/pypdfium2-5.5.0-py3-none-musllinux_1_2_riscv64.whl", hash = "sha256:aba26d404b51a9de3d3e80c867a95c71abf1c79552001ae22707451e59186b3d", size = 3929824, upload-time = "2026-02-18T23:22:26.889Z" }, - { url = "https://files.pythonhosted.org/packages/3a/01/28940e54e6936674e9a05eb58ccce7c54d8e2ac81cd84ec0b76e7d32a010/pypdfium2-5.5.0-py3-none-musllinux_1_2_s390x.whl", hash = "sha256:e0fa8f81679e6e71f26806f4db853571ee6435dc3bde7a46acdd182ef886a5b9", size = 4270200, upload-time = "2026-02-18T23:22:28.668Z" }, - { url = "https://files.pythonhosted.org/packages/cb/d4/1f36c505a3770aad9a88c895a46d61fd4c0535f79548f02c93b97ff89604/pypdfium2-5.5.0-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:ee22df3376d350eeb64d2002a1071e3a02c0d874c557a3cd8229a8fc572cdaac", size = 4180794, upload-time = "2026-02-18T23:22:30.11Z" }, - { url = "https://files.pythonhosted.org/packages/ac/38/f77e7792b4fba37f0e3d78db52fb7288d41db3c46ed28906fb940bc3e325/pypdfium2-5.5.0-py3-none-win32.whl", hash = "sha256:ec62a00223d1222d2f35c0866dd79cdc24da070738544cdf51b17d332d4a7389", size = 3001772, upload-time = "2026-02-18T23:22:32.367Z" }, - { url = "https://files.pythonhosted.org/packages/3e/c5/0d7ba53148262f78d8eee528a504764f78ae7bebf434a53714294b1fd973/pypdfium2-5.5.0-py3-none-win_amd64.whl", hash = "sha256:15c32fbeebb5198afa785dd03e98906ebb4eded9ef8862e10f833c37b4a18786", size = 3107710, upload-time = "2026-02-18T23:22:33.925Z" }, - { url = "https://files.pythonhosted.org/packages/29/ad/fae449d2ed7b3088c6ab088f53fc6a9e9af26ccc9e0477d4182e373c4dd8/pypdfium2-5.5.0-py3-none-win_arm64.whl", hash = "sha256:f618af0884c16c768539c44933a255039131dbbf39d68eded020da4f14958d73", size = 2938315, upload-time = "2026-02-18T23:22:35.907Z" }, -] - -[[package]] -name = "pytest" -version = "9.0.2" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "colorama", marker = "sys_platform == 'win32'" }, - { name = "iniconfig" }, - { name = "packaging" }, - { name = "pluggy" }, - { name = "pygments" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/d1/db/7ef3487e0fb0049ddb5ce41d3a49c235bf9ad299b6a25d5780a89f19230f/pytest-9.0.2.tar.gz", hash = "sha256:75186651a92bd89611d1d9fc20f0b4345fd827c41ccd5c299a868a05d70edf11", size = 1568901, upload-time = "2025-12-06T21:30:51.014Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/3b/ab/b3226f0bd7cdcf710fbede2b3548584366da3b19b5021e74f5bde2a8fa3f/pytest-9.0.2-py3-none-any.whl", hash = "sha256:711ffd45bf766d5264d487b917733b453d917afd2b0ad65223959f59089f875b", size = 374801, upload-time = "2025-12-06T21:30:49.154Z" }, -] - -[[package]] -name = "python-dateutil" -version = "2.9.0.post0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "six" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/66/c0/0c8b6ad9f17a802ee498c46e004a0eb49bc148f2fd230864601a86dcf6db/python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", size = 342432, upload-time = "2024-03-01T18:36:20.211Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427", size = 229892, upload-time = "2024-03-01T18:36:18.57Z" }, -] - -[[package]] -name = "python-docx" -version = "1.2.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "lxml" }, - { name = "typing-extensions" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/a9/f7/eddfe33871520adab45aaa1a71f0402a2252050c14c7e3009446c8f4701c/python_docx-1.2.0.tar.gz", hash = "sha256:7bc9d7b7d8a69c9c02ca09216118c86552704edc23bac179283f2e38f86220ce", size = 5723256, upload-time = "2025-06-16T20:46:27.921Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/d0/00/1e03a4989fa5795da308cd774f05b704ace555a70f9bf9d3be057b680bcf/python_docx-1.2.0-py3-none-any.whl", hash = "sha256:3fd478f3250fbbbfd3b94fe1e985955737c145627498896a8a6bf81f4baf66c7", size = 252987, upload-time = "2025-06-16T20:46:22.506Z" }, -] - -[[package]] -name = "python-dotenv" -version = "1.2.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/82/ed/0301aeeac3e5353ef3d94b6ec08bbcabd04a72018415dcb29e588514bba8/python_dotenv-1.2.2.tar.gz", hash = "sha256:2c371a91fbd7ba082c2c1dc1f8bf89ca22564a087c2c287cd9b662adde799cf3", size = 50135, upload-time = "2026-03-01T16:00:26.196Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/0b/d7/1959b9648791274998a9c3526f6d0ec8fd2233e4d4acce81bbae76b44b2a/python_dotenv-1.2.2-py3-none-any.whl", hash = "sha256:1d8214789a24de455a8b8bd8ae6fe3c6b69a5e3d64aa8a8e5d68e694bbcb285a", size = 22101, upload-time = "2026-03-01T16:00:25.09Z" }, -] - -[[package]] -name = "python-pptx" -version = "1.0.2" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "lxml" }, - { name = "pillow" }, - { name = "typing-extensions" }, - { name = "xlsxwriter" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/52/a9/0c0db8d37b2b8a645666f7fd8accea4c6224e013c42b1d5c17c93590cd06/python_pptx-1.0.2.tar.gz", hash = "sha256:479a8af0eaf0f0d76b6f00b0887732874ad2e3188230315290cd1f9dd9cc7095", size = 10109297, upload-time = "2024-08-07T17:33:37.772Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/d9/4f/00be2196329ebbff56ce564aa94efb0fbc828d00de250b1980de1a34ab49/python_pptx-1.0.2-py3-none-any.whl", hash = "sha256:160838e0b8565a8b1f67947675886e9fea18aa5e795db7ae531606d68e785cba", size = 472788, upload-time = "2024-08-07T17:33:28.192Z" }, -] - -[[package]] -name = "pytrec-eval-terrier" -version = "0.5.10" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "numpy" }, - { name = "scipy" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/04/96/4925a95e4865a647bc74d3bb052243d12a3c8e8a34909d7d097b5a4d08c5/pytrec_eval_terrier-0.5.10.tar.gz", hash = "sha256:eaaf20580d17b5575a233e04dab8a4cbcc01a7e45be8cf547c07f0a2bb3e7eb9", size = 18634, upload-time = "2025-10-20T16:50:18.098Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/d3/ca/f0edd9df08c08c96d2f088c298cfb824c3ee816302ac1f911ecb1bfdd681/pytrec_eval_terrier-0.5.10-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:e28c3c14728713cdbad165964e2d1aba96b0fc7445a5a13168b398e9bd3bbd08", size = 137179, upload-time = "2025-10-20T16:51:07.809Z" }, - { url = "https://files.pythonhosted.org/packages/73/55/e02a14b0d3ac520849f66391f03c6783b3383fd23a19372d07a2280b815e/pytrec_eval_terrier-0.5.10-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:689ee541d72c27d14ae15cd1f11d2cb86cf9bdc880f5e8af9c5dbbdd47663d4d", size = 304845, upload-time = "2025-10-20T16:54:17.791Z" }, - { url = "https://files.pythonhosted.org/packages/76/9c/9020b700199b09ebdfc6dbadae81641a49555c4ee21dedbe2aa98af601b5/pytrec_eval_terrier-0.5.10-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3f02118dadd3c09b71462bb26e405e49bd10fe0c60bcc169fcd31454a4256dc2", size = 1327965, upload-time = "2025-10-20T16:54:18.743Z" }, - { url = "https://files.pythonhosted.org/packages/39/9e/6e7c2b89f52e1cebeef6c3bb47272f5bd69766ddbc6e9e5445da0c876899/pytrec_eval_terrier-0.5.10-cp312-cp312-win_amd64.whl", hash = "sha256:202e48fe24948453fe45dcd73261f9865f99cb2ff4c8a3255ac2ab4c993a64ba", size = 58641, upload-time = "2025-10-20T16:51:26.148Z" }, - { url = "https://files.pythonhosted.org/packages/93/21/71a0dee7e2cd368237432af6bf6051ffde03370730dc1666cd39494c82a7/pytrec_eval_terrier-0.5.10-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:fcf96c33446c16de8db78e829c5279f7404ceaaf6b502bb5a6a3669b06051601", size = 137186, upload-time = "2025-10-20T16:50:22.941Z" }, - { url = "https://files.pythonhosted.org/packages/5c/8c/2494edf20d726bdd3ee0a20dc5ed84351c6cc6ccc17b11b474e315808762/pytrec_eval_terrier-0.5.10-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8455485f1faf6759f1be11b12c904d1c749ba5db7e2b6f414aa56e19533ce069", size = 304917, upload-time = "2025-10-20T16:54:20.486Z" }, - { url = "https://files.pythonhosted.org/packages/cf/51/7611546afb55548e65db35354a63b90d5fd5ea593fc64e5993088bf61415/pytrec_eval_terrier-0.5.10-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e7cc9666305281b0ca1873761dc71cd3f0863e6d759f00a12fd363aa2d558d6f", size = 1327998, upload-time = "2025-10-20T16:54:21.375Z" }, - { url = "https://files.pythonhosted.org/packages/74/b3/20941b4dbe3b267271ed1ef80aa93b348da674aecb5d6aca8f311c4738b0/pytrec_eval_terrier-0.5.10-cp313-cp313-win_amd64.whl", hash = "sha256:9440bd4a78ee0bc5db6821d7483e962a6c494303fd26598f84f00d54cc64cdd7", size = 58631, upload-time = "2025-10-20T16:51:05.08Z" }, - { url = "https://files.pythonhosted.org/packages/f0/34/e3d0f75286151d97537309b3f311e1269b0194e3823038fc39054e84c3b4/pytrec_eval_terrier-0.5.10-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:70bc61b8d02e61a37ed97c088282bb0a124b58e7141cc52756512750efabacbb", size = 137320, upload-time = "2025-10-20T16:50:50.92Z" }, - { url = "https://files.pythonhosted.org/packages/1c/72/2c1f9fd44ed7a5657654a712e5255019d5d23ba2b3d53848da1838bfb8df/pytrec_eval_terrier-0.5.10-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d52d94803c32cadbff7fe5195b0d0d68d27393092f64207fe8250a4485d1f8d7", size = 304917, upload-time = "2025-10-20T16:54:22.59Z" }, - { url = "https://files.pythonhosted.org/packages/66/9d/7e440de7b37dd31cd78eefe2ec1bf3e5f49db42b17b34dc8d6006ee03fc5/pytrec_eval_terrier-0.5.10-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:77950d0ce9bd960af40efede6850e7b6519400e7fda3f9313e0d0d02c247e4e2", size = 1327991, upload-time = "2025-10-20T16:54:23.76Z" }, - { url = "https://files.pythonhosted.org/packages/ef/94/5639d7c346935a75540c1f1798be277c161b561001f2a91ef303e3d85f10/pytrec_eval_terrier-0.5.10-cp314-cp314-win_amd64.whl", hash = "sha256:c69681fec350fa94af45dd7ef8f53f605e89f752583c814f713d7d2329435cfc", size = 60178, upload-time = "2025-10-20T16:51:50.946Z" }, - { url = "https://files.pythonhosted.org/packages/f4/a7/9080fe3f971397ea4447e3bda0c350225c944047ede7927c9a1f788af000/pytrec_eval_terrier-0.5.10-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:876740f3d58625058d34aaa1939be31bf253ecacd85d0d8b1089db5dd57ab127", size = 308002, upload-time = "2025-10-20T16:54:24.746Z" }, - { url = "https://files.pythonhosted.org/packages/ad/c9/5bf9d58cb275559211ba4af905c5a4d95f78c4b973f4186f8b22d8c0b073/pytrec_eval_terrier-0.5.10-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:2ca4e624e5f2589ae75c1034ff1f38e9fc81de86314193508ac423e7ca56769c", size = 1330474, upload-time = "2025-10-20T16:54:25.569Z" }, -] - -[[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 = "pywin32" -version = "311" -source = { registry = "https://pypi.org/simple" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e7/ab/01ea1943d4eba0f850c3c61e78e8dd59757ff815ff3ccd0a84de5f541f42/pywin32-311-cp312-cp312-win32.whl", hash = "sha256:750ec6e621af2b948540032557b10a2d43b0cee2ae9758c54154d711cc852d31", size = 8706543, upload-time = "2025-07-14T20:13:20.765Z" }, - { url = "https://files.pythonhosted.org/packages/d1/a8/a0e8d07d4d051ec7502cd58b291ec98dcc0c3fff027caad0470b72cfcc2f/pywin32-311-cp312-cp312-win_amd64.whl", hash = "sha256:b8c095edad5c211ff31c05223658e71bf7116daa0ecf3ad85f3201ea3190d067", size = 9495040, upload-time = "2025-07-14T20:13:22.543Z" }, - { url = "https://files.pythonhosted.org/packages/ba/3a/2ae996277b4b50f17d61f0603efd8253cb2d79cc7ae159468007b586396d/pywin32-311-cp312-cp312-win_arm64.whl", hash = "sha256:e286f46a9a39c4a18b319c28f59b61de793654af2f395c102b4f819e584b5852", size = 8710102, upload-time = "2025-07-14T20:13:24.682Z" }, - { url = "https://files.pythonhosted.org/packages/a5/be/3fd5de0979fcb3994bfee0d65ed8ca9506a8a1260651b86174f6a86f52b3/pywin32-311-cp313-cp313-win32.whl", hash = "sha256:f95ba5a847cba10dd8c4d8fefa9f2a6cf283b8b88ed6178fa8a6c1ab16054d0d", size = 8705700, upload-time = "2025-07-14T20:13:26.471Z" }, - { url = "https://files.pythonhosted.org/packages/e3/28/e0a1909523c6890208295a29e05c2adb2126364e289826c0a8bc7297bd5c/pywin32-311-cp313-cp313-win_amd64.whl", hash = "sha256:718a38f7e5b058e76aee1c56ddd06908116d35147e133427e59a3983f703a20d", size = 9494700, upload-time = "2025-07-14T20:13:28.243Z" }, - { url = "https://files.pythonhosted.org/packages/04/bf/90339ac0f55726dce7d794e6d79a18a91265bdf3aa70b6b9ca52f35e022a/pywin32-311-cp313-cp313-win_arm64.whl", hash = "sha256:7b4075d959648406202d92a2310cb990fea19b535c7f4a78d3f5e10b926eeb8a", size = 8709318, upload-time = "2025-07-14T20:13:30.348Z" }, - { url = "https://files.pythonhosted.org/packages/c9/31/097f2e132c4f16d99a22bfb777e0fd88bd8e1c634304e102f313af69ace5/pywin32-311-cp314-cp314-win32.whl", hash = "sha256:b7a2c10b93f8986666d0c803ee19b5990885872a7de910fc460f9b0c2fbf92ee", size = 8840714, upload-time = "2025-07-14T20:13:32.449Z" }, - { url = "https://files.pythonhosted.org/packages/90/4b/07c77d8ba0e01349358082713400435347df8426208171ce297da32c313d/pywin32-311-cp314-cp314-win_amd64.whl", hash = "sha256:3aca44c046bd2ed8c90de9cb8427f581c479e594e99b5c0bb19b29c10fd6cb87", size = 9656800, upload-time = "2025-07-14T20:13:34.312Z" }, - { url = "https://files.pythonhosted.org/packages/c0/d2/21af5c535501a7233e734b8af901574572da66fcc254cb35d0609c9080dd/pywin32-311-cp314-cp314-win_arm64.whl", hash = "sha256:a508e2d9025764a8270f93111a970e1d0fbfc33f4153b388bb649b7eec4f9b42", size = 8932540, upload-time = "2025-07-14T20:13:36.379Z" }, -] - -[[package]] -name = "pywin32-ctypes" -version = "0.2.3" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/85/9f/01a1a99704853cb63f253eea009390c88e7131c67e66a0a02099a8c917cb/pywin32-ctypes-0.2.3.tar.gz", hash = "sha256:d162dc04946d704503b2edc4d55f3dba5c1d539ead017afa00142c38b9885755", size = 29471, upload-time = "2024-08-14T10:15:34.626Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/de/3d/8161f7711c017e01ac9f008dfddd9410dff3674334c233bde66e7ba65bbf/pywin32_ctypes-0.2.3-py3-none-any.whl", hash = "sha256:8a1513379d709975552d202d942d9837758905c8d01eb82b8bcc30918929e7b8", size = 30756, upload-time = "2024-08-14T10:15:33.187Z" }, -] - -[[package]] -name = "pyyaml" -version = "6.0.3" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/05/8e/961c0007c59b8dd7729d542c61a4d537767a59645b82a0b521206e1e25c2/pyyaml-6.0.3.tar.gz", hash = "sha256:d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f", size = 130960, upload-time = "2025-09-25T21:33:16.546Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/d1/33/422b98d2195232ca1826284a76852ad5a86fe23e31b009c9886b2d0fb8b2/pyyaml-6.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7f047e29dcae44602496db43be01ad42fc6f1cc0d8cd6c83d342306c32270196", size = 182063, upload-time = "2025-09-25T21:32:11.445Z" }, - { url = "https://files.pythonhosted.org/packages/89/a0/6cf41a19a1f2f3feab0e9c0b74134aa2ce6849093d5517a0c550fe37a648/pyyaml-6.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:fc09d0aa354569bc501d4e787133afc08552722d3ab34836a80547331bb5d4a0", size = 173973, upload-time = "2025-09-25T21:32:12.492Z" }, - { url = "https://files.pythonhosted.org/packages/ed/23/7a778b6bd0b9a8039df8b1b1d80e2e2ad78aa04171592c8a5c43a56a6af4/pyyaml-6.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9149cad251584d5fb4981be1ecde53a1ca46c891a79788c0df828d2f166bda28", size = 775116, upload-time = "2025-09-25T21:32:13.652Z" }, - { url = "https://files.pythonhosted.org/packages/65/30/d7353c338e12baef4ecc1b09e877c1970bd3382789c159b4f89d6a70dc09/pyyaml-6.0.3-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5fdec68f91a0c6739b380c83b951e2c72ac0197ace422360e6d5a959d8d97b2c", size = 844011, upload-time = "2025-09-25T21:32:15.21Z" }, - { url = "https://files.pythonhosted.org/packages/8b/9d/b3589d3877982d4f2329302ef98a8026e7f4443c765c46cfecc8858c6b4b/pyyaml-6.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ba1cc08a7ccde2d2ec775841541641e4548226580ab850948cbfda66a1befcdc", size = 807870, upload-time = "2025-09-25T21:32:16.431Z" }, - { url = "https://files.pythonhosted.org/packages/05/c0/b3be26a015601b822b97d9149ff8cb5ead58c66f981e04fedf4e762f4bd4/pyyaml-6.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8dc52c23056b9ddd46818a57b78404882310fb473d63f17b07d5c40421e47f8e", size = 761089, upload-time = "2025-09-25T21:32:17.56Z" }, - { url = "https://files.pythonhosted.org/packages/be/8e/98435a21d1d4b46590d5459a22d88128103f8da4c2d4cb8f14f2a96504e1/pyyaml-6.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:41715c910c881bc081f1e8872880d3c650acf13dfa8214bad49ed4cede7c34ea", size = 790181, upload-time = "2025-09-25T21:32:18.834Z" }, - { 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" }, - { 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]] -name = "rapidocr" -version = "3.7.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "colorlog" }, - { name = "numpy" }, - { name = "omegaconf" }, - { name = "opencv-python" }, - { name = "pillow" }, - { name = "pyclipper" }, - { name = "pyyaml" }, - { name = "requests" }, - { name = "shapely" }, - { name = "six" }, - { name = "tqdm" }, -] -wheels = [ - { url = "https://files.pythonhosted.org/packages/5c/b8/011338eec8aea40cf9b82da7481f3e65e100537cff4c866b3c1b1e719b97/rapidocr-3.7.0-py3-none-any.whl", hash = "sha256:ace47f037956fa3780875f8556a0f27ab20d91962d36a9a2816aa367bb48718f", size = 15080131, upload-time = "2026-03-04T15:38:20.339Z" }, -] - -[[package]] -name = "referencing" -version = "0.37.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "attrs" }, - { name = "rpds-py" }, - { name = "typing-extensions", marker = "python_full_version < '3.13'" }, -] -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 = [ - { url = "https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl", hash = "sha256:381329a9f99628c9069361716891d34ad94af76e461dcb0335825aecc7692231", size = 26766, upload-time = "2025-10-13T15:30:47.625Z" }, -] - -[[package]] -name = "regex" -version = "2026.2.28" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/8b/71/41455aa99a5a5ac1eaf311f5d8efd9ce6433c03ac1e0962de163350d0d97/regex-2026.2.28.tar.gz", hash = "sha256:a729e47d418ea11d03469f321aaf67cdee8954cde3ff2cf8403ab87951ad10f2", size = 415184, upload-time = "2026-02-28T02:19:42.792Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/07/42/9061b03cf0fc4b5fa2c3984cbbaed54324377e440a5c5a29d29a72518d62/regex-2026.2.28-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:fcf26c3c6d0da98fada8ae4ef0aa1c3405a431c0a77eb17306d38a89b02adcd7", size = 489574, upload-time = "2026-02-28T02:16:50.455Z" }, - { url = "https://files.pythonhosted.org/packages/77/83/0c8a5623a233015595e3da499c5a1c13720ac63c107897a6037bb97af248/regex-2026.2.28-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:02473c954af35dd2defeb07e44182f5705b30ea3f351a7cbffa9177beb14da5d", size = 291426, upload-time = "2026-02-28T02:16:52.52Z" }, - { url = "https://files.pythonhosted.org/packages/9e/06/3ef1ac6910dc3295ebd71b1f9bfa737e82cfead211a18b319d45f85ddd09/regex-2026.2.28-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9b65d33a17101569f86d9c5966a8b1d7fbf8afdda5a8aa219301b0a80f58cf7d", size = 289200, upload-time = "2026-02-28T02:16:54.08Z" }, - { url = "https://files.pythonhosted.org/packages/dd/c9/8cc8d850b35ab5650ff6756a1cb85286e2000b66c97520b29c1587455344/regex-2026.2.28-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e71dcecaa113eebcc96622c17692672c2d104b1d71ddf7adeda90da7ddeb26fc", size = 796765, upload-time = "2026-02-28T02:16:55.905Z" }, - { url = "https://files.pythonhosted.org/packages/e9/5d/57702597627fc23278ebf36fbb497ac91c0ce7fec89ac6c81e420ca3e38c/regex-2026.2.28-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:481df4623fa4969c8b11f3433ed7d5e3dc9cec0f008356c3212b3933fb77e3d8", size = 863093, upload-time = "2026-02-28T02:16:58.094Z" }, - { url = "https://files.pythonhosted.org/packages/02/6d/f3ecad537ca2811b4d26b54ca848cf70e04fcfc138667c146a9f3157779c/regex-2026.2.28-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:64e7c6ad614573e0640f271e811a408d79a9e1fe62a46adb602f598df42a818d", size = 909455, upload-time = "2026-02-28T02:17:00.918Z" }, - { url = "https://files.pythonhosted.org/packages/9e/40/bb226f203caa22c1043c1ca79b36340156eca0f6a6742b46c3bb222a3a57/regex-2026.2.28-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d6b08a06976ff4fb0d83077022fde3eca06c55432bb997d8c0495b9a4e9872f4", size = 802037, upload-time = "2026-02-28T02:17:02.842Z" }, - { url = "https://files.pythonhosted.org/packages/44/7c/c6d91d8911ac6803b45ca968e8e500c46934e58c0903cbc6d760ee817a0a/regex-2026.2.28-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:864cdd1a2ef5716b0ab468af40139e62ede1b3a53386b375ec0786bb6783fc05", size = 775113, upload-time = "2026-02-28T02:17:04.506Z" }, - { url = "https://files.pythonhosted.org/packages/dc/8d/4a9368d168d47abd4158580b8c848709667b1cd293ff0c0c277279543bd0/regex-2026.2.28-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:511f7419f7afab475fd4d639d4aedfc54205bcb0800066753ef68a59f0f330b5", size = 784194, upload-time = "2026-02-28T02:17:06.888Z" }, - { url = "https://files.pythonhosted.org/packages/cc/bf/2c72ab5d8b7be462cb1651b5cc333da1d0068740342f350fcca3bca31947/regex-2026.2.28-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:b42f7466e32bf15a961cf09f35fa6323cc72e64d3d2c990b10de1274a5da0a59", size = 856846, upload-time = "2026-02-28T02:17:09.11Z" }, - { url = "https://files.pythonhosted.org/packages/7c/f4/6b65c979bb6d09f51bb2d2a7bc85de73c01ec73335d7ddd202dcb8cd1c8f/regex-2026.2.28-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:8710d61737b0c0ce6836b1da7109f20d495e49b3809f30e27e9560be67a257bf", size = 763516, upload-time = "2026-02-28T02:17:11.004Z" }, - { url = "https://files.pythonhosted.org/packages/8e/32/29ea5e27400ee86d2cc2b4e80aa059df04eaf78b4f0c18576ae077aeff68/regex-2026.2.28-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:4390c365fd2d45278f45afd4673cb90f7285f5701607e3ad4274df08e36140ae", size = 849278, upload-time = "2026-02-28T02:17:12.693Z" }, - { url = "https://files.pythonhosted.org/packages/1d/91/3233d03b5f865111cd517e1c95ee8b43e8b428d61fa73764a80c9bb6f537/regex-2026.2.28-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:cb3b1db8ff6c7b8bf838ab05583ea15230cb2f678e569ab0e3a24d1e8320940b", size = 790068, upload-time = "2026-02-28T02:17:14.9Z" }, - { url = "https://files.pythonhosted.org/packages/76/92/abc706c1fb03b4580a09645b206a3fc032f5a9f457bc1a8038ac555658ab/regex-2026.2.28-cp312-cp312-win32.whl", hash = "sha256:f8ed9a5d4612df9d4de15878f0bc6aa7a268afbe5af21a3fdd97fa19516e978c", size = 266416, upload-time = "2026-02-28T02:17:17.15Z" }, - { url = "https://files.pythonhosted.org/packages/fa/06/2a6f7dff190e5fa9df9fb4acf2fdf17a1aa0f7f54596cba8de608db56b3a/regex-2026.2.28-cp312-cp312-win_amd64.whl", hash = "sha256:01d65fd24206c8e1e97e2e31b286c59009636c022eb5d003f52760b0f42155d4", size = 277297, upload-time = "2026-02-28T02:17:18.723Z" }, - { url = "https://files.pythonhosted.org/packages/b7/f0/58a2484851fadf284458fdbd728f580d55c1abac059ae9f048c63b92f427/regex-2026.2.28-cp312-cp312-win_arm64.whl", hash = "sha256:c0b5ccbb8ffb433939d248707d4a8b31993cb76ab1a0187ca886bf50e96df952", size = 270408, upload-time = "2026-02-28T02:17:20.328Z" }, - { url = "https://files.pythonhosted.org/packages/87/f6/dc9ef48c61b79c8201585bf37fa70cd781977da86e466cd94e8e95d2443b/regex-2026.2.28-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:6d63a07e5ec8ce7184452cb00c41c37b49e67dc4f73b2955b5b8e782ea970784", size = 489311, upload-time = "2026-02-28T02:17:22.591Z" }, - { url = "https://files.pythonhosted.org/packages/95/c8/c20390f2232d3f7956f420f4ef1852608ad57aa26c3dd78516cb9f3dc913/regex-2026.2.28-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e59bc8f30414d283ae8ee1617b13d8112e7135cb92830f0ec3688cb29152585a", size = 291285, upload-time = "2026-02-28T02:17:24.355Z" }, - { url = "https://files.pythonhosted.org/packages/d2/a6/ba1068a631ebd71a230e7d8013fcd284b7c89c35f46f34a7da02082141b1/regex-2026.2.28-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:de0cf053139f96219ccfabb4a8dd2d217c8c82cb206c91d9f109f3f552d6b43d", size = 289051, upload-time = "2026-02-28T02:17:26.722Z" }, - { url = "https://files.pythonhosted.org/packages/1d/1b/7cc3b7af4c244c204b7a80924bd3d85aecd9ba5bc82b485c5806ee8cda9e/regex-2026.2.28-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fb4db2f17e6484904f986c5a657cec85574c76b5c5e61c7aae9ffa1bc6224f95", size = 796842, upload-time = "2026-02-28T02:17:29.064Z" }, - { url = "https://files.pythonhosted.org/packages/24/87/26bd03efc60e0d772ac1e7b60a2e6325af98d974e2358f659c507d3c76db/regex-2026.2.28-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:52b017b35ac2214d0db5f4f90e303634dc44e4aba4bd6235a27f97ecbe5b0472", size = 863083, upload-time = "2026-02-28T02:17:31.363Z" }, - { url = "https://files.pythonhosted.org/packages/ae/54/aeaf4afb1aa0a65e40de52a61dc2ac5b00a83c6cb081c8a1d0dda74f3010/regex-2026.2.28-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:69fc560ccbf08a09dc9b52ab69cacfae51e0ed80dc5693078bdc97db2f91ae96", size = 909412, upload-time = "2026-02-28T02:17:33.248Z" }, - { url = "https://files.pythonhosted.org/packages/12/2f/049901def913954e640d199bbc6a7ca2902b6aeda0e5da9d17f114100ec2/regex-2026.2.28-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e61eea47230eba62a31f3e8a0e3164d0f37ef9f40529fb2c79361bc6b53d2a92", size = 802101, upload-time = "2026-02-28T02:17:35.053Z" }, - { url = "https://files.pythonhosted.org/packages/7d/a5/512fb9ff7f5b15ea204bb1967ebb649059446decacccb201381f9fa6aad4/regex-2026.2.28-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:4f5c0b182ad4269e7381b7c27fdb0408399881f7a92a4624fd5487f2971dfc11", size = 775260, upload-time = "2026-02-28T02:17:37.692Z" }, - { url = "https://files.pythonhosted.org/packages/d1/a8/9a92935878aba19bd72706b9db5646a6f993d99b3f6ed42c02ec8beb1d61/regex-2026.2.28-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:96f6269a2882fbb0ee76967116b83679dc628e68eaea44e90884b8d53d833881", size = 784311, upload-time = "2026-02-28T02:17:39.855Z" }, - { url = "https://files.pythonhosted.org/packages/09/d3/fc51a8a738a49a6b6499626580554c9466d3ea561f2b72cfdc72e4149773/regex-2026.2.28-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:b5acd4b6a95f37c3c3828e5d053a7d4edaedb85de551db0153754924cb7c83e3", size = 856876, upload-time = "2026-02-28T02:17:42.317Z" }, - { url = "https://files.pythonhosted.org/packages/08/b7/2e641f3d084b120ca4c52e8c762a78da0b32bf03ef546330db3e2635dc5f/regex-2026.2.28-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:2234059cfe33d9813a3677ef7667999caea9eeaa83fef98eb6ce15c6cf9e0215", size = 763632, upload-time = "2026-02-28T02:17:45.073Z" }, - { url = "https://files.pythonhosted.org/packages/fe/6d/0009021d97e79ee99f3d8641f0a8d001eed23479ade4c3125a5480bf3e2d/regex-2026.2.28-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:c15af43c72a7fb0c97cbc66fa36a43546eddc5c06a662b64a0cbf30d6ac40944", size = 849320, upload-time = "2026-02-28T02:17:47.192Z" }, - { url = "https://files.pythonhosted.org/packages/05/7a/51cfbad5758f8edae430cb21961a9c8d04bce1dae4d2d18d4186eec7cfa1/regex-2026.2.28-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9185cc63359862a6e80fe97f696e04b0ad9a11c4ac0a4a927f979f611bfe3768", size = 790152, upload-time = "2026-02-28T02:17:49.067Z" }, - { url = "https://files.pythonhosted.org/packages/90/3d/a83e2b6b3daa142acb8c41d51de3876186307d5cb7490087031747662500/regex-2026.2.28-cp313-cp313-win32.whl", hash = "sha256:fb66e5245db9652abd7196ace599b04d9c0e4aa7c8f0e2803938377835780081", size = 266398, upload-time = "2026-02-28T02:17:50.744Z" }, - { url = "https://files.pythonhosted.org/packages/85/4f/16e9ebb1fe5425e11b9596c8d57bf8877dcb32391da0bfd33742e3290637/regex-2026.2.28-cp313-cp313-win_amd64.whl", hash = "sha256:71a911098be38c859ceb3f9a9ce43f4ed9f4c6720ad8684a066ea246b76ad9ff", size = 277282, upload-time = "2026-02-28T02:17:53.074Z" }, - { url = "https://files.pythonhosted.org/packages/07/b4/92851335332810c5a89723bf7a7e35c7209f90b7d4160024501717b28cc9/regex-2026.2.28-cp313-cp313-win_arm64.whl", hash = "sha256:39bb5727650b9a0275c6a6690f9bb3fe693a7e6cc5c3155b1240aedf8926423e", size = 270382, upload-time = "2026-02-28T02:17:54.888Z" }, - { url = "https://files.pythonhosted.org/packages/24/07/6c7e4cec1e585959e96cbc24299d97e4437a81173217af54f1804994e911/regex-2026.2.28-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:97054c55db06ab020342cc0d35d6f62a465fa7662871190175f1ad6c655c028f", size = 492541, upload-time = "2026-02-28T02:17:56.813Z" }, - { url = "https://files.pythonhosted.org/packages/7c/13/55eb22ada7f43d4f4bb3815b6132183ebc331c81bd496e2d1f3b8d862e0d/regex-2026.2.28-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:0d25a10811de831c2baa6aef3c0be91622f44dd8d31dd12e69f6398efb15e48b", size = 292984, upload-time = "2026-02-28T02:17:58.538Z" }, - { url = "https://files.pythonhosted.org/packages/5b/11/c301f8cb29ce9644a5ef85104c59244e6e7e90994a0f458da4d39baa8e17/regex-2026.2.28-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:d6cfe798d8da41bb1862ed6e0cba14003d387c3c0c4a5d45591076ae9f0ce2f8", size = 291509, upload-time = "2026-02-28T02:18:00.208Z" }, - { url = "https://files.pythonhosted.org/packages/b5/43/aabe384ec1994b91796e903582427bc2ffaed9c4103819ed3c16d8e749f3/regex-2026.2.28-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fd0ce43e71d825b7c0661f9c54d4d74bd97c56c3fd102a8985bcfea48236bacb", size = 809429, upload-time = "2026-02-28T02:18:02.328Z" }, - { url = "https://files.pythonhosted.org/packages/04/b8/8d2d987a816720c4f3109cee7c06a4b24ad0e02d4fc74919ab619e543737/regex-2026.2.28-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:00945d007fd74a9084d2ab79b695b595c6b7ba3698972fadd43e23230c6979c1", size = 869422, upload-time = "2026-02-28T02:18:04.23Z" }, - { url = "https://files.pythonhosted.org/packages/fc/ad/2c004509e763c0c3719f97c03eca26473bffb3868d54c5f280b8cd4f9e3d/regex-2026.2.28-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:bec23c11cbbf09a4df32fe50d57cbdd777bc442269b6e39a1775654f1c95dee2", size = 915175, upload-time = "2026-02-28T02:18:06.791Z" }, - { url = "https://files.pythonhosted.org/packages/55/c2/fd429066da487ef555a9da73bf214894aec77fc8c66a261ee355a69871a8/regex-2026.2.28-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5cdcc17d935c8f9d3f4db5c2ebe2640c332e3822ad5d23c2f8e0228e6947943a", size = 812044, upload-time = "2026-02-28T02:18:08.736Z" }, - { url = "https://files.pythonhosted.org/packages/5b/ca/feedb7055c62a3f7f659971bf45f0e0a87544b6b0cf462884761453f97c5/regex-2026.2.28-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:a448af01e3d8031c89c5d902040b124a5e921a25c4e5e07a861ca591ce429341", size = 782056, upload-time = "2026-02-28T02:18:10.777Z" }, - { url = "https://files.pythonhosted.org/packages/95/30/1aa959ed0d25c1dd7dd5047ea8ba482ceaef38ce363c401fd32a6b923e60/regex-2026.2.28-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:10d28e19bd4888e4abf43bd3925f3c134c52fdf7259219003588a42e24c2aa25", size = 798743, upload-time = "2026-02-28T02:18:13.025Z" }, - { url = "https://files.pythonhosted.org/packages/3b/1f/dadb9cf359004784051c897dcf4d5d79895f73a1bbb7b827abaa4814ae80/regex-2026.2.28-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:99985a2c277dcb9ccb63f937451af5d65177af1efdeb8173ac55b61095a0a05c", size = 864633, upload-time = "2026-02-28T02:18:16.84Z" }, - { url = "https://files.pythonhosted.org/packages/a7/f1/b9a25eb24e1cf79890f09e6ec971ee5b511519f1851de3453bc04f6c902b/regex-2026.2.28-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:e1e7b24cb3ae9953a560c563045d1ba56ee4749fbd05cf21ba571069bd7be81b", size = 770862, upload-time = "2026-02-28T02:18:18.892Z" }, - { url = "https://files.pythonhosted.org/packages/02/9a/c5cb10b7aa6f182f9247a30cc9527e326601f46f4df864ac6db588d11fcd/regex-2026.2.28-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:d8511a01d0e4ee1992eb3ba19e09bc1866fe03f05129c3aec3fdc4cbc77aad3f", size = 854788, upload-time = "2026-02-28T02:18:21.475Z" }, - { url = "https://files.pythonhosted.org/packages/0a/50/414ba0731c4bd40b011fa4703b2cc86879ec060c64f2a906e65a56452589/regex-2026.2.28-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:aaffaecffcd2479ce87aa1e74076c221700b7c804e48e98e62500ee748f0f550", size = 800184, upload-time = "2026-02-28T02:18:23.492Z" }, - { url = "https://files.pythonhosted.org/packages/69/50/0c7290987f97e7e6830b0d853f69dc4dc5852c934aae63e7fdcd76b4c383/regex-2026.2.28-cp313-cp313t-win32.whl", hash = "sha256:ef77bdde9c9eba3f7fa5b58084b29bbcc74bcf55fdbeaa67c102a35b5bd7e7cc", size = 269137, upload-time = "2026-02-28T02:18:25.375Z" }, - { url = "https://files.pythonhosted.org/packages/68/80/ef26ff90e74ceb4051ad6efcbbb8a4be965184a57e879ebcbdef327d18fa/regex-2026.2.28-cp313-cp313t-win_amd64.whl", hash = "sha256:98adf340100cbe6fbaf8e6dc75e28f2c191b1be50ffefe292fb0e6f6eefdb0d8", size = 280682, upload-time = "2026-02-28T02:18:27.205Z" }, - { url = "https://files.pythonhosted.org/packages/69/8b/fbad9c52e83ffe8f97e3ed1aa0516e6dff6bb633a41da9e64645bc7efdc5/regex-2026.2.28-cp313-cp313t-win_arm64.whl", hash = "sha256:2fb950ac1d88e6b6a9414381f403797b236f9fa17e1eee07683af72b1634207b", size = 271735, upload-time = "2026-02-28T02:18:29.015Z" }, - { url = "https://files.pythonhosted.org/packages/cf/03/691015f7a7cb1ed6dacb2ea5de5682e4858e05a4c5506b2839cd533bbcd6/regex-2026.2.28-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:78454178c7df31372ea737996fb7f36b3c2c92cccc641d251e072478afb4babc", size = 489497, upload-time = "2026-02-28T02:18:30.889Z" }, - { url = "https://files.pythonhosted.org/packages/c6/ba/8db8fd19afcbfa0e1036eaa70c05f20ca8405817d4ad7a38a6b4c2f031ac/regex-2026.2.28-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:5d10303dd18cedfd4d095543998404df656088240bcfd3cd20a8f95b861f74bd", size = 291295, upload-time = "2026-02-28T02:18:33.426Z" }, - { url = "https://files.pythonhosted.org/packages/5a/79/9aa0caf089e8defef9b857b52fc53801f62ff868e19e5c83d4a96612eba1/regex-2026.2.28-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:19a9c9e0a8f24f39d575a6a854d516b48ffe4cbdcb9de55cb0570a032556ecff", size = 289275, upload-time = "2026-02-28T02:18:35.247Z" }, - { url = "https://files.pythonhosted.org/packages/eb/26/ee53117066a30ef9c883bf1127eece08308ccf8ccd45c45a966e7a665385/regex-2026.2.28-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:09500be324f49b470d907b3ef8af9afe857f5cca486f853853f7945ddbf75911", size = 797176, upload-time = "2026-02-28T02:18:37.15Z" }, - { url = "https://files.pythonhosted.org/packages/05/1b/67fb0495a97259925f343ae78b5d24d4a6624356ae138b57f18bd43006e4/regex-2026.2.28-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:fb1c4ff62277d87a7335f2c1ea4e0387b8f2b3ad88a64efd9943906aafad4f33", size = 863813, upload-time = "2026-02-28T02:18:39.478Z" }, - { url = "https://files.pythonhosted.org/packages/a0/1d/93ac9bbafc53618091c685c7ed40239a90bf9f2a82c983f0baa97cb7ae07/regex-2026.2.28-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:b8b3f1be1738feadc69f62daa250c933e85c6f34fa378f54a7ff43807c1b9117", size = 908678, upload-time = "2026-02-28T02:18:41.619Z" }, - { url = "https://files.pythonhosted.org/packages/c7/7a/a8f5e0561702b25239846a16349feece59712ae20598ebb205580332a471/regex-2026.2.28-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:dc8ed8c3f41c27acb83f7b6a9eb727a73fc6663441890c5cb3426a5f6a91ce7d", size = 801528, upload-time = "2026-02-28T02:18:43.624Z" }, - { url = "https://files.pythonhosted.org/packages/96/5d/ed6d4cbde80309854b1b9f42d9062fee38ade15f7eb4909f6ef2440403b5/regex-2026.2.28-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:fa539be029844c0ce1114762d2952ab6cfdd7c7c9bd72e0db26b94c3c36dcc5a", size = 775373, upload-time = "2026-02-28T02:18:46.102Z" }, - { url = "https://files.pythonhosted.org/packages/6a/e9/6e53c34e8068b9deec3e87210086ecb5b9efebdefca6b0d3fa43d66dcecb/regex-2026.2.28-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7900157786428a79615a8264dac1f12c9b02957c473c8110c6b1f972dcecaddf", size = 784859, upload-time = "2026-02-28T02:18:48.269Z" }, - { url = "https://files.pythonhosted.org/packages/48/3c/736e1c7ca7f0dcd2ae33819888fdc69058a349b7e5e84bc3e2f296bbf794/regex-2026.2.28-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:0b1d2b07614d95fa2bf8a63fd1e98bd8fa2b4848dc91b1efbc8ba219fdd73952", size = 857813, upload-time = "2026-02-28T02:18:50.576Z" }, - { url = "https://files.pythonhosted.org/packages/6e/7c/48c4659ad9da61f58e79dbe8c05223e0006696b603c16eb6b5cbfbb52c27/regex-2026.2.28-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:b389c61aa28a79c2e0527ac36da579869c2e235a5b208a12c5b5318cda2501d8", size = 763705, upload-time = "2026-02-28T02:18:52.59Z" }, - { url = "https://files.pythonhosted.org/packages/cf/a1/bc1c261789283128165f71b71b4b221dd1b79c77023752a6074c102f18d8/regex-2026.2.28-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:f467cb602f03fbd1ab1908f68b53c649ce393fde056628dc8c7e634dab6bfc07", size = 848734, upload-time = "2026-02-28T02:18:54.595Z" }, - { url = "https://files.pythonhosted.org/packages/10/d8/979407faf1397036e25a5ae778157366a911c0f382c62501009f4957cf86/regex-2026.2.28-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:e8c8cb2deba42f5ec1ede46374e990f8adc5e6456a57ac1a261b19be6f28e4e6", size = 789871, upload-time = "2026-02-28T02:18:57.34Z" }, - { url = "https://files.pythonhosted.org/packages/03/23/da716821277115fcb1f4e3de1e5dc5023a1e6533598c486abf5448612579/regex-2026.2.28-cp314-cp314-win32.whl", hash = "sha256:9036b400b20e4858d56d117108d7813ed07bb7803e3eed766675862131135ca6", size = 271825, upload-time = "2026-02-28T02:18:59.202Z" }, - { url = "https://files.pythonhosted.org/packages/91/ff/90696f535d978d5f16a52a419be2770a8d8a0e7e0cfecdbfc31313df7fab/regex-2026.2.28-cp314-cp314-win_amd64.whl", hash = "sha256:1d367257cd86c1cbb97ea94e77b373a0bbc2224976e247f173d19e8f18b4afa7", size = 280548, upload-time = "2026-02-28T02:19:01.049Z" }, - { url = "https://files.pythonhosted.org/packages/69/f9/5e1b5652fc0af3fcdf7677e7df3ad2a0d47d669b34ac29a63bb177bb731b/regex-2026.2.28-cp314-cp314-win_arm64.whl", hash = "sha256:5e68192bb3a1d6fb2836da24aa494e413ea65853a21505e142e5b1064a595f3d", size = 273444, upload-time = "2026-02-28T02:19:03.255Z" }, - { url = "https://files.pythonhosted.org/packages/d3/eb/8389f9e940ac89bcf58d185e230a677b4fd07c5f9b917603ad5c0f8fa8fe/regex-2026.2.28-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:a5dac14d0872eeb35260a8e30bac07ddf22adc1e3a0635b52b02e180d17c9c7e", size = 492546, upload-time = "2026-02-28T02:19:05.378Z" }, - { url = "https://files.pythonhosted.org/packages/7b/c7/09441d27ce2a6fa6a61ea3150ea4639c1dcda9b31b2ea07b80d6937b24dd/regex-2026.2.28-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:ec0c608b7a7465ffadb344ed7c987ff2f11ee03f6a130b569aa74d8a70e8333c", size = 292986, upload-time = "2026-02-28T02:19:07.24Z" }, - { url = "https://files.pythonhosted.org/packages/fb/69/4144b60ed7760a6bd235e4087041f487aa4aa62b45618ce018b0c14833ea/regex-2026.2.28-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:c7815afb0ca45456613fdaf60ea9c993715511c8d53a83bc468305cbc0ee23c7", size = 291518, upload-time = "2026-02-28T02:19:09.698Z" }, - { url = "https://files.pythonhosted.org/packages/2d/be/77e5426cf5948c82f98c53582009ca9e94938c71f73a8918474f2e2990bb/regex-2026.2.28-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b059e71ec363968671693a78c5053bd9cb2fe410f9b8e4657e88377ebd603a2e", size = 809464, upload-time = "2026-02-28T02:19:12.494Z" }, - { url = "https://files.pythonhosted.org/packages/45/99/2c8c5ac90dc7d05c6e7d8e72c6a3599dc08cd577ac476898e91ca787d7f1/regex-2026.2.28-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:b8cf76f1a29f0e99dcfd7aef1551a9827588aae5a737fe31442021165f1920dc", size = 869553, upload-time = "2026-02-28T02:19:15.151Z" }, - { url = "https://files.pythonhosted.org/packages/53/34/daa66a342f0271e7737003abf6c3097aa0498d58c668dbd88362ef94eb5d/regex-2026.2.28-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:180e08a435a0319e6a4821c3468da18dc7001987e1c17ae1335488dfe7518dd8", size = 915289, upload-time = "2026-02-28T02:19:17.331Z" }, - { url = "https://files.pythonhosted.org/packages/c5/c7/e22c2aaf0a12e7e22ab19b004bb78d32ca1ecc7ef245949935463c5567de/regex-2026.2.28-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1e496956106fd59ba6322a8ea17141a27c5040e5ee8f9433ae92d4e5204462a0", size = 812156, upload-time = "2026-02-28T02:19:20.011Z" }, - { url = "https://files.pythonhosted.org/packages/7f/bb/2dc18c1efd9051cf389cd0d7a3a4d90f6804b9fff3a51b5dc3c85b935f71/regex-2026.2.28-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:bba2b18d70eeb7b79950f12f633beeecd923f7c9ad6f6bae28e59b4cb3ab046b", size = 782215, upload-time = "2026-02-28T02:19:22.047Z" }, - { url = "https://files.pythonhosted.org/packages/17/1e/9e4ec9b9013931faa32226ec4aa3c71fe664a6d8a2b91ac56442128b332f/regex-2026.2.28-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:6db7bfae0f8a2793ff1f7021468ea55e2699d0790eb58ee6ab36ae43aa00bc5b", size = 798925, upload-time = "2026-02-28T02:19:24.173Z" }, - { url = "https://files.pythonhosted.org/packages/71/57/a505927e449a9ccb41e2cc8d735e2abe3444b0213d1cf9cb364a8c1f2524/regex-2026.2.28-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:d0b02e8b7e5874b48ae0f077ecca61c1a6a9f9895e9c6dfb191b55b242862033", size = 864701, upload-time = "2026-02-28T02:19:26.376Z" }, - { url = "https://files.pythonhosted.org/packages/a6/ad/c62cb60cdd93e13eac5b3d9d6bd5d284225ed0e3329426f94d2552dd7cca/regex-2026.2.28-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:25b6eb660c5cf4b8c3407a1ed462abba26a926cc9965e164268a3267bcc06a43", size = 770899, upload-time = "2026-02-28T02:19:29.38Z" }, - { url = "https://files.pythonhosted.org/packages/3c/5a/874f861f5c3d5ab99633e8030dee1bc113db8e0be299d1f4b07f5b5ec349/regex-2026.2.28-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:5a932ea8ad5d0430351ff9c76c8db34db0d9f53c1d78f06022a21f4e290c5c18", size = 854727, upload-time = "2026-02-28T02:19:31.494Z" }, - { url = "https://files.pythonhosted.org/packages/6b/ca/d2c03b0efde47e13db895b975b2be6a73ed90b8ba963677927283d43bf74/regex-2026.2.28-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:1c2c95e1a2b0f89d01e821ff4de1be4b5d73d1f4b0bf679fa27c1ad8d2327f1a", size = 800366, upload-time = "2026-02-28T02:19:34.248Z" }, - { url = "https://files.pythonhosted.org/packages/14/bd/ee13b20b763b8989f7c75d592bfd5de37dc1181814a2a2747fedcf97e3ba/regex-2026.2.28-cp314-cp314t-win32.whl", hash = "sha256:bbb882061f742eb5d46f2f1bd5304055be0a66b783576de3d7eef1bed4778a6e", size = 274936, upload-time = "2026-02-28T02:19:36.313Z" }, - { url = "https://files.pythonhosted.org/packages/cb/e7/d8020e39414c93af7f0d8688eabcecece44abfd5ce314b21dfda0eebd3d8/regex-2026.2.28-cp314-cp314t-win_amd64.whl", hash = "sha256:6591f281cb44dc13de9585b552cec6fc6cf47fb2fe7a48892295ee9bc4a612f9", size = 284779, upload-time = "2026-02-28T02:19:38.625Z" }, - { url = "https://files.pythonhosted.org/packages/13/c0/ad225f4a405827486f1955283407cf758b6d2fb966712644c5f5aef33d1b/regex-2026.2.28-cp314-cp314t-win_arm64.whl", hash = "sha256:dee50f1be42222f89767b64b283283ef963189da0dda4a515aa54a5563c62dec", size = 275010, upload-time = "2026-02-28T02:19:40.65Z" }, -] - -[[package]] -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 = "rich" -version = "14.3.3" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "markdown-it-py" }, - { name = "pygments" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/b3/c6/f3b320c27991c46f43ee9d856302c70dc2d0fb2dba4842ff739d5f46b393/rich-14.3.3.tar.gz", hash = "sha256:b8daa0b9e4eef54dd8cf7c86c03713f53241884e814f4e2f5fb342fe520f639b", size = 230582, upload-time = "2026-02-19T17:23:12.474Z" } -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 = "rpds-py" -version = "0.30.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/20/af/3f2f423103f1113b36230496629986e0ef7e199d2aa8392452b484b38ced/rpds_py-0.30.0.tar.gz", hash = "sha256:dd8ff7cf90014af0c0f787eea34794ebf6415242ee1d6fa91eaba725cc441e84", size = 69469, upload-time = "2025-11-30T20:24:38.837Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/03/e7/98a2f4ac921d82f33e03f3835f5bf3a4a40aa1bfdc57975e74a97b2b4bdd/rpds_py-0.30.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:a161f20d9a43006833cd7068375a94d035714d73a172b681d8881820600abfad", size = 375086, upload-time = "2025-11-30T20:22:17.93Z" }, - { url = "https://files.pythonhosted.org/packages/4d/a1/bca7fd3d452b272e13335db8d6b0b3ecde0f90ad6f16f3328c6fb150c889/rpds_py-0.30.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6abc8880d9d036ecaafe709079969f56e876fcf107f7a8e9920ba6d5a3878d05", size = 359053, upload-time = "2025-11-30T20:22:19.297Z" }, - { url = "https://files.pythonhosted.org/packages/65/1c/ae157e83a6357eceff62ba7e52113e3ec4834a84cfe07fa4b0757a7d105f/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ca28829ae5f5d569bb62a79512c842a03a12576375d5ece7d2cadf8abe96ec28", size = 390763, upload-time = "2025-11-30T20:22:21.661Z" }, - { url = "https://files.pythonhosted.org/packages/d4/36/eb2eb8515e2ad24c0bd43c3ee9cd74c33f7ca6430755ccdb240fd3144c44/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a1010ed9524c73b94d15919ca4d41d8780980e1765babf85f9a2f90d247153dd", size = 408951, upload-time = "2025-11-30T20:22:23.408Z" }, - { url = "https://files.pythonhosted.org/packages/d6/65/ad8dc1784a331fabbd740ef6f71ce2198c7ed0890dab595adb9ea2d775a1/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f8d1736cfb49381ba528cd5baa46f82fdc65c06e843dab24dd70b63d09121b3f", size = 514622, upload-time = "2025-11-30T20:22:25.16Z" }, - { url = "https://files.pythonhosted.org/packages/63/8e/0cfa7ae158e15e143fe03993b5bcd743a59f541f5952e1546b1ac1b5fd45/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d948b135c4693daff7bc2dcfc4ec57237a29bd37e60c2fabf5aff2bbacf3e2f1", size = 414492, upload-time = "2025-11-30T20:22:26.505Z" }, - { url = "https://files.pythonhosted.org/packages/60/1b/6f8f29f3f995c7ffdde46a626ddccd7c63aefc0efae881dc13b6e5d5bb16/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47f236970bccb2233267d89173d3ad2703cd36a0e2a6e92d0560d333871a3d23", size = 394080, upload-time = "2025-11-30T20:22:27.934Z" }, - { url = "https://files.pythonhosted.org/packages/6d/d5/a266341051a7a3ca2f4b750a3aa4abc986378431fc2da508c5034d081b70/rpds_py-0.30.0-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:2e6ecb5a5bcacf59c3f912155044479af1d0b6681280048b338b28e364aca1f6", size = 408680, upload-time = "2025-11-30T20:22:29.341Z" }, - { url = "https://files.pythonhosted.org/packages/10/3b/71b725851df9ab7a7a4e33cf36d241933da66040d195a84781f49c50490c/rpds_py-0.30.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a8fa71a2e078c527c3e9dc9fc5a98c9db40bcc8a92b4e8858e36d329f8684b51", size = 423589, upload-time = "2025-11-30T20:22:31.469Z" }, - { url = "https://files.pythonhosted.org/packages/00/2b/e59e58c544dc9bd8bd8384ecdb8ea91f6727f0e37a7131baeff8d6f51661/rpds_py-0.30.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:73c67f2db7bc334e518d097c6d1e6fed021bbc9b7d678d6cc433478365d1d5f5", size = 573289, upload-time = "2025-11-30T20:22:32.997Z" }, - { url = "https://files.pythonhosted.org/packages/da/3e/a18e6f5b460893172a7d6a680e86d3b6bc87a54c1f0b03446a3c8c7b588f/rpds_py-0.30.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:5ba103fb455be00f3b1c2076c9d4264bfcb037c976167a6047ed82f23153f02e", size = 599737, upload-time = "2025-11-30T20:22:34.419Z" }, - { url = "https://files.pythonhosted.org/packages/5c/e2/714694e4b87b85a18e2c243614974413c60aa107fd815b8cbc42b873d1d7/rpds_py-0.30.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:7cee9c752c0364588353e627da8a7e808a66873672bcb5f52890c33fd965b394", size = 563120, upload-time = "2025-11-30T20:22:35.903Z" }, - { url = "https://files.pythonhosted.org/packages/6f/ab/d5d5e3bcedb0a77f4f613706b750e50a5a3ba1c15ccd3665ecc636c968fd/rpds_py-0.30.0-cp312-cp312-win32.whl", hash = "sha256:1ab5b83dbcf55acc8b08fc62b796ef672c457b17dbd7820a11d6c52c06839bdf", size = 223782, upload-time = "2025-11-30T20:22:37.271Z" }, - { url = "https://files.pythonhosted.org/packages/39/3b/f786af9957306fdc38a74cef405b7b93180f481fb48453a114bb6465744a/rpds_py-0.30.0-cp312-cp312-win_amd64.whl", hash = "sha256:a090322ca841abd453d43456ac34db46e8b05fd9b3b4ac0c78bcde8b089f959b", size = 240463, upload-time = "2025-11-30T20:22:39.021Z" }, - { url = "https://files.pythonhosted.org/packages/f3/d2/b91dc748126c1559042cfe41990deb92c4ee3e2b415f6b5234969ffaf0cc/rpds_py-0.30.0-cp312-cp312-win_arm64.whl", hash = "sha256:669b1805bd639dd2989b281be2cfd951c6121b65e729d9b843e9639ef1fd555e", size = 230868, upload-time = "2025-11-30T20:22:40.493Z" }, - { url = "https://files.pythonhosted.org/packages/ed/dc/d61221eb88ff410de3c49143407f6f3147acf2538c86f2ab7ce65ae7d5f9/rpds_py-0.30.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:f83424d738204d9770830d35290ff3273fbb02b41f919870479fab14b9d303b2", size = 374887, upload-time = "2025-11-30T20:22:41.812Z" }, - { url = "https://files.pythonhosted.org/packages/fd/32/55fb50ae104061dbc564ef15cc43c013dc4a9f4527a1f4d99baddf56fe5f/rpds_py-0.30.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:e7536cd91353c5273434b4e003cbda89034d67e7710eab8761fd918ec6c69cf8", size = 358904, upload-time = "2025-11-30T20:22:43.479Z" }, - { url = "https://files.pythonhosted.org/packages/58/70/faed8186300e3b9bdd138d0273109784eea2396c68458ed580f885dfe7ad/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2771c6c15973347f50fece41fc447c054b7ac2ae0502388ce3b6738cd366e3d4", size = 389945, upload-time = "2025-11-30T20:22:44.819Z" }, - { url = "https://files.pythonhosted.org/packages/bd/a8/073cac3ed2c6387df38f71296d002ab43496a96b92c823e76f46b8af0543/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0a59119fc6e3f460315fe9d08149f8102aa322299deaa5cab5b40092345c2136", size = 407783, upload-time = "2025-11-30T20:22:46.103Z" }, - { url = "https://files.pythonhosted.org/packages/77/57/5999eb8c58671f1c11eba084115e77a8899d6e694d2a18f69f0ba471ec8b/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:76fec018282b4ead0364022e3c54b60bf368b9d926877957a8624b58419169b7", size = 515021, upload-time = "2025-11-30T20:22:47.458Z" }, - { url = "https://files.pythonhosted.org/packages/e0/af/5ab4833eadc36c0a8ed2bc5c0de0493c04f6c06de223170bd0798ff98ced/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:692bef75a5525db97318e8cd061542b5a79812d711ea03dbc1f6f8dbb0c5f0d2", size = 414589, upload-time = "2025-11-30T20:22:48.872Z" }, - { url = "https://files.pythonhosted.org/packages/b7/de/f7192e12b21b9e9a68a6d0f249b4af3fdcdff8418be0767a627564afa1f1/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9027da1ce107104c50c81383cae773ef5c24d296dd11c99e2629dbd7967a20c6", size = 394025, upload-time = "2025-11-30T20:22:50.196Z" }, - { url = "https://files.pythonhosted.org/packages/91/c4/fc70cd0249496493500e7cc2de87504f5aa6509de1e88623431fec76d4b6/rpds_py-0.30.0-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:9cf69cdda1f5968a30a359aba2f7f9aa648a9ce4b580d6826437f2b291cfc86e", size = 408895, upload-time = "2025-11-30T20:22:51.87Z" }, - { url = "https://files.pythonhosted.org/packages/58/95/d9275b05ab96556fefff73a385813eb66032e4c99f411d0795372d9abcea/rpds_py-0.30.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a4796a717bf12b9da9d3ad002519a86063dcac8988b030e405704ef7d74d2d9d", size = 422799, upload-time = "2025-11-30T20:22:53.341Z" }, - { url = "https://files.pythonhosted.org/packages/06/c1/3088fc04b6624eb12a57eb814f0d4997a44b0d208d6cace713033ff1a6ba/rpds_py-0.30.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5d4c2aa7c50ad4728a094ebd5eb46c452e9cb7edbfdb18f9e1221f597a73e1e7", size = 572731, upload-time = "2025-11-30T20:22:54.778Z" }, - { url = "https://files.pythonhosted.org/packages/d8/42/c612a833183b39774e8ac8fecae81263a68b9583ee343db33ab571a7ce55/rpds_py-0.30.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ba81a9203d07805435eb06f536d95a266c21e5b2dfbf6517748ca40c98d19e31", size = 599027, upload-time = "2025-11-30T20:22:56.212Z" }, - { url = "https://files.pythonhosted.org/packages/5f/60/525a50f45b01d70005403ae0e25f43c0384369ad24ffe46e8d9068b50086/rpds_py-0.30.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:945dccface01af02675628334f7cf49c2af4c1c904748efc5cf7bbdf0b579f95", size = 563020, upload-time = "2025-11-30T20:22:58.2Z" }, - { url = "https://files.pythonhosted.org/packages/0b/5d/47c4655e9bcd5ca907148535c10e7d489044243cc9941c16ed7cd53be91d/rpds_py-0.30.0-cp313-cp313-win32.whl", hash = "sha256:b40fb160a2db369a194cb27943582b38f79fc4887291417685f3ad693c5a1d5d", size = 223139, upload-time = "2025-11-30T20:23:00.209Z" }, - { url = "https://files.pythonhosted.org/packages/f2/e1/485132437d20aa4d3e1d8b3fb5a5e65aa8139f1e097080c2a8443201742c/rpds_py-0.30.0-cp313-cp313-win_amd64.whl", hash = "sha256:806f36b1b605e2d6a72716f321f20036b9489d29c51c91f4dd29a3e3afb73b15", size = 240224, upload-time = "2025-11-30T20:23:02.008Z" }, - { url = "https://files.pythonhosted.org/packages/24/95/ffd128ed1146a153d928617b0ef673960130be0009c77d8fbf0abe306713/rpds_py-0.30.0-cp313-cp313-win_arm64.whl", hash = "sha256:d96c2086587c7c30d44f31f42eae4eac89b60dabbac18c7669be3700f13c3ce1", size = 230645, upload-time = "2025-11-30T20:23:03.43Z" }, - { url = "https://files.pythonhosted.org/packages/ff/1b/b10de890a0def2a319a2626334a7f0ae388215eb60914dbac8a3bae54435/rpds_py-0.30.0-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:eb0b93f2e5c2189ee831ee43f156ed34e2a89a78a66b98cadad955972548be5a", size = 364443, upload-time = "2025-11-30T20:23:04.878Z" }, - { url = "https://files.pythonhosted.org/packages/0d/bf/27e39f5971dc4f305a4fb9c672ca06f290f7c4e261c568f3dea16a410d47/rpds_py-0.30.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:922e10f31f303c7c920da8981051ff6d8c1a56207dbdf330d9047f6d30b70e5e", size = 353375, upload-time = "2025-11-30T20:23:06.342Z" }, - { url = "https://files.pythonhosted.org/packages/40/58/442ada3bba6e8e6615fc00483135c14a7538d2ffac30e2d933ccf6852232/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cdc62c8286ba9bf7f47befdcea13ea0e26bf294bda99758fd90535cbaf408000", size = 383850, upload-time = "2025-11-30T20:23:07.825Z" }, - { url = "https://files.pythonhosted.org/packages/14/14/f59b0127409a33c6ef6f5c1ebd5ad8e32d7861c9c7adfa9a624fc3889f6c/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:47f9a91efc418b54fb8190a6b4aa7813a23fb79c51f4bb84e418f5476c38b8db", size = 392812, upload-time = "2025-11-30T20:23:09.228Z" }, - { url = "https://files.pythonhosted.org/packages/b3/66/e0be3e162ac299b3a22527e8913767d869e6cc75c46bd844aa43fb81ab62/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1f3587eb9b17f3789ad50824084fa6f81921bbf9a795826570bda82cb3ed91f2", size = 517841, upload-time = "2025-11-30T20:23:11.186Z" }, - { url = "https://files.pythonhosted.org/packages/3d/55/fa3b9cf31d0c963ecf1ba777f7cf4b2a2c976795ac430d24a1f43d25a6ba/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:39c02563fc592411c2c61d26b6c5fe1e51eaa44a75aa2c8735ca88b0d9599daa", size = 408149, upload-time = "2025-11-30T20:23:12.864Z" }, - { url = "https://files.pythonhosted.org/packages/60/ca/780cf3b1a32b18c0f05c441958d3758f02544f1d613abf9488cd78876378/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:51a1234d8febafdfd33a42d97da7a43f5dcb120c1060e352a3fbc0c6d36e2083", size = 383843, upload-time = "2025-11-30T20:23:14.638Z" }, - { url = "https://files.pythonhosted.org/packages/82/86/d5f2e04f2aa6247c613da0c1dd87fcd08fa17107e858193566048a1e2f0a/rpds_py-0.30.0-cp313-cp313t-manylinux_2_31_riscv64.whl", hash = "sha256:eb2c4071ab598733724c08221091e8d80e89064cd472819285a9ab0f24bcedb9", size = 396507, upload-time = "2025-11-30T20:23:16.105Z" }, - { url = "https://files.pythonhosted.org/packages/4b/9a/453255d2f769fe44e07ea9785c8347edaf867f7026872e76c1ad9f7bed92/rpds_py-0.30.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6bdfdb946967d816e6adf9a3d8201bfad269c67efe6cefd7093ef959683c8de0", size = 414949, upload-time = "2025-11-30T20:23:17.539Z" }, - { url = "https://files.pythonhosted.org/packages/a3/31/622a86cdc0c45d6df0e9ccb6becdba5074735e7033c20e401a6d9d0e2ca0/rpds_py-0.30.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:c77afbd5f5250bf27bf516c7c4a016813eb2d3e116139aed0096940c5982da94", size = 565790, upload-time = "2025-11-30T20:23:19.029Z" }, - { url = "https://files.pythonhosted.org/packages/1c/5d/15bbf0fb4a3f58a3b1c67855ec1efcc4ceaef4e86644665fff03e1b66d8d/rpds_py-0.30.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:61046904275472a76c8c90c9ccee9013d70a6d0f73eecefd38c1ae7c39045a08", size = 590217, upload-time = "2025-11-30T20:23:20.885Z" }, - { url = "https://files.pythonhosted.org/packages/6d/61/21b8c41f68e60c8cc3b2e25644f0e3681926020f11d06ab0b78e3c6bbff1/rpds_py-0.30.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:4c5f36a861bc4b7da6516dbdf302c55313afa09b81931e8280361a4f6c9a2d27", size = 555806, upload-time = "2025-11-30T20:23:22.488Z" }, - { url = "https://files.pythonhosted.org/packages/f9/39/7e067bb06c31de48de3eb200f9fc7c58982a4d3db44b07e73963e10d3be9/rpds_py-0.30.0-cp313-cp313t-win32.whl", hash = "sha256:3d4a69de7a3e50ffc214ae16d79d8fbb0922972da0356dcf4d0fdca2878559c6", size = 211341, upload-time = "2025-11-30T20:23:24.449Z" }, - { url = "https://files.pythonhosted.org/packages/0a/4d/222ef0b46443cf4cf46764d9c630f3fe4abaa7245be9417e56e9f52b8f65/rpds_py-0.30.0-cp313-cp313t-win_amd64.whl", hash = "sha256:f14fc5df50a716f7ece6a80b6c78bb35ea2ca47c499e422aa4463455dd96d56d", size = 225768, upload-time = "2025-11-30T20:23:25.908Z" }, - { url = "https://files.pythonhosted.org/packages/86/81/dad16382ebbd3d0e0328776d8fd7ca94220e4fa0798d1dc5e7da48cb3201/rpds_py-0.30.0-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:68f19c879420aa08f61203801423f6cd5ac5f0ac4ac82a2368a9fcd6a9a075e0", size = 362099, upload-time = "2025-11-30T20:23:27.316Z" }, - { url = "https://files.pythonhosted.org/packages/2b/60/19f7884db5d5603edf3c6bce35408f45ad3e97e10007df0e17dd57af18f8/rpds_py-0.30.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:ec7c4490c672c1a0389d319b3a9cfcd098dcdc4783991553c332a15acf7249be", size = 353192, upload-time = "2025-11-30T20:23:29.151Z" }, - { url = "https://files.pythonhosted.org/packages/bf/c4/76eb0e1e72d1a9c4703c69607cec123c29028bff28ce41588792417098ac/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f251c812357a3fed308d684a5079ddfb9d933860fc6de89f2b7ab00da481e65f", size = 384080, upload-time = "2025-11-30T20:23:30.785Z" }, - { url = "https://files.pythonhosted.org/packages/72/87/87ea665e92f3298d1b26d78814721dc39ed8d2c74b86e83348d6b48a6f31/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ac98b175585ecf4c0348fd7b29c3864bda53b805c773cbf7bfdaffc8070c976f", size = 394841, upload-time = "2025-11-30T20:23:32.209Z" }, - { url = "https://files.pythonhosted.org/packages/77/ad/7783a89ca0587c15dcbf139b4a8364a872a25f861bdb88ed99f9b0dec985/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3e62880792319dbeb7eb866547f2e35973289e7d5696c6e295476448f5b63c87", size = 516670, upload-time = "2025-11-30T20:23:33.742Z" }, - { url = "https://files.pythonhosted.org/packages/5b/3c/2882bdac942bd2172f3da574eab16f309ae10a3925644e969536553cb4ee/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4e7fc54e0900ab35d041b0601431b0a0eb495f0851a0639b6ef90f7741b39a18", size = 408005, upload-time = "2025-11-30T20:23:35.253Z" }, - { url = "https://files.pythonhosted.org/packages/ce/81/9a91c0111ce1758c92516a3e44776920b579d9a7c09b2b06b642d4de3f0f/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47e77dc9822d3ad616c3d5759ea5631a75e5809d5a28707744ef79d7a1bcfcad", size = 382112, upload-time = "2025-11-30T20:23:36.842Z" }, - { url = "https://files.pythonhosted.org/packages/cf/8e/1da49d4a107027e5fbc64daeab96a0706361a2918da10cb41769244b805d/rpds_py-0.30.0-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:b4dc1a6ff022ff85ecafef7979a2c6eb423430e05f1165d6688234e62ba99a07", size = 399049, upload-time = "2025-11-30T20:23:38.343Z" }, - { url = "https://files.pythonhosted.org/packages/df/5a/7ee239b1aa48a127570ec03becbb29c9d5a9eb092febbd1699d567cae859/rpds_py-0.30.0-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4559c972db3a360808309e06a74628b95eaccbf961c335c8fe0d590cf587456f", size = 415661, upload-time = "2025-11-30T20:23:40.263Z" }, - { url = "https://files.pythonhosted.org/packages/70/ea/caa143cf6b772f823bc7929a45da1fa83569ee49b11d18d0ada7f5ee6fd6/rpds_py-0.30.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:0ed177ed9bded28f8deb6ab40c183cd1192aa0de40c12f38be4d59cd33cb5c65", size = 565606, upload-time = "2025-11-30T20:23:42.186Z" }, - { url = "https://files.pythonhosted.org/packages/64/91/ac20ba2d69303f961ad8cf55bf7dbdb4763f627291ba3d0d7d67333cced9/rpds_py-0.30.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:ad1fa8db769b76ea911cb4e10f049d80bf518c104f15b3edb2371cc65375c46f", size = 591126, upload-time = "2025-11-30T20:23:44.086Z" }, - { url = "https://files.pythonhosted.org/packages/21/20/7ff5f3c8b00c8a95f75985128c26ba44503fb35b8e0259d812766ea966c7/rpds_py-0.30.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:46e83c697b1f1c72b50e5ee5adb4353eef7406fb3f2043d64c33f20ad1c2fc53", size = 553371, upload-time = "2025-11-30T20:23:46.004Z" }, - { url = "https://files.pythonhosted.org/packages/72/c7/81dadd7b27c8ee391c132a6b192111ca58d866577ce2d9b0ca157552cce0/rpds_py-0.30.0-cp314-cp314-win32.whl", hash = "sha256:ee454b2a007d57363c2dfd5b6ca4a5d7e2c518938f8ed3b706e37e5d470801ed", size = 215298, upload-time = "2025-11-30T20:23:47.696Z" }, - { url = "https://files.pythonhosted.org/packages/3e/d2/1aaac33287e8cfb07aab2e6b8ac1deca62f6f65411344f1433c55e6f3eb8/rpds_py-0.30.0-cp314-cp314-win_amd64.whl", hash = "sha256:95f0802447ac2d10bcc69f6dc28fe95fdf17940367b21d34e34c737870758950", size = 228604, upload-time = "2025-11-30T20:23:49.501Z" }, - { url = "https://files.pythonhosted.org/packages/e8/95/ab005315818cc519ad074cb7784dae60d939163108bd2b394e60dc7b5461/rpds_py-0.30.0-cp314-cp314-win_arm64.whl", hash = "sha256:613aa4771c99f03346e54c3f038e4cc574ac09a3ddfb0e8878487335e96dead6", size = 222391, upload-time = "2025-11-30T20:23:50.96Z" }, - { url = "https://files.pythonhosted.org/packages/9e/68/154fe0194d83b973cdedcdcc88947a2752411165930182ae41d983dcefa6/rpds_py-0.30.0-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:7e6ecfcb62edfd632e56983964e6884851786443739dbfe3582947e87274f7cb", size = 364868, upload-time = "2025-11-30T20:23:52.494Z" }, - { url = "https://files.pythonhosted.org/packages/83/69/8bbc8b07ec854d92a8b75668c24d2abcb1719ebf890f5604c61c9369a16f/rpds_py-0.30.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:a1d0bc22a7cdc173fedebb73ef81e07faef93692b8c1ad3733b67e31e1b6e1b8", size = 353747, upload-time = "2025-11-30T20:23:54.036Z" }, - { url = "https://files.pythonhosted.org/packages/ab/00/ba2e50183dbd9abcce9497fa5149c62b4ff3e22d338a30d690f9af970561/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d08f00679177226c4cb8c5265012eea897c8ca3b93f429e546600c971bcbae7", size = 383795, upload-time = "2025-11-30T20:23:55.556Z" }, - { url = "https://files.pythonhosted.org/packages/05/6f/86f0272b84926bcb0e4c972262f54223e8ecc556b3224d281e6598fc9268/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5965af57d5848192c13534f90f9dd16464f3c37aaf166cc1da1cae1fd5a34898", size = 393330, upload-time = "2025-11-30T20:23:57.033Z" }, - { url = "https://files.pythonhosted.org/packages/cb/e9/0e02bb2e6dc63d212641da45df2b0bf29699d01715913e0d0f017ee29438/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9a4e86e34e9ab6b667c27f3211ca48f73dba7cd3d90f8d5b11be56e5dbc3fb4e", size = 518194, upload-time = "2025-11-30T20:23:58.637Z" }, - { url = "https://files.pythonhosted.org/packages/ee/ca/be7bca14cf21513bdf9c0606aba17d1f389ea2b6987035eb4f62bd923f25/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e5d3e6b26f2c785d65cc25ef1e5267ccbe1b069c5c21b8cc724efee290554419", size = 408340, upload-time = "2025-11-30T20:24:00.2Z" }, - { url = "https://files.pythonhosted.org/packages/c2/c7/736e00ebf39ed81d75544c0da6ef7b0998f8201b369acf842f9a90dc8fce/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:626a7433c34566535b6e56a1b39a7b17ba961e97ce3b80ec62e6f1312c025551", size = 383765, upload-time = "2025-11-30T20:24:01.759Z" }, - { url = "https://files.pythonhosted.org/packages/4a/3f/da50dfde9956aaf365c4adc9533b100008ed31aea635f2b8d7b627e25b49/rpds_py-0.30.0-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:acd7eb3f4471577b9b5a41baf02a978e8bdeb08b4b355273994f8b87032000a8", size = 396834, upload-time = "2025-11-30T20:24:03.687Z" }, - { url = "https://files.pythonhosted.org/packages/4e/00/34bcc2565b6020eab2623349efbdec810676ad571995911f1abdae62a3a0/rpds_py-0.30.0-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fe5fa731a1fa8a0a56b0977413f8cacac1768dad38d16b3a296712709476fbd5", size = 415470, upload-time = "2025-11-30T20:24:05.232Z" }, - { url = "https://files.pythonhosted.org/packages/8c/28/882e72b5b3e6f718d5453bd4d0d9cf8df36fddeb4ddbbab17869d5868616/rpds_py-0.30.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:74a3243a411126362712ee1524dfc90c650a503502f135d54d1b352bd01f2404", size = 565630, upload-time = "2025-11-30T20:24:06.878Z" }, - { url = "https://files.pythonhosted.org/packages/3b/97/04a65539c17692de5b85c6e293520fd01317fd878ea1995f0367d4532fb1/rpds_py-0.30.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:3e8eeb0544f2eb0d2581774be4c3410356eba189529a6b3e36bbbf9696175856", size = 591148, upload-time = "2025-11-30T20:24:08.445Z" }, - { url = "https://files.pythonhosted.org/packages/85/70/92482ccffb96f5441aab93e26c4d66489eb599efdcf96fad90c14bbfb976/rpds_py-0.30.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:dbd936cde57abfee19ab3213cf9c26be06d60750e60a8e4dd85d1ab12c8b1f40", size = 556030, upload-time = "2025-11-30T20:24:10.956Z" }, - { url = "https://files.pythonhosted.org/packages/20/53/7c7e784abfa500a2b6b583b147ee4bb5a2b3747a9166bab52fec4b5b5e7d/rpds_py-0.30.0-cp314-cp314t-win32.whl", hash = "sha256:dc824125c72246d924f7f796b4f63c1e9dc810c7d9e2355864b3c3a73d59ade0", size = 211570, upload-time = "2025-11-30T20:24:12.735Z" }, - { url = "https://files.pythonhosted.org/packages/d0/02/fa464cdfbe6b26e0600b62c528b72d8608f5cc49f96b8d6e38c95d60c676/rpds_py-0.30.0-cp314-cp314t-win_amd64.whl", hash = "sha256:27f4b0e92de5bfbc6f86e43959e6edd1425c33b5e69aab0984a72047f2bcf1e3", size = 226532, upload-time = "2025-11-30T20:24:14.634Z" }, -] - -[[package]] -name = "rsa" -version = "4.9.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "pyasn1" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/da/8a/22b7beea3ee0d44b1916c0c1cb0ee3af23b700b6da9f04991899d0c555d4/rsa-4.9.1.tar.gz", hash = "sha256:e7bdbfdb5497da4c07dfd35530e1a902659db6ff241e39d9953cad06ebd0ae75", size = 29034, upload-time = "2025-04-16T09:51:18.218Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/64/8d/0133e4eb4beed9e425d9a98ed6e081a55d195481b7632472be1af08d2f6b/rsa-4.9.1-py3-none-any.whl", hash = "sha256:68635866661c6836b8d39430f97a996acbd61bfa49406748ea243539fe239762", size = 34696, upload-time = "2025-04-16T09:51:17.142Z" }, -] - -[[package]] -name = "rtree" -version = "1.4.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/95/09/7302695875a019514de9a5dd17b8320e7a19d6e7bc8f85dcfb79a4ce2da3/rtree-1.4.1.tar.gz", hash = "sha256:c6b1b3550881e57ebe530cc6cffefc87cd9bf49c30b37b894065a9f810875e46", size = 52425, upload-time = "2025-08-13T19:32:01.413Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/04/d9/108cd989a4c0954e60b3cdc86fd2826407702b5375f6dfdab2802e5fed98/rtree-1.4.1-py3-none-macosx_10_9_x86_64.whl", hash = "sha256:d672184298527522d4914d8ae53bf76982b86ca420b0acde9298a7a87d81d4a4", size = 468484, upload-time = "2025-08-13T19:31:50.593Z" }, - { url = "https://files.pythonhosted.org/packages/f3/cf/2710b6fd6b07ea0aef317b29f335790ba6adf06a28ac236078ed9bd8a91d/rtree-1.4.1-py3-none-macosx_11_0_arm64.whl", hash = "sha256:a7e48d805e12011c2cf739a29d6a60ae852fb1de9fc84220bbcef67e6e595d7d", size = 436325, upload-time = "2025-08-13T19:31:52.367Z" }, - { url = "https://files.pythonhosted.org/packages/55/e1/4d075268a46e68db3cac51846eb6a3ab96ed481c585c5a1ad411b3c23aad/rtree-1.4.1-py3-none-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:efa8c4496e31e9ad58ff6c7df89abceac7022d906cb64a3e18e4fceae6b77f65", size = 459789, upload-time = "2025-08-13T19:31:53.926Z" }, - { url = "https://files.pythonhosted.org/packages/d1/75/e5d44be90525cd28503e7f836d077ae6663ec0687a13ba7810b4114b3668/rtree-1.4.1-py3-none-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:12de4578f1b3381a93a655846900be4e3d5f4cd5e306b8b00aa77c1121dc7e8c", size = 507644, upload-time = "2025-08-13T19:31:55.164Z" }, - { url = "https://files.pythonhosted.org/packages/fd/85/b8684f769a142163b52859a38a486493b05bafb4f2fb71d4f945de28ebf9/rtree-1.4.1-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:b558edda52eca3e6d1ee629042192c65e6b7f2c150d6d6cd207ce82f85be3967", size = 1454478, upload-time = "2025-08-13T19:31:56.808Z" }, - { url = "https://files.pythonhosted.org/packages/e9/a4/c2292b95246b9165cc43a0c3757e80995d58bc9b43da5cb47ad6e3535213/rtree-1.4.1-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:f155bc8d6bac9dcd383481dee8c130947a4866db1d16cb6dff442329a038a0dc", size = 1555140, upload-time = "2025-08-13T19:31:58.031Z" }, - { url = "https://files.pythonhosted.org/packages/74/25/5282c8270bfcd620d3e73beb35b40ac4ab00f0a898d98ebeb41ef0989ec8/rtree-1.4.1-py3-none-win_amd64.whl", hash = "sha256:efe125f416fd27150197ab8521158662943a40f87acab8028a1aac4ad667a489", size = 389358, upload-time = "2025-08-13T19:31:59.247Z" }, - { url = "https://files.pythonhosted.org/packages/3f/50/0a9e7e7afe7339bd5e36911f0ceb15fed51945836ed803ae5afd661057fd/rtree-1.4.1-py3-none-win_arm64.whl", hash = "sha256:3d46f55729b28138e897ffef32f7ce93ac335cb67f9120125ad3742a220800f0", size = 355253, upload-time = "2025-08-13T19:32:00.296Z" }, -] - -[[package]] -name = "ruff" -version = "0.15.5" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/77/9b/840e0039e65fcf12758adf684d2289024d6140cde9268cc59887dc55189c/ruff-0.15.5.tar.gz", hash = "sha256:7c3601d3b6d76dce18c5c824fc8d06f4eef33d6df0c21ec7799510cde0f159a2", size = 4574214, upload-time = "2026-03-05T20:06:34.946Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/47/20/5369c3ce21588c708bcbe517a8fbe1a8dfdb5dfd5137e14790b1da71612c/ruff-0.15.5-py3-none-linux_armv6l.whl", hash = "sha256:4ae44c42281f42e3b06b988e442d344a5b9b72450ff3c892e30d11b29a96a57c", size = 10478185, upload-time = "2026-03-05T20:06:29.093Z" }, - { url = "https://files.pythonhosted.org/packages/44/ed/e81dd668547da281e5dce710cf0bc60193f8d3d43833e8241d006720e42b/ruff-0.15.5-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:6edd3792d408ebcf61adabc01822da687579a1a023f297618ac27a5b51ef0080", size = 10859201, upload-time = "2026-03-05T20:06:32.632Z" }, - { url = "https://files.pythonhosted.org/packages/c4/8f/533075f00aaf19b07c5cd6aa6e5d89424b06b3b3f4583bfa9c640a079059/ruff-0.15.5-py3-none-macosx_11_0_arm64.whl", hash = "sha256:89f463f7c8205a9f8dea9d658d59eff49db05f88f89cc3047fb1a02d9f344010", size = 10184752, upload-time = "2026-03-05T20:06:40.312Z" }, - { url = "https://files.pythonhosted.org/packages/66/0e/ba49e2c3fa0395b3152bad634c7432f7edfc509c133b8f4529053ff024fb/ruff-0.15.5-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ba786a8295c6574c1116704cf0b9e6563de3432ac888d8f83685654fe528fd65", size = 10534857, upload-time = "2026-03-05T20:06:19.581Z" }, - { url = "https://files.pythonhosted.org/packages/59/71/39234440f27a226475a0659561adb0d784b4d247dfe7f43ffc12dd02e288/ruff-0.15.5-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fd4b801e57955fe9f02b31d20375ab3a5c4415f2e5105b79fb94cf2642c91440", size = 10309120, upload-time = "2026-03-05T20:06:00.435Z" }, - { url = "https://files.pythonhosted.org/packages/f5/87/4140aa86a93df032156982b726f4952aaec4a883bb98cb6ef73c347da253/ruff-0.15.5-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:391f7c73388f3d8c11b794dbbc2959a5b5afe66642c142a6effa90b45f6f5204", size = 11047428, upload-time = "2026-03-05T20:05:51.867Z" }, - { url = "https://files.pythonhosted.org/packages/5a/f7/4953e7e3287676f78fbe85e3a0ca414c5ca81237b7575bdadc00229ac240/ruff-0.15.5-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8dc18f30302e379fe1e998548b0f5e9f4dff907f52f73ad6da419ea9c19d66c8", size = 11914251, upload-time = "2026-03-05T20:06:22.887Z" }, - { url = "https://files.pythonhosted.org/packages/77/46/0f7c865c10cf896ccf5a939c3e84e1cfaeed608ff5249584799a74d33835/ruff-0.15.5-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1cc6e7f90087e2d27f98dc34ed1b3ab7c8f0d273cc5431415454e22c0bd2a681", size = 11333801, upload-time = "2026-03-05T20:05:57.168Z" }, - { url = "https://files.pythonhosted.org/packages/d3/01/a10fe54b653061585e655f5286c2662ebddb68831ed3eaebfb0eb08c0a16/ruff-0.15.5-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c1cb7169f53c1ddb06e71a9aebd7e98fc0fea936b39afb36d8e86d36ecc2636a", size = 11206821, upload-time = "2026-03-05T20:06:03.441Z" }, - { url = "https://files.pythonhosted.org/packages/7a/0d/2132ceaf20c5e8699aa83da2706ecb5c5dcdf78b453f77edca7fb70f8a93/ruff-0.15.5-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:9b037924500a31ee17389b5c8c4d88874cc6ea8e42f12e9c61a3d754ff72f1ca", size = 11133326, upload-time = "2026-03-05T20:06:25.655Z" }, - { url = "https://files.pythonhosted.org/packages/72/cb/2e5259a7eb2a0f87c08c0fe5bf5825a1e4b90883a52685524596bfc93072/ruff-0.15.5-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:65bb414e5b4eadd95a8c1e4804f6772bbe8995889f203a01f77ddf2d790929dd", size = 10510820, upload-time = "2026-03-05T20:06:37.79Z" }, - { url = "https://files.pythonhosted.org/packages/ff/20/b67ce78f9e6c59ffbdb5b4503d0090e749b5f2d31b599b554698a80d861c/ruff-0.15.5-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:d20aa469ae3b57033519c559e9bc9cd9e782842e39be05b50e852c7c981fa01d", size = 10302395, upload-time = "2026-03-05T20:05:54.504Z" }, - { url = "https://files.pythonhosted.org/packages/5f/e5/719f1acccd31b720d477751558ed74e9c88134adcc377e5e886af89d3072/ruff-0.15.5-py3-none-musllinux_1_2_i686.whl", hash = "sha256:15388dd28c9161cdb8eda68993533acc870aa4e646a0a277aa166de9ad5a8752", size = 10754069, upload-time = "2026-03-05T20:06:06.422Z" }, - { url = "https://files.pythonhosted.org/packages/c3/9c/d1db14469e32d98f3ca27079dbd30b7b44dbb5317d06ab36718dee3baf03/ruff-0.15.5-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:b30da330cbd03bed0c21420b6b953158f60c74c54c5f4c1dabbdf3a57bf355d2", size = 11304315, upload-time = "2026-03-05T20:06:10.867Z" }, - { url = "https://files.pythonhosted.org/packages/28/3a/950367aee7c69027f4f422059227b290ed780366b6aecee5de5039d50fa8/ruff-0.15.5-py3-none-win32.whl", hash = "sha256:732e5ee1f98ba5b3679029989a06ca39a950cced52143a0ea82a2102cb592b74", size = 10551676, upload-time = "2026-03-05T20:06:13.705Z" }, - { url = "https://files.pythonhosted.org/packages/b8/00/bf077a505b4e649bdd3c47ff8ec967735ce2544c8e4a43aba42ee9bf935d/ruff-0.15.5-py3-none-win_amd64.whl", hash = "sha256:821d41c5fa9e19117616c35eaa3f4b75046ec76c65e7ae20a333e9a8696bc7fe", size = 11678972, upload-time = "2026-03-05T20:06:45.379Z" }, - { url = "https://files.pythonhosted.org/packages/fe/4e/cd76eca6db6115604b7626668e891c9dd03330384082e33662fb0f113614/ruff-0.15.5-py3-none-win_arm64.whl", hash = "sha256:b498d1c60d2fe5c10c45ec3f698901065772730b411f164ae270bb6bfcc4740b", size = 10965572, upload-time = "2026-03-05T20:06:16.984Z" }, -] - -[[package]] -name = "safetensors" -version = "0.7.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/29/9c/6e74567782559a63bd040a236edca26fd71bc7ba88de2ef35d75df3bca5e/safetensors-0.7.0.tar.gz", hash = "sha256:07663963b67e8bd9f0b8ad15bb9163606cd27cc5a1b96235a50d8369803b96b0", size = 200878, upload-time = "2025-11-19T15:18:43.199Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/fa/47/aef6c06649039accf914afef490268e1067ed82be62bcfa5b7e886ad15e8/safetensors-0.7.0-cp38-abi3-macosx_10_12_x86_64.whl", hash = "sha256:c82f4d474cf725255d9e6acf17252991c3c8aac038d6ef363a4bf8be2f6db517", size = 467781, upload-time = "2025-11-19T15:18:35.84Z" }, - { url = "https://files.pythonhosted.org/packages/e8/00/374c0c068e30cd31f1e1b46b4b5738168ec79e7689ca82ee93ddfea05109/safetensors-0.7.0-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:94fd4858284736bb67a897a41608b5b0c2496c9bdb3bf2af1fa3409127f20d57", size = 447058, upload-time = "2025-11-19T15:18:34.416Z" }, - { url = "https://files.pythonhosted.org/packages/f1/06/578ffed52c2296f93d7fd2d844cabfa92be51a587c38c8afbb8ae449ca89/safetensors-0.7.0-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e07d91d0c92a31200f25351f4acb2bc6aff7f48094e13ebb1d0fb995b54b6542", size = 491748, upload-time = "2025-11-19T15:18:09.79Z" }, - { url = "https://files.pythonhosted.org/packages/ae/33/1debbbb70e4791dde185edb9413d1fe01619255abb64b300157d7f15dddd/safetensors-0.7.0-cp38-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8469155f4cb518bafb4acf4865e8bb9d6804110d2d9bdcaa78564b9fd841e104", size = 503881, upload-time = "2025-11-19T15:18:16.145Z" }, - { url = "https://files.pythonhosted.org/packages/8e/1c/40c2ca924d60792c3be509833df711b553c60effbd91da6f5284a83f7122/safetensors-0.7.0-cp38-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:54bef08bf00a2bff599982f6b08e8770e09cc012d7bba00783fc7ea38f1fb37d", size = 623463, upload-time = "2025-11-19T15:18:21.11Z" }, - { url = "https://files.pythonhosted.org/packages/9b/3a/13784a9364bd43b0d61eef4bea2845039bc2030458b16594a1bd787ae26e/safetensors-0.7.0-cp38-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:42cb091236206bb2016d245c377ed383aa7f78691748f3bb6ee1bfa51ae2ce6a", size = 532855, upload-time = "2025-11-19T15:18:25.719Z" }, - { url = "https://files.pythonhosted.org/packages/a0/60/429e9b1cb3fc651937727befe258ea24122d9663e4d5709a48c9cbfceecb/safetensors-0.7.0-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dac7252938f0696ddea46f5e855dd3138444e82236e3be475f54929f0c510d48", size = 507152, upload-time = "2025-11-19T15:18:33.023Z" }, - { url = "https://files.pythonhosted.org/packages/3c/a8/4b45e4e059270d17af60359713ffd83f97900d45a6afa73aaa0d737d48b6/safetensors-0.7.0-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1d060c70284127fa805085d8f10fbd0962792aed71879d00864acda69dbab981", size = 541856, upload-time = "2025-11-19T15:18:31.075Z" }, - { url = "https://files.pythonhosted.org/packages/06/87/d26d8407c44175d8ae164a95b5a62707fcc445f3c0c56108e37d98070a3d/safetensors-0.7.0-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:cdab83a366799fa730f90a4ebb563e494f28e9e92c4819e556152ad55e43591b", size = 674060, upload-time = "2025-11-19T15:18:37.211Z" }, - { url = "https://files.pythonhosted.org/packages/11/f5/57644a2ff08dc6325816ba7217e5095f17269dada2554b658442c66aed51/safetensors-0.7.0-cp38-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:672132907fcad9f2aedcb705b2d7b3b93354a2aec1b2f706c4db852abe338f85", size = 771715, upload-time = "2025-11-19T15:18:38.689Z" }, - { url = "https://files.pythonhosted.org/packages/86/31/17883e13a814bd278ae6e266b13282a01049b0c81341da7fd0e3e71a80a3/safetensors-0.7.0-cp38-abi3-musllinux_1_2_i686.whl", hash = "sha256:5d72abdb8a4d56d4020713724ba81dac065fedb7f3667151c4a637f1d3fb26c0", size = 714377, upload-time = "2025-11-19T15:18:40.162Z" }, - { url = "https://files.pythonhosted.org/packages/4a/d8/0c8a7dc9b41dcac53c4cbf9df2b9c83e0e0097203de8b37a712b345c0be5/safetensors-0.7.0-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:b0f6d66c1c538d5a94a73aa9ddca8ccc4227e6c9ff555322ea40bdd142391dd4", size = 677368, upload-time = "2025-11-19T15:18:41.627Z" }, - { url = "https://files.pythonhosted.org/packages/05/e5/cb4b713c8a93469e3c5be7c3f8d77d307e65fe89673e731f5c2bfd0a9237/safetensors-0.7.0-cp38-abi3-win32.whl", hash = "sha256:c74af94bf3ac15ac4d0f2a7c7b4663a15f8c2ab15ed0fc7531ca61d0835eccba", size = 326423, upload-time = "2025-11-19T15:18:45.74Z" }, - { 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.optional-dependencies] -torch = [ - { name = "numpy" }, - { name = "packaging" }, - { name = "torch" }, -] - -[[package]] -name = "scikit-learn" -version = "1.8.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "joblib" }, - { name = "numpy" }, - { name = "scipy" }, - { name = "threadpoolctl" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/0e/d4/40988bf3b8e34feec1d0e6a051446b1f66225f8529b9309becaeef62b6c4/scikit_learn-1.8.0.tar.gz", hash = "sha256:9bccbb3b40e3de10351f8f5068e105d0f4083b1a65fa07b6634fbc401a6287fd", size = 7335585, upload-time = "2025-12-10T07:08:53.618Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/90/74/e6a7cc4b820e95cc38cf36cd74d5aa2b42e8ffc2d21fe5a9a9c45c1c7630/scikit_learn-1.8.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:5fb63362b5a7ddab88e52b6dbb47dac3fd7dafeee740dc6c8d8a446ddedade8e", size = 8548242, upload-time = "2025-12-10T07:07:51.568Z" }, - { url = "https://files.pythonhosted.org/packages/49/d8/9be608c6024d021041c7f0b3928d4749a706f4e2c3832bbede4fb4f58c95/scikit_learn-1.8.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:5025ce924beccb28298246e589c691fe1b8c1c96507e6d27d12c5fadd85bfd76", size = 8079075, upload-time = "2025-12-10T07:07:53.697Z" }, - { url = "https://files.pythonhosted.org/packages/dd/47/f187b4636ff80cc63f21cd40b7b2d177134acaa10f6bb73746130ee8c2e5/scikit_learn-1.8.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4496bb2cf7a43ce1a2d7524a79e40bc5da45cf598dbf9545b7e8316ccba47bb4", size = 8660492, upload-time = "2025-12-10T07:07:55.574Z" }, - { url = "https://files.pythonhosted.org/packages/97/74/b7a304feb2b49df9fafa9382d4d09061a96ee9a9449a7cbea7988dda0828/scikit_learn-1.8.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a0bcfe4d0d14aec44921545fd2af2338c7471de9cb701f1da4c9d85906ab847a", size = 8931904, upload-time = "2025-12-10T07:07:57.666Z" }, - { url = "https://files.pythonhosted.org/packages/9f/c4/0ab22726a04ede56f689476b760f98f8f46607caecff993017ac1b64aa5d/scikit_learn-1.8.0-cp312-cp312-win_amd64.whl", hash = "sha256:35c007dedb2ffe38fe3ee7d201ebac4a2deccd2408e8621d53067733e3c74809", size = 8019359, upload-time = "2025-12-10T07:07:59.838Z" }, - { url = "https://files.pythonhosted.org/packages/24/90/344a67811cfd561d7335c1b96ca21455e7e472d281c3c279c4d3f2300236/scikit_learn-1.8.0-cp312-cp312-win_arm64.whl", hash = "sha256:8c497fff237d7b4e07e9ef1a640887fa4fb765647f86fbe00f969ff6280ce2bb", size = 7641898, upload-time = "2025-12-10T07:08:01.36Z" }, - { url = "https://files.pythonhosted.org/packages/03/aa/e22e0768512ce9255eba34775be2e85c2048da73da1193e841707f8f039c/scikit_learn-1.8.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0d6ae97234d5d7079dc0040990a6f7aeb97cb7fa7e8945f1999a429b23569e0a", size = 8513770, upload-time = "2025-12-10T07:08:03.251Z" }, - { url = "https://files.pythonhosted.org/packages/58/37/31b83b2594105f61a381fc74ca19e8780ee923be2d496fcd8d2e1147bd99/scikit_learn-1.8.0-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:edec98c5e7c128328124a029bceb09eda2d526997780fef8d65e9a69eead963e", size = 8044458, upload-time = "2025-12-10T07:08:05.336Z" }, - { url = "https://files.pythonhosted.org/packages/2d/5a/3f1caed8765f33eabb723596666da4ebbf43d11e96550fb18bdec42b467b/scikit_learn-1.8.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:74b66d8689d52ed04c271e1329f0c61635bcaf5b926db9b12d58914cdc01fe57", size = 8610341, upload-time = "2025-12-10T07:08:07.732Z" }, - { url = "https://files.pythonhosted.org/packages/38/cf/06896db3f71c75902a8e9943b444a56e727418f6b4b4a90c98c934f51ed4/scikit_learn-1.8.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8fdf95767f989b0cfedb85f7ed8ca215d4be728031f56ff5a519ee1e3276dc2e", size = 8900022, upload-time = "2025-12-10T07:08:09.862Z" }, - { url = "https://files.pythonhosted.org/packages/1c/f9/9b7563caf3ec8873e17a31401858efab6b39a882daf6c1bfa88879c0aa11/scikit_learn-1.8.0-cp313-cp313-win_amd64.whl", hash = "sha256:2de443b9373b3b615aec1bb57f9baa6bb3a9bd093f1269ba95c17d870422b271", size = 7989409, upload-time = "2025-12-10T07:08:12.028Z" }, - { url = "https://files.pythonhosted.org/packages/49/bd/1f4001503650e72c4f6009ac0c4413cb17d2d601cef6f71c0453da2732fc/scikit_learn-1.8.0-cp313-cp313-win_arm64.whl", hash = "sha256:eddde82a035681427cbedded4e6eff5e57fa59216c2e3e90b10b19ab1d0a65c3", size = 7619760, upload-time = "2025-12-10T07:08:13.688Z" }, - { url = "https://files.pythonhosted.org/packages/d2/7d/a630359fc9dcc95496588c8d8e3245cc8fd81980251079bc09c70d41d951/scikit_learn-1.8.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:7cc267b6108f0a1499a734167282c00c4ebf61328566b55ef262d48e9849c735", size = 8826045, upload-time = "2025-12-10T07:08:15.215Z" }, - { url = "https://files.pythonhosted.org/packages/cc/56/a0c86f6930cfcd1c7054a2bc417e26960bb88d32444fe7f71d5c2cfae891/scikit_learn-1.8.0-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:fe1c011a640a9f0791146011dfd3c7d9669785f9fed2b2a5f9e207536cf5c2fd", size = 8420324, upload-time = "2025-12-10T07:08:17.561Z" }, - { url = "https://files.pythonhosted.org/packages/46/1e/05962ea1cebc1cf3876667ecb14c283ef755bf409993c5946ade3b77e303/scikit_learn-1.8.0-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:72358cce49465d140cc4e7792015bb1f0296a9742d5622c67e31399b75468b9e", size = 8680651, upload-time = "2025-12-10T07:08:19.952Z" }, - { url = "https://files.pythonhosted.org/packages/fe/56/a85473cd75f200c9759e3a5f0bcab2d116c92a8a02ee08ccd73b870f8bb4/scikit_learn-1.8.0-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:80832434a6cc114f5219211eec13dcbc16c2bac0e31ef64c6d346cde3cf054cb", size = 8925045, upload-time = "2025-12-10T07:08:22.11Z" }, - { url = "https://files.pythonhosted.org/packages/cc/b7/64d8cfa896c64435ae57f4917a548d7ac7a44762ff9802f75a79b77cb633/scikit_learn-1.8.0-cp313-cp313t-win_amd64.whl", hash = "sha256:ee787491dbfe082d9c3013f01f5991658b0f38aa8177e4cd4bf434c58f551702", size = 8507994, upload-time = "2025-12-10T07:08:23.943Z" }, - { url = "https://files.pythonhosted.org/packages/5e/37/e192ea709551799379958b4c4771ec507347027bb7c942662c7fbeba31cb/scikit_learn-1.8.0-cp313-cp313t-win_arm64.whl", hash = "sha256:bf97c10a3f5a7543f9b88cbf488d33d175e9146115a451ae34568597ba33dcde", size = 7869518, upload-time = "2025-12-10T07:08:25.71Z" }, - { url = "https://files.pythonhosted.org/packages/24/05/1af2c186174cc92dcab2233f327336058c077d38f6fe2aceb08e6ab4d509/scikit_learn-1.8.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:c22a2da7a198c28dd1a6e1136f19c830beab7fdca5b3e5c8bba8394f8a5c45b3", size = 8528667, upload-time = "2025-12-10T07:08:27.541Z" }, - { url = "https://files.pythonhosted.org/packages/a8/25/01c0af38fe969473fb292bba9dc2b8f9b451f3112ff242c647fee3d0dfe7/scikit_learn-1.8.0-cp314-cp314-macosx_12_0_arm64.whl", hash = "sha256:6b595b07a03069a2b1740dc08c2299993850ea81cce4fe19b2421e0c970de6b7", size = 8066524, upload-time = "2025-12-10T07:08:29.822Z" }, - { url = "https://files.pythonhosted.org/packages/be/ce/a0623350aa0b68647333940ee46fe45086c6060ec604874e38e9ab7d8e6c/scikit_learn-1.8.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:29ffc74089f3d5e87dfca4c2c8450f88bdc61b0fc6ed5d267f3988f19a1309f6", size = 8657133, upload-time = "2025-12-10T07:08:31.865Z" }, - { url = "https://files.pythonhosted.org/packages/b8/cb/861b41341d6f1245e6ca80b1c1a8c4dfce43255b03df034429089ca2a2c5/scikit_learn-1.8.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fb65db5d7531bccf3a4f6bec3462223bea71384e2cda41da0f10b7c292b9e7c4", size = 8923223, upload-time = "2025-12-10T07:08:34.166Z" }, - { url = "https://files.pythonhosted.org/packages/76/18/a8def8f91b18cd1ba6e05dbe02540168cb24d47e8dcf69e8d00b7da42a08/scikit_learn-1.8.0-cp314-cp314-win_amd64.whl", hash = "sha256:56079a99c20d230e873ea40753102102734c5953366972a71d5cb39a32bc40c6", size = 8096518, upload-time = "2025-12-10T07:08:36.339Z" }, - { url = "https://files.pythonhosted.org/packages/d1/77/482076a678458307f0deb44e29891d6022617b2a64c840c725495bee343f/scikit_learn-1.8.0-cp314-cp314-win_arm64.whl", hash = "sha256:3bad7565bc9cf37ce19a7c0d107742b320c1285df7aab1a6e2d28780df167242", size = 7754546, upload-time = "2025-12-10T07:08:38.128Z" }, - { url = "https://files.pythonhosted.org/packages/2d/d1/ef294ca754826daa043b2a104e59960abfab4cf653891037d19dd5b6f3cf/scikit_learn-1.8.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:4511be56637e46c25721e83d1a9cea9614e7badc7040c4d573d75fbe257d6fd7", size = 8848305, upload-time = "2025-12-10T07:08:41.013Z" }, - { url = "https://files.pythonhosted.org/packages/5b/e2/b1f8b05138ee813b8e1a4149f2f0d289547e60851fd1bb268886915adbda/scikit_learn-1.8.0-cp314-cp314t-macosx_12_0_arm64.whl", hash = "sha256:a69525355a641bf8ef136a7fa447672fb54fe8d60cab5538d9eb7c6438543fb9", size = 8432257, upload-time = "2025-12-10T07:08:42.873Z" }, - { url = "https://files.pythonhosted.org/packages/26/11/c32b2138a85dcb0c99f6afd13a70a951bfdff8a6ab42d8160522542fb647/scikit_learn-1.8.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c2656924ec73e5939c76ac4c8b026fc203b83d8900362eb2599d8aee80e4880f", size = 8678673, upload-time = "2025-12-10T07:08:45.362Z" }, - { url = "https://files.pythonhosted.org/packages/c7/57/51f2384575bdec454f4fe4e7a919d696c9ebce914590abf3e52d47607ab8/scikit_learn-1.8.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:15fc3b5d19cc2be65404786857f2e13c70c83dd4782676dd6814e3b89dc8f5b9", size = 8922467, upload-time = "2025-12-10T07:08:47.408Z" }, - { url = "https://files.pythonhosted.org/packages/35/4d/748c9e2872637a57981a04adc038dacaa16ba8ca887b23e34953f0b3f742/scikit_learn-1.8.0-cp314-cp314t-win_amd64.whl", hash = "sha256:00d6f1d66fbcf4eba6e356e1420d33cc06c70a45bb1363cd6f6a8e4ebbbdece2", size = 8774395, upload-time = "2025-12-10T07:08:49.337Z" }, - { url = "https://files.pythonhosted.org/packages/60/22/d7b2ebe4704a5e50790ba089d5c2ae308ab6bb852719e6c3bd4f04c3a363/scikit_learn-1.8.0-cp314-cp314t-win_arm64.whl", hash = "sha256:f28dd15c6bb0b66ba09728cf09fd8736c304be29409bd8445a080c1280619e8c", size = 8002647, upload-time = "2025-12-10T07:08:51.601Z" }, -] - -[[package]] -name = "scipy" -version = "1.17.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "numpy" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/7a/97/5a3609c4f8d58b039179648e62dd220f89864f56f7357f5d4f45c29eb2cc/scipy-1.17.1.tar.gz", hash = "sha256:95d8e012d8cb8816c226aef832200b1d45109ed4464303e997c5b13122b297c0", size = 30573822, upload-time = "2026-02-23T00:26:24.851Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/35/48/b992b488d6f299dbe3f11a20b24d3dda3d46f1a635ede1c46b5b17a7b163/scipy-1.17.1-cp312-cp312-macosx_10_14_x86_64.whl", hash = "sha256:35c3a56d2ef83efc372eaec584314bd0ef2e2f0d2adb21c55e6ad5b344c0dcb8", size = 31610954, upload-time = "2026-02-23T00:17:49.855Z" }, - { url = "https://files.pythonhosted.org/packages/b2/02/cf107b01494c19dc100f1d0b7ac3cc08666e96ba2d64db7626066cee895e/scipy-1.17.1-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:fcb310ddb270a06114bb64bbe53c94926b943f5b7f0842194d585c65eb4edd76", size = 28172662, upload-time = "2026-02-23T00:18:01.64Z" }, - { url = "https://files.pythonhosted.org/packages/cf/a9/599c28631bad314d219cf9ffd40e985b24d603fc8a2f4ccc5ae8419a535b/scipy-1.17.1-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:cc90d2e9c7e5c7f1a482c9875007c095c3194b1cfedca3c2f3291cdc2bc7c086", size = 20344366, upload-time = "2026-02-23T00:18:12.015Z" }, - { url = "https://files.pythonhosted.org/packages/35/f5/906eda513271c8deb5af284e5ef0206d17a96239af79f9fa0aebfe0e36b4/scipy-1.17.1-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:c80be5ede8f3f8eded4eff73cc99a25c388ce98e555b17d31da05287015ffa5b", size = 22704017, upload-time = "2026-02-23T00:18:21.502Z" }, - { url = "https://files.pythonhosted.org/packages/da/34/16f10e3042d2f1d6b66e0428308ab52224b6a23049cb2f5c1756f713815f/scipy-1.17.1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e19ebea31758fac5893a2ac360fedd00116cbb7628e650842a6691ba7ca28a21", size = 32927842, upload-time = "2026-02-23T00:18:35.367Z" }, - { url = "https://files.pythonhosted.org/packages/01/8e/1e35281b8ab6d5d72ebe9911edcdffa3f36b04ed9d51dec6dd140396e220/scipy-1.17.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:02ae3b274fde71c5e92ac4d54bc06c42d80e399fec704383dcd99b301df37458", size = 35235890, upload-time = "2026-02-23T00:18:49.188Z" }, - { url = "https://files.pythonhosted.org/packages/c5/5c/9d7f4c88bea6e0d5a4f1bc0506a53a00e9fcb198de372bfe4d3652cef482/scipy-1.17.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8a604bae87c6195d8b1045eddece0514d041604b14f2727bbc2b3020172045eb", size = 35003557, upload-time = "2026-02-23T00:18:54.74Z" }, - { url = "https://files.pythonhosted.org/packages/65/94/7698add8f276dbab7a9de9fb6b0e02fc13ee61d51c7c3f85ac28b65e1239/scipy-1.17.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:f590cd684941912d10becc07325a3eeb77886fe981415660d9265c4c418d0bea", size = 37625856, upload-time = "2026-02-23T00:19:00.307Z" }, - { url = "https://files.pythonhosted.org/packages/a2/84/dc08d77fbf3d87d3ee27f6a0c6dcce1de5829a64f2eae85a0ecc1f0daa73/scipy-1.17.1-cp312-cp312-win_amd64.whl", hash = "sha256:41b71f4a3a4cab9d366cd9065b288efc4d4f3c0b37a91a8e0947fb5bd7f31d87", size = 36549682, upload-time = "2026-02-23T00:19:07.67Z" }, - { url = "https://files.pythonhosted.org/packages/bc/98/fe9ae9ffb3b54b62559f52dedaebe204b408db8109a8c66fdd04869e6424/scipy-1.17.1-cp312-cp312-win_arm64.whl", hash = "sha256:f4115102802df98b2b0db3cce5cb9b92572633a1197c77b7553e5203f284a5b3", size = 24547340, upload-time = "2026-02-23T00:19:12.024Z" }, - { url = "https://files.pythonhosted.org/packages/76/27/07ee1b57b65e92645f219b37148a7e7928b82e2b5dbeccecb4dff7c64f0b/scipy-1.17.1-cp313-cp313-macosx_10_14_x86_64.whl", hash = "sha256:5e3c5c011904115f88a39308379c17f91546f77c1667cea98739fe0fccea804c", size = 31590199, upload-time = "2026-02-23T00:19:17.192Z" }, - { url = "https://files.pythonhosted.org/packages/ec/ae/db19f8ab842e9b724bf5dbb7db29302a91f1e55bc4d04b1025d6d605a2c5/scipy-1.17.1-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:6fac755ca3d2c3edcb22f479fceaa241704111414831ddd3bc6056e18516892f", size = 28154001, upload-time = "2026-02-23T00:19:22.241Z" }, - { url = "https://files.pythonhosted.org/packages/5b/58/3ce96251560107b381cbd6e8413c483bbb1228a6b919fa8652b0d4090e7f/scipy-1.17.1-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:7ff200bf9d24f2e4d5dc6ee8c3ac64d739d3a89e2326ba68aaf6c4a2b838fd7d", size = 20325719, upload-time = "2026-02-23T00:19:26.329Z" }, - { url = "https://files.pythonhosted.org/packages/b2/83/15087d945e0e4d48ce2377498abf5ad171ae013232ae31d06f336e64c999/scipy-1.17.1-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:4b400bdc6f79fa02a4d86640310dde87a21fba0c979efff5248908c6f15fad1b", size = 22683595, upload-time = "2026-02-23T00:19:30.304Z" }, - { url = "https://files.pythonhosted.org/packages/b4/e0/e58fbde4a1a594c8be8114eb4aac1a55bcd6587047efc18a61eb1f5c0d30/scipy-1.17.1-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2b64ca7d4aee0102a97f3ba22124052b4bd2152522355073580bf4845e2550b6", size = 32896429, upload-time = "2026-02-23T00:19:35.536Z" }, - { url = "https://files.pythonhosted.org/packages/f5/5f/f17563f28ff03c7b6799c50d01d5d856a1d55f2676f537ca8d28c7f627cd/scipy-1.17.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:581b2264fc0aa555f3f435a5944da7504ea3a065d7029ad60e7c3d1ae09c5464", size = 35203952, upload-time = "2026-02-23T00:19:42.259Z" }, - { url = "https://files.pythonhosted.org/packages/8d/a5/9afd17de24f657fdfe4df9a3f1ea049b39aef7c06000c13db1530d81ccca/scipy-1.17.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:beeda3d4ae615106d7094f7e7cef6218392e4465cc95d25f900bebabfded0950", size = 34979063, upload-time = "2026-02-23T00:19:47.547Z" }, - { url = "https://files.pythonhosted.org/packages/8b/13/88b1d2384b424bf7c924f2038c1c409f8d88bb2a8d49d097861dd64a57b2/scipy-1.17.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6609bc224e9568f65064cfa72edc0f24ee6655b47575954ec6339534b2798369", size = 37598449, upload-time = "2026-02-23T00:19:53.238Z" }, - { url = "https://files.pythonhosted.org/packages/35/e5/d6d0e51fc888f692a35134336866341c08655d92614f492c6860dc45bb2c/scipy-1.17.1-cp313-cp313-win_amd64.whl", hash = "sha256:37425bc9175607b0268f493d79a292c39f9d001a357bebb6b88fdfaff13f6448", size = 36510943, upload-time = "2026-02-23T00:20:50.89Z" }, - { url = "https://files.pythonhosted.org/packages/2a/fd/3be73c564e2a01e690e19cc618811540ba5354c67c8680dce3281123fb79/scipy-1.17.1-cp313-cp313-win_arm64.whl", hash = "sha256:5cf36e801231b6a2059bf354720274b7558746f3b1a4efb43fcf557ccd484a87", size = 24545621, upload-time = "2026-02-23T00:20:55.871Z" }, - { url = "https://files.pythonhosted.org/packages/6f/6b/17787db8b8114933a66f9dcc479a8272e4b4da75fe03b0c282f7b0ade8cd/scipy-1.17.1-cp313-cp313t-macosx_10_14_x86_64.whl", hash = "sha256:d59c30000a16d8edc7e64152e30220bfbd724c9bbb08368c054e24c651314f0a", size = 31936708, upload-time = "2026-02-23T00:19:58.694Z" }, - { url = "https://files.pythonhosted.org/packages/38/2e/524405c2b6392765ab1e2b722a41d5da33dc5c7b7278184a8ad29b6cb206/scipy-1.17.1-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:010f4333c96c9bb1a4516269e33cb5917b08ef2166d5556ca2fd9f082a9e6ea0", size = 28570135, upload-time = "2026-02-23T00:20:03.934Z" }, - { url = "https://files.pythonhosted.org/packages/fd/c3/5bd7199f4ea8556c0c8e39f04ccb014ac37d1468e6cfa6a95c6b3562b76e/scipy-1.17.1-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:2ceb2d3e01c5f1d83c4189737a42d9cb2fc38a6eeed225e7515eef71ad301dce", size = 20741977, upload-time = "2026-02-23T00:20:07.935Z" }, - { url = "https://files.pythonhosted.org/packages/d9/b8/8ccd9b766ad14c78386599708eb745f6b44f08400a5fd0ade7cf89b6fc93/scipy-1.17.1-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:844e165636711ef41f80b4103ed234181646b98a53c8f05da12ca5ca289134f6", size = 23029601, upload-time = "2026-02-23T00:20:12.161Z" }, - { url = "https://files.pythonhosted.org/packages/6d/a0/3cb6f4d2fb3e17428ad2880333cac878909ad1a89f678527b5328b93c1d4/scipy-1.17.1-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:158dd96d2207e21c966063e1635b1063cd7787b627b6f07305315dd73d9c679e", size = 33019667, upload-time = "2026-02-23T00:20:17.208Z" }, - { url = "https://files.pythonhosted.org/packages/f3/c3/2d834a5ac7bf3a0c806ad1508efc02dda3c8c61472a56132d7894c312dea/scipy-1.17.1-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:74cbb80d93260fe2ffa334efa24cb8f2f0f622a9b9febf8b483c0b865bfb3475", size = 35264159, upload-time = "2026-02-23T00:20:23.087Z" }, - { url = "https://files.pythonhosted.org/packages/4d/77/d3ed4becfdbd217c52062fafe35a72388d1bd82c2d0ba5ca19d6fcc93e11/scipy-1.17.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:dbc12c9f3d185f5c737d801da555fb74b3dcfa1a50b66a1a93e09190f41fab50", size = 35102771, upload-time = "2026-02-23T00:20:28.636Z" }, - { url = "https://files.pythonhosted.org/packages/bd/12/d19da97efde68ca1ee5538bb261d5d2c062f0c055575128f11a2730e3ac1/scipy-1.17.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:94055a11dfebe37c656e70317e1996dc197e1a15bbcc351bcdd4610e128fe1ca", size = 37665910, upload-time = "2026-02-23T00:20:34.743Z" }, - { url = "https://files.pythonhosted.org/packages/06/1c/1172a88d507a4baaf72c5a09bb6c018fe2ae0ab622e5830b703a46cc9e44/scipy-1.17.1-cp313-cp313t-win_amd64.whl", hash = "sha256:e30bdeaa5deed6bc27b4cc490823cd0347d7dae09119b8803ae576ea0ce52e4c", size = 36562980, upload-time = "2026-02-23T00:20:40.575Z" }, - { url = "https://files.pythonhosted.org/packages/70/b0/eb757336e5a76dfa7911f63252e3b7d1de00935d7705cf772db5b45ec238/scipy-1.17.1-cp313-cp313t-win_arm64.whl", hash = "sha256:a720477885a9d2411f94a93d16f9d89bad0f28ca23c3f8daa521e2dcc3f44d49", size = 24856543, upload-time = "2026-02-23T00:20:45.313Z" }, - { url = "https://files.pythonhosted.org/packages/cf/83/333afb452af6f0fd70414dc04f898647ee1423979ce02efa75c3b0f2c28e/scipy-1.17.1-cp314-cp314-macosx_10_14_x86_64.whl", hash = "sha256:a48a72c77a310327f6a3a920092fa2b8fd03d7deaa60f093038f22d98e096717", size = 31584510, upload-time = "2026-02-23T00:21:01.015Z" }, - { url = "https://files.pythonhosted.org/packages/ed/a6/d05a85fd51daeb2e4ea71d102f15b34fedca8e931af02594193ae4fd25f7/scipy-1.17.1-cp314-cp314-macosx_12_0_arm64.whl", hash = "sha256:45abad819184f07240d8a696117a7aacd39787af9e0b719d00285549ed19a1e9", size = 28170131, upload-time = "2026-02-23T00:21:05.888Z" }, - { url = "https://files.pythonhosted.org/packages/db/7b/8624a203326675d7746a254083a187398090a179335b2e4a20e2ddc46e83/scipy-1.17.1-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:3fd1fcdab3ea951b610dc4cef356d416d5802991e7e32b5254828d342f7b7e0b", size = 20342032, upload-time = "2026-02-23T00:21:09.904Z" }, - { url = "https://files.pythonhosted.org/packages/c9/35/2c342897c00775d688d8ff3987aced3426858fd89d5a0e26e020b660b301/scipy-1.17.1-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:7bdf2da170b67fdf10bca777614b1c7d96ae3ca5794fd9587dce41eb2966e866", size = 22678766, upload-time = "2026-02-23T00:21:14.313Z" }, - { url = "https://files.pythonhosted.org/packages/ef/f2/7cdb8eb308a1a6ae1e19f945913c82c23c0c442a462a46480ce487fdc0ac/scipy-1.17.1-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:adb2642e060a6549c343603a3851ba76ef0b74cc8c079a9a58121c7ec9fe2350", size = 32957007, upload-time = "2026-02-23T00:21:19.663Z" }, - { url = "https://files.pythonhosted.org/packages/0b/2e/7eea398450457ecb54e18e9d10110993fa65561c4f3add5e8eccd2b9cd41/scipy-1.17.1-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:eee2cfda04c00a857206a4330f0c5e3e56535494e30ca445eb19ec624ae75118", size = 35221333, upload-time = "2026-02-23T00:21:25.278Z" }, - { url = "https://files.pythonhosted.org/packages/d9/77/5b8509d03b77f093a0d52e606d3c4f79e8b06d1d38c441dacb1e26cacf46/scipy-1.17.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:d2650c1fb97e184d12d8ba010493ee7b322864f7d3d00d3f9bb97d9c21de4068", size = 35042066, upload-time = "2026-02-23T00:21:31.358Z" }, - { url = "https://files.pythonhosted.org/packages/f9/df/18f80fb99df40b4070328d5ae5c596f2f00fffb50167e31439e932f29e7d/scipy-1.17.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:08b900519463543aa604a06bec02461558a6e1cef8fdbb8098f77a48a83c8118", size = 37612763, upload-time = "2026-02-23T00:21:37.247Z" }, - { url = "https://files.pythonhosted.org/packages/4b/39/f0e8ea762a764a9dc52aa7dabcfad51a354819de1f0d4652b6a1122424d6/scipy-1.17.1-cp314-cp314-win_amd64.whl", hash = "sha256:3877ac408e14da24a6196de0ddcace62092bfc12a83823e92e49e40747e52c19", size = 37290984, upload-time = "2026-02-23T00:22:35.023Z" }, - { url = "https://files.pythonhosted.org/packages/7c/56/fe201e3b0f93d1a8bcf75d3379affd228a63d7e2d80ab45467a74b494947/scipy-1.17.1-cp314-cp314-win_arm64.whl", hash = "sha256:f8885db0bc2bffa59d5c1b72fad7a6a92d3e80e7257f967dd81abb553a90d293", size = 25192877, upload-time = "2026-02-23T00:22:39.798Z" }, - { url = "https://files.pythonhosted.org/packages/96/ad/f8c414e121f82e02d76f310f16db9899c4fcde36710329502a6b2a3c0392/scipy-1.17.1-cp314-cp314t-macosx_10_14_x86_64.whl", hash = "sha256:1cc682cea2ae55524432f3cdff9e9a3be743d52a7443d0cba9017c23c87ae2f6", size = 31949750, upload-time = "2026-02-23T00:21:42.289Z" }, - { url = "https://files.pythonhosted.org/packages/7c/b0/c741e8865d61b67c81e255f4f0a832846c064e426636cd7de84e74d209be/scipy-1.17.1-cp314-cp314t-macosx_12_0_arm64.whl", hash = "sha256:2040ad4d1795a0ae89bfc7e8429677f365d45aa9fd5e4587cf1ea737f927b4a1", size = 28585858, upload-time = "2026-02-23T00:21:47.706Z" }, - { url = "https://files.pythonhosted.org/packages/ed/1b/3985219c6177866628fa7c2595bfd23f193ceebbe472c98a08824b9466ff/scipy-1.17.1-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:131f5aaea57602008f9822e2115029b55d4b5f7c070287699fe45c661d051e39", size = 20757723, upload-time = "2026-02-23T00:21:52.039Z" }, - { url = "https://files.pythonhosted.org/packages/c0/19/2a04aa25050d656d6f7b9e7b685cc83d6957fb101665bfd9369ca6534563/scipy-1.17.1-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:9cdc1a2fcfd5c52cfb3045feb399f7b3ce822abdde3a193a6b9a60b3cb5854ca", size = 23043098, upload-time = "2026-02-23T00:21:56.185Z" }, - { url = "https://files.pythonhosted.org/packages/86/f1/3383beb9b5d0dbddd030335bf8a8b32d4317185efe495374f134d8be6cce/scipy-1.17.1-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6e3dcd57ab780c741fde8dc68619de988b966db759a3c3152e8e9142c26295ad", size = 33030397, upload-time = "2026-02-23T00:22:01.404Z" }, - { url = "https://files.pythonhosted.org/packages/41/68/8f21e8a65a5a03f25a79165ec9d2b28c00e66dc80546cf5eb803aeeff35b/scipy-1.17.1-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a9956e4d4f4a301ebf6cde39850333a6b6110799d470dbbb1e25326ac447f52a", size = 35281163, upload-time = "2026-02-23T00:22:07.024Z" }, - { url = "https://files.pythonhosted.org/packages/84/8d/c8a5e19479554007a5632ed7529e665c315ae7492b4f946b0deb39870e39/scipy-1.17.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:a4328d245944d09fd639771de275701ccadf5f781ba0ff092ad141e017eccda4", size = 35116291, upload-time = "2026-02-23T00:22:12.585Z" }, - { url = "https://files.pythonhosted.org/packages/52/52/e57eceff0e342a1f50e274264ed47497b59e6a4e3118808ee58ddda7b74a/scipy-1.17.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:a77cbd07b940d326d39a1d1b37817e2ee4d79cb30e7338f3d0cddffae70fcaa2", size = 37682317, upload-time = "2026-02-23T00:22:18.513Z" }, - { url = "https://files.pythonhosted.org/packages/11/2f/b29eafe4a3fbc3d6de9662b36e028d5f039e72d345e05c250e121a230dd4/scipy-1.17.1-cp314-cp314t-win_amd64.whl", hash = "sha256:eb092099205ef62cd1782b006658db09e2fed75bffcae7cc0d44052d8aa0f484", size = 37345327, upload-time = "2026-02-23T00:22:24.442Z" }, - { url = "https://files.pythonhosted.org/packages/07/39/338d9219c4e87f3e708f18857ecd24d22a0c3094752393319553096b98af/scipy-1.17.1-cp314-cp314t-win_arm64.whl", hash = "sha256:200e1050faffacc162be6a486a984a0497866ec54149a01270adc8a59b7c7d21", size = 25489165, upload-time = "2026-02-23T00:22:29.563Z" }, -] - -[[package]] -name = "secretstorage" -version = "3.5.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "cryptography" }, - { name = "jeepney" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/1c/03/e834bcd866f2f8a49a85eaff47340affa3bfa391ee9912a952a1faa68c7b/secretstorage-3.5.0.tar.gz", hash = "sha256:f04b8e4689cbce351744d5537bf6b1329c6fc68f91fa666f60a380edddcd11be", size = 19884, upload-time = "2025-11-23T19:02:53.191Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/b7/46/f5af3402b579fd5e11573ce652019a67074317e18c1935cc0b4ba9b35552/secretstorage-3.5.0-py3-none-any.whl", hash = "sha256:0ce65888c0725fcb2c5bc0fdb8e5438eece02c523557ea40ce0703c266248137", size = 15554, upload-time = "2025-11-23T19:02:51.545Z" }, -] - -[[package]] -name = "semchunk" -version = "2.2.2" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "mpire", extra = ["dill"] }, - { name = "tqdm" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/62/96/c418c322730b385e81d4ab462e68dd48bb2dbda4d8efa17cad2ca468d9ac/semchunk-2.2.2.tar.gz", hash = "sha256:940e89896e64eeb01de97ba60f51c8c7b96c6a3951dfcf574f25ce2146752f52", size = 12271, upload-time = "2024-12-17T22:54:30.332Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/76/84/94ca7896c7df20032bcb09973e9a4d14c222507c0aadf22e89fa76bb0a04/semchunk-2.2.2-py3-none-any.whl", hash = "sha256:94ca19020c013c073abdfd06d79a7c13637b91738335f3b8cdb5655ee7cc94d2", size = 10271, upload-time = "2024-12-17T22:54:27.689Z" }, -] - -[[package]] -name = "sentence-transformers" -version = "5.2.3" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "huggingface-hub" }, - { name = "numpy" }, - { name = "scikit-learn" }, - { name = "scipy" }, - { name = "torch" }, - { name = "tqdm" }, - { name = "transformers" }, - { name = "typing-extensions" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/5b/30/21664028fc0776eb1ca024879480bbbab36f02923a8ff9e4cae5a150fa35/sentence_transformers-5.2.3.tar.gz", hash = "sha256:3cd3044e1f3fe859b6a1b66336aac502eaae5d3dd7d5c8fc237f37fbf58137c7", size = 381623, upload-time = "2026-02-17T14:05:20.238Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/46/9f/dba4b3e18ebbe1eaa29d9f1764fbc7da0cd91937b83f2b7928d15c5d2d36/sentence_transformers-5.2.3-py3-none-any.whl", hash = "sha256:6437c62d4112b615ddebda362dfc16a4308d604c5b68125ed586e3e95d5b2e30", size = 494225, upload-time = "2026-02-17T14:05:18.596Z" }, -] - -[[package]] -name = "setuptools" -version = "82.0.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/82/f3/748f4d6f65d1756b9ae577f329c951cda23fb900e4de9f70900ced962085/setuptools-82.0.0.tar.gz", hash = "sha256:22e0a2d69474c6ae4feb01951cb69d515ed23728cf96d05513d36e42b62b37cb", size = 1144893, upload-time = "2026-02-08T15:08:40.206Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e1/c6/76dc613121b793286a3f91621d7b75a2b493e0390ddca50f11993eadf192/setuptools-82.0.0-py3-none-any.whl", hash = "sha256:70b18734b607bd1da571d097d236cfcfacaf01de45717d59e6e04b96877532e0", size = 1003468, upload-time = "2026-02-08T15:08:38.723Z" }, -] - -[[package]] -name = "shapely" -version = "2.1.2" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "numpy" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/4d/bc/0989043118a27cccb4e906a46b7565ce36ca7b57f5a18b78f4f1b0f72d9d/shapely-2.1.2.tar.gz", hash = "sha256:2ed4ecb28320a433db18a5bf029986aa8afcfd740745e78847e330d5d94922a9", size = 315489, upload-time = "2025-09-24T13:51:41.432Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/24/c0/f3b6453cf2dfa99adc0ba6675f9aaff9e526d2224cbd7ff9c1a879238693/shapely-2.1.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:fe2533caae6a91a543dec62e8360fe86ffcdc42a7c55f9dfd0128a977a896b94", size = 1833550, upload-time = "2025-09-24T13:50:30.019Z" }, - { url = "https://files.pythonhosted.org/packages/86/07/59dee0bc4b913b7ab59ab1086225baca5b8f19865e6101db9ebb7243e132/shapely-2.1.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ba4d1333cc0bc94381d6d4308d2e4e008e0bd128bdcff5573199742ee3634359", size = 1643556, upload-time = "2025-09-24T13:50:32.291Z" }, - { url = "https://files.pythonhosted.org/packages/26/29/a5397e75b435b9895cd53e165083faed5d12fd9626eadec15a83a2411f0f/shapely-2.1.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:0bd308103340030feef6c111d3eb98d50dc13feea33affc8a6f9fa549e9458a3", size = 2988308, upload-time = "2025-09-24T13:50:33.862Z" }, - { url = "https://files.pythonhosted.org/packages/b9/37/e781683abac55dde9771e086b790e554811a71ed0b2b8a1e789b7430dd44/shapely-2.1.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:1e7d4d7ad262a48bb44277ca12c7c78cb1b0f56b32c10734ec9a1d30c0b0c54b", size = 3099844, upload-time = "2025-09-24T13:50:35.459Z" }, - { url = "https://files.pythonhosted.org/packages/d8/f3/9876b64d4a5a321b9dc482c92bb6f061f2fa42131cba643c699f39317cb9/shapely-2.1.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e9eddfe513096a71896441a7c37db72da0687b34752c4e193577a145c71736fc", size = 3988842, upload-time = "2025-09-24T13:50:37.478Z" }, - { url = "https://files.pythonhosted.org/packages/d1/a0/704c7292f7014c7e74ec84eddb7b109e1fbae74a16deae9c1504b1d15565/shapely-2.1.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:980c777c612514c0cf99bc8a9de6d286f5e186dcaf9091252fcd444e5638193d", size = 4152714, upload-time = "2025-09-24T13:50:39.9Z" }, - { url = "https://files.pythonhosted.org/packages/53/46/319c9dc788884ad0785242543cdffac0e6530e4d0deb6c4862bc4143dcf3/shapely-2.1.2-cp312-cp312-win32.whl", hash = "sha256:9111274b88e4d7b54a95218e243282709b330ef52b7b86bc6aaf4f805306f454", size = 1542745, upload-time = "2025-09-24T13:50:41.414Z" }, - { url = "https://files.pythonhosted.org/packages/ec/bf/cb6c1c505cb31e818e900b9312d514f381fbfa5c4363edfce0fcc4f8c1a4/shapely-2.1.2-cp312-cp312-win_amd64.whl", hash = "sha256:743044b4cfb34f9a67205cee9279feaf60ba7d02e69febc2afc609047cb49179", size = 1722861, upload-time = "2025-09-24T13:50:43.35Z" }, - { url = "https://files.pythonhosted.org/packages/c3/90/98ef257c23c46425dc4d1d31005ad7c8d649fe423a38b917db02c30f1f5a/shapely-2.1.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:b510dda1a3672d6879beb319bc7c5fd302c6c354584690973c838f46ec3e0fa8", size = 1832644, upload-time = "2025-09-24T13:50:44.886Z" }, - { url = "https://files.pythonhosted.org/packages/6d/ab/0bee5a830d209adcd3a01f2d4b70e587cdd9fd7380d5198c064091005af8/shapely-2.1.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:8cff473e81017594d20ec55d86b54bc635544897e13a7cfc12e36909c5309a2a", size = 1642887, upload-time = "2025-09-24T13:50:46.735Z" }, - { url = "https://files.pythonhosted.org/packages/2d/5e/7d7f54ba960c13302584c73704d8c4d15404a51024631adb60b126a4ae88/shapely-2.1.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:fe7b77dc63d707c09726b7908f575fc04ff1d1ad0f3fb92aec212396bc6cfe5e", size = 2970931, upload-time = "2025-09-24T13:50:48.374Z" }, - { url = "https://files.pythonhosted.org/packages/f2/a2/83fc37e2a58090e3d2ff79175a95493c664bcd0b653dd75cb9134645a4e5/shapely-2.1.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7ed1a5bbfb386ee8332713bf7508bc24e32d24b74fc9a7b9f8529a55db9f4ee6", size = 3082855, upload-time = "2025-09-24T13:50:50.037Z" }, - { url = "https://files.pythonhosted.org/packages/44/2b/578faf235a5b09f16b5f02833c53822294d7f21b242f8e2d0cf03fb64321/shapely-2.1.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a84e0582858d841d54355246ddfcbd1fce3179f185da7470f41ce39d001ee1af", size = 3979960, upload-time = "2025-09-24T13:50:51.74Z" }, - { url = "https://files.pythonhosted.org/packages/4d/04/167f096386120f692cc4ca02f75a17b961858997a95e67a3cb6a7bbd6b53/shapely-2.1.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:dc3487447a43d42adcdf52d7ac73804f2312cbfa5d433a7d2c506dcab0033dfd", size = 4142851, upload-time = "2025-09-24T13:50:53.49Z" }, - { url = "https://files.pythonhosted.org/packages/48/74/fb402c5a6235d1c65a97348b48cdedb75fb19eca2b1d66d04969fc1c6091/shapely-2.1.2-cp313-cp313-win32.whl", hash = "sha256:9c3a3c648aedc9f99c09263b39f2d8252f199cb3ac154fadc173283d7d111350", size = 1541890, upload-time = "2025-09-24T13:50:55.337Z" }, - { url = "https://files.pythonhosted.org/packages/41/47/3647fe7ad990af60ad98b889657a976042c9988c2807cf322a9d6685f462/shapely-2.1.2-cp313-cp313-win_amd64.whl", hash = "sha256:ca2591bff6645c216695bdf1614fca9c82ea1144d4a7591a466fef64f28f0715", size = 1722151, upload-time = "2025-09-24T13:50:57.153Z" }, - { url = "https://files.pythonhosted.org/packages/3c/49/63953754faa51ffe7d8189bfbe9ca34def29f8c0e34c67cbe2a2795f269d/shapely-2.1.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:2d93d23bdd2ed9dc157b46bc2f19b7da143ca8714464249bef6771c679d5ff40", size = 1834130, upload-time = "2025-09-24T13:50:58.49Z" }, - { url = "https://files.pythonhosted.org/packages/7f/ee/dce001c1984052970ff60eb4727164892fb2d08052c575042a47f5a9e88f/shapely-2.1.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:01d0d304b25634d60bd7cf291828119ab55a3bab87dc4af1e44b07fb225f188b", size = 1642802, upload-time = "2025-09-24T13:50:59.871Z" }, - { url = "https://files.pythonhosted.org/packages/da/e7/fc4e9a19929522877fa602f705706b96e78376afb7fad09cad5b9af1553c/shapely-2.1.2-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:8d8382dd120d64b03698b7298b89611a6ea6f55ada9d39942838b79c9bc89801", size = 3018460, upload-time = "2025-09-24T13:51:02.08Z" }, - { url = "https://files.pythonhosted.org/packages/a1/18/7519a25db21847b525696883ddc8e6a0ecaa36159ea88e0fef11466384d0/shapely-2.1.2-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:19efa3611eef966e776183e338b2d7ea43569ae99ab34f8d17c2c054d3205cc0", size = 3095223, upload-time = "2025-09-24T13:51:04.472Z" }, - { url = "https://files.pythonhosted.org/packages/48/de/b59a620b1f3a129c3fecc2737104a0a7e04e79335bd3b0a1f1609744cf17/shapely-2.1.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:346ec0c1a0fcd32f57f00e4134d1200e14bf3f5ae12af87ba83ca275c502498c", size = 4030760, upload-time = "2025-09-24T13:51:06.455Z" }, - { url = "https://files.pythonhosted.org/packages/96/b3/c6655ee7232b417562bae192ae0d3ceaadb1cc0ffc2088a2ddf415456cc2/shapely-2.1.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:6305993a35989391bd3476ee538a5c9a845861462327efe00dd11a5c8c709a99", size = 4170078, upload-time = "2025-09-24T13:51:08.584Z" }, - { url = "https://files.pythonhosted.org/packages/a0/8e/605c76808d73503c9333af8f6cbe7e1354d2d238bda5f88eea36bfe0f42a/shapely-2.1.2-cp313-cp313t-win32.whl", hash = "sha256:c8876673449f3401f278c86eb33224c5764582f72b653a415d0e6672fde887bf", size = 1559178, upload-time = "2025-09-24T13:51:10.73Z" }, - { url = "https://files.pythonhosted.org/packages/36/f7/d317eb232352a1f1444d11002d477e54514a4a6045536d49d0c59783c0da/shapely-2.1.2-cp313-cp313t-win_amd64.whl", hash = "sha256:4a44bc62a10d84c11a7a3d7c1c4fe857f7477c3506e24c9062da0db0ae0c449c", size = 1739756, upload-time = "2025-09-24T13:51:12.105Z" }, - { url = "https://files.pythonhosted.org/packages/fc/c4/3ce4c2d9b6aabd27d26ec988f08cb877ba9e6e96086eff81bfea93e688c7/shapely-2.1.2-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:9a522f460d28e2bf4e12396240a5fc1518788b2fcd73535166d748399ef0c223", size = 1831290, upload-time = "2025-09-24T13:51:13.56Z" }, - { url = "https://files.pythonhosted.org/packages/17/b9/f6ab8918fc15429f79cb04afa9f9913546212d7fb5e5196132a2af46676b/shapely-2.1.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:1ff629e00818033b8d71139565527ced7d776c269a49bd78c9df84e8f852190c", size = 1641463, upload-time = "2025-09-24T13:51:14.972Z" }, - { url = "https://files.pythonhosted.org/packages/a5/57/91d59ae525ca641e7ac5551c04c9503aee6f29b92b392f31790fcb1a4358/shapely-2.1.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:f67b34271dedc3c653eba4e3d7111aa421d5be9b4c4c7d38d30907f796cb30df", size = 2970145, upload-time = "2025-09-24T13:51:16.961Z" }, - { url = "https://files.pythonhosted.org/packages/8a/cb/4948be52ee1da6927831ab59e10d4c29baa2a714f599f1f0d1bc747f5777/shapely-2.1.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:21952dc00df38a2c28375659b07a3979d22641aeb104751e769c3ee825aadecf", size = 3073806, upload-time = "2025-09-24T13:51:18.712Z" }, - { url = "https://files.pythonhosted.org/packages/03/83/f768a54af775eb41ef2e7bec8a0a0dbe7d2431c3e78c0a8bdba7ab17e446/shapely-2.1.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:1f2f33f486777456586948e333a56ae21f35ae273be99255a191f5c1fa302eb4", size = 3980803, upload-time = "2025-09-24T13:51:20.37Z" }, - { url = "https://files.pythonhosted.org/packages/9f/cb/559c7c195807c91c79d38a1f6901384a2878a76fbdf3f1048893a9b7534d/shapely-2.1.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:cf831a13e0d5a7eb519e96f58ec26e049b1fad411fc6fc23b162a7ce04d9cffc", size = 4133301, upload-time = "2025-09-24T13:51:21.887Z" }, - { url = "https://files.pythonhosted.org/packages/80/cd/60d5ae203241c53ef3abd2ef27c6800e21afd6c94e39db5315ea0cbafb4a/shapely-2.1.2-cp314-cp314-win32.whl", hash = "sha256:61edcd8d0d17dd99075d320a1dd39c0cb9616f7572f10ef91b4b5b00c4aeb566", size = 1583247, upload-time = "2025-09-24T13:51:23.401Z" }, - { url = "https://files.pythonhosted.org/packages/74/d4/135684f342e909330e50d31d441ace06bf83c7dc0777e11043f99167b123/shapely-2.1.2-cp314-cp314-win_amd64.whl", hash = "sha256:a444e7afccdb0999e203b976adb37ea633725333e5b119ad40b1ca291ecf311c", size = 1773019, upload-time = "2025-09-24T13:51:24.873Z" }, - { url = "https://files.pythonhosted.org/packages/a3/05/a44f3f9f695fa3ada22786dc9da33c933da1cbc4bfe876fe3a100bafe263/shapely-2.1.2-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:5ebe3f84c6112ad3d4632b1fd2290665aa75d4cef5f6c5d77c4c95b324527c6a", size = 1834137, upload-time = "2025-09-24T13:51:26.665Z" }, - { url = "https://files.pythonhosted.org/packages/52/7e/4d57db45bf314573427b0a70dfca15d912d108e6023f623947fa69f39b72/shapely-2.1.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:5860eb9f00a1d49ebb14e881f5caf6c2cf472c7fd38bd7f253bbd34f934eb076", size = 1642884, upload-time = "2025-09-24T13:51:28.029Z" }, - { url = "https://files.pythonhosted.org/packages/5a/27/4e29c0a55d6d14ad7422bf86995d7ff3f54af0eba59617eb95caf84b9680/shapely-2.1.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:b705c99c76695702656327b819c9660768ec33f5ce01fa32b2af62b56ba400a1", size = 3018320, upload-time = "2025-09-24T13:51:29.903Z" }, - { url = "https://files.pythonhosted.org/packages/9f/bb/992e6a3c463f4d29d4cd6ab8963b75b1b1040199edbd72beada4af46bde5/shapely-2.1.2-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:a1fd0ea855b2cf7c9cddaf25543e914dd75af9de08785f20ca3085f2c9ca60b0", size = 3094931, upload-time = "2025-09-24T13:51:32.699Z" }, - { url = "https://files.pythonhosted.org/packages/9c/16/82e65e21070e473f0ed6451224ed9fa0be85033d17e0c6e7213a12f59d12/shapely-2.1.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:df90e2db118c3671a0754f38e36802db75fe0920d211a27481daf50a711fdf26", size = 4030406, upload-time = "2025-09-24T13:51:34.189Z" }, - { url = "https://files.pythonhosted.org/packages/7c/75/c24ed871c576d7e2b64b04b1fe3d075157f6eb54e59670d3f5ffb36e25c7/shapely-2.1.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:361b6d45030b4ac64ddd0a26046906c8202eb60d0f9f53085f5179f1d23021a0", size = 4169511, upload-time = "2025-09-24T13:51:36.297Z" }, - { url = "https://files.pythonhosted.org/packages/b1/f7/b3d1d6d18ebf55236eec1c681ce5e665742aab3c0b7b232720a7d43df7b6/shapely-2.1.2-cp314-cp314t-win32.whl", hash = "sha256:b54df60f1fbdecc8ebc2c5b11870461a6417b3d617f555e5033f1505d36e5735", size = 1602607, upload-time = "2025-09-24T13:51:37.757Z" }, - { url = "https://files.pythonhosted.org/packages/9a/f6/f09272a71976dfc138129b8faf435d064a811ae2f708cb147dccdf7aacdb/shapely-2.1.2-cp314-cp314t-win_amd64.whl", hash = "sha256:0036ac886e0923417932c2e6369b6c52e38e0ff5d9120b90eef5cd9a5fc5cae9", size = 1796682, upload-time = "2025-09-24T13:51:39.233Z" }, -] - -[[package]] -name = "shellingham" -version = "1.5.4" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/58/15/8b3609fd3830ef7b27b655beb4b4e9c62313a4e8da8c676e142cc210d58e/shellingham-1.5.4.tar.gz", hash = "sha256:8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de", size = 10310, upload-time = "2023-10-24T04:13:40.426Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl", hash = "sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686", size = 9755, upload-time = "2023-10-24T04:13:38.866Z" }, -] - -[[package]] -name = "six" -version = "1.17.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/94/e7/b2c673351809dca68a0e064b6af791aa332cf192da575fd474ed7d6f16a2/six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81", size = 34031, upload-time = "2024-12-04T17:35:28.174Z" } -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.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/44/cd/a040c4b3119bbe532e5b0732286f805445375489fceaec1f48306068ee3b/smmap-5.0.2.tar.gz", hash = "sha256:26ea65a03958fa0c8a1c7e8c7a58fdc77221b8910f6be2131affade476898ad5", size = 22329, upload-time = "2025-01-02T07:14:40.909Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/04/be/d09147ad1ec7934636ad912901c5fd7667e1c858e19d355237db0d0cd5e4/smmap-5.0.2-py3-none-any.whl", hash = "sha256:b30115f0def7d7531d22a0fb6502488d879e75b260a9db4d0819cfb25403af5e", size = 24303, upload-time = "2025-01-02T07:14:38.724Z" }, -] - -[[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 = "soupsieve" -version = "2.8.3" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/7b/ae/2d9c981590ed9999a0d91755b47fc74f74de286b0f5cee14c9269041e6c4/soupsieve-2.8.3.tar.gz", hash = "sha256:3267f1eeea4251fb42728b6dfb746edc9acaffc4a45b27e19450b676586e8349", size = 118627, upload-time = "2026-01-20T04:27:02.457Z" } -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 = "streamlit" -version = "1.55.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "altair" }, - { name = "blinker" }, - { name = "cachetools" }, - { name = "click" }, - { name = "gitpython" }, - { name = "numpy" }, - { name = "packaging" }, - { name = "pandas" }, - { name = "pillow" }, - { name = "protobuf" }, - { name = "pyarrow" }, - { name = "pydeck" }, - { name = "requests" }, - { name = "tenacity" }, - { name = "toml" }, - { name = "tornado" }, - { name = "typing-extensions" }, - { name = "watchdog", marker = "sys_platform != 'darwin'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/92/8e/f2b8b4fa8ba65aae251170c54f8ce198fb588fc348301c2b624f8c63efac/streamlit-1.55.0.tar.gz", hash = "sha256:015e512bbd02d000f4047e51118dc086b70e7d9c46b4a11a33c2509731379626", size = 8612008, upload-time = "2026-03-03T22:26:02.149Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/dc/e6/412c1e1f200ca8c32ecf10201839183e261ad61ced3ede34a66f6d4be3cf/streamlit-1.55.0-py3-none-any.whl", hash = "sha256:1e4a16449c6131696180f4ddb40ea8c51834e89c2a43e1b0362bc9b1cfd9b415", size = 9075714, upload-time = "2026-03-03T22:25:59.126Z" }, -] - -[[package]] -name = "sympy" -version = "1.14.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "mpmath" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/83/d3/803453b36afefb7c2bb238361cd4ae6125a569b4db67cd9e79846ba2d68c/sympy-1.14.0.tar.gz", hash = "sha256:d3d3fe8df1e5a0b42f0e7bdf50541697dbe7d23746e894990c030e2b05e72517", size = 7793921, upload-time = "2025-04-27T18:05:01.611Z" } -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 = "tabulate" -version = "0.9.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ec/fe/802052aecb21e3797b8f7902564ab6ea0d60ff8ca23952079064155d1ae1/tabulate-0.9.0.tar.gz", hash = "sha256:0095b12bf5966de529c0feb1fa08671671b3368eec77d7ef7ab114be2c068b3c", size = 81090, upload-time = "2022-10-06T17:21:48.54Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/40/44/4a5f08c96eb108af5cb50b41f76142f0afa346dfa99d5296fe7202a11854/tabulate-0.9.0-py3-none-any.whl", hash = "sha256:024ca478df22e9340661486f85298cff5f6dcdba14f3813e8830015b9ed1948f", size = 35252, upload-time = "2022-10-06T17:21:44.262Z" }, -] - -[[package]] -name = "tenacity" -version = "9.1.4" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/47/c6/ee486fd809e357697ee8a44d3d69222b344920433d3b6666ccd9b374630c/tenacity-9.1.4.tar.gz", hash = "sha256:adb31d4c263f2bd041081ab33b498309a57c77f9acf2db65aadf0898179cf93a", size = 49413, upload-time = "2026-02-07T10:45:33.841Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/d7/c1/eb8f9debc45d3b7918a32ab756658a0904732f75e555402972246b0b8e71/tenacity-9.1.4-py3-none-any.whl", hash = "sha256:6095a360c919085f28c6527de529e76a06ad89b23659fa881ae0649b867a9d55", size = 28926, upload-time = "2026-02-07T10:45:32.24Z" }, -] - -[[package]] -name = "threadpoolctl" -version = "3.6.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b7/4d/08c89e34946fce2aec4fbb45c9016efd5f4d7f24af8e5d93296e935631d8/threadpoolctl-3.6.0.tar.gz", hash = "sha256:8ab8b4aa3491d812b623328249fab5302a68d2d71745c8a4c719a2fcaba9f44e", size = 21274, upload-time = "2025-03-13T13:49:23.031Z" } -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 = "tokenizers" -version = "0.22.2" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "huggingface-hub" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/73/6f/f80cfef4a312e1fb34baf7d85c72d4411afde10978d4657f8cdd811d3ccc/tokenizers-0.22.2.tar.gz", hash = "sha256:473b83b915e547aa366d1eee11806deaf419e17be16310ac0a14077f1e28f917", size = 372115, upload-time = "2026-01-05T10:45:15.988Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/92/97/5dbfabf04c7e348e655e907ed27913e03db0923abb5dfdd120d7b25630e1/tokenizers-0.22.2-cp39-abi3-macosx_10_12_x86_64.whl", hash = "sha256:544dd704ae7238755d790de45ba8da072e9af3eea688f698b137915ae959281c", size = 3100275, upload-time = "2026-01-05T10:41:02.158Z" }, - { url = "https://files.pythonhosted.org/packages/2e/47/174dca0502ef88b28f1c9e06b73ce33500eedfac7a7692108aec220464e7/tokenizers-0.22.2-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:1e418a55456beedca4621dbab65a318981467a2b188e982a23e117f115ce5001", size = 2981472, upload-time = "2026-01-05T10:41:00.276Z" }, - { url = "https://files.pythonhosted.org/packages/d6/84/7990e799f1309a8b87af6b948f31edaa12a3ed22d11b352eaf4f4b2e5753/tokenizers-0.22.2-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2249487018adec45d6e3554c71d46eb39fa8ea67156c640f7513eb26f318cec7", size = 3290736, upload-time = "2026-01-05T10:40:32.165Z" }, - { url = "https://files.pythonhosted.org/packages/78/59/09d0d9ba94dcd5f4f1368d4858d24546b4bdc0231c2354aa31d6199f0399/tokenizers-0.22.2-cp39-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:25b85325d0815e86e0bac263506dd114578953b7b53d7de09a6485e4a160a7dd", size = 3168835, upload-time = "2026-01-05T10:40:38.847Z" }, - { url = "https://files.pythonhosted.org/packages/47/50/b3ebb4243e7160bda8d34b731e54dd8ab8b133e50775872e7a434e524c28/tokenizers-0.22.2-cp39-abi3-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bfb88f22a209ff7b40a576d5324bf8286b519d7358663db21d6246fb17eea2d5", size = 3521673, upload-time = "2026-01-05T10:40:56.614Z" }, - { url = "https://files.pythonhosted.org/packages/e0/fa/89f4cb9e08df770b57adb96f8cbb7e22695a4cb6c2bd5f0c4f0ebcf33b66/tokenizers-0.22.2-cp39-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1c774b1276f71e1ef716e5486f21e76333464f47bece56bbd554485982a9e03e", size = 3724818, upload-time = "2026-01-05T10:40:44.507Z" }, - { url = "https://files.pythonhosted.org/packages/64/04/ca2363f0bfbe3b3d36e95bf67e56a4c88c8e3362b658e616d1ac185d47f2/tokenizers-0.22.2-cp39-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:df6c4265b289083bf710dff49bc51ef252f9d5be33a45ee2bed151114a56207b", size = 3379195, upload-time = "2026-01-05T10:40:51.139Z" }, - { url = "https://files.pythonhosted.org/packages/2e/76/932be4b50ef6ccedf9d3c6639b056a967a86258c6d9200643f01269211ca/tokenizers-0.22.2-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:369cc9fc8cc10cb24143873a0d95438bb8ee257bb80c71989e3ee290e8d72c67", size = 3274982, upload-time = "2026-01-05T10:40:58.331Z" }, - { url = "https://files.pythonhosted.org/packages/1d/28/5f9f5a4cc211b69e89420980e483831bcc29dade307955cc9dc858a40f01/tokenizers-0.22.2-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:29c30b83d8dcd061078b05ae0cb94d3c710555fbb44861139f9f83dcca3dc3e4", size = 9478245, upload-time = "2026-01-05T10:41:04.053Z" }, - { url = "https://files.pythonhosted.org/packages/6c/fb/66e2da4704d6aadebf8cb39f1d6d1957df667ab24cff2326b77cda0dcb85/tokenizers-0.22.2-cp39-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:37ae80a28c1d3265bb1f22464c856bd23c02a05bb211e56d0c5301a435be6c1a", size = 9560069, upload-time = "2026-01-05T10:45:10.673Z" }, - { url = "https://files.pythonhosted.org/packages/16/04/fed398b05caa87ce9b1a1bb5166645e38196081b225059a6edaff6440fac/tokenizers-0.22.2-cp39-abi3-musllinux_1_2_i686.whl", hash = "sha256:791135ee325f2336f498590eb2f11dc5c295232f288e75c99a36c5dbce63088a", size = 9899263, upload-time = "2026-01-05T10:45:12.559Z" }, - { url = "https://files.pythonhosted.org/packages/05/a1/d62dfe7376beaaf1394917e0f8e93ee5f67fea8fcf4107501db35996586b/tokenizers-0.22.2-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:38337540fbbddff8e999d59970f3c6f35a82de10053206a7562f1ea02d046fa5", size = 10033429, upload-time = "2026-01-05T10:45:14.333Z" }, - { url = "https://files.pythonhosted.org/packages/fd/18/a545c4ea42af3df6effd7d13d250ba77a0a86fb20393143bbb9a92e434d4/tokenizers-0.22.2-cp39-abi3-win32.whl", hash = "sha256:a6bf3f88c554a2b653af81f3204491c818ae2ac6fbc09e76ef4773351292bc92", size = 2502363, upload-time = "2026-01-05T10:45:20.593Z" }, - { url = "https://files.pythonhosted.org/packages/65/71/0670843133a43d43070abeb1949abfdef12a86d490bea9cd9e18e37c5ff7/tokenizers-0.22.2-cp39-abi3-win_amd64.whl", hash = "sha256:c9ea31edff2968b44a88f97d784c2f16dc0729b8b143ed004699ebca91f05c48", size = 2747786, upload-time = "2026-01-05T10:45:18.411Z" }, - { 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 = "torch" -version = "2.10.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "cuda-bindings", marker = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, - { name = "filelock" }, - { name = "fsspec" }, - { name = "jinja2" }, - { name = "networkx" }, - { 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-nvshmem-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 = "platform_machine == 'x86_64' and sys_platform == 'linux'" }, - { name = "typing-extensions" }, -] -wheels = [ - { url = "https://files.pythonhosted.org/packages/d3/54/a2ba279afcca44bbd320d4e73675b282fcee3d81400ea1b53934efca6462/torch-2.10.0-2-cp312-none-macosx_11_0_arm64.whl", hash = "sha256:13ec4add8c3faaed8d13e0574f5cd4a323c11655546f91fbe6afa77b57423574", size = 79498202, upload-time = "2026-02-10T21:44:52.603Z" }, - { url = "https://files.pythonhosted.org/packages/ec/23/2c9fe0c9c27f7f6cb865abcea8a4568f29f00acaeadfc6a37f6801f84cb4/torch-2.10.0-2-cp313-none-macosx_11_0_arm64.whl", hash = "sha256:e521c9f030a3774ed770a9c011751fb47c4d12029a3d6522116e48431f2ff89e", size = 79498254, upload-time = "2026-02-10T21:44:44.095Z" }, - { url = "https://files.pythonhosted.org/packages/cc/af/758e242e9102e9988969b5e621d41f36b8f258bb4a099109b7a4b4b50ea4/torch-2.10.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:5fd4117d89ffd47e3dcc71e71a22efac24828ad781c7e46aaaf56bf7f2796acf", size = 145996088, upload-time = "2026-01-21T16:24:44.171Z" }, - { url = "https://files.pythonhosted.org/packages/23/8e/3c74db5e53bff7ed9e34c8123e6a8bfef718b2450c35eefab85bb4a7e270/torch-2.10.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:787124e7db3b379d4f1ed54dd12ae7c741c16a4d29b49c0226a89bea50923ffb", size = 915711952, upload-time = "2026-01-21T16:23:53.503Z" }, - { url = "https://files.pythonhosted.org/packages/6e/01/624c4324ca01f66ae4c7cd1b74eb16fb52596dce66dbe51eff95ef9e7a4c/torch-2.10.0-cp312-cp312-win_amd64.whl", hash = "sha256:2c66c61f44c5f903046cc696d088e21062644cbe541c7f1c4eaae88b2ad23547", size = 113757972, upload-time = "2026-01-21T16:24:39.516Z" }, - { url = "https://files.pythonhosted.org/packages/c9/5c/dee910b87c4d5c0fcb41b50839ae04df87c1cfc663cf1b5fca7ea565eeaa/torch-2.10.0-cp312-none-macosx_11_0_arm64.whl", hash = "sha256:6d3707a61863d1c4d6ebba7be4ca320f42b869ee657e9b2c21c736bf17000294", size = 79498198, upload-time = "2026-01-21T16:24:34.704Z" }, - { url = "https://files.pythonhosted.org/packages/c9/6f/f2e91e34e3fcba2e3fc8d8f74e7d6c22e74e480bbd1db7bc8900fdf3e95c/torch-2.10.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:5c4d217b14741e40776dd7074d9006fd28b8a97ef5654db959d8635b2fe5f29b", size = 146004247, upload-time = "2026-01-21T16:24:29.335Z" }, - { url = "https://files.pythonhosted.org/packages/98/fb/5160261aeb5e1ee12ee95fe599d0541f7c976c3701d607d8fc29e623229f/torch-2.10.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:6b71486353fce0f9714ca0c9ef1c850a2ae766b409808acd58e9678a3edb7738", size = 915716445, upload-time = "2026-01-21T16:22:45.353Z" }, - { url = "https://files.pythonhosted.org/packages/6a/16/502fb1b41e6d868e8deb5b0e3ae926bbb36dab8ceb0d1b769b266ad7b0c3/torch-2.10.0-cp313-cp313-win_amd64.whl", hash = "sha256:c2ee399c644dc92ef7bc0d4f7e74b5360c37cdbe7c5ba11318dda49ffac2bc57", size = 113757050, upload-time = "2026-01-21T16:24:19.204Z" }, - { url = "https://files.pythonhosted.org/packages/1a/0b/39929b148f4824bc3ad6f9f72a29d4ad865bcf7ebfc2fa67584773e083d2/torch-2.10.0-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:3202429f58309b9fa96a614885eace4b7995729f44beb54d3e4a47773649d382", size = 79851305, upload-time = "2026-01-21T16:24:09.209Z" }, - { url = "https://files.pythonhosted.org/packages/d8/14/21fbce63bc452381ba5f74a2c0a959fdf5ad5803ccc0c654e752e0dbe91a/torch-2.10.0-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:aae1b29cd68e50a9397f5ee897b9c24742e9e306f88a807a27d617f07adb3bd8", size = 146005472, upload-time = "2026-01-21T16:22:29.022Z" }, - { url = "https://files.pythonhosted.org/packages/54/fd/b207d1c525cb570ef47f3e9f836b154685011fce11a2f444ba8a4084d042/torch-2.10.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:6021db85958db2f07ec94e1bc77212721ba4920c12a18dc552d2ae36a3eb163f", size = 915612644, upload-time = "2026-01-21T16:21:47.019Z" }, - { url = "https://files.pythonhosted.org/packages/36/53/0197f868c75f1050b199fe58f9bf3bf3aecac9b4e85cc9c964383d745403/torch-2.10.0-cp313-cp313t-win_amd64.whl", hash = "sha256:ff43db38af76fda183156153983c9a096fc4c78d0cd1e07b14a2314c7f01c2c8", size = 113997015, upload-time = "2026-01-21T16:23:00.767Z" }, - { url = "https://files.pythonhosted.org/packages/0e/13/e76b4d9c160e89fff48bf16b449ea324bda84745d2ab30294c37c2434c0d/torch-2.10.0-cp313-none-macosx_11_0_arm64.whl", hash = "sha256:cdf2a523d699b70d613243211ecaac14fe9c5df8a0b0a9c02add60fb2a413e0f", size = 79498248, upload-time = "2026-01-21T16:23:09.315Z" }, - { url = "https://files.pythonhosted.org/packages/4f/93/716b5ac0155f1be70ed81bacc21269c3ece8dba0c249b9994094110bfc51/torch-2.10.0-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:bf0d9ff448b0218e0433aeb198805192346c4fd659c852370d5cc245f602a06a", size = 79464992, upload-time = "2026-01-21T16:23:05.162Z" }, - { url = "https://files.pythonhosted.org/packages/69/2b/51e663ff190c9d16d4a8271203b71bc73a16aa7619b9f271a69b9d4a936b/torch-2.10.0-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:233aed0659a2503b831d8a67e9da66a62c996204c0bba4f4c442ccc0c68a3f60", size = 146018567, upload-time = "2026-01-21T16:22:23.393Z" }, - { url = "https://files.pythonhosted.org/packages/5e/cd/4b95ef7f293b927c283db0b136c42be91c8ec6845c44de0238c8c23bdc80/torch-2.10.0-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:682497e16bdfa6efeec8cde66531bc8d1fbbbb4d8788ec6173c089ed3cc2bfe5", size = 915721646, upload-time = "2026-01-21T16:21:16.983Z" }, - { url = "https://files.pythonhosted.org/packages/56/97/078a007208f8056d88ae43198833469e61a0a355abc0b070edd2c085eb9a/torch-2.10.0-cp314-cp314-win_amd64.whl", hash = "sha256:6528f13d2a8593a1a412ea07a99812495bec07e9224c28b2a25c0a30c7da025c", size = 113752373, upload-time = "2026-01-21T16:22:13.471Z" }, - { url = "https://files.pythonhosted.org/packages/d8/94/71994e7d0d5238393df9732fdab607e37e2b56d26a746cb59fdb415f8966/torch-2.10.0-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:f5ab4ba32383061be0fb74bda772d470140a12c1c3b58a0cfbf3dae94d164c28", size = 79850324, upload-time = "2026-01-21T16:22:09.494Z" }, - { url = "https://files.pythonhosted.org/packages/e2/65/1a05346b418ea8ccd10360eef4b3e0ce688fba544e76edec26913a8d0ee0/torch-2.10.0-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:716b01a176c2a5659c98f6b01bf868244abdd896526f1c692712ab36dbaf9b63", size = 146006482, upload-time = "2026-01-21T16:22:18.42Z" }, - { url = "https://files.pythonhosted.org/packages/1d/b9/5f6f9d9e859fc3235f60578fa64f52c9c6e9b4327f0fe0defb6de5c0de31/torch-2.10.0-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:d8f5912ba938233f86361e891789595ff35ca4b4e2ac8fe3670895e5976731d6", size = 915613050, upload-time = "2026-01-21T16:20:49.035Z" }, - { url = "https://files.pythonhosted.org/packages/66/4d/35352043ee0eaffdeff154fad67cd4a31dbed7ff8e3be1cc4549717d6d51/torch-2.10.0-cp314-cp314t-win_amd64.whl", hash = "sha256:71283a373f0ee2c89e0f0d5f446039bdabe8dbc3c9ccf35f0f784908b0acd185", size = 113995816, upload-time = "2026-01-21T16:22:05.312Z" }, -] - -[[package]] -name = "torchvision" -version = "0.25.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "numpy" }, - { name = "pillow" }, - { name = "torch" }, -] -wheels = [ - { url = "https://files.pythonhosted.org/packages/56/3a/6ea0d73f49a9bef38a1b3a92e8dd455cea58470985d25635beab93841748/torchvision-0.25.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c2abe430c90b1d5e552680037d68da4eb80a5852ebb1c811b2b89d299b10573b", size = 1874920, upload-time = "2026-01-21T16:27:45.348Z" }, - { url = "https://files.pythonhosted.org/packages/51/f8/c0e1ef27c66e15406fece94930e7d6feee4cb6374bbc02d945a630d6426e/torchvision-0.25.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:b75deafa2dfea3e2c2a525559b04783515e3463f6e830cb71de0fb7ea36fe233", size = 2344556, upload-time = "2026-01-21T16:27:40.125Z" }, - { url = "https://files.pythonhosted.org/packages/68/2f/f24b039169db474e8688f649377de082a965fbf85daf4e46c44412f1d15a/torchvision-0.25.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:f25aa9e380865b11ea6e9d99d84df86b9cc959f1a007cd966fc6f1ab2ed0e248", size = 8072351, upload-time = "2026-01-21T16:27:21.074Z" }, - { url = "https://files.pythonhosted.org/packages/ad/16/8f650c2e288977cf0f8f85184b90ee56ed170a4919347fc74ee99286ed6f/torchvision-0.25.0-cp312-cp312-win_amd64.whl", hash = "sha256:f9c55ae8d673ab493325d1267cbd285bb94d56f99626c00ac4644de32a59ede3", size = 4303059, upload-time = "2026-01-21T16:27:11.08Z" }, - { url = "https://files.pythonhosted.org/packages/f5/5b/1562a04a6a5a4cf8cf40016a0cdeda91ede75d6962cff7f809a85ae966a5/torchvision-0.25.0-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:24e11199e4d84ba9c5ee7825ebdf1cd37ce8deec225117f10243cae984ced3ec", size = 1874918, upload-time = "2026-01-21T16:27:39.02Z" }, - { url = "https://files.pythonhosted.org/packages/36/b1/3d6c42f62c272ce34fcce609bb8939bdf873dab5f1b798fd4e880255f129/torchvision-0.25.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:5f271136d2d2c0b7a24c5671795c6e4fd8da4e0ea98aeb1041f62bc04c4370ef", size = 2309106, upload-time = "2026-01-21T16:27:30.624Z" }, - { url = "https://files.pythonhosted.org/packages/c7/60/59bb9c8b67cce356daeed4cb96a717caa4f69c9822f72e223a0eae7a9bd9/torchvision-0.25.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:855c0dc6d37f462482da7531c6788518baedca1e0847f3df42a911713acdfe52", size = 8071522, upload-time = "2026-01-21T16:27:29.392Z" }, - { url = "https://files.pythonhosted.org/packages/32/a5/9a9b1de0720f884ea50dbf9acb22cbe5312e51d7b8c4ac6ba9b51efd9bba/torchvision-0.25.0-cp313-cp313-win_amd64.whl", hash = "sha256:cef0196be31be421f6f462d1e9da1101be7332d91984caa6f8022e6c78a5877f", size = 4321911, upload-time = "2026-01-21T16:27:35.195Z" }, - { url = "https://files.pythonhosted.org/packages/52/99/dca81ed21ebaeff2b67cc9f815a20fdaa418b69f5f9ea4c6ed71721470db/torchvision-0.25.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a8f8061284395ce31bcd460f2169013382ccf411148ceb2ee38e718e9860f5a7", size = 1896209, upload-time = "2026-01-21T16:27:32.159Z" }, - { url = "https://files.pythonhosted.org/packages/28/cc/2103149761fdb4eaed58a53e8437b2d716d48f05174fab1d9fcf1e2a2244/torchvision-0.25.0-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:146d02c9876858420adf41f3189fe90e3d6a409cbfa65454c09f25fb33bf7266", size = 2310735, upload-time = "2026-01-21T16:27:22.327Z" }, - { url = "https://files.pythonhosted.org/packages/76/ad/f4c985ad52ddd3b22711c588501be1b330adaeaf6850317f66751711b78c/torchvision-0.25.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:c4d395cb2c4a2712f6eb93a34476cdf7aae74bb6ea2ea1917f858e96344b00aa", size = 8089557, upload-time = "2026-01-21T16:27:27.666Z" }, - { url = "https://files.pythonhosted.org/packages/63/cc/0ea68b5802e5e3c31f44b307e74947bad5a38cc655231d845534ed50ddb8/torchvision-0.25.0-cp313-cp313t-win_amd64.whl", hash = "sha256:5e6b449e9fa7d642142c0e27c41e5a43b508d57ed8e79b7c0a0c28652da8678c", size = 4344260, upload-time = "2026-01-21T16:27:17.018Z" }, - { url = "https://files.pythonhosted.org/packages/9e/1f/fa839532660e2602b7e704d65010787c5bb296258b44fa8b9c1cd6175e7d/torchvision-0.25.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:620a236288d594dcec7634c754484542dc0a5c1b0e0b83a34bda5e91e9b7c3a1", size = 1896193, upload-time = "2026-01-21T16:27:24.785Z" }, - { url = "https://files.pythonhosted.org/packages/80/ed/d51889da7ceaf5ff7a0574fb28f9b6b223df19667265395891f81b364ab3/torchvision-0.25.0-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:0b5e7f50002a8145a98c5694a018e738c50e2972608310c7e88e1bd4c058f6ce", size = 2309331, upload-time = "2026-01-21T16:27:19.97Z" }, - { url = "https://files.pythonhosted.org/packages/90/a5/f93fcffaddd8f12f9e812256830ec9c9ca65abbf1bc369379f9c364d1ff4/torchvision-0.25.0-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:632db02300e83793812eee4f61ae6a2686dab10b4cfd628b620dc47747aa9d03", size = 8088713, upload-time = "2026-01-21T16:27:15.281Z" }, - { url = "https://files.pythonhosted.org/packages/1f/eb/d0096eed5690d962853213f2ee00d91478dfcb586b62dbbb449fb8abc3a6/torchvision-0.25.0-cp314-cp314-win_amd64.whl", hash = "sha256:d1abd5ed030c708f5dbf4812ad5f6fbe9384b63c40d6bd79f8df41a4a759a917", size = 4325058, upload-time = "2026-01-21T16:27:26.165Z" }, - { url = "https://files.pythonhosted.org/packages/97/36/96374a4c7ab50dea9787ce987815614ccfe988a42e10ac1a2e3e5b60319a/torchvision-0.25.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:ad9a8a5877782944d99186e4502a614770fe906626d76e9cd32446a0ac3075f2", size = 1896207, upload-time = "2026-01-21T16:27:23.383Z" }, - { url = "https://files.pythonhosted.org/packages/b5/e2/7abb10a867db79b226b41da419b63b69c0bd5b82438c4a4ed50e084c552f/torchvision-0.25.0-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:40a122c3cf4d14b651f095e0f672b688dde78632783fc5cd3d4d5e4f6a828563", size = 2310741, upload-time = "2026-01-21T16:27:18.712Z" }, - { url = "https://files.pythonhosted.org/packages/08/e6/0927784e6ffc340b6676befde1c60260bd51641c9c574b9298d791a9cda4/torchvision-0.25.0-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:846890161b825b38aa85fc37fb3ba5eea74e7091ff28bab378287111483b6443", size = 8089772, upload-time = "2026-01-21T16:27:14.048Z" }, - { url = "https://files.pythonhosted.org/packages/b6/37/e7ca4ec820d434c0f23f824eb29f0676a0c3e7a118f1514f5b949c3356da/torchvision-0.25.0-cp314-cp314t-win_amd64.whl", hash = "sha256:f07f01d27375ad89d72aa2b3f2180f07da95dd9d2e4c758e015c0acb2da72977", size = 4425879, upload-time = "2026-01-21T16:27:12.579Z" }, -] - -[[package]] -name = "tornado" -version = "6.5.4" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/37/1d/0a336abf618272d53f62ebe274f712e213f5a03c0b2339575430b8362ef2/tornado-6.5.4.tar.gz", hash = "sha256:a22fa9047405d03260b483980635f0b041989d8bcc9a313f8fe18b411d84b1d7", size = 513632, upload-time = "2025-12-15T19:21:03.836Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ab/a9/e94a9d5224107d7ce3cc1fab8d5dc97f5ea351ccc6322ee4fb661da94e35/tornado-6.5.4-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:d6241c1a16b1c9e4cc28148b1cda97dd1c6cb4fb7068ac1bedc610768dff0ba9", size = 443909, upload-time = "2025-12-15T19:20:48.382Z" }, - { url = "https://files.pythonhosted.org/packages/db/7e/f7b8d8c4453f305a51f80dbb49014257bb7d28ccb4bbb8dd328ea995ecad/tornado-6.5.4-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:2d50f63dda1d2cac3ae1fa23d254e16b5e38153758470e9956cbc3d813d40843", size = 442163, upload-time = "2025-12-15T19:20:49.791Z" }, - { url = "https://files.pythonhosted.org/packages/ba/b5/206f82d51e1bfa940ba366a8d2f83904b15942c45a78dd978b599870ab44/tornado-6.5.4-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d1cf66105dc6acb5af613c054955b8137e34a03698aa53272dbda4afe252be17", size = 445746, upload-time = "2025-12-15T19:20:51.491Z" }, - { url = "https://files.pythonhosted.org/packages/8e/9d/1a3338e0bd30ada6ad4356c13a0a6c35fbc859063fa7eddb309183364ac1/tornado-6.5.4-cp39-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:50ff0a58b0dc97939d29da29cd624da010e7f804746621c78d14b80238669335", size = 445083, upload-time = "2025-12-15T19:20:52.778Z" }, - { url = "https://files.pythonhosted.org/packages/50/d4/e51d52047e7eb9a582da59f32125d17c0482d065afd5d3bc435ff2120dc5/tornado-6.5.4-cp39-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e5fb5e04efa54cf0baabdd10061eb4148e0be137166146fff835745f59ab9f7f", size = 445315, upload-time = "2025-12-15T19:20:53.996Z" }, - { url = "https://files.pythonhosted.org/packages/27/07/2273972f69ca63dbc139694a3fc4684edec3ea3f9efabf77ed32483b875c/tornado-6.5.4-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:9c86b1643b33a4cd415f8d0fe53045f913bf07b4a3ef646b735a6a86047dda84", size = 446003, upload-time = "2025-12-15T19:20:56.101Z" }, - { url = "https://files.pythonhosted.org/packages/d1/83/41c52e47502bf7260044413b6770d1a48dda2f0246f95ee1384a3cd9c44a/tornado-6.5.4-cp39-abi3-musllinux_1_2_i686.whl", hash = "sha256:6eb82872335a53dd063a4f10917b3efd28270b56a33db69009606a0312660a6f", size = 445412, upload-time = "2025-12-15T19:20:57.398Z" }, - { url = "https://files.pythonhosted.org/packages/10/c7/bc96917f06cbee182d44735d4ecde9c432e25b84f4c2086143013e7b9e52/tornado-6.5.4-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:6076d5dda368c9328ff41ab5d9dd3608e695e8225d1cd0fd1e006f05da3635a8", size = 445392, upload-time = "2025-12-15T19:20:58.692Z" }, - { url = "https://files.pythonhosted.org/packages/0c/1a/d7592328d037d36f2d2462f4bc1fbb383eec9278bc786c1b111cbbd44cfa/tornado-6.5.4-cp39-abi3-win32.whl", hash = "sha256:1768110f2411d5cd281bac0a090f707223ce77fd110424361092859e089b38d1", size = 446481, upload-time = "2025-12-15T19:21:00.008Z" }, - { url = "https://files.pythonhosted.org/packages/d6/6d/c69be695a0a64fd37a97db12355a035a6d90f79067a3cf936ec2b1dc38cd/tornado-6.5.4-cp39-abi3-win_amd64.whl", hash = "sha256:fa07d31e0cd85c60713f2b995da613588aa03e1303d75705dca6af8babc18ddc", size = 446886, upload-time = "2025-12-15T19:21:01.287Z" }, - { url = "https://files.pythonhosted.org/packages/50/49/8dc3fd90902f70084bd2cd059d576ddb4f8bb44c2c7c0e33a11422acb17e/tornado-6.5.4-cp39-abi3-win_arm64.whl", hash = "sha256:053e6e16701eb6cbe641f308f4c1a9541f91b6261991160391bfc342e8a551a1", size = 445910, upload-time = "2025-12-15T19:21:02.571Z" }, -] - -[[package]] -name = "tqdm" -version = "4.67.3" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "colorama", marker = "sys_platform == 'win32'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/09/a9/6ba95a270c6f1fbcd8dac228323f2777d886cb206987444e4bce66338dd4/tqdm-4.67.3.tar.gz", hash = "sha256:7d825f03f89244ef73f1d4ce193cb1774a8179fd96f31d7e1dcde62092b960bb", size = 169598, upload-time = "2026-02-03T17:35:53.048Z" } -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 = "transformers" -version = "4.57.6" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "filelock" }, - { name = "huggingface-hub" }, - { name = "numpy" }, - { name = "packaging" }, - { name = "pyyaml" }, - { name = "regex" }, - { name = "requests" }, - { name = "safetensors" }, - { name = "tokenizers" }, - { name = "tqdm" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/c4/35/67252acc1b929dc88b6602e8c4a982e64f31e733b804c14bc24b47da35e6/transformers-4.57.6.tar.gz", hash = "sha256:55e44126ece9dc0a291521b7e5492b572e6ef2766338a610b9ab5afbb70689d3", size = 10134912, upload-time = "2026-01-16T10:38:39.284Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/03/b8/e484ef633af3887baeeb4b6ad12743363af7cce68ae51e938e00aaa0529d/transformers-4.57.6-py3-none-any.whl", hash = "sha256:4c9e9de11333ddfe5114bc872c9f370509198acf0b87a832a0ab9458e2bd0550", size = 11993498, upload-time = "2026-01-16T10:38:31.289Z" }, -] - -[[package]] -name = "tree-sitter" -version = "0.25.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/66/7c/0350cfc47faadc0d3cf7d8237a4e34032b3014ddf4a12ded9933e1648b55/tree-sitter-0.25.2.tar.gz", hash = "sha256:fe43c158555da46723b28b52e058ad444195afd1db3ca7720c59a254544e9c20", size = 177961, upload-time = "2025-09-25T17:37:59.751Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/3c/9e/20c2a00a862f1c2897a436b17edb774e831b22218083b459d0d081c9db33/tree_sitter-0.25.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:ddabfff809ffc983fc9963455ba1cecc90295803e06e140a4c83e94c1fa3d960", size = 146941, upload-time = "2025-09-25T17:37:34.813Z" }, - { url = "https://files.pythonhosted.org/packages/ef/04/8512e2062e652a1016e840ce36ba1cc33258b0dcc4e500d8089b4054afec/tree_sitter-0.25.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c0c0ab5f94938a23fe81928a21cc0fac44143133ccc4eb7eeb1b92f84748331c", size = 137699, upload-time = "2025-09-25T17:37:36.349Z" }, - { url = "https://files.pythonhosted.org/packages/47/8a/d48c0414db19307b0fb3bb10d76a3a0cbe275bb293f145ee7fba2abd668e/tree_sitter-0.25.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:dd12d80d91d4114ca097626eb82714618dcdfacd6a5e0955216c6485c350ef99", size = 607125, upload-time = "2025-09-25T17:37:37.725Z" }, - { url = "https://files.pythonhosted.org/packages/39/d1/b95f545e9fc5001b8a78636ef942a4e4e536580caa6a99e73dd0a02e87aa/tree_sitter-0.25.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b43a9e4c89d4d0839de27cd4d6902d33396de700e9ff4c5ab7631f277a85ead9", size = 635418, upload-time = "2025-09-25T17:37:38.922Z" }, - { url = "https://files.pythonhosted.org/packages/de/4d/b734bde3fb6f3513a010fa91f1f2875442cdc0382d6a949005cd84563d8f/tree_sitter-0.25.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fbb1706407c0e451c4f8cc016fec27d72d4b211fdd3173320b1ada7a6c74c3ac", size = 631250, upload-time = "2025-09-25T17:37:40.039Z" }, - { url = "https://files.pythonhosted.org/packages/46/f2/5f654994f36d10c64d50a192239599fcae46677491c8dd53e7579c35a3e3/tree_sitter-0.25.2-cp312-cp312-win_amd64.whl", hash = "sha256:6d0302550bbe4620a5dc7649517c4409d74ef18558276ce758419cf09e578897", size = 127156, upload-time = "2025-09-25T17:37:41.132Z" }, - { url = "https://files.pythonhosted.org/packages/67/23/148c468d410efcf0a9535272d81c258d840c27b34781d625f1f627e2e27d/tree_sitter-0.25.2-cp312-cp312-win_arm64.whl", hash = "sha256:0c8b6682cac77e37cfe5cf7ec388844957f48b7bd8d6321d0ca2d852994e10d5", size = 113984, upload-time = "2025-09-25T17:37:42.074Z" }, - { url = "https://files.pythonhosted.org/packages/8c/67/67492014ce32729b63d7ef318a19f9cfedd855d677de5773476caf771e96/tree_sitter-0.25.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0628671f0de69bb279558ef6b640bcfc97864fe0026d840f872728a86cd6b6cd", size = 146926, upload-time = "2025-09-25T17:37:43.041Z" }, - { url = "https://files.pythonhosted.org/packages/4e/9c/a278b15e6b263e86c5e301c82a60923fa7c59d44f78d7a110a89a413e640/tree_sitter-0.25.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f5ddcd3e291a749b62521f71fc953f66f5fd9743973fd6dd962b092773569601", size = 137712, upload-time = "2025-09-25T17:37:44.039Z" }, - { url = "https://files.pythonhosted.org/packages/54/9a/423bba15d2bf6473ba67846ba5244b988cd97a4b1ea2b146822162256794/tree_sitter-0.25.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bd88fbb0f6c3a0f28f0a68d72df88e9755cf5215bae146f5a1bdc8362b772053", size = 607873, upload-time = "2025-09-25T17:37:45.477Z" }, - { url = "https://files.pythonhosted.org/packages/ed/4c/b430d2cb43f8badfb3a3fa9d6cd7c8247698187b5674008c9d67b2a90c8e/tree_sitter-0.25.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b878e296e63661c8e124177cc3084b041ba3f5936b43076d57c487822426f614", size = 636313, upload-time = "2025-09-25T17:37:46.68Z" }, - { url = "https://files.pythonhosted.org/packages/9d/27/5f97098dbba807331d666a0997662e82d066e84b17d92efab575d283822f/tree_sitter-0.25.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:d77605e0d353ba3fe5627e5490f0fbfe44141bafa4478d88ef7954a61a848dae", size = 631370, upload-time = "2025-09-25T17:37:47.993Z" }, - { url = "https://files.pythonhosted.org/packages/d4/3c/87caaed663fabc35e18dc704cd0e9800a0ee2f22bd18b9cbe7c10799895d/tree_sitter-0.25.2-cp313-cp313-win_amd64.whl", hash = "sha256:463c032bd02052d934daa5f45d183e0521ceb783c2548501cf034b0beba92c9b", size = 127157, upload-time = "2025-09-25T17:37:48.967Z" }, - { url = "https://files.pythonhosted.org/packages/d5/23/f8467b408b7988aff4ea40946a4bd1a2c1a73d17156a9d039bbaff1e2ceb/tree_sitter-0.25.2-cp313-cp313-win_arm64.whl", hash = "sha256:b3f63a1796886249bd22c559a5944d64d05d43f2be72961624278eff0dcc5cb8", size = 113975, upload-time = "2025-09-25T17:37:49.922Z" }, - { url = "https://files.pythonhosted.org/packages/07/e3/d9526ba71dfbbe4eba5e51d89432b4b333a49a1e70712aa5590cd22fc74f/tree_sitter-0.25.2-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:65d3c931013ea798b502782acab986bbf47ba2c452610ab0776cf4a8ef150fc0", size = 146776, upload-time = "2025-09-25T17:37:50.898Z" }, - { url = "https://files.pythonhosted.org/packages/42/97/4bd4ad97f85a23011dd8a535534bb1035c4e0bac1234d58f438e15cff51f/tree_sitter-0.25.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:bda059af9d621918efb813b22fb06b3fe00c3e94079c6143fcb2c565eb44cb87", size = 137732, upload-time = "2025-09-25T17:37:51.877Z" }, - { url = "https://files.pythonhosted.org/packages/b6/19/1e968aa0b1b567988ed522f836498a6a9529a74aab15f09dd9ac1e41f505/tree_sitter-0.25.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:eac4e8e4c7060c75f395feec46421eb61212cb73998dbe004b7384724f3682ab", size = 609456, upload-time = "2025-09-25T17:37:52.925Z" }, - { url = "https://files.pythonhosted.org/packages/48/b6/cf08f4f20f4c9094006ef8828555484e842fc468827ad6e56011ab668dbd/tree_sitter-0.25.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:260586381b23be33b6191a07cea3d44ecbd6c01aa4c6b027a0439145fcbc3358", size = 636772, upload-time = "2025-09-25T17:37:54.647Z" }, - { url = "https://files.pythonhosted.org/packages/57/e2/d42d55bf56360987c32bc7b16adb06744e425670b823fb8a5786a1cea991/tree_sitter-0.25.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:7d2ee1acbacebe50ba0f85fff1bc05e65d877958f00880f49f9b2af38dce1af0", size = 631522, upload-time = "2025-09-25T17:37:55.833Z" }, - { url = "https://files.pythonhosted.org/packages/03/87/af9604ebe275a9345d88c3ace0cf2a1341aa3f8ef49dd9fc11662132df8a/tree_sitter-0.25.2-cp314-cp314-win_amd64.whl", hash = "sha256:4973b718fcadfb04e59e746abfbb0288694159c6aeecd2add59320c03368c721", size = 130864, upload-time = "2025-09-25T17:37:57.453Z" }, - { url = "https://files.pythonhosted.org/packages/a6/6e/e64621037357acb83d912276ffd30a859ef117f9c680f2e3cb955f47c680/tree_sitter-0.25.2-cp314-cp314-win_arm64.whl", hash = "sha256:b8d4429954a3beb3e844e2872610d2a4800ba4eb42bb1990c6a4b1949b18459f", size = 117470, upload-time = "2025-09-25T17:37:58.431Z" }, -] - -[[package]] -name = "tree-sitter-c" -version = "0.24.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f1/f5/ba8cd08d717277551ade8537d3aa2a94b907c6c6e0fbcf4e4d8b1c747fa3/tree_sitter_c-0.24.1.tar.gz", hash = "sha256:7d2d0cda0b8dda428c81440c1e94367f9f13548eedca3f49768bde66b1422ad6", size = 228014, upload-time = "2025-05-24T17:32:58.384Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/15/c7/c817be36306e457c2d36cc324789046390d9d8c555c38772429ffdb7d361/tree_sitter_c-0.24.1-cp310-abi3-macosx_10_9_x86_64.whl", hash = "sha256:9c06ac26a1efdcc8b26a8a6970fbc6997c4071857359e5837d4c42892d45fe1e", size = 80940, upload-time = "2025-05-24T17:32:49.967Z" }, - { url = "https://files.pythonhosted.org/packages/7a/42/283909467290b24fdbc29bb32ee20e409a19a55002b43175d66d091ca1a4/tree_sitter_c-0.24.1-cp310-abi3-macosx_11_0_arm64.whl", hash = "sha256:942bcd7cbecd810dcf7ca6f8f834391ebf0771a89479646d891ba4ca2fdfdc88", size = 86304, upload-time = "2025-05-24T17:32:51.271Z" }, - { url = "https://files.pythonhosted.org/packages/94/53/fb4f61d4e5f15ec3da85774a4df8e58d3b5b73036cf167f0203b4dd9d158/tree_sitter_c-0.24.1-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9a74cfd7a11ca5a961fafd4d751892ee65acae667d2818968a6f079397d8d28c", size = 109996, upload-time = "2025-05-24T17:32:52.119Z" }, - { url = "https://files.pythonhosted.org/packages/5e/e8/fc541d34ee81c386c5453c2596c1763e8e9cd7cb0725f39d7dfa2276afa4/tree_sitter_c-0.24.1-cp310-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a6a807705a3978911dc7ee26a7ad36dcfacb6adfc13c190d496660ec9bd66707", size = 98137, upload-time = "2025-05-24T17:32:53.361Z" }, - { url = "https://files.pythonhosted.org/packages/32/c6/d0563319cae0d5b5780a92e2806074b24afea2a07aa4c10599b899bda3ec/tree_sitter_c-0.24.1-cp310-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:789781afcb710df34144f7e2a20cd80e325114b9119e3956c6bd1dd2d365df98", size = 94148, upload-time = "2025-05-24T17:32:54.855Z" }, - { url = "https://files.pythonhosted.org/packages/50/5a/6361df7f3fa2310c53a0d26b4702a261c332da16fa9d801e381e3a86e25f/tree_sitter_c-0.24.1-cp310-abi3-win_amd64.whl", hash = "sha256:290bff0f9c79c966496ebae45042f77543e6e4aea725f40587a8611d566231a8", size = 84703, upload-time = "2025-05-24T17:32:56.084Z" }, - { url = "https://files.pythonhosted.org/packages/22/6a/210a302e8025ac492cbaea58d3720d66b7d8034c5d747ac5e4d2d235aa25/tree_sitter_c-0.24.1-cp310-abi3-win_arm64.whl", hash = "sha256:d46bbda06f838c2dcb91daf767813671fd366b49ad84ff37db702129267b46e1", size = 82715, upload-time = "2025-05-24T17:32:57.248Z" }, -] - -[[package]] -name = "tree-sitter-javascript" -version = "0.25.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/59/e0/e63103c72a9d3dfd89a31e02e660263ad84b7438e5f44ee82e443e65bbde/tree_sitter_javascript-0.25.0.tar.gz", hash = "sha256:329b5414874f0588a98f1c291f1b28138286617aa907746ffe55adfdcf963f38", size = 132338, upload-time = "2025-09-01T07:13:44.792Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/2c/df/5106ac250cd03661ebc3cc75da6b3d9f6800a3606393a0122eca58038104/tree_sitter_javascript-0.25.0-cp310-abi3-macosx_10_9_x86_64.whl", hash = "sha256:b70f887fb269d6e58c349d683f59fa647140c410cfe2bee44a883b20ec92e3dc", size = 64052, upload-time = "2025-09-01T07:13:36.865Z" }, - { url = "https://files.pythonhosted.org/packages/b1/8f/6b4b2bc90d8ab3955856ce852cc9d1e82c81d7ab9646385f0e75ffd5b5d3/tree_sitter_javascript-0.25.0-cp310-abi3-macosx_11_0_arm64.whl", hash = "sha256:8264a996b8845cfce06965152a013b5d9cbb7d199bc3503e12b5682e62bb1de1", size = 66440, upload-time = "2025-09-01T07:13:37.962Z" }, - { url = "https://files.pythonhosted.org/packages/5f/c4/7da74ecdcd8a398f88bd003a87c65403b5fe0e958cdd43fbd5fd4a398fcf/tree_sitter_javascript-0.25.0-cp310-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:9dc04ba91fc8583344e57c1f1ed5b2c97ecaaf47480011b92fbeab8dda96db75", size = 99728, upload-time = "2025-09-01T07:13:38.755Z" }, - { url = "https://files.pythonhosted.org/packages/96/c8/97da3af4796495e46421e9344738addb3602fa6426ea695be3fcbadbee37/tree_sitter_javascript-0.25.0-cp310-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:199d09985190852e0912da2b8d26c932159be314bc04952cf917ed0e4c633e6b", size = 106072, upload-time = "2025-09-01T07:13:39.798Z" }, - { url = "https://files.pythonhosted.org/packages/13/be/c964e8130be08cc9bd6627d845f0e4460945b158429d39510953bbcb8fcc/tree_sitter_javascript-0.25.0-cp310-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:dfcf789064c58dc13c0a4edb550acacfc6f0f280577f1e7a00de3e89fc7f8ddc", size = 104388, upload-time = "2025-09-01T07:13:40.866Z" }, - { url = "https://files.pythonhosted.org/packages/ee/89/9b773dee0f8961d1bb8d7baf0a204ab587618df19897c1ef260916f318ec/tree_sitter_javascript-0.25.0-cp310-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:1b852d3aee8a36186dbcc32c798b11b4869f9b5041743b63b65c2ef793db7a54", size = 98377, upload-time = "2025-09-01T07:13:41.838Z" }, - { url = "https://files.pythonhosted.org/packages/3b/dc/d90cb1790f8cec9b4878d278ad9faf7c8f893189ce0f855304fd704fc274/tree_sitter_javascript-0.25.0-cp310-abi3-win_amd64.whl", hash = "sha256:e5ed840f5bd4a3f0272e441d19429b26eedc257abe5574c8546da6b556865e3c", size = 62975, upload-time = "2025-09-01T07:13:42.828Z" }, - { url = "https://files.pythonhosted.org/packages/2e/1f/f9eba1038b7d4394410f3c0a6ec2122b590cd7acb03f196e52fa57ebbe72/tree_sitter_javascript-0.25.0-cp310-abi3-win_arm64.whl", hash = "sha256:622a69d677aa7f6ee2931d8c77c981a33f0ebb6d275aa9d43d3397c879a9bb0b", size = 61668, upload-time = "2025-09-01T07:13:43.803Z" }, -] - -[[package]] -name = "tree-sitter-python" -version = "0.25.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b8/8b/c992ff0e768cb6768d5c96234579bf8842b3a633db641455d86dd30d5dac/tree_sitter_python-0.25.0.tar.gz", hash = "sha256:b13e090f725f5b9c86aa455a268553c65cadf325471ad5b65cd29cac8a1a68ac", size = 159845, upload-time = "2025-09-11T06:47:58.159Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/cf/64/a4e503c78a4eb3ac46d8e72a29c1b1237fa85238d8e972b063e0751f5a94/tree_sitter_python-0.25.0-cp310-abi3-macosx_10_9_x86_64.whl", hash = "sha256:14a79a47ddef72f987d5a2c122d148a812169d7484ff5c75a3db9609d419f361", size = 73790, upload-time = "2025-09-11T06:47:47.652Z" }, - { url = "https://files.pythonhosted.org/packages/e6/1d/60d8c2a0cc63d6ec4ba4e99ce61b802d2e39ef9db799bdf2a8f932a6cd4b/tree_sitter_python-0.25.0-cp310-abi3-macosx_11_0_arm64.whl", hash = "sha256:480c21dbd995b7fe44813e741d71fed10ba695e7caab627fb034e3828469d762", size = 76691, upload-time = "2025-09-11T06:47:49.038Z" }, - { url = "https://files.pythonhosted.org/packages/aa/cb/d9b0b67d037922d60cbe0359e0c86457c2da721bc714381a63e2c8e35eba/tree_sitter_python-0.25.0-cp310-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:86f118e5eecad616ecdb81d171a36dde9bef5a0b21ed71ea9c3e390813c3baf5", size = 108133, upload-time = "2025-09-11T06:47:50.499Z" }, - { url = "https://files.pythonhosted.org/packages/40/bd/bf4787f57e6b2860f3f1c8c62f045b39fb32d6bac4b53d7a9e66de968440/tree_sitter_python-0.25.0-cp310-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:be71650ca2b93b6e9649e5d65c6811aad87a7614c8c1003246b303f6b150f61b", size = 110603, upload-time = "2025-09-11T06:47:51.985Z" }, - { url = "https://files.pythonhosted.org/packages/5d/25/feff09f5c2f32484fbce15db8b49455c7572346ce61a699a41972dea7318/tree_sitter_python-0.25.0-cp310-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:e6d5b5799628cc0f24691ab2a172a8e676f668fe90dc60468bee14084a35c16d", size = 108998, upload-time = "2025-09-11T06:47:53.046Z" }, - { url = "https://files.pythonhosted.org/packages/75/69/4946da3d6c0df316ccb938316ce007fb565d08f89d02d854f2d308f0309f/tree_sitter_python-0.25.0-cp310-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:71959832fc5d9642e52c11f2f7d79ae520b461e63334927e93ca46cd61cd9683", size = 107268, upload-time = "2025-09-11T06:47:54.388Z" }, - { url = "https://files.pythonhosted.org/packages/ed/a2/996fc2dfa1076dc460d3e2f3c75974ea4b8f02f6bc925383aaae519920e8/tree_sitter_python-0.25.0-cp310-abi3-win_amd64.whl", hash = "sha256:9bcde33f18792de54ee579b00e1b4fe186b7926825444766f849bf7181793a76", size = 76073, upload-time = "2025-09-11T06:47:55.773Z" }, - { url = "https://files.pythonhosted.org/packages/07/19/4b5569d9b1ebebb5907d11554a96ef3fa09364a30fcfabeff587495b512f/tree_sitter_python-0.25.0-cp310-abi3-win_arm64.whl", hash = "sha256:0fbf6a3774ad7e89ee891851204c2e2c47e12b63a5edbe2e9156997731c128bb", size = 74169, upload-time = "2025-09-11T06:47:56.747Z" }, -] - -[[package]] -name = "tree-sitter-typescript" -version = "0.23.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/1e/fc/bb52958f7e399250aee093751e9373a6311cadbe76b6e0d109b853757f35/tree_sitter_typescript-0.23.2.tar.gz", hash = "sha256:7b167b5827c882261cb7a50dfa0fb567975f9b315e87ed87ad0a0a3aedb3834d", size = 773053, upload-time = "2024-11-11T02:36:11.396Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/28/95/4c00680866280e008e81dd621fd4d3f54aa3dad1b76b857a19da1b2cc426/tree_sitter_typescript-0.23.2-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:3cd752d70d8e5371fdac6a9a4df9d8924b63b6998d268586f7d374c9fba2a478", size = 286677, upload-time = "2024-11-11T02:35:58.839Z" }, - { url = "https://files.pythonhosted.org/packages/8f/2f/1f36fda564518d84593f2740d5905ac127d590baf5c5753cef2a88a89c15/tree_sitter_typescript-0.23.2-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:c7cc1b0ff5d91bac863b0e38b1578d5505e718156c9db577c8baea2557f66de8", size = 302008, upload-time = "2024-11-11T02:36:00.733Z" }, - { url = "https://files.pythonhosted.org/packages/96/2d/975c2dad292aa9994f982eb0b69cc6fda0223e4b6c4ea714550477d8ec3a/tree_sitter_typescript-0.23.2-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4b1eed5b0b3a8134e86126b00b743d667ec27c63fc9de1b7bb23168803879e31", size = 351987, upload-time = "2024-11-11T02:36:02.669Z" }, - { url = "https://files.pythonhosted.org/packages/49/d1/a71c36da6e2b8a4ed5e2970819b86ef13ba77ac40d9e333cb17df6a2c5db/tree_sitter_typescript-0.23.2-cp39-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e96d36b85bcacdeb8ff5c2618d75593ef12ebaf1b4eace3477e2bdb2abb1752c", size = 344960, upload-time = "2024-11-11T02:36:04.443Z" }, - { url = "https://files.pythonhosted.org/packages/7f/cb/f57b149d7beed1a85b8266d0c60ebe4c46e79c9ba56bc17b898e17daf88e/tree_sitter_typescript-0.23.2-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:8d4f0f9bcb61ad7b7509d49a1565ff2cc363863644a234e1e0fe10960e55aea0", size = 340245, upload-time = "2024-11-11T02:36:06.473Z" }, - { url = "https://files.pythonhosted.org/packages/8b/ab/dd84f0e2337296a5f09749f7b5483215d75c8fa9e33738522e5ed81f7254/tree_sitter_typescript-0.23.2-cp39-abi3-win_amd64.whl", hash = "sha256:3f730b66396bc3e11811e4465c41ee45d9e9edd6de355a58bbbc49fa770da8f9", size = 278015, upload-time = "2024-11-11T02:36:07.631Z" }, - { url = "https://files.pythonhosted.org/packages/9f/e4/81f9a935789233cf412a0ed5fe04c883841d2c8fb0b7e075958a35c65032/tree_sitter_typescript-0.23.2-cp39-abi3-win_arm64.whl", hash = "sha256:05db58f70b95ef0ea126db5560f3775692f609589ed6f8dd0af84b7f19f1cbb7", size = 274052, upload-time = "2024-11-11T02:36:09.514Z" }, -] - -[[package]] -name = "triton" -version = "3.6.0" -source = { registry = "https://pypi.org/simple" } -wheels = [ - { 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/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/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/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/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" }, -] - -[[package]] -name = "typer" -version = "0.21.2" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "annotated-doc" }, - { name = "click" }, - { name = "rich" }, - { name = "shellingham" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/f2/1e/a27cc02a0cd715118c71fa2aef2c687fdefc3c28d90fd0dd789c5118154c/typer-0.21.2.tar.gz", hash = "sha256:1abd95a3b675e17ff61b0838ac637fe9478d446d62ad17fa4bb81ea57cc54028", size = 120426, upload-time = "2026-02-10T19:33:46.182Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/b8/cc/d59f893fbdfb5f58770c05febfc4086a46875f1084453621c35605cec946/typer-0.21.2-py3-none-any.whl", hash = "sha256:c3d8de54d00347ef90b82131ca946274f017cffb46683ae3883c360fa958f55c", size = 56728, upload-time = "2026-02-10T19:33:48.01Z" }, -] - -[[package]] -name = "typing-extensions" -version = "4.15.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/72/94/1a15dd82efb362ac84269196e94cf00f187f7ed21c242792a923cdb1c61f/typing_extensions-4.15.0.tar.gz", hash = "sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466", size = 109391, upload-time = "2025-08-25T13:49:26.313Z" } -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" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/5e/a7/c202b344c5ca7daf398f3b8a477eeb205cf3b6f32e7ec3a6bac0629ca975/tzdata-2025.3.tar.gz", hash = "sha256:de39c2ca5dc7b0344f2eba86f49d614019d29f060fc4ebc8a417896a620b56a7", size = 196772, upload-time = "2025-12-13T17:45:35.667Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/c7/b0/003792df09decd6849a5e39c28b513c06e84436a54440380862b5aeff25d/tzdata-2025.3-py2.py3-none-any.whl", hash = "sha256:06a47e5700f3081aab02b2e513160914ff0694bce9947d6b76ebd6bf57cfc5d1", size = 348521, upload-time = "2025-12-13T17:45:33.889Z" }, -] - -[[package]] -name = "urllib3" -version = "2.6.3" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/c7/24/5f1b3bdffd70275f6661c76461e25f024d5a38a46f04aaca912426a2b1d3/urllib3-2.6.3.tar.gz", hash = "sha256:1b62b6884944a57dbe321509ab94fd4d3b307075e0c2eae991ac71ee15ad38ed", size = 435556, upload-time = "2026-01-07T16:24:43.925Z" } -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 = "watchdog" -version = "6.0.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/db/7d/7f3d619e951c88ed75c6037b246ddcf2d322812ee8ea189be89511721d54/watchdog-6.0.0.tar.gz", hash = "sha256:9ddf7c82fda3ae8e24decda1338ede66e1c99883db93711d8fb941eaa2d8c282", size = 131220, upload-time = "2024-11-01T14:07:13.037Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a9/c7/ca4bf3e518cb57a686b2feb4f55a1892fd9a3dd13f470fca14e00f80ea36/watchdog-6.0.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:7607498efa04a3542ae3e05e64da8202e58159aa1fa4acddf7678d34a35d4f13", size = 79079, upload-time = "2024-11-01T14:06:59.472Z" }, - { url = "https://files.pythonhosted.org/packages/5c/51/d46dc9332f9a647593c947b4b88e2381c8dfc0942d15b8edc0310fa4abb1/watchdog-6.0.0-py3-none-manylinux2014_armv7l.whl", hash = "sha256:9041567ee8953024c83343288ccc458fd0a2d811d6a0fd68c4c22609e3490379", size = 79078, upload-time = "2024-11-01T14:07:01.431Z" }, - { url = "https://files.pythonhosted.org/packages/d4/57/04edbf5e169cd318d5f07b4766fee38e825d64b6913ca157ca32d1a42267/watchdog-6.0.0-py3-none-manylinux2014_i686.whl", hash = "sha256:82dc3e3143c7e38ec49d61af98d6558288c415eac98486a5c581726e0737c00e", size = 79076, upload-time = "2024-11-01T14:07:02.568Z" }, - { url = "https://files.pythonhosted.org/packages/ab/cc/da8422b300e13cb187d2203f20b9253e91058aaf7db65b74142013478e66/watchdog-6.0.0-py3-none-manylinux2014_ppc64.whl", hash = "sha256:212ac9b8bf1161dc91bd09c048048a95ca3a4c4f5e5d4a7d1b1a7d5752a7f96f", size = 79077, upload-time = "2024-11-01T14:07:03.893Z" }, - { url = "https://files.pythonhosted.org/packages/2c/3b/b8964e04ae1a025c44ba8e4291f86e97fac443bca31de8bd98d3263d2fcf/watchdog-6.0.0-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:e3df4cbb9a450c6d49318f6d14f4bbc80d763fa587ba46ec86f99f9e6876bb26", size = 79078, upload-time = "2024-11-01T14:07:05.189Z" }, - { url = "https://files.pythonhosted.org/packages/62/ae/a696eb424bedff7407801c257d4b1afda455fe40821a2be430e173660e81/watchdog-6.0.0-py3-none-manylinux2014_s390x.whl", hash = "sha256:2cce7cfc2008eb51feb6aab51251fd79b85d9894e98ba847408f662b3395ca3c", size = 79077, upload-time = "2024-11-01T14:07:06.376Z" }, - { url = "https://files.pythonhosted.org/packages/b5/e8/dbf020b4d98251a9860752a094d09a65e1b436ad181faf929983f697048f/watchdog-6.0.0-py3-none-manylinux2014_x86_64.whl", hash = "sha256:20ffe5b202af80ab4266dcd3e91aae72bf2da48c0d33bdb15c66658e685e94e2", size = 79078, upload-time = "2024-11-01T14:07:07.547Z" }, - { url = "https://files.pythonhosted.org/packages/07/f6/d0e5b343768e8bcb4cda79f0f2f55051bf26177ecd5651f84c07567461cf/watchdog-6.0.0-py3-none-win32.whl", hash = "sha256:07df1fdd701c5d4c8e55ef6cf55b8f0120fe1aef7ef39a1c6fc6bc2e606d517a", size = 79065, upload-time = "2024-11-01T14:07:09.525Z" }, - { url = "https://files.pythonhosted.org/packages/db/d9/c495884c6e548fce18a8f40568ff120bc3a4b7b99813081c8ac0c936fa64/watchdog-6.0.0-py3-none-win_amd64.whl", hash = "sha256:cbafb470cf848d93b5d013e2ecb245d4aa1c8fd0504e863ccefa32445359d680", size = 79070, upload-time = "2024-11-01T14:07:10.686Z" }, - { url = "https://files.pythonhosted.org/packages/33/e8/e40370e6d74ddba47f002a32919d91310d6074130fe4e17dabcafc15cbf1/watchdog-6.0.0-py3-none-win_ia64.whl", hash = "sha256:a1914259fa9e1454315171103c6a30961236f508b9b623eae470268bbcc6a22f", size = 79067, upload-time = "2024-11-01T14:07:11.845Z" }, -] - -[[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/84/7b/bac442e6b96c9d25092695578dda82403c77936104b5682307bd4deb1ad4/websockets-16.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:71c989cbf3254fbd5e84d3bff31e4da39c43f884e64f2551d14bb3c186230f00", size = 177365, upload-time = "2026-01-10T09:22:46.787Z" }, - { url = "https://files.pythonhosted.org/packages/b0/fe/136ccece61bd690d9c1f715baaeefd953bb2360134de73519d5df19d29ca/websockets-16.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:8b6e209ffee39ff1b6d0fa7bfef6de950c60dfb91b8fcead17da4ee539121a79", size = 175038, upload-time = "2026-01-10T09:22:47.999Z" }, - { url = "https://files.pythonhosted.org/packages/40/1e/9771421ac2286eaab95b8575b0cb701ae3663abf8b5e1f64f1fd90d0a673/websockets-16.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:86890e837d61574c92a97496d590968b23c2ef0aeb8a9bc9421d174cd378ae39", size = 175328, upload-time = "2026-01-10T09:22:49.809Z" }, - { 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/91/d6/7d4553ad4bf1c0421e1ebd4b18de5d9098383b5caa1d937b63df8d04b565/websockets-16.0-cp312-cp312-win32.whl", hash = "sha256:eaded469f5e5b7294e2bdca0ab06becb6756ea86894a47806456089298813c89", size = 178261, upload-time = "2026-01-10T09:22:56.251Z" }, - { url = "https://files.pythonhosted.org/packages/c3/f0/f3a17365441ed1c27f850a80b2bc680a0fa9505d733fe152fdf5e98c1c0b/websockets-16.0-cp312-cp312-win_amd64.whl", hash = "sha256:5569417dc80977fc8c2d43a86f78e0a5a22fee17565d78621b6bb264a115d4ea", size = 178693, upload-time = "2026-01-10T09:22:57.478Z" }, - { url = "https://files.pythonhosted.org/packages/cc/9c/baa8456050d1c1b08dd0ec7346026668cbc6f145ab4e314d707bb845bf0d/websockets-16.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:878b336ac47938b474c8f982ac2f7266a540adc3fa4ad74ae96fea9823a02cc9", size = 177364, upload-time = "2026-01-10T09:22:59.333Z" }, - { url = "https://files.pythonhosted.org/packages/7e/0c/8811fc53e9bcff68fe7de2bcbe75116a8d959ac699a3200f4847a8925210/websockets-16.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:52a0fec0e6c8d9a784c2c78276a48a2bdf099e4ccc2a4cad53b27718dbfd0230", size = 175039, upload-time = "2026-01-10T09:23:01.171Z" }, - { url = "https://files.pythonhosted.org/packages/aa/82/39a5f910cb99ec0b59e482971238c845af9220d3ab9fa76dd9162cda9d62/websockets-16.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:e6578ed5b6981005df1860a56e3617f14a6c307e6a71b4fff8c48fdc50f3ed2c", size = 175323, upload-time = "2026-01-10T09:23:02.341Z" }, - { 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/3c/a1/3d6ccdcd125b0a42a311bcd15a7f705d688f73b2a22d8cf1c0875d35d34a/websockets-16.0-cp313-cp313-win32.whl", hash = "sha256:abf050a199613f64c886ea10f38b47770a65154dc37181bfaff70c160f45315a", size = 178255, upload-time = "2026-01-10T09:23:09.245Z" }, - { url = "https://files.pythonhosted.org/packages/6b/ae/90366304d7c2ce80f9b826096a9e9048b4bb760e44d3b873bb272cba696b/websockets-16.0-cp313-cp313-win_amd64.whl", hash = "sha256:3425ac5cf448801335d6fdc7ae1eb22072055417a96cc6b31b3861f455fbc156", size = 178689, upload-time = "2026-01-10T09:23:10.483Z" }, - { url = "https://files.pythonhosted.org/packages/f3/1d/e88022630271f5bd349ed82417136281931e558d628dd52c4d8621b4a0b2/websockets-16.0-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:8cc451a50f2aee53042ac52d2d053d08bf89bcb31ae799cb4487587661c038a0", size = 177406, upload-time = "2026-01-10T09:23:12.178Z" }, - { url = "https://files.pythonhosted.org/packages/f2/78/e63be1bf0724eeb4616efb1ae1c9044f7c3953b7957799abb5915bffd38e/websockets-16.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:daa3b6ff70a9241cf6c7fc9e949d41232d9d7d26fd3522b1ad2b4d62487e9904", size = 175085, upload-time = "2026-01-10T09:23:13.511Z" }, - { url = "https://files.pythonhosted.org/packages/bb/f4/d3c9220d818ee955ae390cf319a7c7a467beceb24f05ee7aaaa2414345ba/websockets-16.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:fd3cb4adb94a2a6e2b7c0d8d05cb94e6f1c81a0cf9dc2694fb65c7e8d94c42e4", size = 175328, upload-time = "2026-01-10T09:23:14.727Z" }, - { url = "https://files.pythonhosted.org/packages/63/bc/d3e208028de777087e6fb2b122051a6ff7bbcca0d6df9d9c2bf1dd869ae9/websockets-16.0-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:781caf5e8eee67f663126490c2f96f40906594cb86b408a703630f95550a8c3e", size = 185044, upload-time = "2026-01-10T09:23:15.939Z" }, - { url = "https://files.pythonhosted.org/packages/ad/6e/9a0927ac24bd33a0a9af834d89e0abc7cfd8e13bed17a86407a66773cc0e/websockets-16.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:caab51a72c51973ca21fa8a18bd8165e1a0183f1ac7066a182ff27107b71e1a4", size = 186279, upload-time = "2026-01-10T09:23:17.148Z" }, - { url = "https://files.pythonhosted.org/packages/b9/ca/bf1c68440d7a868180e11be653c85959502efd3a709323230314fda6e0b3/websockets-16.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:19c4dc84098e523fd63711e563077d39e90ec6702aff4b5d9e344a60cb3c0cb1", size = 185711, upload-time = "2026-01-10T09:23:18.372Z" }, - { url = "https://files.pythonhosted.org/packages/c4/f8/fdc34643a989561f217bb477cbc47a3a07212cbda91c0e4389c43c296ebf/websockets-16.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:a5e18a238a2b2249c9a9235466b90e96ae4795672598a58772dd806edc7ac6d3", size = 184982, upload-time = "2026-01-10T09:23:19.652Z" }, - { url = "https://files.pythonhosted.org/packages/dd/d1/574fa27e233764dbac9c52730d63fcf2823b16f0856b3329fc6268d6ae4f/websockets-16.0-cp314-cp314-win32.whl", hash = "sha256:a069d734c4a043182729edd3e9f247c3b2a4035415a9172fd0f1b71658a320a8", size = 177915, upload-time = "2026-01-10T09:23:21.458Z" }, - { url = "https://files.pythonhosted.org/packages/8a/f1/ae6b937bf3126b5134ce1f482365fde31a357c784ac51852978768b5eff4/websockets-16.0-cp314-cp314-win_amd64.whl", hash = "sha256:c0ee0e63f23914732c6d7e0cce24915c48f3f1512ec1d079ed01fc629dab269d", size = 178381, upload-time = "2026-01-10T09:23:22.715Z" }, - { url = "https://files.pythonhosted.org/packages/06/9b/f791d1db48403e1f0a27577a6beb37afae94254a8c6f08be4a23e4930bc0/websockets-16.0-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:a35539cacc3febb22b8f4d4a99cc79b104226a756aa7400adc722e83b0d03244", size = 177737, upload-time = "2026-01-10T09:23:24.523Z" }, - { url = "https://files.pythonhosted.org/packages/bd/40/53ad02341fa33b3ce489023f635367a4ac98b73570102ad2cdd770dacc9a/websockets-16.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:b784ca5de850f4ce93ec85d3269d24d4c82f22b7212023c974c401d4980ebc5e", size = 175268, upload-time = "2026-01-10T09:23:25.781Z" }, - { url = "https://files.pythonhosted.org/packages/74/9b/6158d4e459b984f949dcbbb0c5d270154c7618e11c01029b9bbd1bb4c4f9/websockets-16.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:569d01a4e7fba956c5ae4fc988f0d4e187900f5497ce46339c996dbf24f17641", size = 175486, upload-time = "2026-01-10T09:23:27.033Z" }, - { url = "https://files.pythonhosted.org/packages/e5/2d/7583b30208b639c8090206f95073646c2c9ffd66f44df967981a64f849ad/websockets-16.0-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:50f23cdd8343b984957e4077839841146f67a3d31ab0d00e6b824e74c5b2f6e8", size = 185331, upload-time = "2026-01-10T09:23:28.259Z" }, - { url = "https://files.pythonhosted.org/packages/45/b0/cce3784eb519b7b5ad680d14b9673a31ab8dcb7aad8b64d81709d2430aa8/websockets-16.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:152284a83a00c59b759697b7f9e9cddf4e3c7861dd0d964b472b70f78f89e80e", size = 186501, upload-time = "2026-01-10T09:23:29.449Z" }, - { url = "https://files.pythonhosted.org/packages/19/60/b8ebe4c7e89fb5f6cdf080623c9d92789a53636950f7abacfc33fe2b3135/websockets-16.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:bc59589ab64b0022385f429b94697348a6a234e8ce22544e3681b2e9331b5944", size = 186062, upload-time = "2026-01-10T09:23:31.368Z" }, - { url = "https://files.pythonhosted.org/packages/88/a8/a080593f89b0138b6cba1b28f8df5673b5506f72879322288b031337c0b8/websockets-16.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:32da954ffa2814258030e5a57bc73a3635463238e797c7375dc8091327434206", size = 185356, upload-time = "2026-01-10T09:23:32.627Z" }, - { url = "https://files.pythonhosted.org/packages/c2/b6/b9afed2afadddaf5ebb2afa801abf4b0868f42f8539bfe4b071b5266c9fe/websockets-16.0-cp314-cp314t-win32.whl", hash = "sha256:5a4b4cc550cb665dd8a47f868c8d04c8230f857363ad3c9caf7a0c3bf8c61ca6", size = 178085, upload-time = "2026-01-10T09:23:33.816Z" }, - { url = "https://files.pythonhosted.org/packages/9f/3e/28135a24e384493fa804216b79a6a6759a38cc4ff59118787b9fb693df93/websockets-16.0-cp314-cp314t-win_amd64.whl", hash = "sha256:b14dc141ed6d2dde437cddb216004bcac6a1df0935d79656387bd41632ba0bbd", size = 178531, upload-time = "2026-01-10T09:23:35.016Z" }, - { url = "https://files.pythonhosted.org/packages/6f/28/258ebab549c2bf3e64d2b0217b973467394a9cea8c42f70418ca2c5d0d2e/websockets-16.0-py3-none-any.whl", hash = "sha256:1637db62fad1dc833276dded54215f2c7fa46912301a24bd94d45d46a011ceec", size = 171598, upload-time = "2026-01-10T09:23:45.395Z" }, -] - -[[package]] -name = "xlsxwriter" -version = "3.2.9" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/46/2c/c06ef49dc36e7954e55b802a8b231770d286a9758b3d936bd1e04ce5ba88/xlsxwriter-3.2.9.tar.gz", hash = "sha256:254b1c37a368c444eac6e2f867405cc9e461b0ed97a3233b2ac1e574efb4140c", size = 215940, upload-time = "2025-09-16T00:16:21.63Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/3a/0c/3662f4a66880196a590b202f0db82d919dd2f89e99a27fadef91c4a33d41/xlsxwriter-3.2.9-py3-none-any.whl", hash = "sha256:9a5db42bc5dff014806c58a20b9eae7322a134abb6fce3c92c181bfb275ec5b3", size = 175315, upload-time = "2025-09-16T00:16:20.108Z" }, -] - -[[package]] -name = "xxhash" -version = "3.6.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/02/84/30869e01909fb37a6cc7e18688ee8bf1e42d57e7e0777636bd47524c43c7/xxhash-3.6.0.tar.gz", hash = "sha256:f0162a78b13a0d7617b2845b90c763339d1f1d82bb04a4b07f4ab535cc5e05d6", size = 85160, upload-time = "2025-10-02T14:37:08.097Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/9a/07/d9412f3d7d462347e4511181dea65e47e0d0e16e26fbee2ea86a2aefb657/xxhash-3.6.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:01362c4331775398e7bb34e3ab403bc9ee9f7c497bc7dee6272114055277dd3c", size = 32744, upload-time = "2025-10-02T14:34:34.622Z" }, - { url = "https://files.pythonhosted.org/packages/79/35/0429ee11d035fc33abe32dca1b2b69e8c18d236547b9a9b72c1929189b9a/xxhash-3.6.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b7b2df81a23f8cb99656378e72501b2cb41b1827c0f5a86f87d6b06b69f9f204", size = 30816, upload-time = "2025-10-02T14:34:36.043Z" }, - { url = "https://files.pythonhosted.org/packages/b7/f2/57eb99aa0f7d98624c0932c5b9a170e1806406cdbcdb510546634a1359e0/xxhash-3.6.0-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:dc94790144e66b14f67b10ac8ed75b39ca47536bf8800eb7c24b50271ea0c490", size = 194035, upload-time = "2025-10-02T14:34:37.354Z" }, - { url = "https://files.pythonhosted.org/packages/4c/ed/6224ba353690d73af7a3f1c7cdb1fc1b002e38f783cb991ae338e1eb3d79/xxhash-3.6.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:93f107c673bccf0d592cdba077dedaf52fe7f42dcd7676eba1f6d6f0c3efffd2", size = 212914, upload-time = "2025-10-02T14:34:38.6Z" }, - { url = "https://files.pythonhosted.org/packages/38/86/fb6b6130d8dd6b8942cc17ab4d90e223653a89aa32ad2776f8af7064ed13/xxhash-3.6.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2aa5ee3444c25b69813663c9f8067dcfaa2e126dc55e8dddf40f4d1c25d7effa", size = 212163, upload-time = "2025-10-02T14:34:39.872Z" }, - { url = "https://files.pythonhosted.org/packages/ee/dc/e84875682b0593e884ad73b2d40767b5790d417bde603cceb6878901d647/xxhash-3.6.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f7f99123f0e1194fa59cc69ad46dbae2e07becec5df50a0509a808f90a0f03f0", size = 445411, upload-time = "2025-10-02T14:34:41.569Z" }, - { url = "https://files.pythonhosted.org/packages/11/4f/426f91b96701ec2f37bb2b8cec664eff4f658a11f3fa9d94f0a887ea6d2b/xxhash-3.6.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:49e03e6fe2cac4a1bc64952dd250cf0dbc5ef4ebb7b8d96bce82e2de163c82a2", size = 193883, upload-time = "2025-10-02T14:34:43.249Z" }, - { url = "https://files.pythonhosted.org/packages/53/5a/ddbb83eee8e28b778eacfc5a85c969673e4023cdeedcfcef61f36731610b/xxhash-3.6.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:bd17fede52a17a4f9a7bc4472a5867cb0b160deeb431795c0e4abe158bc784e9", size = 210392, upload-time = "2025-10-02T14:34:45.042Z" }, - { url = "https://files.pythonhosted.org/packages/1e/c2/ff69efd07c8c074ccdf0a4f36fcdd3d27363665bcdf4ba399abebe643465/xxhash-3.6.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:6fb5f5476bef678f69db04f2bd1efbed3030d2aba305b0fc1773645f187d6a4e", size = 197898, upload-time = "2025-10-02T14:34:46.302Z" }, - { url = "https://files.pythonhosted.org/packages/58/ca/faa05ac19b3b622c7c9317ac3e23954187516298a091eb02c976d0d3dd45/xxhash-3.6.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:843b52f6d88071f87eba1631b684fcb4b2068cd2180a0224122fe4ef011a9374", size = 210655, upload-time = "2025-10-02T14:34:47.571Z" }, - { url = "https://files.pythonhosted.org/packages/d4/7a/06aa7482345480cc0cb597f5c875b11a82c3953f534394f620b0be2f700c/xxhash-3.6.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:7d14a6cfaf03b1b6f5f9790f76880601ccc7896aff7ab9cd8978a939c1eb7e0d", size = 414001, upload-time = "2025-10-02T14:34:49.273Z" }, - { url = "https://files.pythonhosted.org/packages/23/07/63ffb386cd47029aa2916b3d2f454e6cc5b9f5c5ada3790377d5430084e7/xxhash-3.6.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:418daf3db71e1413cfe211c2f9a528456936645c17f46b5204705581a45390ae", size = 191431, upload-time = "2025-10-02T14:34:50.798Z" }, - { 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" }, - { 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]] -name = "yarl" -version = "1.23.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "idna" }, - { name = "multidict" }, - { name = "propcache" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/23/6e/beb1beec874a72f23815c1434518bfc4ed2175065173fb138c3705f658d4/yarl-1.23.0.tar.gz", hash = "sha256:53b1ea6ca88ebd4420379c330aea57e258408dd0df9af0992e5de2078dc9f5d5", size = 194676, upload-time = "2026-03-01T22:07:53.373Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/88/8a/94615bc31022f711add374097ad4144d569e95ff3c38d39215d07ac153a0/yarl-1.23.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:1932b6b8bba8d0160a9d1078aae5838a66039e8832d41d2992daa9a3a08f7860", size = 124737, upload-time = "2026-03-01T22:05:12.897Z" }, - { url = "https://files.pythonhosted.org/packages/e3/6f/c6554045d59d64052698add01226bc867b52fe4a12373415d7991fdca95d/yarl-1.23.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:411225bae281f114067578891bc75534cfb3d92a3b4dfef7a6ca78ba354e6069", size = 87029, upload-time = "2026-03-01T22:05:14.376Z" }, - { url = "https://files.pythonhosted.org/packages/19/2a/725ecc166d53438bc88f76822ed4b1e3b10756e790bafd7b523fe97c322d/yarl-1.23.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:13a563739ae600a631c36ce096615fe307f131344588b0bc0daec108cdb47b25", size = 86310, upload-time = "2026-03-01T22:05:15.71Z" }, - { url = "https://files.pythonhosted.org/packages/99/30/58260ed98e6ff7f90ba84442c1ddd758c9170d70327394a6227b310cd60f/yarl-1.23.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9cbf44c5cb4a7633d078788e1b56387e3d3cf2b8139a3be38040b22d6c3221c8", size = 97587, upload-time = "2026-03-01T22:05:17.384Z" }, - { url = "https://files.pythonhosted.org/packages/76/0a/8b08aac08b50682e65759f7f8dde98ae8168f72487e7357a5d684c581ef9/yarl-1.23.0-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:53ad387048f6f09a8969631e4de3f1bf70c50e93545d64af4f751b2498755072", size = 92528, upload-time = "2026-03-01T22:05:18.804Z" }, - { url = "https://files.pythonhosted.org/packages/52/07/0b7179101fe5f8385ec6c6bb5d0cb9f76bd9fb4a769591ab6fb5cdbfc69a/yarl-1.23.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:4a59ba56f340334766f3a4442e0efd0af895fae9e2b204741ef885c446b3a1a8", size = 105339, upload-time = "2026-03-01T22:05:20.235Z" }, - { url = "https://files.pythonhosted.org/packages/d3/8a/36d82869ab5ec829ca8574dfcb92b51286fcfb1e9c7a73659616362dc880/yarl-1.23.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:803a3c3ce4acc62eaf01eaca1208dcf0783025ef27572c3336502b9c232005e7", size = 105061, upload-time = "2026-03-01T22:05:22.268Z" }, - { url = "https://files.pythonhosted.org/packages/66/3e/868e5c3364b6cee19ff3e1a122194fa4ce51def02c61023970442162859e/yarl-1.23.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a3d2bff8f37f8d0f96c7ec554d16945050d54462d6e95414babaa18bfafc7f51", size = 100132, upload-time = "2026-03-01T22:05:23.638Z" }, - { url = "https://files.pythonhosted.org/packages/cf/26/9c89acf82f08a52cb52d6d39454f8d18af15f9d386a23795389d1d423823/yarl-1.23.0-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c75eb09e8d55bceb4367e83496ff8ef2bc7ea6960efb38e978e8073ea59ecb67", size = 99289, upload-time = "2026-03-01T22:05:25.749Z" }, - { url = "https://files.pythonhosted.org/packages/6f/54/5b0db00d2cb056922356104468019c0a132e89c8d3ab67d8ede9f4483d2a/yarl-1.23.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:877b0738624280e34c55680d6054a307aa94f7d52fa0e3034a9cc6e790871da7", size = 96950, upload-time = "2026-03-01T22:05:27.318Z" }, - { url = "https://files.pythonhosted.org/packages/f6/40/10fa93811fd439341fad7e0718a86aca0de9548023bbb403668d6555acab/yarl-1.23.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:b5405bb8f0e783a988172993cfc627e4d9d00432d6bbac65a923041edacf997d", size = 93960, upload-time = "2026-03-01T22:05:28.738Z" }, - { url = "https://files.pythonhosted.org/packages/bc/d2/8ae2e6cd77d0805f4526e30ec43b6f9a3dfc542d401ac4990d178e4bf0cf/yarl-1.23.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:1c3a3598a832590c5a3ce56ab5576361b5688c12cb1d39429cf5dba30b510760", size = 104703, upload-time = "2026-03-01T22:05:30.438Z" }, - { url = "https://files.pythonhosted.org/packages/2f/0c/b3ceacf82c3fe21183ce35fa2acf5320af003d52bc1fcf5915077681142e/yarl-1.23.0-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:8419ebd326430d1cbb7efb5292330a2cf39114e82df5cc3d83c9a0d5ebeaf2f2", size = 98325, upload-time = "2026-03-01T22:05:31.835Z" }, - { url = "https://files.pythonhosted.org/packages/9d/e0/12900edd28bdab91a69bd2554b85ad7b151f64e8b521fe16f9ad2f56477a/yarl-1.23.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:be61f6fff406ca40e3b1d84716fde398fc08bc63dd96d15f3a14230a0973ed86", size = 105067, upload-time = "2026-03-01T22:05:33.358Z" }, - { url = "https://files.pythonhosted.org/packages/15/61/74bb1182cf79c9bbe4eb6b1f14a57a22d7a0be5e9cedf8e2d5c2086474c3/yarl-1.23.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3ceb13c5c858d01321b5d9bb65e4cf37a92169ea470b70fec6f236b2c9dd7e34", size = 100285, upload-time = "2026-03-01T22:05:35.4Z" }, - { url = "https://files.pythonhosted.org/packages/69/7f/cd5ef733f2550de6241bd8bd8c3febc78158b9d75f197d9c7baa113436af/yarl-1.23.0-cp312-cp312-win32.whl", hash = "sha256:fffc45637bcd6538de8b85f51e3df3223e4ad89bccbfca0481c08c7fc8b7ed7d", size = 82359, upload-time = "2026-03-01T22:05:36.811Z" }, - { url = "https://files.pythonhosted.org/packages/f5/be/25216a49daeeb7af2bec0db22d5e7df08ed1d7c9f65d78b14f3b74fd72fc/yarl-1.23.0-cp312-cp312-win_amd64.whl", hash = "sha256:f69f57305656a4852f2a7203efc661d8c042e6cc67f7acd97d8667fb448a426e", size = 87674, upload-time = "2026-03-01T22:05:38.171Z" }, - { url = "https://files.pythonhosted.org/packages/d2/35/aeab955d6c425b227d5b7247eafb24f2653fedc32f95373a001af5dfeb9e/yarl-1.23.0-cp312-cp312-win_arm64.whl", hash = "sha256:6e87a6e8735b44816e7db0b2fbc9686932df473c826b0d9743148432e10bb9b9", size = 81879, upload-time = "2026-03-01T22:05:40.006Z" }, - { url = "https://files.pythonhosted.org/packages/9a/4b/a0a6e5d0ee8a2f3a373ddef8a4097d74ac901ac363eea1440464ccbe0898/yarl-1.23.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:16c6994ac35c3e74fb0ae93323bf8b9c2a9088d55946109489667c510a7d010e", size = 123796, upload-time = "2026-03-01T22:05:41.412Z" }, - { url = "https://files.pythonhosted.org/packages/67/b6/8925d68af039b835ae876db5838e82e76ec87b9782ecc97e192b809c4831/yarl-1.23.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:4a42e651629dafb64fd5b0286a3580613702b5809ad3f24934ea87595804f2c5", size = 86547, upload-time = "2026-03-01T22:05:42.841Z" }, - { url = "https://files.pythonhosted.org/packages/ae/50/06d511cc4b8e0360d3c94af051a768e84b755c5eb031b12adaaab6dec6e5/yarl-1.23.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:7c6b9461a2a8b47c65eef63bb1c76a4f1c119618ffa99ea79bc5bb1e46c5821b", size = 85854, upload-time = "2026-03-01T22:05:44.85Z" }, - { url = "https://files.pythonhosted.org/packages/c4/f4/4e30b250927ffdab4db70da08b9b8d2194d7c7b400167b8fbeca1e4701ca/yarl-1.23.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2569b67d616eab450d262ca7cb9f9e19d2f718c70a8b88712859359d0ab17035", size = 98351, upload-time = "2026-03-01T22:05:46.836Z" }, - { url = "https://files.pythonhosted.org/packages/86/fc/4118c5671ea948208bdb1492d8b76bdf1453d3e73df051f939f563e7dcc5/yarl-1.23.0-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:e9d9a4d06d3481eab79803beb4d9bd6f6a8e781ec078ac70d7ef2dcc29d1bea5", size = 92711, upload-time = "2026-03-01T22:05:48.316Z" }, - { url = "https://files.pythonhosted.org/packages/56/11/1ed91d42bd9e73c13dc9e7eb0dd92298d75e7ac4dd7f046ad0c472e231cd/yarl-1.23.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f514f6474e04179d3d33175ed3f3e31434d3130d42ec153540d5b157deefd735", size = 106014, upload-time = "2026-03-01T22:05:50.028Z" }, - { url = "https://files.pythonhosted.org/packages/ce/c9/74e44e056a23fbc33aca71779ef450ca648a5bc472bdad7a82339918f818/yarl-1.23.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:fda207c815b253e34f7e1909840fd14299567b1c0eb4908f8c2ce01a41265401", size = 105557, upload-time = "2026-03-01T22:05:51.416Z" }, - { url = "https://files.pythonhosted.org/packages/66/fe/b1e10b08d287f518994f1e2ff9b6d26f0adeecd8dd7d533b01bab29a3eda/yarl-1.23.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:34b6cf500e61c90f305094911f9acc9c86da1a05a7a3f5be9f68817043f486e4", size = 101559, upload-time = "2026-03-01T22:05:52.872Z" }, - { url = "https://files.pythonhosted.org/packages/72/59/c5b8d94b14e3d3c2a9c20cb100119fd534ab5a14b93673ab4cc4a4141ea5/yarl-1.23.0-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:d7504f2b476d21653e4d143f44a175f7f751cd41233525312696c76aa3dbb23f", size = 100502, upload-time = "2026-03-01T22:05:54.954Z" }, - { url = "https://files.pythonhosted.org/packages/77/4f/96976cb54cbfc5c9fd73ed4c51804f92f209481d1fb190981c0f8a07a1d7/yarl-1.23.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:578110dd426f0d209d1509244e6d4a3f1a3e9077655d98c5f22583d63252a08a", size = 98027, upload-time = "2026-03-01T22:05:56.409Z" }, - { url = "https://files.pythonhosted.org/packages/63/6e/904c4f476471afdbad6b7e5b70362fb5810e35cd7466529a97322b6f5556/yarl-1.23.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:609d3614d78d74ebe35f54953c5bbd2ac647a7ddb9c30a5d877580f5e86b22f2", size = 95369, upload-time = "2026-03-01T22:05:58.141Z" }, - { url = "https://files.pythonhosted.org/packages/9d/40/acfcdb3b5f9d68ef499e39e04d25e141fe90661f9d54114556cf83be8353/yarl-1.23.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:4966242ec68afc74c122f8459abd597afd7d8a60dc93d695c1334c5fd25f762f", size = 105565, upload-time = "2026-03-01T22:06:00.286Z" }, - { url = "https://files.pythonhosted.org/packages/5e/c6/31e28f3a6ba2869c43d124f37ea5260cac9c9281df803c354b31f4dd1f3c/yarl-1.23.0-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:e0fd068364a6759bc794459f0a735ab151d11304346332489c7972bacbe9e72b", size = 99813, upload-time = "2026-03-01T22:06:01.712Z" }, - { url = "https://files.pythonhosted.org/packages/08/1f/6f65f59e72d54aa467119b63fc0b0b1762eff0232db1f4720cd89e2f4a17/yarl-1.23.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:39004f0ad156da43e86aa71f44e033de68a44e5a31fc53507b36dd253970054a", size = 105632, upload-time = "2026-03-01T22:06:03.188Z" }, - { url = "https://files.pythonhosted.org/packages/a3/c4/18b178a69935f9e7a338127d5b77d868fdc0f0e49becd286d51b3a18c61d/yarl-1.23.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e5723c01a56c5028c807c701aa66722916d2747ad737a046853f6c46f4875543", size = 101895, upload-time = "2026-03-01T22:06:04.651Z" }, - { url = "https://files.pythonhosted.org/packages/8f/54/f5b870b5505663911dba950a8e4776a0dbd51c9c54c0ae88e823e4b874a0/yarl-1.23.0-cp313-cp313-win32.whl", hash = "sha256:1b6b572edd95b4fa8df75de10b04bc81acc87c1c7d16bcdd2035b09d30acc957", size = 82356, upload-time = "2026-03-01T22:06:06.04Z" }, - { url = "https://files.pythonhosted.org/packages/7a/84/266e8da36879c6edcd37b02b547e2d9ecdfea776be49598e75696e3316e1/yarl-1.23.0-cp313-cp313-win_amd64.whl", hash = "sha256:baaf55442359053c7d62f6f8413a62adba3205119bcb6f49594894d8be47e5e3", size = 87515, upload-time = "2026-03-01T22:06:08.107Z" }, - { url = "https://files.pythonhosted.org/packages/00/fd/7e1c66efad35e1649114fa13f17485f62881ad58edeeb7f49f8c5e748bf9/yarl-1.23.0-cp313-cp313-win_arm64.whl", hash = "sha256:fb4948814a2a98e3912505f09c9e7493b1506226afb1f881825368d6fb776ee3", size = 81785, upload-time = "2026-03-01T22:06:10.181Z" }, - { url = "https://files.pythonhosted.org/packages/9c/fc/119dd07004f17ea43bb91e3ece6587759edd7519d6b086d16bfbd3319982/yarl-1.23.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:aecfed0b41aa72b7881712c65cf764e39ce2ec352324f5e0837c7048d9e6daaa", size = 130719, upload-time = "2026-03-01T22:06:11.708Z" }, - { url = "https://files.pythonhosted.org/packages/e6/0d/9f2348502fbb3af409e8f47730282cd6bc80dec6630c1e06374d882d6eb2/yarl-1.23.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:a41bcf68efd19073376eb8cf948b8d9be0af26256403e512bb18f3966f1f9120", size = 89690, upload-time = "2026-03-01T22:06:13.429Z" }, - { url = "https://files.pythonhosted.org/packages/50/93/e88f3c80971b42cfc83f50a51b9d165a1dbf154b97005f2994a79f212a07/yarl-1.23.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:cde9a2ecd91668bcb7f077c4966d8ceddb60af01b52e6e3e2680e4cf00ad1a59", size = 89851, upload-time = "2026-03-01T22:06:15.53Z" }, - { url = "https://files.pythonhosted.org/packages/1c/07/61c9dd8ba8f86473263b4036f70fb594c09e99c0d9737a799dfd8bc85651/yarl-1.23.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5023346c4ee7992febc0068e7593de5fa2bf611848c08404b35ebbb76b1b0512", size = 95874, upload-time = "2026-03-01T22:06:17.553Z" }, - { url = "https://files.pythonhosted.org/packages/9e/e9/f9ff8ceefba599eac6abddcfb0b3bee9b9e636e96dbf54342a8577252379/yarl-1.23.0-cp313-cp313t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:d1009abedb49ae95b136a8904a3f71b342f849ffeced2d3747bf29caeda218c4", size = 88710, upload-time = "2026-03-01T22:06:19.004Z" }, - { url = "https://files.pythonhosted.org/packages/eb/78/0231bfcc5d4c8eec220bc2f9ef82cb4566192ea867a7c5b4148f44f6cbcd/yarl-1.23.0-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a8d00f29b42f534cc8aa3931cfe773b13b23e561e10d2b26f27a8d309b0e82a1", size = 101033, upload-time = "2026-03-01T22:06:21.203Z" }, - { url = "https://files.pythonhosted.org/packages/cd/9b/30ea5239a61786f18fd25797151a17fbb3be176977187a48d541b5447dd4/yarl-1.23.0-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:95451e6ce06c3e104556d73b559f5da6c34a069b6b62946d3ad66afcd51642ea", size = 100817, upload-time = "2026-03-01T22:06:22.738Z" }, - { url = "https://files.pythonhosted.org/packages/62/e2/a4980481071791bc83bce2b7a1a1f7adcabfa366007518b4b845e92eeee3/yarl-1.23.0-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:531ef597132086b6cf96faa7c6c1dcd0361dd5f1694e5cc30375907b9b7d3ea9", size = 97482, upload-time = "2026-03-01T22:06:24.21Z" }, - { url = "https://files.pythonhosted.org/packages/e5/1e/304a00cf5f6100414c4b5a01fc7ff9ee724b62158a08df2f8170dfc72a2d/yarl-1.23.0-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:88f9fb0116fbfcefcab70f85cf4b74a2b6ce5d199c41345296f49d974ddb4123", size = 95949, upload-time = "2026-03-01T22:06:25.697Z" }, - { url = "https://files.pythonhosted.org/packages/68/03/093f4055ed4cae649ac53bca3d180bd37102e9e11d048588e9ab0c0108d0/yarl-1.23.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:e7b0460976dc75cb87ad9cc1f9899a4b97751e7d4e77ab840fc9b6d377b8fd24", size = 95839, upload-time = "2026-03-01T22:06:27.309Z" }, - { url = "https://files.pythonhosted.org/packages/b9/28/4c75ebb108f322aa8f917ae10a8ffa4f07cae10a8a627b64e578617df6a0/yarl-1.23.0-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:115136c4a426f9da976187d238e84139ff6b51a20839aa6e3720cd1026d768de", size = 90696, upload-time = "2026-03-01T22:06:29.048Z" }, - { url = "https://files.pythonhosted.org/packages/23/9c/42c2e2dd91c1a570402f51bdf066bfdb1241c2240ba001967bad778e77b7/yarl-1.23.0-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:ead11956716a940c1abc816b7df3fa2b84d06eaed8832ca32f5c5e058c65506b", size = 100865, upload-time = "2026-03-01T22:06:30.525Z" }, - { url = "https://files.pythonhosted.org/packages/74/05/1bcd60a8a0a914d462c305137246b6f9d167628d73568505fce3f1cb2e65/yarl-1.23.0-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:fe8f8f5e70e6dbdfca9882cd9deaac058729bcf323cf7a58660901e55c9c94f6", size = 96234, upload-time = "2026-03-01T22:06:32.692Z" }, - { url = "https://files.pythonhosted.org/packages/90/b2/f52381aac396d6778ce516b7bc149c79e65bfc068b5de2857ab69eeea3b7/yarl-1.23.0-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:a0e317df055958a0c1e79e5d2aa5a5eaa4a6d05a20d4b0c9c3f48918139c9fc6", size = 100295, upload-time = "2026-03-01T22:06:34.268Z" }, - { url = "https://files.pythonhosted.org/packages/e5/e8/638bae5bbf1113a659b2435d8895474598afe38b4a837103764f603aba56/yarl-1.23.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:6f0fd84de0c957b2d280143522c4f91a73aada1923caee763e24a2b3fda9f8a5", size = 97784, upload-time = "2026-03-01T22:06:35.864Z" }, - { url = "https://files.pythonhosted.org/packages/80/25/a3892b46182c586c202629fc2159aa13975d3741d52ebd7347fd501d48d5/yarl-1.23.0-cp313-cp313t-win32.whl", hash = "sha256:93a784271881035ab4406a172edb0faecb6e7d00f4b53dc2f55919d6c9688595", size = 88313, upload-time = "2026-03-01T22:06:37.39Z" }, - { url = "https://files.pythonhosted.org/packages/43/68/8c5b36aa5178900b37387937bc2c2fe0e9505537f713495472dcf6f6fccc/yarl-1.23.0-cp313-cp313t-win_amd64.whl", hash = "sha256:dd00607bffbf30250fe108065f07453ec124dbf223420f57f5e749b04295e090", size = 94932, upload-time = "2026-03-01T22:06:39.579Z" }, - { url = "https://files.pythonhosted.org/packages/c6/cc/d79ba8292f51f81f4dc533a8ccfb9fc6992cabf0998ed3245de7589dc07c/yarl-1.23.0-cp313-cp313t-win_arm64.whl", hash = "sha256:ac09d42f48f80c9ee1635b2fcaa819496a44502737660d3c0f2ade7526d29144", size = 84786, upload-time = "2026-03-01T22:06:41.988Z" }, - { url = "https://files.pythonhosted.org/packages/90/98/b85a038d65d1b92c3903ab89444f48d3cee490a883477b716d7a24b1a78c/yarl-1.23.0-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:21d1b7305a71a15b4794b5ff22e8eef96ff4a6d7f9657155e5aa419444b28912", size = 124455, upload-time = "2026-03-01T22:06:43.615Z" }, - { url = "https://files.pythonhosted.org/packages/39/54/bc2b45559f86543d163b6e294417a107bb87557609007c007ad889afec18/yarl-1.23.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:85610b4f27f69984932a7abbe52703688de3724d9f72bceb1cca667deff27474", size = 86752, upload-time = "2026-03-01T22:06:45.425Z" }, - { url = "https://files.pythonhosted.org/packages/24/f9/e8242b68362bffe6fb536c8db5076861466fc780f0f1b479fc4ffbebb128/yarl-1.23.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:23f371bd662cf44a7630d4d113101eafc0cfa7518a2760d20760b26021454719", size = 86291, upload-time = "2026-03-01T22:06:46.974Z" }, - { url = "https://files.pythonhosted.org/packages/ea/d8/d1cb2378c81dd729e98c716582b1ccb08357e8488e4c24714658cc6630e8/yarl-1.23.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c4a80f77dc1acaaa61f0934176fccca7096d9b1ff08c8ba9cddf5ae034a24319", size = 99026, upload-time = "2026-03-01T22:06:48.459Z" }, - { url = "https://files.pythonhosted.org/packages/0a/ff/7196790538f31debe3341283b5b0707e7feb947620fc5e8236ef28d44f72/yarl-1.23.0-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:bd654fad46d8d9e823afbb4f87c79160b5a374ed1ff5bde24e542e6ba8f41434", size = 92355, upload-time = "2026-03-01T22:06:50.306Z" }, - { url = "https://files.pythonhosted.org/packages/c1/56/25d58c3eddde825890a5fe6aa1866228377354a3c39262235234ab5f616b/yarl-1.23.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:682bae25f0a0dd23a056739f23a134db9f52a63e2afd6bfb37ddc76292bbd723", size = 106417, upload-time = "2026-03-01T22:06:52.1Z" }, - { url = "https://files.pythonhosted.org/packages/51/8a/882c0e7bc8277eb895b31bce0138f51a1ba551fc2e1ec6753ffc1e7c1377/yarl-1.23.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a82836cab5f197a0514235aaf7ffccdc886ccdaa2324bc0aafdd4ae898103039", size = 106422, upload-time = "2026-03-01T22:06:54.424Z" }, - { url = "https://files.pythonhosted.org/packages/42/2b/fef67d616931055bf3d6764885990a3ac647d68734a2d6a9e1d13de437a2/yarl-1.23.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1c57676bdedc94cd3bc37724cf6f8cd2779f02f6aba48de45feca073e714fe52", size = 101915, upload-time = "2026-03-01T22:06:55.895Z" }, - { url = "https://files.pythonhosted.org/packages/18/6a/530e16aebce27c5937920f3431c628a29a4b6b430fab3fd1c117b26ff3f6/yarl-1.23.0-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c7f8dc16c498ff06497c015642333219871effba93e4a2e8604a06264aca5c5c", size = 100690, upload-time = "2026-03-01T22:06:58.21Z" }, - { url = "https://files.pythonhosted.org/packages/88/08/93749219179a45e27b036e03260fda05190b911de8e18225c294ac95bbc9/yarl-1.23.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:5ee586fb17ff8f90c91cf73c6108a434b02d69925f44f5f8e0d7f2f260607eae", size = 98750, upload-time = "2026-03-01T22:06:59.794Z" }, - { url = "https://files.pythonhosted.org/packages/d9/cf/ea424a004969f5d81a362110a6ac1496d79efdc6d50c2c4b2e3ea0fc2519/yarl-1.23.0-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:17235362f580149742739cc3828b80e24029d08cbb9c4bda0242c7b5bc610a8e", size = 94685, upload-time = "2026-03-01T22:07:01.375Z" }, - { url = "https://files.pythonhosted.org/packages/e2/b7/14341481fe568e2b0408bcf1484c652accafe06a0ade9387b5d3fd9df446/yarl-1.23.0-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:0793e2bd0cf14234983bbb371591e6bea9e876ddf6896cdcc93450996b0b5c85", size = 106009, upload-time = "2026-03-01T22:07:03.151Z" }, - { url = "https://files.pythonhosted.org/packages/0a/e6/5c744a9b54f4e8007ad35bce96fbc9218338e84812d36f3390cea616881a/yarl-1.23.0-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:3650dc2480f94f7116c364096bc84b1d602f44224ef7d5c7208425915c0475dd", size = 100033, upload-time = "2026-03-01T22:07:04.701Z" }, - { url = "https://files.pythonhosted.org/packages/0c/23/e3bfc188d0b400f025bc49d99793d02c9abe15752138dcc27e4eaf0c4a9e/yarl-1.23.0-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:f40e782d49630ad384db66d4d8b73ff4f1b8955dc12e26b09a3e3af064b3b9d6", size = 106483, upload-time = "2026-03-01T22:07:06.231Z" }, - { url = "https://files.pythonhosted.org/packages/72/42/f0505f949a90b3f8b7a363d6cbdf398f6e6c58946d85c6d3a3bc70595b26/yarl-1.23.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:94f8575fbdf81749008d980c17796097e645574a3b8c28ee313931068dad14fe", size = 102175, upload-time = "2026-03-01T22:07:08.4Z" }, - { url = "https://files.pythonhosted.org/packages/aa/65/b39290f1d892a9dd671d1c722014ca062a9c35d60885d57e5375db0404b5/yarl-1.23.0-cp314-cp314-win32.whl", hash = "sha256:c8aa34a5c864db1087d911a0b902d60d203ea3607d91f615acd3f3108ac32169", size = 83871, upload-time = "2026-03-01T22:07:09.968Z" }, - { url = "https://files.pythonhosted.org/packages/a9/5b/9b92f54c784c26e2a422e55a8d2607ab15b7ea3349e28359282f84f01d43/yarl-1.23.0-cp314-cp314-win_amd64.whl", hash = "sha256:63e92247f383c85ab00dd0091e8c3fa331a96e865459f5ee80353c70a4a42d70", size = 89093, upload-time = "2026-03-01T22:07:11.501Z" }, - { url = "https://files.pythonhosted.org/packages/e0/7d/8a84dc9381fd4412d5e7ff04926f9865f6372b4c2fd91e10092e65d29eb8/yarl-1.23.0-cp314-cp314-win_arm64.whl", hash = "sha256:70efd20be968c76ece7baa8dafe04c5be06abc57f754d6f36f3741f7aa7a208e", size = 83384, upload-time = "2026-03-01T22:07:13.069Z" }, - { url = "https://files.pythonhosted.org/packages/dd/8d/d2fad34b1c08aa161b74394183daa7d800141aaaee207317e82c790b418d/yarl-1.23.0-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:9a18d6f9359e45722c064c97464ec883eb0e0366d33eda61cb19a244bf222679", size = 131019, upload-time = "2026-03-01T22:07:14.903Z" }, - { url = "https://files.pythonhosted.org/packages/19/ff/33009a39d3ccf4b94d7d7880dfe17fb5816c5a4fe0096d9b56abceea9ac7/yarl-1.23.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:2803ed8b21ca47a43da80a6fd1ed3019d30061f7061daa35ac54f63933409412", size = 89894, upload-time = "2026-03-01T22:07:17.372Z" }, - { url = "https://files.pythonhosted.org/packages/0c/f1/dab7ac5e7306fb79c0190766a3c00b4cb8d09a1f390ded68c85a5934faf5/yarl-1.23.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:394906945aa8b19fc14a61cf69743a868bb8c465efe85eee687109cc540b98f4", size = 89979, upload-time = "2026-03-01T22:07:19.361Z" }, - { url = "https://files.pythonhosted.org/packages/aa/b1/08e95f3caee1fad6e65017b9f26c1d79877b502622d60e517de01e72f95d/yarl-1.23.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:71d006bee8397a4a89f469b8deb22469fe7508132d3c17fa6ed871e79832691c", size = 95943, upload-time = "2026-03-01T22:07:21.266Z" }, - { url = "https://files.pythonhosted.org/packages/c0/cc/6409f9018864a6aa186c61175b977131f373f1988e198e031236916e87e4/yarl-1.23.0-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:62694e275c93d54f7ccedcfef57d42761b2aad5234b6be1f3e3026cae4001cd4", size = 88786, upload-time = "2026-03-01T22:07:23.129Z" }, - { url = "https://files.pythonhosted.org/packages/76/40/cc22d1d7714b717fde2006fad2ced5efe5580606cb059ae42117542122f3/yarl-1.23.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a31de1613658308efdb21ada98cbc86a97c181aa050ba22a808120bb5be3ab94", size = 101307, upload-time = "2026-03-01T22:07:24.689Z" }, - { url = "https://files.pythonhosted.org/packages/8f/0d/476c38e85ddb4c6ec6b20b815bdd779aa386a013f3d8b85516feee55c8dc/yarl-1.23.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:fb1e8b8d66c278b21d13b0a7ca22c41dd757a7c209c6b12c313e445c31dd3b28", size = 100904, upload-time = "2026-03-01T22:07:26.287Z" }, - { url = "https://files.pythonhosted.org/packages/72/32/0abe4a76d59adf2081dcb0397168553ece4616ada1c54d1c49d8936c74f8/yarl-1.23.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:50f9d8d531dfb767c565f348f33dd5139a6c43f5cbdf3f67da40d54241df93f6", size = 97728, upload-time = "2026-03-01T22:07:27.906Z" }, - { url = "https://files.pythonhosted.org/packages/b7/35/7b30f4810fba112f60f5a43237545867504e15b1c7647a785fbaf588fac2/yarl-1.23.0-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:575aa4405a656e61a540f4a80eaa5260f2a38fff7bfdc4b5f611840d76e9e277", size = 95964, upload-time = "2026-03-01T22:07:30.198Z" }, - { url = "https://files.pythonhosted.org/packages/2d/86/ed7a73ab85ef00e8bb70b0cb5421d8a2a625b81a333941a469a6f4022828/yarl-1.23.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:041b1a4cefacf65840b4e295c6985f334ba83c30607441ae3cf206a0eed1a2e4", size = 95882, upload-time = "2026-03-01T22:07:32.132Z" }, - { url = "https://files.pythonhosted.org/packages/19/90/d56967f61a29d8498efb7afb651e0b2b422a1e9b47b0ab5f4e40a19b699b/yarl-1.23.0-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:d38c1e8231722c4ce40d7593f28d92b5fc72f3e9774fe73d7e800ec32299f63a", size = 90797, upload-time = "2026-03-01T22:07:34.404Z" }, - { url = "https://files.pythonhosted.org/packages/72/00/8b8f76909259f56647adb1011d7ed8b321bcf97e464515c65016a47ecdf0/yarl-1.23.0-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:d53834e23c015ee83a99377db6e5e37d8484f333edb03bd15b4bc312cc7254fb", size = 101023, upload-time = "2026-03-01T22:07:35.953Z" }, - { url = "https://files.pythonhosted.org/packages/ac/e2/cab11b126fb7d440281b7df8e9ddbe4851e70a4dde47a202b6642586b8d9/yarl-1.23.0-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:2e27c8841126e017dd2a054a95771569e6070b9ee1b133366d8b31beb5018a41", size = 96227, upload-time = "2026-03-01T22:07:37.594Z" }, - { url = "https://files.pythonhosted.org/packages/c2/9b/2c893e16bfc50e6b2edf76c1a9eb6cb0c744346197e74c65e99ad8d634d0/yarl-1.23.0-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:76855800ac56f878847a09ce6dba727c93ca2d89c9e9d63002d26b916810b0a2", size = 100302, upload-time = "2026-03-01T22:07:39.334Z" }, - { url = "https://files.pythonhosted.org/packages/28/ec/5498c4e3a6d5f1003beb23405671c2eb9cdbf3067d1c80f15eeafe301010/yarl-1.23.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:e09fd068c2e169a7070d83d3bde728a4d48de0549f975290be3c108c02e499b4", size = 98202, upload-time = "2026-03-01T22:07:41.717Z" }, - { url = "https://files.pythonhosted.org/packages/fe/c3/cd737e2d45e70717907f83e146f6949f20cc23cd4bf7b2688727763aa458/yarl-1.23.0-cp314-cp314t-win32.whl", hash = "sha256:73309162a6a571d4cbd3b6a1dcc703c7311843ae0d1578df6f09be4e98df38d4", size = 90558, upload-time = "2026-03-01T22:07:43.433Z" }, - { url = "https://files.pythonhosted.org/packages/e1/19/3774d162f6732d1cfb0b47b4140a942a35ca82bb19b6db1f80e9e7bdc8f8/yarl-1.23.0-cp314-cp314t-win_amd64.whl", hash = "sha256:4503053d296bc6e4cbd1fad61cf3b6e33b939886c4f249ba7c78b602214fabe2", size = 97610, upload-time = "2026-03-01T22:07:45.773Z" }, - { url = "https://files.pythonhosted.org/packages/51/47/3fa2286c3cb162c71cdb34c4224d5745a1ceceb391b2bd9b19b668a8d724/yarl-1.23.0-cp314-cp314t-win_arm64.whl", hash = "sha256:44bb7bef4ea409384e3f8bc36c063d77ea1b8d4a5b2706956c0d6695f07dcc25", size = 86041, upload-time = "2026-03-01T22:07:49.026Z" }, - { url = "https://files.pythonhosted.org/packages/69/68/c8739671f5699c7dc470580a4f821ef37c32c4cb0b047ce223a7f115757f/yarl-1.23.0-py3-none-any.whl", hash = "sha256:a2df6afe50dea8ae15fa34c9f824a3ee958d785fd5d089063d960bae1daa0a3f", size = 48288, upload-time = "2026-03-01T22:07:51.388Z" }, -] From 0d94dd68ad816e5ca4bd891d1c1842b14ef417a4 Mon Sep 17 00:00:00 2001 From: kpuhger Date: Sat, 7 Mar 2026 22:32:29 -0800 Subject: [PATCH 8/8] docs(repo): rewrite root docs for the rebuilt app --- .gitignore | 5 ++-- README.md | 67 +++++++++++++++++++++++++++--------------------------- 2 files changed, 37 insertions(+), 35 deletions(-) diff --git a/.gitignore b/.gitignore index 8cfbf91..6907411 100644 --- a/.gitignore +++ b/.gitignore @@ -9,15 +9,16 @@ specs *.so # Python files # -/evaluation/data* -/evaluation/results* .env .venv +backend/.venv dist build *.whl *.pytest_cache __pycache__ +frontend/dist +frontend/node_modules # OS generated files # ###################### diff --git a/README.md b/README.md index da10cae..378930f 100644 --- a/README.md +++ b/README.md @@ -1,55 +1,56 @@ -