From 82fd1b8d885d08eacb49bdaf998dfc8b582182a2 Mon Sep 17 00:00:00 2001 From: Zohaib Hassnain <109234410+ZohaibHassan16@users.noreply.github.com> Date: Mon, 7 Sep 2026 16:21:57 +0500 Subject: [PATCH 01/14] docs(learning-more): fix broken pipeline and dedup snippets (#1511) * docs(learning-more): fix broken pipeline and dedup snippets * docs(learning-more): address review feedback on snippets and config defaults - Define sample tasks in concurrency snippet to avoid NameError - Define document_text in batch extraction snippet - Define sample entities in deduplication snippet - Correct GRAPH_STORE_DEFAULT_BACKEND default to neo4j - Replace ineffective SEMANTICA_PORT with SEMANTICA_API_KEY in config table --- docs/learning-more.md | 64 +++++++++++++++++++++++++++++-------------- 1 file changed, 43 insertions(+), 21 deletions(-) diff --git a/docs/learning-more.md b/docs/learning-more.md index 6f74d88c..ab49bad3 100644 --- a/docs/learning-more.md +++ b/docs/learning-more.md @@ -64,7 +64,7 @@ Whether you're running your first pipeline or deploying Semantica in production, [Temporal Graphs notebook](https://github.com/semantica-agi/semantica/blob/main/cookbook/advanced/10_Temporal_Knowledge_Graphs.ipynb): `valid_from`/`valid_until`, Allen interval algebra, point-in-time queries. - [Ontology notebook](https://github.com/semantica-agi/semantica/blob/main/cookbook/introduction/14_Ontology.ipynb): auto-generation, SHACL validation, Ontology Hub (v0.5.0). + [Ontology notebook](https://github.com/semantica-agi/semantica/blob/main/cookbook/introduction/14_Ontology.ipynb): auto-generation, SHACL validation, Ontology Hub. [Complete Visualization Suite notebook](https://github.com/semantica-agi/semantica/blob/main/cookbook/advanced/03_Complete_Visualization_Suite.ipynb): UMAP, t-SNE, community layouts, embedding projections. @@ -86,10 +86,10 @@ All settings can be overridden with environment variables: no code changes neede | OpenAI API Key | `OPENAI_API_KEY` | `None` | | Groq API Key | `GROQ_API_KEY` | `None` | | Anthropic API Key | `ANTHROPIC_API_KEY` | `None` | -| Embedding Provider | `SEMANTICA_EMBEDDING_PROVIDER` | `"openai"` | -| Graph Backend | `SEMANTICA_GRAPH_BACKEND` | `"networkx"` | -| Log Level | `SEMANTICA_LOG_LEVEL` | `"INFO"` | -| Log Format | `SEMANTICA_LOG_FORMAT` | `"text"` | +| Graph Store Backend | `GRAPH_STORE_DEFAULT_BACKEND` | `"neo4j"` | +| Vector Store Backend | `VECTOR_STORE_DEFAULT_BACKEND` | `"faiss"` | +| Server Host | `SEMANTICA_HOST` | `"127.0.0.1"` | +| Server API Key | `SEMANTICA_API_KEY` | `None` | ## Troubleshooting @@ -146,10 +146,15 @@ Also reduce batch sizes and enable streaming ingestion for large corpora. Enable parallel execution and GPU acceleration: ```python -from semantica.pipeline import Pipeline +from semantica.pipeline import ParallelismManager, Task -pipeline = Pipeline(workers=8, batch_size=32) -pipeline.run(sources) +# Run pipeline tasks concurrently across worker threads +manager = ParallelismManager(max_workers=8) +tasks = [ + Task("task_1", lambda: "process part 1"), + Task("task_2", lambda: "process part 2"), +] +results = manager.execute_parallel(tasks) ``` ```bash @@ -160,19 +165,19 @@ pip install "semantica[gpu]" # CUDA-backed embeddings -Fixed in **v0.5.0**. Upgrade: +Upgrade to the latest release: ```bash pip install --upgrade semantica ``` -Or install extras individually: `pip install "semantica[core]"`, then add `[llm-openai]`, `[gpu]`, etc. as needed. +Or install extras individually: `pip install semantica`, then add `[llm-openai]`, `[gpu]`, etc. as needed. -Fixed in **v0.5.0**. For earlier versions, set the encoding environment variable: +Set the encoding environment variable: ```bash set PYTHONIOENCODING=utf-8 @@ -202,27 +207,44 @@ Use NetworkX for local development and prototyping. Switch to a persistent backe -Process documents in batches rather than one at a time. Configure `chunk_size` based on available RAM: a good starting point is 1,000 documents per batch on a 16 GB machine. +Process documents in batches rather than one at a time. Split large texts into chunks and extract entities in batches: ```python -from semantica.pipeline import Pipeline +from semantica.split import TextSplitter +from semantica.semantic_extract import NERExtractor -pipeline = Pipeline(workers=8, batch_size=32) -pipeline.run(sources) +document_text = "Acme Corp announced record revenue in Seattle. CEO Jane Doe presented results." +splitter = TextSplitter(chunk_size=1000, chunk_overlap=100) +chunks = splitter.split(document_text) + +extractor = NERExtractor() +batch_entities = extractor.extract_entities_batch([c.text for c in chunks]) ``` -If deduplication is a bottleneck, switch from v1 strategies to the v2 engine: +If deduplication is a bottleneck, use candidate blocking to reduce O(n²) comparisons before similarity scoring: ```python -resolver = EntityResolver() -merged = resolver.resolve(entities, strategy="semantic_v2") # up to 7x faster +from semantica.deduplication import DuplicateDetector, EntityMerger + +entities = [ + {"id": "1", "name": "Acme Corp", "type": "Company"}, + {"id": "2", "name": "Acme Corporation", "type": "Company"}, + {"id": "3", "name": "Globex", "type": "Company"}, +] + +# Fast candidate blocking for large entity sets +detector = DuplicateDetector(similarity_threshold=0.8) +duplicates = detector.detect_duplicates(entities, candidate_strategy="blocking_v2") + +merger = EntityMerger() +merged = merger.merge_duplicates(entities, strategy="keep_most_complete") ``` -The `blocking_v2`, `hybrid_v2`, and `semantic_v2` strategies reduce O(n²) comparisons via candidate blocking before similarity scoring. +The `blocking_v2` and `hybrid_v2` candidate strategies filter candidate pairs before calculating fine-grained similarity. @@ -233,8 +255,8 @@ The `blocking_v2`, `hybrid_v2`, and `semantic_v2` strategies reduce O(n²) compa - **API keys**: store in environment variables or a secrets manager; never commit them to version control; rotate on a schedule - **Sensitive data**: use local embedding models (Ollama, HuggingFace) for PII or classified content; avoid sending sensitive data to external APIs without data handling agreements -- **Graph exports**: encrypt sensitive exports at rest; use the v0.5.0 SSRF-safe `base_url` validation when configuring custom LLM gateways -- **XML ingestion**: always use `XMLIngestor` (v0.5.0), which uses the XXE-safe lxml backend; never parse untrusted XML with the standard library parser +- **Graph exports**: encrypt sensitive exports at rest; use SSRF-safe `base_url` validation when configuring custom LLM gateways +- **XML ingestion**: always use `XMLIngestor`, which uses the XXE-safe lxml backend; never parse untrusted XML with the standard library parser - [Cookbook](/cookbook): interactive Jupyter notebooks from beginner to advanced. - [FAQ](/faq): common questions answered. From 0babf0d787dc88a40e04e1aaa70e5254732ddab9 Mon Sep 17 00:00:00 2001 From: BingEdward <1042653432@qq.com> Date: Mon, 7 Sep 2026 19:34:56 +0800 Subject: [PATCH 02/14] fix(cli): route JSON-mode failures to stderr as structured JSON (#1504) The global --json flag documents "machine-readable JSON to stdout; errors to stderr", but commands failing inside _run_with_error_handling() rendered a Rich error panel through the module-level Console, which writes to stdout. Any pipeline or automation parsing stdout as JSON broke on the first failure: $ semantica --json mcp call extract_entities --args '[1,2' 1>/tmp/out 2>/tmp/err exit=1 stdout_bytes=634 stderr_bytes=0 Branch in _show_error_card(), the single renderer that callers of _run_with_error_handling() route through. When JSON mode is active (global --json on the CLI context or a subcommand's local --json flag, uniformly named local_json), emit a structured {"error": ..., "type": ...} JSON line to stderr and leave stdout untouched. Exit codes and interactive Rich panels in non-JSON mode remain unchanged. Add regression tests verifying stdout remains empty and stderr produces parseable JSON under both global and local --json flag scopes. Split out of #1368 as an independent fix. --- semantica/cli.py | 21 ++++++++++++++++++++- tests/test_cli_commands.py | 24 ++++++++++++++++++++++++ 2 files changed, 44 insertions(+), 1 deletion(-) diff --git a/semantica/cli.py b/semantica/cli.py index f920e520..dd8c09b5 100644 --- a/semantica/cli.py +++ b/semantica/cli.py @@ -95,7 +95,26 @@ _ERROR_HINTS: Dict[type, str] = { } +def _json_error_mode() -> bool: + """True when this invocation promised machine-readable stdout. + + Covers both the global ``--json`` flag (stored on the CLI context) and a + subcommand's local ``--json`` flag (uniformly named ``local_json``). + """ + ctx = click.get_current_context(silent=True) + if ctx is None: + return False + if ctx.params.get("local_json"): + return True + return isinstance(ctx.obj, CLIContext) and ctx.obj.json_output + + def _show_error_card(title: str, detail: str, hint: Optional[str] = None) -> None: + if _json_error_mode(): + # --json promises machine-readable stdout with errors on stderr, so + # emit a structured error line there instead of a Rich panel. + click.echo(json.dumps({"error": detail, "type": title}), err=True) + return body = f"[bold]{title}[/bold]\n[{_DIM}]{detail}[/{_DIM}]" if hint: body += f"\n\n[{_KEY}]→[/{_KEY}] [{_DIM}]{hint}[/{_DIM}]" @@ -105,7 +124,7 @@ def _show_error_card(title: str, detail: str, hint: Optional[str] = None) -> Non def _run_with_error_handling(action: Callable[[], None]) -> None: - """Run a CLI action with Rich error cards on failure.""" + """Run a CLI action with error cards (or JSON-mode stderr errors) on failure.""" try: action() except click.ClickException as exc: diff --git a/tests/test_cli_commands.py b/tests/test_cli_commands.py index 3679fec3..c2b5f870 100644 --- a/tests/test_cli_commands.py +++ b/tests/test_cli_commands.py @@ -2114,6 +2114,30 @@ class TestMCP: assert "Traceback" not in result.output assert "Invalid JSON" in result.output + def test_call_failure_global_json_mode_keeps_stdout_clean(self, runner): + """Under global --json, stdout must stay machine-readable: failures are + emitted as structured JSON on stderr, never as a Rich panel on stdout.""" + result = runner.invoke( + cli_module.main, + ["--json", "mcp", "call", "some_tool", "--args", "{bad json}"], + ) + assert result.exit_code != 0 + assert result.stdout == "" + err = json.loads(result.stderr) + assert err["error"].startswith("Invalid JSON in --args") + assert err["type"] == "ClickException" + + def test_call_failure_local_json_mode_keeps_stdout_clean(self, runner): + """The subcommand's own --json flag promises the same stream contract.""" + result = runner.invoke( + cli_module.main, + ["mcp", "call", "some_tool", "--args", "{bad json}", "--json"], + ) + assert result.exit_code != 0 + assert result.stdout == "" + err = json.loads(result.stderr) + assert err["error"].startswith("Invalid JSON in --args") + def test_call_import_error_is_clean(self, runner): with patch("builtins.__import__", side_effect=lambda n, *a, **k: ( (_ for _ in ()).throw(ImportError(n)) From 9c38fd49e558ed8cce9c79574d50c8e7870a7886 Mon Sep 17 00:00:00 2001 From: Kevin Date: Mon, 7 Sep 2026 20:30:34 +0800 Subject: [PATCH 03/14] feat(mcp): semantic retrieval tools (store, retrieve, update, remove) (#1250) Implements four semantic retrieval tools on top of VectorStore wired into the MCP server tool registry (Closes #1235): - store_document: Chunks content with a configurable sliding window (1000/200 default) and attaches full provenance metadata to every chunk (chunk_id, source, authority, version, hash, status, offsets, and project). Re-storing identical content under the same (source, version) is a no-op keyed on content hash to skip redundant re-embedding. - retrieve_context: Embeds natural-language queries, ranks scored chunks with provenance (top_k capped at 10; project filter support), and attaches 1-hop graph relationships for hit sources from ContextGraph. - update_document: Replaces stored content for (source, version). Returns not_found if the document does not exist, and snapshots existing rows for atomic rollback if writing replacement chunks fails. - remove_document: Deletes all chunks matching (source, version) and returns not_found if the document does not exist. Architecture & Session Management: - Adds lazy session singletons get_embedder() and get_vector_store() in semantica_mcp.mcp.session. - Stores derive dimension directly from the active embedder to keep indexing and query spaces aligned. - Restricts backends to inmemory (default) and sqlite (requires SEMANTICA_VECTOR_DB_PATH); backends lacking metadata-scoped delete fail fast on startup. - In-memory updates and removals safely rebuild the store to prevent vector ID collisions (#1029). - Fails fast on startup if SEMANTICA_VECTOR_PATH is corrupt or dimension mismatched, preventing empty stores from overwriting existing corpora. Hardening & Provenance Protections: - System-owned provenance: user metadata is additive and cannot overwrite reserved identity or provenance fields. - Document size capped at 10,000 chunks to prevent stale chunk retention against persistent metadata limits. - Mutation responses return an explicit persisted flag. Includes a comprehensive test suite in tests/test_mcp_semantic_retrieval.py using a deterministic FakeEmbedder for network-free, hermetic execution. --- semantica_mcp/mcp/schemas.py | 118 ++++ semantica_mcp/mcp/session.py | 105 ++++ semantica_mcp/mcp/tools/__init__.py | 2 + semantica_mcp/mcp/tools/retrieval.py | 533 ++++++++++++++++++ tests/test_mcp_semantic_retrieval.py | 787 +++++++++++++++++++++++++++ 5 files changed, 1545 insertions(+) create mode 100644 semantica_mcp/mcp/tools/retrieval.py create mode 100644 tests/test_mcp_semantic_retrieval.py diff --git a/semantica_mcp/mcp/schemas.py b/semantica_mcp/mcp/schemas.py index 5a9f8c7c..19d7eb01 100644 --- a/semantica_mcp/mcp/schemas.py +++ b/semantica_mcp/mcp/schemas.py @@ -289,4 +289,122 @@ GET_ANALYTICS = { }, } +STORE_DOCUMENT = { + "type": "object", + "properties": { + "content": { + "type": "string", + "description": "Document text to chunk and store for semantic retrieval", + }, + "source": { + "type": "string", + "description": "Provenance identifier, e.g. 'policy_manual_v2#page12'", + }, + "authority": { + "type": "string", + "description": "Authority level of the content, e.g. 'official', 'draft', 'external'", + }, + "version": { + "type": "string", + "description": "Document version tag used together with source as the upsert key (default: 'v1')", + }, + "project": { + "type": "string", + "description": "Optional project namespace for later filtering", + }, + "metadata": { + "type": "object", + "description": "Additional key-value properties stored on every chunk", + }, + "chunk_size": { + "type": "integer", + "minimum": 100, + "description": "Chunk window in characters (default: 1000)", + }, + "chunk_overlap": { + "type": "integer", + "minimum": 0, + "description": "Overlap between consecutive chunks in characters (default: 200)", + }, + }, + "required": ["content", "source", "authority"], +} + +RETRIEVE_CONTEXT = { + "type": "object", + "properties": { + "query": { + "type": "string", + "description": "Natural language query to embed and search for", + }, + "top_k": { + "type": "integer", + "minimum": 1, + "maximum": 10, + "description": "Maximum number of chunks to return (default: 5, capped at 10)", + }, + "project": { + "type": "string", + "description": "Only return chunks stored under this project namespace (optional)", + }, + }, + "required": ["query"], +} + +UPDATE_DOCUMENT = { + "type": "object", + "properties": { + "content": { + "type": "string", + "description": "New document text replacing the stored version", + }, + "source": { + "type": "string", + "description": "Provenance identifier of the document to update", + }, + "version": { + "type": "string", + "description": "Version tag identifying which stored version to replace (default: 'v1')", + }, + "authority": { + "type": "string", + "description": "Updated authority level (defaults to the stored value)", + }, + "project": { + "type": "string", + "description": "Updated project namespace (defaults to the stored value)", + }, + "metadata": { + "type": "object", + "description": "Additional key-value properties merged into chunk metadata", + }, + "chunk_size": { + "type": "integer", + "minimum": 100, + "description": "Chunk window in characters (default: 1000)", + }, + "chunk_overlap": { + "type": "integer", + "minimum": 0, + "description": "Overlap between consecutive chunks in characters (default: 200)", + }, + }, + "required": ["content", "source"], +} + +REMOVE_DOCUMENT = { + "type": "object", + "properties": { + "source": { + "type": "string", + "description": "Provenance identifier of the document to remove", + }, + "version": { + "type": "string", + "description": "Version tag identifying which stored version to remove (default: 'v1')", + }, + }, + "required": ["source"], +} + EMPTY = {"type": "object", "properties": {}} diff --git a/semantica_mcp/mcp/session.py b/semantica_mcp/mcp/session.py index da8ec7e2..9aedc325 100644 --- a/semantica_mcp/mcp/session.py +++ b/semantica_mcp/mcp/session.py @@ -14,7 +14,15 @@ from typing import Any, Optional log = logging.getLogger("semantica.mcp.session") +# Backends the retrieval tools can actually support end to end. faiss +# and pgvector have no metadata-scoped delete, so update_document and +# remove_document cannot work on them; selecting them fails fast here +# instead of blowing up mid-update. +SUPPORTED_VECTOR_BACKENDS = ("inmemory", "sqlite") + _graph: Optional[Any] = None +_embedder: Optional[Any] = None +_vector_store: Optional[Any] = None # Tracks whether the last graph initialisation successfully loaded the # configured SEMANTICA_KG_PATH file. When True (or no path was configured) @@ -59,6 +67,103 @@ def get_graph() -> Any: return _graph +def get_embedder() -> Any: + """ + Return the shared EmbeddingGenerator instance, creating it on first call. + + Used by the semantic retrieval tools (#1235) to embed documents and + queries with one consistent model, so stored vectors and query + vectors always share the same dimensionality. + """ + global _embedder + if _embedder is None: + from semantica.embeddings import EmbeddingGenerator + + _embedder = EmbeddingGenerator() + log.info( + "Embedding generator initialised (method=%s)", + _embedder.get_text_method(), + ) + return _embedder + + +def get_vector_store() -> Any: + """ + Return the shared VectorStore instance, creating it on first call. + + Backend selection: + + • ``SEMANTICA_VECTOR_BACKEND`` — ``inmemory`` (default) or ``sqlite``. + The ``sqlite`` backend additionally requires + ``SEMANTICA_VECTOR_DB_PATH``. Other VectorStore backends (faiss, + pgvector) are rejected: they lack the metadata-scoped delete the + update/remove tools need. + • ``SEMANTICA_VECTOR_PATH`` — a *directory* previously written by + ``VectorStore.save()``. If it exists, the store is loaded from it + on start. Note this is a directory, unlike SEMANTICA_KG_PATH which + is a single JSON file. The persisted dimension must match the + active embedder or startup fails — otherwise queries would either + error on shape mismatch or silently rank across incompatible + embedding spaces. + """ + global _vector_store + if _vector_store is None: + from semantica.vector_store import VectorStore + + backend = os.environ.get("SEMANTICA_VECTOR_BACKEND", "inmemory").strip().lower() + if backend not in SUPPORTED_VECTOR_BACKENDS: + raise ValueError( + f"SEMANTICA_VECTOR_BACKEND={backend!r} is not supported by the " + "MCP retrieval tools; supported backends: " + + ", ".join(SUPPORTED_VECTOR_BACKENDS) + ) + config: dict = {} + if backend == "sqlite": + db_path = os.environ.get("SEMANTICA_VECTOR_DB_PATH", "").strip() + if not db_path: + raise ValueError( + "SEMANTICA_VECTOR_BACKEND=sqlite requires " + "SEMANTICA_VECTOR_DB_PATH to point at the database file" + ) + config["db_path"] = db_path + # VectorStore defaults to dimension 768, which does not match the + # default embedding model (all-MiniLM-L6-v2 = 384, hash fallback + # = 128). Always derive it from the embedder so store and + # queries stay consistent. + embedder = get_embedder() + config["dimension"] = embedder.text_embedder.get_embedding_dimension() + + store = VectorStore(backend=backend, config=config) + + vector_path = os.environ.get("SEMANTICA_VECTOR_PATH", "").strip() + if vector_path and os.path.isdir(vector_path): + try: + store.load(vector_path) + log.info("Vector store loaded from %s", vector_path) + except Exception as exc: + raise ValueError( + f"Could not load vector store from {vector_path}: {exc}" + ) from exc + loaded_dim = getattr(store, "dimension", None) + if loaded_dim and loaded_dim != config["dimension"]: + raise ValueError( + f"Persisted vector store at {vector_path} has dimension " + f"{loaded_dim}, but the active embedder produces " + f"{config['dimension']}. Re-embed the corpus or point " + "SEMANTICA_VECTOR_PATH at a store built with the same model." + ) + + _vector_store = store + log.info("Vector store initialised (backend=%s)", backend) + return _vector_store + + +def reset_vector_store() -> None: + """Reset the vector store singleton (mainly useful in tests).""" + global _vector_store + _vector_store = None + + def is_persistence_safe() -> bool: """Return True when it is safe to write mutations back to SEMANTICA_KG_PATH. diff --git a/semantica_mcp/mcp/tools/__init__.py b/semantica_mcp/mcp/tools/__init__.py index 333cb133..bf5195bd 100644 --- a/semantica_mcp/mcp/tools/__init__.py +++ b/semantica_mcp/mcp/tools/__init__.py @@ -9,6 +9,7 @@ from .export import EXPORT_TOOLS from .extraction import EXTRACTION_TOOLS from .graph import GRAPH_TOOLS from .reasoning import REASONING_TOOLS +from .retrieval import RETRIEVAL_TOOLS # Ordered list — exposed to the MCP client via tools/list TOOL_DEFINITIONS = ( @@ -17,6 +18,7 @@ TOOL_DEFINITIONS = ( + GRAPH_TOOLS + REASONING_TOOLS + EXPORT_TOOLS + + RETRIEVAL_TOOLS ) __all__ = ["TOOL_DEFINITIONS"] diff --git a/semantica_mcp/mcp/tools/retrieval.py b/semantica_mcp/mcp/tools/retrieval.py new file mode 100644 index 00000000..52a53fec --- /dev/null +++ b/semantica_mcp/mcp/tools/retrieval.py @@ -0,0 +1,533 @@ +""" +Semantic retrieval tools — store, retrieve, update and remove documents +in a vector store, combined with knowledge-graph context (#1235). + +Design notes: + +• Documents are chunked with a fixed sliding window (default 1000 chars, + 200 overlap) and every chunk carries full provenance metadata: + chunk_id, source, authority, version, project, content hash, status + and character offsets. +• (source, version) is the upsert key. The content hash only decides + whether a re-store can be skipped as a no-op. +• Updates and removals on the in-memory backend rebuild the store from + scratch (read everything, filter, clear, re-store) instead of calling + delete_vectors. In-memory ids are derived from ``len(self.vectors)`` + and fall back after a delete, so deleting then writing can overwrite + live data (#1029). Rebuilding from an empty dict starts the counter + at zero — nothing to collide with. The real fix for #1029 (ids that + never get reused) belongs in its own PR. +• Retrieval results are combined with related graph nodes: for each hit + source we look up ContextGraph nodes tagged with the same + ``metadata.source`` and attach their 1-hop neighbours. +""" + +from __future__ import annotations + +import hashlib +import logging +import os +from typing import Any, Dict, List, Tuple + +import numpy as np + +from ..schemas import ( + REMOVE_DOCUMENT, + RETRIEVE_CONTEXT, + STORE_DOCUMENT, + UPDATE_DOCUMENT, +) +from ..session import get_embedder, get_graph, get_vector_store + +log = logging.getLogger("semantica.mcp.tools.retrieval") + +DEFAULT_CHUNK_SIZE = 1000 +DEFAULT_CHUNK_OVERLAP = 200 +MAX_TOP_K = 10 +FILTER_OVERFETCH = 3 +MAX_FILTER_MATCHES = 10_000 +MAX_CHUNKS_PER_DOC = 10_000 + +# Metadata fields owned by the upsert logic. Caller-supplied metadata +# can add extra context but must not rewrite provenance: overwriting +# source/version/hash/status would break the (source, version) upsert +# key, the idempotent no-op check, and retrieval filters. +PROTECTED_META_KEYS = frozenset( + { + "chunk_id", + "text", + "source", + "authority", + "version", + "hash", + "status", + "chunk_index", + "char_start", + "char_end", + "project", + } +) + + +def _chunk_text(text: str, chunk_size: int, chunk_overlap: int) -> List[Tuple[int, int, str]]: + """Split text into (char_start, char_end, chunk) windows.""" + if chunk_overlap >= chunk_size: + raise ValueError("chunk_overlap must be smaller than chunk_size") + chunks: List[Tuple[int, int, str]] = [] + start = 0 + n = len(text) + while start < n: + end = min(start + chunk_size, n) + chunks.append((start, end, text[start:end])) + if end >= n: + break + start = end - chunk_overlap + return chunks + + +def _chunk_id(source: str, version: str, index: int, text: str) -> str: + """Stable chunk id derived from the location key and chunk content.""" + digest = hashlib.sha256( + f"{source}|{version}|{index}|{text}".encode("utf-8") + ).hexdigest() + return f"chk_{digest[:16]}" + + +def _doc_hash(content: str) -> str: + return hashlib.sha256(content.encode("utf-8")).hexdigest() + + +def _find_matching_rows(store: Any, source: str, version: str) -> List[Dict[str, Any]]: + """ + Return rows (``{id, vector, metadata}``) matching (source, version). + + The persistent branch pulls whole rows (vector included) into memory; + the limit keeps the scan bounded. Documents beyond MAX_CHUNKS_PER_DOC + chunks are rejected at ingestion, so the cap cannot leave stale + chunks behind on update/remove. + """ + if getattr(store, "backend", "") == "inmemory": + rows = [] + for vid, vec in getattr(store, "vectors", {}).items(): + meta = getattr(store, "metadata", {}).get(vid) or {} + if meta.get("source") == source and meta.get("version") == version: + rows.append({"id": vid, "vector": vec, "metadata": meta}) + return rows + backend_store = getattr(store, "_backend_store", None) + if backend_store is not None and hasattr(backend_store, "filter_by_metadata"): + return backend_store.filter_by_metadata( + {"source": source, "version": version}, limit=MAX_FILTER_MATCHES + ) + raise NotImplementedError( + f"Backend {type(backend_store).__name__} does not support metadata lookup; " + "cannot locate chunks for update/remove" + ) + + +def _find_matching_ids(store: Any, source: str, version: str) -> List[str]: + """Return every vector id whose metadata matches (source, version).""" + return [row["id"] for row in _find_matching_rows(store, source, version)] + + +def _remove_ids(store: Any, remove_ids: List[str]) -> None: + """Remove vectors by id, avoiding the #1029 in-memory id collision.""" + if getattr(store, "backend", "") == "inmemory": + # Full rebuild: read all, filter in memory, clear, re-store once. + # store_vectors derives ids from len(self.vectors), and the dicts + # are empty here, so the counter restarts at zero — no reuse of + # ids that are still referenced anywhere. + remove = set(remove_ids) + vectors = getattr(store, "vectors", {}) + metadata = getattr(store, "metadata", {}) + saved_vectors = dict(vectors) + saved_metadata = dict(metadata) + keep_vectors = [] + keep_meta = [] + for vid, vec in list(vectors.items()): + if vid in remove: + continue + keep_vectors.append(vec) + keep_meta.append(metadata.get(vid, {})) + vectors.clear() + metadata.clear() + try: + if keep_vectors: + store.store_vectors(keep_vectors, keep_meta) + except Exception: + # Restore the pre-rebuild state so a failed re-store does not + # silently drop every surviving document. + vectors.update(saved_vectors) + metadata.update(saved_metadata) + store.indexer.create_index( + list(vectors.values()), list(vectors.keys()) + ) + raise + return + # Persistent backends do not have the len-based id collision, so a + # direct delete is safe there. + store.delete_vectors(remove_ids) + + +def _persist(store: Any) -> Any: + """ + Persist the store when SEMANTICA_VECTOR_PATH is configured. + + Returns ``None`` when no path is configured, ``True`` on success and + ``False`` when saving failed — surfaced in tool results so a caller + can tell an in-memory-only write from a durable one. + """ + path = os.environ.get("SEMANTICA_VECTOR_PATH", "").strip() + if not path: + return None + try: + store.save(path) + except Exception as exc: + log.warning("Could not persist vector store to %s: %s", path, exc) + return False + return True + + +def _node_source(meta: Any) -> str: + """ + Extract a node's source tag from its metadata. + + ContextGraph.add_node nests the caller-supplied metadata dict one + level down (``{'label': ..., 'metadata': {...}}``), while nodes added + through other paths may carry ``source`` directly. Check both. + """ + if not isinstance(meta, dict): + return "" + direct = meta.get("source") + if direct: + return str(direct) + nested = meta.get("metadata") + if isinstance(nested, dict): + return str(nested.get("source", "") or "") + return "" + + +def _graph_relationships(sources: List[str], max_per_source: int = 3) -> List[Dict[str, Any]]: + """ + Collect 1-hop graph neighbours for nodes tagged with the hit sources. + + Node lookup matches the node's source tag against the stored document + sources. Failures degrade to an empty list — graph context is a + bonus, never a hard dependency of retrieval. + """ + if not sources: + return [] + try: + graph = get_graph() + nodes = list(graph.find_nodes()) + except Exception as exc: + log.debug("Graph context unavailable: %s", exc) + return [] + + relationships: List[Dict[str, Any]] = [] + seen: set = set() + for source in sources: + anchor = None + for n in nodes: + if _node_source(n.get("metadata")) == source: + anchor = n + break + if anchor is None: + continue + try: + neighbors = graph.get_neighbors(anchor["id"], hops=1) + except Exception as exc: + log.debug("get_neighbors failed for %s: %s", anchor.get("id"), exc) + continue + added = 0 + for nb in neighbors: + key = (anchor.get("id"), nb.get("id"), nb.get("relationship")) + if key in seen: + continue + seen.add(key) + relationships.append( + { + "node": { + "id": anchor.get("id"), + "type": anchor.get("type"), + "content": str(anchor.get("content") or "")[:200], + "source": source, + }, + "related": { + "id": nb.get("id"), + "type": nb.get("type"), + "content": str(nb.get("content") or "")[:200], + }, + "relationship": nb.get("relationship"), + } + ) + added += 1 + if added >= max_per_source: + break + return relationships + + +def _upsert(args: dict, action: str) -> dict: + """Shared implementation for store_document and update_document.""" + content = args.get("content", "") + source = str(args.get("source", "")).strip() + if not content or not source: + return {"error": "content and source are required"} + authority = str(args.get("authority", "")).strip() + if action == "store" and not authority: + return {"error": "authority is required"} + version = str(args.get("version", "")).strip() or "v1" + project = str(args.get("project", "")).strip() or None + chunk_size = int(args.get("chunk_size", DEFAULT_CHUNK_SIZE)) + chunk_overlap = int(args.get("chunk_overlap", DEFAULT_CHUNK_OVERLAP)) + if chunk_overlap >= chunk_size: + return {"error": "chunk_overlap must be smaller than chunk_size"} + extra = args.get("metadata") or {} + if not isinstance(extra, dict): + return {"error": "metadata must be an object"} + doc_hash = _doc_hash(content) + + try: + store = get_vector_store() + embedder = get_embedder() + + existing_ids = _find_matching_ids(store, source, version) + if action == "update" and not existing_ids: + return {"status": "not_found", "source": source, "version": version} + existing_first: Dict[str, Any] = {} + if existing_ids: + existing_first = store.get_metadata(existing_ids[0]) or {} + if action == "store" and existing_first.get("hash") == doc_hash: + # Same content already stored under (source, version) — + # skip re-embedding entirely. + return { + "status": "unchanged", + "source": source, + "version": version, + "chunk_ids": [ + (store.get_metadata(vid) or {}).get("chunk_id") + for vid in existing_ids + ], + } + + chunks = _chunk_text(content, chunk_size, chunk_overlap) + if len(chunks) > MAX_CHUNKS_PER_DOC: + return { + "error": ( + f"document produces {len(chunks)} chunks, above the " + f"{MAX_CHUNKS_PER_DOC}-chunk limit; split it into smaller " + "documents or raise chunk_size" + ) + } + vectors = np.asarray( + embedder.generate_embeddings([c_text for _, _, c_text in chunks]) + ) + if vectors.ndim == 1: + vectors = vectors.reshape(1, -1) + if vectors.shape[0] != len(chunks): + return { + "error": ( + f"embedder returned {vectors.shape[0]} vectors " + f"for {len(chunks)} chunks" + ) + } + + final_authority = authority or existing_first.get("authority") or "unknown" + final_project = project or existing_first.get("project") + + old_rows: List[Dict[str, Any]] = [] + if existing_ids: + # Snapshot the rows being replaced so a failed write of the + # new chunks can put the old document back instead of leaving + # (source, version) silently empty. + old_rows = _find_matching_rows(store, source, version) + _remove_ids(store, existing_ids) + + metas = [] + chunk_ids = [] + for idx, (start, end, c_text) in enumerate(chunks): + cid = _chunk_id(source, version, idx, c_text) + chunk_ids.append(cid) + meta: Dict[str, Any] = { + "chunk_id": cid, + "text": c_text, + "source": source, + "authority": final_authority, + "version": version, + "hash": doc_hash, + "status": "active", + "chunk_index": idx, + "char_start": start, + "char_end": end, + } + if final_project: + meta["project"] = final_project + for key in extra: + if key in PROTECTED_META_KEYS: + log.debug( + "Ignoring caller metadata key %r: provenance field is " + "managed by the tool", + key, + ) + else: + meta[key] = extra[key] + metas.append(meta) + + try: + store.store_vectors(list(vectors), metas) + except Exception: + if old_rows: + log.warning( + "Storing new chunks failed for (%s, %s); restoring the " + "previous document", + source, + version, + ) + store.store_vectors( + [row["vector"] for row in old_rows], + [row["metadata"] for row in old_rows], + ) + raise + persisted = _persist(store) + return { + "status": "stored" if action == "store" else "updated", + "source": source, + "version": version, + "chunk_ids": chunk_ids, + "chunk_count": len(chunk_ids), + "hash": doc_hash, + "persisted": persisted, + } + except Exception as exc: + log.exception("%s_document failed", action) + return {"error": str(exc)} + + +def handle_store_document(args: dict) -> dict: + """Chunk a document, embed it, and store it for semantic retrieval.""" + return _upsert(args, "store") + + +def handle_update_document(args: dict) -> dict: + """Replace the stored content of a (source, version) document.""" + return _upsert(args, "update") + + +def handle_retrieve_context(args: dict) -> dict: + """Embed a query and return the most relevant stored chunks.""" + query = str(args.get("query", "")).strip() + if not query: + return {"error": "query is required", "results": []} + try: + top_k = max(1, min(int(args.get("top_k", 5)), MAX_TOP_K)) + except (TypeError, ValueError): + top_k = 5 + project = str(args.get("project", "")).strip() or None + + try: + store = get_vector_store() + query_vector = np.asarray(get_embedder().generate_embeddings([query]))[0] + # Over-fetch so a project filter can drop hits without starving + # the result list. + fetch_k = top_k * FILTER_OVERFETCH if project else top_k + raw = store.search_vectors(query_vector, k=fetch_k) + + results = [] + for hit in raw: + meta = hit.get("metadata") or {} + if project and meta.get("project") != project: + continue + results.append( + { + "chunk_id": meta.get("chunk_id", hit.get("id")), + "text": meta.get("text", ""), + "score": hit.get("score"), + "source": meta.get("source"), + "authority": meta.get("authority"), + "version": meta.get("version"), + "project": meta.get("project"), + "status": meta.get("status"), + "hash": meta.get("hash"), + } + ) + if len(results) >= top_k: + break + + sources = list(dict.fromkeys(r["source"] for r in results if r["source"])) + return { + "query": query, + "results": results, + "count": len(results), + "graph_context": _graph_relationships(sources), + } + except Exception as exc: + log.exception("retrieve_context failed") + return {"error": str(exc), "results": []} + + +def handle_remove_document(args: dict) -> dict: + """Remove every chunk stored under (source, version).""" + source = str(args.get("source", "")).strip() + if not source: + return {"error": "source is required"} + version = str(args.get("version", "")).strip() or "v1" + try: + store = get_vector_store() + existing_ids = _find_matching_ids(store, source, version) + if not existing_ids: + return {"status": "not_found", "source": source, "version": version} + _remove_ids(store, existing_ids) + persisted = _persist(store) + return { + "status": "removed", + "source": source, + "version": version, + "removed_chunks": len(existing_ids), + "persisted": persisted, + } + except Exception as exc: + log.exception("remove_document failed") + return {"error": str(exc)} + + +RETRIEVAL_TOOLS = [ + { + "name": "store_document", + "description": ( + "Chunk a document, embed the chunks, and store them for semantic " + "retrieval. Keyed on (source, version); storing identical content " + "again is a no-op." + ), + "inputSchema": STORE_DOCUMENT, + "_handler": handle_store_document, + }, + { + "name": "retrieve_context", + "description": ( + "Embed a natural-language query and return the most relevant " + "stored chunks with scores and provenance, combined with related " + "knowledge-graph relationships." + ), + "inputSchema": RETRIEVE_CONTEXT, + "_handler": handle_retrieve_context, + }, + { + "name": "update_document", + "description": ( + "Replace the stored content of a document identified by " + "(source, version). Old chunks are removed and the new content " + "is re-chunked and re-embedded. Returns not_found when no " + "stored document matches (source, version)." + ), + "inputSchema": UPDATE_DOCUMENT, + "_handler": handle_update_document, + }, + { + "name": "remove_document", + "description": ( + "Remove every chunk stored under (source, version) from the " + "vector store." + ), + "inputSchema": REMOVE_DOCUMENT, + "_handler": handle_remove_document, + }, +] diff --git a/tests/test_mcp_semantic_retrieval.py b/tests/test_mcp_semantic_retrieval.py new file mode 100644 index 00000000..c847ea2c --- /dev/null +++ b/tests/test_mcp_semantic_retrieval.py @@ -0,0 +1,787 @@ +""" +Tests for the MCP semantic retrieval tools (#1235). + +Covers the six acceptance behaviours proposed in the issue: + +1. store_document chunks content and stores it in a real supported + vector backend with provenance metadata (status / version / hash). +2. retrieve_context returns semantically relevant chunks with scores + and provenance, combined with related graph relationships. +3. update_document replaces stored content under (source, version). +4. remove_document deletes every chunk of a document. +5. Remove-then-store does not collide with surviving in-memory ids + (regression guard for the #1029 interaction). +6. The same tool set works against the sqlite backend (real persistent + store, skipped when the sqlite_vec extension is missing). +""" + +import os +import sys +import tempfile +import unittest +import zlib +from unittest.mock import patch + +import numpy as np + +sys.path.insert(0, os.path.join(os.path.dirname(__file__), "..")) + +import semantica_mcp.mcp.session as session +import semantica.embeddings as _embeddings_pkg +import semantica.vector_store.vector_store as _vs_module +from semantica_mcp.mcp.session import get_vector_store, reset_vector_store +from semantica_mcp.mcp.tools import TOOL_DEFINITIONS +from semantica_mcp.mcp.tools.retrieval import ( + _chunk_id, + _chunk_text, + handle_remove_document, + handle_retrieve_context, + handle_store_document, + handle_update_document, +) + + +class FakeTextEmbedder: + def __init__(self, dim: int = 64): + self.dim = dim + + def get_embedding_dimension(self) -> int: + return self.dim + + +class FakeEmbedder: + """ + Deterministic keyword-bag embedder on a fixed dimension. + + Same words land on the same dimensions, so a query sharing vocabulary + with a chunk scores higher than one that does not — enough signal for + ranking assertions without any model download. crc32 keeps the + word-to-dimension mapping stable across processes (unlike builtin + hash(), whose per-process salt would make collisions flaky), and 64 + dims keep the test keywords collision-free. + """ + + def __init__(self, dim: int = 64): + self.dim = dim + self.text_embedder = FakeTextEmbedder(dim) + + def get_text_method(self) -> str: + return "fake" + + def generate_embeddings(self, texts): + out = [] + for t in texts: + v = np.zeros(self.dim, dtype=float) + for w in str(t).lower().split(): + if w == "x": + # "x" is the filler make_doc pads with; treating it + # as a stopword keeps vectors keyword-driven instead + # of filler-dominated. + continue + v[zlib.crc32(w.encode("utf-8")) % self.dim] += 1.0 + norm = np.linalg.norm(v) + if norm: + v /= norm + out.append(v) + return np.array(out) + + +def make_doc(*keywords) -> str: + """ + Build filler text with exactly one keyword per chunk. + + With the default 1000 window / 200 overlap, chunk i covers + [800*i, 800*i+1000). Keyword i is placed at 800*i + 300, which sits + inside chunk i only — clear of both neighbouring overlap zones. + Filler is spaced "x " tokens, which the fake embedder treats as a + stopword, so chunk vectors are keyword-driven. + """ + filler = "x " + parts = [] + pos = 0 + for i, word in enumerate(keywords): + target = 800 * i + 300 + parts.append(filler * ((target - pos) // 2)) + parts.append(word + " ") + pos = target + len(word) + 1 + parts.append(filler * 30) + return "".join(parts) + + +def patch_embedding_generators(): + """ + Patch every EmbeddingGenerator construction site with FakeEmbedder. + + The real EmbeddingGenerator probes FastEmbed / sentence-transformers + on init; where those packages are installed but the model is not + cached, the probe blocks on a full TCP connect timeout (~30s each). + VectorStore's in-memory branch builds one internally, so tests patch + both import sites to keep the suite fast and network-free. + """ + return ( + patch.object(_embeddings_pkg, "EmbeddingGenerator", FakeEmbedder), + patch.object(_vs_module, "EmbeddingGenerator", FakeEmbedder), + ) + + +def _clear_retrieval_env(): + for var in ("SEMANTICA_VECTOR_PATH", "SEMANTICA_VECTOR_BACKEND", "SEMANTICA_VECTOR_DB_PATH"): + os.environ.pop(var, None) + + +class InmemoryBackendTestBase(unittest.TestCase): + def setUp(self): + _clear_retrieval_env() + session._embedder = FakeEmbedder() + session._vector_store = None + session._graph = None + self._patches = patch_embedding_generators() + for p in self._patches: + p.start() + + def tearDown(self): + for p in self._patches: + p.stop() + session._embedder = None + reset_vector_store() + session._graph = None + _clear_retrieval_env() + + +class TestChunking(InmemoryBackendTestBase): + def test_fixed_window_with_overlap(self): + text = "a" * 2600 + chunks = _chunk_text(text, 1000, 200) + self.assertEqual([c[:2] for c in chunks], [(0, 1000), (800, 1800), (1600, 2600)]) + self.assertTrue(all(c == text[s:e] for s, e, c in chunks)) + + def test_short_text_single_chunk(self): + chunks = _chunk_text("short", 1000, 200) + self.assertEqual(chunks, [(0, 5, "short")]) + + def test_overlap_must_be_smaller_than_window(self): + with self.assertRaises(ValueError): + _chunk_text("abc", 200, 200) + + def test_chunk_id_is_stable_and_position_sensitive(self): + a = _chunk_id("src", "v1", 0, "hello") + b = _chunk_id("src", "v1", 0, "hello") + c = _chunk_id("src", "v1", 1, "hello") + self.assertEqual(a, b) + self.assertNotEqual(a, c) + + +class TestStoreDocument(InmemoryBackendTestBase): + def test_chunks_carry_provenance_metadata(self): + result = handle_store_document( + { + "content": make_doc("alpha", "beta"), + "source": "policy_manual#p12", + "authority": "official", + "version": "v2", + "project": "lending", + } + ) + self.assertNotIn("error", result) + self.assertEqual(result["status"], "stored") + self.assertEqual(result["chunk_count"], len(result["chunk_ids"])) + + store = get_vector_store() + first = next( + m + for m in store.metadata.values() + if m.get("source") == "policy_manual#p12" and m.get("chunk_index") == 0 + ) + self.assertEqual(first["chunk_id"], result["chunk_ids"][0]) + self.assertEqual(first["authority"], "official") + self.assertEqual(first["version"], "v2") + self.assertEqual(first["project"], "lending") + self.assertEqual(first["status"], "active") + self.assertEqual(first["hash"], result["hash"]) + self.assertEqual(first["char_start"], 0) + + def test_identical_content_is_a_noop(self): + args = {"content": "same content", "source": "doc", "authority": "official"} + first = handle_store_document(args) + second = handle_store_document(args) + self.assertEqual(second["status"], "unchanged") + self.assertEqual(second["chunk_ids"], first["chunk_ids"]) + self.assertEqual(get_vector_store().count(), first["chunk_count"]) + + def test_missing_authority_rejected(self): + result = handle_store_document({"content": "text", "source": "doc"}) + self.assertIn("error", result) + + def test_caller_metadata_cannot_override_provenance(self): + result = handle_store_document( + { + "content": make_doc("alpha"), + "source": "real_source", + "authority": "official", + "metadata": { + "source": "spoofed_source", + "authority": "backdated", + "status": "tombstone", + "hash": "deadbeef", + "version": "v99", + "project": "shadow_project", + "dept": "risk", + }, + } + ) + self.assertNotIn("error", result) + + store = get_vector_store() + meta = next( + m + for m in store.metadata.values() + if m.get("chunk_id") == result["chunk_ids"][0] + ) + self.assertEqual(meta["source"], "real_source") + self.assertEqual(meta["authority"], "official") + self.assertEqual(meta["status"], "active") + self.assertEqual(meta["hash"], result["hash"]) + self.assertEqual(meta["version"], "v1") + self.assertNotIn("project", meta) + # Non-provenance keys still land. + self.assertEqual(meta["dept"], "risk") + + # Provenance stays intact, so the idempotent no-op still works. + again = handle_store_document( + { + "content": make_doc("alpha"), + "source": "real_source", + "authority": "official", + } + ) + self.assertEqual(again["status"], "unchanged") + + def test_non_dict_metadata_rejected(self): + result = handle_store_document( + {"content": "text", "source": "doc", "authority": "official", "metadata": ["bad"]} + ) + self.assertIn("error", result) + + +class TestRetrieveContext(InmemoryBackendTestBase): + def setUp(self): + super().setUp() + handle_store_document( + { + "content": make_doc("approval", "collateral", "interest"), + "source": "lending_policy", + "authority": "official", + "project": "lending", + } + ) + handle_store_document( + { + "content": make_doc("payment", "refund"), + "source": "billing_faq", + "authority": "draft", + "project": "billing", + } + ) + + def test_relevant_chunks_ranked_with_provenance(self): + result = handle_retrieve_context({"query": "collateral", "top_k": 3}) + self.assertNotIn("error", result) + self.assertGreater(result["count"], 0) + relevant = [r for r in result["results"] if r["score"] and r["score"] > 0] + self.assertTrue(relevant) + top = relevant[0] + self.assertIn("collateral", top["text"]) + self.assertEqual(top["source"], "lending_policy") + self.assertEqual(top["authority"], "official") + self.assertEqual(top["version"], "v1") + self.assertEqual(top["status"], "active") + self.assertTrue(top["hash"]) + self.assertIsInstance(top["score"], float) + + def test_top_k_is_capped_at_ten(self): + # 13 chunks (one keyword per chunk) so the cap is actually hit; + # with fewer stored chunks the assertion would pass trivially. + handle_store_document( + { + "content": make_doc(*["k%02d" % i for i in range(1, 14)]), + "source": "capdoc", + "authority": "official", + } + ) + result = handle_retrieve_context({"query": "k01", "top_k": 99}) + self.assertEqual(result["count"], 10) + + def test_project_filter_narrows_results(self): + result = handle_retrieve_context({"query": "collateral", "project": "billing"}) + for r in result["results"]: + self.assertEqual(r["project"], "billing") + + def test_graph_relationships_attached(self): + graph = session.get_graph() + graph.add_node( + node_id="policy_doc_lending_policy", + label="Lending policy doc", + node_type="Document", + metadata={"source": "lending_policy"}, + ) + graph.add_node(node_id="risk_team", label="Risk team", node_type="Team") + graph.add_edge( + source_id="policy_doc_lending_policy", + target_id="risk_team", + edge_type="OWNED_BY", + ) + result = handle_retrieve_context({"query": "collateral"}) + self.assertGreaterEqual(len(result["graph_context"]), 1) + rel = result["graph_context"][0] + self.assertEqual(rel["node"]["source"], "lending_policy") + self.assertEqual(rel["related"]["id"], "risk_team") + self.assertEqual(rel["relationship"], "OWNED_BY") + + def test_empty_query_rejected(self): + result = handle_retrieve_context({"query": " "}) + self.assertIn("error", result) + + +class TestUpdateDocument(InmemoryBackendTestBase): + def test_update_replaces_chunks(self): + handle_store_document( + { + "content": make_doc("oldterm", "legacy"), + "source": "handbook", + "authority": "official", + } + ) + result = handle_update_document( + { + "content": make_doc("newterm"), + "source": "handbook", + "version": "v1", + } + ) + self.assertEqual(result["status"], "updated") + self.assertEqual(result["chunk_count"], 1) + + hits = handle_retrieve_context({"query": "newterm"})["results"] + hits = [h for h in hits if h["score"] and h["score"] > 0] + self.assertTrue(hits and "newterm" in hits[0]["text"]) + stale = handle_retrieve_context({"query": "oldterm"})["results"] + stale = [h for h in stale if h["score"] and h["score"] > 0] + self.assertEqual(stale, []) + # Authority is inherited from the stored version when omitted. + self.assertEqual(hits[0]["authority"], "official") + self.assertEqual(get_vector_store().count(), 1) + + def test_update_rolls_back_when_new_write_fails(self): + handle_store_document( + { + "content": make_doc("oldterm", "legacy"), + "source": "handbook", + "authority": "official", + } + ) + store = get_vector_store() + real_store_vectors = store.store_vectors + + def failing_write(vectors, metas): + if any("phoenix" in (m.get("text") or "") for m in metas): + raise RuntimeError("simulated write failure") + return real_store_vectors(vectors, metas) + + with patch.object(store, "store_vectors", side_effect=failing_write): + result = handle_update_document( + {"content": make_doc("phoenix"), "source": "handbook"} + ) + self.assertIn("error", result) + self.assertIn("simulated write failure", result["error"]) + + # The old document must survive the failed replacement, with no + # trace of the new content. + store = get_vector_store() + self.assertEqual(store.count(), 2) + old = [ + h + for h in handle_retrieve_context({"query": "oldterm"})["results"] + if h["score"] and h["score"] > 0 + ] + self.assertTrue(old and "oldterm" in old[0]["text"]) + self.assertEqual(old[0]["source"], "handbook") + self.assertEqual(old[0]["authority"], "official") + phoenix = [ + h + for h in handle_retrieve_context({"query": "phoenix"})["results"] + if h["score"] and h["score"] > 0 + ] + self.assertEqual(phoenix, []) + + def test_update_missing_document_reports_not_found(self): + result = handle_update_document( + { + "content": make_doc("neverseen"), + "source": "never_stored", + "version": "v1", + } + ) + self.assertEqual(result["status"], "not_found") + self.assertEqual(result["source"], "never_stored") + self.assertEqual(result["version"], "v1") + self.assertEqual(get_vector_store().count(), 0) + + +class TestRemoveDocument(InmemoryBackendTestBase): + def test_remove_deletes_every_chunk(self): + handle_store_document( + { + "content": make_doc("alpha", "beta", "gamma"), + "source": "docA", + "authority": "official", + } + ) + result = handle_remove_document({"source": "docA"}) + self.assertEqual(result["status"], "removed") + self.assertEqual(result["removed_chunks"], 3) + self.assertEqual(get_vector_store().count(), 0) + again = handle_remove_document({"source": "docA"}) + self.assertEqual(again["status"], "not_found") + + def test_remove_missing_document_reports_not_found(self): + result = handle_remove_document({"source": "never_stored"}) + self.assertEqual(result["status"], "not_found") + + +class TestInMemoryIdCollisionRegression(InmemoryBackendTestBase): + """ + #1029 interaction guard. + + In-memory vector ids are ``vec_{len(self.vectors) + i}``. Deleting a + document that is NOT a suffix makes len() fall below surviving ids, so + the next plain write overwrites live data. Our rebuild path must + prevent that: store a 1-chunk doc, then a 3-chunk doc, remove the + 1-chunk one, then store another doc. Without the rebuild the last + store lands on the surviving document's third chunk id and destroys + it. + """ + + def test_remove_then_store_keeps_surviving_chunks_intact(self): + handle_store_document( + {"content": make_doc("alpha"), "source": "docA", "authority": "official"} + ) + handle_store_document( + { + "content": make_doc("bravo", "charlie", "delta"), + "source": "docB", + "authority": "official", + } + ) + self.assertEqual(get_vector_store().count(), 4) + + removed = handle_remove_document({"source": "docA"}) + self.assertEqual(removed["status"], "removed") + + stored = handle_store_document( + {"content": make_doc("echo"), "source": "docC", "authority": "official"} + ) + self.assertEqual(stored["status"], "stored") + + store = get_vector_store() + self.assertEqual(store.count(), 4) + + delta_hits = handle_retrieve_context({"query": "delta"})["results"] + delta_hits = [h for h in delta_hits if h["score"] and h["score"] > 0] + self.assertTrue(delta_hits, "docB's third chunk was destroyed by an id collision") + self.assertIn("delta", delta_hits[0]["text"]) + self.assertEqual(delta_hits[0]["source"], "docB") + + for keyword, expected_source in ( + ("bravo", "docB"), + ("charlie", "docB"), + ("echo", "docC"), + ): + hits = [ + h + for h in handle_retrieve_context({"query": keyword})["results"] + if h["score"] and h["score"] > 0 + ] + self.assertTrue(hits, f"expected a hit for {keyword}") + self.assertEqual(hits[0]["source"], expected_source) + + +class TestBackendPolicy(InmemoryBackendTestBase): + def test_unsupported_backend_fails_fast(self): + # faiss/pgvector lack a metadata-scoped delete, so update/remove + # cannot work on them; selecting them must fail at startup, not + # mid-update. + for backend in ("faiss", "pgvector"): + with self.subTest(backend=backend): + os.environ["SEMANTICA_VECTOR_BACKEND"] = backend + with self.assertRaises(ValueError) as ctx: + get_vector_store() + self.assertIn("not supported", str(ctx.exception)) + + def test_oversized_document_rejected_before_embedding(self): + # chunk_size=1 turns a 12k-char body into 12k chunks, crossing + # the ingestion cap without any expensive embedding work. + result = handle_store_document( + { + "content": "ab" * 6000, + "source": "bigdoc", + "authority": "official", + "chunk_size": 1, + "chunk_overlap": 0, + } + ) + self.assertIn("error", result) + self.assertIn("chunks", result["error"]) + self.assertEqual(get_vector_store().count(), 0) + + +class TestToolRegistration(unittest.TestCase): + def test_retrieval_tools_are_registered(self): + retrieval = { + t["name"]: t + for t in TOOL_DEFINITIONS + if t["name"] in ("store_document", "retrieve_context", "update_document", "remove_document") + } + self.assertEqual(len(retrieval), 4) + for name, t in retrieval.items(): + self.assertTrue(callable(t["_handler"])) + self.assertIn("required", t["inputSchema"]) + + +class TestSqliteBackend(unittest.TestCase): + def setUp(self): + try: + import sqlite_vec # noqa: F401 + except ImportError: + self.skipTest("sqlite_vec extension not installed") + self.tmpdir = tempfile.mkdtemp(prefix="semantica_sqlite_test_") + self.patches = patch_embedding_generators() + for p in self.patches: + p.start() + _clear_retrieval_env() + os.environ["SEMANTICA_VECTOR_BACKEND"] = "sqlite" + os.environ["SEMANTICA_VECTOR_DB_PATH"] = os.path.join(self.tmpdir, "vectors.db") + session._embedder = FakeEmbedder() + session._vector_store = None + + def tearDown(self): + for p in self.patches: + p.stop() + session._embedder = None + reset_vector_store() + _clear_retrieval_env() + import shutil + + shutil.rmtree(self.tmpdir, ignore_errors=True) + + def test_sqlite_backend_roundtrip(self): + handle_store_document( + { + "content": make_doc("alpha", "beta"), + "source": "docS", + "authority": "official", + } + ) + hits = handle_retrieve_context({"query": "beta"})["results"] + self.assertTrue(hits and "beta" in hits[0]["text"]) + self.assertEqual(hits[0]["source"], "docS") + + updated = handle_update_document( + {"content": make_doc("gamma"), "source": "docS"} + ) + self.assertEqual(updated["status"], "updated") + # NB: score scales differ across backends (sqlite maps distance + # through 1/(1+d), so an orthogonal chunk still scores 0.5). + # Assert on text, the only backend-independent signal. + stale = [ + h + for h in handle_retrieve_context({"query": "beta"})["results"] + if "beta" in (h.get("text") or "") + ] + self.assertEqual(stale, []) + self.assertTrue(handle_retrieve_context({"query": "gamma"})["results"]) + + removed = handle_remove_document({"source": "docS"}) + self.assertEqual(removed["status"], "removed") + self.assertEqual(get_vector_store().count(), 0) + + def test_sqlite_multi_document_isolation(self): + handle_store_document( + { + "content": make_doc("harbor", "vessel"), + "source": "nav_docs", + "authority": "official", + } + ) + handle_store_document( + { + "content": make_doc("ledger", "invoice"), + "source": "fin_docs", + "authority": "draft", + "version": "v2", + } + ) + + nav = [ + h + for h in handle_retrieve_context({"query": "vessel"})["results"] + if "vessel" in (h.get("text") or "") + ] + self.assertTrue(nav) + self.assertEqual(nav[0]["source"], "nav_docs") + self.assertEqual(nav[0]["authority"], "official") + self.assertEqual(nav[0]["status"], "active") + self.assertTrue(nav[0]["hash"]) + + # Updating one document must leave the other untouched. + updated = handle_update_document( + {"content": make_doc("anchor"), "source": "nav_docs"} + ) + self.assertEqual(updated["status"], "updated") + fin = [ + h + for h in handle_retrieve_context({"query": "invoice"})["results"] + if "invoice" in (h.get("text") or "") + ] + self.assertTrue(fin) + self.assertEqual(fin[0]["source"], "fin_docs") + self.assertEqual(fin[0]["authority"], "draft") + vessel_stale = [ + h + for h in handle_retrieve_context({"query": "vessel"})["results"] + if "vessel" in (h.get("text") or "") + ] + self.assertEqual(vessel_stale, []) + + # Removing the other document must leave the first intact. + removed = handle_remove_document({"source": "fin_docs", "version": "v2"}) + self.assertEqual(removed["status"], "removed") + anchor = [ + h + for h in handle_retrieve_context({"query": "anchor"})["results"] + if "anchor" in (h.get("text") or "") + ] + self.assertTrue(anchor and anchor[0]["source"] == "nav_docs") + ledger_stale = [ + h + for h in handle_retrieve_context({"query": "ledger"})["results"] + if "ledger" in (h.get("text") or "") + ] + self.assertEqual(ledger_stale, []) + + def test_sqlite_update_rolls_back_on_write_failure(self): + # Persistent path: removal is a direct delete_vectors, so the + # rollback has to re-store the snapshotted rows (plain lists, + # not arrays) when the new write fails. + handle_store_document( + { + "content": make_doc("oldterm", "legacy"), + "source": "handbook", + "authority": "official", + } + ) + store = get_vector_store() + real_store_vectors = store.store_vectors + + def failing_write(vectors, metas): + if any("phoenix" in (m.get("text") or "") for m in metas): + raise RuntimeError("simulated write failure") + return real_store_vectors(vectors, metas) + + with patch.object(store, "store_vectors", side_effect=failing_write): + result = handle_update_document( + {"content": make_doc("phoenix"), "source": "handbook"} + ) + self.assertIn("error", result) + self.assertEqual(get_vector_store().count(), 2) + old = [ + h + for h in handle_retrieve_context({"query": "oldterm"})["results"] + if "oldterm" in (h.get("text") or "") + ] + self.assertTrue(old and old[0]["source"] == "handbook") + + def test_sqlite_without_db_path_raises(self): + os.environ.pop("SEMANTICA_VECTOR_DB_PATH", None) + with self.assertRaises(ValueError): + get_vector_store() + + +class TestPersistence(InmemoryBackendTestBase): + def test_store_persists_and_reloads(self): + tmpdir = tempfile.mkdtemp(prefix="semantica_vec_test_") + try: + os.environ["SEMANTICA_VECTOR_PATH"] = tmpdir + result = handle_store_document( + {"content": make_doc("persist"), "source": "docP", "authority": "official"} + ) + self.assertTrue(result["persisted"]) + self.assertTrue(os.path.isfile(os.path.join(tmpdir, "store_data.json"))) + + # Fresh session state: the store must reload from disk. + reset_vector_store() + hits = handle_retrieve_context({"query": "persist"})["results"] + self.assertTrue(hits and "persist" in hits[0]["text"]) + self.assertEqual(hits[0]["source"], "docP") + finally: + import shutil + + shutil.rmtree(tmpdir, ignore_errors=True) + + def test_persist_failure_is_reported_not_silent(self): + tmpdir = tempfile.mkdtemp(prefix="semantica_vec_test_") + try: + os.environ["SEMANTICA_VECTOR_PATH"] = tmpdir + store = get_vector_store() + with patch.object(store, "save", side_effect=RuntimeError("disk full")): + result = handle_store_document( + {"content": make_doc("volatile"), "source": "docV", "authority": "official"} + ) + # The write itself succeeded; only the durable copy failed. + self.assertEqual(result["status"], "stored") + self.assertFalse(result["persisted"]) + finally: + import shutil + + shutil.rmtree(tmpdir, ignore_errors=True) + + def test_reload_dimension_mismatch_rejected(self): + tmpdir = tempfile.mkdtemp(prefix="semantica_vec_test_") + try: + os.environ["SEMANTICA_VECTOR_PATH"] = tmpdir + handle_store_document( + {"content": make_doc("persist"), "source": "docP", "authority": "official"} + ) + # A different embedder dimension must not silently rank + # vectors from an incompatible embedding space. + session._embedder = FakeEmbedder(32) + reset_vector_store() + with self.assertRaises(ValueError) as ctx: + get_vector_store() + self.assertIn("dimension", str(ctx.exception)) + finally: + import shutil + + shutil.rmtree(tmpdir, ignore_errors=True) + + def test_corrupt_store_fails_on_startup(self): + """A broken persisted store must raise immediately, not silently + fall back to an empty store that would overwrite the user's data + on the first persist.""" + tmpdir = tempfile.mkdtemp(prefix="semantica_vec_test_") + try: + # Drop a file that looks like a store directory but won't load. + with open(os.path.join(tmpdir, "store_data.json"), "w") as f: + f.write("{not valid json") + os.environ["SEMANTICA_VECTOR_PATH"] = tmpdir + reset_vector_store() + with self.assertRaises(ValueError) as ctx: + get_vector_store() + self.assertIn("Could not load", str(ctx.exception)) + finally: + import shutil + + shutil.rmtree(tmpdir, ignore_errors=True) + + +if __name__ == "__main__": + unittest.main() From 07c74cc544225a8e23e1b02cc026687e7930c996 Mon Sep 17 00:00:00 2001 From: Sameer Kadam Date: Mon, 7 Sep 2026 18:09:17 +0530 Subject: [PATCH 04/14] feat(faiss): add native vector deletion support (#1507) Adds native vector deletion support for FAISS Flat indices via remove_ids and IDSelectorBatch (Closes #1374): - Adds FAISSIndex.delete_vectors() and FAISSStore.delete_vectors() to translate external string IDs to sequential internal positions, remove vectors via remove_ids, and keep vector_ids and metadata parallel with the compacted index. - Auto-saves index and metadata sidecar after deletion when the store was loaded from disk via load_index(), skipping redundant disk writes for no-op deletions. - Rejects IVF and HNSW index deletions with NotImplementedError: IVF does not compact internal labels upon remove_ids (causing search/offset desynchronization), and HNSW lacks remove_ids entirely. Both cleanly map to STATUS_UNSUPPORTED in ErasureCoordinator. Robust ID Management & Invariant Hardening: - Generates default IDs with a monotonic candidate-check loop against existing vector_ids, eliminating collisions and metadata overwrites when explicit vec_N IDs coexist. - Persists next_id in the .meta.json sidecar and clamps on load() to max(persisted, max(vec_N) + 1), preventing stale sidecars from re-introducing collisions across restarts or legacy migrations. - Guards against FAISS -1 sentinels (0 <= idx < len(vector_ids)) in search results when k > ntotal, preventing negative index wrapping to vector_ids[-1]. - Replaces bare post-delete assert with an explicit ProcessingError check that survives python -O. Adds 43 comprehensive tests in test_faiss_delete_vectors.py covering deletion, search exclusion, metadata cleanup, persistence roundtrips, IVF/HNSW rejection, ErasureCoordinator receipts, and mock-spied deterministic no-op saves. --- semantica/context/erasure.py | 21 +- semantica/vector_store/faiss_store.py | 216 +++++- .../vector_store/test_faiss_delete_vectors.py | 662 ++++++++++++++++++ 3 files changed, 881 insertions(+), 18 deletions(-) create mode 100644 tests/vector_store/test_faiss_delete_vectors.py diff --git a/semantica/context/erasure.py b/semantica/context/erasure.py index 42fb2f51..8bcf7105 100644 --- a/semantica/context/erasure.py +++ b/semantica/context/erasure.py @@ -14,13 +14,15 @@ not. It *composes* the existing public APIs; nothing in ``context_graph.py`` or ``agent_memory.py`` changes, and ``ContextGraph`` keeps its graph-scope contract. -The property that matters is honest partial reporting. FAISS exposes no delete -at all -- a flat FAISS index cannot remove individual vectors without a full -rebuild -- so erasure is genuinely not completable on it today. Milvus and -Weaviate now expose ``delete_vectors`` and are fully supported. The receipt -says ``unsupported`` for FAISS rather than reporting a success it did not -achieve -- a receipt that reads -"graph: erased, memory: 14 erased, vectors: unsupported on faiss" is +The property that matters is honest partial reporting. FAISS Flat indices now +expose ``delete_vectors`` backed by native ``remove_ids``, so erasure is +completable on them. FAISS IVF indices explicitly reject deletion because +their internal labels are not compacted after ``remove_ids``, which would +desynchronize search results from the ``vector_ids`` mapping. HNSW does not +implement ``remove_ids`` at all. Both IVF and HNSW report ``unsupported``. +Milvus and Weaviate are also fully supported. The receipt says ``unsupported`` +rather than reporting a success it did not achieve -- a receipt that reads +"graph: erased, memory: 14 erased, vectors: unsupported on faiss/hnsw" is actionable; a bare ``True`` is a compliance liability. Example: @@ -379,8 +381,9 @@ class ErasureCoordinator: method_name, target = _vector_delete_capability(self.vector_store) if method_name is None: - # FAISS exposes no delete at all; it cannot remove vectors from a - # flat index without a full rebuild. + # FAISS HNSW does not implement remove_ids and FAISS IVF + # does not compact labels after remove_ids. Only Flat indices + # currently support deletion via this code path. self.logger.warning( "Vector backend %r exposes no delete; %d vector id(s) for %r " "were not erased", diff --git a/semantica/vector_store/faiss_store.py b/semantica/vector_store/faiss_store.py index 717b9e6e..f02595ec 100644 --- a/semantica/vector_store/faiss_store.py +++ b/semantica/vector_store/faiss_store.py @@ -128,6 +128,11 @@ class FAISSIndex: self.index_type = index_type self.vector_ids: List[str] = [] self.metadata: Dict[str, Dict[str, Any]] = {} + # Monotonic counter for default ID generation, mirroring FAISSStore._next_id. + # Persisted in the .meta.json sidecar so that load_index restores the + # correct value rather than deriving it from ntotal (which underestimates + # when vectors have been deleted and sparse gaps exist). + self.next_id: int = 0 def add_vectors(self, vectors: np.ndarray, ids: Optional[List[str]] = None): """ @@ -199,6 +204,98 @@ class FAISSIndex: """Get metadata by ID.""" return self.metadata.get(vector_id) + def delete_vectors(self, vector_ids_to_delete: List[str]) -> Dict[str, Any]: + """Remove vectors by their external string IDs. + + Translates each requested external ID to its sequential internal FAISS + position, calls ``index.remove_ids`` with an ``IDSelectorBatch`` of + those positions, then updates ``vector_ids`` and ``metadata`` to match + the compacted index. The invariant ``len(self.vector_ids) == + self.index.ntotal`` is re-checked after the operation. + + **Persistence:** the deletion is in-memory only. Call + :meth:`FAISSStore.save_index` afterwards to write the updated state to + disk; without that call the deleted vectors will reappear on the next + process restart. + + Args: + vector_ids_to_delete: External string IDs to remove. Unknown IDs + are silently ignored. Duplicate entries are deduplicated. + + Returns: + ``{"delete_count": N}`` where *N* is the number of vectors + actually removed from the FAISS index (0 if none existed). + + Raises: + NotImplementedError: If the underlying FAISS index type does not + support ``remove_ids`` (e.g. ``IndexHNSWFlat``). No state is + mutated before this is raised. + ProcessingError: For any other unexpected FAISS error. + """ + if not vector_ids_to_delete: + return {"delete_count": 0} + + delete_set = set(vector_ids_to_delete) + + # Map external string IDs to sequential internal FAISS positions. + positions = [ + pos + for pos, vid in enumerate(self.vector_ids) + if vid in delete_set + ] + if not positions: + return {"delete_count": 0} + + # IVF-family indices (IndexIVFFlat, etc.) do NOT compact their internal + # labels after remove_ids: the surviving vectors keep their original + # sequential labels. The current architecture interprets search-result + # labels as offsets into vector_ids, so a non-compacting removal would + # silently return wrong external IDs and cause IndexError on labels + # beyond the compacted list length. Raise NotImplementedError here so + # callers get STATUS_UNSUPPORTED rather than silent data corruption. + # (Flat and PQ indices DO compact labels, so they are safe.) + if FAISS_AVAILABLE and isinstance(self.index, faiss.IndexIVF): + raise NotImplementedError( + f"The underlying FAISS index type ({type(self.index).__name__}) " + "does not compact internal labels after remove_ids, which would " + "desynchronize search labels from the vector_ids mapping. Use a " + "Flat index for deletion support, or rebuild the IVF index without " + "the deleted vectors." + ) + + sel = faiss.IDSelectorBatch(np.array(positions, dtype=np.int64)) + try: + removed = self.index.remove_ids(sel) + except RuntimeError as exc: + if "not implemented" in str(exc).lower(): + # HNSW and a handful of other index types do not implement + # remove_ids. Raise NotImplementedError so callers (and the + # ErasureCoordinator) can distinguish "unsupported" from a + # transient failure worth retrying. + raise NotImplementedError( + f"The underlying FAISS index type " + f"({type(self.index).__name__}) does not support " + "remove_ids(). Use a Flat index for deletion support, " + "or rebuild the index without the deleted vectors." + ) from exc + raise ProcessingError(f"FAISS remove_ids failed: {exc}") from exc + + # Keep state consistent: update the Python-side list and metadata + # dict to mirror the now-compacted FAISS array. The list comprehension + # cannot raise, so the index and its metadata are always updated + # together (no partial-mutation window). + self.vector_ids = [vid for vid in self.vector_ids if vid not in delete_set] + for vid in delete_set: + self.metadata.pop(vid, None) + + if len(self.vector_ids) != self.index.ntotal: + raise ProcessingError( + f"FAISSIndex invariant broken after delete_vectors: " + f"vector_ids={len(self.vector_ids)}, ntotal={self.index.ntotal}. " + "This indicates a bug in FAISS remove_ids or the deletion logic." + ) + return {"delete_count": removed} + def save(self, path: Union[str, Path]): """Save index to disk. @@ -223,6 +320,7 @@ class FAISSIndex: "metadata": self.metadata, "dimension": self.dimension, "index_type": self.index_type, + "next_id": self.next_id, }, cls=_LosslessJSONEncoder, ) @@ -262,6 +360,12 @@ class FAISSIndex: if persisted_index_type is not None: index_type = persisted_index_type + # Restore the monotonic ID counter. Older sidecar files written + # before this field was added will not have the key; fall back to + # ntotal, which equals the counter value for stores that have never + # had a deletion (no gaps in label space). + persisted_next_id = data.get("next_id") + # Check for vector count vs sidecar ID count mismatch if len(vector_ids) != index.ntotal: raise ProcessingError( @@ -279,10 +383,28 @@ class FAISSIndex: ) vector_ids = [] metadata = {} + persisted_next_id = None obj = cls(index, dimension, index_type) obj.vector_ids = vector_ids obj.metadata = metadata + # Restore the monotonic counter. Always clamp to at least the + # highest inferred vec_N ID, so a stale or corrupted persisted value + # (e.g. written before a deletion that shifted the gap) cannot cause + # future default IDs to collide with existing vector IDs. + _vec_nums = [ + int(v[4:]) + 1 + for v in vector_ids + if v.startswith("vec_") and v[4:].isdigit() + ] + _inferred = max(_vec_nums) if _vec_nums else index.ntotal + if persisted_next_id is not None: + # Trust the persisted value but never go below the inferred minimum + # (guards against stale/corrupted sidecars). + obj.next_id = max(int(persisted_next_id), _inferred) + else: + # Older sidecar files lack this field. Use the inferred value. + obj.next_id = _inferred return obj @@ -315,7 +437,7 @@ class FAISSSearch: results = [] for i, (dist, idx) in enumerate(zip(distances[0], indices[0])): - if idx < len(self.index.vector_ids): + if idx < len(self.index.vector_ids) and idx >= 0: vector_id = self.index.vector_ids[idx] dist_val = float(dist) @@ -422,6 +544,12 @@ class FAISSStore: self.index: Optional[FAISSIndex] = None self.index_builder = FAISSIndexBuilder(dimension) self.search_engine: Optional[FAISSSearch] = None + # Path remembered by load_index so delete_vectors can auto-save. + self._index_path: Optional[Path] = None + # Monotonic counter for default ID generation. Incremented on every + # successful add, never decremented on deletion, so ids generated by + # consecutive add_vectors calls can never collide with surviving IDs. + self._next_id: int = 0 # Check FAISS availability if not FAISS_AVAILABLE: @@ -498,13 +626,25 @@ class FAISSStore: vectors = vectors.astype(np.float32) - # Generate IDs if not provided + # Generate IDs if not provided. Use a monotonic counter so + # that default IDs never collide with surviving IDs after a + # deletion (len(vector_ids) would decrease, potentially reusing + # a label that still exists in the index). if ids is None: - ids = [ - f"vec_{len(self.index.vector_ids) + i}" for i in range(len(vectors)) - ] + _existing = set(self.index.vector_ids) + generated: List[str] = [] + while len(generated) < len(vectors): + cand = f"vec_{self._next_id}" + self._next_id += 1 + if cand not in _existing: + generated.append(cand) + _existing.add(cand) + ids = generated + # Sync FAISSIndex.next_id so save() persists the correct value. + self.index.next_id = self._next_id - # Store metadata + # Assign metadata before the duplicate-skip filter so callers + # always get up-to-date metadata even for already-present ids. if metadata: self.progress_tracker.update_tracking( tracking_id, message="Storing metadata..." @@ -625,6 +765,12 @@ class FAISSStore: self.index = FAISSIndex.load(path, self.dimension, index_type) self.search_engine = FAISSSearch(self.index) + # Remember the path so delete_vectors can auto-save to the same location. + self._index_path = path + # Restore the monotonic counter from the sidecar (via FAISSIndex.next_id) + # rather than using ntotal. After a deletion ntotal is smaller than the + # highest generated ID, so ntotal would cause ID collisions on the next add. + self._next_id = self.index.next_id self.logger.info(f"Loaded FAISS index from {path}") return self.index @@ -735,10 +881,62 @@ class FAISSStore: """Return the number of vectors currently tracked in this store. Returns the length of the ``vector_ids`` list maintained by - ``FAISSIndex``. FAISSStore does not implement vector deletion, so - this list is strictly append-only and is always consistent with the - underlying FAISS index (``index.ntotal``). + ``FAISSIndex``. This list is always kept consistent with the + underlying FAISS index (``index.ntotal``), including after deletions. """ if self.index is None: return 0 return len(self.index.vector_ids) + + def delete_vectors(self, vector_ids: List[str], **options) -> Dict[str, Any]: + """Delete vectors by their external string IDs. + + Delegates to :meth:`FAISSIndex.delete_vectors`. When the store was + loaded from disk via :meth:`load_index`, the updated index and sidecar + are written back to disk before this method returns, so the deletion is + durable across process restarts without the caller needing a separate + :meth:`save_index` call. Note: only the ``.meta.json`` sidecar write + is atomic (temp-file + rename); the ``.faiss`` binary is written in + place. A process crash between those two writes would leave the files + inconsistent, but the mismatch guard in :meth:`FAISSIndex.load` would + detect it on the next load rather than silently returning wrong data. + + No-op deletions (all requested IDs unknown, or empty input) do not + trigger a disk write. + + When the store was created in memory (no :meth:`load_index` call), the + deletion is in-memory only and the caller must invoke + :meth:`save_index` to persist it. + + IVF indices do not support deletion because their internal labels do + not compact after ``remove_ids``, which would desynchronize search + labels from the ``vector_ids`` mapping. HNSW indices also do not + support ``remove_ids``. Both raise ``NotImplementedError``, which the + :class:`ErasureCoordinator` translates to ``STATUS_UNSUPPORTED``. + + Args: + vector_ids: External string IDs to delete. Unknown IDs are + silently ignored. Duplicates are deduplicated. + **options: Accepted for API parity with other backends; unused. + + Returns: + ``{"delete_count": N}`` + + Raises: + ProcessingError: If no index has been initialized. + NotImplementedError: If the underlying index type (IVF or HNSW) + does not support safe deletion. + """ + if self.index is None: + raise ProcessingError( + "Index not initialized. Call create_index() first." + ) + result = self.index.delete_vectors(vector_ids) + # If the store was loaded from disk (load_index recorded the path), + # persist the deletion so that the vectors cannot be resurrected by a + # process restart. Only write when something was actually removed: + # a no-op deletion (all IDs unknown or empty list) must not trigger + # a full index rewrite. + if self._index_path is not None and result.get("delete_count", 0) > 0: + self.index.save(self._index_path) + return result diff --git a/tests/vector_store/test_faiss_delete_vectors.py b/tests/vector_store/test_faiss_delete_vectors.py new file mode 100644 index 00000000..5c98cd11 --- /dev/null +++ b/tests/vector_store/test_faiss_delete_vectors.py @@ -0,0 +1,662 @@ +"""Tests for FAISSIndex.delete_vectors and FAISSStore.delete_vectors (#1374).""" + +import numpy as np +import pytest + +from semantica.context.erasure import ( + STATUS_ERASED, + STATUS_UNSUPPORTED, + ErasureCoordinator, +) +from semantica.utils.exceptions import ProcessingError +from semantica.vector_store import VectorStore +from semantica.vector_store.faiss_store import FAISSIndex, FAISSStore + + +# --------------------------------------------------------------------------- +# Fixtures and helpers +# --------------------------------------------------------------------------- + + +def _flat_index(dim: int = 3) -> "faiss.IndexFlatL2": # noqa: F821 + faiss = pytest.importorskip("faiss") + return faiss.IndexFlatL2(dim) + + +def _populated_store( + dim: int = 3, + ids=("a", "b", "c", "d", "e"), + meta=None, +): + """Return an FAISSStore with *ids* already inserted (random unit vectors).""" + faiss = pytest.importorskip("faiss") + store = FAISSStore(dimension=dim) + n = len(ids) + rng = np.random.default_rng(seed=42) + vectors = rng.random((n, dim)).astype(np.float32) + metadata = meta or [{} for _ in ids] + store.add_vectors(vectors, ids=list(ids), metadata=metadata) + return store + + +def _populated_index(dim: int = 3, ids=("a", "b", "c", "d", "e")): + """Return a bare FAISSIndex with *ids* inserted (random unit vectors).""" + faiss = pytest.importorskip("faiss") + idx = FAISSIndex(faiss.IndexFlatL2(dim), dimension=dim) + n = len(ids) + rng = np.random.default_rng(seed=42) + vectors = rng.random((n, dim)).astype(np.float32) + idx.add_vectors(vectors, ids=list(ids)) + return idx + + +# --------------------------------------------------------------------------- +# FAISSIndex-level unit tests +# --------------------------------------------------------------------------- + + +class TestFAISSIndexDeleteVectors: + def test_delete_single_existing_id(self): + idx = _populated_index() + result = idx.delete_vectors(["b"]) + assert result == {"delete_count": 1} + assert "b" not in idx.vector_ids + assert idx.index.ntotal == len(idx.vector_ids) == 4 + + def test_delete_multiple_existing_ids(self): + idx = _populated_index() + result = idx.delete_vectors(["b", "d"]) + assert result == {"delete_count": 2} + assert "b" not in idx.vector_ids + assert "d" not in idx.vector_ids + assert sorted(idx.vector_ids) == ["a", "c", "e"] + assert idx.index.ntotal == 3 + + def test_delete_nonexistent_id_is_noop(self): + idx = _populated_index() + result = idx.delete_vectors(["z"]) + assert result == {"delete_count": 0} + assert len(idx.vector_ids) == 5 + assert idx.index.ntotal == 5 + + def test_delete_empty_list_is_noop(self): + idx = _populated_index() + result = idx.delete_vectors([]) + assert result == {"delete_count": 0} + assert len(idx.vector_ids) == 5 + + def test_delete_duplicate_ids_in_request_only_removes_once(self): + idx = _populated_index() + result = idx.delete_vectors(["b", "b", "b"]) + assert result == {"delete_count": 1} + assert "b" not in idx.vector_ids + assert len(idx.vector_ids) == 4 + + def test_delete_count_reflects_actual_removal(self): + idx = _populated_index() + # "z" doesn't exist; only "a" and "c" do + result = idx.delete_vectors(["a", "c", "z"]) + assert result == {"delete_count": 2} + + def test_metadata_removed_for_deleted_id(self): + faiss = pytest.importorskip("faiss") + idx = FAISSIndex(faiss.IndexFlatL2(3), dimension=3) + vectors = np.eye(3, dtype=np.float32)[:2] + idx.add_vectors(vectors, ids=["x", "y"]) + idx.metadata = {"x": {"val": 1}, "y": {"val": 2}} + idx.delete_vectors(["x"]) + assert "x" not in idx.metadata + assert "y" in idx.metadata + + def test_vector_ids_list_stays_parallel_to_faiss_ntotal(self): + idx = _populated_index(ids=["a", "b", "c"]) + idx.delete_vectors(["b"]) + assert len(idx.vector_ids) == idx.index.ntotal == 2 + + def test_search_does_not_return_deleted_id(self): + """After deletion, similarity search must not return the deleted ID.""" + faiss = pytest.importorskip("faiss") + idx = FAISSIndex(faiss.IndexFlatL2(3), dimension=3) + vectors = np.array( + [[1.0, 0.0, 0.0], [0.0, 1.0, 0.0], [0.0, 0.0, 1.0]], dtype=np.float32 + ) + idx.add_vectors(vectors, ids=["a", "b", "c"]) + idx.delete_vectors(["b"]) + + query = np.array([[0.0, 1.0, 0.0]], dtype=np.float32) + distances, indices = idx.search(query, k=3) + # Filter both negative sentinels (-1) and out-of-range indices. + returned_ids = [ + idx.vector_ids[i] + for i in indices[0] + if 0 <= i < len(idx.vector_ids) + ] + assert "b" not in returned_ids + + def test_get_vector_returns_none_after_deletion(self): + faiss = pytest.importorskip("faiss") + idx = FAISSIndex(faiss.IndexFlatL2(3), dimension=3) + vectors = np.eye(3, dtype=np.float32) + idx.add_vectors(vectors, ids=["a", "b", "c"]) + idx.delete_vectors(["b"]) + assert idx.get_vector("b") is None + + def test_get_metadata_returns_none_after_deletion(self): + faiss = pytest.importorskip("faiss") + idx = FAISSIndex(faiss.IndexFlatL2(3), dimension=3) + idx.add_vectors(np.eye(3, dtype=np.float32)[:2], ids=["a", "b"]) + idx.metadata = {"a": {"k": 1}, "b": {"k": 2}} + idx.delete_vectors(["b"]) + assert idx.get_metadata("b") is None + + def test_add_vectors_after_deletion_works(self): + """Inserting new vectors after deletion maintains correct position mapping.""" + idx = _populated_index(ids=["a", "b", "c"]) + idx.delete_vectors(["b"]) + new_vecs = np.array([[0.5, 0.5, 0.0]], dtype=np.float32) + idx.add_vectors(new_vecs, ids=["new"]) + assert "new" in idx.vector_ids + assert len(idx.vector_ids) == idx.index.ntotal == 3 + + def test_save_load_after_deletion_preserves_state(self, tmp_path): + """Deletion persists correctly through save/load round-trip.""" + _ = pytest.importorskip("faiss") + idx = _populated_index(ids=["a", "b", "c"]) + idx.delete_vectors(["b"]) + + path = tmp_path / "idx.faiss" + idx.save(path) + loaded = FAISSIndex.load(path, dimension=3) + + assert "b" not in loaded.vector_ids + assert sorted(loaded.vector_ids) == ["a", "c"] + assert loaded.index.ntotal == 2 + + def test_hnsw_delete_raises_not_implemented(self): + """HNSW does not support remove_ids; must raise NotImplementedError.""" + faiss = pytest.importorskip("faiss") + hnsw = FAISSIndex(faiss.IndexHNSWFlat(4, 16), dimension=4) + vecs = np.random.rand(5, 4).astype(np.float32) + hnsw.add_vectors(vecs, ids=["a", "b", "c", "d", "e"]) + with pytest.raises(NotImplementedError): + hnsw.delete_vectors(["a"]) + # Python-side state must be untouched + assert len(hnsw.vector_ids) == 5 + + def test_ivf_delete_raises_not_implemented(self): + """IVF does not compact labels after remove_ids; raise NotImplementedError. + + IVF surviving labels stay sparse (0,2,4 not 0,1,2), so the list-compact + approach used by Flat would desynchronize search labels from vector_ids. + """ + faiss = pytest.importorskip("faiss") + dim = 4 + train = np.random.rand(80, dim).astype(np.float32) + q = faiss.IndexFlatL2(dim) + ivf = faiss.IndexIVFFlat(q, dim, 2) + ivf.train(train) + idx = FAISSIndex(ivf, dimension=dim) + vecs = np.random.rand(5, dim).astype(np.float32) + idx.add_vectors(vecs, ids=["a", "b", "c", "d", "e"]) + with pytest.raises(NotImplementedError): + idx.delete_vectors(["b"]) + # Python-side state must be completely untouched + assert idx.vector_ids == ["a", "b", "c", "d", "e"] + + +# --------------------------------------------------------------------------- +# FAISSStore-level unit tests +# --------------------------------------------------------------------------- + + +class TestFAISSStoreDeleteVectors: + def test_delete_uninitialized_index_raises_processing_error(self): + store = FAISSStore(dimension=3) + with pytest.raises(ProcessingError, match="Index not initialized"): + store.delete_vectors(["a"]) + + def test_delete_existing_id_returns_dict(self): + _ = pytest.importorskip("faiss") + store = _populated_store(ids=["a", "b", "c"]) + result = store.delete_vectors(["b"]) + assert result == {"delete_count": 1} + + def test_delete_reduces_count(self): + _ = pytest.importorskip("faiss") + store = _populated_store(ids=["a", "b", "c"]) + assert store.count() == 3 + store.delete_vectors(["b"]) + assert store.count() == 2 + + def test_delete_multiple_ids(self): + _ = pytest.importorskip("faiss") + store = _populated_store(ids=["a", "b", "c", "d"]) + result = store.delete_vectors(["a", "c"]) + assert result == {"delete_count": 2} + assert store.count() == 2 + + def test_delete_empty_input_is_noop(self): + _ = pytest.importorskip("faiss") + store = _populated_store(ids=["a", "b"]) + result = store.delete_vectors([]) + assert result == {"delete_count": 0} + assert store.count() == 2 + + def test_delete_nonexistent_id_is_zero(self): + _ = pytest.importorskip("faiss") + store = _populated_store(ids=["a", "b"]) + result = store.delete_vectors(["z"]) + assert result == {"delete_count": 0} + assert store.count() == 2 + + def test_duplicate_ids_in_request(self): + _ = pytest.importorskip("faiss") + store = _populated_store(ids=["a", "b"]) + result = store.delete_vectors(["a", "a"]) + assert result == {"delete_count": 1} + assert store.count() == 1 + + def test_metadata_cleaned_up(self): + _ = pytest.importorskip("faiss") + store = _populated_store( + ids=["a", "b"], + meta=[{"owner": "alice"}, {"owner": "bob"}], + ) + store.delete_vectors(["a"]) + assert store.get_metadata("a") is None + assert store.get_metadata("b") == {"owner": "bob"} + + def test_get_vector_returns_none_after_deletion(self): + _ = pytest.importorskip("faiss") + store = _populated_store(ids=["a", "b"]) + store.delete_vectors(["a"]) + assert store.get_vector("a") is None + + def test_search_excludes_deleted_vector(self): + """search_similar must not return a deleted vector's ID.""" + faiss = pytest.importorskip("faiss") + store = FAISSStore(dimension=3) + vectors = np.array( + [[1.0, 0.0, 0.0], [0.0, 1.0, 0.0], [0.0, 0.0, 1.0]], dtype=np.float32 + ) + store.add_vectors(vectors, ids=["a", "b", "c"]) + store.delete_vectors(["b"]) + query = np.array([0.0, 1.0, 0.0], dtype=np.float32) + results = store.search_similar(query, k=3) + returned_ids = [r["id"] for r in results] + assert "b" not in returned_ids + + def test_add_vectors_after_deletion(self): + _ = pytest.importorskip("faiss") + store = _populated_store(ids=["a", "b", "c"]) + store.delete_vectors(["b"]) + vecs = np.array([[0.5, 0.5, 0.0]], dtype=np.float32) + store.add_vectors(vecs, ids=["new"]) + assert store.count() == 3 + assert store.get_vector("new") is not None + + def test_save_load_after_deletion(self, tmp_path): + """Deleted vectors do not reappear after save/load.""" + _ = pytest.importorskip("faiss") + store = _populated_store(ids=["a", "b", "c"]) + store.delete_vectors(["b"]) + + path = tmp_path / "store.faiss" + store.save_index(path) + + fresh = FAISSStore(dimension=3) + fresh.load_index(path) + + assert fresh.count() == 2 + assert "b" not in fresh.index.vector_ids + assert fresh.get_vector("b") is None + + def test_options_kwarg_is_accepted_and_ignored(self): + """delete_vectors(**options) must not crash even with extra kwargs.""" + _ = pytest.importorskip("faiss") + store = _populated_store(ids=["a"]) + result = store.delete_vectors(["a"], unused_option=True) + assert result["delete_count"] == 1 + + def test_hnsw_raises_not_implemented(self): + """FAISSStore.delete_vectors on HNSW must propagate NotImplementedError.""" + faiss = pytest.importorskip("faiss") + store = FAISSStore(dimension=4) + store.create_index(index_type="hnsw", metric="L2") + vecs = np.random.rand(5, 4).astype(np.float32) + store.add_vectors(vecs, ids=["a", "b", "c", "d", "e"]) + with pytest.raises(NotImplementedError): + store.delete_vectors(["a"]) + # Count must be unchanged + assert store.count() == 5 + + def test_ivf_raises_not_implemented(self): + """FAISSStore.delete_vectors on IVF must raise NotImplementedError. + + IVF remove_ids preserves original labels rather than compacting them, + which would desynchronize search labels from vector_ids. + """ + faiss = pytest.importorskip("faiss") + store = FAISSStore(dimension=4) + # nlist=2 so we only need >= 2*39 = 78 training points + store.create_index(index_type="ivf", metric="L2", nlist=2) + train = np.random.rand(80, 4).astype(np.float32) + store.index.index.train(train) + store.add_vectors(train[:5], ids=["a", "b", "c", "d", "e"]) + with pytest.raises(NotImplementedError): + store.delete_vectors(["a"]) + # State must be completely unchanged + assert store.count() == 5 + + def test_delete_with_loaded_index_auto_saves(self, tmp_path): + """Deletion on a store loaded from disk auto-saves without explicit save_index.""" + _ = pytest.importorskip("faiss") + # Create, populate, save + store = _populated_store(ids=["a", "b", "c"]) + path = tmp_path / "store.faiss" + store.save_index(path) + + # Load into a fresh store and delete + loaded = FAISSStore(dimension=3) + loaded.load_index(path) + loaded.delete_vectors(["b"]) + + # Reload without any additional save call — deletion must have persisted + reloaded = FAISSStore(dimension=3) + reloaded.load_index(path) + assert reloaded.count() == 2 + assert "b" not in reloaded.index.vector_ids + + def test_default_id_no_collision_after_deletion(self): + """Default vec_N IDs must not reuse a surviving ID after deletion.""" + _ = pytest.importorskip("faiss") + store = _populated_store(ids=["vec_0", "vec_1", "vec_2"]) + # Delete the middle one; len(vector_ids) drops to 2 + store.delete_vectors(["vec_1"]) + assert store.count() == 2 + + # Add a new vector — without the monotonic counter, the default ID + # would be vec_2 which already exists and would be silently skipped. + new_vecs = np.random.rand(1, 3).astype(np.float32) + returned_ids = store.add_vectors(new_vecs) + # The returned ID must not be an existing one + assert returned_ids[0] not in {"vec_0", "vec_2"}, ( + f"Default ID {returned_ids[0]} collides with a surviving ID" + ) + # And the vector must actually have been inserted + assert store.count() == 3 + + def test_default_id_skip_past_explicit_id(self): + """Blocker: default IDs must skip over explicit IDs already in the store. + + If a user inserts an explicit ``"vec_N"`` and then adds two vectors + without IDs, the generator must skip ``"vec_N"`` rather than + producing it and losing the second vector silently. + """ + _ = pytest.importorskip("faiss") + store = FAISSStore(dimension=3) + + # Explicit vec_1 first + store.add_vectors(np.ones((1, 3), dtype=np.float32), ids=["vec_1"]) + + # 2 default vectors — one would collide with vec_1 if not skipped + store.add_vectors(np.ones((2, 3), dtype=np.float32)) + + # 1 more default vector — must get a fresh ID, not re-generate a used one + original_meta = {vid: {"original": vid} for vid in store.index.vector_ids} + for vid, m in original_meta.items(): + store.index.metadata[vid] = m + count_before = store.count() + + ret = store.add_vectors( + np.ones((1, 3), dtype=np.float32), metadata=[{"new": True}] + ) + new_id = ret[0] + + assert store.count() == count_before + 1, ( + f"Vector was silently skipped; count stayed {store.count()}" + ) + assert new_id not in original_meta, ( + f"Generated ID {new_id!r} collides with an already-existing ID" + ) + # Surviving IDs' metadata must not be overwritten + for vid, m in original_meta.items(): + assert store.index.metadata.get(vid) == m, ( + f"Metadata for surviving {vid!r} was overwritten" + ) + + def test_stale_persisted_next_id_is_clamped_to_inferred_minimum(self, tmp_path): + """Regression: a stale ``next_id`` in the sidecar must be clamped to + at least ``max(vec_N)+1`` so that auto-save after deletion cannot + propagate the stale value and cause future ID collisions. + """ + import json as _json + _ = pytest.importorskip("faiss") + rng = np.random.default_rng(seed=3) + store = FAISSStore(dimension=3) + store.add_vectors(rng.random((5, 3)).astype(np.float32)) + # IDs are vec_0..vec_4, next_id=5 + path = tmp_path / "s.faiss" + store.save_index(path) + + # Corrupt the sidecar: set next_id to a stale low value + meta = _json.loads((tmp_path / "s.faiss.meta.json").read_text()) + meta["next_id"] = 2 # stale — vec_2, vec_3, vec_4 still exist + (tmp_path / "s.faiss.meta.json").write_text(_json.dumps(meta)) + + # Load and immediately delete one vector (auto-save fires) + s2 = FAISSStore(dimension=3) + s2.load_index(path) + assert s2._next_id == 5, f"Stale next_id should be clamped to 5, got {s2._next_id}" + s2.delete_vectors(["vec_3"]) # triggers auto-save + + # The sidecar must not carry the stale value forward + persisted = _json.loads((tmp_path / "s.faiss.meta.json").read_text()) + assert persisted["next_id"] >= 5, ( + f"Auto-save propagated stale next_id={persisted['next_id']} (expected >= 5)" + ) + + def test_search_does_not_return_phantom_id_when_k_exceeds_ntotal(self): + """Regression: when k > ntotal, FAISS returns -1 sentinel values. + ``-1 < len(vector_ids)`` is always True in Python, so without an + explicit non-negative guard ``-1`` maps to ``vector_ids[-1]``, + making the last vector appear as a spurious extra result. + """ + faiss = pytest.importorskip("faiss") + store = FAISSStore(dimension=3) + vecs = np.array([[1.0, 0.0, 0.0], [0.0, 1.0, 0.0]], dtype=np.float32) + store.add_vectors(vecs, ids=["only_a", "only_b"]) + + # Ask for 10 neighbors but only 2 exist + results = store.search_similar( + np.array([0.0, 1.0, 0.0], dtype=np.float32), k=10 + ) + returned_ids = [r["id"] for r in results] + assert len(results) == 2, ( + f"Expected exactly 2 results, got {len(results)}: {returned_ids}" + ) + assert returned_ids.count("only_b") == 1, ( + f"only_b appears {returned_ids.count('only_b')} time(s) — " + "sentinel -1 is mapping to vector_ids[-1]" + ) + + def test_next_id_persisted_across_delete_save_reload(self, tmp_path): + """Regression test for critical bug: delete → auto-save → reload → add. + + Without persisting ``next_id`` in the sidecar, ``load_index`` would + set ``_next_id = ntotal`` (4 after one deletion from 5 vectors), which + would generate ``"vec_4"`` as the next default ID. That ID is still + present in the surviving vector list, so the insertion would be + silently skipped, the count would not increase, and the old vector's + metadata would be overwritten by the new metadata. + + This test pins the full lifecycle so any regression is caught + immediately. + """ + _ = pytest.importorskip("faiss") + rng = np.random.default_rng(seed=7) + dim = 4 + + # Step 1: create vec_0 .. vec_4, record their embeddings + store1 = FAISSStore(dimension=dim) + vecs = rng.random((5, dim)).astype(np.float32) + store1.add_vectors(vecs) + for vid in store1.index.vector_ids: + store1.index.metadata[vid] = {"original": vid} + path = tmp_path / "idx.faiss" + store1.save_index(path) + + # Step 2: reload → delete vec_2 (auto-saves) → reload again + store2 = FAISSStore(dimension=dim) + store2.load_index(path) + store2.delete_vectors(["vec_2"]) # ntotal drops to 4; auto-save triggered + + store3 = FAISSStore(dimension=dim) + store3.load_index(path) + + # Step 3: add a new vector without an explicit ID + new_vec = rng.random((1, dim)).astype(np.float32) + count_before = store3.count() + returned_ids = store3.add_vectors(new_vec, metadata=[{"new": True}]) + + # The generated ID must not collide with any surviving ID + surviving = set(store3.index.vector_ids[:count_before]) + new_id = returned_ids[0] + assert new_id not in surviving, ( + f"Generated ID {new_id!r} collides with surviving ID " + f"(surviving={sorted(surviving)})" + ) + + # The new vector must actually have been inserted + assert store3.count() == count_before + 1, ( + f"Count did not increase: was {count_before}, still {store3.count()}" + ) + + # The new vector must be retrievable + assert store3.get_vector(new_id) is not None, ( + f"New vector with ID {new_id!r} is not retrievable" + ) + + # The surviving vec_4's embedding must be unchanged + original_vec4 = vecs[4] + loaded_vec4 = store3.get_vector("vec_4") + assert loaded_vec4 is not None + np.testing.assert_allclose(loaded_vec4, original_vec4, atol=1e-5, + err_msg="vec_4 embedding was corrupted by the new add") + + # The surviving vec_4's metadata must be unchanged + assert store3.index.metadata.get("vec_4") == {"original": "vec_4"}, ( + f"vec_4 metadata was overwritten: {store3.index.metadata.get('vec_4')}" + ) + + # The new vector's metadata must be the new value + assert store3.index.metadata.get(new_id) == {"new": True} + + def test_no_op_delete_does_not_rewrite_disk(self, tmp_path): + """A deletion of only nonexistent IDs must not call FAISSIndex.save(). + + Uses a spy on ``FAISSIndex.save`` rather than filesystem mtime so the + assertion is deterministic regardless of filesystem timestamp resolution. + """ + from unittest.mock import patch + _ = pytest.importorskip("faiss") + store = _populated_store(ids=["a", "b", "c"]) + path = tmp_path / "idx.faiss" + store.save_index(path) + + loaded = FAISSStore(dimension=3) + loaded.load_index(path) + + with patch.object(loaded.index, "save", wraps=loaded.index.save) as mock_save: + loaded.delete_vectors(["z"]) # nonexistent → delete_count 0 + loaded.delete_vectors([]) # empty list → delete_count 0 + assert mock_save.call_count == 0, ( + f"save() called {mock_save.call_count} time(s) for a no-op deletion" + ) + + # A real deletion must still trigger save() + loaded.delete_vectors(["b"]) + assert mock_save.call_count == 1, ( + f"save() was not called after a real deletion (calls={mock_save.call_count})" + ) + + +# --------------------------------------------------------------------------- +# Facade delegation test +# --------------------------------------------------------------------------- + + +class TestFAISSFacadeDelegation: + def test_vector_store_facade_delegates_to_faiss_store(self): + """VectorStore(backend='faiss').delete_vectors() must call FAISSStore.""" + _ = pytest.importorskip("faiss") + vs = VectorStore(backend="faiss", config={"dimension": 3}) + vecs = np.eye(3, dtype=np.float32) + vs.store_vectors(list(vecs), metadata=[{}, {}, {}]) + # Count before + assert vs._backend_store.count() == 3 + + result = vs.delete_vectors(["vec_0"]) + + assert result == {"delete_count": 1} + assert vs._backend_store.count() == 2 + + +# --------------------------------------------------------------------------- +# ErasureCoordinator integration tests +# --------------------------------------------------------------------------- + + +class TestFAISSErasureCoordinator: + def _faiss_vector_store(self, dim: int = 3) -> VectorStore: + _ = pytest.importorskip("faiss") + vs = VectorStore(backend="faiss", config={"dimension": dim}) + vecs = np.eye(dim, dtype=np.float32) + vs.store_vectors(list(vecs), metadata=[{}, {}, {}]) + return vs + + def test_erasure_reports_status_erased(self): + vs = self._faiss_vector_store() + # store_vectors assigns ids "vec_0", "vec_1", "vec_2" + vector_ids = vs._backend_store.index.vector_ids + coord = ErasureCoordinator(vector_store=vs) + receipt = coord.erase_entity(vector_ids[0], vector_ids=[vector_ids[0]]) + assert receipt.stores["vectors"]["status"] == STATUS_ERASED + + def test_erasure_backend_name_is_faiss(self): + vs = self._faiss_vector_store() + coord = ErasureCoordinator(vector_store=vs) + receipt = coord.erase_entity("vec_0", vector_ids=["vec_0"]) + assert receipt.stores["vectors"]["backend"] == "faiss" + + def test_erasure_receipt_is_complete_after_deletion(self): + vs = self._faiss_vector_store() + coord = ErasureCoordinator(vector_store=vs) + receipt = coord.erase_entity("vec_0", vector_ids=["vec_0"]) + assert receipt.complete + + def test_erasure_hnsw_reports_unsupported(self): + """HNSW deletion raises NotImplementedError; coordinator must report unsupported.""" + faiss = pytest.importorskip("faiss") + vs = VectorStore(backend="faiss", config={"dimension": 4}) + vs._backend_store.create_index(index_type="hnsw", metric="L2") + vecs = np.random.rand(5, 4).astype(np.float32) + vs._backend_store.add_vectors(vecs, ids=["a", "b", "c", "d", "e"]) + coord = ErasureCoordinator(vector_store=vs) + receipt = coord.erase_entity("a", vector_ids=["a"]) + assert receipt.stores["vectors"]["status"] == STATUS_UNSUPPORTED + assert not receipt.complete + + def test_erasure_ivf_reports_unsupported(self): + """IVF deletion raises NotImplementedError; coordinator must report unsupported.""" + faiss = pytest.importorskip("faiss") + dim = 4 + vs = VectorStore(backend="faiss", config={"dimension": dim}) + vs._backend_store.create_index(index_type="ivf", metric="L2", nlist=2) + train = np.random.rand(80, dim).astype(np.float32) + vs._backend_store.index.index.train(train) + vs._backend_store.add_vectors(train[:5], ids=["a", "b", "c", "d", "e"]) + coord = ErasureCoordinator(vector_store=vs) + receipt = coord.erase_entity("a", vector_ids=["a"]) + assert receipt.stores["vectors"]["status"] == STATUS_UNSUPPORTED + assert not receipt.complete From 86ffa05dd419f15673fcf20f57ae00bed5b5699b Mon Sep 17 00:00:00 2001 From: Zohaib Hassnain <109234410+ZohaibHassan16@users.noreply.github.com> Date: Mon, 7 Sep 2026 19:53:09 +0500 Subject: [PATCH 05/14] feat(deps): slim core dependencies and move 22 heavy packages to optional extras (#1513) - Reduce direct core dependencies in pyproject.toml from 44 to 22 - Move heavy and specialized packages into modular optional extras: * models-huggingface: torch, transformers * embeddings-local: sentence-transformers, fastembed, onnxruntime, tokenizers * nlp-spacy: spacy, thinc * viz: matplotlib, seaborn, plotly, ipywidgets, umap-learn (expanded) * media: librosa, opencv-python * vectorstore-faiss: faiss-cpu * documents: python-docx, openpyxl, lxml, beautifulsoup4 * ingest-git: GitPython * graph-embeddings: gensim - Update semantica[all] and semantica[vectorstore-all] to encompass all extras - Ensure lazy parser construction (DOCXParser, ExcelParser, HTMLParser, XMLParser) without error on __init__(), failing only inside .parse() with clear hints - Add stdlib xml.etree fallback in XMLParser when lxml is missing - Guard unguarded matplotlib imports in EmbeddingVisualizer and OntologyVisualizer - Standardize user-facing error messages to point to pip install 'semantica[extra]' - Bump version to 0.7.0 in pyproject.toml, semantica/__init__.py, and CITATION.cff - Add migration notes to README.md and CHANGELOG.md - Recompile CI and Docker requirements lockfiles - Add dedicated test suite tests/test_issue_1513_slim_core.py --- .github/requirements/base-deps.txt | 2950 ++-------------- .github/requirements/explorer-extra-py311.txt | 3132 ++--------------- .github/requirements/explorer-extra-py313.txt | 2648 -------------- CHANGELOG.md | 26 + CITATION.cff | 2 +- README.md | 60 +- pyproject.toml | 76 +- requirements-ci.txt | 1 + semantica/__init__.py | 2 +- semantica/cli.py | 16 +- semantica/embeddings/provider_stores.py | 2 +- semantica/embeddings/text_embedder.py | 6 +- semantica/export/vector_exporter.py | 2 +- semantica/ingest/__init__.py | 28 +- semantica/ingest/methods.py | 7 +- semantica/ingest/public_api_ingestor.py | 33 +- semantica/ingest/repo_ingestor.py | 10 +- semantica/ingest/xml_ingestor.py | 10 +- semantica/kg/node_embeddings.py | 2 +- semantica/parse/docx_parser.py | 26 +- semantica/parse/excel_parser.py | 11 +- semantica/parse/html_parser.py | 11 +- semantica/parse/methods.py | 24 +- semantica/parse/web_parser.py | 17 +- semantica/parse/xml_parser.py | 19 +- semantica/semantic_extract/methods.py | 5 + semantica/semantic_extract/providers.py | 12 +- semantica/vector_store/faiss_store.py | 12 +- .../visualization/analytics_visualizer.py | 2 +- .../visualization/embedding_visualizer.py | 17 +- semantica/visualization/kg_visualizer.py | 2 +- .../visualization/ontology_visualizer.py | 20 +- .../semantic_network_visualizer.py | 2 +- .../visualization/temporal_visualizer.py | 2 +- .../test_temporal_extraction.py | 19 +- tests/test_cli_commands.py | 2 +- tests/test_issue_1513_slim_core.py | 130 + 37 files changed, 1049 insertions(+), 8297 deletions(-) create mode 100644 tests/test_issue_1513_slim_core.py diff --git a/.github/requirements/base-deps.txt b/.github/requirements/base-deps.txt index 751d7dad..c126914b 100644 --- a/.github/requirements/base-deps.txt +++ b/.github/requirements/base-deps.txt @@ -1,11 +1,5 @@ # This file was autogenerated by uv via the following command: # uv pip compile pyproject.toml --python-version 3.11 --python-platform linux --constraint requirements-ci.txt --generate-hashes -o .github/requirements/base-deps.txt -annotated-doc==0.0.5 \ - --hash=sha256:117bac03a25ede5df5440e855b32d556049ca169ead221505badf432fed4b101 \ - --hash=sha256:c7e58ce09192557605d8bbd92836d7e1d520ac9580096042c0bfd197efacf1bb - # via - # -c requirements-ci.txt - # typer annotated-types==0.8.0 \ --hash=sha256:13b2beaad985e05e2d6407ee4c4f35590b11f8d693a258a561055cac8f64cab7 \ --hash=sha256:f072f4d804ea359e4eaf198b1af7a8b0943881a87f31bb764f8bf219bb9419e0 @@ -18,72 +12,6 @@ anyio==4.14.2 \ # via # -c requirements-ci.txt # httpx -asttokens==3.0.2 \ - --hash=sha256:3ecdbd8f2cc195f53ccada3a613538bb5f9ef6f6869129f13e03c30a677b8fe2 \ - --hash=sha256:9da13157f5b28becde0bd374fc677dcd3c290614264eff096f167c469cd9f933 - # via - # -c requirements-ci.txt - # stack-data -audioread==3.1.0 \ - --hash=sha256:1c4ab2f2972764c896a8ac61ac53e261c8d29f0c6ccd652f84e18f08a4cab190 \ - --hash=sha256:b30d1df6c5d3de5dcef0fb0e256f6ea17bdcf5f979408df0297d8a408e2971b4 - # via - # -c requirements-ci.txt - # librosa -beautifulsoup4==4.15.0 \ - --hash=sha256:288e3ca7d54b06f2ac191970bc275c1939cb46d450b255bf6718b04aa37ab4f7 \ - --hash=sha256:d6f88de62e1d4e38ecb1077eb9724cd0eff29d2a08ca16a401e9b9e93f117cf9 - # via - # -c requirements-ci.txt - # semantica (pyproject.toml) -blis==1.3.3 \ - --hash=sha256:034d4560ff3cc43e8aa37e188451b0440e3261d989bb8a42ceee865607715ecd \ - --hash=sha256:1e647341f958421a86b028a2efe16ce19c67dba2a05f79e8f7e80b1ff45328aa \ - --hash=sha256:1ef6d6e2b599a3a2788eb6d9b443533961265aa4ec49d574ed4bb846e548dcdb \ - --hash=sha256:27f82b8633030f8d095d2b412dffa7eb6dbc8ee43813139909a20012e54422ea \ - --hash=sha256:2a1c74e100665f8e918ebdbae2794576adf1f691680b5cdb8b29578432f623ef \ - --hash=sha256:30b8a5b90cb6cb81d1ada9ae05aa55fb8e70d9a0ae9db40d2401bb9c1c8f14c4 \ - --hash=sha256:3f6c595185176ce021316263e1a1d636a3425b6c48366c1fd712d08d0b71849a \ - --hash=sha256:3f966ca74f89f8a33e568b9a1d71992fc9a0d29a423e047f0a212643e21b5458 \ - --hash=sha256:45866a9027d43b93e8b59980a23c5d7358b6536fc04606286e39fdcfce1101c2 \ - --hash=sha256:6297e7616c158b305c9a8a4e47ca5fc9b0785194dd96c903b1a1591a7ca21ddf \ - --hash=sha256:62fb8c731347b0f98f5f81d19d339049e61489798738467d156c66cc329b0754 \ - --hash=sha256:631836d4f335e62c30aa50a1aa0170773265c73654d296361f95180006e88c04 \ - --hash=sha256:650f1d2b28e3c875927c63deebda463a6f9d237dff30e445bfe2127718c1a344 \ - --hash=sha256:66e6249564f1db22e8af1e0513ff64134041fa7e03c8dd73df74db3f4d8415a7 \ - --hash=sha256:6f165930e8d3a85c606d2003211497e28d528c7416fbfeafb6b15600963f7c9b \ - --hash=sha256:7260da065958b4e5475f62f44895ef9d673b0f47dcf61b672b22b7dae1a18505 \ - --hash=sha256:7a0fc4b237a3a453bdc3c7ab48d91439fcd2d013b665c46948d9eaf9c3e45a97 \ - --hash=sha256:7e88181e9dd8430029ebaf22d41bf79e756e8c95363e9471717102c66beb4a6d \ - --hash=sha256:8177879fd3590b5eecdd377f9deafb5dc8af6d684f065bd01553302fb3fcf9a7 \ - --hash=sha256:878d4d96d8f2c7a2459024f013f2e4e5f46d708b23437dae970d998e7bff14a0 \ - --hash=sha256:8c888438ae99c500422d50698e3028b65caa8ebb44e24204d87fda2df64058f7 \ - --hash=sha256:9b0d42420ddd543eec51ccb99d38364a0c0833b6895eced37127822de6ecacff \ - --hash=sha256:9de26fbd72bac900c273b76d46f0b45b77a28eace2e01f6ac6c2239531a413bb \ - --hash=sha256:9e5fdf4211b1972400f8ff6dafe87cb689c5d84f046b4a76b207c0bd2270faaf \ - --hash=sha256:c3e33cfbf22a418373766816343fcfcd0556012aa3ffdf562c29cddec448a415 \ - --hash=sha256:c4ae70629cf302035d268858a10ca4eb6242a01b2dc8d64422f8e6dcb8a8ee74 \ - --hash=sha256:d0114cf2d8f19e0ed210f9ae92594cd0a12efa1bbbce444028b0fc365bbbb8af \ - --hash=sha256:d563160f874abb78a57e346f07312c5323f7ad67b6370052b6b17087ef234a8e \ - --hash=sha256:d734b19fba0be7944f272dfa7b443b37c61f9476d9ab054a9ac53555ceadd2e0 \ - --hash=sha256:e10c8d3e892b1dbdff365b9d00e08291876fc336915bf1a5e9f188ed087e1a91 \ - --hash=sha256:e5a662c48cd4aad5dae1a950345df23957524f071315837a4c6feb7d3b288990 \ - --hash=sha256:e9327a6ca67de8ae76fe071e8584cc7f3b2e8bfadece4961d40f2826e1cda2df \ - --hash=sha256:e9f5c53b277f6ac5b3ca30bc12ebab7ea16c8f8c36b14428abb56924213dc127 \ - --hash=sha256:f0628a030d44aa71cac5973e40c9e95ec767abaaf2fd366a094b9398885f82f2 \ - --hash=sha256:f20f7ad69aaffd1ce14fe77de557b6df9b61e0c9e582f75a843715d836b5c8af \ - --hash=sha256:f36c0ca84a05ee5d3dbaa38056c4423c1fc29948b17a7923dd2fed8967375d74 - # via - # -c requirements-ci.txt - # thinc -catalogue==2.0.10 \ - --hash=sha256:4f56daa940913d3f09d589c191c74e5a6d51762b3a9e37dd53b7437afd6cda15 \ - --hash=sha256:58c2de0020aa90f4a2da7dfad161bf7b3b054c86a5f09fcedc0b2b740c109a9f - # via - # -c requirements-ci.txt - # spacy - # srsly - # thinc certifi==2026.7.22 \ --hash=sha256:62f22742b58a1a33014a2b6b706588a8d7e2a88ae7bd1a6ebe8c992928483775 \ --hash=sha256:741e2c3b351ddf169a738da9f2c048608ff7f2c5cc02f1ebc6b118bb090d5d55 @@ -92,147 +20,53 @@ certifi==2026.7.22 \ # httpcore # httpx # requests -cffi==2.1.1 \ - --hash=sha256:046bfc24911b37851ee1b51aab8bffe713d89c68c6a057b09484ce9fd5f69b4e \ - --hash=sha256:06c72bb76605a4b0cd0aad6930b69d4baf7dd5d806cfc409b824191099700e66 \ - --hash=sha256:0beceaabe56af686895136a2de78db54ecd8e4046b236b8fd6d6cb61389e9bf2 \ - --hash=sha256:154852545011f779917b11c78db2358d095da62a9a172b78ad0a583ee5adc0d0 \ - --hash=sha256:194cffa889098ced9976c3fc6340305e43f6303657d298da55366907c05c22d6 \ - --hash=sha256:19ee6127ee34de7d83ce3d371ebc5ed91addbdcc39f9ab15ce4eb35a4e534971 \ - --hash=sha256:1a18a57b58cfb21fc28d72e876acf10eaed67a1ed96226f92af4df681d571c4c \ - --hash=sha256:1aa5645c30469b09530c4ebca77ebf8f17618293c58f8549cb1a543a50236e7d \ - --hash=sha256:1dea0e4d7d4f11f619fe8c1d76caf49e24405b4b5743c0e3be16a500ecd930c9 \ - --hash=sha256:208f941bb9d18e768138677f0a6d2ce01f590df56043dda1df1535ac57c88517 \ - --hash=sha256:210019b6c7cf07f081b4c54635c8cf744377001350e29cc0f81c4377b4797735 \ - --hash=sha256:246fa40ce8645a614ff682e0b70f37134e460eaf93a775e0cbe3cca585a67a80 \ - --hash=sha256:25792eac27877609e7bb06d42ff88278a6624fff2ba9bbb523c09616b117e80f \ - --hash=sha256:27350daa11d4f10c540e6e89dada4c54feb7256ad03e9a4dc075ebad7ba360d1 \ - --hash=sha256:28907ab9bfb6aa13184cfc17c6b8e1023c5ab6fd7076d8c20a35e59fe04f8f29 \ - --hash=sha256:2ae64be792b8966f2c69538199728b290e34726562896df1e5dc8ffd8d8188e8 \ - --hash=sha256:31348097ff5bbe827ccc41795d4dd099d9f0625e7def00ee653c137a490c2a6c \ - --hash=sha256:3143d81e29e1e20a9ce10901ec369012947876596f75a222235965f2b7ae832e \ - --hash=sha256:3222ba5d678f80a030e6afbcc33dc1ae5cb45facabb61cee2c7016b8432fde48 \ - --hash=sha256:3311ed60d36f83378794e1009ac6258bafbf81f7888b4caa7b35a521e3f95813 \ - --hash=sha256:334644fbac4eff73d985a17a91226df55d0f394160c4cfb880e084c8f7161cac \ - --hash=sha256:34e261f78cb6ceaaa36f42f2613f4380d94d9c759a9c73c769ee6e0247364632 \ - --hash=sha256:363e05fa78e15116c3c32c210ee36884fd6b9afa6d440e47112c3bd511d64cb6 \ - --hash=sha256:398aff33cee2767e3e781d2554c54bd0dff386bb437581e0d8011fde1a942ec1 \ - --hash=sha256:3d22a20b1fb1632cc72c22f95f7b0d2961c3e1c235f245ba4c606c4771035659 \ - --hash=sha256:42a494cee34437f05546455144f2b5d9ac09b1face62bcfce597d2e521066688 \ - --hash=sha256:42e2f76b9455f5a9a844f770bf3e200ed3da0e15f5df3db9c31fe80b04b3d004 \ - --hash=sha256:42f6930c31dc7f50732c9ae793c2786c7b6b044195967bbdde40bb9be81c4cc0 \ - --hash=sha256:456a61fa52d579ebf9df2e9552ead5129855dbaff6c1e5a9b1bc408809bdc062 \ - --hash=sha256:471cee653ae88de62096552e6d24ccb4a5adb8c8c9f10b5054d0122c15bf2779 \ - --hash=sha256:49cbc70e6542d4ccccb936558d1064a8012541e78f821f955cff24e357776c94 \ - --hash=sha256:4a7c934f7360e8cd64fe9efadcbd10c7c6364f531e432b9a4bf5ccbc9e0e8b50 \ - --hash=sha256:4be96343e422f2dfcd12ab5c9f5aebe03f82f737c6bffeca6830b3875cb44aab \ - --hash=sha256:4f42141fc14250de6dde5ee7ea4432be017252d91f19c5ad043c084cea629cac \ - --hash=sha256:507a24c282e0f42f8ed737cf048572cbf580468da5555764a8331735e9c736b6 \ - --hash=sha256:51b31d1c98274844cfd7838ce00bfc27c7423a4dc00fc0772fc3331c2cc90676 \ - --hash=sha256:58acb8ab8e295e6c5ea12f888cbb13cf21511ef2a3303a23f4325c29d17fe5c1 \ - --hash=sha256:5a59cc1c4442bc3d5c703bf720b51138d0bfc173618807c9ee2490a7541dd3d9 \ - --hash=sha256:5bb4e7ea95dcd6a014a6fef62e62467d67d8e582326443f3d68e71d6320a9fcf \ - --hash=sha256:5c58fe613dc5e5336357eff555824a314d8e43282600435c8d1cb6a7a2fedd13 \ - --hash=sha256:5e7cecbaadb83884793e05828cee59b210b24583b9c7425d0ba6a754fe22eb4e \ - --hash=sha256:616f097f2fe415bc92a247f02e11f634e1f9e9a83d327e3c915c15089c87869e \ - --hash=sha256:63bbfd5ded17c4840ac07cd8f1c21ba9d9708141f840b324f422f41b207e3973 \ - --hash=sha256:64faea20f4e2613363a1a9b9c7dd73058f3ecd00133a511e72ad7c511658f527 \ - --hash=sha256:661c298b4821edebead0c91edd2b00374d67ad7c5a1f7a91d4442633b79d6a72 \ - --hash=sha256:68e62fe11f30d5ca8289242866f0a5291402d8529ca2178ab8afc5c9694ae890 \ - --hash=sha256:6a8dddef476fab96d066d578fc88526767b836ab5ab21754e1d5bf3879c31c7c \ - --hash=sha256:6e192623c49c94421616a5778fba35cf0d5a8d000650c1967ef4448ee5cdd990 \ - --hash=sha256:7225e4514edb64eb6740324353e0da0711954fd8d7da4576755b1c6e09b697cd \ - --hash=sha256:75f80557d1389eddbd0de2681f6a390a0c5338c31ddaa821381c203fc3fd50d9 \ - --hash=sha256:770de9db11e84213beec501cfcaa013b019820ca881e03344dea5844f7876d94 \ - --hash=sha256:7750c6449dff7864bb9bb27ddfb0267756189201a3afc911d82b3caacd70dfc3 \ - --hash=sha256:7bde5e4cc5c10140859842b9d383af292b22639a4dffb725314baf45968cef80 \ - --hash=sha256:7ce713ace7c0e4520535b42b77eaa742c16dab813978064913e5a3cf82973b41 \ - --hash=sha256:7da0c5eff80f0197f3b3d1232ec5a682a9325f4ae9016a78f5f5ca35f9ced1f5 \ - --hash=sha256:7dbb61fe3a7699468030f71bbe5f8a0e326a151daa91beb11a6fc1f980c55e1c \ - --hash=sha256:811bd1e21d32de12efca32393a0ab3f5133b54fce9bd44b8bd77ab07da14bf6a \ - --hash=sha256:8ef53b2de9bcb9197d31854256575d59dbac0cba72ac627bb291ef5eceb74be4 \ - --hash=sha256:937c0052c05a31ca1daf18de3158eed4dbfcb9cc107adbea227728d647be701e \ - --hash=sha256:9d2055050ea716bd38b7f7f1579c275386646b4894c155a3e2f3cd62ed41b7c6 \ - --hash=sha256:9f8d177621de5cb38ee3e731eda45d421db093ec0739f46a5594babda7987a98 \ - --hash=sha256:a2d7755bef5a12ed488f4ef1f1b69ee9191d7396083b755a5d2295f6edb4768b \ - --hash=sha256:a48d62ab9d6f4f98c983223a547af44be6ca3691074c31cecced6facd3ba2dc1 \ - --hash=sha256:a4f00aa42f75d6e4595e8866e748cc1705adc0cddfeb2ca86d0d03993d63ba03 \ - --hash=sha256:a6e721d4b0e45d5b65e87534470e67b18dcd092c83f68fba09f152b9cbc061af \ - --hash=sha256:a730a083190634c65cca36ba5f489531576ebd79bcd5c8e172130f6453127231 \ - --hash=sha256:a931079504ecc49efed7744c476a5c343a92fabf66dec2db95edb1b2fdc770e2 \ - --hash=sha256:aa9511c62d14da7aacc9b4bf51f3f697a621e83b2d6919008243c3aad168eea3 \ - --hash=sha256:ab36d55f9ed2d067327667c2fea18dda018eb628dd6347aa01dda6cf1f5d3836 \ - --hash=sha256:ad2c86c495b899d862ea0f4b42891b8713a3bd45dd4105c7fd51c2a72f39f3a5 \ - --hash=sha256:aeae0e330c9f6acd681f647d46cefd30c29f93e3392882e792e82080c9691399 \ - --hash=sha256:b0431303acaea1089ad4b3e9ce4e6518193def1118d4073ca848635ee4ea2e96 \ - --hash=sha256:b5bdfd1c873d4e093aabc0ca84c4ca6dbc4f752afb5c86f146d9742580c9da2e \ - --hash=sha256:baed1e86cc735622097354b9d1281406caf42ff42a886d29faa8e8d1630333be \ - --hash=sha256:c1453022f490d2459a11819d83ad1d586e9ff65a12ac3e705ffebd46d3685dcf \ - --hash=sha256:c26608d2222fb1e94487e4a387d85f13eb55d5ed725cb25a0c589ac4ee60e7bc \ - --hash=sha256:c7659f22557c5a0bc4855cd635f55edec690cc008a40768527762cb9fb263455 \ - --hash=sha256:c8c69575568085ba0b1b10c0249d779a214aea6f6522e949a0fc9fb0fcb449d0 \ - --hash=sha256:c8d2c9fd1f2d16f780d15127abb050d13d1a76c03a4bd87d7e4980e45e511e12 \ - --hash=sha256:ca82be1a1d406ecfe1d25dc16cb33488e5a16bf4438c9fb590484ea29d92478b \ - --hash=sha256:cc572dace3f60ef98d7b12ff411d20f5362feb31a0439eab0085bbfd349982d7 \ - --hash=sha256:d18e5ac0f2f03f4f518d3e23db0f0cad7faa1da8620e9c09461d443bbf6e6692 \ - --hash=sha256:d28630f5854ab07ab1fd4aba756de52326c82e6be15d414b12793f1975048b54 \ - --hash=sha256:d9c275eaacd24aa73f94ffd6de08fc3f932424d8b6c376f4bed7cde376fe7bc3 \ - --hash=sha256:da0e573f9f97159390c89d9f1a9e41908b66d408cc5b58d08cf3847d844c531b \ - --hash=sha256:dd31f52ea1086513bb9df30f8fcee9b8918323ae067a3d5b78bc826a000712be \ - --hash=sha256:dddad92b554513a31f272570678ba307fb9f618f05e3d4a5eacafff9eae03e1d \ - --hash=sha256:df423d40ee8654634421812bc3b196da3f9bd7d32929da813f8394c4348a5358 \ - --hash=sha256:df913725b79db7bcf03448f36b7bf8815363417d5b58deecf9305e3e30f0f21a \ - --hash=sha256:e0bcb7e0f677f543555d2adff3bf19c05f66cdb4796e5ff602442ab2fe3c4ef7 \ - --hash=sha256:e2d65b31f36619cda3999b78b2aa9632e76b78448e7a56fc4240824200e7c4fc \ - --hash=sha256:e6e8cff14d6fb0be70a09c0bdc58096f501952d04624ebf867e0e56da2df8960 \ - --hash=sha256:f16c709686a78c727bbbf059f92b0bf41c6fc60deec706d2dc19f529175a6125 \ - --hash=sha256:f24fb43132a4c6b4cb4eb029492919b2db645be6808d738f244fd146c03c32cb \ - --hash=sha256:f53e442b08449d42821fa4a4fba000095af9f62742a500f978a9f557ec44339a \ - --hash=sha256:f5cfbc5fe74540d335175b656c725d74d90e3730c626d92575eea35029d9afaa \ - --hash=sha256:f81b3b8f3d4e343550fa4baa0e479bba9f2d29ce9c2e9b51d1ce1718d7442fcf \ - --hash=sha256:f8ec5e643a9a937f64e1999eb9f75d072263751912dc5cd06d3c85f8f44be7c3 \ - --hash=sha256:fb92203a88b3d3053034db775110081c49d28be6551923805e039924093761e4 \ - --hash=sha256:fcd22650c908d7b7da162bbfaab594a1227a15d1643a98c68b122ac642fa2264 - # via - # -c requirements-ci.txt - # soundfile -chardet==7.5.1 \ - --hash=sha256:0df08f2b2f6ac04b3e7f9e8ad1b1559c2e8497338ff9dfa1e0922335ff9dfe8d \ - --hash=sha256:126b2a65141ed8a460c721d19f487c7b6fd12542aa761ce449f543296d0dd71e \ - --hash=sha256:1cd58589a52211901c5ac57016feffbe8a7e7e6328f5bf0b03ce44043e221e99 \ - --hash=sha256:26160da949c66f0cca280101d85e6e4fddca53bfe465a1b69ceb3c9998295cc0 \ - --hash=sha256:2c99dea9eea1bdc6cc20dcb3555581234899d58a4147163c7d03d8fca11402b0 \ - --hash=sha256:36843a0e9e3196142e317806d5ca29ab0bb714de2315897124a018438cc535a3 \ - --hash=sha256:3eb37b2c0aa67bfb1112aa90bfdd95cd3b4006fe051a2ea4872c3c6ba9cf855b \ - --hash=sha256:44214df32ff7c87fe82d7f1f21c7fe95c04769869e523f944413e668e001f52c \ - --hash=sha256:469f164a608ccee4a8a2c0c2b4328470df9b07443e8269714f8e8a51f6fdf4c4 \ - --hash=sha256:46d10bbb7ba7ba345694fe0276a61290d4cc25d3624c03282311dbc58c1d49b4 \ - --hash=sha256:4d30a84ec52c37532ad7978329a41224c454959b22503b8f8ed4df763e6c3ed2 \ - --hash=sha256:54bae16fc5b7ea39956ee737dd09b5f5438deafa9f565ac27c882992c3965b88 \ - --hash=sha256:5953d8236049aed0411908cfeaeeec03984ab2f109f980f0ec70fbe6938c8f9e \ - --hash=sha256:59598a8e15769ebe62fd0c153a5e4347a7a126cc7b376a724ff63ad80b890506 \ - --hash=sha256:61312fd3ff363c3ec549548250630a02fd3123c360dd492bf1fce0d28e915b87 \ - --hash=sha256:6df2e255413c5f277067d9af7444ab1e9719126335efbefae24d8370aedf35c5 \ - --hash=sha256:6eefafa763b7099c3c0a86c343097d69b766b3fe5705edba9400bae26450af1f \ - --hash=sha256:71f152d66e7bd1faad615897d34765243cb567ad6aef07bf0d7c0cdd69bf6cce \ - --hash=sha256:8a001a8f030625b705d9a4e68116e573462bd38192cc6c1bfa318b45606747ac \ - --hash=sha256:951ccab3a037a563079f4d448e82bbfee5f2715239440f732ffb0ac9f251dedb \ - --hash=sha256:9c378ccd8c0fab30171ed7c54d501f72c4294d9b98c71ea1ff7852aa9ccac399 \ - --hash=sha256:a198d47eaa28e1ba458f11ab636f0677f34c5d1ce7e909bec6ca2f346c21e78c \ - --hash=sha256:a599a836fbd41ff5a2a0c20e211da13ba8cc14dcba1e4bcfad8a7bcad64a2ff6 \ - --hash=sha256:a6b20b42a9e6048d557aec9903df33239c299b4643c6553203127c8f92f47e78 \ - --hash=sha256:a77d6d2d61f39b40423bd0abaee32175739cec9f11edf9e7236a5341d0e05c99 \ - --hash=sha256:b1c049906b95db7b12fd674f661f75285baf925eae98aa52a4a09305fc786855 \ - --hash=sha256:b72b9b95c636d170d9a6284d99be9fd93ca08bb2221385ff1a5b69da98ec4f76 \ - --hash=sha256:ba7e9b6c15b4fcdf07ae675e5116dee610425f9ad6955c9bdb6bf99aed2e555d \ - --hash=sha256:bbf6948b7a5b85af5e435993c4e5fdb092d0d8f38c00d68c96e2640bafce5ec2 \ - --hash=sha256:c461fc9746912d19ab77efc1912b7f9a364b7fca1d787e1215207d5f6f68685d \ - --hash=sha256:d06a8bacc8b6a26e900c3bd825601f9a8c02e063e687e960cf77363a9a397a0b \ - --hash=sha256:e6faa6b18c7af2fca8d4cbb51fa035fa47f8f4b68547ae927a1c0be34dfc96fa \ - --hash=sha256:e72489029c1f6e4be6138dd045a4e52bffaba5d5da0398df585bfcf8b239e324 \ - --hash=sha256:ecbe0e0a9fff7825fc48650ef297ede49c71a7abc411a0638416207a70bf78c0 \ - --hash=sha256:f22396ad419f1e78594057e200aa7253be56840f5b04d07b86ccecd99e09c068 \ - --hash=sha256:fad6fbc154113e3b17bb757c34b21477e4b6d69fdd4ce51ff2b3f29a42f08b5b +chardet==7.6.0 \ + --hash=sha256:089e3bb81a0a07e94f15461ded9f9ee66d349615b1a9fd557d4de1003e2fc12e \ + --hash=sha256:0ad9bc6dab4f338673353fa3f0dc96122f559aaf746087408106e2fcbf132fe8 \ + --hash=sha256:0bdb6f03107b7ace3f44e0edd91aa24456ee558787df265cc19daf45785b31c7 \ + --hash=sha256:0c44a32da32cc8b23d6b20d98ace15ec7600950e4955d1bf5ab1f849b0187fdb \ + --hash=sha256:0f304de7041afaec0195ad6464937cd112392002e9d72ed15d55f20a9abd3a13 \ + --hash=sha256:167d7ba3ee08b654e36d7b43ebd9a36606c9a12e2fabdb361757a095ca3b7e3d \ + --hash=sha256:19fea52164e6e00f2a21ed418f42e4b0162a09199274c86d07ad3efd661317c4 \ + --hash=sha256:249993b88ac7a58cad2781acea8f379152a28a719c9b401d614898c63a8c83da \ + --hash=sha256:271ab71ec1be61dbbce0436de0848895c03eae051c379e937a39573d9ce403d9 \ + --hash=sha256:284136186ff90735f901ed0a1c6d41e7af67c666841cc0eceb58482a21b7056c \ + --hash=sha256:2b5d31f9b7f793e15e81cca877e7ccd72bffffa2a3443a9d47be9dfee84fad69 \ + --hash=sha256:2cf0adaca8b1c4bacfade9d0a1e4f8f70b1bb122833d6f07ab90e3adc84eb13a \ + --hash=sha256:360260d074d8712ac1e9048fcafb0fdde246f9d0b12555748ad0017c5ecee43d \ + --hash=sha256:406936df1328a3284fef366eaa2bfd1cccd0ef1b10cb99781dd5b022ea644b84 \ + --hash=sha256:4076d795897ce45239825956a1334e134322ecc4bfe84dbb12acd5390de0fbc1 \ + --hash=sha256:43ea433e43a23c55e8e17f3fad1e07f5cfe5450c73124b95b0d849c21ad379ee \ + --hash=sha256:459e2b1c98f9a86a4698112aa42dffa802bbbff883c1ff144071f87224125862 \ + --hash=sha256:4b81d3f7d7914442d5f7d515b8c6d79cee6b794bc208971fb6902f176671166a \ + --hash=sha256:55a4c31adc7c7e83ad412f2f66b6b7358d0d4fe67505e7f58e18f68f75d341bb \ + --hash=sha256:57e6846cc13ce1ff59979f4ec9da770c57e12aa99046073f632de5a51d9a6f20 \ + --hash=sha256:5e9b31b9ae93872d66439b046a1e08c2ea99791f3c254dce1e2633e395c5587c \ + --hash=sha256:61238d5945b36af9a2ad13494f8969b7deb3c3b4abe223e54670c064e73f5328 \ + --hash=sha256:6424512f576fa7e88b7431d38a42d57552c8f717465a975fc42e497cd280d833 \ + --hash=sha256:75d6c3a4d2046d49e83d2d2206eb073a1f390743e856d90c1bbc19949b26acf4 \ + --hash=sha256:7b586cab9e9072dddd89bc2bd27ee72808d0c84ec73695fe6ec0f3c46b057c65 \ + --hash=sha256:7bbc8a9652c7f859c593847f220c1d264f25749369abb1a267b404ee8cceb209 \ + --hash=sha256:83512a475a2f3886166aa0bca1bbb39343a4eb3186dd5532127d6f2591d09118 \ + --hash=sha256:8900f6c7cf6b015b17a51767cc6144689059ba1cdceaa383d29eb037ac28579e \ + --hash=sha256:93d9df6089ded42ed1fe9f57e272c0b74bd0464d45c0c7d50f09f26f31105c3c \ + --hash=sha256:a12023d48d0e207791c01161d03cb3c0d85c6a15f345eb9d3d56063a63d1e40f \ + --hash=sha256:a4f0a368ad04d5def08bdfaa17c7e15e71552f93923dc2aa9b2f7d9dee02fbb6 \ + --hash=sha256:aa03322e07ac08d520ec50bb50c73143d0892d1adc067d4c5e58f4ef4b2363a8 \ + --hash=sha256:b3b4c96c4df93899b3c8b9e8159e06b1f55c66d7ca384d91481108e251a06eb0 \ + --hash=sha256:b73f277c1ac09c4f8076c4214b816c7aa78a0a2f0cb7156742f4303f856bedc3 \ + --hash=sha256:c54b6a8d3b219560fa5cf4c28df932c37471afe047afdc152067104e741f38c1 \ + --hash=sha256:c6061adf247ab5dda173b67010e13904c6071717660c7c8077fb50aca362b264 \ + --hash=sha256:cbaca8f563a9de07ab1a53157dba93802e54c26afe3339892afcc7c59ea4ef1b \ + --hash=sha256:cedbc584789eb2edfde20fd03669972a833ce6019e60014ae613f9bfc440e8e3 \ + --hash=sha256:cf6d08c2373b7772a558d141f9e8cee53fe1d222341bac612e4d558b04995f73 \ + --hash=sha256:d5dc835e40e0e09c2c3eab43731a8b5127834f42786dda09ba2f4b699ccd527a \ + --hash=sha256:d6030886e7da2740bf299b6a8cc75b4dcc2c90db0ca8fe0a6e4fd0bfd071dabd \ + --hash=sha256:da86fc1b40ff5996fbb5e4c2d2dca770eac2c893cef157dacc050b8b4d929846 \ + --hash=sha256:dde4080fb6bb8db96e8c44893771bcc0d235f4c22cdddb194a765a65e3a72ba7 \ + --hash=sha256:f14f46ef1977e41ce1f4814ca6984cea7f8b6baf8cbc6626ef7bf3d13cf7ea13 \ + --hash=sha256:f2ec3c78cc6b54bf8e091ec4ee885473078b5d7ef18ab1b01c86ae1e98bf88f7 \ + --hash=sha256:fc1e1571321baf8927582fe34363ad7f02279f11c8c2839c14b4c76894148db6 # via # -c requirements-ci.txt # semantica (pyproject.toml) @@ -412,425 +246,70 @@ charset-normalizer==3.5.1 \ # via # -c requirements-ci.txt # requests -click==8.4.2 \ - --hash=sha256:9a6cea6e60b17ebe0a44c5cc636d94f09bd66142c1cd7d8b4cd731c4917a15f6 \ - --hash=sha256:e6f9f66136c816745b9d65817da91d61d957fb16e02e4dcd0552553c5a197b76 +click==8.5.0 \ + --hash=sha256:255bc9599cf7748b4b1a446ccc735421bd08a2ae529a8b88597d3de5664ee360 \ + --hash=sha256:ba0d2089de75ea0310e2dde03160e6ca10009947fb95a182f9b54021bb272e34 # via # -c requirements-ci.txt # semantica (pyproject.toml) - # huggingface-hub - # spacy -cloudpathlib==0.24.0 \ - --hash=sha256:b1c51e2d2ec7dc4fed6538991f4aea849d6cf11a7e6b9069f86e461aa1f9b5b4 \ - --hash=sha256:c521a984e77b47e656fe78e20a7e3e260e0ab45fc69e33ac01094227c979e34a +cloudpickle==3.1.2 \ + --hash=sha256:7fda9eb655c9c230dab534f1983763de5835249750e85fbcef43aaa30a9a2414 \ + --hash=sha256:9acb47f6afd73f60dc1df93bb801b472f05ff42fa6c84167d25cb206be1fbf4a # via # -c requirements-ci.txt - # weasel -comm==0.2.3 \ - --hash=sha256:2dc8048c10962d55d7ad693be1e7045d891b7ce8d999c97963a5e3e99c055971 \ - --hash=sha256:c615d91d75f7f04f095b30d1c1711babd43bdc6419c1be9886a85f2f4e489417 - # via - # -c requirements-ci.txt - # ipywidgets -confection==1.3.3 \ - --hash=sha256:b9fef9ee84b237ef4611ec3eb5797b70e13063e6310ad9f15536373f5e313c82 \ - --hash=sha256:f0f6810d567ff73993fe74d218ca5e1ffb6a44fb03f391257fc5d033546cbfaa - # via - # -c requirements-ci.txt - # spacy - # thinc - # weasel -contourpy==1.3.3 \ - --hash=sha256:023b44101dfe49d7d53932be418477dba359649246075c996866106da069af69 \ - --hash=sha256:07ce5ed73ecdc4a03ffe3e1b3e3c1166db35ae7584be76f65dbbe28a7791b0cc \ - --hash=sha256:083e12155b210502d0bca491432bb04d56dc3432f95a979b429f2848c3dbe880 \ - --hash=sha256:0bf67e0e3f482cb69779dd3061b534eb35ac9b17f163d851e2a547d56dba0a3a \ - --hash=sha256:0c1fc238306b35f246d61a1d416a627348b5cf0648648a031e14bb8705fcdfe8 \ - --hash=sha256:13b68d6a62db8eafaebb8039218921399baf6e47bf85006fd8529f2a08ef33fc \ - --hash=sha256:15ff10bfada4bf92ec8b31c62bf7c1834c244019b4a33095a68000d7075df470 \ - --hash=sha256:177fb367556747a686509d6fef71d221a4b198a3905fe824430e5ea0fda54eb5 \ - --hash=sha256:1cadd8b8969f060ba45ed7c1b714fe69185812ab43bd6b86a9123fe8f99c3263 \ - --hash=sha256:1fd43c3be4c8e5fd6e4f2baeae35ae18176cf2e5cced681cca908addf1cdd53b \ - --hash=sha256:22e9b1bd7a9b1d652cd77388465dc358dafcd2e217d35552424aa4f996f524f5 \ - --hash=sha256:23416f38bfd74d5d28ab8429cc4d63fa67d5068bd711a85edb1c3fb0c3e2f381 \ - --hash=sha256:283edd842a01e3dcd435b1c5116798d661378d83d36d337b8dde1d16a5fc9ba3 \ - --hash=sha256:2a2a8b627d5cc6b7c41a4beff6c5ad5eb848c88255fda4a8745f7e901b32d8e4 \ - --hash=sha256:2b7e9480ffe2b0cd2e787e4df64270e3a0440d9db8dc823312e2c940c167df7e \ - --hash=sha256:322ab1c99b008dad206d406bb61d014cf0174df491ae9d9d0fac6a6fda4f977f \ - --hash=sha256:33c82d0138c0a062380332c861387650c82e4cf1747aaa6938b9b6516762e772 \ - --hash=sha256:348ac1f5d4f1d66d3322420f01d42e43122f43616e0f194fc1c9f5d830c5b286 \ - --hash=sha256:3519428f6be58431c56581f1694ba8e50626f2dd550af225f82fb5f5814d2a42 \ - --hash=sha256:3c30273eb2a55024ff31ba7d052dde990d7d8e5450f4bbb6e913558b3d6c2301 \ - --hash=sha256:3d1a3799d62d45c18bafd41c5fa05120b96a28079f2393af559b843d1a966a77 \ - --hash=sha256:451e71b5a7d597379ef572de31eeb909a87246974d960049a9848c3bc6c41bf7 \ - --hash=sha256:459c1f020cd59fcfe6650180678a9993932d80d44ccde1fa1868977438f0b411 \ - --hash=sha256:4d00e655fcef08aba35ec9610536bfe90267d7ab5ba944f7032549c55a146da1 \ - --hash=sha256:4debd64f124ca62069f313a9cb86656ff087786016d76927ae2cf37846b006c9 \ - --hash=sha256:4feffb6537d64b84877da813a5c30f1422ea5739566abf0bd18065ac040e120a \ - --hash=sha256:50ed930df7289ff2a8d7afeb9603f8289e5704755c7e5c3bbd929c90c817164b \ - --hash=sha256:51e79c1f7470158e838808d4a996fa9bac72c498e93d8ebe5119bc1e6becb0db \ - --hash=sha256:556dba8fb6f5d8742f2923fe9457dbdd51e1049c4a43fd3986a0b14a1d815fc6 \ - --hash=sha256:598c3aaece21c503615fd59c92a3598b428b2f01bfb4b8ca9c4edeecc2438620 \ - --hash=sha256:5ed3657edf08512fc3fe81b510e35c2012fbd3081d2e26160f27ca28affec989 \ - --hash=sha256:626d60935cf668e70a5ce6ff184fd713e9683fb458898e4249b63be9e28286ea \ - --hash=sha256:644a6853d15b2512d67881586bd03f462c7ab755db95f16f14d7e238f2852c67 \ - --hash=sha256:655456777ff65c2c548b7c454af9c6f33f16c8884f11083244b5819cc214f1b5 \ - --hash=sha256:66c8a43a4f7b8df8b71ee1840e4211a3c8d93b214b213f590e18a1beca458f7d \ - --hash=sha256:6afc576f7b33cf00996e5c1102dc2a8f7cc89e39c0b55df93a0b78c1bd992b36 \ - --hash=sha256:6c3d53c796f8647d6deb1abe867daeb66dcc8a97e8455efa729516b997b8ed99 \ - --hash=sha256:709a48ef9a690e1343202916450bc48b9e51c049b089c7f79a267b46cffcdaa1 \ - --hash=sha256:70f9aad7de812d6541d29d2bbf8feb22ff7e1c299523db288004e3157ff4674e \ - --hash=sha256:8153b8bfc11e1e4d75bcb0bff1db232f9e10b274e0929de9d608027e0d34ff8b \ - --hash=sha256:87acf5963fc2b34825e5b6b048f40e3635dd547f590b04d2ab317c2619ef7ae8 \ - --hash=sha256:88df9880d507169449d434c293467418b9f6cbe82edd19284aa0409e7fdb933d \ - --hash=sha256:929ddf8c4c7f348e4c0a5a3a714b5c8542ffaa8c22954862a46ca1813b667ee7 \ - --hash=sha256:92d9abc807cf7d0e047b95ca5d957cf4792fcd04e920ca70d48add15c1a90ea7 \ - --hash=sha256:95b181891b4c71de4bb404c6621e7e2390745f887f2a026b2d99e92c17892339 \ - --hash=sha256:9e999574eddae35f1312c2b4b717b7885d4edd6cb46700e04f7f02db454e67c1 \ - --hash=sha256:a15459b0f4615b00bbd1e91f1b9e19b7e63aea7483d03d804186f278c0af2659 \ - --hash=sha256:a22738912262aa3e254e4f3cb079a95a67132fc5a063890e224393596902f5a4 \ - --hash=sha256:ab2fd90904c503739a75b7c8c5c01160130ba67944a7b77bbf36ef8054576e7f \ - --hash=sha256:ab3074b48c4e2cf1a960e6bbeb7f04566bf36b1861d5c9d4d8ac04b82e38ba20 \ - --hash=sha256:afe5a512f31ee6bd7d0dda52ec9864c984ca3d66664444f2d72e0dc4eb832e36 \ - --hash=sha256:b08a32ea2f8e42cf1d4be3169a98dd4be32bafe4f22b6c4cb4ba810fa9e5d2cb \ - --hash=sha256:b20c7c9a3bf701366556e1b1984ed2d0cedf999903c51311417cf5f591d8c78d \ - --hash=sha256:b2e8faa0ed68cb29af51edd8e24798bb661eac3bd9f65420c1887b6ca89987c8 \ - --hash=sha256:b7301b89040075c30e5768810bc96a8e8d78085b47d8be6e4c3f5a0b4ed478a0 \ - --hash=sha256:b7448cb5a725bb1e35ce88771b86fba35ef418952474492cf7c764059933ff8b \ - --hash=sha256:ca0fdcd73925568ca027e0b17ab07aad764be4706d0a925b89227e447d9737b7 \ - --hash=sha256:ca658cd1a680a5c9ea96dc61cdbae1e85c8f25849843aa799dfd3cb370ad4fbe \ - --hash=sha256:cbedb772ed74ff5be440fa8eee9bd49f64f6e3fc09436d9c7d8f1c287b121d77 \ - --hash=sha256:cd5dfcaeb10f7b7f9dc8941717c6c2ade08f587be2226222c12b25f0483ed497 \ - --hash=sha256:cf9022ef053f2694e31d630feaacb21ea24224be1c3ad0520b13d844274614fd \ - --hash=sha256:d002b6f00d73d69333dac9d0b8d5e84d9724ff9ef044fd63c5986e62b7c9e1b1 \ - --hash=sha256:d06bb1f751ba5d417047db62bca3c8fde202b8c11fb50742ab3ab962c81e8216 \ - --hash=sha256:d304906ecc71672e9c89e87c4675dc5c2645e1f4269a5063b99b0bb29f232d13 \ - --hash=sha256:e4e6b05a45525357e382909a4c1600444e2a45b4795163d3b22669285591c1ae \ - --hash=sha256:e74a9a0f5e3fff48fb5a7f2fd2b9b70a3fe014a67522f79b7cca4c0c7e43c9ae \ - --hash=sha256:ea37e7b45949df430fe649e5de8351c423430046a2af20b1c1961cae3afcda77 \ - --hash=sha256:f64836de09927cba6f79dcd00fdd7d5329f3fccc633468507079c829ca4db4e3 \ - --hash=sha256:fd6ec6be509c787f1caf6b247f0b1ca598bef13f4ddeaa126b7658215529ba0f \ - --hash=sha256:fd907ae12cd483cd83e414b12941c632a969171bf90fc937d0c9f268a31cafff \ - --hash=sha256:fd914713266421b7536de2bfa8181aa8c699432b6763a0ea64195ebe28bff6a9 \ - --hash=sha256:fde6c716d51c04b1c25d0b90364d0be954624a0ee9d60e23e850e8d48353d07a - # via - # -c requirements-ci.txt - # matplotlib -cuda-bindings==13.3.1 \ - --hash=sha256:04436a9364059c84b8f9636f359eccda1cf814341f5b670c71d80d2f79dbc708 \ - --hash=sha256:120fcc53d57903df529c3486962c56528cba5b7d6c57c99537320ed9922c8b86 \ - --hash=sha256:18c8c167c8907b8f02531ca810534315c458dabef31f7965095619bf647b9202 \ - --hash=sha256:1ab2f74ed65bfef4163ba07a8db16f1085e0729291db12a2423aff84ee8278b8 \ - --hash=sha256:2732904099e0a4d4db774a5fc6d91ee95fae065b4d2ecabb4968c5fe2406c9d7 \ - --hash=sha256:36febb7c1079d68a981dbbd8d5a67235b399802b82075c9388624719607e52b9 \ - --hash=sha256:507b0e19e7f934c5e30f30f0244ad70a75812619a7d3a0d742543caae1bd50f1 \ - --hash=sha256:61120b5e4f4a63f67efd7e7396914cb9ef871bb1f0021e990fb70277be240a4d \ - --hash=sha256:8de12ef60bf40756852cb62bbb40460609269f6ece522903d1cc93d73a3ececb \ - --hash=sha256:9851b0caa8bfd3bc6fa054eaf57bea7c8e9c3a62db2d2621224677f49f3c53d0 \ - --hash=sha256:9efb21c1ee64981e184b9e0ba5eb3179e5ba3d4b51665a6cb52b8ef3d01a7cbf \ - --hash=sha256:b134dd8c5c66ae4c4ad814f7aee88fd215353c077010cbc47e3b55ed35ec9eff \ - --hash=sha256:c0c4b1a995098c46695c24257a342dc97d6e6d3f3050b944c9f43bd26d734051 \ - --hash=sha256:c3c772dfff49681541d59630c90f858e173ac926b9c593a2b7123f2a1043cc76 \ - --hash=sha256:c5879712accf6e14bb01aa5e67440eb84998b8d104b509cc7a6dc0b8f656a474 \ - --hash=sha256:c7855c4868aabc0cfae28abbe83d56734bdfbd08f08fc234ac1912a12858bf49 \ - --hash=sha256:e32d08f71ebcdf00f0f41eab2eb37e8da94c8ed411cc9f7f7a019ce6b34abe3a \ - --hash=sha256:efd4c814d311ec08c981f6dded1dbe7d4b371067ee4f6c14cccec4bde9590f80 - # via - # -c requirements-ci.txt - # torch -cuda-pathfinder==1.6.0 \ - --hash=sha256:1503af579d8379c24bdd65528379bc57039b0455be9f5f9686cf8e473a1fce51 - # via - # -c requirements-ci.txt - # cuda-bindings -cuda-toolkit==13.0.3 \ - --hash=sha256:d693caaa261214ddd7dbb60d68e71cbed884e68c2be7509778f3051da0b91c3f - # via - # -c requirements-ci.txt - # torch -cycler==0.12.1 \ - --hash=sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30 \ - --hash=sha256:88bb128f02ba341da8ef447245a9e138fae777f6a23943da4540077d3601eb1c - # via - # -c requirements-ci.txt - # matplotlib -cymem==2.0.13 \ - --hash=sha256:03cb7bdb55718d5eb6ef0340b1d2430ba1386db30d33e9134d01ba9d6d34d705 \ - --hash=sha256:042e8611ef862c34a97b13241f5d0da86d58aca3cecc45c533496678e75c5a1f \ - --hash=sha256:0d78a27c88b26c89bd1ece247d1d5939dba05a1dae6305aad8fd8056b17ddb51 \ - --hash=sha256:0dca715e708e545fd1d97693542378a00394b20a37779c1ae2c8bdbb43acef79 \ - --hash=sha256:1366c7437a209230f4b797fae10227a8206d4021d37c9f9c0d31fd97ea4feb35 \ - --hash=sha256:1710390e7fb2510a8091a1991024d8ae838fd06b02cdfdcd35f006192e3c6b0e \ - --hash=sha256:1775d3fd34cf099929b79c3e48469283642463f977af6801231f3c0e5d9c9369 \ - --hash=sha256:18ad5b116a82fa3674bc8838bd3792891b428971e2123ae8c0fd3ca472157c5e \ - --hash=sha256:1c91a92ae8c7104275ac26bd4d29b08ccd3e7faff5893d3858cb6fadf1bc1588 \ - --hash=sha256:2fae4a29a36267772010a05ca85220e53f4fb3e1083d4f686342d8a3cc7620db \ - --hash=sha256:2ff1c41fd59b789579fdace78aa587c5fc091991fa59458c382b116fc36e30dc \ - --hash=sha256:30c4e75a3a1d809e89106b0b21803eb78e839881aa1f5b9bd27b454bc73afde3 \ - --hash=sha256:38aefeb269597c1a0c2ddf1567dd8605489b661fa0369c6406c1acd433b4c7ba \ - --hash=sha256:45dcaba0f48bef9cc3d8b0b92058640244a95a9f12542210b51318da97c2cf28 \ - --hash=sha256:52b76216c59e0078cebd988754426c41ee60e7c972f4c5185ac32fbd53b6d035 \ - --hash=sha256:666ce6146bc61b9318aa70d91ce33f126b6344a25cf0b925621baed0c161e9cc \ - --hash=sha256:673183466b0ff2e060d97ec5116711d44200b8f7be524323e080d215ee2d44a5 \ - --hash=sha256:68489bf0035c4c280614067ab6a82815b01dc9fcd486742a5306fe9f68deb7ef \ - --hash=sha256:6bbd701338df7bf408648191dff52472a9b334f71bcd31a21a41d83821050f67 \ - --hash=sha256:6d36710760f817194dacb09d9fc45cb6a5062ed75e85f0ef7ad7aeeb13d80cc3 \ - --hash=sha256:717270dcfd8c8096b479c42708b151002ff98e434a7b6f1f916387a6c791e2ad \ - --hash=sha256:742fc19764467a49ed22e56a4d2134c262d73a6c635409584ae3bf9afa092c33 \ - --hash=sha256:7700b116524b087e0169f10f267539223b48240ef2734c3a727a9e6b4db9a671 \ - --hash=sha256:7a8d404a48af953084fcec4239487ab05e14b829da251628827d51c87880aeb8 \ - --hash=sha256:7e1a863a7f144ffb345397813701509cfc74fc9ed360a4d92799805b4b865dd1 \ - --hash=sha256:8431347901026e9b554daeb982f5f1ecf3780ce46435c7a8e0cb82490e58f13c \ - --hash=sha256:84c1168c563d9d1e04546cb65e3e54fde2bf814f7c7faf11fc06436598e386d1 \ - --hash=sha256:84e2976e38cd663f758e40b5497fa5cd183d7c5fb0d04ce81a4b42a1ba124ff0 \ - --hash=sha256:891fd9030293a8b652dc7fb9fdc79a910a6c76fc679cd775e6741b819ffea476 \ - --hash=sha256:89c4889bd16513ce1644ccfe1e7c473ba7ca150f0621e66feac3a571bde09e7e \ - --hash=sha256:8efc4f308169237aade0e82877a65a563833dec32eb7ab2326120253e0e9e918 \ - --hash=sha256:90c2d0c04bcda12cd5cebe9be93ce3af6742ad8da96e1b1907e3f8e00291def1 \ - --hash=sha256:92a2ce50afa5625fb5ce7c9302cee61e23a57ccac52cd0410b4858e572f8614b \ - --hash=sha256:9d441d0e45798ec1fd330373bf7ffa6b795f229275f64016b6a193e6e2a51522 \ - --hash=sha256:a84ba3178d9128b9ffb52ce81ebab456e9fe959125b51109f5b73ebdfc6b60d6 \ - --hash=sha256:a868c1e3fe4f6f51232883b7bee7319a35e36644604577f4c6032cf957b9056b \ - --hash=sha256:a9150be2896fbe0096911bc9138a54e6fcc3814f197bc0c3d64d7c005a5e579d \ - --hash=sha256:ac699c8ec72a3a9de8109bd78821ab22f60b14cf2abccd970b5ff310e14158ed \ - --hash=sha256:bc116a70cc3a5dc3d1684db5268eff9399a0be8603980005e5b889564f1ea42f \ - --hash=sha256:bee2791b3f6fc034ce41268851462bf662ff87e8947e35fb6dd0115b4644a61f \ - --hash=sha256:c0046a619ecc845ccb4528b37b63426a0cbcb4f14d7940add3391f59f13701e6 \ - --hash=sha256:c16cb80efc017b054f78998c6b4b013cef509c7b3d802707ce1f85a1d68361bf \ - --hash=sha256:c3ff57aec4f264451739b18b7eab9d161d51af42b570ca0392fc051dcca28cb1 \ - --hash=sha256:c8dbfddfe5c604974e17c6f373cedd4d25cd67f84812ede7dea12128fa0c2015 \ - --hash=sha256:c8f30971cadd5dcf73bcfbbc5849b1f1e1f40db8cd846c4aa7d3b5e035c7b583 \ - --hash=sha256:c90a6ecba994a15b17a3f45d7ec74d34081df2f73bd1b090e2adc0317e4e01b6 \ - --hash=sha256:c9251d889348fe79a75e9b3e4d1b5fa651fca8a64500820685d73a3acc21b6a8 \ - --hash=sha256:ce821e6ba59148ed17c4567113b8683a6a0be9c9ac86f14e969919121efb61a5 \ - --hash=sha256:d1c950eebb9f0f15e3ef3591313482a5a611d16fc12d545e2018cd607f40f472 \ - --hash=sha256:d2a4bf67db76c7b6afc33de44fb1c318207c3224a30da02c70901936b5aafdf1 \ - --hash=sha256:d670329ee8dbbbf241b7c08069fe3f1d3a1a3e2d69c7d05ea008a7010d826298 \ - --hash=sha256:d8d06ea59006b1251ad5794bcc00121e148434826090ead0073c7b7fedebe431 \ - --hash=sha256:e02d3e2c3bfeb21185d5a4a70790d9df40629a87d8d7617dc22b4e864f665fa3 \ - --hash=sha256:e03bb575a96c59bc210d7d59862747f0012696b0dac3427ce8af33c7afb3d4a2 \ - --hash=sha256:e8afbc5162a0fe14b6463e1c4e45248a1b2fe2cbcecc8a5b9e511117080da0eb \ - --hash=sha256:e9027764dc5f1999fb4b4cabee1d0322c59e330c0a6485b436a68275f614277f \ - --hash=sha256:e96848faaafccc0abd631f1c5fb194eac0caee4f5a8777fdbb3e349d3a21741c \ - --hash=sha256:ec99efa03cf8ec11c8906aa4d4cc0c47df393bc9095c9dd64b89b9b43e220b04 \ - --hash=sha256:ed9de1b9b042f76fe5c312e4359eab58bf52ac7dfdf6887368a760410d809440 \ - --hash=sha256:f190a92fe46197ee64d32560eb121c2809bb843341733227f51538ce77b3410d \ - --hash=sha256:f3aee3adf16272bca81c5826eed55ba3c938add6d8c9e273f01c6b829ecfde22 \ - --hash=sha256:fb8291691ba7ff4e6e000224cc97a744a8d9588418535c9454fd8436911df612 \ - --hash=sha256:fe5424b38f61709b046df2ba7a6d7b54272ee1e2a2c56772d9cd309e4c1ea5ef \ - --hash=sha256:fece5229fd5ecdcd7a0738affb8c59890e13073ae5626544e13825f26c019d3c \ - --hash=sha256:ff036bbc1464993552fd1251b0a83fe102af334b301e3896d7aa05a4999ad042 - # via - # -c requirements-ci.txt - # preshed - # spacy - # thinc -decorator==5.3.1 \ - --hash=sha256:4cbcdd55a6efadb9dbea26b858f4fb3264567b52d69ca0d25b721b553f60ea82 \ - --hash=sha256:f47fe6fdbd2edd623ecfe36875d37aba411624e2670dd395dddae1358689bb3c - # via - # -c requirements-ci.txt - # librosa -et-xmlfile==2.0.0 \ - --hash=sha256:7a91720bc756843502c3b7504c77b8fe44217c85c537d85037f0f536151b2caa \ - --hash=sha256:dab3f4764309081ce75662649be815c4c9081e88f0837825f90fd28317d4da54 - # via - # -c requirements-ci.txt - # openpyxl -executing==2.2.1 \ - --hash=sha256:3632cc370565f6648cc328b32435bd120a1e4ebb20c77e3fdde9a13cd1e533c4 \ - --hash=sha256:760643d3452b4d777d295bb167ccc74c64a81df23fb5e08eff250c425a4b2017 - # via - # -c requirements-ci.txt - # stack-data -faiss-cpu==1.15.0 \ - --hash=sha256:22dddb013e764aad66dac6cd15b49c7598d60339e0591b73b5e081629419c21b \ - --hash=sha256:30da3029952f0de69f16ce31946fd63fc3e292c867749bbcd2c0a0f09fd06f65 \ - --hash=sha256:37170d5e9ead4b6bfd9c314afc39e17e92064068a0c5a4063dd3f39568c2667e \ - --hash=sha256:50ea471ef1f4f3580eda8ab0ec9727d4bf65fd71c444bf306ce7cdbba8a42b21 \ - --hash=sha256:5b940897b317febaa761088513a3db164fad3ac71a5e1ed7be9a052c9bf1a447 \ - --hash=sha256:5d0a2d5d33fe023e263d0d355a837f20db67578e3be27fc5f4012a273274abf6 \ - --hash=sha256:88fbe1acac6978869063cb2f9477f85718da596a6e0a17751618f9c756bce255 \ - --hash=sha256:90169515a95ea58a9a95d419e518907927a8ef54c46788396365ec5902c9c8df \ - --hash=sha256:dd383bb1ce06fabcff5785f998f253aa88f88dcbe1fe36c922417cd6666dd896 \ - --hash=sha256:e0fe7278f3784b7d205ae715a115801cafb75f6e55db6b0fbe83c4ff379f003f \ - --hash=sha256:ec9b29aae29e428c085c2d49dbb02e4673cdea75db418d420f9e60e0b4184498 - # via - # -c requirements-ci.txt - # semantica (pyproject.toml) -fastembed==0.8.0 \ - --hash=sha256:40bee672657574a1009e35ec50030a55f2b426842cb011845379817641bbbbd0 \ - --hash=sha256:75966edfa8b006ee78514c726bd7f6a50721dadc89305279052be9db72fd53e8 - # via - # -c requirements-ci.txt - # semantica (pyproject.toml) -filelock==3.32.2 \ - --hash=sha256:87dd94cf281e586d135fa51132b8e3d9a598b316e90377a288663c9321036c82 \ - --hash=sha256:c33351e1f49cae33414acbc6d56784e6ecee82514ec90795da1161fc4836b5b8 - # via - # -c requirements-ci.txt - # huggingface-hub - # torch -flatbuffers==25.12.19 \ - --hash=sha256:7634f50c427838bb021c2d66a3d1168e9d199b0607e6329399f04846d42e20b4 - # via - # -c requirements-ci.txt - # onnxruntime -fonttools==4.63.0 \ - --hash=sha256:032038247a96c1690f9f31e377c389383c902531b085aa4e4dabd6f57f870e69 \ - --hash=sha256:063e08bd17bd5a90127a14123de0d6a952dbc847695fd98b63c043d58057f90c \ - --hash=sha256:0c18358a155d75034911c5ee397a5b44cd19dd325dbb8b35fb60bf421d6a72ac \ - --hash=sha256:0eac00b9118c3c2f87d272e45341871c5b3066baa3c86897fa634a7c3fb59096 \ - --hash=sha256:1e874792a8212b44583ea02189d9e693906b2f78b261f372f95d6c563210ac1d \ - --hash=sha256:22135da48a348785c5e2d5d2d9d6bec5ed44adacbaeb9db12d9493bf6c6bfa68 \ - --hash=sha256:22693918177bd9ceabec4736d338045f357769416fc6b0b2508eefef75b08616 \ - --hash=sha256:27fdc65af8da6f88b9c6121c47a464cbe359fcfff7ff6fc2d37a1f395d755b78 \ - --hash=sha256:2b8ae05d9eacf6081414d759c0a352769ac28ce31280d6bb8e77b03f9e3c449f \ - --hash=sha256:2c14b4fd138c4bafcca294765c547914e1aa431ae1ca94ab99d8db08c958bd3b \ - --hash=sha256:308f957cdeaf8abe4e5f2f124902ef405448af92c90f80e302a3b771c2e6116b \ - --hash=sha256:37dd23e621e3b0aef1baa70a303b80aaf38449632cfc8fd2a55fb285bbccfc02 \ - --hash=sha256:445af2eab030a16b9171ea8bdda7ebf7d96bda2df88ee182a464252f6e05e20d \ - --hash=sha256:51394295f1a51de8b5f30bdb1e1b9a4231536c7064ef5c6e211eec19fa36036f \ - --hash=sha256:58dc6bb86a78d782f00f9190ca02c119cf5bbe2807536e361e18d42019f877d8 \ - --hash=sha256:59ac449f8cca9b4ffa08d2e7bbadad87ce710d69d1eda5c3c1ce579baa987272 \ - --hash=sha256:6b2248c5decb223562f7902ff6325077a073f608ee8e33e88ad88db734eb9f49 \ - --hash=sha256:6d4741eb179121cab9eea4cb2393d24492373a260d7945006358c08cfbf45419 \ - --hash=sha256:6db5140a60a5d731d21ec076745b40a310607731b0a565b50776393188649001 \ - --hash=sha256:6e528da43bc3791085f8cb6141b1d13e459226790240340fcbb4625649238b03 \ - --hash=sha256:796f27556dbe094c4824f75ca85267e4df776c79036c8441469a4df37038c196 \ - --hash=sha256:79cdc9f567aec74a72918fd060283911406750cbc9fd28c1316023deb6ce31a9 \ - --hash=sha256:7d76edbff9014094dbf03bd2d074709dfa6ec7aba13d838c937a2b33d2d6a86e \ - --hash=sha256:7d782fac32985914c351556f68ac0855391572bcd87de50e05970d3cd4c96fc5 \ - --hash=sha256:7dd683fef0663e9f0f45cf541d788d24caa3ec9db50796b588e1757d8b3bc007 \ - --hash=sha256:85be818f5506e8a7753153def2c9550178f0ecae6a47b5e0e8dbb23f7cc90380 \ - --hash=sha256:948428a275741f0b64b113c955425a953314f4b9ab9997f73a72c83e68e569c8 \ - --hash=sha256:9ced0bd02ac751dd6319b0da88aaef24414e3b0dbc32bb4f24944821a3741a27 \ - --hash=sha256:9e12f105d2b6342c559c298afb674006bb2893afc7102dcf8a1b55b0486b4e40 \ - --hash=sha256:a8b33a82979e0a6a34ff435cc81317be1f95ec1ebb7a3a2d1c8a6a54f02ae44e \ - --hash=sha256:a9faff9e0c1f76f9fd55899d2ce785832efebab37eb8ae13995853aef178bef0 \ - --hash=sha256:af2fd1664d00a397d75f806985ddb36282091c2131a73a6485c23b4a34722263 \ - --hash=sha256:afefc1ed0a59785a7fb06ea7e1678e849c193e1e387db783579bc7b3056fcfcb \ - --hash=sha256:b1cd75a03ad8cb5bc40c90bfde68c0c47de423aa19e5c0f362b43520645eea94 \ - --hash=sha256:ba04cb5891d4c0c21b6da95eda8d7b090021508a294fff33464fc7d241e0856b \ - --hash=sha256:bf00f21eb5fb721dbaf73d1e9da6d02a1af7768f2ebcf9798be98beab8ba90f6 \ - --hash=sha256:c0425b277a59cff3d80ca42162a8de360f318438a2ac83570842a678d826d579 \ - --hash=sha256:c1aaa4b9c75798400ac043ce04d74e7830376c85095a5a6ed7cba2f17a266bf4 \ - --hash=sha256:c2a2a42198b696a6f48fad91709afb55176e66a5e566131219dba372fb7f8c59 \ - --hash=sha256:caeb583deeb5168e694b65cda8b4ee62abedfa66cf88488734466f2366b9c4e0 \ - --hash=sha256:cb014d58140a38135f16064c74c652ed57aa0b75cbf8bb59cac821f7edb5334e \ - --hash=sha256:ccf41f2efdf56994d22d73bef4ced1052161958169428d06ba9724ea9e9a64be \ - --hash=sha256:cd7e9857e5e63738b9d9fd707bc1f59c8b09e5177726d23664db393c59bb08bd \ - --hash=sha256:d76ac49f929aecaf82d83250b8347e099d7aecba0f4726c1d9b6df3b8bb5fe18 \ - --hash=sha256:d7e5c9973aa04c95650c96e5f5ad865fbf42d62079163ecfab1e01cbc2504c22 \ - --hash=sha256:dcf076a4474fe0d7367e5bbf5b052c7284fa1feca729c04176ce513521afd8a0 \ - --hash=sha256:e3297a6a4059b4acc3a1e9a8b04741f240a80044eef08ebd32e8b5bcdddce75b \ - --hash=sha256:ee08ebfa58f6e1aeff5697ab9582105bb620008c1caafb681e4c557e7483027b \ - --hash=sha256:ef3048ef05dbb552b89817713d9cac912e00d0fde4a3105c00d29e52e10c89af \ - --hash=sha256:fd1e3094f42d806d3d7c79162fc59e5910fcbe3a7360c385b8da969bc4493745 - # via - # -c requirements-ci.txt - # matplotlib -fsspec==2026.7.0 \ - --hash=sha256:b57ddbafedfaef7018c1ecab32aa200a9d7ca26b77965f64e48b70061249d279 \ - --hash=sha256:c803c40f4cf860b49dea58ee3e1c33cb9c790520e233537e1340049f89b82a88 - # via - # -c requirements-ci.txt - # huggingface-hub - # torch -gensim==4.4.0 \ - --hash=sha256:05a027238b5eb544a17afe73ec227d6a7e0c6b4e2108b1131c0b8f291a0e0e2e \ - --hash=sha256:06704acd354728262f9f32a9435c70945930f8d11b58531b3cb5c699f4757ad4 \ - --hash=sha256:0845b2fa039dbea5667fb278b5414e70f6d48fd208ef51f33e84a78444288d8d \ - --hash=sha256:120d58351f67ef38f3b102a724fb2ece298b20a06fbeae02797f18c1087591ca \ - --hash=sha256:1853fc5be730f692c444a826041fef9a2fc8d74c73bb59748904b2e3221daa86 \ - --hash=sha256:23a2a4260f01c8f71bae5dd0e8a01bb247a2c789480c033e0eaba100b0ad4239 \ - --hash=sha256:3bec3e6a1ecaa6439b21a3e42ceb0ca67ffabc114b646f89b1aab5fe69a39ffc \ - --hash=sha256:484286ff973c77d262776e44e0bc3b958331b7b0f5d61f83014f6cc12f1a814f \ - --hash=sha256:4b73ff30af6ddd0d2ddf9473b1eb44603cd79ec14c87d93b75291802b991916c \ - --hash=sha256:54a32a196502bf0e376cd7ef935be97f7ca96cc0f90ee9514d48406b7bd21bad \ - --hash=sha256:59d0d29099a76dd97d4563e002f3488a43e51f99d46387025da38007ebfeeff9 \ - --hash=sha256:5c4d8f2a5e69bc246931dfd8e03d0ce3f3bcf82adbbdbcf20dfc35c43b8e1035 \ - --hash=sha256:5e2c1d584d1c7d16b2a0fe7d2f6f59a451422df7b5edb7e3ca46c8e462782127 \ - --hash=sha256:6ecb7aed37fb92d24e15a6adbabe693074003263db0fd9ce97c9f4234a9edc1b \ - --hash=sha256:724b93c9b6e92cd15837048c71b7fdd38059276c85dd1f9c0375576f0aea153f \ - --hash=sha256:7590e7313848ca8f3ff064898bcd6ecf6ec71c752cf4d3ec83f7ac992bc7c088 \ - --hash=sha256:7e110e2d3533f5b35239850a96cb2016a586ecd85671d655079b3048332b7169 \ - --hash=sha256:9033b18920b7774e68eafacdbd87252ffa29382ec465ddb88bd036e00fc86365 \ - --hash=sha256:91a7fa5e814e7b1bad4b2dffa8d62c1e55410d5cbdf930714c1997ffb4404db8 \ - --hash=sha256:a3f5b626da5518e79a479140361c663089fe7998df8ba52d56e1ded71ac5bdf5 \ - --hash=sha256:b3a3f9bc8d4178b01d114e1c58c5ab2333f131c7415fb3d8ec8f1ecfe4c5b544 \ - --hash=sha256:b8961b7a2bb5190b46bc6cd26c29d5bfea22f99123ed5f506ebd0aaf65996758 \ - --hash=sha256:d56613fcb77d4068c1be845843508dcd9d384ede34700a61bbeac32b947d1fc3 \ - --hash=sha256:de863f72b97ee142e7ce1c28da8f8e5473b76064ecbfe139da62127f46ab5c07 \ - --hash=sha256:e29a2109819fdf5ff59bef670c8c22c1690d52239fe172b43e408908871de5f6 \ - --hash=sha256:f0977e5e5df03f829f322662e37ac973b93272c526f1432f865d214c0b573f98 - # via - # -c requirements-ci.txt - # semantica (pyproject.toml) -gitdb==4.0.12 \ - --hash=sha256:5ef71f855d191a3326fcfbc0d5da835f26b13fbcba60c32c21091c349ffdb571 \ - --hash=sha256:67073e15955400952c6565cc3e707c554a4eea2e428946f7a4c162fab9bd9bcf - # via - # -c requirements-ci.txt - # gitpython -gitpython==3.1.59 \ - --hash=sha256:0a1475cfdc38a5bfba1a3e9a4a9da52a39749ecec322b772915c019f94e5b7e4 \ - --hash=sha256:67a82f537384578643624c8b2c531938a9b82be431663e575dcf638526631d4c - # via - # -c requirements-ci.txt - # semantica (pyproject.toml) -grpcio==1.83.0 \ - --hash=sha256:009667eaf3dcd5224c713589cdc98e7ca4ed0ff0b61132c6b276e930eb83a2df \ - --hash=sha256:10b3fa0475eb572c9a81a6fe37fa16a9c500c0c91cfc148cac15692b7e3c2867 \ - --hash=sha256:1aa567f8c3f19850ffd5d2858c9a8ea7c80f0db6c01186b71eb31e923ec984f5 \ - --hash=sha256:1c699bbb20f143c8f2bff219de578aa2dc1f919399d67dc702b038b986ee62df \ - --hash=sha256:28f6c35ac8fcf10e4594f138e468f194360089dde40d126a7033e863fc479930 \ - --hash=sha256:2b5e75c34842cd9c1b95285ca395c6a569664b81e3ffa6b714125922942abaaf \ - --hash=sha256:2bb48cb5e6dd005ca12b89ce4b6ac0b48ff3112c747542ee7986ef611a8ca6d9 \ - --hash=sha256:32e11c37f5285b0c6fa3042c05fe06903696689749833fc64e67dec71b9bbe33 \ - --hash=sha256:33898e6a28e4ae598f1577cb1c4fec2a15c033d0ec52b9b45a09610dd045b9da \ - --hash=sha256:35a5b1c192496b6c25956eebfa963468935612206fd2543ac3ce981e6a5e0f03 \ - --hash=sha256:3f351629f6ae16ecc0ec3553e586a6763ffd9f6114044286d0cbec3e09241bfa \ - --hash=sha256:4772402f43517b4824980be4b3b2274a81eec0004a70009473c31b340d43e223 \ - --hash=sha256:4e3eedfc92b6b9f2960115e7e620cf0cbf80bb7849a51ce3820dc54dfd88b6b9 \ - --hash=sha256:4fcaa7c45c45b4a89e2867d1f1785d9481a788399d915e341ed2eb49aeef9dd4 \ - --hash=sha256:5882c1a721b50ce0123ee5e839e1ab059ad72a7ade76cdf2d5bd833b56791acf \ - --hash=sha256:5f20a988480b0f28207f057f7f7ae1313393c3cef0adcfeae8248f9947eaf881 \ - --hash=sha256:61007cd08640abc5c54547ee32505474c482cd733a53cb87551ea81faa6350af \ - --hash=sha256:62003babc444a606dcd1f009cd16391ce23669ae4ad6ec267a873da7937a69f5 \ - --hash=sha256:6662f3b1e07cc7493d437351860dc867bddc6a93c83ecf33bbfdaf0c217ab2d0 \ - --hash=sha256:6755ed67cc3e454d51ae9f6e1915b80d3942fa4de956ef48dacd45ab7f40b727 \ - --hash=sha256:6b6c666a1d5613ff360c9e90f44665e3a88b25a815209ddbc0917eec281931cb \ - --hash=sha256:6be5c807b717be3dd649446f021301fd7907e376318675d2147823071034112a \ - --hash=sha256:6e01ecd9d8ef280abe1365138a4dc318f9a5287f4cb1b41d07816f796653f735 \ - --hash=sha256:6fb8a1dd0c6f0f931e69e9d0dc6d1c406ed2a44fa963414eafba07b7fb685d16 \ - --hash=sha256:7416952ca770477990257206276999056f8316d79196f2f25942393e58a20b49 \ - --hash=sha256:74fe6f9e8a35c7dbf32255ee154d15e3e5338a81ed39173d079d594d2e544cd1 \ - --hash=sha256:7674587248fbbb2ac6e4eecf83a8a0f3d91a928f941de571acfd3a2f007fbc24 \ - --hash=sha256:7936f2a56cf04f6514705c0fedf400971de01b6aa1719327e4718f410a765e2b \ - --hash=sha256:7bd82671b39065ba18cd536e9cd45b27ff649053f81ddd2c6a966d595067080f \ - --hash=sha256:8f6c395e493d20c39b29392ca200e9aaeb78d0bc2f04db0c0a7da7ddc939aa57 \ - --hash=sha256:8fe04f1050a59f875601eb55d42b4f66946fe89817f967e34db1462ccd07dadf \ - --hash=sha256:8ff0b8767ddd62704e0d9571c1890af08d84a3a689ebba1807e62519d0b3277f \ - --hash=sha256:a21cb4eeeba124443f399be2e8b624943cde864dcbe588cb42e5c483a52a906c \ - --hash=sha256:aa074041231f03959cb097dd5517b0677b8ea49215bae01d5710a7b69dd59969 \ - --hash=sha256:aeb339838db07600481ef869507279b75326c75eac6d10f7afa62a0da1d2bcdd \ - --hash=sha256:b0a0be840e51b6b7ee9df9269770faf77bdf4b771053c257c21d12bad607714c \ - --hash=sha256:bb669918fd88936b15599caff4160a77ab74bdeb25f2231f6e45b61282d6107b \ - --hash=sha256:bc60215b5cb9fc8ca72942c498b551ac2305bd08f6ef8d4e3f0d21b64fbecd61 \ - --hash=sha256:c19b454d3d3f28db81f2c7c4dbaee96e7f6fd149721733ffe79d6bc530f17404 \ - --hash=sha256:c6444666317338e903093c7c756e6cc88eee59f798cb8dd41e87725bf54e1617 \ - --hash=sha256:c834e86d8fd2f03d7e4db49a027f7c5b89c5b88eed305543a5295bd6fee61e40 \ - --hash=sha256:cb056f6e171c42639a50460b2929c82241fda51f71cf3dcdd68090fe45095a45 \ - --hash=sha256:cb2906c61db4f9c64cc360054b5df70eeb81846228e9e56a4944bd415a63dadc \ - --hash=sha256:d05ff664100d429335b93c91b8b34ddf9e94a112205e7fa06dede309e44a4e4c \ - --hash=sha256:ee94a4016fdf8699fb1fd8a38652475ff677f1c72074cee44deeeb9a7e95e745 \ - --hash=sha256:f1c3e5689d4b90987b1d72022bcfe866a9a3dc66197484cf856d96b6150e7f45 \ - --hash=sha256:f47d62808b4c0a97b78bff88a6d4ca283a2a492b9a04a87d814af95ca3b9c19c \ - --hash=sha256:f4cee5fc86e84a0cf7ad1574b454c3320e087c07f55b7df5dc0ac6a873fb90c0 \ - --hash=sha256:f5e822a7e7d03282f6ad225e710493c48b9057a353358344a5f7c42b2b37618d \ - --hash=sha256:f5f410d7c2903eabb34789dfd6342eef04af1ad459943936b7e09a9f5bd417b9 \ - --hash=sha256:fba099b716e73512d61b97f71ea3c31a72abb36904036e316bf4dd148ca8dcc8 + # joblib +grpcio==1.83.1 \ + --hash=sha256:0468b627f2987c9a77f7580030207cbd85457ffe52998beff4f0b5c38c58a72c \ + --hash=sha256:05ba265193fbd9f63355311ec7567bba32a72aeb8e9fd7b3443e4fcad87b0750 \ + --hash=sha256:0d07661944477517b12a239e18720c8d9038f80a62f2c56260fae80327f43d2a \ + --hash=sha256:0f736f8359cf7cb8d0914a290999765a4342b0c35f01adc6e3ba24598f9d62b7 \ + --hash=sha256:145b0050d24eb38accd9dc7ae09a3c09b8e7330159f3cfb46b1dba8711d50c42 \ + --hash=sha256:16138031a47b771860a16a975b53087f4fd5bbdbb2c03a188c5d90ad65d2bdae \ + --hash=sha256:179368d9361854616ce6f397d4716e07480129652752fcbcfc5a7260455ad6f2 \ + --hash=sha256:1fea1ae4795d4790579995a4dd5e20e7494d358e29a340e8368dab9723264328 \ + --hash=sha256:20d944d967843f8183f9f23d5916388362e5f8eeeae855bbe4354d906dc9f31b \ + --hash=sha256:2110059146fb0ea216e1ffddb29377b5cc2fd412a5b0a92e102616bd5edf18c2 \ + --hash=sha256:215cec07d11176507387bda4bf2751816e880f9bff8dc1ca524bfbb8ed8f2fad \ + --hash=sha256:2a141f7bfc1601a0942405a8af6334ab21ba1dd0fa49b8427686df7beebd374d \ + --hash=sha256:2e57af456385491a76e13c4aada8c8f43a8e47051e06ea97a9dbe2a49654e6db \ + --hash=sha256:34f1841fc6d1d76f8a2d74177eafa2d1ec7d7e039633488c9fcc1b375a1fc165 \ + --hash=sha256:47e6934ad38779271e2e7cc5f78a63a407cf3d98114c65c1fdbcd3f5a716f29b \ + --hash=sha256:4910b62f7d12197160bfb7de06d876d64dd12d43483e8292f98f49ca09b628d9 \ + --hash=sha256:4e7c1468cf37cca17ab18bc8072901eed8daeb81685589ccd07988e5a750ee67 \ + --hash=sha256:547645f02499c972f3edec9be4db9997f1d03df307c1c199772342ed6d8b3c6d \ + --hash=sha256:55656318d5dd387077396dffb929171ca3966e24bfead9a6c5dba9f889062cb4 \ + --hash=sha256:583bf2e8255040a4a312f9572dfe62a05271437b149550e1a536d5c47d2d1e8a \ + --hash=sha256:5acd14c6ddf047de62cbf8745b11103ea91abbf57d1b8edd5395ccd9fcd13abb \ + --hash=sha256:5ccc26715fd4defca5e129e280dd883b1737b65045ec50ffe22ce42104089519 \ + --hash=sha256:5cce1d9fe2887239f054dc9c314597e04f33d2e6bd3150a91c4946d7e5be5d98 \ + --hash=sha256:623c87c6d4a1cb30d82c4e896f95477050f2e01b4a1f8cf91ff2b1abdf89c457 \ + --hash=sha256:65c5a7210911ffe0f67b1cdc5308f9854b6d1f1b345e3e49ab7cac1ba50fa346 \ + --hash=sha256:72578aa07a4008f17521ef52debcc3acfd1e2c5426243bc3ffb56a38bfe610b7 \ + --hash=sha256:7b94174cbca93316888f805efbeb08f1c020f7b7493d2d50cc4f6b64ebb7e8bd \ + --hash=sha256:7d43e3bd2b7d749c2dbd41c2cc83d550c3343d299a19acbbba9e37ad8c11fa8e \ + --hash=sha256:81bbf35a46bf8cad2dfbb2eccc19c711befb58b288acb534bbcd0d74283202a6 \ + --hash=sha256:8b3c87ca908296bf125f841d3e1a2225a2b39aaa8ed7a57e7ccde465ee519bab \ + --hash=sha256:8d228e253b77865efcbdd7b5894ca882c9e0ea98c02b7d20582e61ded8dfd4b5 \ + --hash=sha256:907a5e5afb31f7a46376afc1a1edddd7afa00a74bbbc5b78979bbc34479581f6 \ + --hash=sha256:947d945f52e8ecf3cafd2bb7113502a16ccfda3e12c854443094de32d83ad432 \ + --hash=sha256:9cee6fcbf2eb57c4b49451787bfa87be8efc1ca02a0b327dd4b54d44502e362b \ + --hash=sha256:9daf5acf4fc9d5f5627229969c2580a91e511779d76e4ccdeb9f4770f05d8bc2 \ + --hash=sha256:9e703effe3ae779925c82ac24fdb82cf4105e1096810151ed9501c5f34546b9c \ + --hash=sha256:a2aea8bd6e0a34f12cbaddb7bb70bec836818789fa5c7ab7572c6b745396a2d4 \ + --hash=sha256:a4a87dc86b0393257a11eb11e911c4c3456cbacd1c1ab9e9441060d9a3ad126b \ + --hash=sha256:a6a282e81530cead60bbd752cc04950a57f224379e9821495d6a35bd5ce9b1f4 \ + --hash=sha256:abce7d43ec29cd39230fa8339de1a07643b55adc412a454850fbd875349950ff \ + --hash=sha256:b59eaaeeb03dde0a2708095fb50f1afa94f11dc1b459bb7790b53bfb8cf95153 \ + --hash=sha256:b74f2a1d9ab1dfa3e263ef33d581613679b78d0884babf11671af26e45570ead \ + --hash=sha256:b7ace1f740b36fcd451a1bb96f71ee7650e60b308822baeb66a023965bc27f4b \ + --hash=sha256:c0f3f20c90e72a171917ae65706500b096a1c3eb5f162c3ce702a2e25635f132 \ + --hash=sha256:c12e1fc59c6dc26d10d9144453ddc6cbfe4cd4c31e874ed2d0132f88e685eb8b \ + --hash=sha256:c7e9e19413d43077d5a5c77b02ff82610209088e8f98da929347bc03d4c848d1 \ + --hash=sha256:d0dda8af248f6971555e1d4425f64864ce4e7369c5f8ef57c3e82a9bef77e22f \ + --hash=sha256:e256f95a40e3b0183a98556fb7164d24b97eeb353123ccabfcba94712b35ee2a \ + --hash=sha256:e572da3e247b28a98f46636d33c756e81ffb0f5def96c231ba45332333060595 \ + --hash=sha256:e844cdb25c3c93c7572e0a37137c12305efea493be4eb65801b3ee93f180c186 \ + --hash=sha256:f732feb060ef57c1a040c24cee072ba9fab99bd0a7d2c916ef3f1c4d84b98974 # via # -c requirements-ci.txt # semantica (pyproject.toml) @@ -840,27 +319,6 @@ h11==0.16.0 \ # via # -c requirements-ci.txt # httpcore -hf-xet==1.6.0 \ - --hash=sha256:0e6e21fa3cdfcdcd76748564bf593870a5e013f47d97cf10aed63aa222cff5b7 \ - --hash=sha256:23379c2f9ec8696d952b16414a2bae72cad86a52df869b050698ba60f538c675 \ - --hash=sha256:2e58454a340b3556dfa4972d5451aff4fba8dd42a236600ba1a1d2b1514f0fef \ - --hash=sha256:35cec30d75c6f9eb9c16a77cef68e85a103b72e24d4b473714ec9ff06428bab9 \ - --hash=sha256:3dc3e35441ba395006af5aaacc40ef2e603c51ef46c3530b9156185f00935ea3 \ - --hash=sha256:4fc74352a17015bd0ee90038bc9efe38db894cde45f268b6712b04fce8cd0acb \ - --hash=sha256:5153e6bb103ad49d6ea9f1b2e230db5a2ea32551ad09a706d2f61d7c7c80d80e \ - --hash=sha256:5789835d7c6bc9436962853192082374297fb72d7eff7e7762ec25ceb7e25338 \ - --hash=sha256:633dc0cd71d32da58ab8c03ad38e2fac452c15c2b0a2866ebf6ededfe0a5061d \ - --hash=sha256:70cbb9c896901600128cb9b6f06e132954fbede1db30f31f7c6c63f84cb7c31d \ - --hash=sha256:75765820ce4700db3750c94acc8fe27c5fae4c9ec000a0dbac3ca082acf97765 \ - --hash=sha256:8fb4f71cba6129110c3374a33f919001ff130488fc23553698e34cc1c2a1198c \ - --hash=sha256:948f15d3a9545cfe5932f6bd8b440f6ae630aee108f14b7bd6c561f7c2dcc522 \ - --hash=sha256:d62671bb130879cef0ee4c9ebe47a14af6c66ec53e6d84dc15936e5ffdfac82f \ - --hash=sha256:f0906082d9932ae0c0057fa194041c22b4e2cdb46b2592ef3b91f020d62a081a \ - --hash=sha256:f2f7278c05c22fd60cb436cda1269649b3e81db65ecdc8496e5e164aa4143e7b \ - --hash=sha256:fb4fadde1b2b70bf4c0c14a6dccbe7194b1c28947fefd5bbe3fed9d940676c3b - # via - # -c requirements-ci.txt - # huggingface-hub httpcore==1.0.9 \ --hash=sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55 \ --hash=sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8 @@ -873,848 +331,43 @@ httpx==0.28.1 \ # via # -c requirements-ci.txt # semantica (pyproject.toml) - # huggingface-hub - # weasel -huggingface-hub==1.27.0 \ - --hash=sha256:7df6827c2f956c60fbaa64646e979e566db76f619dd0a9729dfb8c5a3eb4f68d \ - --hash=sha256:c1fed40ea82a6b41b477f5243546549b792ae0a93abcea608cff66089bf8f8df - # via - # -c requirements-ci.txt - # fastembed - # sentence-transformers - # tokenizers - # transformers -idna==3.18 \ - --hash=sha256:7f952cbe720b688055e3f87de14f5c3e5fdaa8bc3928985c4077ca689de849a2 \ - --hash=sha256:ffb385a7e039654cef1ab9ef32c6fafe283c0c0467bba1d9029738ce4a14a848 +idna==3.19 \ + --hash=sha256:5e0811a4383b21dc5838069f801c4fb62113b7447663d2530d2bd6e77b49bf15 \ + --hash=sha256:815e7be7a7806d54abb586dc943addc79e8b2ee16915059658cbeff4b1b43bf4 # via # -c requirements-ci.txt # anyio # httpx # requests -ipython==9.16.1 \ - --hash=sha256:4acae635506f6d352d94c4899a19d5f85f8bc4d230932342dca556fdab1c69b4 \ - --hash=sha256:5a3d1f9a47ff216d6cf9cf863124f6a2c1a198d1354c546a4d24a370a283b64c +joblib==1.6.0 \ + --hash=sha256:2ccc96785b12046c08fd6d55839c12857831b54a3c1673ffadd2f04bfc4eda03 \ + --hash=sha256:3dbbf9f6e4b592a2357b854608e980fe6390d131d7a82f011a377ef2ebef7aba # via # -c requirements-ci.txt - # ipywidgets -ipython-pygments-lexers==1.1.1 \ - --hash=sha256:09c0138009e56b6854f9535736f4171d855c8c08a563a0dcd8022f78355c7e81 \ - --hash=sha256:a9462224a505ade19a605f71f8fa63c2048833ce50abc86768a0d81d876dc81c - # via - # -c requirements-ci.txt - # ipython -ipywidgets==8.1.8 \ - --hash=sha256:61f969306b95f85fba6b6986b7fe45d73124d1d9e3023a8068710d47a22ea668 \ - --hash=sha256:ecaca67aed704a338f88f67b1181b58f821ab5dc89c1f0f5ef99db43c1c2921e - # via - # -c requirements-ci.txt - # semantica (pyproject.toml) -jedi==0.20.0 \ - --hash=sha256:7bdd9c2634f56713299976f4cbd59cb3fa92165cc5e05ea811fb253480728b67 \ - --hash=sha256:c3f4ccbd276696f4b19c54618d4fb18f9fc24b0aef02acf704b23f487daa1011 - # via - # -c requirements-ci.txt - # ipython -jinja2==3.1.6 \ - --hash=sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d \ - --hash=sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67 - # via - # -c requirements-ci.txt - # spacy - # torch -joblib==1.5.3 \ - --hash=sha256:5fc3c5039fc5ca8c0276333a188bbd59d6b7ab37fe6632daa76bc7f9ec18e713 \ - --hash=sha256:8561a3269e6801106863fd0d6d84bb737be9e7631e33aaed3fb9ce5953688da3 - # via - # -c requirements-ci.txt - # librosa - # pynndescent # scikit-learn -jupyterlab-widgets==3.0.16 \ - --hash=sha256:423da05071d55cf27a9e602216d35a3a65a3e41cdf9c5d3b643b814ce38c19e0 \ - --hash=sha256:45fa36d9c6422cf2559198e4db481aa243c7a32d9926b500781c830c80f7ecf8 - # via - # -c requirements-ci.txt - # ipywidgets -kiwisolver==1.5.0 \ - --hash=sha256:012b1eb16e28718fa782b5e61dc6f2da1f0792ca73bd05d54de6cb9561665fc9 \ - --hash=sha256:01808c6d15f4c3e8559595d6d1fe6411c68e4a3822b4b9972b44473b24f4e679 \ - --hash=sha256:0255a027391d52944eae1dbb5d4cc5903f57092f3674e8e544cdd2622826b3f0 \ - --hash=sha256:0b85aad90cea8ac6797a53b5d5f2e967334fa4d1149f031c4537569972596cb8 \ - --hash=sha256:0bf3acf1419fa93064a4c2189ac0b58e3be7872bf6ee6177b0d4c63dc4cea276 \ - --hash=sha256:0c50b89ffd3e1a911c69a1dd3de7173c0cd10b130f56222e57898683841e4f96 \ - --hash=sha256:0cbe94b69b819209a62cb27bdfa5dc2a8977d8de2f89dfd97ba4f53ed3af754e \ - --hash=sha256:0df54df7e686afa55e6f21fb86195224a6d9beb71d637e8d7920c95cf0f89aac \ - --hash=sha256:0e3aafb33aed7479377e5e9a82e9d4bf87063741fc99fc7ae48b0f16e32bdd6f \ - --hash=sha256:12e91c215a96e39f57989c8912ae761286ac5a9584d04030ceb3368a357f017a \ - --hash=sha256:1465387ac63576c3e125e5337a6892b9e99e0627d52317f3ca79e6930d889d15 \ - --hash=sha256:16b85d37c2cbb3253226d26e64663f755d88a03439a9c47df6246b35defbdfb7 \ - --hash=sha256:1b0feb50971481a2cc44d94e88bdb02cdd497618252ae226b8eb1201b957e368 \ - --hash=sha256:1d49a49ac4cbfb7c1375301cd1ec90169dfeae55ff84710d782260ce77a75a02 \ - --hash=sha256:1d9daea4ea6b9be74fe2f01f7fbade8d6ffab263e781274cffca0dba9be9eec9 \ - --hash=sha256:1dd9b0b119a350976a6d781e7278ec7aca0b201e1a9e2d23d9804afecb6ca681 \ - --hash=sha256:1f1489f769582498610e015a8ef2d36f28f505ab3096d0e16b4858a9ec214f57 \ - --hash=sha256:2517e24d7315eb51c10664cdb865195df38ab74456c677df67bb47f12d088a27 \ - --hash=sha256:295d9ffe712caa9f8a3081de8d32fc60191b4b51c76f02f951fd8407253528f4 \ - --hash=sha256:2a075bd7bd19c70cf67c8badfa36cf7c5d8de3c9ddb8420c51e10d9c50e94920 \ - --hash=sha256:32cc0a5365239a6ea0c6ed461e8838d053b57e397443c0ca894dcc8e388d4374 \ - --hash=sha256:332b4f0145c30b5f5ad9374881133e5aa64320428a57c2c2b61e9d891a51c2f3 \ - --hash=sha256:377815a8616074cabbf3f53354e1d040c35815a134e01d7614b7692e4bf8acfa \ - --hash=sha256:38f4a703656f493b0ad185211ccfca7f0386120f022066b018eb5296d8613e23 \ - --hash=sha256:3ac2360e93cb41be81121755c6462cff3beaa9967188c866e5fce5cf13170859 \ - --hash=sha256:3c4923e404d6bcd91b6779c009542e5647fef32e4a5d75e115e3bbac6f2335eb \ - --hash=sha256:3cdcb35dc9d807259c981a85531048ede628eabcffb3239adf3d17463518992d \ - --hash=sha256:41024ed50e44ab1a60d3fe0a9d15a4ccc9f5f2b1d814ff283c8d01134d5b81bc \ - --hash=sha256:413b820229730d358efd838ecbab79902fe97094565fdc80ddb6b0a18c18a581 \ - --hash=sha256:4432b835675f0ea7414aab3d37d119f7226d24869b7a829caeab49ebda407b0c \ - --hash=sha256:4db576bb8c3ef9365f8b40fe0f671644de6736ae2c27a2c62d7d8a1b4329f099 \ - --hash=sha256:4e7f886f47ab881692f278ae901039a234e4025a68e6dfab514263a0b1c4ae05 \ - --hash=sha256:4e9750bc21b886308024f8a54ccb9a2cc38ac9fa813bf4348434e3d54f337ff9 \ - --hash=sha256:5060731cc3ed12ca3a8b57acd4aeca5bbc2f49216dd0bec1650a1acd89486bcd \ - --hash=sha256:50847dca5d197fcbd389c805aa1a1cf32f25d2e7273dc47ab181a517666b68cc \ - --hash=sha256:5092eb5b1172947f57d6ea7d89b2f29650414e4293c47707eb499ec07a0ac796 \ - --hash=sha256:5124d1ea754509b09e53738ec185584cc609aae4a3b510aaf4ed6aa047ef9303 \ - --hash=sha256:51e8c4084897de9f05898c2c2a39af6318044ae969d46ff7a34ed3f96274adca \ - --hash=sha256:530a3fd64c87cffa844d4b6b9768774763d9caa299e9b75d8eca6a4423b31314 \ - --hash=sha256:56fa888f10d0f367155e76ce849fa1166fc9730d13bd2d65a2aa13b6f5424489 \ - --hash=sha256:58f812017cd2985c21fbffb4864d59174d4903dd66fa23815e74bbc7a0e2dd57 \ - --hash=sha256:59cd8683f575d96df5bb48f6add94afc055012c29e28124fcae2b63661b9efb1 \ - --hash=sha256:5ae8e62c147495b01a0f4765c878e9bfdf843412446a247e28df59936e99e797 \ - --hash=sha256:5b233ea3e165e43e35dba1d2b8ecc21cf070b45b65ae17dd2747d2713d942021 \ - --hash=sha256:6176c1811d9d5a04fa391c490cc44f451e240697a16977f11c6f722efb9041db \ - --hash=sha256:62f59da443c4f4849f73a51a193b1d9d258dcad0c41bc4d1b8fb2bcc04bfeb22 \ - --hash=sha256:6783e069732715ad0c3ce96dbf21dbc2235ab0593f2baf6338101f70371f4028 \ - --hash=sha256:6ab8ba9152203feec73758dad83af9a0bbe05001eb4639e547207c40cfb52083 \ - --hash=sha256:70d593af6a6ca332d1df73d519fddb5148edb15cd90d5f0155e3746a6d4fcc65 \ - --hash=sha256:72ec46b7eba5b395e0a7b63025490d3214c11013f4aacb4f5e8d6c3041829588 \ - --hash=sha256:7a32f72973f0f950c1920475d5c5ea3d971b81b6f0ec53b8d0a956cc965f22e0 \ - --hash=sha256:7a4aa69609f40fce3cbc3f87b2061f042eee32f94b8f11db707b66a26461591a \ - --hash=sha256:7c60d3c9b06fb23bd9c6139281ccbdc384297579ae037f08ae90c69f6845c0b1 \ - --hash=sha256:800ee55980c18545af444d93fdd60c56b580db5cc54867d8cbf8a1dc0829938c \ - --hash=sha256:80aa065ffd378ff784822a6d7c3212f2d5f5e9c3589614b5c228b311fd3063ac \ - --hash=sha256:86e0287879f75621ae85197b0877ed2f8b7aa57b511c7331dce2eb6f4de7d476 \ - --hash=sha256:893ff3a711d1b515ba9da14ee090519bad4610ed1962fbe298a434e8c5f8db53 \ - --hash=sha256:89fc958c702ee9a745e4700378f5d23fddbc46ff89e8fdbf5395c24d5c1452a3 \ - --hash=sha256:8c63c91f95173f9c2a67c7c526b2cea976828a0e7fced9cdcead2802dc10f8a4 \ - --hash=sha256:8df31fe574b8b3993cc61764f40941111b25c2d9fea13d3ce24a49907cd2d615 \ - --hash=sha256:8f9baf6f0a6e7571c45c8863010b45e837c3ee1c2c77fcd6ef423be91b21fedb \ - --hash=sha256:9027d773c4ff81487181a925945743413f6069634d0b122d0b37684ccf4f1e18 \ - --hash=sha256:9190426b7aa26c5229501fa297b8d0653cfd3f5a36f7990c264e157cbf886b3b \ - --hash=sha256:940dda65d5e764406b9fb92761cbf462e4e63f712ab60ed98f70552e496f3bf1 \ - --hash=sha256:94eff26096eb5395136634622515b234ecb6c9979824c1f5004c6e3c3c85ccd2 \ - --hash=sha256:9eed0f7edbb274413b6ee781cca50541c8c0facd3d6fd289779e494340a2b85c \ - --hash=sha256:ad4ae4ffd1ee9cd11357b4c66b612da9888f4f4daf2f36995eda64bd45370cac \ - --hash=sha256:b0f172dc8ffaccb8522d7c5d899de00133f2f1ca7b0a49b7da98e901de87bf2d \ - --hash=sha256:b2af221f268f5af85e776a73d62b0845fc8baf8ef0abfae79d29c77d0e776aaf \ - --hash=sha256:b7d335370ae48a780c6e6a6bbfa97342f563744c39c35562f3f367665f5c1de2 \ - --hash=sha256:b83af57bdddef03c01a9138034c6ff03181a3028d9a1003b301eb1a55e161a3f \ - --hash=sha256:bb5136fb5352d3f422df33f0c879a1b0c204004324150cc3b5e3c4f310c9049f \ - --hash=sha256:bc4d8e252f532ab46a1de9349e2d27b91fce46736a9eedaa37beaca66f574ed4 \ - --hash=sha256:bdd3e53429ff02aa319ba59dfe4ceeec345bf46cf180ec2cf6fd5b942e7975e9 \ - --hash=sha256:be12f931839a3bdfe28b584db0e640a65a8bcbc24560ae3fdb025a449b3d754e \ - --hash=sha256:be4a51a55833dc29ab5d7503e7bcb3b3af3402d266018137127450005cdfe737 \ - --hash=sha256:beb7f344487cdcb9e1efe4b7a29681b74d34c08f0043a327a74da852a6749e7b \ - --hash=sha256:bf4679a3d71012a7c2bf360e5cd878fbd5e4fcac0896b56393dec239d81529ed \ - --hash=sha256:c0e1403fd7c26d77c1f03e096dc58a5c726503fa0db0456678b8668f76f521e3 \ - --hash=sha256:c31c13da98624f957b0fb1b5bae5383b2333c2c3f6793d9825dd5ce79b525cb7 \ - --hash=sha256:c438f6ca858697c9ab67eb28246c92508af972e114cac34e57a6d4ba17a3ac08 \ - --hash=sha256:c8277104ded0a51e699c8c3aff63ce2c56d4ed5519a5f73e0fd7057f959a2b9e \ - --hash=sha256:c95cab08d1965db3d84a121f1c7ce7479bdd4072c9b3dafd8fecce48a2e6b902 \ - --hash=sha256:cc0b66c1eec9021353a4b4483afb12dfd50e3669ffbb9152d6842eb34c7e29fd \ - --hash=sha256:cdee07c4d7f6d72008d3f73b9bf027f4e11550224c7c50d8df1ae4a37c1402a6 \ - --hash=sha256:ce9bf03dad3b46408c08649c6fbd6ca28a9fce0eb32fdfffa6775a13103b5310 \ - --hash=sha256:cff8e5383db4989311f99e814feeb90c4723eb4edca425b9d5d9c3fefcdd9537 \ - --hash=sha256:d168fda2dbff7b9b5f38e693182d792a938c31db4dac3a80a4888de603c99554 \ - --hash=sha256:d1ffeb80b5676463d7a7d56acbe8e37a20ce725570e09549fe738e02ca6b7e1e \ - --hash=sha256:d36ca54cb4c6c4686f7cbb7b817f66f5911c12ddb519450bbe86707155028f87 \ - --hash=sha256:d4193f3d9dc3f6f79aaed0e5637f45d98850ebf01f7ca20e69457f3e8946b66a \ - --hash=sha256:d5cd5189fc2b6a538b75ae45433140c4823463918f7b1617c31e68b085c0022c \ - --hash=sha256:d618fd27420381a4f6044faa71f46d8bfd911bd077c555f7138ed88729bfbe79 \ - --hash=sha256:d76e2d8c75051d58177e762164d2e9ab92886534e3a12e795f103524f221dd8e \ - --hash=sha256:daae526907e262de627d8f70058a0f64acc9e2641c164c99c8f594b34a799a16 \ - --hash=sha256:db485b3847d182b908b483b2ed133c66d88d49cacf98fd278fadafe11b4478d1 \ - --hash=sha256:dd952e03bfbb096cfe2dd35cd9e00f269969b67536cb4370994afc20ff2d0875 \ - --hash=sha256:dda366d548e89a90d88a86c692377d18d8bd64b39c1fb2b92cb31370e2896bbd \ - --hash=sha256:e315e5ec90d88e140f57696ff85b484ff68bb311e36f2c414aa4286293e6dee0 \ - --hash=sha256:e4415a8db000bf49a6dd1c478bf70062eaacff0f462b92b0ba68791a905861f9 \ - --hash=sha256:e7a116ae737f0000343218c4edf5bd45893bfeaff0993c0b215d7124c9f77646 \ - --hash=sha256:e7c4c09a490dc4d4a7f8cbee56c606a320f9dc28cf92a7157a39d1ce7676a657 \ - --hash=sha256:ebae99ed6764f2b5771c522477b311be313e8841d2e0376db2b10922daebbba4 \ - --hash=sha256:ec4c85dc4b687c7f7f15f553ff26a98bfe8c58f5f7f0ac8905f0ba4c7be60232 \ - --hash=sha256:ed3a984b31da7481b103f68776f7128a89ef26ed40f4dc41a2223cda7fb24819 \ - --hash=sha256:f18c2d9782259a6dc132fdc7a63c168cbc74b35284b6d75c673958982a378384 \ - --hash=sha256:f1f9f4121ec58628c96baa3de1a55a4e3a333c5102c8e94b64e23bf7b2083309 \ - --hash=sha256:f42c23db5d1521218a3276bb08666dcb662896a0be7347cba864eca45ff64ede \ - --hash=sha256:f443b4825c50a51ee68585522ab4a1d1257fac65896f282b4c6763337ac9f5d2 \ - --hash=sha256:f6764a4ccab3078db14a632420930f6186058750df066b8ea2a7106df91d3203 \ - --hash=sha256:f7c7553b13f69c1b29a5bde08ddc6d9d0c8bfb84f9ed01c30db25944aeb852a7 \ - --hash=sha256:fa6248cd194edff41d7ea9425ced8ca3a6f838bfb295f6f1d6e6bb694a8518df \ - --hash=sha256:fa8eb9ecdb7efb0b226acec134e0d709e87a909fa4971a54c0c4f6e88635484c \ - --hash=sha256:fc20894c3d21194d8041a28b65622d5b86db786da6e3cfe73f0c762951a61167 \ - --hash=sha256:fc4d3f1fb9ca0ae9f97b095963bc6326f1dbfd3779d6679a1e016b9baaa153d3 \ - --hash=sha256:fd40bb9cd0891c4c3cb1ddf83f8bbfa15731a248fdc8162669405451e2724b09 \ - --hash=sha256:ff710414307fefa903e0d9bdf300972f892c23477829f49504e59834f4195398 - # via - # -c requirements-ci.txt - # matplotlib -lazy-loader==0.5 \ - --hash=sha256:717f9179a0dbed357012ddad50a5ad3d5e4d9a0b8712680d4e687f5e6e6ed9b3 \ - --hash=sha256:ab0ea149e9c554d4ffeeb21105ac60bed7f3b4fd69b1d2360a4add51b170b005 - # via - # -c requirements-ci.txt - # librosa -librosa==0.11.0 \ - --hash=sha256:0b6415c4fd68bff4c29288abe67c6d80b587e0e1e2cfb0aad23e4559504a7fa1 \ - --hash=sha256:f5ed951ca189b375bbe2e33b2abd7e040ceeee302b9bbaeeffdfddb8d0ace908 - # via - # -c requirements-ci.txt - # semantica (pyproject.toml) -llvmlite==0.49.0 \ - --hash=sha256:00f16db782f4a13c78c5804aedc434e46794a77e89999a168f9401106270e50a \ - --hash=sha256:039fa4054a06f537fb39248d4472284ca96be311a142ec09e69f95630ab469cc \ - --hash=sha256:20496a5c9fdb8179fb9300e7d19f6782555d98aeeb4a322264aa7fd99f980618 \ - --hash=sha256:294e2f0b70aef8f92d0ae7b203e2609f08beb39437eee73de59a21669331aae9 \ - --hash=sha256:3a9c9e3af4e214acfefa4f73ebe7bc3fb35854a62b654edb3953f5ae33c08ba3 \ - --hash=sha256:4281a0171d66d2098adce4ba706b8c550b1b10718650f682d64cde16e84e4de5 \ - --hash=sha256:4b0e710880b7cc910392bd6b9f1bbf468fed99b182e4420d51598f36114b3dce \ - --hash=sha256:4ec8ad805e7515cb8440a690eb3cef4d34acb29eef80b705ec4e1c1ad3c43c68 \ - --hash=sha256:6a5b06c1b5fc4ae4c9b169b065f42b719448ef1f873687ef224ef69969b75ec3 \ - --hash=sha256:6acba646d88abbc87d5c113a3d62c1fbf8b8fee11c6493f516803e30f21ae870 \ - --hash=sha256:80a84683d04516bb51da1bbeebddaf2c2f558809c93078a8f91807909ae331f8 \ - --hash=sha256:854941c2267fd4fc5b2ce02b8af8ecdffa79fb7784591d3a89370322039ea09f \ - --hash=sha256:95d1071023ed858b79f6971954fd7cc1f5dbcbab987718a4ccbe1411e47d0b81 \ - --hash=sha256:a1b414dc6b164738ec39dd8987cea73829057b7dd92fc6d91b52838385fc1dd2 \ - --hash=sha256:a8c0fc9d624bdc30a3d2db11eb2fb98f80fb209d20b37604eda516cd9b699cf4 \ - --hash=sha256:b095f15fb12c4d90495df5b1a3772b4732cc408398b204a787dbedd370e09c69 \ - --hash=sha256:b352c14353330c879e339b8f8d7491d565fe94242697714a24e80bd757202384 \ - --hash=sha256:b541c8fac3450db7574d1f53cf9dff83f285bfed9d69bf81fe71fc2a7d4f97fe \ - --hash=sha256:be637e465010bc9c50f070468f7f1cf5385e92fee364d192dd5e6cea790ecba9 \ - --hash=sha256:d3dee64784201b64c13a8df62c48a4f4218858faaa65889866bb29bdc243c038 \ - --hash=sha256:d5555ea1d63928481cbf7fcb1d67452b216c7e5b393a4eb7aa1401e67f2a4fc4 \ - --hash=sha256:da7b64474ac15ca595efa2644d5c6836638ccf70709fad3aba3fc56a55966928 \ - --hash=sha256:ddc7aecd4f56397ed6e8f120ec5dcd5a1a8f0e6032ca4af413462792d4dca2e3 \ - --hash=sha256:e32adb84fdaae28aeb86fdb6253084ee707ee157289a2e98fe3caf48a62bee82 \ - --hash=sha256:ee81e96c15a6f870918f1eb60c913551c16aa23defb4f5f1acfa660d6a0aaac2 \ - --hash=sha256:f3f2ff0aeb17d34fcce9f79b99baac441cfd3efa41b83e233ca4530a72381f72 - # via - # -c requirements-ci.txt - # numba - # pynndescent loguru==0.7.3 \ --hash=sha256:19480589e77d47b8d85b2c827ad95d49bf31b0dcde16593892eb51dd18706eb6 \ --hash=sha256:31a33c10c8e1e10422bfd431aeb5d351c7cf7fa671e3c4df004162264b28220c # via # -c requirements-ci.txt # semantica (pyproject.toml) - # fastembed -lxml==6.1.2 \ - --hash=sha256:0349321a0537d4fdbebb2af06dd1b64676132c72e2ae250de8cdb58f8c43019c \ - --hash=sha256:04cf9e3f4ee9cab9d9ba05401bef8668840fa9620fcd4d8e85a2d2fd0b0fa960 \ - --hash=sha256:054175250531a5fb102d485743ff16412279c93add12385b3b1c3d7b16d8deaa \ - --hash=sha256:058c79e172926ef524fb3c7c6beea4b55e15886ac99cb0c139ecaac6b375f1e2 \ - --hash=sha256:0666943ee1576fa890a6dc6316ef42e8241b5dd56f67bc5475acb2ac298c6ca9 \ - --hash=sha256:074a88f70a7360a4a0c5be5d898062cd26f898c25b459efb1bdd43ae700c5a1a \ - --hash=sha256:08cd52e6487435c75f2da0a5b276beef7fed161681b93ab766e66b954f0c349a \ - --hash=sha256:08f0c9ed7cded07c5e798b17c9c25bbba5d0650c8ff0a7f65f84c634966f0f10 \ - --hash=sha256:093fbf547d0f3ca02705381f795a050fbb58988be4aac7f79f99f280c4082313 \ - --hash=sha256:0aa07065497f191ad26c4b587ce5dbb5a7105285a3789aafd0661750e8bac537 \ - --hash=sha256:1055241852f2b02068af4a625a5d32c087db193c12251928af2562ecd2239f18 \ - --hash=sha256:1133bd969f2bfcc6b0c0cf7cdf5f2631e62b23fa2471ee8bd44f6ab73554ee9a \ - --hash=sha256:11f529062255209a421ae4de5b1bb36b2f0a2e1a700745e675a4bf4084d13c00 \ - --hash=sha256:12acd337d2821cb8b9247dfe4b7aa2f2769a3df5ae8511b7e550df42b8f4d3c3 \ - --hash=sha256:12ecfea07d767f6accbf30b014e1c477b5eabb13eb4e8c748215efb52c0e314a \ - --hash=sha256:14879fa5eb2b793c040bbfcb62011aa3015c65d6c9875e063ea98ce2029d51fb \ - --hash=sha256:18467b0e9f7f0bc477df69e99829a59ae17fb37d34e5f68399371c7c67be9002 \ - --hash=sha256:1a2331da06dd55a8184985306eb2afd72d708283ce7e85d67bba77317b785060 \ - --hash=sha256:1c0173595dc1c25768f42681a1517dcfc74bb18a34695f127931cbd05f4dead6 \ - --hash=sha256:1c4c6dc1b2485aaa4adfb6ed754f90dddcb2b96a66bbebc9e1ac242b5ce5e818 \ - --hash=sha256:1d55a614d2f0457b1f7511c1b7bec0db0dcdd4af4d09d226829eb054c647527c \ - --hash=sha256:1e3c67b817867c484794d7fe0d73045d7d0c67460c78a0a1249a9e92266e6a0e \ - --hash=sha256:1edca8f4a92b94e873093df959f141d388f2141fcad0c47598442fb4730ef57a \ - --hash=sha256:1fcfe8481302e6dec07909914b8f3f9e1739ae1615209d4b9e7544325fb699c4 \ - --hash=sha256:20134744db7abcbd5232214e767814ef64e5ab57a5b7df93a2bd68b74ef0a6c0 \ - --hash=sha256:215bb3cc4be015ccac3c7d4f25eb7b941f857fe5b02c0e3504cca61f7fb12455 \ - --hash=sha256:2170d0a280c877b6e2dc6738217db947be35dd8cf09ca458b355aa1bab2a9e70 \ - --hash=sha256:2374235206ec83d4827ad219c93c0f7366b93626eab85392c0ee7c8026649376 \ - --hash=sha256:243ecef7cb7415766dd742336cd5b8361a84c6f297e2773c865b783724cbbe74 \ - --hash=sha256:261d98065326676d7253882db0198d0aa06748d7ee0443367acf10b148273f99 \ - --hash=sha256:26ff164c6629e5c4d11c9e55d5ea3d6eed0be2a420eee1f55cbce6e2c23e231a \ - --hash=sha256:2afd1688e372d8eafaa6f56c589399e0a87d086a0c110f6346b0b50f42e67e25 \ - --hash=sha256:2dcc69e307e0916c7a0b552212010938d02a664d29b6bda75ab2bc5fa487c861 \ - --hash=sha256:2e37fe49fe2d5aa40a2cb1cc8176673ad7de0d124e6f4a509d9318f5979c7871 \ - --hash=sha256:2f3194777c0d05945ac91d8594be25d2679d1d826e01e1fc90bae568ff3a547b \ - --hash=sha256:351318f5c0eb7fcab5b4fdb507c6f88fb2c4b5e67784c7e5911448c91fffb5d4 \ - --hash=sha256:351855814dec4ad55ca5f24d0f4b1cdaca7927fe48023a2965351845f3b60cff \ - --hash=sha256:3a698fad6f122a9b3e2dc2fb598c1de7329c74a67c7a334c9109a440de2508e5 \ - --hash=sha256:3be94d2464f19e42d8c39a299f356b12f2fd095c28793671eabfcd9db9c76987 \ - --hash=sha256:3e3b666f57a5d81562f38c766c762416b0f6eb58a00590546911514b48412abd \ - --hash=sha256:40366c23a938008a3bedfcfd80709b3a857c188b4d710b083e978ef5d2c1c715 \ - --hash=sha256:4303f904fb6c41b58dc70743b1d8a470aba6c9897427c48324cff1a95673ddb4 \ - --hash=sha256:442766b326d9892585a64e8c6c4b5ab81d0e6c0538c9f0fc11a84dc101a5d97f \ - --hash=sha256:446f1f92c137e0cbb97eb7e932e15315c11a7c86974f43f15e68c9707ac6a9f6 \ - --hash=sha256:4618b20f43dc98b49569b1dc822176140ea0f2598d672a6989187ba49bcbfec1 \ - --hash=sha256:4622c5616683faf63791b349e6c8dad7717412dc5f29f4febe7575f110609a86 \ - --hash=sha256:47c92dc5167de16e27ace8332454f12ba172dcab04f7a78a9eae14e2e41b6a41 \ - --hash=sha256:47e367dfe341521426692819803e260d0673899c0ff611f14af978d725e2c999 \ - --hash=sha256:48e912f37c99a297175ba955f55a47c0e1c834b506ef162e52a6e4fe276e6e45 \ - --hash=sha256:4a16457e330b7099aa5a8e8bfa5d53a33a1672a819fa656157e9e6dc433ac7a4 \ - --hash=sha256:4aced3284e0353c798b060fe2c175eb81410e99b9a7e2ae6951be5333732b111 \ - --hash=sha256:4b0fa7109b1d0bc1747d8241a0853e135eefb1c978685241b544c46937383efd \ - --hash=sha256:4bf14db2f0214003ec7f46c4300e2065668fc93e20448c1c95bac2e952072168 \ - --hash=sha256:4e220a9c297e5d36895d489a08c9a3f1f6193b6414e702c5fb751e4a3767f8d0 \ - --hash=sha256:4f4d2c36fd5997d30ff19c29fb93293401d0daaf87512297d47610e6883964b5 \ - --hash=sha256:5078ff51e6316c0f75ea8127c2cd24374747fb351f62fb93d1761f8ae5a04a40 \ - --hash=sha256:50ee0c360862f4152db835b456e38614f94b674bca2a47bc8de7171ee6ccbbb8 \ - --hash=sha256:522387e05cd015a81d1dc621fb167fb42b8f629ccd2e8b39de583828f165aae6 \ - --hash=sha256:5295205fd57510c19a0e46385b516119f3a781d45c2672159bce02949238981a \ - --hash=sha256:52f6d4dff133c9778a24e9a2cfc1608930b15869866171aacc5131b5a418a003 \ - --hash=sha256:57188e441ab24f906bd5a5c14eb55363ab51aa6c0de549f3dd320043721cc118 \ - --hash=sha256:575fef7f30048b744dffb3e4ff64a18cac7dba3fd26efdea5730ade9d1bdeb33 \ - --hash=sha256:5848f3de6a8de8a93cff9f068134393ff5fa69ac2a04399f7d49cd67c61c348c \ - --hash=sha256:5a096d6a5f96b776a5b020cb45c17c545effd2a3b6639e6fa97bc95537600923 \ - --hash=sha256:5c2bae42b3a09f977330a08f4a8fe72aec58c4bdb89069d3fe7272a71d885881 \ - --hash=sha256:5d78ba560f3dd404d87b1fcc89b2b382d638ea2998431a3b2e5cda0f3ba2da91 \ - --hash=sha256:604f4778632588d7c000e7e19430639dc12fca58b5b6e99edffba7631725ef0e \ - --hash=sha256:614d4c5a34556e369b86cfcc8d0cf71cd0759a3444a464a07a9427ab0f5e3a99 \ - --hash=sha256:6330cf0ce83f6273ad8ad99bdd25d6ebb3863912f9ac717f96bc8942706e0e26 \ - --hash=sha256:633ac039cb32366dd5935868e041e385875c017b8cd54ea56aeee3fe29ca5935 \ - --hash=sha256:6454d184d556eaf4cb3d6f69e405d21602d6fdcf08b8d57796824275986c6595 \ - --hash=sha256:648861c19b775b89ebefa14586f85090b10163367476d77f242c4131c835ce73 \ - --hash=sha256:65c32ddc5d0750129c7b119fb57d48192b76d334c21e6b690d19dfb06b34af79 \ - --hash=sha256:662432a6103e671d971e06e75ed146d9ff67f39d2c98c2f26613b6057f54eafc \ - --hash=sha256:678e35f1cbca98f55107511ee21a60568535c950f3c2371819bd64504c980d20 \ - --hash=sha256:69df1856cb6c065e5bfd23adcc7408bfa6dcf32b0018373a99b0769bd86e2256 \ - --hash=sha256:6c9cc4b6532abe154dbdebb42aaba8d52c852919591e45067f5b7d46a0405e88 \ - --hash=sha256:6cb0c87421946030b92b558be416852780a912454e3dcba0998e4497c9c588d5 \ - --hash=sha256:733dfb492ec3dfef8350a5cc896e90d202c5171e791e1609e77563751d69a15d \ - --hash=sha256:75530642d8471327e691ab9b0513a5f9c77f38871014ceda40f51bb51765c0a1 \ - --hash=sha256:7766e525282dd38fd89567311323e441996eb958e8e816d16b38f782e3aecd2a \ - --hash=sha256:785761d5123f222cd97f2263a510107226fe32ce7aa7824a90616a41c574ace1 \ - --hash=sha256:79b428c3242e63bdacf3b526a34e0b8b26583846fc597da84b8f0c3d5ea446b2 \ - --hash=sha256:7c444c3a6e8e75334879980eed96568f0e12064c8b1913424eac1805e976736b \ - --hash=sha256:7c482e87cc86bed78a50462560675bc2c348ef72c47596f9b933346d5a8e920e \ - --hash=sha256:7c534ed898413f439b048130011e99a4245ee13d62d431f6b4f7f2484d02a93a \ - --hash=sha256:7c687fd8e558c7d169f6f1987b696f37824d3a097f291bffd0ab4a2ea2307dfb \ - --hash=sha256:7d506bdba580ecb1a6ad2e2b5c49445e66d3e1f95894885739094393a1aad237 \ - --hash=sha256:7e81fc065ede5d58dd0bf0912025aee1bd04c52c2affd61fdb93226a97ce2fc6 \ - --hash=sha256:7f35ba7667004ecdafebbe08da7c9fa06ee6195275bb7ef7a29ee1901e69519c \ - --hash=sha256:7feb72424f19a893ae4f3373c7aae821b1aacb6076b708915c651f0683a97c49 \ - --hash=sha256:822d9397033edbe530a13bb1e0091c0e817536b6aba87a9b4ad626ed779ca0bd \ - --hash=sha256:827438bf6c8292d22a409bb7990d7cffce410f33e7664e46ca74d2ecc26975ef \ - --hash=sha256:83e7510a6dda8df41d1b68b783de2953b3feb55a11dcebf693201ebaa5cc0c4a \ - --hash=sha256:841630176c15fa5d3c5cd6f755435d3c5540a82e1dd2a7de1799401f92ee6d24 \ - --hash=sha256:84a2a46b93b789d8acb44cfcb3d967ce9dbe29884ddb93fbb1a33f0e0c8fcd86 \ - --hash=sha256:8512b3775d68994dd1d6d533161e0a214f2ad9c634659d34a99c98e86c6c3d68 \ - --hash=sha256:85690cfc8ed54c4292e36a08bcf984dde7957e653fd6d94f59184244bcc35843 \ - --hash=sha256:86d93dc3882c283e9aa2124d7d2b50c85579485216a2b3b7f91ba479e31a128f \ - --hash=sha256:87534cec6ea325435e4adf2326b0cf3110eee9a47abf73652eb155db639c08c6 \ - --hash=sha256:878e7c8ada8f92c52f13f35a2ab98ef0adf7fd0211d164fc2af589e4c3cfed63 \ - --hash=sha256:87e9673cd8a3445024fe38e7f91b55fa3428437eec9b7a7ff7d81979520c0d2d \ - --hash=sha256:8807998c1023d1e9d60e02500f90e85a0752dbc0b670989806bba87b82dd5b42 \ - --hash=sha256:8b68f2548259bb04e0b3d5df0c397abe8b0080f5e1ffe4019fb7a8bf01a9339e \ - --hash=sha256:8e613018a5ac66de7abaf1acaae0d7af37a5e1b9bf1ae190a1198b0fdb988ad8 \ - --hash=sha256:8ec111ff8067325f85c08aa9c2b26179ec0537bb89c003fde31127139f85f82d \ - --hash=sha256:8ffb17ec0a8bae18b6628ae40b0896eb264dd285e39a0faa864965c00933b64c \ - --hash=sha256:9031f5f01452681abf39fdd65f84a70cb01a7572a1bbf570042e826b1232d07b \ - --hash=sha256:9088da25ecd609965f838d89fda0465a905b48f4dd90331db9845518f2177372 \ - --hash=sha256:9221442682c27417f10fe11184ea4cce174b25ab52465570b1f3ee3f85f320fa \ - --hash=sha256:927f3e1d04dc0906265fc0416c13500363e42cd683bbb8d46911c79b73d26800 \ - --hash=sha256:92c2b366028ac01e90399e6d17734ce6e4f4aeddd8ba75fbaf80ea11d6c6d645 \ - --hash=sha256:94162456ed0a64fb1c06915df5bd06af4675ae3966d6048fcb73b0906e0e0222 \ - --hash=sha256:9429d2371d406344ed1da5b5686d9412e74137c07b0171278368ff704f470ed5 \ - --hash=sha256:9477e14217c212e6023c994a71a1a349db19b0e10fd5bf189666b281ae63b1fd \ - --hash=sha256:962c12b51d0b164f12569af225dea57568477e24a845b96eaccbef6c07e4cc03 \ - --hash=sha256:9b52ea73a37fc64aa3357ff8607801d46dd170506d3cf8253a91a1d91639d4f9 \ - --hash=sha256:9bdc2db9e04538f917bba0242920764dd740649d8df58700d6d687ead4429429 \ - --hash=sha256:a02164a8cd3e2dc028918e51af844c934c7a24a0b8f4064368360aa14ad1aac4 \ - --hash=sha256:a2b7fe53abced1fe8bd984a9ab3c8c98bc093ec4f9f543089a8817a493818208 \ - --hash=sha256:a5005c0c9e4d749a76a2ff8bd5918a8bb248df8e08e73a55654b9f79c9cd1e2b \ - --hash=sha256:a7fd1dd6faa3df9dcd8f1765237362cd885ca62cdf77a7c5f5ea383ae5b6048b \ - --hash=sha256:a8326e24ae6c3a6bfb03fa8b4793f9a5d804c125228aa067f652b0428e31b87c \ - --hash=sha256:aa224ecc613d411690aa650dbf01daafbe385cd6c67145e80bc5fc01b3a71469 \ - --hash=sha256:adbecbfe44a497c742792457b1c27300617967c18c3934d2416023eba8d8c553 \ - --hash=sha256:ae520f189895c5dd7eeb2b7a372d464da6f4a1ba1d0ecb741b1d4fe4c1f699ac \ - --hash=sha256:aea814342f6afd20d832937ff8b333cd6506428a39c0c4c70c2380aab1887bfb \ - --hash=sha256:aebcc6b184c935e1f7091c09124cfe5107b7c2253894ba23ad646828c17e4c3b \ - --hash=sha256:af6585a466cee2c5a524f7fffc591844bd604a29fdd9cade964f548512b5ef7e \ - --hash=sha256:b1c0d2dde8a50520efc51644587f0fc4810e3af7d3e029d7af0be93bf39e2b5c \ - --hash=sha256:b20440e578d269c5e8a722ab602ddd0f0cedb8b080006b3f936da9991a593d3b \ - --hash=sha256:b28842b30c4bc2e6afe137d98a5d2071a62589471e76d053bea55b0e53298af9 \ - --hash=sha256:b3ca02ef3b5920b88119c82eb6badfb2d082b1f681d528a856dcce17c8706da8 \ - --hash=sha256:b3db5497af55f7a557c95265dd3b91c75dc56364a7b59f258c45fa5576dce058 \ - --hash=sha256:b631174cd2e4d9f8a94ef17f911c6ded10ede93b5e7860dee7bbf85961d321e9 \ - --hash=sha256:b7233a987a101bdf79059014130262a01339094a0a709f175162542f33b55d4e \ - --hash=sha256:b97153ca609b434b712ddfb92cd6af101a7045a7724c542258bd4727a344472f \ - --hash=sha256:ba0dfead73be5be9ad0b7fbf9f31ff29c1b1eae858816dfc8d85099d6e4af0d6 \ - --hash=sha256:ba58574d710b82ead7cbedea01cac3e110bc3ef82d4731519b74a2c11f7cf5e9 \ - --hash=sha256:be365ce8d2d411cf2fb573747684b4fd470fa6224e0094d9d5a21155acc369d3 \ - --hash=sha256:be6f87cd224254a8f81324e34cc655508b83f1d70458a1a39857ad2aa9925852 \ - --hash=sha256:bfcbee8ffff4188f4c6d97eceeff36d8eb983cf838933cbc12ce5f5dd51476c6 \ - --hash=sha256:c0edde95e4b4278dcc0175eda06dc8aa2631ad9f83ae5dbdbc4f0925e200b0b0 \ - --hash=sha256:c20fa05d128c463209ef5323ebf33ee1cac6d87cdc3933fd789fd3c101017c8e \ - --hash=sha256:c470d192e27f97842a068cf12a1c1296b20ca716c56a9249715c6654bc192d19 \ - --hash=sha256:c67f3c1278f942e97d8665c2a690324aaea5137de16f056583a21f0ac706177f \ - --hash=sha256:cb0cf498efa3204621b3c5576f0accd80ad2ee85575f1cae5d2f98de32c8d9cc \ - --hash=sha256:cdd35422de747237f451e821766e2b6be3dd2c31955c1ecd7f17984c5b9bb62d \ - --hash=sha256:cde6b8db7d2e5135129eb5e74b7b44dd2053aa767cd5023541fccedddc262453 \ - --hash=sha256:ceafa5e0536c62a5cd9f65327fa0b57d6f0b0e3435daf2c98a78d0dde7ecbae1 \ - --hash=sha256:cfeac14425fc7a6fca7864b774d4ee63547926158f4a18c67d77b2c9a948acf1 \ - --hash=sha256:d0bfd719c254bbe60ea022cff0e6ffb799a6fa7d4d72852cebe0257957b32d68 \ - --hash=sha256:d117f39b28ab8a330a74abdbe61c2255b51973b238db25fd6c2448de1eb2a02d \ - --hash=sha256:d3e97ac4353cca3fbbfa829bc0c6a913771573d1c6d46932d4335c46f2b7796a \ - --hash=sha256:d50a44113fe6800dcc8a859332b823a4735b1e6ae1b0063882e4cca569ec3e29 \ - --hash=sha256:d858e718b94033ab4b67e4a58fe3114c65bae01ae2314a62fb39ae8897ed4324 \ - --hash=sha256:d86130d70a2557cdf825dffc56255f1f16b83a7bbeab677b4cd040c4c53d8c52 \ - --hash=sha256:da6a4f55f0e3308c07354b1ee239c5550afc212f81629a6067db505ace3b667a \ - --hash=sha256:dd7ea3fa47154b9fff90591b961e41b3718bd7fcd5bc2d9bb47e9845c8ace088 \ - --hash=sha256:e062f5ac1255dfa6c98e3e3863ec18bc79d0947d22d08921a3ca60cee40559fd \ - --hash=sha256:e17e2c30e27f56da5551e7a425888b45f013e940b99ab07d125a1c33f77a4605 \ - --hash=sha256:e7269cc410f3cdf84a66914fc0ef54b1618115c87fb4f9a59a05c5dfc23bece1 \ - --hash=sha256:e8b9a92652e75e7731309ea51db5dee892eef414ce70a6ec3441e5d36bf5189f \ - --hash=sha256:e8dc3d29f2ed2bbf24c205a86326d6681230ace55abfb3f9d5230f42078ad63d \ - --hash=sha256:e92e4419cad18d60b14bf18b82152fbae67f4b1128be7d73b172df275554f5d9 \ - --hash=sha256:ec8d09f460fdeb65f9ead9b75941e312def4bcbb23e1f951b7def061eb99501d \ - --hash=sha256:ee23f6599682bd4d48bb757c0633e78774eedfb65a7e52851f9ad182eeeb625e \ - --hash=sha256:ee7410c98222070fd717ad881ee2a80cc11826b7001b9a5a807155d8918bfc7a \ - --hash=sha256:ef0b8ba6e13597f681b2b4924ca9c4e8c88420bf0e21d9a9006c757f2fc39d1f \ - --hash=sha256:eff128ffdc093cc6317955934ad9751105d37ed8dbca3ff4ccd751af6be37185 \ - --hash=sha256:f16a407766bac51c65d605b06d900821751a79aa20e12185f273f14a17180e7b \ - --hash=sha256:f86e23ed610727a7f025ebbff788f22a7956d3f1b24a25bb1d9286fc7b7642b0 \ - --hash=sha256:f8b89b3be75a37509602b03f9cfa1a28298d4eed4625748148307aeb907901b7 \ - --hash=sha256:f93bc5e25992f5545709000d840c6cafdbd022781a7a0ed79d58a5633733a4e8 \ - --hash=sha256:fa813b0247d0543a563b993ac3dba6168eef59e3a61448432cf5453300c2412b \ - --hash=sha256:feda2ef68c339987dfb370af3a4b785dbc40f925723fe2365e68e43c2640f85a - # via - # -c requirements-ci.txt - # semantica (pyproject.toml) - # python-docx markdown-it-py==4.2.0 \ --hash=sha256:04a21681d6fbb623de53f6f364d352309d4094dd4194040a10fd51833e418d49 \ --hash=sha256:9f7ebbcd14fe59494226453aed97c1070d83f8d24b6fc3a3bcf9a38092641c4a # via # -c requirements-ci.txt # rich -markupsafe==3.0.3 \ - --hash=sha256:0303439a41979d9e74d18ff5e2dd8c43ed6c6001fd40e5bf2e43f7bd9bbc523f \ - --hash=sha256:068f375c472b3e7acbe2d5318dea141359e6900156b5b2ba06a30b169086b91a \ - --hash=sha256:0bf2a864d67e76e5c9a34dc26ec616a66b9888e25e7b9460e1c76d3293bd9dbf \ - --hash=sha256:0db14f5dafddbb6d9208827849fad01f1a2609380add406671a26386cdf15a19 \ - --hash=sha256:0eb9ff8191e8498cca014656ae6b8d61f39da5f95b488805da4bb029cccbfbaf \ - --hash=sha256:0f4b68347f8c5eab4a13419215bdfd7f8c9b19f2b25520968adfad23eb0ce60c \ - --hash=sha256:1085e7fbddd3be5f89cc898938f42c0b3c711fdcb37d75221de2666af647c175 \ - --hash=sha256:116bb52f642a37c115f517494ea5feb03889e04df47eeff5b130b1808ce7c219 \ - --hash=sha256:12c63dfb4a98206f045aa9563db46507995f7ef6d83b2f68eda65c307c6829eb \ - --hash=sha256:133a43e73a802c5562be9bbcd03d090aa5a1fe899db609c29e8c8d815c5f6de6 \ - --hash=sha256:1353ef0c1b138e1907ae78e2f6c63ff67501122006b0f9abad68fda5f4ffc6ab \ - --hash=sha256:15d939a21d546304880945ca1ecb8a039db6b4dc49b2c5a400387cdae6a62e26 \ - --hash=sha256:177b5253b2834fe3678cb4a5f0059808258584c559193998be2601324fdeafb1 \ - --hash=sha256:1872df69a4de6aead3491198eaf13810b565bdbeec3ae2dc8780f14458ec73ce \ - --hash=sha256:1b4b79e8ebf6b55351f0d91fe80f893b4743f104bff22e90697db1590e47a218 \ - --hash=sha256:1b52b4fb9df4eb9ae465f8d0c228a00624de2334f216f178a995ccdcf82c4634 \ - --hash=sha256:1ba88449deb3de88bd40044603fafffb7bc2b055d626a330323a9ed736661695 \ - --hash=sha256:1cc7ea17a6824959616c525620e387f6dd30fec8cb44f649e31712db02123dad \ - --hash=sha256:218551f6df4868a8d527e3062d0fb968682fe92054e89978594c28e642c43a73 \ - --hash=sha256:26a5784ded40c9e318cfc2bdb30fe164bdb8665ded9cd64d500a34fb42067b1c \ - --hash=sha256:2713baf880df847f2bece4230d4d094280f4e67b1e813eec43b4c0e144a34ffe \ - --hash=sha256:2a15a08b17dd94c53a1da0438822d70ebcd13f8c3a95abe3a9ef9f11a94830aa \ - --hash=sha256:2f981d352f04553a7171b8e44369f2af4055f888dfb147d55e42d29e29e74559 \ - --hash=sha256:32001d6a8fc98c8cb5c947787c5d08b0a50663d139f1305bac5885d98d9b40fa \ - --hash=sha256:3524b778fe5cfb3452a09d31e7b5adefeea8c5be1d43c4f810ba09f2ceb29d37 \ - --hash=sha256:3537e01efc9d4dccdf77221fb1cb3b8e1a38d5428920e0657ce299b20324d758 \ - --hash=sha256:35add3b638a5d900e807944a078b51922212fb3dedb01633a8defc4b01a3c85f \ - --hash=sha256:38664109c14ffc9e7437e86b4dceb442b0096dfe3541d7864d9cbe1da4cf36c8 \ - --hash=sha256:3a7e8ae81ae39e62a41ec302f972ba6ae23a5c5396c8e60113e9066ef893da0d \ - --hash=sha256:3b562dd9e9ea93f13d53989d23a7e775fdfd1066c33494ff43f5418bc8c58a5c \ - --hash=sha256:457a69a9577064c05a97c41f4e65148652db078a3a509039e64d3467b9e7ef97 \ - --hash=sha256:4bd4cd07944443f5a265608cc6aab442e4f74dff8088b0dfc8238647b8f6ae9a \ - --hash=sha256:4e885a3d1efa2eadc93c894a21770e4bc67899e3543680313b09f139e149ab19 \ - --hash=sha256:4faffd047e07c38848ce017e8725090413cd80cbc23d86e55c587bf979e579c9 \ - --hash=sha256:509fa21c6deb7a7a273d629cf5ec029bc209d1a51178615ddf718f5918992ab9 \ - --hash=sha256:5678211cb9333a6468fb8d8be0305520aa073f50d17f089b5b4b477ea6e67fdc \ - --hash=sha256:591ae9f2a647529ca990bc681daebdd52c8791ff06c2bfa05b65163e28102ef2 \ - --hash=sha256:5a7d5dc5140555cf21a6fefbdbf8723f06fcd2f63ef108f2854de715e4422cb4 \ - --hash=sha256:69c0b73548bc525c8cb9a251cddf1931d1db4d2258e9599c28c07ef3580ef354 \ - --hash=sha256:6b5420a1d9450023228968e7e6a9ce57f65d148ab56d2313fcd589eee96a7a50 \ - --hash=sha256:722695808f4b6457b320fdc131280796bdceb04ab50fe1795cd540799ebe1698 \ - --hash=sha256:729586769a26dbceff69f7a7dbbf59ab6572b99d94576a5592625d5b411576b9 \ - --hash=sha256:77f0643abe7495da77fb436f50f8dab76dbc6e5fd25d39589a0f1fe6548bfa2b \ - --hash=sha256:795e7751525cae078558e679d646ae45574b47ed6e7771863fcc079a6171a0fc \ - --hash=sha256:7be7b61bb172e1ed687f1754f8e7484f1c8019780f6f6b0786e76bb01c2ae115 \ - --hash=sha256:7c3fb7d25180895632e5d3148dbdc29ea38ccb7fd210aa27acbd1201a1902c6e \ - --hash=sha256:7e68f88e5b8799aa49c85cd116c932a1ac15caaa3f5db09087854d218359e485 \ - --hash=sha256:83891d0e9fb81a825d9a6d61e3f07550ca70a076484292a70fde82c4b807286f \ - --hash=sha256:8485f406a96febb5140bfeca44a73e3ce5116b2501ac54fe953e488fb1d03b12 \ - --hash=sha256:8709b08f4a89aa7586de0aadc8da56180242ee0ada3999749b183aa23df95025 \ - --hash=sha256:8f71bc33915be5186016f675cd83a1e08523649b0e33efdb898db577ef5bb009 \ - --hash=sha256:915c04ba3851909ce68ccc2b8e2cd691618c4dc4c4232fb7982bca3f41fd8c3d \ - --hash=sha256:949b8d66bc381ee8b007cd945914c721d9aba8e27f71959d750a46f7c282b20b \ - --hash=sha256:94c6f0bb423f739146aec64595853541634bde58b2135f27f61c1ffd1cd4d16a \ - --hash=sha256:9a1abfdc021a164803f4d485104931fb8f8c1efd55bc6b748d2f5774e78b62c5 \ - --hash=sha256:9b79b7a16f7fedff2495d684f2b59b0457c3b493778c9eed31111be64d58279f \ - --hash=sha256:a320721ab5a1aba0a233739394eb907f8c8da5c98c9181d1161e77a0c8e36f2d \ - --hash=sha256:a4afe79fb3de0b7097d81da19090f4df4f8d3a2b3adaa8764138aac2e44f3af1 \ - --hash=sha256:ad2cf8aa28b8c020ab2fc8287b0f823d0a7d8630784c31e9ee5edea20f406287 \ - --hash=sha256:b8512a91625c9b3da6f127803b166b629725e68af71f8184ae7e7d54686a56d6 \ - --hash=sha256:bc51efed119bc9cfdf792cdeaa4d67e8f6fcccab66ed4bfdd6bde3e59bfcbb2f \ - --hash=sha256:bdc919ead48f234740ad807933cdf545180bfbe9342c2bb451556db2ed958581 \ - --hash=sha256:bdd37121970bfd8be76c5fb069c7751683bdf373db1ed6c010162b2a130248ed \ - --hash=sha256:be8813b57049a7dc738189df53d69395eba14fb99345e0a5994914a3864c8a4b \ - --hash=sha256:c0c0b3ade1c0b13b936d7970b1d37a57acde9199dc2aecc4c336773e1d86049c \ - --hash=sha256:c47a551199eb8eb2121d4f0f15ae0f923d31350ab9280078d1e5f12b249e0026 \ - --hash=sha256:c4ffb7ebf07cfe8931028e3e4c85f0357459a3f9f9490886198848f4fa002ec8 \ - --hash=sha256:ccfcd093f13f0f0b7fdd0f198b90053bf7b2f02a3927a30e63f3ccc9df56b676 \ - --hash=sha256:d2ee202e79d8ed691ceebae8e0486bd9a2cd4794cec4824e1c99b6f5009502f6 \ - --hash=sha256:d53197da72cc091b024dd97249dfc7794d6a56530370992a5e1a08983ad9230e \ - --hash=sha256:d6dd0be5b5b189d31db7cda48b91d7e0a9795f31430b7f271219ab30f1d3ac9d \ - --hash=sha256:d88b440e37a16e651bda4c7c2b930eb586fd15ca7406cb39e211fcff3bf3017d \ - --hash=sha256:de8a88e63464af587c950061a5e6a67d3632e36df62b986892331d4620a35c01 \ - --hash=sha256:df2449253ef108a379b8b5d6b43f4b1a8e81a061d6537becd5582fba5f9196d7 \ - --hash=sha256:e1c1493fb6e50ab01d20a22826e57520f1284df32f2d8601fdd90b6304601419 \ - --hash=sha256:e1cf1972137e83c5d4c136c43ced9ac51d0e124706ee1c8aa8532c1287fa8795 \ - --hash=sha256:e2103a929dfa2fcaf9bb4e7c091983a49c9ac3b19c9061b6d5427dd7d14d81a1 \ - --hash=sha256:e56b7d45a839a697b5eb268c82a71bd8c7f6c94d6fd50c3d577fa39a9f1409f5 \ - --hash=sha256:e8afc3f2ccfa24215f8cb28dcf43f0113ac3c37c2f0f0806d8c70e4228c5cf4d \ - --hash=sha256:e8fc20152abba6b83724d7ff268c249fa196d8259ff481f3b1476383f8f24e42 \ - --hash=sha256:eaa9599de571d72e2daf60164784109f19978b327a3910d3e9de8c97b5b70cfe \ - --hash=sha256:ec15a59cf5af7be74194f7ab02d0f59a62bdcf1a537677ce67a2537c9b87fcda \ - --hash=sha256:f190daf01f13c72eac4efd5c430a8de82489d9cff23c364c3ea822545032993e \ - --hash=sha256:f34c41761022dd093b4b6896d4810782ffbabe30f2d443ff5f083e0cbbb8c737 \ - --hash=sha256:f3e98bb3798ead92273dc0e5fd0f31ade220f59a266ffd8a4f6065e0a3ce0523 \ - --hash=sha256:f42d0984e947b8adf7dd6dde396e720934d12c506ce84eea8476409563607591 \ - --hash=sha256:f71a396b3bf33ecaa1626c255855702aca4d3d9fea5e051b41ac59a9c1c41edc \ - --hash=sha256:f9e130248f4462aaa8e2552d547f36ddadbeaa573879158d721bbd33dfe4743a \ - --hash=sha256:fed51ac40f757d41b7c48425901843666a6677e3e8eb0abcff09e4ba6e664f50 - # via - # -c requirements-ci.txt - # jinja2 -matplotlib==3.11.1 \ - --hash=sha256:0c1f44890d435c1b4ef52f701ad5828cb450ea97bcc83918fda6be74965d6cd2 \ - --hash=sha256:11664c551345553db92e61cae6cf1376f138f8c47cafdf13b64b18f3e3e9e464 \ - --hash=sha256:1524e2bdd48a93557aa47ddcfe9c225dfdd57d5a01a5c49128c20f0632980ee1 \ - --hash=sha256:191163532cdefcb1571ca38a6d7e6474baccde64495783e6ba47aa07ec4b9bbb \ - --hash=sha256:1ac697e591c11b6ad04679a73c2d2f9980fe9d9f0311fb414a2e329706343dfb \ - --hash=sha256:216fbb93a74add02ddb4cb38ef5348f59ac00b3e84567eaf16598772d40e150a \ - --hash=sha256:21a67b961a6d597bca54fae826cd20695ba4a6e4d05424a08da6e13e3176fd6b \ - --hash=sha256:2abdee5ffa2fe11b2d19f7a5c63b785fb7c28cc46c7bc1814156341d9d1a33e1 \ - --hash=sha256:30c492d4ba9448595b6fd8708c6725963f8148e25c0d8842948da5b05f0ee8d3 \ - --hash=sha256:3d3fd84082b1afbd9398466c81309e20045be20d48fe0fb18c43504d164cbbb2 \ - --hash=sha256:427258425f9a3fc4ed79a91f9e9b9aaf5a82cb6571e85dc14063cc6fbb993741 \ - --hash=sha256:480194afceca4df2f137c2721227d3cba67121fbf4397b69cee7f83714b0a58a \ - --hash=sha256:54d47b8ae8b579633a3902ca5b4ad6c1e132a5626d64447b2e22a66394e79987 \ - --hash=sha256:5af0dcda57d471440a7b5b623e70e0a61003518443d9098f211a96ecfbbc25be \ - --hash=sha256:5e1f8922ba31959cf6a9dfb51be64b7f7bc582801a3957dc0c2f3afcd3537adf \ - --hash=sha256:5e510088c27a89d53580a752f959146893563e63c330e161d159b0fee652af6f \ - --hash=sha256:6771b0cd7838c6a857a7209814158c0ad09bfef878db3033dd82d70ad101f191 \ - --hash=sha256:67e4c3cd578c65ebd81bdc09a1b6592ceafee6dfafe116dc85dfcb647b5bbb18 \ - --hash=sha256:68408341f2312836fbbdf6b3c78047f65b2d8752f5fd221c3e72d348f5b34f8b \ - --hash=sha256:69647db5746941c793d6e445a4cd349323ffb87d9cc958c2ad84a659b4832d30 \ - --hash=sha256:6be943cb68bc6660ead58c55b3aa6366cba2ef7feb06460fbcce32360376f19f \ - --hash=sha256:7389b77ed2ab0552f46d9a90b81b7b8e6dfcdc42adc36c37a0865799843e0e3e \ - --hash=sha256:7f33a781e12b1e53b278deb2f5373c2e55ec4f10727be3440c0cfb5cda9f944f \ - --hash=sha256:83235693abde86e5e0129998f80ee39fc7f58e6d56a88fafb28a9278833e9d5f \ - --hash=sha256:88a2a27dd9691ae448dfae4b26f59036be90c3c28757edd3553a29559d00859f \ - --hash=sha256:89b193b255f4f6f7948dbcee3691f4f341ab05d9a8874a67b45ddb4182922eda \ - --hash=sha256:8b14eb22961fe865efb0e4ff167e333e428908b00115a8d800ccb65ee108e481 \ - --hash=sha256:9601a1e90be21e4884c53b4f3dc3ee0544654946f9975258d691f1c2e2f119c6 \ - --hash=sha256:96f4bdeea33a8d15a071dbfe6d119451b1d719c733ac666d65357082901a9099 \ - --hash=sha256:9a076f4fc5cdc43fdf510f5981418d25c2db4973418d9f22d8bb3dc8045ada78 \ - --hash=sha256:9fdf1c818ab05d0e74002091ddaf414478a3a449ec9d51c8976d45be7e3a01e2 \ - --hash=sha256:ac104be2768ffdd8655db9e71b768cbb45f2b9aa7b450cf1595e8f65d3822319 \ - --hash=sha256:ae30c6109848ac0f9fa36c5d6270938487614c47ba31860bd5361266dabc5685 \ - --hash=sha256:aee55e9041211bf84302ab55ec3965df18dd90ae19f8b58332a7feaf208bfe83 \ - --hash=sha256:b0a19dcf73406d3746d25a5ed42d713604c9a3e024d129b102852b0d941cb9f3 \ - --hash=sha256:b4c78ceb2f11bcac7389d305cda17aeb1f4586a857854ab5780bd3dd8dbfc407 \ - --hash=sha256:b7cf158e7add54a8d51ac9b5a84abd6d4e13ed4951b4f25f1c5139f41c2addb2 \ - --hash=sha256:b937b9dba5f5f6c1e31c47abe2186c865c0914fd18f2ce0dfc39c9adcef5951d \ - --hash=sha256:ba8f811b8ddfac493734d6af0b2dff96919d0c28ca0d641858dab4262777c6ea \ - --hash=sha256:c52f7ad20ef476806ed212380b1d54d20310c8b86bdc2c9a68b51f0024a44472 \ - --hash=sha256:c90be0b73568da4f662afac580956a76e308437e641b4a45aa08925eeb67d95f \ - --hash=sha256:d2ace7273b9a5061a3b420918a16fae1f2dc5dfee1abcc13aba71b5d94b1820c \ - --hash=sha256:dadfe80797174e2984aae3be0b77594a3c72d2c0a40fbd4a0de48d2728caf3ae \ - --hash=sha256:e15ef41507f3d525f46154ac9e3ae785dacde9f20e593a25de8986267892ef74 \ - --hash=sha256:e4b9ac2f1f607ecda2af90a5232beee2af7582fce1cc30c4b6a1b012dc21ee99 \ - --hash=sha256:f2912f647f3fbe1ccf085f91e213936f9101bead81a5e670565b1f1b3712f4fb - # via - # -c requirements-ci.txt - # semantica (pyproject.toml) - # seaborn -matplotlib-inline==0.2.2 \ - --hash=sha256:3c821cf1c209f59fb2d2d64abbf5b23b67bcb2210d663f9918dd851c6da1fcf6 \ - --hash=sha256:72f3fe8fce36b70d4a5b612f899090cd0401deddc4ea90e1572b9f4bfb058c79 - # via - # -c requirements-ci.txt - # ipython mdurl==0.1.2 \ --hash=sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8 \ --hash=sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba # via # -c requirements-ci.txt # markdown-it-py -mmh3==5.2.1 \ - --hash=sha256:022aa1a528604e6c83d0a7705fdef0b5355d897a9e0fa3a8d26709ceaa06965d \ - --hash=sha256:0634581290e6714c068f4aa24020acf7880927d1f0084fa753d9799ae9610082 \ - --hash=sha256:08043f7cb1fb9467c3fbbbaea7896986e7fbc81f4d3fd9289a73d9110ab6207a \ - --hash=sha256:0a3984146e414684a6be2862d84fcb1035f4984851cb81b26d933bab6119bf00 \ - --hash=sha256:0bbc17250b10d3466875a40a52520a6bac3c02334ca709207648abd3c223ed5c \ - --hash=sha256:0cc21533878e5586b80d74c281d7f8da7932bc8ace50b8d5f6dbf7e3935f63f1 \ - --hash=sha256:0d0b7e803191db5f714d264044e06189c8ccd3219e936cc184f07106bd17fd7b \ - --hash=sha256:113f78e7463a36dbbcea05bfe688efd7fa759d0f0c56e73c974d60dcfec3dfcc \ - --hash=sha256:169e0d178cb59314456ab30772429a802b25d13227088085b0d49b9fe1533104 \ - --hash=sha256:17fbb47f0885ace8327ce1235d0416dc86a211dcd8cc1e703f41523be32cfec8 \ - --hash=sha256:19bbd3b841174ae6ed588536ab5e1b1fe83d046e668602c20266547298d939a9 \ - --hash=sha256:1d9f9a3ce559a5267014b04b82956993270f63ec91765e13e9fd73daf2d2738e \ - --hash=sha256:1e4ecee40ba19e6975e1120829796770325841c2f153c0e9aecca927194c6a2a \ - --hash=sha256:22b0f9971ec4e07e8223f2beebe96a6cfc779d940b6f27d26604040dd74d3a44 \ - --hash=sha256:26fb5b9c3946bf7f1daed7b37e0c03898a6f062149127570f8ede346390a0825 \ - --hash=sha256:2778fed822d7db23ac5008b181441af0c869455b2e7d001f4019636ac31b6fe4 \ - --hash=sha256:28cfab66577000b9505a0d068c731aee7ca85cd26d4d63881fab17857e0fe1fb \ - --hash=sha256:29bc3973676ae334412efdd367fcd11d036b7be3efc1ce2407ef8676dabfeb82 \ - --hash=sha256:2bd9f19f7f1fcebd74e830f4af0f28adad4975d40d80620be19ffb2b2af56c9f \ - --hash=sha256:2d5d542bf2abd0fd0361e8017d03f7cb5786214ceb4a40eef1539d6585d93386 \ - --hash=sha256:30e4d2084df019880d55f6f7bea35328d9b464ebee090baa372c096dc77556fb \ - --hash=sha256:3619473a0e0d329fd4aec8075628f8f616be2da41605300696206d6f36920c3d \ - --hash=sha256:368625fb01666655985391dbad3860dc0ba7c0d6b9125819f3121ee7292b4ac8 \ - --hash=sha256:3737303ca9ea0f7cb83028781148fcda4f1dac7821db0c47672971dabcf63593 \ - --hash=sha256:3a9fed49c6ce4ed7e73f13182760c65c816da006debe67f37635580dfb0fae00 \ - --hash=sha256:3c38d142c706201db5b2345166eeef1e7740e3e2422b470b8ba5c8727a9b4c7a \ - --hash=sha256:3cb61db880ec11e984348227b333259994c2c85caa775eb7875decb3768db890 \ - --hash=sha256:3d74a03fb57757ece25aa4b3c1c60157a1cece37a020542785f942e2f827eed5 \ - --hash=sha256:3f796b535008708846044c43302719c6956f39ca2d93f2edda5319e79a29efbb \ - --hash=sha256:41105377f6282e8297f182e393a79cfffd521dde37ace52b106373bdcd9ca5cb \ - --hash=sha256:41aac7002a749f08727cb91babff1daf8deac317c0b1f317adc69be0e6c375d1 \ - --hash=sha256:44983e45310ee5b9f73397350251cdf6e63a466406a105f1d16cb5baa659270b \ - --hash=sha256:4cbbde66f1183db040daede83dd86c06d663c5bb2af6de1142b7c8c37923dd74 \ - --hash=sha256:4eda76074cfca2787c8cf1bec603eaebdddd8b061ad5502f85cddae998d54f00 \ - --hash=sha256:4fc6cd65dc4d2fdb2625e288939a3566e36127a84811a4913f02f3d5931da52d \ - --hash=sha256:50885073e2909251d4718634a191c49ae5f527e5e1736d738e365c3e8be8f22b \ - --hash=sha256:5174a697ce042fa77c407e05efe41e03aa56dae9ec67388055820fb48cf4c3ba \ - --hash=sha256:54b64fb2433bc71488e7a449603bf8bd31fbcf9cb56fbe1eb6d459e90b86c37b \ - --hash=sha256:54fe8518abe06a4c3852754bfd498b30cc58e667f376c513eac89a244ce781a4 \ - --hash=sha256:55dbbd8ffbc40d1697d5e2d0375b08599dae8746b0b08dea05eee4ce81648fac \ - --hash=sha256:57b52603e89355ff318025dd55158f6e71396c0f1f609d548e9ea9c94cc6ce0a \ - --hash=sha256:58370d05d033ee97224c81263af123dea3d931025030fd34b61227a768a8858a \ - --hash=sha256:5d87a3584093e1a89987e3d36d82c98d9621b2cb944e22a420aa1401e096758f \ - --hash=sha256:623f938f6a039536cc02b7582a07a080f13fdfd48f87e63201d92d7e34d09a18 \ - --hash=sha256:62815d2c67f2dd1be76a253d88af4e1da19aeaa1820146dec52cf8bee2958b16 \ - --hash=sha256:6290289fa5fb4c70fd7f72016e03633d60388185483ff3b162912c81205ae2cf \ - --hash=sha256:67e41a497bac88cc1de96eeba56eeb933c39d54bc227352f8455aa87c4ca4000 \ - --hash=sha256:6c85c38a279ca9295a69b9b088a2e48aa49737bb1b34e6a9dc6297c110e8d912 \ - --hash=sha256:6f01f044112d43a20be2f13a11683666d87151542ad627fe41a18b9791d2802f \ - --hash=sha256:707151644085dd0f20fe4f4b573d28e5130c4aaa5f587e95b60989c5926653b5 \ - --hash=sha256:723b2681ed4cc07d3401bbea9c201ad4f2a4ca6ba8cddaff6789f715dd2b391e \ - --hash=sha256:72d1cc63bcc91e14933f77d51b3df899d6a07d184ec515ea7f56bff659e124d7 \ - --hash=sha256:7374d6e3ef72afe49697ecd683f3da12f4fc06af2d75433d0580c6746d2fa025 \ - --hash=sha256:7501e9be34cb21e72fcfe672aafd0eee65c16ba2afa9dcb5500a587d3a0580f0 \ - --hash=sha256:76219cd1eefb9bf4af7856e3ae563d15158efa145c0aab01e9933051a1954045 \ - --hash=sha256:7aec798c2b01aaa65a55f1124f3405804184373abb318a3091325aece235f67c \ - --hash=sha256:7be6dfb49e48fd0a7d91ff758a2b51336f1cd21f9d44b20f6801f072bd080cdd \ - --hash=sha256:7e4e1f580033335c6f76d1e0d6b56baf009d1a64d6a4816347e4271ba951f46d \ - --hash=sha256:7e8ec5f606e0809426d2440e0683509fb605a8820a21ebd120dcdba61b74ef7f \ - --hash=sha256:7f196cd7910d71e9d9860da0ff7a77f64d22c1ad931f1dd18559a06e03109fc0 \ - --hash=sha256:82f3802bfc4751f420d591c5c864de538b71cea117fce67e4595c2afede08a15 \ - --hash=sha256:85ffc9920ffc39c5eee1e3ac9100c913a0973996fbad5111f939bbda49204bb7 \ - --hash=sha256:8e6c219e375f6341d0959af814296372d265a8ca1af63825f65e2e87c618f006 \ - --hash=sha256:8f767ba0911602ddef289404e33835a61168314ebd3c729833db2ed685824211 \ - --hash=sha256:8ff038d52ef6aa0f309feeba00c5095c9118d0abf787e8e8454d6048db2037fc \ - --hash=sha256:915e7a2418f10bd1151b1953df06d896db9783c9cfdb9a8ee1f9b3a4331ab503 \ - --hash=sha256:92883836caf50d5255be03d988d75bc93e3f86ba247b7ca137347c323f731deb \ - --hash=sha256:960b1b3efa39872ac8b6cc3a556edd6fb90ed74f08c9c45e028f1005b26aa55d \ - --hash=sha256:9aeaf53eaa075dd63e81512522fd180097312fb2c9f476333309184285c49ce0 \ - --hash=sha256:9d8089d853c7963a8ce87fff93e2a67075c0bc08684a08ea6ad13577c38ffc38 \ - --hash=sha256:a4130d0b9ce5fad6af07421b1aecc7e079519f70d6c05729ab871794eded8617 \ - --hash=sha256:a482ac121de6973897c92c2f31defc6bafb11c83825109275cffce54bb64933f \ - --hash=sha256:add7ac388d1e0bf57259afbcf9ed05621a3bf11ce5ee337e7536f1e1aaf056b0 \ - --hash=sha256:b1f12bd684887a0a5d55e6363ca87056f361e45451105012d329b86ec19dbe0b \ - --hash=sha256:b3f99e1756fc48ad507b95e5d86f2fb21b3d495012ff13e6592ebac14033f166 \ - --hash=sha256:b4cce60d0223074803c9dbe0721ad3fa51dafe7d462fee4b656a1aa01ee07518 \ - --hash=sha256:baeb47635cb33375dee4924cd93d7f5dcaa786c740b08423b0209b824a1ee728 \ - --hash=sha256:bbea5b775f0ac84945191fb83f845a6fd9a21a03ea7f2e187defac7e401616ad \ - --hash=sha256:bbfcb95d9a744e6e2827dfc66ad10e1020e0cac255eb7f85652832d5a264c2fc \ - --hash=sha256:bd6e7d363aa93bd3421b30b6af97064daf47bc96005bddba67c5ffbc6df426b8 \ - --hash=sha256:be77c402d5e882b6fbacfd90823f13da8e0a69658405a39a569c6b58fdb17b03 \ - --hash=sha256:c302245fd6c33d96bd169c7ccf2513c20f4c1e417c07ce9dce107c8bc3f8411f \ - --hash=sha256:c88653877aeb514c089d1b3d473451677b8b9a6d1497dbddf1ae7934518b06d2 \ - --hash=sha256:cae6383181f1e345317742d2ddd88f9e7d2682fa4c9432e3a74e47d92dce0229 \ - --hash=sha256:cd471ede0d802dd936b6fab28188302b2d497f68436025857ca72cd3810423fe \ - --hash=sha256:d106493a60dcb4aef35a0fac85105e150a11cf8bc2b0d388f5a33272d756c966 \ - --hash=sha256:d30b650595fdbe32366b94cb14f30bb2b625e512bd4e1df00611f99dc5c27fd4 \ - --hash=sha256:d51fde50a77f81330523562e3c2734ffdca9c4c9e9d355478117905e1cfe16c6 \ - --hash=sha256:d57dea657357230cc780e13920d7fa7db059d58fe721c80020f94476da4ca0a1 \ - --hash=sha256:d771f085fcdf4035786adfb1d8db026df1eb4b41dac1c3d070d1e49512843227 \ - --hash=sha256:dae0f0bd7d30c0ad61b9a504e8e272cb8391eed3f1587edf933f4f6b33437450 \ - --hash=sha256:db0562c5f71d18596dcd45e854cf2eeba27d7543e1a3acdafb7eef728f7fe85d \ - --hash=sha256:dfd51b4c56b673dfbc43d7d27ef857dd91124801e2806c69bb45585ce0fa019b \ - --hash=sha256:e080c0637aea036f35507e803a4778f119a9b436617694ae1c5c366805f1e997 \ - --hash=sha256:e48d4dbe0f88e53081da605ae68644e5182752803bbc2beb228cca7f1c4454d6 \ - --hash=sha256:e8b4b5580280b9265af3e0409974fb79c64cf7523632d03fbf11df18f8b0181e \ - --hash=sha256:e8b5378de2b139c3a830f0209c1e91f7705919a4b3e563a10955104f5097a70a \ - --hash=sha256:e904f2417f0d6f6d514f3f8b836416c360f306ddaee1f84de8eef1e722d212e5 \ - --hash=sha256:eee884572b06bbe8a2b54f424dbd996139442cf83c76478e1ec162512e0dd2c7 \ - --hash=sha256:f1fbb0a99125b1287c6d9747f937dc66621426836d1a2d50d05aecfc81911b57 \ - --hash=sha256:f40a95186a72fa0b67d15fef0f157bfcda00b4f59c8a07cbe5530d41ac35d105 \ - --hash=sha256:f6e0bfe77d238308839699944164b96a2eeccaf55f2af400f54dc20669d8d5f2 \ - --hash=sha256:f963eafc0a77a6c0562397da004f5876a9bcf7265a7bcc3205e29636bc4a1312 \ - --hash=sha256:fb9d44c25244e11c8be3f12c938ca8ba8404620ef8092245d2093c6ab3df260f \ - --hash=sha256:fc78739b5ec6e4fb02301984a3d442a91406e7700efbe305071e7fd1c78278f2 \ - --hash=sha256:fceef7fe67c81e1585198215e42ad3fdba3a25644beda8fbdaf85f4d7b93175a \ - --hash=sha256:fd96476f04db5ceba1cfa0f21228f67c1f7402296f0e73fee3513aa680ad237b +narwhals==2.25.0 \ + --hash=sha256:1f0f403e8c7e4463cde9bfe78b12fdd809e3ae3dda6d9b2f802934fb9c7a6a8f \ + --hash=sha256:62c036c810662bf7820b7737077176313bc59350eeeefb808510f388c743e4b2 # via # -c requirements-ci.txt - # fastembed -mpmath==1.3.0 \ - --hash=sha256:7a28eb2a9774d00c7bc92411c19a89209d5da7c4c9a9e227be8330a23a25b91f \ - --hash=sha256:a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c - # via - # -c requirements-ci.txt - # sympy -msgpack==1.2.1 \ - --hash=sha256:01e2dd6c9b19d333a00282330cc8a73d38d8dabc306dc5b42cd668c3ac82e833 \ - --hash=sha256:020e881a764b20d8d7ca1a54fc01b8175519d108e3c3f194fddc200bda95951a \ - --hash=sha256:04c721c2c7448767e9e3f2520a475663d8ee0f09c31890f6d2bd70fd636a9647 \ - --hash=sha256:05f340e47e7e47d2da8db9b53e1bb1d294369e9ef45a747441309f6650b8351d \ - --hash=sha256:0a70e3cf2804a300d921bb0940426e35f4e489a23adfb77a808892241db0a064 \ - --hash=sha256:0adcf06ffde0777c0e1a9b771a2b1c4226ba1bbf748c8efcc02fcdeca3299107 \ - --hash=sha256:0c0d9802354507bcba62af19c17918e3eb437cc25e6f50657d511b5856a77aac \ - --hash=sha256:0e2bf9280bceb5efca998435904b5d3e9fdbcc11d90dc9df30aec7973252b720 \ - --hash=sha256:1233ee2dd0cefba127583de50ea654677277047d238303521db35def3d7b2e7c \ - --hash=sha256:146ee4e9ce80b365c6d4c47073da9da7bcec473e58194ceee5dd7620ace77e06 \ - --hash=sha256:1548006a91aa93c5da81f3bdcebc1a0d10cea2d25969754fbe848da622b2b895 \ - --hash=sha256:196300e7e5d6e74d50f1607ab9c06c4a1484c383cd22defd727902591f7e8dde \ - --hash=sha256:1dabedcd0f23559f3596428c6589c1cd8c6eaed3a0d720795b07b0225d769203 \ - --hash=sha256:20466cca18c49c7292a8984bc15d65857b171e7264bdcb5f96baf8be238791fc \ - --hash=sha256:298872ecf9e61950f1c6af4ca969b859ee91783bb920ef6e6172697d0c8aad74 \ - --hash=sha256:29a3f6e9667868429d8240dfd063ea5ffdc1321c13d783aa23827a38de0dcb22 \ - --hash=sha256:2eda0b7ebb1283a98d3e4492ac933c8af6aff59fd3df1c3ed024f536af4b1dc8 \ - --hash=sha256:2ef59c659f289eddf8aa6623823f19fa2f40a4029266889eac7a2505dd210c35 \ - --hash=sha256:2ff164c1b0bcb740b073b99e945234d0212852fa378e44a208c425379140dbeb \ - --hash=sha256:33f14fba63278b714efe6ad07e50ea5f03d91537aa6a1c5f1ceca4cf44013ca9 \ - --hash=sha256:350cb813d0af6e65d2f7ef0d729f7ff5be5a8bce03665892f43e5883d4ecc1b8 \ - --hash=sha256:4202c74688ca06591f78cb18988228bd4cca2cc75d57b60008372892d2f1e6e6 \ - --hash=sha256:4227224aaec8f7fbcbfbd4272319347b2bb4030366502600f8c45588c5187b07 \ - --hash=sha256:491cc39455ca765fad51fb451bf2915eb2cf41192ab5801ce8d67c1d614fe056 \ - --hash=sha256:575957e79cd51903a4e8495a242442949641e08f1efd5197b43bebd3ea7682b4 \ - --hash=sha256:5ad5467fc3f68b5468e06c5f788d712e9f8ffc8b0cd1bcb160c105c1ee92dae7 \ - --hash=sha256:5bb9c386f0a329c035ddbab4b72d1028bf9627add8dda41070288563d57ed1b1 \ - --hash=sha256:5c24aa15d5963051e1a5c62b12c50cd705992502b5ec1f3bece6046f33c9fc24 \ - --hash=sha256:5f6277e5f783c36786a145e0247fc189a03f35f84b251646e53592d2bc12b355 \ - --hash=sha256:60926b75d00c8e816ef98f3034f484a8bc64242d66839cef4cf7e503142316a0 \ - --hash=sha256:633727297ed063441fd1cda2288865487f33ad14eeb8831afb5f0c396a62cfce \ - --hash=sha256:67f6dd22fa72a93752643f07889796d62739a13415ee630169a8ce764f86cf9f \ - --hash=sha256:6d09badf350af2be9d189184e04e64cf54ad93569ab3d96fca58bd3e84aad707 \ - --hash=sha256:6ee967f7c7e1df2890c671ff2ee51a28ded0efc95da3e507176dee881ce36c66 \ - --hash=sha256:74847557e28ce71bd3c438a447ca90e4b507e997ddbdef8a12a7b283b86c156b \ - --hash=sha256:779197a6513bab3c3632265e3d0f7cb3227e62510841a6f34f1eaa37efbb345e \ - --hash=sha256:787c9bebb5833e8f6fc8abca3c0597683d8d87f56a8842b6b89c75a5f3176e2d \ - --hash=sha256:7d31c0ac0c640f877804c67cb2bc9f4e23dc2db97e96c2e67fa27d38283b41f8 \ - --hash=sha256:810b916696c86ef0deb3b74588480224df4c1b071136c34183e4a2a4284d7ac7 \ - --hash=sha256:83efa1c898e0fc5380fc0cabbf75164c52e3b5cbb45973710d75821928380c73 \ - --hash=sha256:85f57e960d877f2977f6430896191b04a21f8901b3b4baf2e4604329f4db5402 \ - --hash=sha256:8b267ce94efb76fbd1b3373511420074ee3187f0f7811bf394531de13294735a \ - --hash=sha256:8c2ed1e48cc0f460bf3c7780e7137ff21a4e18433451916f2442c1b21036cd7d \ - --hash=sha256:8c7b398c56ff125feae96c2737abfec5595f1fa0aa186df60c56040b8accb95c \ - --hash=sha256:8d00f177ca88a77c1cf848d204a38f249751650b601cb6532acc68805d8a8273 \ - --hash=sha256:8ff92d7feeaf5bc26c51495b69e2f99ed97ab79346fb6555f44be7dd2ac6503b \ - --hash=sha256:91054a783328e0ea7954b8771095705c8d2243b814743fbaadf14552c9c52c5d \ - --hash=sha256:98b58bdb89c46190e4609bb36abe17c6d4105ad13f9c5f8f6f64d320f8ced3fb \ - --hash=sha256:a28d076ca7c82b9c8728ad90b7147489449557038bed50e4241eb832395169b4 \ - --hash=sha256:aa6c4be5d1c02a42b066ca6ddb71adf36432868fdcdb6ee87e634e86e0674190 \ - --hash=sha256:aded5bdf32609dc7987a49bbbd15a8ef096193f96dd8bbeb791de729e650acf5 \ - --hash=sha256:afc5febcd4c99effbc02b528e49d6fd0760b2b7d48c05239e345a5fa6e743d9a \ - --hash=sha256:b50b727bd652bdc37d950336c848ef20ec54a4cafc38dce19b1cd86ad625d0f7 \ - --hash=sha256:c1c79a604a2969a868a78b6ebd27a887e00c624f14f66b3038e0590cb23332d1 \ - --hash=sha256:ca0dacff965c47afdc3749a8469d7302a8f801d6a28758d55120d75e66ce6889 \ - --hash=sha256:d3567748a5107cb40cdf66a275430c2f87c07777698f4bfd25c35f44d533258c \ - --hash=sha256:dc871b997a9370d855b7394465f2f350e847a5b806dd38dcc9c989e7d87da155 \ - --hash=sha256:dd3bfe82d53edfe4b7fc9a7ec9761e23a7a5b1dac22264505af428253c29ed24 \ - --hash=sha256:e3dc2feb0876209d9c38aa56cb1de169bd6c4348f1aa48271f241226590993e6 \ - --hash=sha256:e4f1d0f8f98ade9634e01fb704a408f9336c0a8f1117b369f5db83dc7551d8b1 \ - --hash=sha256:ec0e675d59150a6269ddc9139087c722292664a37d071a849c05c473350f1f2d \ - --hash=sha256:ee1d9ed27d0497b848923746cf762ed2e7db24f4be7eec8e5cbe8c766aa707b7 \ - --hash=sha256:f02cf17a6ca1abe29b5f980644f7551f94d71f2011509b26d8625ce038f0df64 \ - --hash=sha256:f12038a35fabd52e56a3547bab42401af49a45caa6dd00b34c44de235bc93ee2 \ - --hash=sha256:f310233ef7fb9c14e201c93639fe5f5260b005f56f0b29048e999c30935596cc \ - --hash=sha256:f9389552ecf4784886345ead0647e4edc96bee37cbab05b75540f542f766c48c - # via - # -c requirements-ci.txt - # librosa -murmurhash==1.0.15 \ - --hash=sha256:0861cb11039409eaf46878456b7d985ef17b6b484103a6fc367b2ecec846891d \ - --hash=sha256:1349a7c23f6092e7998ddc5bd28546cc31a595afc61e9fdb3afc423feec3d7ad \ - --hash=sha256:189a8de4d657b5da9efd66601b0636330b08262b3a55431f2379097c986995d0 \ - --hash=sha256:213d710fb6f4ef3bc11abbfad0fa94a75ffb675b7dc158c123471e5de869f9af \ - --hash=sha256:2224f30f7729717644745a6f513ea7662517dfe7b1867cf1588177f64c61df3c \ - --hash=sha256:22aa3ceaedd2e57078b491ed08852d512b84ff4ff9bb2ff3f9bf0eec7f214c9e \ - --hash=sha256:231dc7982e1aeae8bbab21f8f21953e3b9fb0a34e3ffe2d2342ff32e4f07af9d \ - --hash=sha256:263807eca40d08c7b702413e45cca75ecb5883aa337237dc5addb660f1483378 \ - --hash=sha256:2680851af6901dbe66cc4aa7ef8e263de47e6e1b425ae324caa571bdf18f8d58 \ - --hash=sha256:26fd7c7855ac4850ad8737991d7b0e3e501df93ebaf0cf45aa5954303085fdba \ - --hash=sha256:32c6fde7bd7e9407003370a07b5f4addacabe1556ad3dc2cac246b7a2bba3400 \ - --hash=sha256:342277d8d7f712d136507fb3ccdba26c076a34ca0f8d1b96f65f0daa556da2e9 \ - --hash=sha256:34e5a91139c40b10f98d0b297907f5d5267b4b1b2e5dd2eb74a021824f751b98 \ - --hash=sha256:3c69b4d3bcd6233782a78907fe10b9b7a796bdc5d28060cf097d067bec280a5d \ - --hash=sha256:43bf4541892ecd95963fcd307bf1c575fc0fee1682f41c93007adee71ca2bb40 \ - --hash=sha256:43cc6ac3b91ca0f7a5ae9c063ba4d6c26972c97fd7c25280ecc666413e4c5535 \ - --hash=sha256:44d211bcc3ec203c47dac06f48ee871093fcbdffa6652a6cc5ea7180306680a8 \ - --hash=sha256:4a70ca4ae19e600d9be3da64d00710e79dde388a4d162f22078d64844d0ebdda \ - --hash=sha256:4fd8189ee293a09f30f4931408f40c28ccd42d9de4f66595f8814879339378bc \ - --hash=sha256:539d8405885d1d19c005f3a2313b47e8e54b0ee89915eb8dfbb430b194328e6c \ - --hash=sha256:55e1a7f65095f0af141c8a460765e026e35d9ec526f0daa2f88fed29a292b2ff \ - --hash=sha256:5678a3ea4fbf0cbaaca2bed9b445f556f294d5f799c67185d05ffcb221a77faf \ - --hash=sha256:58e2b27b7847f9e2a6edf10b47a8c8dd70a4705f45dccb7bf76aeadacf56ba01 \ - --hash=sha256:5a301decfaccfec70fe55cb01dde2a012c3014a874542eaa7cc73477bb749616 \ - --hash=sha256:5d8b43a7011540dc3c7ce66f2134df9732e2bc3bbb4a35f6458bc755e48bde26 \ - --hash=sha256:66395b1388f7daa5103db92debe06842ae3be4c0749ef6db68b444518666cdcc \ - --hash=sha256:671979f15b24817968ff6fab5e3a468e2b05555bac5e92f11155610a37165ffc \ - --hash=sha256:694fd42a74b7ce257169d14c24aa616aa6cd4ccf8abe50eca0557e08da99d055 \ - --hash=sha256:6cb4e962ec4f928b30c271b2d84e6707eff6d942552765b663743cfa618b294b \ - --hash=sha256:7c4280136b738e85ff76b4bdc4341d0b867ee753e73fd8b6994288080c040d0b \ - --hash=sha256:8155d106c63c5a509ec58c19b0c30804f3a0931bc65cca9826efc53373332536 \ - --hash=sha256:847d712136cb462f0e4bd6229ee2d9eb996d8854eb8312dff3d20c8f5181fda5 \ - --hash=sha256:88dc1dd53b7b37c0df1b8b6bce190c12763014492f0269ff7620dc6027f470f4 \ - --hash=sha256:898a629bf111f1aeba4437e533b5b836c0a9d2dd12d6880a9c75f6ca13e30e22 \ - --hash=sha256:899068ba3d7c371e7edd093852c634cce802fefd9aaddfcc0d2fda1d7433c7f9 \ - --hash=sha256:8a181494b5f03ba831f9a13f2de3aab9ef591e508e57239043d65c5c592f5837 \ - --hash=sha256:95d7c52598dce7a8543e5a5f61a893cbb762a62a907c6c9cd025d5f618bb8522 \ - --hash=sha256:9aba94c5d841e1904cd110e94ceb7f49cfb60a874bbfb27e0373622998fb7c7c \ - --hash=sha256:a2ea4546ba426390beff3cd10db8f0152fdc9072c4f2583ec7d8aa9f3e4ac070 \ - --hash=sha256:a32054edb567417ac81f7172b7dd7731846f25c63084edeb20545fa7abc849d7 \ - --hash=sha256:aadac5fd5f3f465094a5e4ecd00d739a2b870651cad06c8d1005153c2e815fb3 \ - --hash=sha256:b3ba6d05de2613535b5a9227d4ad8ef40a540465f64660d4a8800634ae10e04f \ - --hash=sha256:b65a5c4e7f5d71f7ccac2d2b60bdf7092d7976270878cfec59d5a66a533db823 \ - --hash=sha256:bba0e0262c0d08682b028cb963ac477bd9839029486fa1333fc5c01fb6072749 \ - --hash=sha256:bc54facccb32fe1e97d6231edd4f3e2937467c35658b26aa35bbd6a87ebb7cb0 \ - --hash=sha256:c22e56c6a0b70598a66e456de5272f76088bc623688da84ef403148a6d41851d \ - --hash=sha256:c4cd739a00f5a4602201b74568ddabae46ec304719d9be752fd8f534a9464b5e \ - --hash=sha256:cb8ebafae60d5f892acff533cc599a359954d8c016a829514cb3f6e9ee10f322 \ - --hash=sha256:cc93769619b6b42740cab8eebb587709daaa3d8f813372cc60358a571de20d2d \ - --hash=sha256:d37e3ae44746bca80b1a917c2ea625cf216913564ed43f69d2888e5df97db0cb \ - --hash=sha256:d4d681f474830489e2ec1d912095cfff027fbaf2baa5414c7e9d25b89f0fab68 \ - --hash=sha256:d7e47c5746785db6a43b65fac47b9e63dd71dfbd89a8c92693425b9715e68c6e \ - --hash=sha256:dc35606868a5961cf42e79314ca0bddf5a400ce377b14d83192057928d6252ec \ - --hash=sha256:e43a69496342ce530bdd670264cb7c8f45490b296e4764c837ce577e3c7ebd53 \ - --hash=sha256:e525bbd8e26e6b9ab1b56758a59b16c2fffd73bad2f7b8bf361c16f70ff1d980 \ - --hash=sha256:e8e674f02a99828c8a671ba99cd03299381b2f0744e6f25c29cadfc6151dc724 \ - --hash=sha256:ef19f38c6b858eef83caf710773db98c8f7eb2193b4c324650c74f3d8ba299e0 \ - --hash=sha256:f32307fb9347680bb4fe1cbef6362fb39bd994f1b59abd8c09ca174e44199081 \ - --hash=sha256:f3e99a6ee36ef5372df5f138e3d9c801420776d3641a34a49e5c2555f44edba7 \ - --hash=sha256:f4989c16053a9a83b02c520dd00a31f0877d5fd2ab8a9b6b75ed9eba0e25c489 \ - --hash=sha256:f4ac15a2089dc42e6eb0966622d42d2521590a12c92480aafecf34c085302cca \ - --hash=sha256:f9bf47101354fb1dc4b2e313192566f04ba295c28a37e2f71c692759acc1ba3c \ - --hash=sha256:fa1b70b3cc2801ab44179c65827bbd12009c68b34e9d9ce7125b6a0bd35af63c \ - --hash=sha256:fe50dc70e52786759358fd1471e309b94dddfffb9320d9dfea233c7684c894ba \ - --hash=sha256:fe883982114de576c793fd1cf55945c8ee6453ad4c4785ac1a48f84e74fdc650 - # via - # -c requirements-ci.txt - # preshed - # spacy - # thinc -narwhals==2.24.0 \ - --hash=sha256:42fdedf44e5b2ca7505630d45b4ac3058f38d8485cba9fe1652ca23152df7489 \ - --hash=sha256:b5c0f684ccd9d7475b564111e319a4964abcf2baf79d3cf6b1003d06ac9b828d - # via - # -c requirements-ci.txt - # plotly # scikit-learn networkx==3.6.1 \ --hash=sha256:26b7c357accc0c8cde558ad486283728b65b6a95d85ee1cd66bafab4c8168509 \ @@ -1722,39 +375,6 @@ networkx==3.6.1 \ # via # -c requirements-ci.txt # semantica (pyproject.toml) - # torch -numba==0.67.0 \ - --hash=sha256:00c964a5b94d3ae82d83ac162cd610755875b98dadb779fdde06e6bfcdbca47e \ - --hash=sha256:3fa3d1b27f96f2c0d54513d953d7197886aa1eaa7d2439a0eedc44d993fb181a \ - --hash=sha256:4a2ed006635bbd0fe45681ed49f3b4f4bad1abf0c233bcc5842c9e3a34cabd61 \ - --hash=sha256:4d576e62bf2c9370f61312b51573c4bb1f3fe96798bbab56730847a368a316c4 \ - --hash=sha256:50e2b72406c18cda5dd7431b0082cb85ea94e06c64c33607248fc8bef92cfb81 \ - --hash=sha256:5269245a675abdd3e2c35ec6bb2f250355effa9032514d8f2354f0d2d10854bd \ - --hash=sha256:6004d8d5f28d4028687fb2d972d629295b13685943bd2ed5cd8810c3b848e219 \ - --hash=sha256:694c81c6560b2b47e5fc1dc39c29175b907adf862d9af0af801453400a022a61 \ - --hash=sha256:76d3335aaeffb9dc88309420890e73497a00be08a7530441bc2b58ffe025bfa5 \ - --hash=sha256:77e1c7173fee57a0d84e006c7e70346689d6cb3e7db503489bae58646b4eff7b \ - --hash=sha256:7930748ce8355d2a5a28602abab056a61fdc676d17377f27d17993905428171f \ - --hash=sha256:83ab968b0e0fa744eba03351282dd8000796e6ec8e4518f47bd3ed86c0a20c7b \ - --hash=sha256:88f6e0f5cb6c545e158b6ef0496c01b6d6958a7ccc6634a1576a94bbbab29ff2 \ - --hash=sha256:8c0e88acd4341ddf40779db3c0228b9188aca7fcab5f5f3ce9949a1fc71e9a02 \ - --hash=sha256:8c80c847301dc33dc8f84a97a952004023d9a05578ae4512b087176264cc1960 \ - --hash=sha256:9c4953387c77864b596d8296e2cfbdef82b0eea4166ab4864b05d226c51143e0 \ - --hash=sha256:aa5f002f665bec321b950dacaa26ee009e1d720f6ac9d9856eed5efe1caa03a6 \ - --hash=sha256:b68ad5125fe245339cc8dcc036081fc1ea482c5063387b9612a76ccd83dc91cd \ - --hash=sha256:cd75aa535b33fa05d9d930b1ae8af9f97a2881e96d72dfb38ec9b78284d9f851 \ - --hash=sha256:cfba1ac34f0363fb1a250a10e97240780d11e05227892f7286b26fbfd0ad58ce \ - --hash=sha256:d6c8e9ba3f9602471e8c6f563ffcce8db8046741f0bafb782a052e41dc6b6861 \ - --hash=sha256:e7a7b0121466f1e9a8a074b0545fe90e16389623abf979b5d7c299dca1294d7e \ - --hash=sha256:ed333e0af4386294e7f03e550e01411856b6935e717d859225e0a7338c6b6795 \ - --hash=sha256:f074a8e23db78490f11a3930c940be758316c10ac5985be83d2f298dc080acf7 \ - --hash=sha256:f63d43db06b4756424d6d2484737c902e0ae944a0eec3e8b0b4de2c695b15caa \ - --hash=sha256:f99f880ff25f418a67f9a1d00d0ddfbc63430f627b523e515085a592a7567f4b - # via - # -c requirements-ci.txt - # librosa - # pynndescent - # umap-learn numpy==2.4.6 \ --hash=sha256:001fbb8e08d942dd57599e781f2472269ee7f2755fae407b4f67b2f0b17da3f1 \ --hash=sha256:0280e0356c0829a18d9de1cb7eee50ec22ca639878d7240307ca0943d73cd2c4 \ @@ -1831,200 +451,9 @@ numpy==2.4.6 \ # via # -c requirements-ci.txt # semantica (pyproject.toml) - # blis - # contourpy - # faiss-cpu - # fastembed - # gensim - # librosa - # matplotlib - # numba - # onnxruntime - # opencv-python # pandas # scikit-learn # scipy - # seaborn - # sentence-transformers - # soundfile - # soxr - # spacy - # thinc - # transformers - # umap-learn -nvidia-cublas==13.1.1.3 \ - --hash=sha256:37936a16db8fe4ac1f065c2139360608a543a09275cb1a1af612e08cfa065436 \ - --hash=sha256:b6cdce694e47ff6aadf0a69df1cab6628d696f5ff56e8d16af50309d855fa20f \ - --hash=sha256:b7a210458267ac818974c53038fbec2e969d5c99f305ab15c72522fa9f001dd5 - # via - # -c requirements-ci.txt - # cuda-toolkit - # nvidia-cudnn-cu13 - # nvidia-cusolver -nvidia-cuda-cupti==13.0.85 \ - --hash=sha256:4eb01c08e859bf924d222250d2e8f8b8ff6d3db4721288cf35d14252a4d933c8 \ - --hash=sha256:683f58d301548deeefcb8f6fac1b8d907691b9d8b18eccab417f51e362102f00 \ - --hash=sha256:796bd679890ee55fb14a94629b698b6db54bcfd833d391d5e94017dd9d7d3151 - # via - # -c requirements-ci.txt - # cuda-toolkit -nvidia-cuda-nvrtc==13.0.88 \ - --hash=sha256:6bcd4e7f8e205cbe644f5a98f2f799bef9556fefc89dd786e79a16312ce49872 \ - --hash=sha256:ad9b6d2ead2435f11cbb6868809d2adeeee302e9bb94bcf0539c7a40d80e8575 \ - --hash=sha256:d27f20a0ca67a4bb34268a5e951033496c5b74870b868bacd046b1b8e0c3267b - # via - # -c requirements-ci.txt - # cuda-toolkit - # nvidia-cublas -nvidia-cuda-runtime==13.0.96 \ - --hash=sha256:7f82250d7782aa23b6cfe765ecc7db554bd3c2870c43f3d1821f1d18aebf0548 \ - --hash=sha256:ef9bcbe90493a2b9d810e43d249adb3d02e98dd30200d86607d8d02687c43f55 \ - --hash=sha256:f79298c8a098cec150a597c8eba58ecdab96e3bdc4b9bc4f9983635031740492 - # via - # -c requirements-ci.txt - # cuda-toolkit -nvidia-cudnn-cu13==9.20.0.48 \ - --hash=sha256:0c45dd8eeb50b603f07995b1b300c62ffe6a1980482b82b3bcf94a4ca9d49304 \ - --hash=sha256:af8139732b99c0118be65ea5aac97f0d46018f8c552889e49d2fb0c6261a4a24 \ - --hash=sha256:e31454ae00094b0c55319d9d15b6fa2fc50a9e1c0f5c8c80fb75258234e731e1 - # via - # -c requirements-ci.txt - # torch -nvidia-cufft==12.0.0.61 \ - --hash=sha256:2708c852ef8cd89d1d2068bdbece0aa188813a0c934db3779b9b1faa8442e5f5 \ - --hash=sha256:2abce5b39d2f5ae12730fb7e5db6696533e36c26e2d3e8fd1750bdd2853364eb \ - --hash=sha256:6c44f692dce8fd5ffd3e3df134b6cdb9c2f72d99cf40b62c32dde45eea9ddad3 - # via - # -c requirements-ci.txt - # cuda-toolkit -nvidia-cufile==1.15.1.6 \ - --hash=sha256:08a3ecefae5a01c7f5117351c64f17c7c62efa5fffdbe24fc7d298da19cd0b44 \ - --hash=sha256:bdc0deedc61f548bddf7733bdc216456c2fdb101d020e1ab4b88d232d5e2f6d1 - # via - # -c requirements-ci.txt - # cuda-toolkit -nvidia-curand==10.4.0.35 \ - --hash=sha256:133df5a7509c3e292aaa2b477afd0194f06ce4ea24d714d616ff36439cee349a \ - --hash=sha256:1aee33a5da6e1db083fe2b90082def8915f30f3248d5896bcec36a579d941bfc \ - --hash=sha256:65b1710aa6961d326b411e314b374290904c5ddf41dc3f766ebc3f1d7d4ca69f - # via - # -c requirements-ci.txt - # cuda-toolkit -nvidia-cusolver==12.0.4.66 \ - --hash=sha256:02c2457eaa9e39de20f880f4bd8820e6a1cfb9f9a34f820eb12a155aa5bc92d2 \ - --hash=sha256:0a759da5dea5c0ea10fd307de75cdeb59e7ea4fcb8add0924859b944babf1112 \ - --hash=sha256:16515bd33a8e76bb54d024cfa068fa68d30e80fc34b9e1090813ea9362e0cb65 - # via - # -c requirements-ci.txt - # cuda-toolkit -nvidia-cusparse==12.6.3.3 \ - --hash=sha256:2b3c89c88d01ee0e477cb7f82ef60a11a4bcd57b6b87c33f789350b59759360b \ - --hash=sha256:80bcc4662f23f1054ee334a15c72b8940402975e0eab63178fc7e670aa59472c \ - --hash=sha256:cbcf42feb737bd7ec15b4c0a63e62351886bd3f975027b8815d7f720a2b5ea79 - # via - # -c requirements-ci.txt - # cuda-toolkit - # nvidia-cusolver -nvidia-cusparselt-cu13==0.8.1 \ - --hash=sha256:4dca476c50bf4780d46cd0bfbd82e2bc10a08e4fef7950917ce8d7578d22a23f \ - --hash=sha256:786ce87568c303fadb5afcc7102d454cd3040d75f6f8626f5db460d1871f4dd0 \ - --hash=sha256:dccbd362f91a7b9024d1f55ee9f548ac065027ff15d8c8b0db889ab3a8f31215 - # via - # -c requirements-ci.txt - # torch -nvidia-nccl-cu13==2.29.7 \ - --hash=sha256:674a12383e3c38a1bcccae7d4f3633b37852230b6047883cb2f4c2d1b36d9bf5 \ - --hash=sha256:edd81538446786ec3b73972543e53bb43bcaf0bfc8ef76cb679fcc390ffe136d - # via - # -c requirements-ci.txt - # torch -nvidia-nvjitlink==13.3.33 \ - --hash=sha256:26a6de7fb4c8fdaa7703d3dad720d6d427ddfea5c48a528fd97c11733ad830e5 \ - --hash=sha256:4297ee49639b4f2e07255a1d69b3acc7ab2d011bb892b403e91ac98368962e3b \ - --hash=sha256:ce48b37dfeb3cb1eae4cf85adacb47d7a6539ea2272870c9a3628ce275c2037e - # via - # -c requirements-ci.txt - # cuda-toolkit - # nvidia-cufft - # nvidia-cusolver - # nvidia-cusparse -nvidia-nvshmem-cu13==3.4.5 \ - --hash=sha256:290f0a2ee94c9f3687a02502f3b9299a9f9fe826e6d0287ee18482e78d495b80 \ - --hash=sha256:6dc2a197f38e5d0376ad52cd1a2a3617d3cdc150fd5966f4aee9bcebb1d68fe9 - # via - # -c requirements-ci.txt - # torch -nvidia-nvtx==13.0.85 \ - --hash=sha256:4936d1d6780fbe68db454f5e72a42ff64d1fd6397df9f363ae786930fd5c1cd4 \ - --hash=sha256:cb7780edb6b14107373c835bf8b72e7a178bac7367e23da7acb108f973f157a6 \ - --hash=sha256:d66ea44254dd3c6eacc300047af6e1288d2269dd072b417e0adffbf479e18519 - # via - # -c requirements-ci.txt - # cuda-toolkit -onnxruntime==1.28.0 \ - --hash=sha256:07fb3cbe990d6bf0ab3c22bfbbfb0e314151266046ea6edb4a07f556b4258c5f \ - --hash=sha256:0a83bdb70d143cede762b677789bf2a7acca54b3fb82565601d5c30695aa933c \ - --hash=sha256:0d650aeee29368414367b65529e90afe4bf1bab76254789063b8b2f7ea3013c8 \ - --hash=sha256:0faf85fb447a663c9cdadc39bd6b19bdf7bedded6699e45731b9b36c46fd993d \ - --hash=sha256:1a1a19175464665c9b8d50bc916f216cc0b569110045b7bbca8f9f290b186f58 \ - --hash=sha256:26ff0fdd06efb6c155bae95387a09db1a2be89c7a03e4d0bffd5a171cc2826da \ - --hash=sha256:31410f544674f534c2f27348af52ef81682ca9c8719154bf4d48f0ef23823b1e \ - --hash=sha256:4e81a23df16e7acb9d51b06d30cc098e49315ef9180f97bc2221d167b4b04d9c \ - --hash=sha256:4f6e92367ddce1e4d33cf295024f40192be6c6171a09208f515ba169ced06c8e \ - --hash=sha256:54fa221d669282bd8f582708ce4c96010a7e9fb0661f9006b37fe2fedafb73fe \ - --hash=sha256:6afdc83f1317c136e92fc29f5ee9f058de59d87c0b22cee3fdbfbaa0ccc2098a \ - --hash=sha256:8adff67a3f28257b37cfe945a7e952e4122666aa8c91a0380862e9fd4c2ed19f \ - --hash=sha256:8d66f9ceb29909c70839e4e4fb3435c7b490050d8f162bd5f3aba4ca01ee517f \ - --hash=sha256:a166b78ee04f3a37fa1ef82034b6a3ce96d9684e582d4d30b296de83e9998bb5 \ - --hash=sha256:ac301f53b1930402fc46c368e268acfed02f3207272aaff05070d7e09f96f031 \ - --hash=sha256:bc2565e487b4896fb988d6383577d875d958e071fc5f6c3550bd5d02ae98264b \ - --hash=sha256:c35064f9b3c43c81c5d5d282091401d0f1ff22796d93ccade4ea2ece5e137ab8 \ - --hash=sha256:cfab507abe09d6ffeb817eee07944d452fdc0b00fdcef34cab4db10a45e378c7 \ - --hash=sha256:e02feeb0165c5f13b4cc954738078d59b90128516ac12b671ee24a530242bf02 \ - --hash=sha256:e562d6e36a749f6764481c0ddb0f2af3d0b5a3c164291361d08803c557f369af \ - --hash=sha256:f2a3b9e30ce880d4ca54999cb313569e36da4f62eefe25f87be18f43e9a3a4d5 \ - --hash=sha256:f5c5daabd28aad610f83fdcf32acec8fb57e6adc6c6a39fe2a3c755db957b410 \ - --hash=sha256:f649dd6f6452d12a8059888aa489fe519e062e18793dac72b9efa0f9fdb64135 \ - --hash=sha256:f7f022a1103cae591c75fc4565589a515f2ddd14a6ac8e8a05812dfeda142e28 - # via - # -c requirements-ci.txt - # semantica (pyproject.toml) - # fastembed -opencv-python==5.0.0.93 \ - --hash=sha256:08d5d91d967b58d6db86073b2ad3eaef88ca4ebdfd45c9059bf59f5ded0c7ad2 \ - --hash=sha256:198a75138241810206a17c829dbcc40a7cb1841cda538ca86cbbfc6c7d95f898 \ - --hash=sha256:4b4b1a34c79bf8d3738e3cfe9a9e67b51a79663f6b692cbdad8c31f570da4157 \ - --hash=sha256:66aac3e5b5faa48d4025816592f3af19e4bfc2c68dec067bae2dbb4ca10aa9e2 \ - --hash=sha256:6bbc32f59e1b1a7db7b39c81f63d00625f041d333037fd8702f6da52cc39108b \ - --hash=sha256:c8de2dec111122a02e8beb28e16c31904992dfd6186560b142a92c71403c1039 \ - --hash=sha256:e2b4272e736836f66c2d176e43ab8101f3a00d45654916399f52e150c58981ac \ - --hash=sha256:f8b6d0a212253dd26ad338c812f1f23ca118fdf05a9c8c6b9444f161aa8c5881 \ - --hash=sha256:f90ba04b8f73bc5c3814037699739f0156f597338a98f05956c684e7c3ca10d2 - # via - # -c requirements-ci.txt - # semantica (pyproject.toml) -openpyxl==3.1.5 \ - --hash=sha256:5282c12b107bffeef825f4617dc029afaf41d0ea60823bbb665ef3079dc79de2 \ - --hash=sha256:cf0e3cf56142039133628b5acffe8ef0c12bc902d2aadd3e0fe5878dc08d1050 - # via - # -c requirements-ci.txt - # semantica (pyproject.toml) -packaging==26.3 \ - --hash=sha256:94edc256424af38762eb31306eed28beb9f0efc50a8837492c9d6fd6004aed79 \ - --hash=sha256:d7193f7c8e4e93f444fde0262bf90af30e16fa0ad0ad44cb553c87339b23cd1c - # via - # -c requirements-ci.txt - # faiss-cpu - # huggingface-hub - # lazy-loader - # matplotlib - # onnxruntime - # plotly - # pooch - # spacy - # thinc - # transformers - # weasel pandas==3.0.5 \ --hash=sha256:08d24fe11a17dc33bd6e937dc9c665f9cba08fbdc9f657f405713515febe300d \ --hash=sha256:0d298e951f23016ce4699951d044ae6418dbc91bf68cefca0f77666fcbb4e5c6 \ @@ -2071,19 +500,6 @@ pandas==3.0.5 \ # via # -c requirements-ci.txt # semantica (pyproject.toml) - # seaborn -parso==0.8.7 \ - --hash=sha256:a8926eb2a1b915486941fdbd31e86a4baf88fe8c210f25f2f35ecec5b574ca1c \ - --hash=sha256:eaaac4c9fdd5e9e8852dc778d2d7405897ec510f2a298071453e5e3a07914bb1 - # via - # -c requirements-ci.txt - # jedi -pexpect==4.9.0 \ - --hash=sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523 \ - --hash=sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f - # via - # -c requirements-ci.txt - # ipython pillow==12.3.0 \ --hash=sha256:00808c5e14ef63ac5161091d242999076604ff74b883423a11e5d7bbb38bf756 \ --hash=sha256:04f01d28a6aaff387bf842a13be313df23ba0597a44f1a976c9feb3c6ff4711a \ @@ -2175,203 +591,20 @@ pillow==12.3.0 \ # via # -c requirements-ci.txt # semantica (pyproject.toml) - # fastembed - # matplotlib -platformdirs==4.11.2 \ - --hash=sha256:3a2ae5fca3520a01ab1be8b45613537f52ddf5b5f6f53d88233892dfbf0cd82d \ - --hash=sha256:7f89089b6ea71bda7962953edcf784b2e2d9d285b40ad88be2bb75c6e9d82ab4 - # via - # -c requirements-ci.txt - # pooch -plotly==6.9.0 \ - --hash=sha256:36bebe2f1bb13884774fe61689c329071446f6ce4a8927fb1f0d6fb24f581236 \ - --hash=sha256:967ad33e8c704fed051800d11d985eb206a9c795c14206b30a6f463ed9c67d0d +protobuf==6.33.6 \ + --hash=sha256:0cd27b587afca21b7cfa59a74dcbd48a50f0a6400cfb59391340ad729d91d326 \ + --hash=sha256:77179e006c476e69bf8e8ce866640091ec42e1beb80b213c3900006ecfba6901 \ + --hash=sha256:7d29d9b65f8afef196f8334e80d6bc1d5d4adedb449971fefd3723824e6e77d3 \ + --hash=sha256:9720e6961b251bde64edfdab7d500725a2af5280f3f4c87e57c0208376aa8c3a \ + --hash=sha256:a6768d25248312c297558af96a9f9c929e8c4cee0659cb07e780731095f38135 \ + --hash=sha256:bd56799fb262994b2c2faa1799693c95cc2e22c62f56fb43af311cae45d26f0e \ + --hash=sha256:c96c37eec15086b79762ed265d59ab204dabc53056e3443e702d2681f4b39ce3 \ + --hash=sha256:e2afbae9b8e1825e3529f88d514754e094278bb95eadc0e199751cdd9a2e82a2 \ + --hash=sha256:e9db7e292e0ab79dd108d7f1a94fe31601ce1ee3f7b79e0692043423020b0593 \ + --hash=sha256:f443a394af5ed23672bc6c486be138628fbe5c651ccbc536873d7da23d1868cf # via # -c requirements-ci.txt # semantica (pyproject.toml) -pooch==1.9.0 \ - --hash=sha256:de46729579b9857ffd3e741987a2f6d5e0e03219892c167c6578c0091fb511ed \ - --hash=sha256:f265597baa9f760d25ceb29d0beb8186c243d6607b0f60b83ecf14078dbc703b - # via - # -c requirements-ci.txt - # librosa -preshed==3.0.13 \ - --hash=sha256:04d8f13f2986e5d11af5ac51f55ce3106c70c41b483d20ea392e6180bdd0f870 \ - --hash=sha256:09397592d333a77f88454e72b7f1f941b2afaf040b392b9e74898dbc4648cdf5 \ - --hash=sha256:09f96b477c987755b3c945df214ea1c1c80bfb350e9f34e78da89585535b77e8 \ - --hash=sha256:0e5b2865aecbd2e1e10e5d19bb8bfad765863c1307c6c3e51f2a08bd64122409 \ - --hash=sha256:183b339956a9e1d7a4a00038a3b9587a734db9e8bd915939a49791bd1b372156 \ - --hash=sha256:19318dc1cd8cac6663c6c830bf7e0002d2de853769fb03e056774e97c21bedfd \ - --hash=sha256:208dcebbe294bf1881ce33fb015d56ab2a7587aece85a09147727174207892e4 \ - --hash=sha256:2b704e46cb7b88f656ef16a3e5347b36525a1c53721d327a4ba1457404101f85 \ - --hash=sha256:2e77bed56aded7cbe5d28d6bd2178bc5b13eda0e0e464dab205fb578fa915000 \ - --hash=sha256:35d6c5acb3ee3b12b87a551913063f0cec784055c2af16e028c19fe875f079d0 \ - --hash=sha256:3e3528f6628329349e281b607aad746ae3c06c15ba59fd5b6599c7c2fd77911b \ - --hash=sha256:40e9445911051bc67cf84ba12745e3be4d010aaf4f8ade3ba3def82fdb45d18e \ - --hash=sha256:42c58b07e8b431e33d0ad9922e896632453821cad8b09171b619b8c61101916f \ - --hash=sha256:461327f8dd36520dcf1fd55a671e0c3c2c97a2d95e22fc85faa31173f4785dda \ - --hash=sha256:4a7bc48220de579be6bdb0a8715482cf36e2a625a6fd5ad26c9f43485a4a23b5 \ - --hash=sha256:4e9ae86c982e49f58620d45eeb51e073e50feb88f52ac10a95fe117c1d222a84 \ - --hash=sha256:4f8856ca3d88e9b250630d70abb4f260d8933151ddfb413024784b25b009868e \ - --hash=sha256:502f93f49a22788203f02d3067d4ea077a0cca3864de6a792eae12e7ce589e14 \ - --hash=sha256:5268c0e6fa96f50cdf87f516c2d4b32563c12706ee768e75c00e8d0098acd545 \ - --hash=sha256:5d14eea14bd01291388928991d7df7d60b9fd19ae970e55006eb4d29b0c1e8eb \ - --hash=sha256:5e2753779832e411e93eb727f3d409c0a6b7408e5ce4dd868076d8ece48c7693 \ - --hash=sha256:62cf7f3113132891d6bba70ff547ad81c6fe50a31930bbbb8499f1d47cd122b7 \ - --hash=sha256:670db59a52e1823b5f088c764df474e65b686592d4093adbeef14581c95ee2cb \ - --hash=sha256:70d502e081348df207d90f347f21770ed596822bb04eb3c3b32b7281579e90c6 \ - --hash=sha256:7557963d0125a3a7bcdb2eb6948f3e45da31b5a7f066b55320de3dea22d7557f \ - --hash=sha256:7770987c2e57497cd26124a9be5f652b5b3ccd0def89859ab0da8bca6144a3de \ - --hash=sha256:7c333f18e9a81c8a6de0603fd8781e17115324b117c445ca91abdf7bfb1abe49 \ - --hash=sha256:7da9d931e7660dcdd757e5870269f0c159126d682ed73ed313971d199eb0f334 \ - --hash=sha256:867aa73abbf4ee3b4d7662148091c33a8c039271269e3a7f1e0ca995f91995c8 \ - --hash=sha256:8b82d7a7bb63d248a6cbbfcabb4a570c993d54d964e39dc5d85c14018ba2079e \ - --hash=sha256:8b8de3f58043070a354477995acdd98626ce43e4193c708ebd0f694e467f5155 \ - --hash=sha256:8d6acc1f5031a535a55a6f7148e2f274554a8343a16309c700cebea0fe7aee8c \ - --hash=sha256:985cb9b097beda76cd13c01a0499707103e8915f888fa30f8aa8324ef2cc6b08 \ - --hash=sha256:9ca43ecbc3783eda4d6ab3416ae2ecd9ef23dca5f53995843f69f7457bcd0677 \ - --hash=sha256:a06e27f4e5b9d7943840087828c6a0dae4a3475576d12c2e95b71abbb325a80b \ - --hash=sha256:a3ac301b065e67e9541f8e3ab3f67533e53deb57c2d258395c5bb98f9723f99b \ - --hash=sha256:a8682988e47739adba369bf43789fc870b554a21e2d1f30a3d17ed336d05f451 \ - --hash=sha256:acd4d89abeca3678c5d8c89b3cd351314465bc67c7fa053d2644f8513e543386 \ - --hash=sha256:b03e21b0bf95eb56e23973f32cabb930e94f352228652f81c0955dbd6967d904 \ - --hash=sha256:b980f3ea9bb74b7f94464bc3d6eb3c9162b6b79b531febd14c6465c24344d2cc \ - --hash=sha256:bef84b225d226af43adfee78ce5ddede72a6155ce5292c1a41dcd1f0b9c87c30 \ - --hash=sha256:c046736239cc8d72670749b79b526e4111839a2fc461a58545d212797649129c \ - --hash=sha256:c0d0c14187dc0078d8a63bf190ec045a4d13e7748b6caeb557a7d575e411410b \ - --hash=sha256:c4bc60dc994864095d784b7e4d77dba3e64188d169ac88722b699d175561fddb \ - --hash=sha256:c8596e41a258ff213553a441e0bb3eb388fd8158e84a7bf3aae6d8ede2c166d3 \ - --hash=sha256:cf8e1a7a1823b2a7765121446c630140ac6e8650c07a6efbf375e168d1fef4f7 \ - --hash=sha256:d0e114300e5577e806c17fb1cc9f07bc6584188d84545401f66e690c8315feef \ - --hash=sha256:d2f1efae396cadab5f3890a2fd43d2ee65373ef9096ccbb805e51e8d8bcc563b \ - --hash=sha256:d4ae5cfe075bb7a07982e382bca44f41ddf041f4d24cbd358e8cccfc049259b8 \ - --hash=sha256:d75f718bbfd97e992f7827e0fa7faf6a91bdd9c922d5baa4b50d62731396cb89 \ - --hash=sha256:dbd7c735a613857ae39ac23bf4690b0d92adc30add977828529b50ba09e33fbc \ - --hash=sha256:de87fbabb0f37c3c92d4dd9b94fc82ab73cdab4247cdfbd57ab3926caa983919 \ - --hash=sha256:df642547a1a94079978a0ea8f4593ab4b8d3bd43f767bef0ef64d9a214f8c4c9 \ - --hash=sha256:e1ab099b2f5843b19e875502b64001b0705e375fb5bd1ca6240aa14e4ffc31e4 \ - --hash=sha256:e5c8462472f790c16708306aef3a102a762bd19dfe3d2f8ee08bd5e12f51b835 \ - --hash=sha256:f05b08ce92399c0655b5e0eb5a1cc1f9e295703ed3aabdfaf6538dfa8ae23d57 \ - --hash=sha256:f8e6fe0620ed0f96a246d46447055c447e071cd8222731a045c235e8a758c918 - # via - # -c requirements-ci.txt - # spacy - # thinc -prompt-toolkit==3.0.53 \ - --hash=sha256:01c0891d7f9237d5e339f7d3e42cdae80b7534abb1c7c0e3352efba6231492f2 \ - --hash=sha256:9ec8a0ad96d5c56148b3f914aa79c1564c3fde5d2e6b876e7bc327e353cf8fa6 - # via - # -c requirements-ci.txt - # ipython -protobuf==7.35.1 \ - --hash=sha256:11d6b0ec246892d85215b0a13ca6e0233cf5284b68f0ac02646427f4ff88a799 \ - --hash=sha256:230a75ddfc2de4806e56696ce9640c1cdfdb6543b7cfce98d42a4c0a0e7bdb87 \ - --hash=sha256:24f857477359a85c0c235261b8ba905fd51b2562f4a64ca1df5473f29850cbf6 \ - --hash=sha256:353652e4efd0bca5b5fc2656abf8307ef351f0cf938c9eba09f0e09c20a25c30 \ - --hash=sha256:4bc97768d8fe4ad6743c8a19403e314511ed9f6d13205b687e52421c023ac1b9 \ - --hash=sha256:74758715c53d7158fb76caf4f0cfdacc5329a4b1bb994f865d6cf302d413a1c4 \ - --hash=sha256:b73f9489a4b8b1c9cb1f8ed951c736392592edb24b9d6819f36d2e10b171d5b4 \ - --hash=sha256:ce115a26fe0c39a2c29973d914d327e516a6455464489fe3cd1e51a1b354f81a - # via - # -c requirements-ci.txt - # semantica (pyproject.toml) - # onnxruntime -psutil==7.2.2 \ - --hash=sha256:0746f5f8d406af344fd547f1c8daa5f5c33dbc293bb8d6a16d80b4bb88f59372 \ - --hash=sha256:076a2d2f923fd4821644f5ba89f059523da90dc9014e85f8e45a5774ca5bc6f9 \ - --hash=sha256:11fe5a4f613759764e79c65cf11ebdf26e33d6dd34336f8a337aa2996d71c841 \ - --hash=sha256:1a571f2330c966c62aeda00dd24620425d4b0cc86881c89861fbc04549e5dc63 \ - --hash=sha256:1a7b04c10f32cc88ab39cbf606e117fd74721c831c98a27dc04578deb0c16979 \ - --hash=sha256:1fa4ecf83bcdf6e6c8f4449aff98eefb5d0604bf88cb883d7da3d8d2d909546a \ - --hash=sha256:2edccc433cbfa046b980b0df0171cd25bcaeb3a68fe9022db0979e7aa74a826b \ - --hash=sha256:7b6d09433a10592ce39b13d7be5a54fbac1d1228ed29abc880fb23df7cb694c9 \ - --hash=sha256:8c233660f575a5a89e6d4cb65d9f938126312bca76d8fe087b947b3a1aaac9ee \ - --hash=sha256:917e891983ca3c1887b4ef36447b1e0873e70c933afc831c6b6da078ba474312 \ - --hash=sha256:ab486563df44c17f5173621c7b198955bd6b613fb87c71c161f827d3fb149a9b \ - --hash=sha256:ae0aefdd8796a7737eccea863f80f81e468a1e4cf14d926bd9b6f5f2d5f90ca9 \ - --hash=sha256:b0726cecd84f9474419d67252add4ac0cd9811b04d61123054b9fb6f57df6e9e \ - --hash=sha256:b58fabe35e80b264a4e3bb23e6b96f9e45a3df7fb7eed419ac0e5947c61e47cc \ - --hash=sha256:c7663d4e37f13e884d13994247449e9f8f574bc4655d509c3b95e9ec9e2b9dc1 \ - --hash=sha256:e452c464a02e7dc7822a05d25db4cde564444a67e58539a00f929c51eddda0cf \ - --hash=sha256:e78c8603dcd9a04c7364f1a3e670cea95d51ee865e4efb3556a3a63adef958ea \ - --hash=sha256:eb7e81434c8d223ec4a219b5fc1c47d0417b12be7ea866e24fb5ad6e84b3d988 \ - --hash=sha256:ed0cace939114f62738d808fdcecd4c869222507e266e574799e9c0faa17d486 \ - --hash=sha256:eed63d3b4d62449571547b60578c5b2c4bcccc5387148db46e0c2313dad0ee00 \ - --hash=sha256:fd04ef36b4a6d599bbdb225dd1d3f51e00105f6d48a28f006da7f9822f2606d8 - # via - # -c requirements-ci.txt - # ipython -ptyprocess==0.7.0 \ - --hash=sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35 \ - --hash=sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220 - # via - # -c requirements-ci.txt - # pexpect -pure-eval==0.2.3 \ - --hash=sha256:1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0 \ - --hash=sha256:5f4e983f40564c576c7c8635ae88db5956bb2229d7e9237d03b3c0b0190eaf42 - # via - # -c requirements-ci.txt - # stack-data -py-rust-stemmers==0.1.8 \ - --hash=sha256:08c258deab6d994551a92e9468ce88e58f97e636e73d9c5763978a57d7675a13 \ - --hash=sha256:0a68745d4b3c7f5abc778ca967e8711df6154873abcfe4e62a6631fa2363cc32 \ - --hash=sha256:0f1d2135974bbbea2c15087a7d8cec8697338b2a748c9694c92943775f4d6c14 \ - --hash=sha256:13b25ce65509ff7e37725bd38c62704f32ae0604ac0899f43c8cce41d5543212 \ - --hash=sha256:15af4e12e1288de2e5241eec375afc6ad6be4c125a28ca010599d9f92db23f01 \ - --hash=sha256:1686fc009869ff8bcc1d5a305f071eeb8c3b3612a9827bcadd4e61fdb5727179 \ - --hash=sha256:21ed8055cec1f78d666afad8ffd7a51775ba419d2c615b8a1df7b32ca7f33e2b \ - --hash=sha256:22d037a82920bed8fccbec62cf5ef47d821ac3966a3d098fa48a2053397ea6b7 \ - --hash=sha256:234fdcb58f4d907877ed03c9358668a149b5a66d096abcf43c324a4f5697d36d \ - --hash=sha256:245e2c61c52e073341893a9682cd1396b61047154548aee30bb1af3d8ed4b4cc \ - --hash=sha256:25bb9b0b6b8d79b32c151c7f5f94af9af9aea201ca8736e6f117c841b017f028 \ - --hash=sha256:2b607f0b270951fb66479baf4b68716cc63a981585cbd898b0b6b5c359efde7e \ - --hash=sha256:2e86ad68fe297a6652f0f0390625ea81858b6f27862fd4c5ee1214bf5af29b9d \ - --hash=sha256:3007ad4ec51e0c352ae410234a24a9ac75fab0c1e06c585fbac9fcced69385f8 \ - --hash=sha256:342b6cc9eb833f102d86e146ee71bccb3c1ed1e8320db8e6553cc81b716b1b14 \ - --hash=sha256:35570098da02eb439afcd7270a12bf850bbe874b85cb912e0fb2d87a6e703920 \ - --hash=sha256:36b952ce65a794faf15553b8f5b60431483c2d5bec00bc6982bf490e727250f9 \ - --hash=sha256:3bef8062d28251b465299cc676de7c11dde003858caf2c2b5c14de7298dc63db \ - --hash=sha256:40c86be90cee4a709ad84fde4db7f11ca44d65630a56b77ec86fe84c23adfc09 \ - --hash=sha256:451ee1c02a3f5cf1e161b46ba9032cdda4ba10a8b03ff9ee61c1d34d42a0bc81 \ - --hash=sha256:45d0c42346f8e5d04b86a0b0f895bb15c53788bf551e7fad36be1dad093e856f \ - --hash=sha256:479c77c32d8be692f3cfcde7e19273f02ac81d6f45c6aef49887ef95cab7abbb \ - --hash=sha256:4a1e11d22a240318dc917266eb3c85919455b6ea834445b95997712d9ede6b93 \ - --hash=sha256:4b1159a38a198eabeabd908015f9425c4220b61b42c6603c58870481ff2b50bb \ - --hash=sha256:4b90fc81411943b114e8eb4988a876ba3b12bd2d20741559803eddc4131575dc \ - --hash=sha256:515884bcfb47b10335146648f276930d0c1201ae5e8b7b400fb46d8ea05c0ec2 \ - --hash=sha256:51d0042d2a92ef0f7048bfc06b6c2a02306af31ea47f09d24b34e4b7e63c4e80 \ - --hash=sha256:526b58958c6ffa36c4a805326cfb624ecbd665d16ba435027dbed0bcbcaa09d2 \ - --hash=sha256:56cc2c2df742fa6529285b7d204720f34b7da789ed78eb578442f93c6de97d89 \ - --hash=sha256:5bd15b89203ecd886960e237124d1aa6e55498d76418c36c967d3b12168d43dc \ - --hash=sha256:5cc8fab9d0f1b274a26935a632362b8278f03e81b65e8b8644d5ca3f62a5a1a4 \ - --hash=sha256:6a9a4b8733d0b307bd0879ab7e321aa8a0bfd054a75a5cb23c647df5ca7d17c3 \ - --hash=sha256:6b0f6f48bc54d607aed802de872fcd5a71bae969a6760976dc78ce55e8eaf3da \ - --hash=sha256:6c92733b020534470ca5a0d7fe8b85c85622ff383d4f37fec75a1c677aa84921 \ - --hash=sha256:769f37882905da2311cb720681b112eb70a4e6bd56fb424d473427b5379c8396 \ - --hash=sha256:7cc0cc0b8eb45d2158c28ea43e2f338c110aad63052ad3bd00bc7446a595e12f \ - --hash=sha256:870afb2d1d4731bd2d74b715b34439b29734e4dc94c55342096f07669f7f9fa0 \ - --hash=sha256:89d3d34094b9b6078a8ea6fe1c7044e5fd32f14e76c94818c5008f49ae075f08 \ - --hash=sha256:8b0327b151ab8a338fb54fdac114ba34394327fc1e2c4c425ad1caf2013e5de3 \ - --hash=sha256:931d13570962b093417e5443a9d1bd63d73fa239ebb81e5b1d346663571403e4 \ - --hash=sha256:9ab605a86c950ba7e8ab1392cf91296c0bec3084babb897a4aecf90a10c82395 \ - --hash=sha256:ae773e1d01e9aa328d175f461475d0cd7074a82bfcc71de6dc5765e51f1cc9f7 \ - --hash=sha256:af749b3b9f6531342250dd05854c0ae93e01f79b0049a8769012e0b50e9aba5b \ - --hash=sha256:bfc185b599e646a0e39d11df3f5e6d15edefb110496601556385d33b55fed5de \ - --hash=sha256:c03f51280d5d72f7f9b07101ad248845279dc1c82c47a74149303d25937464b7 \ - --hash=sha256:c786235275c5c2abb7f206b8236aee3ca0bc53c7497daf7fb7b01d3491469547 \ - --hash=sha256:d396dd25c473c1bc4248c79cd223f4b36356b55a124652f015c6a001547f81ac \ - --hash=sha256:da0326c913070d5f3fabd56393ca4118167bb0b13c2932a77c7a1b31f85f651a \ - --hash=sha256:dab8a862fa8e4c9e715848e9d64c317229d7a2c37238cd1c73237b85d655ab7e \ - --hash=sha256:dadd0e369703817fc7026987b3093f461f9f58d8dde74e689d546184bc8f3451 \ - --hash=sha256:dca0ae40715238582d6f1824b61d09ea3982359a061b69798ab5732b3ba0d4c5 \ - --hash=sha256:dd967eea2f808a1e73aa71ecccef0f4925a4cca4eb02ced94057afe3303153ef \ - --hash=sha256:eee4af7ada2ce9cb3ec59ffe8458148c3933a86507d816bf954ee506a0e45b61 \ - --hash=sha256:f16deb1557b8253d8c11693047bec4ed67d6b09ae0f84c8b896ea03ac2fc8925 \ - --hash=sha256:fa42f5f8feb694aaaa869eedf477fcaf66f67a192cd64d94302d06920c33864a - # via - # -c requirements-ci.txt - # fastembed pyarrow==25.0.1 \ --hash=sha256:0b1edbb2f385a6a65e9711b62ba86ac54a7816a3f8d17bb3e8a5929d65fb2485 \ --hash=sha256:0b726ad7e7b669be982b0c71c07fe4b037d654354130da79a7902a669e93a66b \ @@ -2419,182 +652,157 @@ pyarrow==25.0.1 \ # via # -c requirements-ci.txt # semantica (pyproject.toml) -pycparser==3.0 \ - --hash=sha256:600f49d217304a5902ac3c37e1281c9fe94e4d0489de643a9504c5cdfdfc6b29 \ - --hash=sha256:b727414169a36b7d524c1c3e31839a521725078d7b2ff038656844266160a992 - # via - # -c requirements-ci.txt - # cffi -pydantic==2.13.4 \ - --hash=sha256:45a282cde31d808236fd7ea9d919b128653c8b38b393d1c4ab335c62924d9aba \ - --hash=sha256:c40756b57adaa8b1efeeced5c196f3f3b7c435f90e84ea7f443901bec8099ef6 +pydantic==2.13.5 \ + --hash=sha256:346a034f080da3755d8e9cb5e00e8b07de1d39e4f6e2c87d8ab7cafa0b269a73 \ + --hash=sha256:51a9c5f7b2f8e636f04c6cada605d9b6a3bf1348fdf945a3d8869b19bba0ee08 # via # -c requirements-ci.txt # semantica (pyproject.toml) - # spacy - # thinc - # weasel -pydantic-core==2.46.4 \ - --hash=sha256:00c603d540afdd6b80eb39f078f33ebd46211f02f33e34a32d9f053bba711de0 \ - --hash=sha256:0186750b482eefa11d7f435892b09c5c606193ef3375bcf94aa00ae6bfb66262 \ - --hash=sha256:041bde0a48fd37cf71cab1c9d56d3e8625a3793fef1f7dd232b3ff37e978ecda \ - --hash=sha256:0c563b08bca408dc7f65f700633d8442fffb2421fc47b8101377e9fd65051ff0 \ - --hash=sha256:0cbe8b01f948de4286c74cdd6c667aceb38f5c1e26f0693b3983d9d74887c65e \ - --hash=sha256:0ce40cd7b21210e99342afafbd4d0f76d784eb5b1d60f3bdc566be4983c6c73b \ - --hash=sha256:0e96592440881c74a213e5ad528e2b24d3d4f940de2766bed9010ab1d9e51594 \ - --hash=sha256:10e17cbb10a330363733efc4d7c4d0dd827ac0909b8f6a6542298fed1ea62f29 \ - --hash=sha256:133878133d271ade3d41d1bfb2a45ec38dbdbda40bc065921c6b04e4630127e2 \ - --hash=sha256:14d4edf427bdcf950a8a02d7cb44a08614388dd6e1bdcbf4f67504fa7887da9c \ - --hash=sha256:14f4c5d6db102bd796a627bbb3a17b4cf4574b9ae861d8b7c9a9661c6dd3362d \ - --hash=sha256:17299feefe090f2caa5b8e37222bb5f663e4935a8bfa6931d4102e5df1a9f398 \ - --hash=sha256:184c081504d17f1c1066e430e117142b2c77d9448a97f7b65c6ac9fd9aee238d \ - --hash=sha256:18e5ceec2ab67e6d5f1a9085e5a24c9c4e2ac4545730bfe668680bca05e555f3 \ - --hash=sha256:19e51f073cd3df251856a8a4189fbdf1de4012c3ebacfb1884f94f1eb406079f \ - --hash=sha256:1a7dd0b3ee80d90150e3495a3a13ac34dbcbfd4f012996a6a1d8900e91b5c0fb \ - --hash=sha256:1d8ba486450b14f3b1d63bc521d410ec7565e52f887b9fb671791886436a42f7 \ - --hash=sha256:2108ba5c1c1eca18030634489dc544844144ee36357f2f9f780b93e7ddbb44b5 \ - --hash=sha256:228ee9bae8bef5b1e97ec58302f80357c37199e0d0a99174e138d28e6957b9d9 \ - --hash=sha256:23ace664830ee0bfe014a0c7bc248b1f7f25ed7ad103852c317624a1083af462 \ - --hash=sha256:2412e734dcb48da14d4e4006b82b46b74f2518b8a26ee7e58c6844a6cd6d03c4 \ - --hash=sha256:29c61fc04a3d840155ff08e475a04809278972fe6aef51e2720554e96367e34b \ - --hash=sha256:2f84c03c8607173d16b5a854ec68a2f9079ae03237a54fb506d13af47e1d018d \ - --hash=sha256:3009f12e4e90b7f88b4f9adb1b0c4a3d58fe7820f3238c190047209d148026df \ - --hash=sha256:3245406455a5d98187ec35530fd772b1d799b26667980872c8d4614991e2c4a2 \ - --hash=sha256:3447661d99f75a3683a4cf5c87da72f2161964611864dbbeac7fbb118bb4bfc0 \ - --hash=sha256:372429a130e469c9cd698925ce5fc50940b7a1336b0d82038e63d5bbc4edc519 \ - --hash=sha256:395aebd9183f9d112f569aeb5b2214d1a10a33bec8456447f7fbdfa51d38d4cd \ - --hash=sha256:3a233125ac121aa3ffba9a2b59edfc4a985a76092dc8279586ab4b71390875e7 \ - --hash=sha256:3be77f45df024d789a672ae34f8b06fb346c4f9f46ea714956660ea4862e89ac \ - --hash=sha256:3bf92c5d0e00fefaab325a4d27828fe6b6e2a21848686b5b60d2d9eeb09d76c6 \ - --hash=sha256:3ecbc122d18468d06ca279dc26a8c2e2d5acb10943bb35e36ae92096dc3b5565 \ - --hash=sha256:3fb702cd90b0446a3a1c5e470bfa0dd23c0233b676a9099ddcc964fa6ca13898 \ - --hash=sha256:428e04521a40150c85216fc8b85e8d39fece235a9cf5e383761238c7fa9b96fb \ - --hash=sha256:432c179df7874eeb73307aad2df0755e1ae0efa61ff0ea89b93e194411ae3928 \ - --hash=sha256:4a05d69cba51d852c5c3e92758653245a50c0b646ced0cf05bd793ed592839d6 \ - --hash=sha256:4c63ebc82684aa89d9a3bcbd13d515b3be44250dc68dd3bd81526c1cb31286c3 \ - --hash=sha256:4fc73cb559bdb54b1134a706a2802a4cddd27a0633f5abb7e53056268751ac6a \ - --hash=sha256:4fcbe087dbc2068af7eda3aa87634eba216dbda64d1ae73c8684b621d33f6596 \ - --hash=sha256:56cb4851bcaf3d117eddcef4fe66afd750a50274b0da8e22be256d10e5611987 \ - --hash=sha256:5855698a4856556d86e8e6cd8434bc3ac0314ee8e12089ae0e143f64c6256e4e \ - --hash=sha256:5a4330cdbc57162e4b3aa303f588ba752257694c9c9be3e7ebb11b4aca659b5d \ - --hash=sha256:5b712b53160b79a5850310b912a5ef8e57e56947c8ad690c227f5c9d7e561712 \ - --hash=sha256:5d5902252db0d3cedf8d4a1bc68f70eeb430f7e4c7104c8c476753519b423008 \ - --hash=sha256:617d7e2ca7dcb8c5cf6bcb8c59b8832c94b36196bbf1cbd1bfb56ed341905edd \ - --hash=sha256:62f875393d7f270851f20523dd2e29f082bcc82292d66db2b64ea71f64b6e1c1 \ - --hash=sha256:633147d34cf4550417f12e2b1a0383973bdf5cdfde212cb09e9a581cf10820be \ - --hash=sha256:66ce7632c22d837c95301830e111ad0128a32b8207533b60896a96c4915192ea \ - --hash=sha256:6b3ace8194b0e5204818c92802dcdca7fc6d88aabbb799d7c795540d9cd6d292 \ - --hash=sha256:6f2eeda33a839975441c86a4119e1383c50b47faf0cbb5176985565c6bb02c33 \ - --hash=sha256:7027560ee92211647d0d34e3f7cd6f50da56399d26a9c8ad0da286d3869a53f3 \ - --hash=sha256:7283d57845ecf5a163403eb0702dfc220cc4fbdd18919cb5ccea4f95ee1cdab4 \ - --hash=sha256:7a5f930472650a82629163023e630d160863fce524c616f4e5186e5de9d9a49b \ - --hash=sha256:7bfb192b3f4b9e8a89b6277b6ce787564f62cfd272055f6e685726b111dc7826 \ - --hash=sha256:811ff8e9c313ab425368bcbb36e5c4ebd7108c2bbf4e4089cfbb0b01eff63fac \ - --hash=sha256:8233f2947cf85404441fd7e0085f53b10c93e0ee78611099b5c7237e36aacbf7 \ - --hash=sha256:82cf5301172168103724d49a1444d3378cb20cdee30b116a1bd6031236298a5d \ - --hash=sha256:8358a950c8909158e3df31538a7e4edc2d7265a7c54b47f0864d9e5bae9dcebf \ - --hash=sha256:85bb3611ff1802f3ee7fdd7dbff26b56f343fb432d57a4728fdd49b6ef35e2f4 \ - --hash=sha256:86e1a4418c6cd97d60c95c71164158eaf7324fae7b0923264016baa993eba6fc \ - --hash=sha256:8b9bab013d1c7a79d3501ff86d0bc9c31bf587db4551677b96bec07df78c6b15 \ - --hash=sha256:8c5dac79fa1614d1e06ca695109c6105923bd9c7d1d6c918d4e637b7e6b32fd3 \ - --hash=sha256:8d0820e8192167f80d88d64038e609c31452eeca865b4e1d9950a27a4609b00b \ - --hash=sha256:8daafc69c93ee8a0204506a3b6b30f586ef54028f52aeeeb5c4cfc5184fd5914 \ - --hash=sha256:9037063db01f09b09e237c282b6792bd4da634b5402c4e7f0c61effed7701a04 \ - --hash=sha256:905a0ed8ea6f2d61c1738835f99b699348d7857379083e5fc497fa0c967a407c \ - --hash=sha256:90884113d8b48f760e9587002789ddd741e76ab9f89518cd1e43b1f1a52ec44b \ - --hash=sha256:91a06d2e259ecfbd8c901d70c3c507900458498142b3026a296b7de4d1322cc9 \ - --hash=sha256:926c9541b14b12b1681dca8a0b75feb510b06c6341b70a8e500c2fdcff837cce \ - --hash=sha256:9401557acd873c3a7f3eb9383edef8ac4968f9510e340f4808d427e75667e7b4 \ - --hash=sha256:9551187363ffc0de2a00b2e47c25aeaeb1020b69b668762966df15fc5659dd5a \ - --hash=sha256:962ccbab7b642487b1d8b7df90ef677e03134cf1fd8880bf698649b22a69371f \ - --hash=sha256:97e7cf2be5c77b7d1a9713a05605d49460d02c6078d38d8bef3cbe323c548424 \ - --hash=sha256:9aa768456404a8bf48a4406685ac2bec8e72b62c69313734fa3b73cf33b3a894 \ - --hash=sha256:9bc519fbf2b7578398853d815009ae5e4d4603d12f4e3f91da8c06852d3da3e9 \ - --hash=sha256:9d56801be94b86a9da183e5f3766e6310752b99ff647e38b09a9500d88e46e76 \ - --hash=sha256:9f444c499b3eefd3a92e348059471ea0c3a6e303d9c1cec09fa748fd9f895201 \ - --hash=sha256:9fa8ae11da9e2b3126c6426f147e0fba88d96d65921799bb30c6abd1cb2c97fb \ - --hash=sha256:a0f62d0a58f4e7da165457e995725421e0064f2255d8eccebc49f41bbc23b109 \ - --hash=sha256:a396dcc17e5a0b164dbe026896245a4fa9ff402edca1dff0be3d53a517f74de4 \ - --hash=sha256:aaa2a54443eff1950ba5ddc6b6ccda0d9c84a364276a62f969bdf2a390650848 \ - --hash=sha256:ad785e92e6dc634c21555edc8bd6b64957ab844541bcb96a1366c202951ae526 \ - --hash=sha256:af8244b2bef6aaad6d92cda81372de7f8c8d36c9f0c3ea36e827c60e7d9467a0 \ - --hash=sha256:b078afbc25f3a1436c7a1d2cd3e322497ee99615ba97c563566fdf46aff1ee01 \ - --hash=sha256:b2f69dec1725e79a012d920df1707de5caf7ed5e08f3be4435e25803efc47458 \ - --hash=sha256:b8458003118a712e66286df6a707db01c52c0f52f7db8e4a38f0da1d3b94fc4e \ - --hash=sha256:bb63e0198ca18aad131c089b9204c23079c3afa95487e561f4c522d519e55aba \ - --hash=sha256:bfec22eab3c8cc2ceec0248aec886624116dc079afa027ecc8ad4a7e62010f8a \ - --hash=sha256:c1747f85cee84c26985853c6f3d9bd3e75da5212912443fa111c113b9c246f39 \ - --hash=sha256:c1b3f518abeca3aa13c712fd202306e145abf59a18b094a6bafb2d2bbf59192c \ - --hash=sha256:c50f2528cf200c5eed56faf3f4e22fcd5f38c157a8b78576e6ba3168ec35f000 \ - --hash=sha256:c68fcd102d71ea85c5b2dfac3f4f8476eff42a9e078fd5faefff6d145063536b \ - --hash=sha256:c7a7bd4e39e8e4c12c39cd480356842b6a8a06e41b23a55a5e3e191718838ddf \ - --hash=sha256:c94f0688e7b8d0a67abf40e57a7eaaecd17cc9586706a31b76c031f63df052b4 \ - --hash=sha256:cbaf13819775b7f769bf4a1f066cb6df7a28d4480081a589828ef190226881cd \ - --hash=sha256:cd2213145bcc2ba85884d0ac63d222fece9209678f77b9b4d76f054c561adb28 \ - --hash=sha256:ce5c1d2a8b27468f433ca974829c44060b8097eedc39933e3c206a90ee49c4a9 \ - --hash=sha256:d396ec2b979760aaf3218e76c24e65bd0aca24983298653b3a9d7a45f9e47b30 \ - --hash=sha256:d51026d73fcfd93610abc7b27789c26b313920fcfb20e27462d74a7f8b06e983 \ - --hash=sha256:d80ee3d731373b24cebbc10d689ca4ee1875caf0d5703a245db18efd4dd37fc1 \ - --hash=sha256:d995260fdf4e1db774581b4900e0f832abe3c7c84996726bbc161b19c8f29e76 \ - --hash=sha256:da4b951fe36dc7c3a1ccb4e3cd1747c3542b8c9ceede8fc86cae054e764485f5 \ - --hash=sha256:daa27d92c36f24388fe3ad306b174781c747627f134452e4f128ea00ce1fe8c4 \ - --hash=sha256:db06ffe51636ffe9ca531fe9023dd64bdd794be8754cb5df57c5498ae5b518a7 \ - --hash=sha256:e0d65b8c354be7fb5f720c3caa8bc940bc2d20ce749c8e06135f07f8ed95dd7c \ - --hash=sha256:e68b7a074f65a2fd746c52a7ce6142ab7006074ac269ace0c25cd8ba171f8066 \ - --hash=sha256:e739fee756ba1010f8bcccb534252e85a35fe45ae92c295a06059ce58b74ccd3 \ - --hash=sha256:e846ae7835bf0703ae43f534ab79a867146dadd59dc9ca5c8b53d5c8f7c9ef02 \ - --hash=sha256:e9c26f834c65f5752f3f06cb08cb86a913ceb7274d0db6e267808a708b46bc89 \ - --hash=sha256:ea793e075b70290d89d8142074262885d3f7da19634845135751bd6344f73b50 \ - --hash=sha256:f027324c56cd5406ca49c124b0db10e56c69064fec039acc571c29020cc87c76 \ - --hash=sha256:f13a646d65d09fbf1bc6b3a9635d30095c8e7e5cc419ff35ecc563c5fd04cd49 \ - --hash=sha256:f47286a97f0bc9b8859519809077b91b2cefe4ae47fcbf5e466a009c1c5d742b \ - --hash=sha256:f747929cf940cddb5b3668a390056ddd5ba2e5010615ea2dcf4f9c4f3ab8791d \ - --hash=sha256:f99626688942fb746e545232e7726926f3be91b5975f8b55327665fafda991c7 \ - --hash=sha256:f9fa868638bf362d3d138ea55829cefb3d5f4b0d7f142234382a15e2485dbec4 \ - --hash=sha256:fbdb89b3e1c94a30cc5edfce477c6e6a5dc4d8f84665b455c27582f211a1c72c \ - --hash=sha256:fc010ab034c8c7452522748bf937df58020d256ccae0874463d1f4d01758af8e \ - --hash=sha256:fc3e9034a63de20e15e8ade85358bc6efc614008cab72898b4b4952bea0509ff \ - --hash=sha256:fd8b3d9fd264be37976686c7f65cd52a83f5e84f4bfd2adf9c1d469676bbb6ae +pydantic-core==2.46.5 \ + --hash=sha256:013d6f3483d81e02e7c328831808f336c8596ee33b4bd4026b9ffb1e960b8942 \ + --hash=sha256:03b9666e41e35d8909852ba191a0607520f81b74eaf12ccf8737005dbb313821 \ + --hash=sha256:045ab3b6d308439e32b81cc173bba5b9018bc6ed896afd0c65b3b009b1699af5 \ + --hash=sha256:0bddb4020d8f04175865ccd17eff3040874fc11fb593f424edb452653b4b947c \ + --hash=sha256:0cdbada856a1c69a7624a64d3d9aefe79300bd6ef827b43a4f265010b9b55184 \ + --hash=sha256:0fc5be0abd4a407e200d844b404e33639a554e7bd0d448e7b9ae181be4789ac2 \ + --hash=sha256:10416c15b8839ecc4ef4d0885da76da6fd0f67333a0eb8aff6d93c4b8f2910fc \ + --hash=sha256:15f4a94963c95accac15b7b657bb177d3ad82bb90b0d0526d9a9b85079925db5 \ + --hash=sha256:18a09e1e1011b462f2e32774f25859ef1223d5c2b0546a633cf56654710721e0 \ + --hash=sha256:193375f3548919d3f0b60936ca113ada3e38f264f91b9b8e0508efaad57be931 \ + --hash=sha256:1a353f84de772f423b5ffb11d7ae352fbbef0f446f3c0b0af0f8236d7233606e \ + --hash=sha256:1e449def1945a462c464331254e5a44fca7c3b4f9aedf59ec2f50f8066dd8e25 \ + --hash=sha256:1e5aad1220a1192c42341c8fd4a8686657e73ab2a920c970bdc4de334fe3193d \ + --hash=sha256:200aa3dc9f8d54f0754f43247c0bad0999fdcfbfd2488384dd44f37279271fe6 \ + --hash=sha256:2471fd51c61c610e1dcf7de44d7299283661654d11264ab4802b303368d69c47 \ + --hash=sha256:24922243639cbdac66c75fcb6fd6495a9cb52b213d62f9a0d16f0310b1ff8038 \ + --hash=sha256:28a6a556cd3b6066bea827857f9d9cce027c96f776e512f544a581f9e42161f8 \ + --hash=sha256:2bc9419666990c06d7397831f2126a1ecc3594aaa3ff7de5bf2d066802f4e07b \ + --hash=sha256:2cbd9a5eff05e51c447c34dfa4632145b26b09120cf04bd0c871e44c1a5e1c9a \ + --hash=sha256:2d330aaba8621b1edcec8ae2c4050f63b84ccf6d98723a8f212e9684713abf0e \ + --hash=sha256:2d5d76654becf5efd62c9e51c3756c67b49498b0c9a40884934c40807adbd074 \ + --hash=sha256:337639ba62a11acde6ef3aeb08c8ea755f8ef1fe5e513356c0f36a2b0d7568b0 \ + --hash=sha256:347ec774390c87326a2e4929d58d3f7e8763a104d5d35f4cd595a4c952366433 \ + --hash=sha256:356c8368cbc321050b169595683a2e1d63413b1e0e2868b330af9fc14c616d3f \ + --hash=sha256:37ae34309d7bd8c0d61ab839668058f2a7962ea1fc51d105d2db228fe0618034 \ + --hash=sha256:37ea7b83c935e5b0d68c9449b82651accf78a10828b2c02b2f2d9e9496446c21 \ + --hash=sha256:3a3e26b6a8274211bddee2d0e4d0d42778f17a34510f49d2ec44b58abfc41736 \ + --hash=sha256:3aa166e99c4f2985407fb8714aebede877ecb5455cf321b606adca926d30d5a0 \ + --hash=sha256:3d2652072b2d774947ba5cf78a9e59644ac62ee572daf6dd2e1dfe905e15b2b7 \ + --hash=sha256:40375c2d05acec10323e45dfe2077ac44bc74659008614af5069034e2cfc781c \ + --hash=sha256:413a717a410d0c817ef5b786a059415550b3794e1d0c2abffd9efb93a3d9f7b4 \ + --hash=sha256:46c25dda9d092a06c08db76ffe0a197107904d0dfac653f7d5306bbcd6d6119c \ + --hash=sha256:49776eab08766a08dfff7012f8b422dcd7e25e43b316eedf0477c24fcfa84b7c \ + --hash=sha256:4d44cf99ddebf875f9b68cc267aa684c99b7b44fe63ee1cac4ec163807290069 \ + --hash=sha256:4dedce55295becb61921e386b99d4f2706045306e7fa52249a33004c837379fb \ + --hash=sha256:4f8507560a9284e1370bb048ed4282012fbef4e8d109875b95e884d228552061 \ + --hash=sha256:4fdc8b93a41521988916eeaa271173fcca7fa0803d62f87675aac8dcec1c8e29 \ + --hash=sha256:5086029a57366b8cf81b130a43908738095c270c21a8d7f0e8bdfdb89718e2f3 \ + --hash=sha256:52e24eacdb536cade636aa90fb851835222becff8484b7001fdc78cb0290f2aa \ + --hash=sha256:53feb344243bb9510a9dec7bf3cf1b64d88a98af5dc7872a5160465f8b198c8e \ + --hash=sha256:545f26c504b27c3758439a5e6d9349931f0a04f855668d5fe323c89e82300a38 \ + --hash=sha256:54d510bac3ee52247af28ed4bb18a1e799f040ac60fd2bf5ccd4c92f1fbe786f \ + --hash=sha256:5cb482e9e84c851f4e623fe4acc1ced89168cf1fe18f7089db4548c8f5bbb65b \ + --hash=sha256:5e81740c09e310f5aa5cbd3e434a01c154d4bef93241c7877b39f211d2b78ba8 \ + --hash=sha256:5ee239d575f80b08eca11f6e20f90c4c695de7825c67eefe6091fbf20dda648e \ + --hash=sha256:5f194189415698233dd1114a093a9b56e61e2c57e11b469be3b0506f46f0771c \ + --hash=sha256:5f93c5fe914d75fbec9a49209b00da5f08e9e467d69da2b1510c81940cfd10be \ + --hash=sha256:657b40d6240c0a7b6a64b30f22d1e3aa631c7e846c621b0c0f6d1d75e2e15ea6 \ + --hash=sha256:6d30e1a4f138b8951063e9a394752a9179b51da288ffa507b1e659222f4c1793 \ + --hash=sha256:6f7b393a8b3da82f5c1fc0751e6d01ac6c55b93c18226a60bdfba4a724efafd1 \ + --hash=sha256:701b2e04b560eeb4bddf7a25ab8ca476176e34fdbd9a0e18196f0d12d4685f0b \ + --hash=sha256:771cf63ae0b1b50dd22e5f3e3549fab5f3f4ff1635d352a9e1a97fe01c7b2e64 \ + --hash=sha256:79bdfa52f843137045b2d081cc05c120ba6665d29b7559c2c47690906f39279f \ + --hash=sha256:7ac031912d54f3d83ef3b3eb98dfabc1608802e2202263d25957eeed40b94761 \ + --hash=sha256:7b0fc826b16c55e561e5d2a0c5c77b051ba1d92808118c4e4b5390f5e0cf191d \ + --hash=sha256:7c6be839a5a8312626b32029a415644a0846b420bc8b52b95b28cd92da162168 \ + --hash=sha256:816ff0a6550ffc06c098ccd2e0698600f9aa7da192a79eaa6f9af504a35db869 \ + --hash=sha256:82a36973cf8a2ef5406f4fe2edbf8ed0c99629535d959e0b100c76a32535a111 \ + --hash=sha256:837b396ca3d7b74091ca623f6cbd8351bd42d670a79c2683e79fb089f06a2de5 \ + --hash=sha256:850a08d167dde16db8702c274f320c7be9d7da6f6dff2b58b18f9e815bd94f5b \ + --hash=sha256:8816f3d218beb4b787de5c9759c259b8fa61f9dec42dc7811f320a33771778b7 \ + --hash=sha256:892a881d5f68c2b9ea304b7a6c2c60d9343df578a311b0f86b94bc8f1ffe8129 \ + --hash=sha256:895395f8918627b04efb1ad2a4cf605387143300ba03304cd1dfa6d03f5e095e \ + --hash=sha256:8b10e3e8fd7ddc2bd915848a2768e44c15b22936f1cc54c462ad1164deb02655 \ + --hash=sha256:8e24d8f05fa2d28513d94e877e9c75ad66175376209b3977f916e240e623193c \ + --hash=sha256:8feeac04b5794e513e710af2f9c87d49f31a6dc47967bb264a1fed61a8989bec \ + --hash=sha256:9432f3598db432cb51c5b37fdbf29a60fcccc79e30d37a05022776a6bc4ab689 \ + --hash=sha256:976e1128455aa595ea04c79ccfedff1aaeab96ee013fcc916bed120c4f0ad94f \ + --hash=sha256:978e7b97d4824b5be09c69fb70507cbde3b0323fc147332ca40a94d9a6a0ebbf \ + --hash=sha256:97bf8de4d541598c94a59344eeb988a94c08ff76b5723c41f6567ec18c7892ea \ + --hash=sha256:97cf3eb53a8cccacf9d46686a0926186c9bfb5574f2ed66d3639d5fe117cd3a9 \ + --hash=sha256:9b68938dd5b0c783d88ff8e2dcc69451b5eb936fe212d516b21b9d5567f6d464 \ + --hash=sha256:9c4b71f10dd532fb7a5cbc8f58707779e64f03a258c2bf8bfbaecfcd9970b519 \ + --hash=sha256:9f47b8a949e60f027f0aa0a6f6c7b7e9c55cbf4380d10b344e282fa4e7ab1e1b \ + --hash=sha256:a1dee1b804ff4d11c663636cf15d2ea47e9f79cd56c033fb1cbf08924842a48f \ + --hash=sha256:a2468d93d181667a7abd66e1b64bb9f76f361b0fef8faddf687456453576f5ee \ + --hash=sha256:a2a5e1d0ff29adddc9f6d6821a66302e4493f8ca898b715b6b1182c2c201ea0a \ + --hash=sha256:a39ac25a9a2fa4072efdb429833c4a4c8009a51ff9eea3eeae131713cd27991e \ + --hash=sha256:a445486499897b88a7d6c310c88ed64dd37b1b59bfd7ae9107490bbb362f47d6 \ + --hash=sha256:a91c17edf6eea2402cb5457b4c89e99bc5ed1004aa34c4adf1d4258c1a5c22c2 \ + --hash=sha256:ab4b66edffb32d9e951efb3814bd104b8367a7501b81b955cacb5726d897389f \ + --hash=sha256:aca6c767f552b21b10f774aeac128e828eafb796adfa1b666a18bf6321453c3a \ + --hash=sha256:acf8a67ba51f4ca9ddbd0e6b3000a65ac51ab734661778b3e7ba64d99a710f2f \ + --hash=sha256:b10ec717381bdbfafef34607824db4c91de69ff085e4fca3b2af91b4fa17e68a \ + --hash=sha256:b49924c73a235e969511bf2aabdff3beebf9820931f646c80274d5d780010c47 \ + --hash=sha256:b6acfb46a814762367fb7ba0828b0a17d441b92ce249a0e007474c9072662dda \ + --hash=sha256:b7ca9034437b6022f941f4857459562ee00a560b97e7cce8a0ec5a74fc6766e0 \ + --hash=sha256:b98134087d9de723658d17a42c7d0da8d6e2ef08015dee7dc93889047315f5e4 \ + --hash=sha256:b9fe6fb92520e3fd61f2e49000b6911b188824f089b75973ea06d6267f0b476d \ + --hash=sha256:bce57638e08ac148e5778cce7feb968307a727d66f8e2274a543d0cf0c9ad6a3 \ + --hash=sha256:c14ad3bdc85ee7f318742c457ca3968a92126d144b15721c759033bfb06296c2 \ + --hash=sha256:c1c43ad4339643d70ebb8124e1305a7dab423001eff58bb41a0f731adbc98355 \ + --hash=sha256:c3471e5c4a949c26ec00a77f01df59096aa9495877de76fd60a980f8ee6be461 \ + --hash=sha256:c583b927a8838dab890706a6fa7573fbb8b70e24000ef9f7238e2d6f6435a5ed \ + --hash=sha256:c76fe65e607be28c7fd4d56fc3c42b1583aa058ce3408b7ad0fd540171d31f9f \ + --hash=sha256:c7ea57fc63aa7da93a1bd2d644e6577befae10c52c4e36377635eea1056a74f5 \ + --hash=sha256:cd5214352ae68f3b5e9af7768bdc5253695ee069675db3480518420b3be881f2 \ + --hash=sha256:cdbb78909f52b981d3b2d56b97328d71eb0b974c36bd77c920123a7ebb192829 \ + --hash=sha256:cdc8b74ecc48c0cb1e9607a05ec4e9e88db60a19ffcc9a1d5f9088ede40c8dc0 \ + --hash=sha256:d0a24b40877af2de4950252be9d21eaf7fb07660f3c2cae1f56c6b599ada5266 \ + --hash=sha256:d22a945598fb91236b4dd793a6e42e4f3dd7740bb5aace5ebd7d4c08d13bb575 \ + --hash=sha256:d2f9fc07a8042a8f95925b35c4f04f469707c981fc33245b6ca187cf5d2dd290 \ + --hash=sha256:d625a186a65201c23a9e3b8ed9c47e90a026e03256608cc91851c6709096844f \ + --hash=sha256:d925f3d9afd05a8c0fb3a1031463a8d59ebe5e2afad297e29c78be19e13b4e62 \ + --hash=sha256:e64e88d5585bea9ce95861079de72006c7fa6d3df4e3a3b65ba31eb979c15c9f \ + --hash=sha256:e652ab17569c94bff5475520f907b7148b8c24036a8ebbe5cf7cf7493d28579a \ + --hash=sha256:e7b891faeedeafba41b2983e5001a81b6a915b69544c7e7570d1989ce1c36ac7 \ + --hash=sha256:e80675d75ae2cd14372cb65cad5400d9347a3d3f6c13000183f22dfd027283ed \ + --hash=sha256:e9c134bb666dd54b778b9fc0d2b50cbb7f979b9e3716f26a88c9ab3b6fc1dd0f \ + --hash=sha256:eb7d8d0e5886a89a55d2eef490e272fa965a9d57c6b29a5b5088a7997ec2cad1 \ + --hash=sha256:ecb42011e12ee19cafbc312887cbf3546959fe02fbad44f272d4be5baa997615 \ + --hash=sha256:ef3fbbf161dc9351a2fe0422e51b129f9e97e42385bd0320b309c15f7d287dd8 \ + --hash=sha256:efd62a42486f1bda5d24cb4f63d15a3c7768375fe83d36f9417b4ad7a2fb20b3 \ + --hash=sha256:f077d0b97ab11fa7dcc633fca53515f290bca8a8a633e966d5b6d1879d9ed01a \ + --hash=sha256:f332f0e72a5a0400141f830744e141bf9f97917878dbe968669e8a7fefea78ff \ + --hash=sha256:f7b0ec93a2893de856652154d73b7ba622f26fa97726487dcac373de5f4c6084 \ + --hash=sha256:fa10ef4112775900e7a0661068635eb67b2ab824fbde764de6e0e21982a93db0 \ + --hash=sha256:fc5d783bd4a2387e97b8a2d5ec781cfb92b3d893bf82370548e99db5915935d3 \ + --hash=sha256:fc8515076c11f3cfdf4fb142dcca0fe384b1230a3b5415458ac84f3e0903ec13 \ + --hash=sha256:ff218293c9c806138dca139765e3b067621be52bcd93cdc14c7711be7ddc90a9 # via # -c requirements-ci.txt # pydantic -pygments==2.20.0 \ - --hash=sha256:6757cd03768053ff99f3039c1a36d6c0aa0b263438fcab17520b30a303a82b5f \ - --hash=sha256:81a9e26dd42fd28a23a2d169d86d7ac03b46e2f8b59ed4698fb4785f946d0176 +pygments==2.21.0 \ + --hash=sha256:2363c69b61c4a97c838da3b130dcd6468f4848992b21a82f2a63ec34377137d9 \ + --hash=sha256:610ca751c9bc2492b38eb9a38a7fbc93edbbb2d7182edaf34e66ae493dee5c8c # via # -c requirements-ci.txt - # ipython - # ipython-pygments-lexers # rich -pynndescent==0.6.0 \ - --hash=sha256:7ffde0fb5b400741e055a9f7d377e3702e02250616834231f6c209e39aac24f5 \ - --hash=sha256:dc8c74844e4c7f5cbd1e0cd6909da86fdc789e6ff4997336e344779c3d5538ef - # via - # -c requirements-ci.txt - # umap-learn pyparsing==3.3.2 \ --hash=sha256:850ba148bd908d7e2411587e247a1e4f0327839c40e2e5e6d05a007ecc69911d \ --hash=sha256:c777f4d763f140633dcb6d8a3eda953bf7a214dc4eff598413c070bcdc117cbc # via # -c requirements-ci.txt - # matplotlib # rdflib python-dateutil==2.9.0.post0 \ --hash=sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3 \ --hash=sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427 # via # -c requirements-ci.txt - # matplotlib # pandas -python-docx==1.2.0 \ - --hash=sha256:3fd478f3250fbbbfd3b94fe1e985955737c145627498896a8a6bf81f4baf66c7 \ - --hash=sha256:7bc9d7b7d8a69c9c02ca09216118c86552704edc23bac179283f2e38f86220ce - # via - # -c requirements-ci.txt - # semantica (pyproject.toml) -python-dotenv==1.2.2 \ - --hash=sha256:1d8214789a24de455a8b8bd8ae6fe3c6b69a5e3d64aa8a8e5d68e694bbcb285a \ - --hash=sha256:2c371a91fbd7ba082c2c1dc1f8bf89ca22564a087c2c287cd9b662adde799cf3 +python-dotenv==1.2.3 \ + --hash=sha256:904552145e8bfed22162c09dab1c2b9b54fefa7b23ba780f4f26ca0316b0f0d9 \ + --hash=sha256:a20a594dabeaa385725aa239d5244871c143ecb356add8a20fcf23773a6c3a35 # via # -c requirements-ci.txt # semantica (pyproject.toml) @@ -2675,169 +883,24 @@ pyyaml==6.0.3 \ # via # -c requirements-ci.txt # semantica (pyproject.toml) - # huggingface-hub - # transformers rdflib==7.6.0 \ --hash=sha256:30c0a3ebf4c0e09215f066be7246794b6492e054e782d7ac2a34c9f70a15e0dd \ --hash=sha256:6c831288d5e4a5a7ece85d0ccde9877d512a3d0f02d7c06455d00d6d0ea379df # via # -c requirements-ci.txt # semantica (pyproject.toml) -regex==2026.7.19 \ - --hash=sha256:062f8cb7a9739c4835d22bd96f370c59aba89f257adcfa53be3cc209e08d3ae0 \ - --hash=sha256:064f1760a5a4ade65c5419be23e782f29147528e8a66e0c42dd4cedb8d4e9fc6 \ - --hash=sha256:09523a592938aa9f587fb74467c63ff0cf88fc3df14c82ab0f0517dcf76aaa62 \ - --hash=sha256:09d3007fc76249a83cdd33de160d50e6cb77f54e09d8fa9e7148e10607ce24af \ - --hash=sha256:09f3e5287f94f17b709dc9a9e70865855feee835c861613be144218ce4ca82cc \ - --hash=sha256:0c41c63992bf1874cebb6e7f56fd7d3c007924659a604ae3d90e427d40d4fd13 \ - --hash=sha256:0e9554c8785eac5cffe6300f69a91f58ba72bc88a5f8d661235ad7c6aa5b8ccd \ - --hash=sha256:1123ef4211d763ee771d47916a1596e2f4915794f7aabdc1adcb20e4249a6951 \ - --hash=sha256:15b364b9b98d6d2fe1a85034c23a3180ff913f46caddc3895f6fd65186255ccc \ - --hash=sha256:1649eb39fcc9ea80c4d2f110fde2b8ab2aef3877b98f02ab9b14e961f418c511 \ - --hash=sha256:17ed5692f6acc4183e98331101a5f9e4f64d72fe58b753da4d444a2c77d05b12 \ - --hash=sha256:199535629f25caf89698039af3d1ad5fcae7f933e2112c73f1cdf49165c99518 \ - --hash=sha256:1c398716054621aa300b3d411f467dda903806c5da0df6945ab73982b8d115db \ - --hash=sha256:1d3372064506b94dd2c67c845f2db8062e9e9ba84d04e33cb96d7d33c11fe1ae \ - --hash=sha256:1d58561843f0ff7dc78b4c28b5e2dc388f3eff94ebc8a232a3adba961fc00009 \ - --hash=sha256:1d793a7988e04fcb1e2e135567443d82173225d657419ec09414a9b5a145b986 \ - --hash=sha256:1ebac3474b8589fce2f9b225b650afd61448f7c73a5d0255a10cc6366471aed1 \ - --hash=sha256:20568e182eb82d39a6bf7cff3fd58566f14c75c6f74b2c8c96537eecf9010e3a \ - --hash=sha256:22a992de9a0d91bda927bf02b94351d737a0302905432c88a53de7c4b9ce62e2 \ - --hash=sha256:2955907b7157a6660f27079edf7e0229e9c9c5325c77a2ef6a890cba91efa6f0 \ - --hash=sha256:2c4e61e2e1be56f63ec3cc618aa9e0de81ef6f43d177205451840022e24f5b78 \ - --hash=sha256:2cc3460cedf7579948486eab03bc9ad7089df4d7281c0f47f4afe03e8d13f02d \ - --hash=sha256:2ce9e679f776649746729b6c86382da519ef649c8e34cc41df0d2e5e0f6c36d4 \ - --hash=sha256:2ef7eeb108c47ce7bcc9513e51bcb1bf57e8f483d52fce68a8642e3527141ae0 \ - --hash=sha256:3080a7fd38ef049bd489e01c970c97dd84ff446a885b0f1f6b26d9b1ad13ce11 \ - --hash=sha256:343a4504e3fb688c47cad451221ca5d4814f42b1e16c0065bde9cbf7f473bd52 \ - --hash=sha256:36aacfb15faaff3ced55afbf35ec72f50d4aee22082c4f7fe0573a33e2fca92e \ - --hash=sha256:3d3143f159261b1ce5b24c261c590e5913370c3200c5e9ebbb92b5aa5e111902 \ - --hash=sha256:40b34dd88658e4fedd2fddbf0275ac970d00614b731357f425722a3ed1983d11 \ - --hash=sha256:4458124d71339f505bf1fb94f69fd1bb8fa9d2481eebfef27c10ef4f2b9e12f6 \ - --hash=sha256:4896db1f4ce0576765b8272aa922df324e0f5b9bb2c3d03044ff32a7234a9aba \ - --hash=sha256:4a0530bb1b8c1c985e7e2122e2b4d3aedd8a3c21c6bfddae6767c4405668b56e \ - --hash=sha256:4aa5435cdb3eb6f55fe98a171b05e3fbcd95fadaa4aa32acf62afd9b0cfdbcac \ - --hash=sha256:4c3501bfa814ab07b5580741f9bf78dfdfe146a04057f82df9e2402d2a975939 \ - --hash=sha256:4e5413bd5f13d3a4e3539ca98f70f75e7fca92518dd7f117f030ebedd10b60cb \ - --hash=sha256:4e6883a021db30511d9fb8cfb0f222ce1f2c369f7d4d8b0448f449a93ba0bdfc \ - --hash=sha256:52579c60a6078be70a0e49c81d6e56d677f34cd439af281a0083b8c7bc75c095 \ - --hash=sha256:555497390743af1a65045fa4527782d10ff5b88970359412baa4a1e628fe393b \ - --hash=sha256:56ad4d9f77df871a99e25c37091052a02528ec0eb059de928ee33956b854b45b \ - --hash=sha256:571fde9741eb0ccde23dd4e0c1d50fbae910e901fa7e629faf39b2dda740d220 \ - --hash=sha256:572fc57b0009c735ee56c175ea021b637a15551a312f56734277f923d6fd0f6c \ - --hash=sha256:59787bd5f8c70aa339084e961d2996b53fbdeab4d5393bba5c1fe1fc32e02bae \ - --hash=sha256:5a2721c8720e2cb3c209925dfb9200199b4b07361c9e01d321719404b21458b3 \ - --hash=sha256:5cc26a66e212fa5d6c6170c3a40d99d888db3020c6fdab1523250d4341382e44 \ - --hash=sha256:5ebee1ee89c39c953baac6924fcde08c5bb427c4057510862f9d7c7bdb3d8665 \ - --hash=sha256:60be8693a1dadc210bbcbc0db3e26da5f7d01d1d5a3da594e99b4fa42df404f5 \ - --hash=sha256:618a0aed532be87294c4477b0481f3aa0f1520f4014a4374dd4cf789b4cd2c97 \ - --hash=sha256:61bb1bd45520aacd56dd80943bd34991fb5350afdd1f36f2282230fd5154a218 \ - --hash=sha256:6383cd2ed53a646c659ba1fe65727db76437fdaa069e697a0b44a51d5843d864 \ - --hash=sha256:64729333167c2dcaaa56a331d40ee097bd9c5617ffd51dabb09eaddafb1b532e \ - --hash=sha256:64b6ca7391a1395c2638dd5c7456d67bea44fc6c5e8e92c5dc8aa6a8f23292b4 \ - --hash=sha256:65dcd28d3eba2ab7c2fd906485cc301392b47cc2234790d27d4e4814e02cdfda \ - --hash=sha256:65fa6cb38ed5e9c3637e68e544f598b39c3b86b808ed0627a67b68320384b459 \ - --hash=sha256:66bd62c59a5427746e8c44becae1d9b99d22fb13f30f492083dfb9ad7c45cc18 \ - --hash=sha256:6e44c0e7c5664be20aee92085153150c0a7967310a73a43c0f832b7cd35d0dd3 \ - --hash=sha256:6f8c6e7a1cfa3dc9d0ee2de0e65e834537fa29992cc3976ffec914afc35c5dd5 \ - --hash=sha256:7322ec6cc9fba9d49ab888bb82d67ac5625627aa168f0165139b17018df3fb8a \ - --hash=sha256:73b133a9e6fb512858e7f065e96f1180aa46646bc74a83aea62f1d314f3dd035 \ - --hash=sha256:73f272fba87b8ccfe70a137d02a54af386f6d27aa509fbffdd978f5947aae1aa \ - --hash=sha256:7e77b324909c1617cbb4c668677e2c6ae13f44d7c1de0d4f15f2e3c10f3315b5 \ - --hash=sha256:80115dd39481fd3a4b4080220799dbcacb921a844de4b827264ececacbe17c78 \ - --hash=sha256:87ccab0db8d5f4fbb0272642113c1adb2ffc698c16d3a0944580222331fa7a20 \ - --hash=sha256:89dfee3319f5ae3f75ebd5c2445a809bb320252ba5529ffdafea4ef25d79cf1a \ - --hash=sha256:8ac59a0900474a52b7c04af8196affc22bd9842acb0950df12f7b813e983609a \ - --hash=sha256:8cae6fd77a5b72dae505084b1a2ee0360139faf72fedbab667cd7cc65aae7a6a \ - --hash=sha256:8d3469c91dd92ee41b7c95280edbd975ef1ba9195086686623a1c6e8935ce965 \ - --hash=sha256:90c633e7e8d6bf4e992b8b36ce69e018f834b641dd6de8cea6d78c06ffa119c5 \ - --hash=sha256:93db40c8de0815baab96a06e08a984bac71f989d13bab789e382158c5d426797 \ - --hash=sha256:9724e6cb5e478cd7d8cabf027826178739cb18cf0e117d0e32814d479fa02276 \ - --hash=sha256:98c6ac18480fcdb33f35439183f1d2e79760ab41930309c6d951cb1f8e46694c \ - --hash=sha256:9a15e785f244f3e07847b984ce8773fc3da10a9f3c131cc49a4c5b4d672b4547 \ - --hash=sha256:9b60d7814174f059e5de4ab98271cc5ba9259cfea55273a81544dceea32dc8d9 \ - --hash=sha256:9be2a6647740dd3cca6acb24e87f03d7632cd280dbce9bbe40c26353a215a45d \ - --hash=sha256:9c7472192ebfad53a6be7c4a8bfb2d64b81c0e93a1fc8c57e1dd0b638297b5d1 \ - --hash=sha256:9dce8ec9695f531a1b8a6f314fd4b393adcccf2ea861db480cdf97a301d01a68 \ - --hash=sha256:9e50d748a32da622f256e8d505867f5d3c43a837c6a9f0efb149655fadd1042a \ - --hash=sha256:a81758ed242b861b72e778ba34d41366441a2e10b16b472784c88da2dea7e2dd \ - --hash=sha256:ac777001cdfc28b72477d93c8564bb7583081ea8fb45cdca3d568e0a4f87183c \ - --hash=sha256:b2b506b1788df5fecd270a10d5e70a95fe77b87ea2b370a318043f6f5f817ee6 \ - --hash=sha256:b2ea4a3e8357be8849e833beeae757ac3c7a6b3fc055c03c808a53c91ad30d82 \ - --hash=sha256:bf1516fe58fc104f39b2d1dbe2d5e27d0cd45c4be2e42ba6ee0cc763701ec3c7 \ - --hash=sha256:c0d702548d89d572b2929879bc883bb7a4c4709efafe4512cadee56c55c9bd15 \ - --hash=sha256:c10b82c2634df08dfb13b1f04e38fe310d086ee092f4f69c0c8da234251e556e \ - --hash=sha256:c42572142ed0b9d5d261ba727157c426510da78e20828b66bbb855098b8a4e38 \ - --hash=sha256:c4585c3e64b4f9e583b4d2683f18f5d5d872b3d71dcf24594b74ecc23602fa96 \ - --hash=sha256:c639ea314df70a7b2811e8020448c75af8c9445f5a60f8a4ced81c306a9380c2 \ - --hash=sha256:c670fe7be5b6020b76bc6e8d2196074657e1327595bca93a389e1a76ab130ad8 \ - --hash=sha256:cc1b2440423a851fad781309dd87843868f4f66a6bcd1ddb9225cf4ec2c84732 \ - --hash=sha256:cd3584591ea4429026cdb931b054342c2bcf189b44ff367f8d5c15bc092a2966 \ - --hash=sha256:d15df07081d91b76ff20d43f94592ee110330152d617b730fdbe5ef9fb680053 \ - --hash=sha256:d19662dbedbe783d323196312d38f5ba53cf56296378252171985da6899887d3 \ - --hash=sha256:d24ecb4f5e009ea0bd275ee37ad9953b32005e2e5e60f8bbae16da0dbbf0d3a0 \ - --hash=sha256:d446c6ac40bb6e05025ccee55b84d80fe9bf8e93010ffc4bb9484f13d498835f \ - --hash=sha256:d51ffd3427640fa2da6ade574ceba932f210ad095f65fcc450a2b0a0d454868e \ - --hash=sha256:d6ce43a0269d68cee79a7d1ade7def53c20f8f2a047b92d7b5d5bcc73ae88327 \ - --hash=sha256:d721e53758b2cca74990185eb0671dd466d7a388a1a45d0c6f4c13cef41a68ac \ - --hash=sha256:d7da47a0f248977f08e2cb659ff3c17ddc13a4d39b3a7baa0a81bf5b415430f6 \ - --hash=sha256:db47b561c9afd884baa1f96f797c9ca369872c4b65912bc691cfa99e68340af2 \ - --hash=sha256:dbe6493fbd27321b1d1f2dd4f5c7e5bd4d8b1d7cab7f32fd67db3d0b2ed8248a \ - --hash=sha256:dbece16025afda5e3031af0c4059207e61dcf73ef13af844964f57f387d1c435 \ - --hash=sha256:ddd67571c10869f65a5d7dde536d1e066e306cc90de57d7de4d5f34802428bb5 \ - --hash=sha256:de9208bb427130c82a5dbfd104f92c8876fc9559278c880b3002755bbbe9c83d \ - --hash=sha256:e30d40268a28d54ce0437031750497004c22602b8e3ab891f759b795a003b312 \ - --hash=sha256:e8b0abe7d870f53ca5143895fef7d1041a0c831a140d3dc2c760dd7ba25d4a8b \ - --hash=sha256:f035d9dc1d25eff9d361456572231c7d27b5ccd473ca7dc0adfce732bd006d40 \ - --hash=sha256:f04b9f56b0e0614c0126be12c2c2d9f8850c1e57af302bd0a63bed379d4af974 \ - --hash=sha256:f0fa4fa9c3632d708742baf2282f2055c11d888a790362670a403cbf48a2c404 \ - --hash=sha256:f2e7f8e2ab6c2922be02c7ec45185aa5bd771e2e57b95455ee343a44d8130dff \ - --hash=sha256:f8f6fa298bb4f7f58a33334406218ba74716e68feddf5e4e54cd5d8082705abf \ - --hash=sha256:fbf300e2070bb35038660b3be1be4b91b0024edb41517e6996320b49b92b4175 \ - --hash=sha256:fce7760bf283405b2c7999cab3da4e72f7deca6396013115e3f7a955db9760da \ - --hash=sha256:fcee38cd8e5089d6d4f048ba1233b3ad76e5954f545382180889112ff5cb712d \ - --hash=sha256:fe31f28c94402043161876a258a9c6f757cb485905c7614ce8d6cd40e6b7bdc1 \ - --hash=sha256:ffd8893ccc1c2fce6e0d6ca402d716fe1b29db70c7132609a05955e31b2aa8f2 - # via - # -c requirements-ci.txt - # transformers requests==2.34.2 \ --hash=sha256:2a0d60c172f83ac6ab31e4554906c0f3b3588d37b5cb939b1c061f4907e278e0 \ --hash=sha256:f288924cae4e29463698d6d60bc6a4da69c89185ad1e0bcc4104f584e960b9ed # via # -c requirements-ci.txt # semantica (pyproject.toml) - # fastembed - # pooch - # spacy rich==14.3.4 \ --hash=sha256:07e7adb4690f68864777b1450859253bed81a99a31ac321ac1817b2313558952 \ --hash=sha256:817e02727f2b25b40ef56f5aa2217f400c8489f79ca8f46ea2b70dd5e14558a9 # via # -c requirements-ci.txt # semantica (pyproject.toml) - # typer -safetensors==0.8.0 \ - --hash=sha256:040070828e36dc8e122178bbbd5830ff9e97920affb84cbe0f46442497bed358 \ - --hash=sha256:096ec1a98435df7beb08853bb5aa9081a84f23d0adc67ed1a0a10550f608373f \ - --hash=sha256:2ddf52eac562eda224f99acfa7889d02968c1fd59a5b011ae7d8137c37e9c02d \ - --hash=sha256:3ae091f16662658bdc019a4ff6cb4c085bb7d725eb5978b183ffd265863b6d2d \ - --hash=sha256:4124502b78f03534117c848f87a39b8f31e577b15eff423bf8bfb95f2a8c30d0 \ - --hash=sha256:4a95ae2b05d7726d751da4ebf626a2ca782b706e101bd894c95bc2450b1cffcc \ - --hash=sha256:7a46e5ff292c356d6991e60942ba7f79817682d3a2cef0702136448cb9c4d235 \ - --hash=sha256:7bc0a787ba8a35be368ee3574edfa2b1ad389eebd0a72e482ae275490e3f6c98 \ - --hash=sha256:87eec7ffed2b809f05a398a8becb7d013f19f7837cd15d9748580d6cf30dbaf4 \ - --hash=sha256:8e080062fcde23be189565e1c3305d16751a218ecf9412c8601e64204eb6f846 \ - --hash=sha256:8e9f537aa183a38ace122d27303dcd986b26bd2a7591f9181d7f0c396f4677ca \ - --hash=sha256:c554f85858e05226d3c2828e32395e677434685d6d94594a41643361c5e837f0 \ - --hash=sha256:c80201d22cbf405b80647a60ada77bba06c8fba2da2743ba1e89cdcc39a81f25 \ - --hash=sha256:f7838e5135a406ad3e02efdcb8cf2e5397d368b0154537c4fec682dbc544d452 \ - --hash=sha256:fabaf3e0f18a6618d9b36560682562157f77c2b71fcffc7b432be2baed9d753d \ - --hash=sha256:fcdd41ec4628fee5799f807c73c353629130fbd942aa23d83c623dd6c9d52d78 \ - --hash=sha256:fd6f3f93c9a0a7cc2788ee63fb763353d4bd2e89b0751bc78fcf7dda00bea774 - # via - # -c requirements-ci.txt - # transformers scikit-learn==1.9.0 \ --hash=sha256:051075bda8b7aab87b1906ab3d4740a1e1224a19d7b3781a576736edc94e76aa \ --hash=sha256:056c92bb67ad4c28463c2f2653d9701449201e7e7a9e94e321be0f71c4fef2b8 \ @@ -2873,10 +936,6 @@ scikit-learn==1.9.0 \ # via # -c requirements-ci.txt # semantica (pyproject.toml) - # librosa - # pynndescent - # sentence-transformers - # umap-learn scipy==1.17.1 \ --hash=sha256:010f4333c96c9bb1a4516269e33cb5917b08ef2166d5556ca2fd9f082a9e6ea0 \ --hash=sha256:02ae3b274fde71c5e92ac4d54bc06c42d80e399fec704383dcd99b301df37458 \ @@ -2942,417 +1001,46 @@ scipy==1.17.1 \ # via # -c requirements-ci.txt # semantica (pyproject.toml) - # gensim - # librosa - # pynndescent # scikit-learn - # sentence-transformers - # umap-learn -seaborn==0.13.2 \ - --hash=sha256:636f8336facf092165e27924f223d3c62ca560b1f2bb5dff7ab7fad265361987 \ - --hash=sha256:93e60a40988f4d65e9f4885df477e2fdaff6b73a9ded434c1ab356dd57eefff7 - # via - # -c requirements-ci.txt - # semantica (pyproject.toml) -sentence-transformers==5.7.0 \ - --hash=sha256:b78141da3d8137e70d965866e2ca43190b9266f3d4d8752e250ded75e7136730 \ - --hash=sha256:fd8c8fc35e6323631dff9f3760969ebf7980dc3cfda0ab1354bc6a774cc0e5d8 - # via - # -c requirements-ci.txt - # semantica (pyproject.toml) -setuptools==84.0.0 \ - --hash=sha256:51a52592b3b99e102b609654876bd65f19f999935166d1352678931132b0c670 \ - --hash=sha256:f4695c21257f0d9b537ec2692c941d02ee143b7cc1276941349a546573b2ef73 - # via - # -c requirements-ci.txt - # spacy - # thinc - # torch -shellingham==1.5.4 \ - --hash=sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686 \ - --hash=sha256:8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de - # via - # -c requirements-ci.txt - # typer six==1.17.0 \ --hash=sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274 \ --hash=sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81 # via # -c requirements-ci.txt # python-dateutil -smart-open==8.0.1 \ - --hash=sha256:18b1c4496003c6902be17c15f032b5c319f307c89c6ae9e6b028b508bed8b2cf \ - --hash=sha256:3e97f90e92a952cb57863dfe132082c400a52eeeb27c067692fb51dbcc5b0089 - # via - # -c requirements-ci.txt - # gensim - # weasel -smmap==5.0.3 \ - --hash=sha256:4d9debb8b99007ae47165abc08670bd74cb74b5227dda7f643eccc4e9eb5642c \ - --hash=sha256:c106e05d5a61449cf6ba9a1e650227ecfb141590d2a98412103ff35d89fc7b2f - # via - # -c requirements-ci.txt - # gitdb -soundfile==0.14.0 \ - --hash=sha256:0a6ae43c50c71b4e020cc55382925cb89451c1ed1a0c3d0f5d802da269226849 \ - --hash=sha256:19be05428da76ed61a4cad29b8e4bcf43a3e5c100089d2ec81dc961eed1b0dd4 \ - --hash=sha256:1e38bac1853412871318e82a1ba69a8be677619b56025bbfcccdb41b6cafe82d \ - --hash=sha256:299491d3499460fb1b74bb4bd78b57ffc2d243a5fafa7b6ec1b264875c78453e \ - --hash=sha256:8ba81ae3a89fd5ab3bef8a8eb481fbbe794e806309675a89b4df48b8d31908a8 \ - --hash=sha256:ba1c1a2d618bca5c406647c83b89f07cc8810fa506a50622a6993ba130c1de11 \ - --hash=sha256:d828d35a059626da52f1415b5faee610aeab393319cb3fc4a9aef47b619fc14c \ - --hash=sha256:e090704718e124e7c844695236f1fce8d18a5e761eaf7c82dfcd124620805f98 \ - --hash=sha256:e85724a90bc99a6e8062c0b4ddf725f53b2a3b70afd4da875e9d2cfc4e92f377 - # via - # -c requirements-ci.txt - # librosa -soupsieve==2.9.2 \ - --hash=sha256:4a55d8cf158a9c2e587fa4922f1bbb91d68ac829e2d6f25403a85747c71daf74 \ - --hash=sha256:8089a26fd974ca7a1f30276d3d8492ab266ab15af581642dfe8aa162e0c1c823 - # via - # -c requirements-ci.txt - # beautifulsoup4 -soxr==1.1.0 \ - --hash=sha256:1577865e993f98ffb261257c3060fa76ec3db44ed3f181b16464268000424464 \ - --hash=sha256:26925618945f1a44dfbd783cc572874f0685e9ecdf46b96f4000f6b8c9c8b825 \ - --hash=sha256:318925f7281df61dfa7f17fe343952eb10cefd3954f2423a733fabe3a517bab2 \ - --hash=sha256:33525740fb7dbed8b09970bf0cd4219b365538845053987b11cc235b20562e09 \ - --hash=sha256:34cc92208c3c412c046813e69da639c04a792c6a41fbfd7d909d359cd3e97a2d \ - --hash=sha256:3b033078e86f3c4a658e5697fac8995764fad9e799563616b630136b613167f1 \ - --hash=sha256:3da87e3ffa3e41823d873b051c7ecb2acebd8d1b6b46b752f5facf10a0d84ab9 \ - --hash=sha256:474aabb9283f177e899747510d60661730538052fca0ed93a943d4686d6655b1 \ - --hash=sha256:52c9ca84e3dc656d83acc424574770e20ea8e0704dc3842d4e27b0fe9d3ba449 \ - --hash=sha256:588c7de1abafe59e66face9a074514658ac0398c85a774cdbb8efac131192692 \ - --hash=sha256:6ae2a174bffea94e8ead857dad85999d3f49f091774dbad5b046c0417d7092f4 \ - --hash=sha256:868a24d864c25024f60ca964f851a759f2ada5352608fc194d927b7facc2e28b \ - --hash=sha256:8e11e26f1718b5c2e5b96f2f71b9f00e31d247b065289661e3a6996c758669d9 \ - --hash=sha256:9443e5eb82152d8952422b7285692192cc7dcffa5218bb511b096203018bc273 \ - --hash=sha256:9564d82f7fa6bf548e5f18bb86235dff20eea8bd30727b64d49783c95c34fb8d \ - --hash=sha256:9f228ae21c78fa9359ca98d8a5e8e91f30639e438e574133dace62c5b5309e44 \ - --hash=sha256:a941f5aaa0b8abced24318105c1ea22576afcc1138c19f625716ce4e2f76ad64 \ - --hash=sha256:ae30c48ac795378cf23ba3c7c640b8ff794af714ac388b9fd6b31a40b39e6e86 \ - --hash=sha256:b2e94c713b7d96fb92841947b785bcee6606124bc852273fab70454b51bfe270 \ - --hash=sha256:bd30f7201eac896ebf5db7b09156e6f1a1b82601900d29d9c8449bdad8365b11 \ - --hash=sha256:bf98c0d7b7d5ef5bf072fee8d3020e8b664f2d195933ea7bc5089267c2e22a06 \ - --hash=sha256:d6a7ad82b8d5f3fcc04b1d2ca055562b96af571e1d4fa7c6c61d0fb509ac43b4 \ - --hash=sha256:e0e09fa633ce2e67df08b298afced4d184f6e753fc330f241022250f1d0d61da \ - --hash=sha256:e17d4ef9b0185214b2c0935605ae63f827ea423bc74964be44763d68d2b6c21e \ - --hash=sha256:f4977323ef9c3aa3c2a26ff5fe0191c84b8fd759daf7afb1f25a91a55ad8b730 \ - --hash=sha256:feebcba99ac99adb8009d46c8f4c1956b8c167576b0ae8a6fb47502e9a6f78e7 - # via - # -c requirements-ci.txt - # librosa -spacy==3.8.15 \ - --hash=sha256:0262f86956e751ace6e47e530cf9841d66f2354d8cd91cfeeb39eee4c5f2962f \ - --hash=sha256:1c8a27500b409b472a743c2b0b2af2dff42f4287ace36f2b776e4592d65ab493 \ - --hash=sha256:2cbd33b0801ed0fed71454cdfaefbabb18b1b854471f7683c5df2f78be00e8cc \ - --hash=sha256:35060be85c952df84e9095713ba05f8515473e127ad0c6b43cd22a1b42d4cdbc \ - --hash=sha256:37f370f579c1bb56aa767e6d585672133f37e89c1181ebbd251fd946777f0ef5 \ - --hash=sha256:39ac175bbf8a8381c41b8e0abbdede3ff29d1f29f3cac42644f5719671e20884 \ - --hash=sha256:4031de613e8ba666392fef107a06b5144270f0f64b6a61df37faf6a329d61b5a \ - --hash=sha256:59c1ad50c8d0afe8397a06e28f39f3cebced0cdf53b14607dfca44c9822d7650 \ - --hash=sha256:6b27d0abf1138644837536705578dc1ea48a693796b283a49202e1dbde0a3b02 \ - --hash=sha256:7863c35506ec6f7e3fc13836330a4badd723514b9dc067ed79a8b0c593b824b4 \ - --hash=sha256:81ca434f0a08062fe5d5fd05858196b3c007c755d8b54e2019c071949a93eefe \ - --hash=sha256:8397a6e76b85d7a1d42b2654ed0bbad053e9100b80f41efcf608a8cf02df76f6 \ - --hash=sha256:9ad71e9ce6c4e1b984a91bc82b2e4e08df23581f5cc670bbacf29a07a9822d5a \ - --hash=sha256:9b22d269dfa6aa3c6a000e576b261bee46c277afaf915a3fe1e0a81ad227ee7e \ - --hash=sha256:aaa70356876c152f0235ff5bc4869f7a45133392ff73aa881113376f7eec0caa \ - --hash=sha256:b4527b7824e8228f2abed18774b224de7aad9b900d47ff66483abdf16d0c8a5e \ - --hash=sha256:c8b187654941e417c4cc0378ed7860bf6aad7bbbc370b925994a9cebeb8ca615 \ - --hash=sha256:c9279132fee6e131b295f5336b8f9e46c16e5ec430e6c58a56fc9ef134cc1f5a \ - --hash=sha256:c9683078efb96dee8b1a751bc0bfa9271a6604b7257547849b4254f285ce77d9 \ - --hash=sha256:cb0782680cf930e9ab984a73b2078c981343f77c5c407773c704cbf8c7df13c0 \ - --hash=sha256:ce66d75279ee84b749eea058ff3ea79a31adf0ff53f887943dced258ceb6ce2a \ - --hash=sha256:d41166f5f763ff3a3e085d4314b6cf34cf1cd2bf0845aaafa1acc266e9a46ef7 \ - --hash=sha256:d5806db3034618ef426e360dd8519283dc08f5be1690ce5bc3bb2c628f86215f \ - --hash=sha256:e1aaf79b42c0e8c5dd4801b474c22a61fc68edb347fd3a6e09d5cba7e1aed5db \ - --hash=sha256:e7ca79280762f1de0a7a5c1ce8ccfe1f54b772e8761ea7d9408e535427592749 \ - --hash=sha256:f04bc083600ff688fe500a736dd4d8ac3d06527f7808c2d7932d4174d8f3b751 \ - --hash=sha256:f1c0f054365fdfd95cfe96acbb4c5c1dbefb787905e4e63013eda54d3c815050 \ - --hash=sha256:f5714a76826756cea2257d35524233ebe49c6f70b6510b224e46036a4a341a79 \ - --hash=sha256:fa9df68fc8887c0a6440b84d1d307980e594d99b45f19a37d733e58caa9a6682 \ - --hash=sha256:ff1a616862d6c07a9e7ae13b911005f89c064ce884ec31784f8032adb3f86829 - # via - # -c requirements-ci.txt - # semantica (pyproject.toml) -spacy-legacy==3.0.12 \ - --hash=sha256:476e3bd0d05f8c339ed60f40986c07387c0a71479245d6d0f4298dbd52cda55f \ - --hash=sha256:b37d6e0c9b6e1d7ca1cf5bc7152ab64a4c4671f59c85adaf7a3fcb870357a774 - # via - # -c requirements-ci.txt - # spacy -spacy-loggers==1.0.5 \ - --hash=sha256:196284c9c446cc0cdb944005384270d775fdeaf4f494d8e269466cfa497ef645 \ - --hash=sha256:d60b0bdbf915a60e516cc2e653baeff946f0cfc461b452d11a4d5458c6fe5f24 - # via - # -c requirements-ci.txt - # spacy -srsly==2.5.3 \ - --hash=sha256:0017c7d2a0cd9a4f1bdc00d946b45edcf90bb0e271e8f084c1ce542bf6708c32 \ - --hash=sha256:06a43d63bde2e8cccadb953d7fff70b18196ca286b65dd2ad16006d65f3f8166 \ - --hash=sha256:07d682679e639eb46ff7e6da4a92714f4d5ffe351d088ee66f221e9b1f8865bb \ - --hash=sha256:08f98dbecbff3a31466c4ae7c833131f59d3655a0ad8ac749e6e2c149e2b0680 \ - --hash=sha256:0f106b0a700ab56e4a7c431b0f1444009ab6cb332edc7bbf6811c2a43f4722cb \ - --hash=sha256:111805927f05f5db440aeeacb85ce43da0b19ce7b2a09567a9ef8d30f3cc4d83 \ - --hash=sha256:14c930767cc169611a2dc14e23bc7638cfb616d6f79029700ade033607343540 \ - --hash=sha256:1a3d6e03c65e3af15bfb1ad18f1888ba0a8482903218c1a5b5ed6fd66f5b0fb1 \ - --hash=sha256:1c9129c4abe31903ff7996904a51afdd5428060de6c3d12af49a4da5e8df2821 \ - --hash=sha256:1d93c22f42dfc4383a89ff3fcbe89ed9b286cf1d7e762cba533f2fac5ed36b28 \ - --hash=sha256:1fd6c35c65c4d2435ae5bfb57b59682cf9b61606318a2a761856be9d7cc2d9e3 \ - --hash=sha256:21cf09e417d3e4f3fbf7dd337fd6d948c97abd01896b9b4cb80e81cd9778a73a \ - --hash=sha256:29d5d01ba4c2e9c01f936e5e6d5babc4a47b38c9cbd6e1ec23f6d5a49df32605 \ - --hash=sha256:2f2d464f0d0237e32fb53f0ec6f05418652c550e772b50e9918e83a1577cba4d \ - --hash=sha256:2f73c0db911552e94fe2016e1759d261d2f47926f68826664cada3723c87006a \ - --hash=sha256:2f76a2507cc2debf0aeb31120c8d04d752eb0ca8bd84599a62461796a3c0f71f \ - --hash=sha256:348c231b4477d8fe86603131d0f166d2feac9c372704dfc4398be71cc5b6fb07 \ - --hash=sha256:3576c125c486ce2958c2047e8858fe3cfc9ea877adfa05203b0986f9badee355 \ - --hash=sha256:39c13d552a9f9674a12cdcdc66b0c2f02f3430d0cd04c5f9cf598824c2bd3d65 \ - --hash=sha256:4b1b721cd3ad1a9b2343519aadc786a4d09d5c0666962d49852eb12d6ec3fe26 \ - --hash=sha256:4ca4a068f6e14d84113a02fcb875c6b50a6285a12938c0e7a157eb3a63c50a86 \ - --hash=sha256:4d6ebaeac9baa5c85b6b56c180458f1b4fef9213bc36b62fcbecf5b3d8a3001c \ - --hash=sha256:565f69083d33cb329cfc74317da937fb3270c0f40fabc1b4488702d8074b4a3e \ - --hash=sha256:598f1e494c18cacb978299d77125415a586417081959f8ec3f068b32d97f8933 \ - --hash=sha256:5c1ac27ae5f4bb9163c7d2c45fc8ec173aac3d92e32086d9472b326c5c6e570e \ - --hash=sha256:5c8df4039426d99f0148b5743542842ab96b82daded0b342555e15a639927757 \ - --hash=sha256:5f6a837954429ecbe6dcdd27390d2fb4c7d01a3f99c9ffcf9ce66b2a6dd1b738 \ - --hash=sha256:5fb59c42922e095d1ea36085c55bc16e2adb06a7bfe57b24d381e0194ae699f2 \ - --hash=sha256:63c0f4c088ddf0c736a24f7d7be1f6e2896a71822630c2805569b14de93eb393 \ - --hash=sha256:66ebae2c70305987341519ec1a720072a3cb3e4b1d52ac0e9e841f4d02658d3d \ - --hash=sha256:6a02d7dcc16126c8fae1c1c09b2072798a1dc482ab5f9c52b12c7114dac47325 \ - --hash=sha256:71d4cbe2b2a1335c76ed0acae2dc862163787d8b01a705e1949796907ed94ccd \ - --hash=sha256:71e51c046ccbeefb86524c6b1e17574f579c6ac4dc8ea4a09437d3e8f88342d3 \ - --hash=sha256:7326bc048073b04e4e7d59dd4a2d737c8e7cc270ef74ea1acb764382e995590c \ - --hash=sha256:785a09216ac31570fb301ddb9f61ee73d1f18f8b9561f712dce0b8ac8628bc88 \ - --hash=sha256:7ea5412ea229e571ac9738cbe14f845cc06c8e4e956afb5f42061ccd087ef31f \ - --hash=sha256:808cfafc047f0dec507a34c8fa8e4cda5722737fd33577df73452f52f7aca644 \ - --hash=sha256:8ac016ffaeac35bc010992b71bf8afdd39d458f201c8138d84cf78778a936e6c \ - --hash=sha256:8d3988970b4cf7d03bdd5b5169302ff84562dd2e1e0f84aeb34df3e5b5dc19bf \ - --hash=sha256:8e0542d85d6b55cf2934050d6ffcb1cd76c768dcf9572e7467002cf087bb366d \ - --hash=sha256:91688edb1f49110870d2c215db2cf445f1763c14173698ead0818908c51fb2a1 \ - --hash=sha256:916edb6dc1051732610e37863232e5a1d64bed7b130fed067f7dbc80d12d0065 \ - --hash=sha256:953d77ba0d8c96b29657622492c2c0bc7c161a304c069043a14c368aec20aeef \ - --hash=sha256:99026bcd9cbd3211cc36517400b04ca0fc5d3e412b14daf84ee6e65f67d9a2d8 \ - --hash=sha256:9ffc97e22730ea97b00f7c303ccc60b1305e786afadb2a4a46578dafa4d29da0 \ - --hash=sha256:a595958d0b1ff6d59c2570a3f0d1c8e36ab9f89d6e1b9c96fa7eb5e1a8698510 \ - --hash=sha256:b0938c2978c91ae1ef9c1f2ba35abb86330e198fb23469e356eba311e02233ee \ - --hash=sha256:b9df76d5a6bbf50967589bd42df3c522dd88babea2be745a507f56b41ab40626 \ - --hash=sha256:bc0ad5be2aeb9ff29c8512848d39d7c63fdd4bfbb5516bc523f5de5a77e55e6d \ - --hash=sha256:c378afcb7dd7c42f426a66112496c949fc39e5883de6817d86e60afa51720ccc \ - --hash=sha256:c812302a9acfe171e82f680b7ad642014cd017380b2c678441b3da4fb513c498 \ - --hash=sha256:d18933248a5bb0ad56a1bae6003a9a7f37daac2ecb0c5bcbfaaf081b317e1c84 \ - --hash=sha256:d2b8cfd8aee4d06ab335d359e4095d206102300a5e105a4b4bc69acca42427a6 \ - --hash=sha256:d822083fe26ec6728bd8c273ac121fc4ab3864a0fdf0cf0ff3efb188fcd209ed \ - --hash=sha256:e283fa2a8f7350fb9fb70ecdee28d59d39c92f4c7f1cc90a44d6b86db3b3a8b3 \ - --hash=sha256:e67b6bbacbfadea5e100266d2797f2d4cec9883ea4dc84a5537673850036a8d8 \ - --hash=sha256:f09b551f6c3e334652831ac68c770ee4284741ce0a3895bf1ccf2a1178d66cdd - # via - # -c requirements-ci.txt - # spacy - # thinc - # weasel -stack-data==0.6.3 \ - --hash=sha256:836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9 \ - --hash=sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695 - # via - # -c requirements-ci.txt - # ipython structlog==26.1.0 \ --hash=sha256:e081a26d6c373e6d201eca24eede26d8ffab07f88f477822e679183428d3d91e \ --hash=sha256:f63a716cbd1b1291cf7661de7794b455acfa4c43c5bcf1630e6ad5ddc1adb3b7 # via # -c requirements-ci.txt # semantica (pyproject.toml) -sympy==1.14.0 \ - --hash=sha256:d3d3fe8df1e5a0b42f0e7bdf50541697dbe7d23746e894990c030e2b05e72517 \ - --hash=sha256:e091cc3e99d2141a0ba2847328f5479b05d94a6635cb96148ccb3f34671bd8f5 - # via - # -c requirements-ci.txt - # torch -thinc==8.3.13 \ - --hash=sha256:0355c37e40d1a9fc2a1b8e9c2e294d8586f6baa97bcac6b9002f2dddb4b82ae9 \ - --hash=sha256:0a0fa13dcfe4b319c3a396432c1dbff30d3de37dbbdee559e76600ee2b9486df \ - --hash=sha256:11754fada9ad5ba2e02d5f3f234f940e24015b82333db58372f4a6aedad9b43f \ - --hash=sha256:303477eb51b9b39c94a7fc7967ee8a039eca1ca37d95dcce1234c83b95b4ee9f \ - --hash=sha256:3710d318b4e5460cf366a6f7b5ddbefb5d39dbd4cfa408222750fdc6c27c4411 \ - --hash=sha256:3dac18a0fb0a42f711c2ce9c02cbb090385aecae92089aa17b9dfd808a542013 \ - --hash=sha256:433e3826e018da489f1a8068e6de677f6eff3cc93991a599d90f12cd1bc26cdc \ - --hash=sha256:4565102638038a01a2193c7f5d41ccbd6233fbdcb1f1b184322a06add4f51f18 \ - --hash=sha256:4b5ec9ff313819e7d8667794a3559463fa89ff45aaa73e3fd8d6273b1e0d7a7f \ - --hash=sha256:5593e6300cb1ebe0c0e546e9c9fb49e7c2627a0aa688795cd4f995a8b820d2ec \ - --hash=sha256:565300b7e13de799e5abff00d445f537e9256cf7da4dcb0d0f005fc16748a29e \ - --hash=sha256:5a08c87143a6d20177652dca1ec0dc815d88216d8fc62594a57e8bc45bf5ed49 \ - --hash=sha256:5c9a48f2bc1e04f138240ed5f9b815a9141a5de26accd0f08fa0137fcefed258 \ - --hash=sha256:68e658549fc1eb3ff92aed5147fcbb9c15d6e9cc0e623b4d0998d16522ffb4f9 \ - --hash=sha256:723949cab11d1925c15447928513a718276316cec6e0de28337cca0a62be0521 \ - --hash=sha256:77a41f66285321d20aaedaea1e87d7cd48dca6d2427bed1867ec7cba7109fc8d \ - --hash=sha256:79a29a44d76bd02f5ac0624268c6e42b3576ae472c791a8ae9c2d813ae789b59 \ - --hash=sha256:7a99d0e242d1ccd23f9ae6bea7cd502f8626efa65c156b91d84581d0356696c3 \ - --hash=sha256:7badb0be4825535e6362c19e8a41872b65409e9da46d3453a391b843a0720865 \ - --hash=sha256:81337dfbee37f58f36c0c70f9a819dce1b32cdc13d959181e10de079621f6ac6 \ - --hash=sha256:84fb50fe572a1860165f2e7a640c7cb70d43d6962366e69f643fa9a27e4a2127 \ - --hash=sha256:859fbd9d9b16af5278da23589b4afbe2ab6b0dd615df4d3229b7c4e67cd3107e \ - --hash=sha256:8ad40307f20e83f77af28ff5c6be0b86af7a8b251d1231c545508d2763157d8f \ - --hash=sha256:a518d5c761a0f2341e530e867de133dc3ed814558365b2a68ec53b89c482a43f \ - --hash=sha256:a61a31fd0ce3c2771cf4901ba6df70e774ffe32febf1024c5b43d63575cd58fe \ - --hash=sha256:ba8119daf84a12259ae4d251d36426417bafa0b34108890b4b7e2b50966bd990 \ - --hash=sha256:c17cef1900a1aba7e1487493d16b8aa0a8633116f1b2a51c6649a4000697f17b \ - --hash=sha256:c2811dfd8d46d8b5d3b39051b23e64006b2994a5143b1978b436938018792af8 \ - --hash=sha256:c6a049703a6011c8fe26ee41af7e70272145594140d82f79bb23de619c6a6525 \ - --hash=sha256:cd8a2b714c061969eee65802965167a6ada1fe708d82fe176d98dcb95ebe182a \ - --hash=sha256:d7a9654f9ca362a4be7f5e590fdfee26e2e2084da9fd3306032ec037e99f2f8e \ - --hash=sha256:e08b1577a56e7315770af280aabd8fa5f2a1fb6afd1c50a4183c06e907faf558 \ - --hash=sha256:e1f8d13bf92ee10595c40692fd4cf8e7bbe73bd9f260107e975fd5dbee1af42b \ - --hash=sha256:e676edd21a747afbe3e6b9f3fca8b962e36d146ded03b070cb0c28e2dfbe9499 \ - --hash=sha256:e7f046d8914055cad51e83ff0da1a892acb73cd58556d7c1a5d4015a3766a899 \ - --hash=sha256:e9c7c5c104737b414c8c4ec578e67d78b6c859afe25cbc0684402e721415bd7f \ - --hash=sha256:ed1dc709ac4f2f03b710457889e4e02f05de51bc8456980c241d0b28798bc7cb \ - --hash=sha256:f4f26d1eec9b2a6a8f2e0298a5515d13eb06d70730d0d9e1040bb329e12bf3fb \ - --hash=sha256:f697174d3fb474966ce50b430bbafa101a6d2f7ffb559dac4b5c59389ef72d22 \ - --hash=sha256:fbc0ee16edd260c6a4a9e365ff36d0a682c9e7ca6d7b985682659ef2e3e73826 - # via - # -c requirements-ci.txt - # spacy threadpoolctl==3.6.0 \ --hash=sha256:43a0b8fd5a2928500110039e43a5eed8480b918967083ea48dc3ab9f13c4a7fb \ --hash=sha256:8ab8b4aa3491d812b623328249fab5302a68d2d71745c8a4c719a2fcaba9f44e # via # -c requirements-ci.txt # scikit-learn -tokenizers==0.22.2 \ - --hash=sha256:143b999bdc46d10febb15cbffb4207ddd1f410e2c755857b5a0797961bbdc113 \ - --hash=sha256:1a62ba2c5faa2dd175aaeed7b15abf18d20266189fb3406c5d0550dd34dd5f37 \ - --hash=sha256:1c774b1276f71e1ef716e5486f21e76333464f47bece56bbd554485982a9e03e \ - --hash=sha256:1e418a55456beedca4621dbab65a318981467a2b188e982a23e117f115ce5001 \ - --hash=sha256:1e50f8554d504f617d9e9d6e4c2c2884a12b388a97c5c77f0bc6cf4cd032feee \ - --hash=sha256:2249487018adec45d6e3554c71d46eb39fa8ea67156c640f7513eb26f318cec7 \ - --hash=sha256:25b85325d0815e86e0bac263506dd114578953b7b53d7de09a6485e4a160a7dd \ - --hash=sha256:29c30b83d8dcd061078b05ae0cb94d3c710555fbb44861139f9f83dcca3dc3e4 \ - --hash=sha256:319f659ee992222f04e58f84cbf407cfa66a65fe3a8de44e8ad2bc53e7d99012 \ - --hash=sha256:369cc9fc8cc10cb24143873a0d95438bb8ee257bb80c71989e3ee290e8d72c67 \ - --hash=sha256:37ae80a28c1d3265bb1f22464c856bd23c02a05bb211e56d0c5301a435be6c1a \ - --hash=sha256:38337540fbbddff8e999d59970f3c6f35a82de10053206a7562f1ea02d046fa5 \ - --hash=sha256:473b83b915e547aa366d1eee11806deaf419e17be16310ac0a14077f1e28f917 \ - --hash=sha256:544dd704ae7238755d790de45ba8da072e9af3eea688f698b137915ae959281c \ - --hash=sha256:64d94e84f6660764e64e7e0b22baa72f6cd942279fdbb21d46abd70d179f0195 \ - --hash=sha256:753d47ebd4542742ef9261d9da92cd545b2cacbb48349a1225466745bb866ec4 \ - --hash=sha256:791135ee325f2336f498590eb2f11dc5c295232f288e75c99a36c5dbce63088a \ - --hash=sha256:9ce725d22864a1e965217204946f830c37876eee3b2ba6fc6255e8e903d5fcbc \ - --hash=sha256:a6bf3f88c554a2b653af81f3204491c818ae2ac6fbc09e76ef4773351292bc92 \ - --hash=sha256:bfb88f22a209ff7b40a576d5324bf8286b519d7358663db21d6246fb17eea2d5 \ - --hash=sha256:c9ea31edff2968b44a88f97d784c2f16dc0729b8b143ed004699ebca91f05c48 \ - --hash=sha256:df6c4265b289083bf710dff49bc51ef252f9d5be33a45ee2bed151114a56207b \ - --hash=sha256:e10bf9113d209be7cd046d40fbabbaf3278ff6d18eb4da4c500443185dc1896c \ - --hash=sha256:f01a9c019878532f98927d2bacb79bbb404b43d3437455522a00a30718cdedb5 - # via - # -c requirements-ci.txt - # semantica (pyproject.toml) - # fastembed - # sentence-transformers - # transformers toml==0.10.2 \ --hash=sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b \ --hash=sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f # via # -c requirements-ci.txt # semantica (pyproject.toml) -torch==2.13.0 \ - --hash=sha256:024c6cc0c1b085f2f91f20a3dc27b0471d021c31ce84b81be3afdc39f791fd9d \ - --hash=sha256:092790c696a760c729fd5722835f50b9d81fd7c8f141571f3f3cf4081a8f664c \ - --hash=sha256:0ab4b69f3ee03a62a002cfbf77b1ca5e88aceb4ea64cb4388bb28f638ddbb045 \ - --hash=sha256:1e09d6a722504957c694faceca843acde562786df1144ebcc5a74075ec7f6005 \ - --hash=sha256:2bd30b6b730d987fa386ce3898933762c5cb8cc82eb0535211d787cc3ce2dfeb \ - --hash=sha256:2fe228aba290d14b9f31b049be550dbd469c3fd3013d7a19705b30454da97027 \ - --hash=sha256:31061ff56ed8fbf26c749806905aeb749ebeb819810fd5d52508aa5afd90dddc \ - --hash=sha256:33449899ce5496c1b84b4853179d94fd102028ae1407314d9fb956bb79e70d09 \ - --hash=sha256:49b58f1e2c52440abb6f17c28f0335fe6c6d01ad1a7f55b0183b81e4b34d64e6 \ - --hash=sha256:49f1ea385c754e54919408a9bb3b5a72b0b755bbe2c916c1d6f70afbec4908a2 \ - --hash=sha256:4f8573e3ce9ebcd53fe922f01077a6085ccdfbe5f12fd215883a9d87d7a744fd \ - --hash=sha256:572df8be8ffb4599c88cbd6a0726f1f854f4da65d2e3c09f0e2c2283333cd6d4 \ - --hash=sha256:60fcdcb2f3876e21146cb4524ef06397d727ca9ad5f020818547e25075fe3cb7 \ - --hash=sha256:796633c4cdf0fe2cdced72d8f88f22e73dbcfce83132763162f6d4bff13b820b \ - --hash=sha256:94f0de129916f77b8dc2c7a8eff644cfeddfe59e39c9f55e9f6e17543410281d \ - --hash=sha256:a0d8b11f16a48d60e2015d8213aa0390744cbebb98e58b62b3514dddc656e330 \ - --hash=sha256:a3893dc2da0a972a8ca5d698c85a9f967559ac5f8ee1797b77408aa8734d073c \ - --hash=sha256:a3a9a21312872af8a26950b2c15680335a386a1f56ed03e780653d78b9607e9e \ - --hash=sha256:a7de8a313090dc5c7d7ba4bfe5c3be222528f9a4dba1acc83bddb1157360c4b8 \ - --hash=sha256:c28def70706c2f9ecc752574766e8ae4da9b810ab6676b611166761a78a9f1e1 \ - --hash=sha256:c78b7b4d04461855a764cf01bae9a462bb88bc93defcfa11235cbc8fdf3e12c4 \ - --hash=sha256:cc26eead4cf51d0b544e31e364dcf000846549c273bd148936fe9d24d29acb92 \ - --hash=sha256:d849b390e07d8d333ce8ecaf91b273c656c598379a19c9acf1318a883f6b391c \ - --hash=sha256:e76f9bcecc52b8ff711239a2f7547d5353df95878ab232f0773c1d95928b92f8 - # via - # -c requirements-ci.txt - # semantica (pyproject.toml) - # sentence-transformers tqdm==4.70.0 \ --hash=sha256:55b0b0dbd97462d06ebee91e4dac24ed4d4702be82b24f07e6c1d27e08cea220 \ --hash=sha256:7f585706bfddbdebf89daac705b2dfcc16890130727d3197ca62c732b4310953 # via # -c requirements-ci.txt # semantica (pyproject.toml) - # fastembed - # huggingface-hub - # sentence-transformers - # spacy - # transformers - # umap-learn -traitlets==5.16.1 \ - --hash=sha256:ed900c2b631aa3a112811139fa97b8d2c3bad5e989656bba4b7e52c7852c18c1 \ - --hash=sha256:f775618166caa0396c8e337099240f2bd3e5e917d203b2e6fbe21a58d3cb1f6b - # via - # -c requirements-ci.txt - # ipython - # ipywidgets - # matplotlib-inline -transformers==5.15.0 \ - --hash=sha256:bbf98f57b2ddd7c4ecbccfa2c0069017aa6fd01cc204bd50cbc0eeadcf2a13b8 \ - --hash=sha256:d7f007736f67749ae9490c4f8cb5d30b452ae2d68c8675e50ba8d63ea7feb107 - # via - # -c requirements-ci.txt - # semantica (pyproject.toml) - # sentence-transformers -triton==3.7.1 \ - --hash=sha256:10ba85fa2cca4a2fbdeb36bf1cb082f2c252bda55bf9fccd74f65ec5bc647e68 \ - --hash=sha256:2020153b08280415ec0da6607834e79166442147e78e144df06b508c75b186d2 \ - --hash=sha256:3daf64305d6cea88d3334c65ebc9bcd0c64c9564a977084366aa768d57cbcf64 \ - --hash=sha256:58c0e131da05134a2a4788ccbcc0c1105cf0f54c8e98f19e34cd465396dc15eb \ - --hash=sha256:6744957e9fd610a29680ec2346057d0c86948ed3812468670719f391e94b44a5 \ - --hash=sha256:7e40869937a68206ec70d7f25bb7ec6433cb083f9135e1f36dbd318dc449a728 \ - --hash=sha256:9497f2e696ee368862a181a90b2dcc03ca978cc4f602abd67c7d81022a6988e1 \ - --hash=sha256:c58e4c61f0c73b5dba3b5d19b4a7093c32f90dc18b2a7f121a7c16ccd31107b7 \ - --hash=sha256:cdbfc09d9ec58bc5e68321525653220de7515c199e7a8097a97c85e62b52cd0a \ - --hash=sha256:d4a0e1cd4c4a76370ed74a8432a53cea28716827d19e40ffc732233e35ceb3f6 \ - --hash=sha256:ee89fbf782ec2ad50391dd1cf26cbea4f4467154c37f4773026da8fc31c0f58e \ - --hash=sha256:fe4ea396a06171f1f1f58cbd39c70b09294398f7dd7c620939bab54ad6f934fa - # via - # -c requirements-ci.txt - # torch -typer==0.26.8 \ - --hash=sha256:3512ca79ac5c11113414b36e80281b872884477722440691c89d1112e321a49c \ - --hash=sha256:c244a6bd558886fe3f8780efb6bdd28bb9aff005a94eedebaa5cb32926fe2f7e - # via - # -c requirements-ci.txt - # spacy - # transformers - # weasel typing-extensions==4.16.0 \ --hash=sha256:481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8 \ --hash=sha256:dc983d19a509c94dba722ee6abd33940f7c05a89e243c47e907eb4db6f1a43e5 # via # -c requirements-ci.txt # anyio - # beautifulsoup4 # grpcio - # huggingface-hub - # ipython - # librosa # pydantic # pydantic-core - # python-docx - # sentence-transformers - # soundfile - # torch # typing-inspection typing-inspection==0.4.4 \ --hash=sha256:547274fa6b0a561ccf549cc9524b999a578e737d015d8709d021f9d0d13bea47 \ @@ -3360,135 +1048,9 @@ typing-inspection==0.4.4 \ # via # -c requirements-ci.txt # pydantic -umap-learn==0.5.12 \ - --hash=sha256:6aff02ecac5f2aad9f3c65ee518d7ae93e1a985ae38721fdcffceee4232c33c7 \ - --hash=sha256:f2a85d2a2adcb52b541bed9b27a23ca169b56bb1b23283abeebfb8dfb8a42fe5 - # via - # -c requirements-ci.txt - # semantica (pyproject.toml) urllib3==2.7.0 \ --hash=sha256:231e0ec3b63ceb14667c67be60f2f2c40a518cb38b03af60abc813da26505f4c \ --hash=sha256:9fb4c81ebbb1ce9531cce37674bbc6f1360472bc18ca9a553ede278ef7276897 # via # -c requirements-ci.txt # requests -wasabi==1.1.3 \ - --hash=sha256:4bb3008f003809db0c3e28b4daf20906ea871a2bb43f9914197d540f4f2e0878 \ - --hash=sha256:f76e16e8f7e79f8c4c8be49b4024ac725713ab10cd7f19350ad18a8e3f71728c - # via - # -c requirements-ci.txt - # spacy - # thinc - # weasel -wcwidth==0.8.2 \ - --hash=sha256:91fbef97204b96a3d4d421609b80340b760cf33e26da123ff243d76b1fda8dda \ - --hash=sha256:d63947694a0539a1d51e01eda7caf800c291020e6cdd7e28ad7b14dd33ad4f85 - # via - # -c requirements-ci.txt - # prompt-toolkit -weasel==1.0.0 \ - --hash=sha256:7b129b44c90cc543b760532974ca1e4eb30dad2aa2026f57bdce66354ae610fc \ - --hash=sha256:89518acee027f49d743126c3502d35e6dd14f5768be5c37c9af47c171b6005cc - # via - # -c requirements-ci.txt - # spacy -widgetsnbextension==4.0.15 \ - --hash=sha256:8156704e4346a571d9ce73b84bee86a29906c9abfd7223b7228a28899ccf3366 \ - --hash=sha256:de8610639996f1567952d763a5a41af8af37f2575a41f9852a38f947eb82a3b9 - # via - # -c requirements-ci.txt - # ipywidgets -wrapt==2.3.0 \ - --hash=sha256:0a45ffae742ce91a16e11cb6c7cd71e7f9994f3cbd283b962ab093f5c6dcf525 \ - --hash=sha256:0bb2797048db0956348cb3058c33bc4184614f13231389cfbccc16a5d32780a7 \ - --hash=sha256:0d3fb71e65b001adfc42684522eeccd9c21d8ba679945abc993439567b66e59f \ - --hash=sha256:0db083387d6e75ec0be8173ecbf0e811cf60bae1cc75a815feb104167ea10d4d \ - --hash=sha256:10461884b3014fbfc8eb7d09a93c5f246363e6711d9d881f95eb8c27fdef049f \ - --hash=sha256:1236fa25173ca964c97422470482e9011b9e3c7ed0d75798b40b3da3b0e0e760 \ - --hash=sha256:141ed6211286a9660d8d6702de598b43f0934b4f0eda16393f100a80f501d945 \ - --hash=sha256:1598becd30f8f2777d18564064eb4f4dbe1ab0e05a8f09786d0ef505ac782bf3 \ - --hash=sha256:195b1842b4122fb54e3cd3dd5b2b4aa49302a5a61da901df0481f5c97aedde84 \ - --hash=sha256:1d6159c9b2fefec02314e1332dbbbfaf960e369dfd26bcf7f8b258b5732065b3 \ - --hash=sha256:22cc5c0a717bd4da87018ae0bffd4c19c6fb679d3ff357216ba566ab26c76cab \ - --hash=sha256:242b60c21e30866e6a2fa606c612b47c553fa60c0eaeeeb7797fb842ac0ce609 \ - --hash=sha256:24da48596326ef8e448cfa837b454f638713d3531262375f00e5a9681682fc07 \ - --hash=sha256:261f53870cd4fb2bf38f9f972c56c728fd224cb7c65721307de59d9e7e6741ae \ - --hash=sha256:2935d5454b3f179a29b12cf390ee47246740ba2c3a7545b1b46ba31a5f2a4a0b \ - --hash=sha256:2e49885a62ec4ee854d1b9e6371fda6afd219917225752abf729a3f36d4df9a5 \ - --hash=sha256:379f670f45b7bb8993edd9f6fc36c6cc65edb81cffa0b504be34acb0303fff0a \ - --hash=sha256:3873c3c5ca9f4ef91f693602eca19d1f1e7c410338df82a4ff11d826b5896a8f \ - --hash=sha256:392158c9a7f2ab1b8699418bfc0fe6f83548788c418b27d7bf2019ad3405cebb \ - --hash=sha256:39febbee6d77301d31da6996b152ce52452da7c7ef72aba10c2fa976dff9c295 \ - --hash=sha256:3d1c2c1b808600d2ea808e6360910a60ed5f409a4011655e10f9164ba0a414a6 \ - --hash=sha256:3da470536bf9645143323dd41b32db55c6f4304ad382094c1a1da8a92061e10d \ - --hash=sha256:418f54bb09d1762db02c7009b4051149893af3153a87f92d70356703c11eea02 \ - --hash=sha256:42869085687f0aefd57c0f636c3f9354f8ffb321a8ba9cb52d19beb796e561c5 \ - --hash=sha256:45c9279b373d15649dfa2c2077cb3408ea1a6d3125afbdab9d6b809a66f68e14 \ - --hash=sha256:4fa0df3bff4e7ce45759f33fd39335fe2f60477bb9ecf7b8aa41e7d07ee36a23 \ - --hash=sha256:50f416b74d092bb9f41b424e90dd457f365f7ba4b11de62a23679769a21bd85c \ - --hash=sha256:51a7a4181c1295774812271fbcd7c909df372bc25579d4ed9eb875caaf0ae86f \ - --hash=sha256:54ca1d5573f69b5fe1d74f1f65799c68015e82f685efec9fd8cfa40a094c44d0 \ - --hash=sha256:5ab559e1b2551d23d54db2a0001c6d73bad022a254639561c5f6c382a9d6c2fe \ - --hash=sha256:5ba1e5e08ddc46130e9682b2c249f2d1dd39bda9106ed4bd401b7519f18f41bd \ - --hash=sha256:5d221a6e6ddd302b8397433184e96b59f259f50024b854db1c411a881586b6b8 \ - --hash=sha256:6208f302f110295d64b22a7ac96500c791bf492dce4366e622e4912b077c9687 \ - --hash=sha256:626b69db2021aa01671ec7bbc9740e558522bd44c18cf2ce69bf3d666a014109 \ - --hash=sha256:628f3ba8ec793a5b10a6cd8c6c6b7b55eb552abd1f3bd301336acb74c7a82dfe \ - --hash=sha256:629d73378082c00a8173031f9fb30a3ac6abbc894a5bfdfae71fabc60642d501 \ - --hash=sha256:646d20d413ffcd1b0a2f700076e2d0252d872dcb7754860a73e45a59ea883614 \ - --hash=sha256:67bfe2485f50368c3fcd2275fc1fd100e350d601e0058921a7c82678a465aeab \ - --hash=sha256:681a2d0eefd721998f90642762b8e75c2159ec531b20ad5e437245ea7b06a107 \ - --hash=sha256:69e477046f2237ef0bc6547544ee73008dc764ca26eff44f09e976d221b34d5d \ - --hash=sha256:6db604ef0c67bdb2042ecdfd7b7f037cf09733557ca42360d1018285634f7b98 \ - --hash=sha256:729126e667da34d251b8ebf8a45ef0c5ddadc21542b3d6e1abf4259ece6508df \ - --hash=sha256:73d0b10b64620a2cf4bc3d31775c4d9527e309a5549e4379e3bf71e8d2dc193e \ - --hash=sha256:7ebb274aba688b043429eb1500ff8a76ce0cb8ac0812ca3e301f06247b8722b3 \ - --hash=sha256:8159ec0b0cb7608175eb150de94c19e34f4d47ac655f5ca9baf45df6b688ffd3 \ - --hash=sha256:816877aa749253149f9ecfd2635d4d948ecfa338e1a0311d187b1acb1bb8a3eb \ - --hash=sha256:85de890ff968196e92dd1ae73a9fb8970495e7650a457b1c9ef0ac3dd550bce2 \ - --hash=sha256:8f8a1c6472675956cece9a8f403f43c3594f1681319eed2dd56f60877397c636 \ - --hash=sha256:9045917809c63fdf7abe3a2ceaed3d670b8ee4500ddd9291192d30aeb34467c5 \ - --hash=sha256:932dced0a7b2950ed58a3325536a1dcb7b58e7330af54e8552d2e566b5328b99 \ - --hash=sha256:93513bec052c6cd987f9f580c3df068c8bc4ebae6543736be3ca7ec5959cafcd \ - --hash=sha256:9790ea25190a4e0fe4cdf4eeb868e9d75f8a024a70a5b6bf9c348a3a2b72e731 \ - --hash=sha256:9f5d2aec29dfc76c37e23897dee92766a3fd4f3bff3ae7fc9c6b4bf37d8c1360 \ - --hash=sha256:a65e8db2b4e90c2e7ade931086351c98ef420bf7a94ee08c95ac8a3cbbc43579 \ - --hash=sha256:a6b5984cd65dd639546f0eb4b8eacf1c31cb2fe9fb5c27bffe240987cdb2cf84 \ - --hash=sha256:a6e19531ae33c508cea7d84a7edfda01fa86e51b8d1a93a77712c55e6e469152 \ - --hash=sha256:abc71504669d126d91f89fc0e388c6295d8fbd2439be884f175133fda8aa403c \ - --hash=sha256:ac870cc97b73bb00ac353329e9559a4bebc47c4c86792ed9b23b58c15b6ad838 \ - --hash=sha256:ad71df7a04dd3497e9302e81f4a7c91bd401ea0e15a9df9029527900f94bee43 \ - --hash=sha256:b1e5aa486e269b00ed35e64771c7d0ab8096cfd2643405ca8cd60ebedc099a51 \ - --hash=sha256:b4fc96b159af0a3e0faa72475a69d66292bea72a5bed1e1aca1bffbddc3cb2b0 \ - --hash=sha256:b767a9566f165dd14decf8f4194c6bb0ce3a8420cec213824e05a99400c9260a \ - --hash=sha256:bff9a671bc00709cab5a7f745c592b5671873449db0ee2a569af994f16b29a4d \ - --hash=sha256:c3b476ae63b4a3b4da681aafcb25ff3542d289fbda8b5da7caf76aaffafafdbb \ - --hash=sha256:c4bded758ad6f03b965830944a2f0bc5b2eb3767fe5a7310134315d1a6610e98 \ - --hash=sha256:c8388ba7faf5dbf9ee106bb70d66f257629b1bd98091123e19e8a4553a319199 \ - --hash=sha256:c8858d8ff9822a081e3cc49ae1b3b22f0f789c14001cdac8f94564010d9c9d66 \ - --hash=sha256:c88abcf53daef80e01a75c7530e727fa6e2c1888fe83e3dcdba4c96216a1f5c7 \ - --hash=sha256:cc2cea812e5cb179a796b766747e7d3b21088760d8deb95676d482b8c8e6fa7d \ - --hash=sha256:cd3a2edf0427013736b8127955cec62608c56e53ea47e82812ea32059cda407f \ - --hash=sha256:cdc021cb0b62471d6aac7f2bd92f3b4658073775f9ee7fcd325c511129e7bcc8 \ - --hash=sha256:ce9f398f868d2b3b27aa2ea4de79645ef9077aeeac8dfc2814b0d542c6a2b87f \ - --hash=sha256:d0077f3d65541925fa83002f967b22ad6550d24813ac64cb905f717194128d9c \ - --hash=sha256:d0f7284f88f4833705132d06d3b425a43095c2cbd07c58166aac3ab646ba12a4 \ - --hash=sha256:d2cc64539da63e39ffb9c7ede849b6e8ddaaf7b3876b5cfb04efd85a5f3f4eb6 \ - --hash=sha256:d8c7ed08477429752b8c44991f40ad7838b18332a160698740a6bfbc10d998a2 \ - --hash=sha256:df4ce31150bcd5d9f36f816aac3010ab4f4bf8672ac1d3b0ac7d539ec61c7c02 \ - --hash=sha256:e045ff75d7d94900fc32896ed93c45ce2d2cac28c9dead582ff9a5a49d446e35 \ - --hash=sha256:e2e692bc0d63f881cf7006730a56bd4e0c2fab5dc318466942805d692b166276 \ - --hash=sha256:e31734c5077f29f892b2565eee5106d610278151ad49fc6a9d69a647cd5730e2 \ - --hash=sha256:e3b9eaa742ae7a0aaaaad4ca4b69469d757af2d6e6663ef1dadc47adec0aeb41 \ - --hash=sha256:e3f3d7ec0a51fbfe00d3aef047641ff2c58b25565b4717fc1f90e050be01cba8 \ - --hash=sha256:e5301c35cf75655eb33498f2bd6ae8703ca19940e3167dc9cdf740c712a39c60 \ - --hash=sha256:ea52a0d0f08c584943d5764be0e84efa912c8da23c23e1e285ff2f5641c18fcc \ - --hash=sha256:ed635a9ca4f3a5a2b900c10c69e823373bc00ebc114b459383596d3487da3570 \ - --hash=sha256:fb8e2e6704a1e0b1b989546c69e2688371ef4a07fa5f61bde3eb6211186f5ac1 \ - --hash=sha256:fc648a335d7e01adb3640b25f02fd0ea05886cf04d0af7f4ee902bc7b5e466e8 \ - --hash=sha256:fc82c2ccc8e234c844f5303d9f2984b346dcdd53e94823ce8420d2c75b4b9023 \ - --hash=sha256:fd1f2f557dd3491fe75905e578f4db967393d40d1a8f468edc4d40ac7f2d5944 \ - --hash=sha256:fd85b0aa88efdb189d6ae2f35f4526943a8f091c38599c9c31478241c819e6a1 - # via - # -c requirements-ci.txt - # smart-open diff --git a/.github/requirements/explorer-extra-py311.txt b/.github/requirements/explorer-extra-py311.txt index 0528b3f6..116e9015 100644 --- a/.github/requirements/explorer-extra-py311.txt +++ b/.github/requirements/explorer-extra-py311.txt @@ -6,7 +6,6 @@ annotated-doc==0.0.5 \ # via # -c requirements-ci.txt # fastapi - # typer annotated-types==0.8.0 \ --hash=sha256:13b2beaad985e05e2d6407ee4c4f35590b11f8d693a258a561055cac8f64cab7 \ --hash=sha256:f072f4d804ea359e4eaf198b1af7a8b0943881a87f31bb764f8bf219bb9419e0 @@ -21,72 +20,6 @@ anyio==4.14.2 \ # httpx # starlette # watchfiles -asttokens==3.0.2 \ - --hash=sha256:3ecdbd8f2cc195f53ccada3a613538bb5f9ef6f6869129f13e03c30a677b8fe2 \ - --hash=sha256:9da13157f5b28becde0bd374fc677dcd3c290614264eff096f167c469cd9f933 - # via - # -c requirements-ci.txt - # stack-data -audioread==3.1.0 \ - --hash=sha256:1c4ab2f2972764c896a8ac61ac53e261c8d29f0c6ccd652f84e18f08a4cab190 \ - --hash=sha256:b30d1df6c5d3de5dcef0fb0e256f6ea17bdcf5f979408df0297d8a408e2971b4 - # via - # -c requirements-ci.txt - # librosa -beautifulsoup4==4.15.0 \ - --hash=sha256:288e3ca7d54b06f2ac191970bc275c1939cb46d450b255bf6718b04aa37ab4f7 \ - --hash=sha256:d6f88de62e1d4e38ecb1077eb9724cd0eff29d2a08ca16a401e9b9e93f117cf9 - # via - # -c requirements-ci.txt - # semantica (pyproject.toml) -blis==1.3.3 \ - --hash=sha256:034d4560ff3cc43e8aa37e188451b0440e3261d989bb8a42ceee865607715ecd \ - --hash=sha256:1e647341f958421a86b028a2efe16ce19c67dba2a05f79e8f7e80b1ff45328aa \ - --hash=sha256:1ef6d6e2b599a3a2788eb6d9b443533961265aa4ec49d574ed4bb846e548dcdb \ - --hash=sha256:27f82b8633030f8d095d2b412dffa7eb6dbc8ee43813139909a20012e54422ea \ - --hash=sha256:2a1c74e100665f8e918ebdbae2794576adf1f691680b5cdb8b29578432f623ef \ - --hash=sha256:30b8a5b90cb6cb81d1ada9ae05aa55fb8e70d9a0ae9db40d2401bb9c1c8f14c4 \ - --hash=sha256:3f6c595185176ce021316263e1a1d636a3425b6c48366c1fd712d08d0b71849a \ - --hash=sha256:3f966ca74f89f8a33e568b9a1d71992fc9a0d29a423e047f0a212643e21b5458 \ - --hash=sha256:45866a9027d43b93e8b59980a23c5d7358b6536fc04606286e39fdcfce1101c2 \ - --hash=sha256:6297e7616c158b305c9a8a4e47ca5fc9b0785194dd96c903b1a1591a7ca21ddf \ - --hash=sha256:62fb8c731347b0f98f5f81d19d339049e61489798738467d156c66cc329b0754 \ - --hash=sha256:631836d4f335e62c30aa50a1aa0170773265c73654d296361f95180006e88c04 \ - --hash=sha256:650f1d2b28e3c875927c63deebda463a6f9d237dff30e445bfe2127718c1a344 \ - --hash=sha256:66e6249564f1db22e8af1e0513ff64134041fa7e03c8dd73df74db3f4d8415a7 \ - --hash=sha256:6f165930e8d3a85c606d2003211497e28d528c7416fbfeafb6b15600963f7c9b \ - --hash=sha256:7260da065958b4e5475f62f44895ef9d673b0f47dcf61b672b22b7dae1a18505 \ - --hash=sha256:7a0fc4b237a3a453bdc3c7ab48d91439fcd2d013b665c46948d9eaf9c3e45a97 \ - --hash=sha256:7e88181e9dd8430029ebaf22d41bf79e756e8c95363e9471717102c66beb4a6d \ - --hash=sha256:8177879fd3590b5eecdd377f9deafb5dc8af6d684f065bd01553302fb3fcf9a7 \ - --hash=sha256:878d4d96d8f2c7a2459024f013f2e4e5f46d708b23437dae970d998e7bff14a0 \ - --hash=sha256:8c888438ae99c500422d50698e3028b65caa8ebb44e24204d87fda2df64058f7 \ - --hash=sha256:9b0d42420ddd543eec51ccb99d38364a0c0833b6895eced37127822de6ecacff \ - --hash=sha256:9de26fbd72bac900c273b76d46f0b45b77a28eace2e01f6ac6c2239531a413bb \ - --hash=sha256:9e5fdf4211b1972400f8ff6dafe87cb689c5d84f046b4a76b207c0bd2270faaf \ - --hash=sha256:c3e33cfbf22a418373766816343fcfcd0556012aa3ffdf562c29cddec448a415 \ - --hash=sha256:c4ae70629cf302035d268858a10ca4eb6242a01b2dc8d64422f8e6dcb8a8ee74 \ - --hash=sha256:d0114cf2d8f19e0ed210f9ae92594cd0a12efa1bbbce444028b0fc365bbbb8af \ - --hash=sha256:d563160f874abb78a57e346f07312c5323f7ad67b6370052b6b17087ef234a8e \ - --hash=sha256:d734b19fba0be7944f272dfa7b443b37c61f9476d9ab054a9ac53555ceadd2e0 \ - --hash=sha256:e10c8d3e892b1dbdff365b9d00e08291876fc336915bf1a5e9f188ed087e1a91 \ - --hash=sha256:e5a662c48cd4aad5dae1a950345df23957524f071315837a4c6feb7d3b288990 \ - --hash=sha256:e9327a6ca67de8ae76fe071e8584cc7f3b2e8bfadece4961d40f2826e1cda2df \ - --hash=sha256:e9f5c53b277f6ac5b3ca30bc12ebab7ea16c8f8c36b14428abb56924213dc127 \ - --hash=sha256:f0628a030d44aa71cac5973e40c9e95ec767abaaf2fd366a094b9398885f82f2 \ - --hash=sha256:f20f7ad69aaffd1ce14fe77de557b6df9b61e0c9e582f75a843715d836b5c8af \ - --hash=sha256:f36c0ca84a05ee5d3dbaa38056c4423c1fc29948b17a7923dd2fed8967375d74 - # via - # -c requirements-ci.txt - # thinc -catalogue==2.0.10 \ - --hash=sha256:4f56daa940913d3f09d589c191c74e5a6d51762b3a9e37dd53b7437afd6cda15 \ - --hash=sha256:58c2de0020aa90f4a2da7dfad161bf7b3b054c86a5f09fcedc0b2b740c109a9f - # via - # -c requirements-ci.txt - # spacy - # srsly - # thinc certifi==2026.7.22 \ --hash=sha256:62f22742b58a1a33014a2b6b706588a8d7e2a88ae7bd1a6ebe8c992928483775 \ --hash=sha256:741e2c3b351ddf169a738da9f2c048608ff7f2c5cc02f1ebc6b118bb090d5d55 @@ -95,147 +28,53 @@ certifi==2026.7.22 \ # httpcore # httpx # requests -cffi==2.1.1 \ - --hash=sha256:046bfc24911b37851ee1b51aab8bffe713d89c68c6a057b09484ce9fd5f69b4e \ - --hash=sha256:06c72bb76605a4b0cd0aad6930b69d4baf7dd5d806cfc409b824191099700e66 \ - --hash=sha256:0beceaabe56af686895136a2de78db54ecd8e4046b236b8fd6d6cb61389e9bf2 \ - --hash=sha256:154852545011f779917b11c78db2358d095da62a9a172b78ad0a583ee5adc0d0 \ - --hash=sha256:194cffa889098ced9976c3fc6340305e43f6303657d298da55366907c05c22d6 \ - --hash=sha256:19ee6127ee34de7d83ce3d371ebc5ed91addbdcc39f9ab15ce4eb35a4e534971 \ - --hash=sha256:1a18a57b58cfb21fc28d72e876acf10eaed67a1ed96226f92af4df681d571c4c \ - --hash=sha256:1aa5645c30469b09530c4ebca77ebf8f17618293c58f8549cb1a543a50236e7d \ - --hash=sha256:1dea0e4d7d4f11f619fe8c1d76caf49e24405b4b5743c0e3be16a500ecd930c9 \ - --hash=sha256:208f941bb9d18e768138677f0a6d2ce01f590df56043dda1df1535ac57c88517 \ - --hash=sha256:210019b6c7cf07f081b4c54635c8cf744377001350e29cc0f81c4377b4797735 \ - --hash=sha256:246fa40ce8645a614ff682e0b70f37134e460eaf93a775e0cbe3cca585a67a80 \ - --hash=sha256:25792eac27877609e7bb06d42ff88278a6624fff2ba9bbb523c09616b117e80f \ - --hash=sha256:27350daa11d4f10c540e6e89dada4c54feb7256ad03e9a4dc075ebad7ba360d1 \ - --hash=sha256:28907ab9bfb6aa13184cfc17c6b8e1023c5ab6fd7076d8c20a35e59fe04f8f29 \ - --hash=sha256:2ae64be792b8966f2c69538199728b290e34726562896df1e5dc8ffd8d8188e8 \ - --hash=sha256:31348097ff5bbe827ccc41795d4dd099d9f0625e7def00ee653c137a490c2a6c \ - --hash=sha256:3143d81e29e1e20a9ce10901ec369012947876596f75a222235965f2b7ae832e \ - --hash=sha256:3222ba5d678f80a030e6afbcc33dc1ae5cb45facabb61cee2c7016b8432fde48 \ - --hash=sha256:3311ed60d36f83378794e1009ac6258bafbf81f7888b4caa7b35a521e3f95813 \ - --hash=sha256:334644fbac4eff73d985a17a91226df55d0f394160c4cfb880e084c8f7161cac \ - --hash=sha256:34e261f78cb6ceaaa36f42f2613f4380d94d9c759a9c73c769ee6e0247364632 \ - --hash=sha256:363e05fa78e15116c3c32c210ee36884fd6b9afa6d440e47112c3bd511d64cb6 \ - --hash=sha256:398aff33cee2767e3e781d2554c54bd0dff386bb437581e0d8011fde1a942ec1 \ - --hash=sha256:3d22a20b1fb1632cc72c22f95f7b0d2961c3e1c235f245ba4c606c4771035659 \ - --hash=sha256:42a494cee34437f05546455144f2b5d9ac09b1face62bcfce597d2e521066688 \ - --hash=sha256:42e2f76b9455f5a9a844f770bf3e200ed3da0e15f5df3db9c31fe80b04b3d004 \ - --hash=sha256:42f6930c31dc7f50732c9ae793c2786c7b6b044195967bbdde40bb9be81c4cc0 \ - --hash=sha256:456a61fa52d579ebf9df2e9552ead5129855dbaff6c1e5a9b1bc408809bdc062 \ - --hash=sha256:471cee653ae88de62096552e6d24ccb4a5adb8c8c9f10b5054d0122c15bf2779 \ - --hash=sha256:49cbc70e6542d4ccccb936558d1064a8012541e78f821f955cff24e357776c94 \ - --hash=sha256:4a7c934f7360e8cd64fe9efadcbd10c7c6364f531e432b9a4bf5ccbc9e0e8b50 \ - --hash=sha256:4be96343e422f2dfcd12ab5c9f5aebe03f82f737c6bffeca6830b3875cb44aab \ - --hash=sha256:4f42141fc14250de6dde5ee7ea4432be017252d91f19c5ad043c084cea629cac \ - --hash=sha256:507a24c282e0f42f8ed737cf048572cbf580468da5555764a8331735e9c736b6 \ - --hash=sha256:51b31d1c98274844cfd7838ce00bfc27c7423a4dc00fc0772fc3331c2cc90676 \ - --hash=sha256:58acb8ab8e295e6c5ea12f888cbb13cf21511ef2a3303a23f4325c29d17fe5c1 \ - --hash=sha256:5a59cc1c4442bc3d5c703bf720b51138d0bfc173618807c9ee2490a7541dd3d9 \ - --hash=sha256:5bb4e7ea95dcd6a014a6fef62e62467d67d8e582326443f3d68e71d6320a9fcf \ - --hash=sha256:5c58fe613dc5e5336357eff555824a314d8e43282600435c8d1cb6a7a2fedd13 \ - --hash=sha256:5e7cecbaadb83884793e05828cee59b210b24583b9c7425d0ba6a754fe22eb4e \ - --hash=sha256:616f097f2fe415bc92a247f02e11f634e1f9e9a83d327e3c915c15089c87869e \ - --hash=sha256:63bbfd5ded17c4840ac07cd8f1c21ba9d9708141f840b324f422f41b207e3973 \ - --hash=sha256:64faea20f4e2613363a1a9b9c7dd73058f3ecd00133a511e72ad7c511658f527 \ - --hash=sha256:661c298b4821edebead0c91edd2b00374d67ad7c5a1f7a91d4442633b79d6a72 \ - --hash=sha256:68e62fe11f30d5ca8289242866f0a5291402d8529ca2178ab8afc5c9694ae890 \ - --hash=sha256:6a8dddef476fab96d066d578fc88526767b836ab5ab21754e1d5bf3879c31c7c \ - --hash=sha256:6e192623c49c94421616a5778fba35cf0d5a8d000650c1967ef4448ee5cdd990 \ - --hash=sha256:7225e4514edb64eb6740324353e0da0711954fd8d7da4576755b1c6e09b697cd \ - --hash=sha256:75f80557d1389eddbd0de2681f6a390a0c5338c31ddaa821381c203fc3fd50d9 \ - --hash=sha256:770de9db11e84213beec501cfcaa013b019820ca881e03344dea5844f7876d94 \ - --hash=sha256:7750c6449dff7864bb9bb27ddfb0267756189201a3afc911d82b3caacd70dfc3 \ - --hash=sha256:7bde5e4cc5c10140859842b9d383af292b22639a4dffb725314baf45968cef80 \ - --hash=sha256:7ce713ace7c0e4520535b42b77eaa742c16dab813978064913e5a3cf82973b41 \ - --hash=sha256:7da0c5eff80f0197f3b3d1232ec5a682a9325f4ae9016a78f5f5ca35f9ced1f5 \ - --hash=sha256:7dbb61fe3a7699468030f71bbe5f8a0e326a151daa91beb11a6fc1f980c55e1c \ - --hash=sha256:811bd1e21d32de12efca32393a0ab3f5133b54fce9bd44b8bd77ab07da14bf6a \ - --hash=sha256:8ef53b2de9bcb9197d31854256575d59dbac0cba72ac627bb291ef5eceb74be4 \ - --hash=sha256:937c0052c05a31ca1daf18de3158eed4dbfcb9cc107adbea227728d647be701e \ - --hash=sha256:9d2055050ea716bd38b7f7f1579c275386646b4894c155a3e2f3cd62ed41b7c6 \ - --hash=sha256:9f8d177621de5cb38ee3e731eda45d421db093ec0739f46a5594babda7987a98 \ - --hash=sha256:a2d7755bef5a12ed488f4ef1f1b69ee9191d7396083b755a5d2295f6edb4768b \ - --hash=sha256:a48d62ab9d6f4f98c983223a547af44be6ca3691074c31cecced6facd3ba2dc1 \ - --hash=sha256:a4f00aa42f75d6e4595e8866e748cc1705adc0cddfeb2ca86d0d03993d63ba03 \ - --hash=sha256:a6e721d4b0e45d5b65e87534470e67b18dcd092c83f68fba09f152b9cbc061af \ - --hash=sha256:a730a083190634c65cca36ba5f489531576ebd79bcd5c8e172130f6453127231 \ - --hash=sha256:a931079504ecc49efed7744c476a5c343a92fabf66dec2db95edb1b2fdc770e2 \ - --hash=sha256:aa9511c62d14da7aacc9b4bf51f3f697a621e83b2d6919008243c3aad168eea3 \ - --hash=sha256:ab36d55f9ed2d067327667c2fea18dda018eb628dd6347aa01dda6cf1f5d3836 \ - --hash=sha256:ad2c86c495b899d862ea0f4b42891b8713a3bd45dd4105c7fd51c2a72f39f3a5 \ - --hash=sha256:aeae0e330c9f6acd681f647d46cefd30c29f93e3392882e792e82080c9691399 \ - --hash=sha256:b0431303acaea1089ad4b3e9ce4e6518193def1118d4073ca848635ee4ea2e96 \ - --hash=sha256:b5bdfd1c873d4e093aabc0ca84c4ca6dbc4f752afb5c86f146d9742580c9da2e \ - --hash=sha256:baed1e86cc735622097354b9d1281406caf42ff42a886d29faa8e8d1630333be \ - --hash=sha256:c1453022f490d2459a11819d83ad1d586e9ff65a12ac3e705ffebd46d3685dcf \ - --hash=sha256:c26608d2222fb1e94487e4a387d85f13eb55d5ed725cb25a0c589ac4ee60e7bc \ - --hash=sha256:c7659f22557c5a0bc4855cd635f55edec690cc008a40768527762cb9fb263455 \ - --hash=sha256:c8c69575568085ba0b1b10c0249d779a214aea6f6522e949a0fc9fb0fcb449d0 \ - --hash=sha256:c8d2c9fd1f2d16f780d15127abb050d13d1a76c03a4bd87d7e4980e45e511e12 \ - --hash=sha256:ca82be1a1d406ecfe1d25dc16cb33488e5a16bf4438c9fb590484ea29d92478b \ - --hash=sha256:cc572dace3f60ef98d7b12ff411d20f5362feb31a0439eab0085bbfd349982d7 \ - --hash=sha256:d18e5ac0f2f03f4f518d3e23db0f0cad7faa1da8620e9c09461d443bbf6e6692 \ - --hash=sha256:d28630f5854ab07ab1fd4aba756de52326c82e6be15d414b12793f1975048b54 \ - --hash=sha256:d9c275eaacd24aa73f94ffd6de08fc3f932424d8b6c376f4bed7cde376fe7bc3 \ - --hash=sha256:da0e573f9f97159390c89d9f1a9e41908b66d408cc5b58d08cf3847d844c531b \ - --hash=sha256:dd31f52ea1086513bb9df30f8fcee9b8918323ae067a3d5b78bc826a000712be \ - --hash=sha256:dddad92b554513a31f272570678ba307fb9f618f05e3d4a5eacafff9eae03e1d \ - --hash=sha256:df423d40ee8654634421812bc3b196da3f9bd7d32929da813f8394c4348a5358 \ - --hash=sha256:df913725b79db7bcf03448f36b7bf8815363417d5b58deecf9305e3e30f0f21a \ - --hash=sha256:e0bcb7e0f677f543555d2adff3bf19c05f66cdb4796e5ff602442ab2fe3c4ef7 \ - --hash=sha256:e2d65b31f36619cda3999b78b2aa9632e76b78448e7a56fc4240824200e7c4fc \ - --hash=sha256:e6e8cff14d6fb0be70a09c0bdc58096f501952d04624ebf867e0e56da2df8960 \ - --hash=sha256:f16c709686a78c727bbbf059f92b0bf41c6fc60deec706d2dc19f529175a6125 \ - --hash=sha256:f24fb43132a4c6b4cb4eb029492919b2db645be6808d738f244fd146c03c32cb \ - --hash=sha256:f53e442b08449d42821fa4a4fba000095af9f62742a500f978a9f557ec44339a \ - --hash=sha256:f5cfbc5fe74540d335175b656c725d74d90e3730c626d92575eea35029d9afaa \ - --hash=sha256:f81b3b8f3d4e343550fa4baa0e479bba9f2d29ce9c2e9b51d1ce1718d7442fcf \ - --hash=sha256:f8ec5e643a9a937f64e1999eb9f75d072263751912dc5cd06d3c85f8f44be7c3 \ - --hash=sha256:fb92203a88b3d3053034db775110081c49d28be6551923805e039924093761e4 \ - --hash=sha256:fcd22650c908d7b7da162bbfaab594a1227a15d1643a98c68b122ac642fa2264 - # via - # -c requirements-ci.txt - # soundfile -chardet==7.5.1 \ - --hash=sha256:0df08f2b2f6ac04b3e7f9e8ad1b1559c2e8497338ff9dfa1e0922335ff9dfe8d \ - --hash=sha256:126b2a65141ed8a460c721d19f487c7b6fd12542aa761ce449f543296d0dd71e \ - --hash=sha256:1cd58589a52211901c5ac57016feffbe8a7e7e6328f5bf0b03ce44043e221e99 \ - --hash=sha256:26160da949c66f0cca280101d85e6e4fddca53bfe465a1b69ceb3c9998295cc0 \ - --hash=sha256:2c99dea9eea1bdc6cc20dcb3555581234899d58a4147163c7d03d8fca11402b0 \ - --hash=sha256:36843a0e9e3196142e317806d5ca29ab0bb714de2315897124a018438cc535a3 \ - --hash=sha256:3eb37b2c0aa67bfb1112aa90bfdd95cd3b4006fe051a2ea4872c3c6ba9cf855b \ - --hash=sha256:44214df32ff7c87fe82d7f1f21c7fe95c04769869e523f944413e668e001f52c \ - --hash=sha256:469f164a608ccee4a8a2c0c2b4328470df9b07443e8269714f8e8a51f6fdf4c4 \ - --hash=sha256:46d10bbb7ba7ba345694fe0276a61290d4cc25d3624c03282311dbc58c1d49b4 \ - --hash=sha256:4d30a84ec52c37532ad7978329a41224c454959b22503b8f8ed4df763e6c3ed2 \ - --hash=sha256:54bae16fc5b7ea39956ee737dd09b5f5438deafa9f565ac27c882992c3965b88 \ - --hash=sha256:5953d8236049aed0411908cfeaeeec03984ab2f109f980f0ec70fbe6938c8f9e \ - --hash=sha256:59598a8e15769ebe62fd0c153a5e4347a7a126cc7b376a724ff63ad80b890506 \ - --hash=sha256:61312fd3ff363c3ec549548250630a02fd3123c360dd492bf1fce0d28e915b87 \ - --hash=sha256:6df2e255413c5f277067d9af7444ab1e9719126335efbefae24d8370aedf35c5 \ - --hash=sha256:6eefafa763b7099c3c0a86c343097d69b766b3fe5705edba9400bae26450af1f \ - --hash=sha256:71f152d66e7bd1faad615897d34765243cb567ad6aef07bf0d7c0cdd69bf6cce \ - --hash=sha256:8a001a8f030625b705d9a4e68116e573462bd38192cc6c1bfa318b45606747ac \ - --hash=sha256:951ccab3a037a563079f4d448e82bbfee5f2715239440f732ffb0ac9f251dedb \ - --hash=sha256:9c378ccd8c0fab30171ed7c54d501f72c4294d9b98c71ea1ff7852aa9ccac399 \ - --hash=sha256:a198d47eaa28e1ba458f11ab636f0677f34c5d1ce7e909bec6ca2f346c21e78c \ - --hash=sha256:a599a836fbd41ff5a2a0c20e211da13ba8cc14dcba1e4bcfad8a7bcad64a2ff6 \ - --hash=sha256:a6b20b42a9e6048d557aec9903df33239c299b4643c6553203127c8f92f47e78 \ - --hash=sha256:a77d6d2d61f39b40423bd0abaee32175739cec9f11edf9e7236a5341d0e05c99 \ - --hash=sha256:b1c049906b95db7b12fd674f661f75285baf925eae98aa52a4a09305fc786855 \ - --hash=sha256:b72b9b95c636d170d9a6284d99be9fd93ca08bb2221385ff1a5b69da98ec4f76 \ - --hash=sha256:ba7e9b6c15b4fcdf07ae675e5116dee610425f9ad6955c9bdb6bf99aed2e555d \ - --hash=sha256:bbf6948b7a5b85af5e435993c4e5fdb092d0d8f38c00d68c96e2640bafce5ec2 \ - --hash=sha256:c461fc9746912d19ab77efc1912b7f9a364b7fca1d787e1215207d5f6f68685d \ - --hash=sha256:d06a8bacc8b6a26e900c3bd825601f9a8c02e063e687e960cf77363a9a397a0b \ - --hash=sha256:e6faa6b18c7af2fca8d4cbb51fa035fa47f8f4b68547ae927a1c0be34dfc96fa \ - --hash=sha256:e72489029c1f6e4be6138dd045a4e52bffaba5d5da0398df585bfcf8b239e324 \ - --hash=sha256:ecbe0e0a9fff7825fc48650ef297ede49c71a7abc411a0638416207a70bf78c0 \ - --hash=sha256:f22396ad419f1e78594057e200aa7253be56840f5b04d07b86ccecd99e09c068 \ - --hash=sha256:fad6fbc154113e3b17bb757c34b21477e4b6d69fdd4ce51ff2b3f29a42f08b5b +chardet==7.6.0 \ + --hash=sha256:089e3bb81a0a07e94f15461ded9f9ee66d349615b1a9fd557d4de1003e2fc12e \ + --hash=sha256:0ad9bc6dab4f338673353fa3f0dc96122f559aaf746087408106e2fcbf132fe8 \ + --hash=sha256:0bdb6f03107b7ace3f44e0edd91aa24456ee558787df265cc19daf45785b31c7 \ + --hash=sha256:0c44a32da32cc8b23d6b20d98ace15ec7600950e4955d1bf5ab1f849b0187fdb \ + --hash=sha256:0f304de7041afaec0195ad6464937cd112392002e9d72ed15d55f20a9abd3a13 \ + --hash=sha256:167d7ba3ee08b654e36d7b43ebd9a36606c9a12e2fabdb361757a095ca3b7e3d \ + --hash=sha256:19fea52164e6e00f2a21ed418f42e4b0162a09199274c86d07ad3efd661317c4 \ + --hash=sha256:249993b88ac7a58cad2781acea8f379152a28a719c9b401d614898c63a8c83da \ + --hash=sha256:271ab71ec1be61dbbce0436de0848895c03eae051c379e937a39573d9ce403d9 \ + --hash=sha256:284136186ff90735f901ed0a1c6d41e7af67c666841cc0eceb58482a21b7056c \ + --hash=sha256:2b5d31f9b7f793e15e81cca877e7ccd72bffffa2a3443a9d47be9dfee84fad69 \ + --hash=sha256:2cf0adaca8b1c4bacfade9d0a1e4f8f70b1bb122833d6f07ab90e3adc84eb13a \ + --hash=sha256:360260d074d8712ac1e9048fcafb0fdde246f9d0b12555748ad0017c5ecee43d \ + --hash=sha256:406936df1328a3284fef366eaa2bfd1cccd0ef1b10cb99781dd5b022ea644b84 \ + --hash=sha256:4076d795897ce45239825956a1334e134322ecc4bfe84dbb12acd5390de0fbc1 \ + --hash=sha256:43ea433e43a23c55e8e17f3fad1e07f5cfe5450c73124b95b0d849c21ad379ee \ + --hash=sha256:459e2b1c98f9a86a4698112aa42dffa802bbbff883c1ff144071f87224125862 \ + --hash=sha256:4b81d3f7d7914442d5f7d515b8c6d79cee6b794bc208971fb6902f176671166a \ + --hash=sha256:55a4c31adc7c7e83ad412f2f66b6b7358d0d4fe67505e7f58e18f68f75d341bb \ + --hash=sha256:57e6846cc13ce1ff59979f4ec9da770c57e12aa99046073f632de5a51d9a6f20 \ + --hash=sha256:5e9b31b9ae93872d66439b046a1e08c2ea99791f3c254dce1e2633e395c5587c \ + --hash=sha256:61238d5945b36af9a2ad13494f8969b7deb3c3b4abe223e54670c064e73f5328 \ + --hash=sha256:6424512f576fa7e88b7431d38a42d57552c8f717465a975fc42e497cd280d833 \ + --hash=sha256:75d6c3a4d2046d49e83d2d2206eb073a1f390743e856d90c1bbc19949b26acf4 \ + --hash=sha256:7b586cab9e9072dddd89bc2bd27ee72808d0c84ec73695fe6ec0f3c46b057c65 \ + --hash=sha256:7bbc8a9652c7f859c593847f220c1d264f25749369abb1a267b404ee8cceb209 \ + --hash=sha256:83512a475a2f3886166aa0bca1bbb39343a4eb3186dd5532127d6f2591d09118 \ + --hash=sha256:8900f6c7cf6b015b17a51767cc6144689059ba1cdceaa383d29eb037ac28579e \ + --hash=sha256:93d9df6089ded42ed1fe9f57e272c0b74bd0464d45c0c7d50f09f26f31105c3c \ + --hash=sha256:a12023d48d0e207791c01161d03cb3c0d85c6a15f345eb9d3d56063a63d1e40f \ + --hash=sha256:a4f0a368ad04d5def08bdfaa17c7e15e71552f93923dc2aa9b2f7d9dee02fbb6 \ + --hash=sha256:aa03322e07ac08d520ec50bb50c73143d0892d1adc067d4c5e58f4ef4b2363a8 \ + --hash=sha256:b3b4c96c4df93899b3c8b9e8159e06b1f55c66d7ca384d91481108e251a06eb0 \ + --hash=sha256:b73f277c1ac09c4f8076c4214b816c7aa78a0a2f0cb7156742f4303f856bedc3 \ + --hash=sha256:c54b6a8d3b219560fa5cf4c28df932c37471afe047afdc152067104e741f38c1 \ + --hash=sha256:c6061adf247ab5dda173b67010e13904c6071717660c7c8077fb50aca362b264 \ + --hash=sha256:cbaca8f563a9de07ab1a53157dba93802e54c26afe3339892afcc7c59ea4ef1b \ + --hash=sha256:cedbc584789eb2edfde20fd03669972a833ce6019e60014ae613f9bfc440e8e3 \ + --hash=sha256:cf6d08c2373b7772a558d141f9e8cee53fe1d222341bac612e4d558b04995f73 \ + --hash=sha256:d5dc835e40e0e09c2c3eab43731a8b5127834f42786dda09ba2f4b699ccd527a \ + --hash=sha256:d6030886e7da2740bf299b6a8cc75b4dcc2c90db0ca8fe0a6e4fd0bfd071dabd \ + --hash=sha256:da86fc1b40ff5996fbb5e4c2d2dca770eac2c893cef157dacc050b8b4d929846 \ + --hash=sha256:dde4080fb6bb8db96e8c44893771bcc0d235f4c22cdddb194a765a65e3a72ba7 \ + --hash=sha256:f14f46ef1977e41ce1f4814ca6984cea7f8b6baf8cbc6626ef7bf3d13cf7ea13 \ + --hash=sha256:f2ec3c78cc6b54bf8e091ec4ee885473078b5d7ef18ab1b01c86ae1e98bf88f7 \ + --hash=sha256:fc1e1571321baf8927582fe34363ad7f02279f11c8c2839c14b4c76894148db6 # via # -c requirements-ci.txt # semantica (pyproject.toml) @@ -415,438 +254,83 @@ charset-normalizer==3.5.1 \ # via # -c requirements-ci.txt # requests -click==8.4.2 \ - --hash=sha256:9a6cea6e60b17ebe0a44c5cc636d94f09bd66142c1cd7d8b4cd731c4917a15f6 \ - --hash=sha256:e6f9f66136c816745b9d65817da91d61d957fb16e02e4dcd0552553c5a197b76 +click==8.5.0 \ + --hash=sha256:255bc9599cf7748b4b1a446ccc735421bd08a2ae529a8b88597d3de5664ee360 \ + --hash=sha256:ba0d2089de75ea0310e2dde03160e6ca10009947fb95a182f9b54021bb272e34 # via # -c requirements-ci.txt # semantica (pyproject.toml) - # huggingface-hub - # spacy # uvicorn -cloudpathlib==0.24.0 \ - --hash=sha256:b1c51e2d2ec7dc4fed6538991f4aea849d6cf11a7e6b9069f86e461aa1f9b5b4 \ - --hash=sha256:c521a984e77b47e656fe78e20a7e3e260e0ab45fc69e33ac01094227c979e34a +cloudpickle==3.1.2 \ + --hash=sha256:7fda9eb655c9c230dab534f1983763de5835249750e85fbcef43aaa30a9a2414 \ + --hash=sha256:9acb47f6afd73f60dc1df93bb801b472f05ff42fa6c84167d25cb206be1fbf4a # via # -c requirements-ci.txt - # weasel -comm==0.2.3 \ - --hash=sha256:2dc8048c10962d55d7ad693be1e7045d891b7ce8d999c97963a5e3e99c055971 \ - --hash=sha256:c615d91d75f7f04f095b30d1c1711babd43bdc6419c1be9886a85f2f4e489417 - # via - # -c requirements-ci.txt - # ipywidgets -confection==1.3.3 \ - --hash=sha256:b9fef9ee84b237ef4611ec3eb5797b70e13063e6310ad9f15536373f5e313c82 \ - --hash=sha256:f0f6810d567ff73993fe74d218ca5e1ffb6a44fb03f391257fc5d033546cbfaa - # via - # -c requirements-ci.txt - # spacy - # thinc - # weasel -contourpy==1.3.3 \ - --hash=sha256:023b44101dfe49d7d53932be418477dba359649246075c996866106da069af69 \ - --hash=sha256:07ce5ed73ecdc4a03ffe3e1b3e3c1166db35ae7584be76f65dbbe28a7791b0cc \ - --hash=sha256:083e12155b210502d0bca491432bb04d56dc3432f95a979b429f2848c3dbe880 \ - --hash=sha256:0bf67e0e3f482cb69779dd3061b534eb35ac9b17f163d851e2a547d56dba0a3a \ - --hash=sha256:0c1fc238306b35f246d61a1d416a627348b5cf0648648a031e14bb8705fcdfe8 \ - --hash=sha256:13b68d6a62db8eafaebb8039218921399baf6e47bf85006fd8529f2a08ef33fc \ - --hash=sha256:15ff10bfada4bf92ec8b31c62bf7c1834c244019b4a33095a68000d7075df470 \ - --hash=sha256:177fb367556747a686509d6fef71d221a4b198a3905fe824430e5ea0fda54eb5 \ - --hash=sha256:1cadd8b8969f060ba45ed7c1b714fe69185812ab43bd6b86a9123fe8f99c3263 \ - --hash=sha256:1fd43c3be4c8e5fd6e4f2baeae35ae18176cf2e5cced681cca908addf1cdd53b \ - --hash=sha256:22e9b1bd7a9b1d652cd77388465dc358dafcd2e217d35552424aa4f996f524f5 \ - --hash=sha256:23416f38bfd74d5d28ab8429cc4d63fa67d5068bd711a85edb1c3fb0c3e2f381 \ - --hash=sha256:283edd842a01e3dcd435b1c5116798d661378d83d36d337b8dde1d16a5fc9ba3 \ - --hash=sha256:2a2a8b627d5cc6b7c41a4beff6c5ad5eb848c88255fda4a8745f7e901b32d8e4 \ - --hash=sha256:2b7e9480ffe2b0cd2e787e4df64270e3a0440d9db8dc823312e2c940c167df7e \ - --hash=sha256:322ab1c99b008dad206d406bb61d014cf0174df491ae9d9d0fac6a6fda4f977f \ - --hash=sha256:33c82d0138c0a062380332c861387650c82e4cf1747aaa6938b9b6516762e772 \ - --hash=sha256:348ac1f5d4f1d66d3322420f01d42e43122f43616e0f194fc1c9f5d830c5b286 \ - --hash=sha256:3519428f6be58431c56581f1694ba8e50626f2dd550af225f82fb5f5814d2a42 \ - --hash=sha256:3c30273eb2a55024ff31ba7d052dde990d7d8e5450f4bbb6e913558b3d6c2301 \ - --hash=sha256:3d1a3799d62d45c18bafd41c5fa05120b96a28079f2393af559b843d1a966a77 \ - --hash=sha256:451e71b5a7d597379ef572de31eeb909a87246974d960049a9848c3bc6c41bf7 \ - --hash=sha256:459c1f020cd59fcfe6650180678a9993932d80d44ccde1fa1868977438f0b411 \ - --hash=sha256:4d00e655fcef08aba35ec9610536bfe90267d7ab5ba944f7032549c55a146da1 \ - --hash=sha256:4debd64f124ca62069f313a9cb86656ff087786016d76927ae2cf37846b006c9 \ - --hash=sha256:4feffb6537d64b84877da813a5c30f1422ea5739566abf0bd18065ac040e120a \ - --hash=sha256:50ed930df7289ff2a8d7afeb9603f8289e5704755c7e5c3bbd929c90c817164b \ - --hash=sha256:51e79c1f7470158e838808d4a996fa9bac72c498e93d8ebe5119bc1e6becb0db \ - --hash=sha256:556dba8fb6f5d8742f2923fe9457dbdd51e1049c4a43fd3986a0b14a1d815fc6 \ - --hash=sha256:598c3aaece21c503615fd59c92a3598b428b2f01bfb4b8ca9c4edeecc2438620 \ - --hash=sha256:5ed3657edf08512fc3fe81b510e35c2012fbd3081d2e26160f27ca28affec989 \ - --hash=sha256:626d60935cf668e70a5ce6ff184fd713e9683fb458898e4249b63be9e28286ea \ - --hash=sha256:644a6853d15b2512d67881586bd03f462c7ab755db95f16f14d7e238f2852c67 \ - --hash=sha256:655456777ff65c2c548b7c454af9c6f33f16c8884f11083244b5819cc214f1b5 \ - --hash=sha256:66c8a43a4f7b8df8b71ee1840e4211a3c8d93b214b213f590e18a1beca458f7d \ - --hash=sha256:6afc576f7b33cf00996e5c1102dc2a8f7cc89e39c0b55df93a0b78c1bd992b36 \ - --hash=sha256:6c3d53c796f8647d6deb1abe867daeb66dcc8a97e8455efa729516b997b8ed99 \ - --hash=sha256:709a48ef9a690e1343202916450bc48b9e51c049b089c7f79a267b46cffcdaa1 \ - --hash=sha256:70f9aad7de812d6541d29d2bbf8feb22ff7e1c299523db288004e3157ff4674e \ - --hash=sha256:8153b8bfc11e1e4d75bcb0bff1db232f9e10b274e0929de9d608027e0d34ff8b \ - --hash=sha256:87acf5963fc2b34825e5b6b048f40e3635dd547f590b04d2ab317c2619ef7ae8 \ - --hash=sha256:88df9880d507169449d434c293467418b9f6cbe82edd19284aa0409e7fdb933d \ - --hash=sha256:929ddf8c4c7f348e4c0a5a3a714b5c8542ffaa8c22954862a46ca1813b667ee7 \ - --hash=sha256:92d9abc807cf7d0e047b95ca5d957cf4792fcd04e920ca70d48add15c1a90ea7 \ - --hash=sha256:95b181891b4c71de4bb404c6621e7e2390745f887f2a026b2d99e92c17892339 \ - --hash=sha256:9e999574eddae35f1312c2b4b717b7885d4edd6cb46700e04f7f02db454e67c1 \ - --hash=sha256:a15459b0f4615b00bbd1e91f1b9e19b7e63aea7483d03d804186f278c0af2659 \ - --hash=sha256:a22738912262aa3e254e4f3cb079a95a67132fc5a063890e224393596902f5a4 \ - --hash=sha256:ab2fd90904c503739a75b7c8c5c01160130ba67944a7b77bbf36ef8054576e7f \ - --hash=sha256:ab3074b48c4e2cf1a960e6bbeb7f04566bf36b1861d5c9d4d8ac04b82e38ba20 \ - --hash=sha256:afe5a512f31ee6bd7d0dda52ec9864c984ca3d66664444f2d72e0dc4eb832e36 \ - --hash=sha256:b08a32ea2f8e42cf1d4be3169a98dd4be32bafe4f22b6c4cb4ba810fa9e5d2cb \ - --hash=sha256:b20c7c9a3bf701366556e1b1984ed2d0cedf999903c51311417cf5f591d8c78d \ - --hash=sha256:b2e8faa0ed68cb29af51edd8e24798bb661eac3bd9f65420c1887b6ca89987c8 \ - --hash=sha256:b7301b89040075c30e5768810bc96a8e8d78085b47d8be6e4c3f5a0b4ed478a0 \ - --hash=sha256:b7448cb5a725bb1e35ce88771b86fba35ef418952474492cf7c764059933ff8b \ - --hash=sha256:ca0fdcd73925568ca027e0b17ab07aad764be4706d0a925b89227e447d9737b7 \ - --hash=sha256:ca658cd1a680a5c9ea96dc61cdbae1e85c8f25849843aa799dfd3cb370ad4fbe \ - --hash=sha256:cbedb772ed74ff5be440fa8eee9bd49f64f6e3fc09436d9c7d8f1c287b121d77 \ - --hash=sha256:cd5dfcaeb10f7b7f9dc8941717c6c2ade08f587be2226222c12b25f0483ed497 \ - --hash=sha256:cf9022ef053f2694e31d630feaacb21ea24224be1c3ad0520b13d844274614fd \ - --hash=sha256:d002b6f00d73d69333dac9d0b8d5e84d9724ff9ef044fd63c5986e62b7c9e1b1 \ - --hash=sha256:d06bb1f751ba5d417047db62bca3c8fde202b8c11fb50742ab3ab962c81e8216 \ - --hash=sha256:d304906ecc71672e9c89e87c4675dc5c2645e1f4269a5063b99b0bb29f232d13 \ - --hash=sha256:e4e6b05a45525357e382909a4c1600444e2a45b4795163d3b22669285591c1ae \ - --hash=sha256:e74a9a0f5e3fff48fb5a7f2fd2b9b70a3fe014a67522f79b7cca4c0c7e43c9ae \ - --hash=sha256:ea37e7b45949df430fe649e5de8351c423430046a2af20b1c1961cae3afcda77 \ - --hash=sha256:f64836de09927cba6f79dcd00fdd7d5329f3fccc633468507079c829ca4db4e3 \ - --hash=sha256:fd6ec6be509c787f1caf6b247f0b1ca598bef13f4ddeaa126b7658215529ba0f \ - --hash=sha256:fd907ae12cd483cd83e414b12941c632a969171bf90fc937d0c9f268a31cafff \ - --hash=sha256:fd914713266421b7536de2bfa8181aa8c699432b6763a0ea64195ebe28bff6a9 \ - --hash=sha256:fde6c716d51c04b1c25d0b90364d0be954624a0ee9d60e23e850e8d48353d07a - # via - # -c requirements-ci.txt - # matplotlib -cuda-bindings==13.3.1 \ - --hash=sha256:04436a9364059c84b8f9636f359eccda1cf814341f5b670c71d80d2f79dbc708 \ - --hash=sha256:120fcc53d57903df529c3486962c56528cba5b7d6c57c99537320ed9922c8b86 \ - --hash=sha256:18c8c167c8907b8f02531ca810534315c458dabef31f7965095619bf647b9202 \ - --hash=sha256:1ab2f74ed65bfef4163ba07a8db16f1085e0729291db12a2423aff84ee8278b8 \ - --hash=sha256:2732904099e0a4d4db774a5fc6d91ee95fae065b4d2ecabb4968c5fe2406c9d7 \ - --hash=sha256:36febb7c1079d68a981dbbd8d5a67235b399802b82075c9388624719607e52b9 \ - --hash=sha256:507b0e19e7f934c5e30f30f0244ad70a75812619a7d3a0d742543caae1bd50f1 \ - --hash=sha256:61120b5e4f4a63f67efd7e7396914cb9ef871bb1f0021e990fb70277be240a4d \ - --hash=sha256:8de12ef60bf40756852cb62bbb40460609269f6ece522903d1cc93d73a3ececb \ - --hash=sha256:9851b0caa8bfd3bc6fa054eaf57bea7c8e9c3a62db2d2621224677f49f3c53d0 \ - --hash=sha256:9efb21c1ee64981e184b9e0ba5eb3179e5ba3d4b51665a6cb52b8ef3d01a7cbf \ - --hash=sha256:b134dd8c5c66ae4c4ad814f7aee88fd215353c077010cbc47e3b55ed35ec9eff \ - --hash=sha256:c0c4b1a995098c46695c24257a342dc97d6e6d3f3050b944c9f43bd26d734051 \ - --hash=sha256:c3c772dfff49681541d59630c90f858e173ac926b9c593a2b7123f2a1043cc76 \ - --hash=sha256:c5879712accf6e14bb01aa5e67440eb84998b8d104b509cc7a6dc0b8f656a474 \ - --hash=sha256:c7855c4868aabc0cfae28abbe83d56734bdfbd08f08fc234ac1912a12858bf49 \ - --hash=sha256:e32d08f71ebcdf00f0f41eab2eb37e8da94c8ed411cc9f7f7a019ce6b34abe3a \ - --hash=sha256:efd4c814d311ec08c981f6dded1dbe7d4b371067ee4f6c14cccec4bde9590f80 - # via - # -c requirements-ci.txt - # torch -cuda-pathfinder==1.6.0 \ - --hash=sha256:1503af579d8379c24bdd65528379bc57039b0455be9f5f9686cf8e473a1fce51 - # via - # -c requirements-ci.txt - # cuda-bindings -cuda-toolkit==13.0.3 \ - --hash=sha256:d693caaa261214ddd7dbb60d68e71cbed884e68c2be7509778f3051da0b91c3f - # via - # -c requirements-ci.txt - # torch -cycler==0.12.1 \ - --hash=sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30 \ - --hash=sha256:88bb128f02ba341da8ef447245a9e138fae777f6a23943da4540077d3601eb1c - # via - # -c requirements-ci.txt - # matplotlib -cymem==2.0.13 \ - --hash=sha256:03cb7bdb55718d5eb6ef0340b1d2430ba1386db30d33e9134d01ba9d6d34d705 \ - --hash=sha256:042e8611ef862c34a97b13241f5d0da86d58aca3cecc45c533496678e75c5a1f \ - --hash=sha256:0d78a27c88b26c89bd1ece247d1d5939dba05a1dae6305aad8fd8056b17ddb51 \ - --hash=sha256:0dca715e708e545fd1d97693542378a00394b20a37779c1ae2c8bdbb43acef79 \ - --hash=sha256:1366c7437a209230f4b797fae10227a8206d4021d37c9f9c0d31fd97ea4feb35 \ - --hash=sha256:1710390e7fb2510a8091a1991024d8ae838fd06b02cdfdcd35f006192e3c6b0e \ - --hash=sha256:1775d3fd34cf099929b79c3e48469283642463f977af6801231f3c0e5d9c9369 \ - --hash=sha256:18ad5b116a82fa3674bc8838bd3792891b428971e2123ae8c0fd3ca472157c5e \ - --hash=sha256:1c91a92ae8c7104275ac26bd4d29b08ccd3e7faff5893d3858cb6fadf1bc1588 \ - --hash=sha256:2fae4a29a36267772010a05ca85220e53f4fb3e1083d4f686342d8a3cc7620db \ - --hash=sha256:2ff1c41fd59b789579fdace78aa587c5fc091991fa59458c382b116fc36e30dc \ - --hash=sha256:30c4e75a3a1d809e89106b0b21803eb78e839881aa1f5b9bd27b454bc73afde3 \ - --hash=sha256:38aefeb269597c1a0c2ddf1567dd8605489b661fa0369c6406c1acd433b4c7ba \ - --hash=sha256:45dcaba0f48bef9cc3d8b0b92058640244a95a9f12542210b51318da97c2cf28 \ - --hash=sha256:52b76216c59e0078cebd988754426c41ee60e7c972f4c5185ac32fbd53b6d035 \ - --hash=sha256:666ce6146bc61b9318aa70d91ce33f126b6344a25cf0b925621baed0c161e9cc \ - --hash=sha256:673183466b0ff2e060d97ec5116711d44200b8f7be524323e080d215ee2d44a5 \ - --hash=sha256:68489bf0035c4c280614067ab6a82815b01dc9fcd486742a5306fe9f68deb7ef \ - --hash=sha256:6bbd701338df7bf408648191dff52472a9b334f71bcd31a21a41d83821050f67 \ - --hash=sha256:6d36710760f817194dacb09d9fc45cb6a5062ed75e85f0ef7ad7aeeb13d80cc3 \ - --hash=sha256:717270dcfd8c8096b479c42708b151002ff98e434a7b6f1f916387a6c791e2ad \ - --hash=sha256:742fc19764467a49ed22e56a4d2134c262d73a6c635409584ae3bf9afa092c33 \ - --hash=sha256:7700b116524b087e0169f10f267539223b48240ef2734c3a727a9e6b4db9a671 \ - --hash=sha256:7a8d404a48af953084fcec4239487ab05e14b829da251628827d51c87880aeb8 \ - --hash=sha256:7e1a863a7f144ffb345397813701509cfc74fc9ed360a4d92799805b4b865dd1 \ - --hash=sha256:8431347901026e9b554daeb982f5f1ecf3780ce46435c7a8e0cb82490e58f13c \ - --hash=sha256:84c1168c563d9d1e04546cb65e3e54fde2bf814f7c7faf11fc06436598e386d1 \ - --hash=sha256:84e2976e38cd663f758e40b5497fa5cd183d7c5fb0d04ce81a4b42a1ba124ff0 \ - --hash=sha256:891fd9030293a8b652dc7fb9fdc79a910a6c76fc679cd775e6741b819ffea476 \ - --hash=sha256:89c4889bd16513ce1644ccfe1e7c473ba7ca150f0621e66feac3a571bde09e7e \ - --hash=sha256:8efc4f308169237aade0e82877a65a563833dec32eb7ab2326120253e0e9e918 \ - --hash=sha256:90c2d0c04bcda12cd5cebe9be93ce3af6742ad8da96e1b1907e3f8e00291def1 \ - --hash=sha256:92a2ce50afa5625fb5ce7c9302cee61e23a57ccac52cd0410b4858e572f8614b \ - --hash=sha256:9d441d0e45798ec1fd330373bf7ffa6b795f229275f64016b6a193e6e2a51522 \ - --hash=sha256:a84ba3178d9128b9ffb52ce81ebab456e9fe959125b51109f5b73ebdfc6b60d6 \ - --hash=sha256:a868c1e3fe4f6f51232883b7bee7319a35e36644604577f4c6032cf957b9056b \ - --hash=sha256:a9150be2896fbe0096911bc9138a54e6fcc3814f197bc0c3d64d7c005a5e579d \ - --hash=sha256:ac699c8ec72a3a9de8109bd78821ab22f60b14cf2abccd970b5ff310e14158ed \ - --hash=sha256:bc116a70cc3a5dc3d1684db5268eff9399a0be8603980005e5b889564f1ea42f \ - --hash=sha256:bee2791b3f6fc034ce41268851462bf662ff87e8947e35fb6dd0115b4644a61f \ - --hash=sha256:c0046a619ecc845ccb4528b37b63426a0cbcb4f14d7940add3391f59f13701e6 \ - --hash=sha256:c16cb80efc017b054f78998c6b4b013cef509c7b3d802707ce1f85a1d68361bf \ - --hash=sha256:c3ff57aec4f264451739b18b7eab9d161d51af42b570ca0392fc051dcca28cb1 \ - --hash=sha256:c8dbfddfe5c604974e17c6f373cedd4d25cd67f84812ede7dea12128fa0c2015 \ - --hash=sha256:c8f30971cadd5dcf73bcfbbc5849b1f1e1f40db8cd846c4aa7d3b5e035c7b583 \ - --hash=sha256:c90a6ecba994a15b17a3f45d7ec74d34081df2f73bd1b090e2adc0317e4e01b6 \ - --hash=sha256:c9251d889348fe79a75e9b3e4d1b5fa651fca8a64500820685d73a3acc21b6a8 \ - --hash=sha256:ce821e6ba59148ed17c4567113b8683a6a0be9c9ac86f14e969919121efb61a5 \ - --hash=sha256:d1c950eebb9f0f15e3ef3591313482a5a611d16fc12d545e2018cd607f40f472 \ - --hash=sha256:d2a4bf67db76c7b6afc33de44fb1c318207c3224a30da02c70901936b5aafdf1 \ - --hash=sha256:d670329ee8dbbbf241b7c08069fe3f1d3a1a3e2d69c7d05ea008a7010d826298 \ - --hash=sha256:d8d06ea59006b1251ad5794bcc00121e148434826090ead0073c7b7fedebe431 \ - --hash=sha256:e02d3e2c3bfeb21185d5a4a70790d9df40629a87d8d7617dc22b4e864f665fa3 \ - --hash=sha256:e03bb575a96c59bc210d7d59862747f0012696b0dac3427ce8af33c7afb3d4a2 \ - --hash=sha256:e8afbc5162a0fe14b6463e1c4e45248a1b2fe2cbcecc8a5b9e511117080da0eb \ - --hash=sha256:e9027764dc5f1999fb4b4cabee1d0322c59e330c0a6485b436a68275f614277f \ - --hash=sha256:e96848faaafccc0abd631f1c5fb194eac0caee4f5a8777fdbb3e349d3a21741c \ - --hash=sha256:ec99efa03cf8ec11c8906aa4d4cc0c47df393bc9095c9dd64b89b9b43e220b04 \ - --hash=sha256:ed9de1b9b042f76fe5c312e4359eab58bf52ac7dfdf6887368a760410d809440 \ - --hash=sha256:f190a92fe46197ee64d32560eb121c2809bb843341733227f51538ce77b3410d \ - --hash=sha256:f3aee3adf16272bca81c5826eed55ba3c938add6d8c9e273f01c6b829ecfde22 \ - --hash=sha256:fb8291691ba7ff4e6e000224cc97a744a8d9588418535c9454fd8436911df612 \ - --hash=sha256:fe5424b38f61709b046df2ba7a6d7b54272ee1e2a2c56772d9cd309e4c1ea5ef \ - --hash=sha256:fece5229fd5ecdcd7a0738affb8c59890e13073ae5626544e13825f26c019d3c \ - --hash=sha256:ff036bbc1464993552fd1251b0a83fe102af334b301e3896d7aa05a4999ad042 - # via - # -c requirements-ci.txt - # preshed - # spacy - # thinc -decorator==5.3.1 \ - --hash=sha256:4cbcdd55a6efadb9dbea26b858f4fb3264567b52d69ca0d25b721b553f60ea82 \ - --hash=sha256:f47fe6fdbd2edd623ecfe36875d37aba411624e2670dd395dddae1358689bb3c - # via - # -c requirements-ci.txt - # librosa + # joblib defusedxml==0.7.1 \ --hash=sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69 \ --hash=sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61 # via # -c requirements-ci.txt # semantica (pyproject.toml) -et-xmlfile==2.0.0 \ - --hash=sha256:7a91720bc756843502c3b7504c77b8fe44217c85c537d85037f0f536151b2caa \ - --hash=sha256:dab3f4764309081ce75662649be815c4c9081e88f0837825f90fd28317d4da54 - # via - # -c requirements-ci.txt - # openpyxl -executing==2.2.1 \ - --hash=sha256:3632cc370565f6648cc328b32435bd120a1e4ebb20c77e3fdde9a13cd1e533c4 \ - --hash=sha256:760643d3452b4d777d295bb167ccc74c64a81df23fb5e08eff250c425a4b2017 - # via - # -c requirements-ci.txt - # stack-data -faiss-cpu==1.15.0 \ - --hash=sha256:22dddb013e764aad66dac6cd15b49c7598d60339e0591b73b5e081629419c21b \ - --hash=sha256:30da3029952f0de69f16ce31946fd63fc3e292c867749bbcd2c0a0f09fd06f65 \ - --hash=sha256:37170d5e9ead4b6bfd9c314afc39e17e92064068a0c5a4063dd3f39568c2667e \ - --hash=sha256:50ea471ef1f4f3580eda8ab0ec9727d4bf65fd71c444bf306ce7cdbba8a42b21 \ - --hash=sha256:5b940897b317febaa761088513a3db164fad3ac71a5e1ed7be9a052c9bf1a447 \ - --hash=sha256:5d0a2d5d33fe023e263d0d355a837f20db67578e3be27fc5f4012a273274abf6 \ - --hash=sha256:88fbe1acac6978869063cb2f9477f85718da596a6e0a17751618f9c756bce255 \ - --hash=sha256:90169515a95ea58a9a95d419e518907927a8ef54c46788396365ec5902c9c8df \ - --hash=sha256:dd383bb1ce06fabcff5785f998f253aa88f88dcbe1fe36c922417cd6666dd896 \ - --hash=sha256:e0fe7278f3784b7d205ae715a115801cafb75f6e55db6b0fbe83c4ff379f003f \ - --hash=sha256:ec9b29aae29e428c085c2d49dbb02e4673cdea75db418d420f9e60e0b4184498 - # via - # -c requirements-ci.txt - # semantica (pyproject.toml) fastapi==0.141.1 \ --hash=sha256:bfb91aa2d334c61cb35ba9a116fc123b3d3df31640b801cf57a7a78ec3f603b3 \ --hash=sha256:e8822fc40db1e1858054d7a949a888695bc9bdce70139178e33bd2871a453ca1 # via # -c requirements-ci.txt # semantica (pyproject.toml) -fastembed==0.8.0 \ - --hash=sha256:40bee672657574a1009e35ec50030a55f2b426842cb011845379817641bbbbd0 \ - --hash=sha256:75966edfa8b006ee78514c726bd7f6a50721dadc89305279052be9db72fd53e8 - # via - # -c requirements-ci.txt - # semantica (pyproject.toml) -filelock==3.32.2 \ - --hash=sha256:87dd94cf281e586d135fa51132b8e3d9a598b316e90377a288663c9321036c82 \ - --hash=sha256:c33351e1f49cae33414acbc6d56784e6ecee82514ec90795da1161fc4836b5b8 - # via - # -c requirements-ci.txt - # huggingface-hub - # torch -flatbuffers==25.12.19 \ - --hash=sha256:7634f50c427838bb021c2d66a3d1168e9d199b0607e6329399f04846d42e20b4 - # via - # -c requirements-ci.txt - # onnxruntime -fonttools==4.63.0 \ - --hash=sha256:032038247a96c1690f9f31e377c389383c902531b085aa4e4dabd6f57f870e69 \ - --hash=sha256:063e08bd17bd5a90127a14123de0d6a952dbc847695fd98b63c043d58057f90c \ - --hash=sha256:0c18358a155d75034911c5ee397a5b44cd19dd325dbb8b35fb60bf421d6a72ac \ - --hash=sha256:0eac00b9118c3c2f87d272e45341871c5b3066baa3c86897fa634a7c3fb59096 \ - --hash=sha256:1e874792a8212b44583ea02189d9e693906b2f78b261f372f95d6c563210ac1d \ - --hash=sha256:22135da48a348785c5e2d5d2d9d6bec5ed44adacbaeb9db12d9493bf6c6bfa68 \ - --hash=sha256:22693918177bd9ceabec4736d338045f357769416fc6b0b2508eefef75b08616 \ - --hash=sha256:27fdc65af8da6f88b9c6121c47a464cbe359fcfff7ff6fc2d37a1f395d755b78 \ - --hash=sha256:2b8ae05d9eacf6081414d759c0a352769ac28ce31280d6bb8e77b03f9e3c449f \ - --hash=sha256:2c14b4fd138c4bafcca294765c547914e1aa431ae1ca94ab99d8db08c958bd3b \ - --hash=sha256:308f957cdeaf8abe4e5f2f124902ef405448af92c90f80e302a3b771c2e6116b \ - --hash=sha256:37dd23e621e3b0aef1baa70a303b80aaf38449632cfc8fd2a55fb285bbccfc02 \ - --hash=sha256:445af2eab030a16b9171ea8bdda7ebf7d96bda2df88ee182a464252f6e05e20d \ - --hash=sha256:51394295f1a51de8b5f30bdb1e1b9a4231536c7064ef5c6e211eec19fa36036f \ - --hash=sha256:58dc6bb86a78d782f00f9190ca02c119cf5bbe2807536e361e18d42019f877d8 \ - --hash=sha256:59ac449f8cca9b4ffa08d2e7bbadad87ce710d69d1eda5c3c1ce579baa987272 \ - --hash=sha256:6b2248c5decb223562f7902ff6325077a073f608ee8e33e88ad88db734eb9f49 \ - --hash=sha256:6d4741eb179121cab9eea4cb2393d24492373a260d7945006358c08cfbf45419 \ - --hash=sha256:6db5140a60a5d731d21ec076745b40a310607731b0a565b50776393188649001 \ - --hash=sha256:6e528da43bc3791085f8cb6141b1d13e459226790240340fcbb4625649238b03 \ - --hash=sha256:796f27556dbe094c4824f75ca85267e4df776c79036c8441469a4df37038c196 \ - --hash=sha256:79cdc9f567aec74a72918fd060283911406750cbc9fd28c1316023deb6ce31a9 \ - --hash=sha256:7d76edbff9014094dbf03bd2d074709dfa6ec7aba13d838c937a2b33d2d6a86e \ - --hash=sha256:7d782fac32985914c351556f68ac0855391572bcd87de50e05970d3cd4c96fc5 \ - --hash=sha256:7dd683fef0663e9f0f45cf541d788d24caa3ec9db50796b588e1757d8b3bc007 \ - --hash=sha256:85be818f5506e8a7753153def2c9550178f0ecae6a47b5e0e8dbb23f7cc90380 \ - --hash=sha256:948428a275741f0b64b113c955425a953314f4b9ab9997f73a72c83e68e569c8 \ - --hash=sha256:9ced0bd02ac751dd6319b0da88aaef24414e3b0dbc32bb4f24944821a3741a27 \ - --hash=sha256:9e12f105d2b6342c559c298afb674006bb2893afc7102dcf8a1b55b0486b4e40 \ - --hash=sha256:a8b33a82979e0a6a34ff435cc81317be1f95ec1ebb7a3a2d1c8a6a54f02ae44e \ - --hash=sha256:a9faff9e0c1f76f9fd55899d2ce785832efebab37eb8ae13995853aef178bef0 \ - --hash=sha256:af2fd1664d00a397d75f806985ddb36282091c2131a73a6485c23b4a34722263 \ - --hash=sha256:afefc1ed0a59785a7fb06ea7e1678e849c193e1e387db783579bc7b3056fcfcb \ - --hash=sha256:b1cd75a03ad8cb5bc40c90bfde68c0c47de423aa19e5c0f362b43520645eea94 \ - --hash=sha256:ba04cb5891d4c0c21b6da95eda8d7b090021508a294fff33464fc7d241e0856b \ - --hash=sha256:bf00f21eb5fb721dbaf73d1e9da6d02a1af7768f2ebcf9798be98beab8ba90f6 \ - --hash=sha256:c0425b277a59cff3d80ca42162a8de360f318438a2ac83570842a678d826d579 \ - --hash=sha256:c1aaa4b9c75798400ac043ce04d74e7830376c85095a5a6ed7cba2f17a266bf4 \ - --hash=sha256:c2a2a42198b696a6f48fad91709afb55176e66a5e566131219dba372fb7f8c59 \ - --hash=sha256:caeb583deeb5168e694b65cda8b4ee62abedfa66cf88488734466f2366b9c4e0 \ - --hash=sha256:cb014d58140a38135f16064c74c652ed57aa0b75cbf8bb59cac821f7edb5334e \ - --hash=sha256:ccf41f2efdf56994d22d73bef4ced1052161958169428d06ba9724ea9e9a64be \ - --hash=sha256:cd7e9857e5e63738b9d9fd707bc1f59c8b09e5177726d23664db393c59bb08bd \ - --hash=sha256:d76ac49f929aecaf82d83250b8347e099d7aecba0f4726c1d9b6df3b8bb5fe18 \ - --hash=sha256:d7e5c9973aa04c95650c96e5f5ad865fbf42d62079163ecfab1e01cbc2504c22 \ - --hash=sha256:dcf076a4474fe0d7367e5bbf5b052c7284fa1feca729c04176ce513521afd8a0 \ - --hash=sha256:e3297a6a4059b4acc3a1e9a8b04741f240a80044eef08ebd32e8b5bcdddce75b \ - --hash=sha256:ee08ebfa58f6e1aeff5697ab9582105bb620008c1caafb681e4c557e7483027b \ - --hash=sha256:ef3048ef05dbb552b89817713d9cac912e00d0fde4a3105c00d29e52e10c89af \ - --hash=sha256:fd1e3094f42d806d3d7c79162fc59e5910fcbe3a7360c385b8da969bc4493745 - # via - # -c requirements-ci.txt - # matplotlib -fsspec==2026.7.0 \ - --hash=sha256:b57ddbafedfaef7018c1ecab32aa200a9d7ca26b77965f64e48b70061249d279 \ - --hash=sha256:c803c40f4cf860b49dea58ee3e1c33cb9c790520e233537e1340049f89b82a88 - # via - # -c requirements-ci.txt - # huggingface-hub - # torch -gensim==4.4.0 \ - --hash=sha256:05a027238b5eb544a17afe73ec227d6a7e0c6b4e2108b1131c0b8f291a0e0e2e \ - --hash=sha256:06704acd354728262f9f32a9435c70945930f8d11b58531b3cb5c699f4757ad4 \ - --hash=sha256:0845b2fa039dbea5667fb278b5414e70f6d48fd208ef51f33e84a78444288d8d \ - --hash=sha256:120d58351f67ef38f3b102a724fb2ece298b20a06fbeae02797f18c1087591ca \ - --hash=sha256:1853fc5be730f692c444a826041fef9a2fc8d74c73bb59748904b2e3221daa86 \ - --hash=sha256:23a2a4260f01c8f71bae5dd0e8a01bb247a2c789480c033e0eaba100b0ad4239 \ - --hash=sha256:3bec3e6a1ecaa6439b21a3e42ceb0ca67ffabc114b646f89b1aab5fe69a39ffc \ - --hash=sha256:484286ff973c77d262776e44e0bc3b958331b7b0f5d61f83014f6cc12f1a814f \ - --hash=sha256:4b73ff30af6ddd0d2ddf9473b1eb44603cd79ec14c87d93b75291802b991916c \ - --hash=sha256:54a32a196502bf0e376cd7ef935be97f7ca96cc0f90ee9514d48406b7bd21bad \ - --hash=sha256:59d0d29099a76dd97d4563e002f3488a43e51f99d46387025da38007ebfeeff9 \ - --hash=sha256:5c4d8f2a5e69bc246931dfd8e03d0ce3f3bcf82adbbdbcf20dfc35c43b8e1035 \ - --hash=sha256:5e2c1d584d1c7d16b2a0fe7d2f6f59a451422df7b5edb7e3ca46c8e462782127 \ - --hash=sha256:6ecb7aed37fb92d24e15a6adbabe693074003263db0fd9ce97c9f4234a9edc1b \ - --hash=sha256:724b93c9b6e92cd15837048c71b7fdd38059276c85dd1f9c0375576f0aea153f \ - --hash=sha256:7590e7313848ca8f3ff064898bcd6ecf6ec71c752cf4d3ec83f7ac992bc7c088 \ - --hash=sha256:7e110e2d3533f5b35239850a96cb2016a586ecd85671d655079b3048332b7169 \ - --hash=sha256:9033b18920b7774e68eafacdbd87252ffa29382ec465ddb88bd036e00fc86365 \ - --hash=sha256:91a7fa5e814e7b1bad4b2dffa8d62c1e55410d5cbdf930714c1997ffb4404db8 \ - --hash=sha256:a3f5b626da5518e79a479140361c663089fe7998df8ba52d56e1ded71ac5bdf5 \ - --hash=sha256:b3a3f9bc8d4178b01d114e1c58c5ab2333f131c7415fb3d8ec8f1ecfe4c5b544 \ - --hash=sha256:b8961b7a2bb5190b46bc6cd26c29d5bfea22f99123ed5f506ebd0aaf65996758 \ - --hash=sha256:d56613fcb77d4068c1be845843508dcd9d384ede34700a61bbeac32b947d1fc3 \ - --hash=sha256:de863f72b97ee142e7ce1c28da8f8e5473b76064ecbfe139da62127f46ab5c07 \ - --hash=sha256:e29a2109819fdf5ff59bef670c8c22c1690d52239fe172b43e408908871de5f6 \ - --hash=sha256:f0977e5e5df03f829f322662e37ac973b93272c526f1432f865d214c0b573f98 - # via - # -c requirements-ci.txt - # semantica (pyproject.toml) -gitdb==4.0.12 \ - --hash=sha256:5ef71f855d191a3326fcfbc0d5da835f26b13fbcba60c32c21091c349ffdb571 \ - --hash=sha256:67073e15955400952c6565cc3e707c554a4eea2e428946f7a4c162fab9bd9bcf - # via - # -c requirements-ci.txt - # gitpython -gitpython==3.1.59 \ - --hash=sha256:0a1475cfdc38a5bfba1a3e9a4a9da52a39749ecec322b772915c019f94e5b7e4 \ - --hash=sha256:67a82f537384578643624c8b2c531938a9b82be431663e575dcf638526631d4c - # via - # -c requirements-ci.txt - # semantica (pyproject.toml) -grpcio==1.83.0 \ - --hash=sha256:009667eaf3dcd5224c713589cdc98e7ca4ed0ff0b61132c6b276e930eb83a2df \ - --hash=sha256:10b3fa0475eb572c9a81a6fe37fa16a9c500c0c91cfc148cac15692b7e3c2867 \ - --hash=sha256:1aa567f8c3f19850ffd5d2858c9a8ea7c80f0db6c01186b71eb31e923ec984f5 \ - --hash=sha256:1c699bbb20f143c8f2bff219de578aa2dc1f919399d67dc702b038b986ee62df \ - --hash=sha256:28f6c35ac8fcf10e4594f138e468f194360089dde40d126a7033e863fc479930 \ - --hash=sha256:2b5e75c34842cd9c1b95285ca395c6a569664b81e3ffa6b714125922942abaaf \ - --hash=sha256:2bb48cb5e6dd005ca12b89ce4b6ac0b48ff3112c747542ee7986ef611a8ca6d9 \ - --hash=sha256:32e11c37f5285b0c6fa3042c05fe06903696689749833fc64e67dec71b9bbe33 \ - --hash=sha256:33898e6a28e4ae598f1577cb1c4fec2a15c033d0ec52b9b45a09610dd045b9da \ - --hash=sha256:35a5b1c192496b6c25956eebfa963468935612206fd2543ac3ce981e6a5e0f03 \ - --hash=sha256:3f351629f6ae16ecc0ec3553e586a6763ffd9f6114044286d0cbec3e09241bfa \ - --hash=sha256:4772402f43517b4824980be4b3b2274a81eec0004a70009473c31b340d43e223 \ - --hash=sha256:4e3eedfc92b6b9f2960115e7e620cf0cbf80bb7849a51ce3820dc54dfd88b6b9 \ - --hash=sha256:4fcaa7c45c45b4a89e2867d1f1785d9481a788399d915e341ed2eb49aeef9dd4 \ - --hash=sha256:5882c1a721b50ce0123ee5e839e1ab059ad72a7ade76cdf2d5bd833b56791acf \ - --hash=sha256:5f20a988480b0f28207f057f7f7ae1313393c3cef0adcfeae8248f9947eaf881 \ - --hash=sha256:61007cd08640abc5c54547ee32505474c482cd733a53cb87551ea81faa6350af \ - --hash=sha256:62003babc444a606dcd1f009cd16391ce23669ae4ad6ec267a873da7937a69f5 \ - --hash=sha256:6662f3b1e07cc7493d437351860dc867bddc6a93c83ecf33bbfdaf0c217ab2d0 \ - --hash=sha256:6755ed67cc3e454d51ae9f6e1915b80d3942fa4de956ef48dacd45ab7f40b727 \ - --hash=sha256:6b6c666a1d5613ff360c9e90f44665e3a88b25a815209ddbc0917eec281931cb \ - --hash=sha256:6be5c807b717be3dd649446f021301fd7907e376318675d2147823071034112a \ - --hash=sha256:6e01ecd9d8ef280abe1365138a4dc318f9a5287f4cb1b41d07816f796653f735 \ - --hash=sha256:6fb8a1dd0c6f0f931e69e9d0dc6d1c406ed2a44fa963414eafba07b7fb685d16 \ - --hash=sha256:7416952ca770477990257206276999056f8316d79196f2f25942393e58a20b49 \ - --hash=sha256:74fe6f9e8a35c7dbf32255ee154d15e3e5338a81ed39173d079d594d2e544cd1 \ - --hash=sha256:7674587248fbbb2ac6e4eecf83a8a0f3d91a928f941de571acfd3a2f007fbc24 \ - --hash=sha256:7936f2a56cf04f6514705c0fedf400971de01b6aa1719327e4718f410a765e2b \ - --hash=sha256:7bd82671b39065ba18cd536e9cd45b27ff649053f81ddd2c6a966d595067080f \ - --hash=sha256:8f6c395e493d20c39b29392ca200e9aaeb78d0bc2f04db0c0a7da7ddc939aa57 \ - --hash=sha256:8fe04f1050a59f875601eb55d42b4f66946fe89817f967e34db1462ccd07dadf \ - --hash=sha256:8ff0b8767ddd62704e0d9571c1890af08d84a3a689ebba1807e62519d0b3277f \ - --hash=sha256:a21cb4eeeba124443f399be2e8b624943cde864dcbe588cb42e5c483a52a906c \ - --hash=sha256:aa074041231f03959cb097dd5517b0677b8ea49215bae01d5710a7b69dd59969 \ - --hash=sha256:aeb339838db07600481ef869507279b75326c75eac6d10f7afa62a0da1d2bcdd \ - --hash=sha256:b0a0be840e51b6b7ee9df9269770faf77bdf4b771053c257c21d12bad607714c \ - --hash=sha256:bb669918fd88936b15599caff4160a77ab74bdeb25f2231f6e45b61282d6107b \ - --hash=sha256:bc60215b5cb9fc8ca72942c498b551ac2305bd08f6ef8d4e3f0d21b64fbecd61 \ - --hash=sha256:c19b454d3d3f28db81f2c7c4dbaee96e7f6fd149721733ffe79d6bc530f17404 \ - --hash=sha256:c6444666317338e903093c7c756e6cc88eee59f798cb8dd41e87725bf54e1617 \ - --hash=sha256:c834e86d8fd2f03d7e4db49a027f7c5b89c5b88eed305543a5295bd6fee61e40 \ - --hash=sha256:cb056f6e171c42639a50460b2929c82241fda51f71cf3dcdd68090fe45095a45 \ - --hash=sha256:cb2906c61db4f9c64cc360054b5df70eeb81846228e9e56a4944bd415a63dadc \ - --hash=sha256:d05ff664100d429335b93c91b8b34ddf9e94a112205e7fa06dede309e44a4e4c \ - --hash=sha256:ee94a4016fdf8699fb1fd8a38652475ff677f1c72074cee44deeeb9a7e95e745 \ - --hash=sha256:f1c3e5689d4b90987b1d72022bcfe866a9a3dc66197484cf856d96b6150e7f45 \ - --hash=sha256:f47d62808b4c0a97b78bff88a6d4ca283a2a492b9a04a87d814af95ca3b9c19c \ - --hash=sha256:f4cee5fc86e84a0cf7ad1574b454c3320e087c07f55b7df5dc0ac6a873fb90c0 \ - --hash=sha256:f5e822a7e7d03282f6ad225e710493c48b9057a353358344a5f7c42b2b37618d \ - --hash=sha256:f5f410d7c2903eabb34789dfd6342eef04af1ad459943936b7e09a9f5bd417b9 \ - --hash=sha256:fba099b716e73512d61b97f71ea3c31a72abb36904036e316bf4dd148ca8dcc8 +grpcio==1.83.1 \ + --hash=sha256:0468b627f2987c9a77f7580030207cbd85457ffe52998beff4f0b5c38c58a72c \ + --hash=sha256:05ba265193fbd9f63355311ec7567bba32a72aeb8e9fd7b3443e4fcad87b0750 \ + --hash=sha256:0d07661944477517b12a239e18720c8d9038f80a62f2c56260fae80327f43d2a \ + --hash=sha256:0f736f8359cf7cb8d0914a290999765a4342b0c35f01adc6e3ba24598f9d62b7 \ + --hash=sha256:145b0050d24eb38accd9dc7ae09a3c09b8e7330159f3cfb46b1dba8711d50c42 \ + --hash=sha256:16138031a47b771860a16a975b53087f4fd5bbdbb2c03a188c5d90ad65d2bdae \ + --hash=sha256:179368d9361854616ce6f397d4716e07480129652752fcbcfc5a7260455ad6f2 \ + --hash=sha256:1fea1ae4795d4790579995a4dd5e20e7494d358e29a340e8368dab9723264328 \ + --hash=sha256:20d944d967843f8183f9f23d5916388362e5f8eeeae855bbe4354d906dc9f31b \ + --hash=sha256:2110059146fb0ea216e1ffddb29377b5cc2fd412a5b0a92e102616bd5edf18c2 \ + --hash=sha256:215cec07d11176507387bda4bf2751816e880f9bff8dc1ca524bfbb8ed8f2fad \ + --hash=sha256:2a141f7bfc1601a0942405a8af6334ab21ba1dd0fa49b8427686df7beebd374d \ + --hash=sha256:2e57af456385491a76e13c4aada8c8f43a8e47051e06ea97a9dbe2a49654e6db \ + --hash=sha256:34f1841fc6d1d76f8a2d74177eafa2d1ec7d7e039633488c9fcc1b375a1fc165 \ + --hash=sha256:47e6934ad38779271e2e7cc5f78a63a407cf3d98114c65c1fdbcd3f5a716f29b \ + --hash=sha256:4910b62f7d12197160bfb7de06d876d64dd12d43483e8292f98f49ca09b628d9 \ + --hash=sha256:4e7c1468cf37cca17ab18bc8072901eed8daeb81685589ccd07988e5a750ee67 \ + --hash=sha256:547645f02499c972f3edec9be4db9997f1d03df307c1c199772342ed6d8b3c6d \ + --hash=sha256:55656318d5dd387077396dffb929171ca3966e24bfead9a6c5dba9f889062cb4 \ + --hash=sha256:583bf2e8255040a4a312f9572dfe62a05271437b149550e1a536d5c47d2d1e8a \ + --hash=sha256:5acd14c6ddf047de62cbf8745b11103ea91abbf57d1b8edd5395ccd9fcd13abb \ + --hash=sha256:5ccc26715fd4defca5e129e280dd883b1737b65045ec50ffe22ce42104089519 \ + --hash=sha256:5cce1d9fe2887239f054dc9c314597e04f33d2e6bd3150a91c4946d7e5be5d98 \ + --hash=sha256:623c87c6d4a1cb30d82c4e896f95477050f2e01b4a1f8cf91ff2b1abdf89c457 \ + --hash=sha256:65c5a7210911ffe0f67b1cdc5308f9854b6d1f1b345e3e49ab7cac1ba50fa346 \ + --hash=sha256:72578aa07a4008f17521ef52debcc3acfd1e2c5426243bc3ffb56a38bfe610b7 \ + --hash=sha256:7b94174cbca93316888f805efbeb08f1c020f7b7493d2d50cc4f6b64ebb7e8bd \ + --hash=sha256:7d43e3bd2b7d749c2dbd41c2cc83d550c3343d299a19acbbba9e37ad8c11fa8e \ + --hash=sha256:81bbf35a46bf8cad2dfbb2eccc19c711befb58b288acb534bbcd0d74283202a6 \ + --hash=sha256:8b3c87ca908296bf125f841d3e1a2225a2b39aaa8ed7a57e7ccde465ee519bab \ + --hash=sha256:8d228e253b77865efcbdd7b5894ca882c9e0ea98c02b7d20582e61ded8dfd4b5 \ + --hash=sha256:907a5e5afb31f7a46376afc1a1edddd7afa00a74bbbc5b78979bbc34479581f6 \ + --hash=sha256:947d945f52e8ecf3cafd2bb7113502a16ccfda3e12c854443094de32d83ad432 \ + --hash=sha256:9cee6fcbf2eb57c4b49451787bfa87be8efc1ca02a0b327dd4b54d44502e362b \ + --hash=sha256:9daf5acf4fc9d5f5627229969c2580a91e511779d76e4ccdeb9f4770f05d8bc2 \ + --hash=sha256:9e703effe3ae779925c82ac24fdb82cf4105e1096810151ed9501c5f34546b9c \ + --hash=sha256:a2aea8bd6e0a34f12cbaddb7bb70bec836818789fa5c7ab7572c6b745396a2d4 \ + --hash=sha256:a4a87dc86b0393257a11eb11e911c4c3456cbacd1c1ab9e9441060d9a3ad126b \ + --hash=sha256:a6a282e81530cead60bbd752cc04950a57f224379e9821495d6a35bd5ce9b1f4 \ + --hash=sha256:abce7d43ec29cd39230fa8339de1a07643b55adc412a454850fbd875349950ff \ + --hash=sha256:b59eaaeeb03dde0a2708095fb50f1afa94f11dc1b459bb7790b53bfb8cf95153 \ + --hash=sha256:b74f2a1d9ab1dfa3e263ef33d581613679b78d0884babf11671af26e45570ead \ + --hash=sha256:b7ace1f740b36fcd451a1bb96f71ee7650e60b308822baeb66a023965bc27f4b \ + --hash=sha256:c0f3f20c90e72a171917ae65706500b096a1c3eb5f162c3ce702a2e25635f132 \ + --hash=sha256:c12e1fc59c6dc26d10d9144453ddc6cbfe4cd4c31e874ed2d0132f88e685eb8b \ + --hash=sha256:c7e9e19413d43077d5a5c77b02ff82610209088e8f98da929347bc03d4c848d1 \ + --hash=sha256:d0dda8af248f6971555e1d4425f64864ce4e7369c5f8ef57c3e82a9bef77e22f \ + --hash=sha256:e256f95a40e3b0183a98556fb7164d24b97eeb353123ccabfcba94712b35ee2a \ + --hash=sha256:e572da3e247b28a98f46636d33c756e81ffb0f5def96c231ba45332333060595 \ + --hash=sha256:e844cdb25c3c93c7572e0a37137c12305efea493be4eb65801b3ee93f180c186 \ + --hash=sha256:f732feb060ef57c1a040c24cee072ba9fab99bd0a7d2c916ef3f1c4d84b98974 # via # -c requirements-ci.txt # semantica (pyproject.toml) @@ -857,27 +341,6 @@ h11==0.16.0 \ # -c requirements-ci.txt # httpcore # uvicorn -hf-xet==1.6.0 \ - --hash=sha256:0e6e21fa3cdfcdcd76748564bf593870a5e013f47d97cf10aed63aa222cff5b7 \ - --hash=sha256:23379c2f9ec8696d952b16414a2bae72cad86a52df869b050698ba60f538c675 \ - --hash=sha256:2e58454a340b3556dfa4972d5451aff4fba8dd42a236600ba1a1d2b1514f0fef \ - --hash=sha256:35cec30d75c6f9eb9c16a77cef68e85a103b72e24d4b473714ec9ff06428bab9 \ - --hash=sha256:3dc3e35441ba395006af5aaacc40ef2e603c51ef46c3530b9156185f00935ea3 \ - --hash=sha256:4fc74352a17015bd0ee90038bc9efe38db894cde45f268b6712b04fce8cd0acb \ - --hash=sha256:5153e6bb103ad49d6ea9f1b2e230db5a2ea32551ad09a706d2f61d7c7c80d80e \ - --hash=sha256:5789835d7c6bc9436962853192082374297fb72d7eff7e7762ec25ceb7e25338 \ - --hash=sha256:633dc0cd71d32da58ab8c03ad38e2fac452c15c2b0a2866ebf6ededfe0a5061d \ - --hash=sha256:70cbb9c896901600128cb9b6f06e132954fbede1db30f31f7c6c63f84cb7c31d \ - --hash=sha256:75765820ce4700db3750c94acc8fe27c5fae4c9ec000a0dbac3ca082acf97765 \ - --hash=sha256:8fb4f71cba6129110c3374a33f919001ff130488fc23553698e34cc1c2a1198c \ - --hash=sha256:948f15d3a9545cfe5932f6bd8b440f6ae630aee108f14b7bd6c561f7c2dcc522 \ - --hash=sha256:d62671bb130879cef0ee4c9ebe47a14af6c66ec53e6d84dc15936e5ffdfac82f \ - --hash=sha256:f0906082d9932ae0c0057fa194041c22b4e2cdb46b2592ef3b91f020d62a081a \ - --hash=sha256:f2f7278c05c22fd60cb436cda1269649b3e81db65ecdc8496e5e164aa4143e7b \ - --hash=sha256:fb4fadde1b2b70bf4c0c14a6dccbe7194b1c28947fefd5bbe3fed9d940676c3b - # via - # -c requirements-ci.txt - # huggingface-hub httpcore==1.0.9 \ --hash=sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55 \ --hash=sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8 @@ -944,848 +407,43 @@ httpx==0.28.1 \ # via # -c requirements-ci.txt # semantica (pyproject.toml) - # huggingface-hub - # weasel -huggingface-hub==1.27.0 \ - --hash=sha256:7df6827c2f956c60fbaa64646e979e566db76f619dd0a9729dfb8c5a3eb4f68d \ - --hash=sha256:c1fed40ea82a6b41b477f5243546549b792ae0a93abcea608cff66089bf8f8df - # via - # -c requirements-ci.txt - # fastembed - # sentence-transformers - # tokenizers - # transformers -idna==3.18 \ - --hash=sha256:7f952cbe720b688055e3f87de14f5c3e5fdaa8bc3928985c4077ca689de849a2 \ - --hash=sha256:ffb385a7e039654cef1ab9ef32c6fafe283c0c0467bba1d9029738ce4a14a848 +idna==3.19 \ + --hash=sha256:5e0811a4383b21dc5838069f801c4fb62113b7447663d2530d2bd6e77b49bf15 \ + --hash=sha256:815e7be7a7806d54abb586dc943addc79e8b2ee16915059658cbeff4b1b43bf4 # via # -c requirements-ci.txt # anyio # httpx # requests -ipython==9.16.1 \ - --hash=sha256:4acae635506f6d352d94c4899a19d5f85f8bc4d230932342dca556fdab1c69b4 \ - --hash=sha256:5a3d1f9a47ff216d6cf9cf863124f6a2c1a198d1354c546a4d24a370a283b64c +joblib==1.6.0 \ + --hash=sha256:2ccc96785b12046c08fd6d55839c12857831b54a3c1673ffadd2f04bfc4eda03 \ + --hash=sha256:3dbbf9f6e4b592a2357b854608e980fe6390d131d7a82f011a377ef2ebef7aba # via # -c requirements-ci.txt - # ipywidgets -ipython-pygments-lexers==1.1.1 \ - --hash=sha256:09c0138009e56b6854f9535736f4171d855c8c08a563a0dcd8022f78355c7e81 \ - --hash=sha256:a9462224a505ade19a605f71f8fa63c2048833ce50abc86768a0d81d876dc81c - # via - # -c requirements-ci.txt - # ipython -ipywidgets==8.1.8 \ - --hash=sha256:61f969306b95f85fba6b6986b7fe45d73124d1d9e3023a8068710d47a22ea668 \ - --hash=sha256:ecaca67aed704a338f88f67b1181b58f821ab5dc89c1f0f5ef99db43c1c2921e - # via - # -c requirements-ci.txt - # semantica (pyproject.toml) -jedi==0.20.0 \ - --hash=sha256:7bdd9c2634f56713299976f4cbd59cb3fa92165cc5e05ea811fb253480728b67 \ - --hash=sha256:c3f4ccbd276696f4b19c54618d4fb18f9fc24b0aef02acf704b23f487daa1011 - # via - # -c requirements-ci.txt - # ipython -jinja2==3.1.6 \ - --hash=sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d \ - --hash=sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67 - # via - # -c requirements-ci.txt - # spacy - # torch -joblib==1.5.3 \ - --hash=sha256:5fc3c5039fc5ca8c0276333a188bbd59d6b7ab37fe6632daa76bc7f9ec18e713 \ - --hash=sha256:8561a3269e6801106863fd0d6d84bb737be9e7631e33aaed3fb9ce5953688da3 - # via - # -c requirements-ci.txt - # librosa - # pynndescent # scikit-learn -jupyterlab-widgets==3.0.16 \ - --hash=sha256:423da05071d55cf27a9e602216d35a3a65a3e41cdf9c5d3b643b814ce38c19e0 \ - --hash=sha256:45fa36d9c6422cf2559198e4db481aa243c7a32d9926b500781c830c80f7ecf8 - # via - # -c requirements-ci.txt - # ipywidgets -kiwisolver==1.5.0 \ - --hash=sha256:012b1eb16e28718fa782b5e61dc6f2da1f0792ca73bd05d54de6cb9561665fc9 \ - --hash=sha256:01808c6d15f4c3e8559595d6d1fe6411c68e4a3822b4b9972b44473b24f4e679 \ - --hash=sha256:0255a027391d52944eae1dbb5d4cc5903f57092f3674e8e544cdd2622826b3f0 \ - --hash=sha256:0b85aad90cea8ac6797a53b5d5f2e967334fa4d1149f031c4537569972596cb8 \ - --hash=sha256:0bf3acf1419fa93064a4c2189ac0b58e3be7872bf6ee6177b0d4c63dc4cea276 \ - --hash=sha256:0c50b89ffd3e1a911c69a1dd3de7173c0cd10b130f56222e57898683841e4f96 \ - --hash=sha256:0cbe94b69b819209a62cb27bdfa5dc2a8977d8de2f89dfd97ba4f53ed3af754e \ - --hash=sha256:0df54df7e686afa55e6f21fb86195224a6d9beb71d637e8d7920c95cf0f89aac \ - --hash=sha256:0e3aafb33aed7479377e5e9a82e9d4bf87063741fc99fc7ae48b0f16e32bdd6f \ - --hash=sha256:12e91c215a96e39f57989c8912ae761286ac5a9584d04030ceb3368a357f017a \ - --hash=sha256:1465387ac63576c3e125e5337a6892b9e99e0627d52317f3ca79e6930d889d15 \ - --hash=sha256:16b85d37c2cbb3253226d26e64663f755d88a03439a9c47df6246b35defbdfb7 \ - --hash=sha256:1b0feb50971481a2cc44d94e88bdb02cdd497618252ae226b8eb1201b957e368 \ - --hash=sha256:1d49a49ac4cbfb7c1375301cd1ec90169dfeae55ff84710d782260ce77a75a02 \ - --hash=sha256:1d9daea4ea6b9be74fe2f01f7fbade8d6ffab263e781274cffca0dba9be9eec9 \ - --hash=sha256:1dd9b0b119a350976a6d781e7278ec7aca0b201e1a9e2d23d9804afecb6ca681 \ - --hash=sha256:1f1489f769582498610e015a8ef2d36f28f505ab3096d0e16b4858a9ec214f57 \ - --hash=sha256:2517e24d7315eb51c10664cdb865195df38ab74456c677df67bb47f12d088a27 \ - --hash=sha256:295d9ffe712caa9f8a3081de8d32fc60191b4b51c76f02f951fd8407253528f4 \ - --hash=sha256:2a075bd7bd19c70cf67c8badfa36cf7c5d8de3c9ddb8420c51e10d9c50e94920 \ - --hash=sha256:32cc0a5365239a6ea0c6ed461e8838d053b57e397443c0ca894dcc8e388d4374 \ - --hash=sha256:332b4f0145c30b5f5ad9374881133e5aa64320428a57c2c2b61e9d891a51c2f3 \ - --hash=sha256:377815a8616074cabbf3f53354e1d040c35815a134e01d7614b7692e4bf8acfa \ - --hash=sha256:38f4a703656f493b0ad185211ccfca7f0386120f022066b018eb5296d8613e23 \ - --hash=sha256:3ac2360e93cb41be81121755c6462cff3beaa9967188c866e5fce5cf13170859 \ - --hash=sha256:3c4923e404d6bcd91b6779c009542e5647fef32e4a5d75e115e3bbac6f2335eb \ - --hash=sha256:3cdcb35dc9d807259c981a85531048ede628eabcffb3239adf3d17463518992d \ - --hash=sha256:41024ed50e44ab1a60d3fe0a9d15a4ccc9f5f2b1d814ff283c8d01134d5b81bc \ - --hash=sha256:413b820229730d358efd838ecbab79902fe97094565fdc80ddb6b0a18c18a581 \ - --hash=sha256:4432b835675f0ea7414aab3d37d119f7226d24869b7a829caeab49ebda407b0c \ - --hash=sha256:4db576bb8c3ef9365f8b40fe0f671644de6736ae2c27a2c62d7d8a1b4329f099 \ - --hash=sha256:4e7f886f47ab881692f278ae901039a234e4025a68e6dfab514263a0b1c4ae05 \ - --hash=sha256:4e9750bc21b886308024f8a54ccb9a2cc38ac9fa813bf4348434e3d54f337ff9 \ - --hash=sha256:5060731cc3ed12ca3a8b57acd4aeca5bbc2f49216dd0bec1650a1acd89486bcd \ - --hash=sha256:50847dca5d197fcbd389c805aa1a1cf32f25d2e7273dc47ab181a517666b68cc \ - --hash=sha256:5092eb5b1172947f57d6ea7d89b2f29650414e4293c47707eb499ec07a0ac796 \ - --hash=sha256:5124d1ea754509b09e53738ec185584cc609aae4a3b510aaf4ed6aa047ef9303 \ - --hash=sha256:51e8c4084897de9f05898c2c2a39af6318044ae969d46ff7a34ed3f96274adca \ - --hash=sha256:530a3fd64c87cffa844d4b6b9768774763d9caa299e9b75d8eca6a4423b31314 \ - --hash=sha256:56fa888f10d0f367155e76ce849fa1166fc9730d13bd2d65a2aa13b6f5424489 \ - --hash=sha256:58f812017cd2985c21fbffb4864d59174d4903dd66fa23815e74bbc7a0e2dd57 \ - --hash=sha256:59cd8683f575d96df5bb48f6add94afc055012c29e28124fcae2b63661b9efb1 \ - --hash=sha256:5ae8e62c147495b01a0f4765c878e9bfdf843412446a247e28df59936e99e797 \ - --hash=sha256:5b233ea3e165e43e35dba1d2b8ecc21cf070b45b65ae17dd2747d2713d942021 \ - --hash=sha256:6176c1811d9d5a04fa391c490cc44f451e240697a16977f11c6f722efb9041db \ - --hash=sha256:62f59da443c4f4849f73a51a193b1d9d258dcad0c41bc4d1b8fb2bcc04bfeb22 \ - --hash=sha256:6783e069732715ad0c3ce96dbf21dbc2235ab0593f2baf6338101f70371f4028 \ - --hash=sha256:6ab8ba9152203feec73758dad83af9a0bbe05001eb4639e547207c40cfb52083 \ - --hash=sha256:70d593af6a6ca332d1df73d519fddb5148edb15cd90d5f0155e3746a6d4fcc65 \ - --hash=sha256:72ec46b7eba5b395e0a7b63025490d3214c11013f4aacb4f5e8d6c3041829588 \ - --hash=sha256:7a32f72973f0f950c1920475d5c5ea3d971b81b6f0ec53b8d0a956cc965f22e0 \ - --hash=sha256:7a4aa69609f40fce3cbc3f87b2061f042eee32f94b8f11db707b66a26461591a \ - --hash=sha256:7c60d3c9b06fb23bd9c6139281ccbdc384297579ae037f08ae90c69f6845c0b1 \ - --hash=sha256:800ee55980c18545af444d93fdd60c56b580db5cc54867d8cbf8a1dc0829938c \ - --hash=sha256:80aa065ffd378ff784822a6d7c3212f2d5f5e9c3589614b5c228b311fd3063ac \ - --hash=sha256:86e0287879f75621ae85197b0877ed2f8b7aa57b511c7331dce2eb6f4de7d476 \ - --hash=sha256:893ff3a711d1b515ba9da14ee090519bad4610ed1962fbe298a434e8c5f8db53 \ - --hash=sha256:89fc958c702ee9a745e4700378f5d23fddbc46ff89e8fdbf5395c24d5c1452a3 \ - --hash=sha256:8c63c91f95173f9c2a67c7c526b2cea976828a0e7fced9cdcead2802dc10f8a4 \ - --hash=sha256:8df31fe574b8b3993cc61764f40941111b25c2d9fea13d3ce24a49907cd2d615 \ - --hash=sha256:8f9baf6f0a6e7571c45c8863010b45e837c3ee1c2c77fcd6ef423be91b21fedb \ - --hash=sha256:9027d773c4ff81487181a925945743413f6069634d0b122d0b37684ccf4f1e18 \ - --hash=sha256:9190426b7aa26c5229501fa297b8d0653cfd3f5a36f7990c264e157cbf886b3b \ - --hash=sha256:940dda65d5e764406b9fb92761cbf462e4e63f712ab60ed98f70552e496f3bf1 \ - --hash=sha256:94eff26096eb5395136634622515b234ecb6c9979824c1f5004c6e3c3c85ccd2 \ - --hash=sha256:9eed0f7edbb274413b6ee781cca50541c8c0facd3d6fd289779e494340a2b85c \ - --hash=sha256:ad4ae4ffd1ee9cd11357b4c66b612da9888f4f4daf2f36995eda64bd45370cac \ - --hash=sha256:b0f172dc8ffaccb8522d7c5d899de00133f2f1ca7b0a49b7da98e901de87bf2d \ - --hash=sha256:b2af221f268f5af85e776a73d62b0845fc8baf8ef0abfae79d29c77d0e776aaf \ - --hash=sha256:b7d335370ae48a780c6e6a6bbfa97342f563744c39c35562f3f367665f5c1de2 \ - --hash=sha256:b83af57bdddef03c01a9138034c6ff03181a3028d9a1003b301eb1a55e161a3f \ - --hash=sha256:bb5136fb5352d3f422df33f0c879a1b0c204004324150cc3b5e3c4f310c9049f \ - --hash=sha256:bc4d8e252f532ab46a1de9349e2d27b91fce46736a9eedaa37beaca66f574ed4 \ - --hash=sha256:bdd3e53429ff02aa319ba59dfe4ceeec345bf46cf180ec2cf6fd5b942e7975e9 \ - --hash=sha256:be12f931839a3bdfe28b584db0e640a65a8bcbc24560ae3fdb025a449b3d754e \ - --hash=sha256:be4a51a55833dc29ab5d7503e7bcb3b3af3402d266018137127450005cdfe737 \ - --hash=sha256:beb7f344487cdcb9e1efe4b7a29681b74d34c08f0043a327a74da852a6749e7b \ - --hash=sha256:bf4679a3d71012a7c2bf360e5cd878fbd5e4fcac0896b56393dec239d81529ed \ - --hash=sha256:c0e1403fd7c26d77c1f03e096dc58a5c726503fa0db0456678b8668f76f521e3 \ - --hash=sha256:c31c13da98624f957b0fb1b5bae5383b2333c2c3f6793d9825dd5ce79b525cb7 \ - --hash=sha256:c438f6ca858697c9ab67eb28246c92508af972e114cac34e57a6d4ba17a3ac08 \ - --hash=sha256:c8277104ded0a51e699c8c3aff63ce2c56d4ed5519a5f73e0fd7057f959a2b9e \ - --hash=sha256:c95cab08d1965db3d84a121f1c7ce7479bdd4072c9b3dafd8fecce48a2e6b902 \ - --hash=sha256:cc0b66c1eec9021353a4b4483afb12dfd50e3669ffbb9152d6842eb34c7e29fd \ - --hash=sha256:cdee07c4d7f6d72008d3f73b9bf027f4e11550224c7c50d8df1ae4a37c1402a6 \ - --hash=sha256:ce9bf03dad3b46408c08649c6fbd6ca28a9fce0eb32fdfffa6775a13103b5310 \ - --hash=sha256:cff8e5383db4989311f99e814feeb90c4723eb4edca425b9d5d9c3fefcdd9537 \ - --hash=sha256:d168fda2dbff7b9b5f38e693182d792a938c31db4dac3a80a4888de603c99554 \ - --hash=sha256:d1ffeb80b5676463d7a7d56acbe8e37a20ce725570e09549fe738e02ca6b7e1e \ - --hash=sha256:d36ca54cb4c6c4686f7cbb7b817f66f5911c12ddb519450bbe86707155028f87 \ - --hash=sha256:d4193f3d9dc3f6f79aaed0e5637f45d98850ebf01f7ca20e69457f3e8946b66a \ - --hash=sha256:d5cd5189fc2b6a538b75ae45433140c4823463918f7b1617c31e68b085c0022c \ - --hash=sha256:d618fd27420381a4f6044faa71f46d8bfd911bd077c555f7138ed88729bfbe79 \ - --hash=sha256:d76e2d8c75051d58177e762164d2e9ab92886534e3a12e795f103524f221dd8e \ - --hash=sha256:daae526907e262de627d8f70058a0f64acc9e2641c164c99c8f594b34a799a16 \ - --hash=sha256:db485b3847d182b908b483b2ed133c66d88d49cacf98fd278fadafe11b4478d1 \ - --hash=sha256:dd952e03bfbb096cfe2dd35cd9e00f269969b67536cb4370994afc20ff2d0875 \ - --hash=sha256:dda366d548e89a90d88a86c692377d18d8bd64b39c1fb2b92cb31370e2896bbd \ - --hash=sha256:e315e5ec90d88e140f57696ff85b484ff68bb311e36f2c414aa4286293e6dee0 \ - --hash=sha256:e4415a8db000bf49a6dd1c478bf70062eaacff0f462b92b0ba68791a905861f9 \ - --hash=sha256:e7a116ae737f0000343218c4edf5bd45893bfeaff0993c0b215d7124c9f77646 \ - --hash=sha256:e7c4c09a490dc4d4a7f8cbee56c606a320f9dc28cf92a7157a39d1ce7676a657 \ - --hash=sha256:ebae99ed6764f2b5771c522477b311be313e8841d2e0376db2b10922daebbba4 \ - --hash=sha256:ec4c85dc4b687c7f7f15f553ff26a98bfe8c58f5f7f0ac8905f0ba4c7be60232 \ - --hash=sha256:ed3a984b31da7481b103f68776f7128a89ef26ed40f4dc41a2223cda7fb24819 \ - --hash=sha256:f18c2d9782259a6dc132fdc7a63c168cbc74b35284b6d75c673958982a378384 \ - --hash=sha256:f1f9f4121ec58628c96baa3de1a55a4e3a333c5102c8e94b64e23bf7b2083309 \ - --hash=sha256:f42c23db5d1521218a3276bb08666dcb662896a0be7347cba864eca45ff64ede \ - --hash=sha256:f443b4825c50a51ee68585522ab4a1d1257fac65896f282b4c6763337ac9f5d2 \ - --hash=sha256:f6764a4ccab3078db14a632420930f6186058750df066b8ea2a7106df91d3203 \ - --hash=sha256:f7c7553b13f69c1b29a5bde08ddc6d9d0c8bfb84f9ed01c30db25944aeb852a7 \ - --hash=sha256:fa6248cd194edff41d7ea9425ced8ca3a6f838bfb295f6f1d6e6bb694a8518df \ - --hash=sha256:fa8eb9ecdb7efb0b226acec134e0d709e87a909fa4971a54c0c4f6e88635484c \ - --hash=sha256:fc20894c3d21194d8041a28b65622d5b86db786da6e3cfe73f0c762951a61167 \ - --hash=sha256:fc4d3f1fb9ca0ae9f97b095963bc6326f1dbfd3779d6679a1e016b9baaa153d3 \ - --hash=sha256:fd40bb9cd0891c4c3cb1ddf83f8bbfa15731a248fdc8162669405451e2724b09 \ - --hash=sha256:ff710414307fefa903e0d9bdf300972f892c23477829f49504e59834f4195398 - # via - # -c requirements-ci.txt - # matplotlib -lazy-loader==0.5 \ - --hash=sha256:717f9179a0dbed357012ddad50a5ad3d5e4d9a0b8712680d4e687f5e6e6ed9b3 \ - --hash=sha256:ab0ea149e9c554d4ffeeb21105ac60bed7f3b4fd69b1d2360a4add51b170b005 - # via - # -c requirements-ci.txt - # librosa -librosa==0.11.0 \ - --hash=sha256:0b6415c4fd68bff4c29288abe67c6d80b587e0e1e2cfb0aad23e4559504a7fa1 \ - --hash=sha256:f5ed951ca189b375bbe2e33b2abd7e040ceeee302b9bbaeeffdfddb8d0ace908 - # via - # -c requirements-ci.txt - # semantica (pyproject.toml) -llvmlite==0.49.0 \ - --hash=sha256:00f16db782f4a13c78c5804aedc434e46794a77e89999a168f9401106270e50a \ - --hash=sha256:039fa4054a06f537fb39248d4472284ca96be311a142ec09e69f95630ab469cc \ - --hash=sha256:20496a5c9fdb8179fb9300e7d19f6782555d98aeeb4a322264aa7fd99f980618 \ - --hash=sha256:294e2f0b70aef8f92d0ae7b203e2609f08beb39437eee73de59a21669331aae9 \ - --hash=sha256:3a9c9e3af4e214acfefa4f73ebe7bc3fb35854a62b654edb3953f5ae33c08ba3 \ - --hash=sha256:4281a0171d66d2098adce4ba706b8c550b1b10718650f682d64cde16e84e4de5 \ - --hash=sha256:4b0e710880b7cc910392bd6b9f1bbf468fed99b182e4420d51598f36114b3dce \ - --hash=sha256:4ec8ad805e7515cb8440a690eb3cef4d34acb29eef80b705ec4e1c1ad3c43c68 \ - --hash=sha256:6a5b06c1b5fc4ae4c9b169b065f42b719448ef1f873687ef224ef69969b75ec3 \ - --hash=sha256:6acba646d88abbc87d5c113a3d62c1fbf8b8fee11c6493f516803e30f21ae870 \ - --hash=sha256:80a84683d04516bb51da1bbeebddaf2c2f558809c93078a8f91807909ae331f8 \ - --hash=sha256:854941c2267fd4fc5b2ce02b8af8ecdffa79fb7784591d3a89370322039ea09f \ - --hash=sha256:95d1071023ed858b79f6971954fd7cc1f5dbcbab987718a4ccbe1411e47d0b81 \ - --hash=sha256:a1b414dc6b164738ec39dd8987cea73829057b7dd92fc6d91b52838385fc1dd2 \ - --hash=sha256:a8c0fc9d624bdc30a3d2db11eb2fb98f80fb209d20b37604eda516cd9b699cf4 \ - --hash=sha256:b095f15fb12c4d90495df5b1a3772b4732cc408398b204a787dbedd370e09c69 \ - --hash=sha256:b352c14353330c879e339b8f8d7491d565fe94242697714a24e80bd757202384 \ - --hash=sha256:b541c8fac3450db7574d1f53cf9dff83f285bfed9d69bf81fe71fc2a7d4f97fe \ - --hash=sha256:be637e465010bc9c50f070468f7f1cf5385e92fee364d192dd5e6cea790ecba9 \ - --hash=sha256:d3dee64784201b64c13a8df62c48a4f4218858faaa65889866bb29bdc243c038 \ - --hash=sha256:d5555ea1d63928481cbf7fcb1d67452b216c7e5b393a4eb7aa1401e67f2a4fc4 \ - --hash=sha256:da7b64474ac15ca595efa2644d5c6836638ccf70709fad3aba3fc56a55966928 \ - --hash=sha256:ddc7aecd4f56397ed6e8f120ec5dcd5a1a8f0e6032ca4af413462792d4dca2e3 \ - --hash=sha256:e32adb84fdaae28aeb86fdb6253084ee707ee157289a2e98fe3caf48a62bee82 \ - --hash=sha256:ee81e96c15a6f870918f1eb60c913551c16aa23defb4f5f1acfa660d6a0aaac2 \ - --hash=sha256:f3f2ff0aeb17d34fcce9f79b99baac441cfd3efa41b83e233ca4530a72381f72 - # via - # -c requirements-ci.txt - # numba - # pynndescent loguru==0.7.3 \ --hash=sha256:19480589e77d47b8d85b2c827ad95d49bf31b0dcde16593892eb51dd18706eb6 \ --hash=sha256:31a33c10c8e1e10422bfd431aeb5d351c7cf7fa671e3c4df004162264b28220c # via # -c requirements-ci.txt # semantica (pyproject.toml) - # fastembed -lxml==6.1.2 \ - --hash=sha256:0349321a0537d4fdbebb2af06dd1b64676132c72e2ae250de8cdb58f8c43019c \ - --hash=sha256:04cf9e3f4ee9cab9d9ba05401bef8668840fa9620fcd4d8e85a2d2fd0b0fa960 \ - --hash=sha256:054175250531a5fb102d485743ff16412279c93add12385b3b1c3d7b16d8deaa \ - --hash=sha256:058c79e172926ef524fb3c7c6beea4b55e15886ac99cb0c139ecaac6b375f1e2 \ - --hash=sha256:0666943ee1576fa890a6dc6316ef42e8241b5dd56f67bc5475acb2ac298c6ca9 \ - --hash=sha256:074a88f70a7360a4a0c5be5d898062cd26f898c25b459efb1bdd43ae700c5a1a \ - --hash=sha256:08cd52e6487435c75f2da0a5b276beef7fed161681b93ab766e66b954f0c349a \ - --hash=sha256:08f0c9ed7cded07c5e798b17c9c25bbba5d0650c8ff0a7f65f84c634966f0f10 \ - --hash=sha256:093fbf547d0f3ca02705381f795a050fbb58988be4aac7f79f99f280c4082313 \ - --hash=sha256:0aa07065497f191ad26c4b587ce5dbb5a7105285a3789aafd0661750e8bac537 \ - --hash=sha256:1055241852f2b02068af4a625a5d32c087db193c12251928af2562ecd2239f18 \ - --hash=sha256:1133bd969f2bfcc6b0c0cf7cdf5f2631e62b23fa2471ee8bd44f6ab73554ee9a \ - --hash=sha256:11f529062255209a421ae4de5b1bb36b2f0a2e1a700745e675a4bf4084d13c00 \ - --hash=sha256:12acd337d2821cb8b9247dfe4b7aa2f2769a3df5ae8511b7e550df42b8f4d3c3 \ - --hash=sha256:12ecfea07d767f6accbf30b014e1c477b5eabb13eb4e8c748215efb52c0e314a \ - --hash=sha256:14879fa5eb2b793c040bbfcb62011aa3015c65d6c9875e063ea98ce2029d51fb \ - --hash=sha256:18467b0e9f7f0bc477df69e99829a59ae17fb37d34e5f68399371c7c67be9002 \ - --hash=sha256:1a2331da06dd55a8184985306eb2afd72d708283ce7e85d67bba77317b785060 \ - --hash=sha256:1c0173595dc1c25768f42681a1517dcfc74bb18a34695f127931cbd05f4dead6 \ - --hash=sha256:1c4c6dc1b2485aaa4adfb6ed754f90dddcb2b96a66bbebc9e1ac242b5ce5e818 \ - --hash=sha256:1d55a614d2f0457b1f7511c1b7bec0db0dcdd4af4d09d226829eb054c647527c \ - --hash=sha256:1e3c67b817867c484794d7fe0d73045d7d0c67460c78a0a1249a9e92266e6a0e \ - --hash=sha256:1edca8f4a92b94e873093df959f141d388f2141fcad0c47598442fb4730ef57a \ - --hash=sha256:1fcfe8481302e6dec07909914b8f3f9e1739ae1615209d4b9e7544325fb699c4 \ - --hash=sha256:20134744db7abcbd5232214e767814ef64e5ab57a5b7df93a2bd68b74ef0a6c0 \ - --hash=sha256:215bb3cc4be015ccac3c7d4f25eb7b941f857fe5b02c0e3504cca61f7fb12455 \ - --hash=sha256:2170d0a280c877b6e2dc6738217db947be35dd8cf09ca458b355aa1bab2a9e70 \ - --hash=sha256:2374235206ec83d4827ad219c93c0f7366b93626eab85392c0ee7c8026649376 \ - --hash=sha256:243ecef7cb7415766dd742336cd5b8361a84c6f297e2773c865b783724cbbe74 \ - --hash=sha256:261d98065326676d7253882db0198d0aa06748d7ee0443367acf10b148273f99 \ - --hash=sha256:26ff164c6629e5c4d11c9e55d5ea3d6eed0be2a420eee1f55cbce6e2c23e231a \ - --hash=sha256:2afd1688e372d8eafaa6f56c589399e0a87d086a0c110f6346b0b50f42e67e25 \ - --hash=sha256:2dcc69e307e0916c7a0b552212010938d02a664d29b6bda75ab2bc5fa487c861 \ - --hash=sha256:2e37fe49fe2d5aa40a2cb1cc8176673ad7de0d124e6f4a509d9318f5979c7871 \ - --hash=sha256:2f3194777c0d05945ac91d8594be25d2679d1d826e01e1fc90bae568ff3a547b \ - --hash=sha256:351318f5c0eb7fcab5b4fdb507c6f88fb2c4b5e67784c7e5911448c91fffb5d4 \ - --hash=sha256:351855814dec4ad55ca5f24d0f4b1cdaca7927fe48023a2965351845f3b60cff \ - --hash=sha256:3a698fad6f122a9b3e2dc2fb598c1de7329c74a67c7a334c9109a440de2508e5 \ - --hash=sha256:3be94d2464f19e42d8c39a299f356b12f2fd095c28793671eabfcd9db9c76987 \ - --hash=sha256:3e3b666f57a5d81562f38c766c762416b0f6eb58a00590546911514b48412abd \ - --hash=sha256:40366c23a938008a3bedfcfd80709b3a857c188b4d710b083e978ef5d2c1c715 \ - --hash=sha256:4303f904fb6c41b58dc70743b1d8a470aba6c9897427c48324cff1a95673ddb4 \ - --hash=sha256:442766b326d9892585a64e8c6c4b5ab81d0e6c0538c9f0fc11a84dc101a5d97f \ - --hash=sha256:446f1f92c137e0cbb97eb7e932e15315c11a7c86974f43f15e68c9707ac6a9f6 \ - --hash=sha256:4618b20f43dc98b49569b1dc822176140ea0f2598d672a6989187ba49bcbfec1 \ - --hash=sha256:4622c5616683faf63791b349e6c8dad7717412dc5f29f4febe7575f110609a86 \ - --hash=sha256:47c92dc5167de16e27ace8332454f12ba172dcab04f7a78a9eae14e2e41b6a41 \ - --hash=sha256:47e367dfe341521426692819803e260d0673899c0ff611f14af978d725e2c999 \ - --hash=sha256:48e912f37c99a297175ba955f55a47c0e1c834b506ef162e52a6e4fe276e6e45 \ - --hash=sha256:4a16457e330b7099aa5a8e8bfa5d53a33a1672a819fa656157e9e6dc433ac7a4 \ - --hash=sha256:4aced3284e0353c798b060fe2c175eb81410e99b9a7e2ae6951be5333732b111 \ - --hash=sha256:4b0fa7109b1d0bc1747d8241a0853e135eefb1c978685241b544c46937383efd \ - --hash=sha256:4bf14db2f0214003ec7f46c4300e2065668fc93e20448c1c95bac2e952072168 \ - --hash=sha256:4e220a9c297e5d36895d489a08c9a3f1f6193b6414e702c5fb751e4a3767f8d0 \ - --hash=sha256:4f4d2c36fd5997d30ff19c29fb93293401d0daaf87512297d47610e6883964b5 \ - --hash=sha256:5078ff51e6316c0f75ea8127c2cd24374747fb351f62fb93d1761f8ae5a04a40 \ - --hash=sha256:50ee0c360862f4152db835b456e38614f94b674bca2a47bc8de7171ee6ccbbb8 \ - --hash=sha256:522387e05cd015a81d1dc621fb167fb42b8f629ccd2e8b39de583828f165aae6 \ - --hash=sha256:5295205fd57510c19a0e46385b516119f3a781d45c2672159bce02949238981a \ - --hash=sha256:52f6d4dff133c9778a24e9a2cfc1608930b15869866171aacc5131b5a418a003 \ - --hash=sha256:57188e441ab24f906bd5a5c14eb55363ab51aa6c0de549f3dd320043721cc118 \ - --hash=sha256:575fef7f30048b744dffb3e4ff64a18cac7dba3fd26efdea5730ade9d1bdeb33 \ - --hash=sha256:5848f3de6a8de8a93cff9f068134393ff5fa69ac2a04399f7d49cd67c61c348c \ - --hash=sha256:5a096d6a5f96b776a5b020cb45c17c545effd2a3b6639e6fa97bc95537600923 \ - --hash=sha256:5c2bae42b3a09f977330a08f4a8fe72aec58c4bdb89069d3fe7272a71d885881 \ - --hash=sha256:5d78ba560f3dd404d87b1fcc89b2b382d638ea2998431a3b2e5cda0f3ba2da91 \ - --hash=sha256:604f4778632588d7c000e7e19430639dc12fca58b5b6e99edffba7631725ef0e \ - --hash=sha256:614d4c5a34556e369b86cfcc8d0cf71cd0759a3444a464a07a9427ab0f5e3a99 \ - --hash=sha256:6330cf0ce83f6273ad8ad99bdd25d6ebb3863912f9ac717f96bc8942706e0e26 \ - --hash=sha256:633ac039cb32366dd5935868e041e385875c017b8cd54ea56aeee3fe29ca5935 \ - --hash=sha256:6454d184d556eaf4cb3d6f69e405d21602d6fdcf08b8d57796824275986c6595 \ - --hash=sha256:648861c19b775b89ebefa14586f85090b10163367476d77f242c4131c835ce73 \ - --hash=sha256:65c32ddc5d0750129c7b119fb57d48192b76d334c21e6b690d19dfb06b34af79 \ - --hash=sha256:662432a6103e671d971e06e75ed146d9ff67f39d2c98c2f26613b6057f54eafc \ - --hash=sha256:678e35f1cbca98f55107511ee21a60568535c950f3c2371819bd64504c980d20 \ - --hash=sha256:69df1856cb6c065e5bfd23adcc7408bfa6dcf32b0018373a99b0769bd86e2256 \ - --hash=sha256:6c9cc4b6532abe154dbdebb42aaba8d52c852919591e45067f5b7d46a0405e88 \ - --hash=sha256:6cb0c87421946030b92b558be416852780a912454e3dcba0998e4497c9c588d5 \ - --hash=sha256:733dfb492ec3dfef8350a5cc896e90d202c5171e791e1609e77563751d69a15d \ - --hash=sha256:75530642d8471327e691ab9b0513a5f9c77f38871014ceda40f51bb51765c0a1 \ - --hash=sha256:7766e525282dd38fd89567311323e441996eb958e8e816d16b38f782e3aecd2a \ - --hash=sha256:785761d5123f222cd97f2263a510107226fe32ce7aa7824a90616a41c574ace1 \ - --hash=sha256:79b428c3242e63bdacf3b526a34e0b8b26583846fc597da84b8f0c3d5ea446b2 \ - --hash=sha256:7c444c3a6e8e75334879980eed96568f0e12064c8b1913424eac1805e976736b \ - --hash=sha256:7c482e87cc86bed78a50462560675bc2c348ef72c47596f9b933346d5a8e920e \ - --hash=sha256:7c534ed898413f439b048130011e99a4245ee13d62d431f6b4f7f2484d02a93a \ - --hash=sha256:7c687fd8e558c7d169f6f1987b696f37824d3a097f291bffd0ab4a2ea2307dfb \ - --hash=sha256:7d506bdba580ecb1a6ad2e2b5c49445e66d3e1f95894885739094393a1aad237 \ - --hash=sha256:7e81fc065ede5d58dd0bf0912025aee1bd04c52c2affd61fdb93226a97ce2fc6 \ - --hash=sha256:7f35ba7667004ecdafebbe08da7c9fa06ee6195275bb7ef7a29ee1901e69519c \ - --hash=sha256:7feb72424f19a893ae4f3373c7aae821b1aacb6076b708915c651f0683a97c49 \ - --hash=sha256:822d9397033edbe530a13bb1e0091c0e817536b6aba87a9b4ad626ed779ca0bd \ - --hash=sha256:827438bf6c8292d22a409bb7990d7cffce410f33e7664e46ca74d2ecc26975ef \ - --hash=sha256:83e7510a6dda8df41d1b68b783de2953b3feb55a11dcebf693201ebaa5cc0c4a \ - --hash=sha256:841630176c15fa5d3c5cd6f755435d3c5540a82e1dd2a7de1799401f92ee6d24 \ - --hash=sha256:84a2a46b93b789d8acb44cfcb3d967ce9dbe29884ddb93fbb1a33f0e0c8fcd86 \ - --hash=sha256:8512b3775d68994dd1d6d533161e0a214f2ad9c634659d34a99c98e86c6c3d68 \ - --hash=sha256:85690cfc8ed54c4292e36a08bcf984dde7957e653fd6d94f59184244bcc35843 \ - --hash=sha256:86d93dc3882c283e9aa2124d7d2b50c85579485216a2b3b7f91ba479e31a128f \ - --hash=sha256:87534cec6ea325435e4adf2326b0cf3110eee9a47abf73652eb155db639c08c6 \ - --hash=sha256:878e7c8ada8f92c52f13f35a2ab98ef0adf7fd0211d164fc2af589e4c3cfed63 \ - --hash=sha256:87e9673cd8a3445024fe38e7f91b55fa3428437eec9b7a7ff7d81979520c0d2d \ - --hash=sha256:8807998c1023d1e9d60e02500f90e85a0752dbc0b670989806bba87b82dd5b42 \ - --hash=sha256:8b68f2548259bb04e0b3d5df0c397abe8b0080f5e1ffe4019fb7a8bf01a9339e \ - --hash=sha256:8e613018a5ac66de7abaf1acaae0d7af37a5e1b9bf1ae190a1198b0fdb988ad8 \ - --hash=sha256:8ec111ff8067325f85c08aa9c2b26179ec0537bb89c003fde31127139f85f82d \ - --hash=sha256:8ffb17ec0a8bae18b6628ae40b0896eb264dd285e39a0faa864965c00933b64c \ - --hash=sha256:9031f5f01452681abf39fdd65f84a70cb01a7572a1bbf570042e826b1232d07b \ - --hash=sha256:9088da25ecd609965f838d89fda0465a905b48f4dd90331db9845518f2177372 \ - --hash=sha256:9221442682c27417f10fe11184ea4cce174b25ab52465570b1f3ee3f85f320fa \ - --hash=sha256:927f3e1d04dc0906265fc0416c13500363e42cd683bbb8d46911c79b73d26800 \ - --hash=sha256:92c2b366028ac01e90399e6d17734ce6e4f4aeddd8ba75fbaf80ea11d6c6d645 \ - --hash=sha256:94162456ed0a64fb1c06915df5bd06af4675ae3966d6048fcb73b0906e0e0222 \ - --hash=sha256:9429d2371d406344ed1da5b5686d9412e74137c07b0171278368ff704f470ed5 \ - --hash=sha256:9477e14217c212e6023c994a71a1a349db19b0e10fd5bf189666b281ae63b1fd \ - --hash=sha256:962c12b51d0b164f12569af225dea57568477e24a845b96eaccbef6c07e4cc03 \ - --hash=sha256:9b52ea73a37fc64aa3357ff8607801d46dd170506d3cf8253a91a1d91639d4f9 \ - --hash=sha256:9bdc2db9e04538f917bba0242920764dd740649d8df58700d6d687ead4429429 \ - --hash=sha256:a02164a8cd3e2dc028918e51af844c934c7a24a0b8f4064368360aa14ad1aac4 \ - --hash=sha256:a2b7fe53abced1fe8bd984a9ab3c8c98bc093ec4f9f543089a8817a493818208 \ - --hash=sha256:a5005c0c9e4d749a76a2ff8bd5918a8bb248df8e08e73a55654b9f79c9cd1e2b \ - --hash=sha256:a7fd1dd6faa3df9dcd8f1765237362cd885ca62cdf77a7c5f5ea383ae5b6048b \ - --hash=sha256:a8326e24ae6c3a6bfb03fa8b4793f9a5d804c125228aa067f652b0428e31b87c \ - --hash=sha256:aa224ecc613d411690aa650dbf01daafbe385cd6c67145e80bc5fc01b3a71469 \ - --hash=sha256:adbecbfe44a497c742792457b1c27300617967c18c3934d2416023eba8d8c553 \ - --hash=sha256:ae520f189895c5dd7eeb2b7a372d464da6f4a1ba1d0ecb741b1d4fe4c1f699ac \ - --hash=sha256:aea814342f6afd20d832937ff8b333cd6506428a39c0c4c70c2380aab1887bfb \ - --hash=sha256:aebcc6b184c935e1f7091c09124cfe5107b7c2253894ba23ad646828c17e4c3b \ - --hash=sha256:af6585a466cee2c5a524f7fffc591844bd604a29fdd9cade964f548512b5ef7e \ - --hash=sha256:b1c0d2dde8a50520efc51644587f0fc4810e3af7d3e029d7af0be93bf39e2b5c \ - --hash=sha256:b20440e578d269c5e8a722ab602ddd0f0cedb8b080006b3f936da9991a593d3b \ - --hash=sha256:b28842b30c4bc2e6afe137d98a5d2071a62589471e76d053bea55b0e53298af9 \ - --hash=sha256:b3ca02ef3b5920b88119c82eb6badfb2d082b1f681d528a856dcce17c8706da8 \ - --hash=sha256:b3db5497af55f7a557c95265dd3b91c75dc56364a7b59f258c45fa5576dce058 \ - --hash=sha256:b631174cd2e4d9f8a94ef17f911c6ded10ede93b5e7860dee7bbf85961d321e9 \ - --hash=sha256:b7233a987a101bdf79059014130262a01339094a0a709f175162542f33b55d4e \ - --hash=sha256:b97153ca609b434b712ddfb92cd6af101a7045a7724c542258bd4727a344472f \ - --hash=sha256:ba0dfead73be5be9ad0b7fbf9f31ff29c1b1eae858816dfc8d85099d6e4af0d6 \ - --hash=sha256:ba58574d710b82ead7cbedea01cac3e110bc3ef82d4731519b74a2c11f7cf5e9 \ - --hash=sha256:be365ce8d2d411cf2fb573747684b4fd470fa6224e0094d9d5a21155acc369d3 \ - --hash=sha256:be6f87cd224254a8f81324e34cc655508b83f1d70458a1a39857ad2aa9925852 \ - --hash=sha256:bfcbee8ffff4188f4c6d97eceeff36d8eb983cf838933cbc12ce5f5dd51476c6 \ - --hash=sha256:c0edde95e4b4278dcc0175eda06dc8aa2631ad9f83ae5dbdbc4f0925e200b0b0 \ - --hash=sha256:c20fa05d128c463209ef5323ebf33ee1cac6d87cdc3933fd789fd3c101017c8e \ - --hash=sha256:c470d192e27f97842a068cf12a1c1296b20ca716c56a9249715c6654bc192d19 \ - --hash=sha256:c67f3c1278f942e97d8665c2a690324aaea5137de16f056583a21f0ac706177f \ - --hash=sha256:cb0cf498efa3204621b3c5576f0accd80ad2ee85575f1cae5d2f98de32c8d9cc \ - --hash=sha256:cdd35422de747237f451e821766e2b6be3dd2c31955c1ecd7f17984c5b9bb62d \ - --hash=sha256:cde6b8db7d2e5135129eb5e74b7b44dd2053aa767cd5023541fccedddc262453 \ - --hash=sha256:ceafa5e0536c62a5cd9f65327fa0b57d6f0b0e3435daf2c98a78d0dde7ecbae1 \ - --hash=sha256:cfeac14425fc7a6fca7864b774d4ee63547926158f4a18c67d77b2c9a948acf1 \ - --hash=sha256:d0bfd719c254bbe60ea022cff0e6ffb799a6fa7d4d72852cebe0257957b32d68 \ - --hash=sha256:d117f39b28ab8a330a74abdbe61c2255b51973b238db25fd6c2448de1eb2a02d \ - --hash=sha256:d3e97ac4353cca3fbbfa829bc0c6a913771573d1c6d46932d4335c46f2b7796a \ - --hash=sha256:d50a44113fe6800dcc8a859332b823a4735b1e6ae1b0063882e4cca569ec3e29 \ - --hash=sha256:d858e718b94033ab4b67e4a58fe3114c65bae01ae2314a62fb39ae8897ed4324 \ - --hash=sha256:d86130d70a2557cdf825dffc56255f1f16b83a7bbeab677b4cd040c4c53d8c52 \ - --hash=sha256:da6a4f55f0e3308c07354b1ee239c5550afc212f81629a6067db505ace3b667a \ - --hash=sha256:dd7ea3fa47154b9fff90591b961e41b3718bd7fcd5bc2d9bb47e9845c8ace088 \ - --hash=sha256:e062f5ac1255dfa6c98e3e3863ec18bc79d0947d22d08921a3ca60cee40559fd \ - --hash=sha256:e17e2c30e27f56da5551e7a425888b45f013e940b99ab07d125a1c33f77a4605 \ - --hash=sha256:e7269cc410f3cdf84a66914fc0ef54b1618115c87fb4f9a59a05c5dfc23bece1 \ - --hash=sha256:e8b9a92652e75e7731309ea51db5dee892eef414ce70a6ec3441e5d36bf5189f \ - --hash=sha256:e8dc3d29f2ed2bbf24c205a86326d6681230ace55abfb3f9d5230f42078ad63d \ - --hash=sha256:e92e4419cad18d60b14bf18b82152fbae67f4b1128be7d73b172df275554f5d9 \ - --hash=sha256:ec8d09f460fdeb65f9ead9b75941e312def4bcbb23e1f951b7def061eb99501d \ - --hash=sha256:ee23f6599682bd4d48bb757c0633e78774eedfb65a7e52851f9ad182eeeb625e \ - --hash=sha256:ee7410c98222070fd717ad881ee2a80cc11826b7001b9a5a807155d8918bfc7a \ - --hash=sha256:ef0b8ba6e13597f681b2b4924ca9c4e8c88420bf0e21d9a9006c757f2fc39d1f \ - --hash=sha256:eff128ffdc093cc6317955934ad9751105d37ed8dbca3ff4ccd751af6be37185 \ - --hash=sha256:f16a407766bac51c65d605b06d900821751a79aa20e12185f273f14a17180e7b \ - --hash=sha256:f86e23ed610727a7f025ebbff788f22a7956d3f1b24a25bb1d9286fc7b7642b0 \ - --hash=sha256:f8b89b3be75a37509602b03f9cfa1a28298d4eed4625748148307aeb907901b7 \ - --hash=sha256:f93bc5e25992f5545709000d840c6cafdbd022781a7a0ed79d58a5633733a4e8 \ - --hash=sha256:fa813b0247d0543a563b993ac3dba6168eef59e3a61448432cf5453300c2412b \ - --hash=sha256:feda2ef68c339987dfb370af3a4b785dbc40f925723fe2365e68e43c2640f85a - # via - # -c requirements-ci.txt - # semantica (pyproject.toml) - # python-docx markdown-it-py==4.2.0 \ --hash=sha256:04a21681d6fbb623de53f6f364d352309d4094dd4194040a10fd51833e418d49 \ --hash=sha256:9f7ebbcd14fe59494226453aed97c1070d83f8d24b6fc3a3bcf9a38092641c4a # via # -c requirements-ci.txt # rich -markupsafe==3.0.3 \ - --hash=sha256:0303439a41979d9e74d18ff5e2dd8c43ed6c6001fd40e5bf2e43f7bd9bbc523f \ - --hash=sha256:068f375c472b3e7acbe2d5318dea141359e6900156b5b2ba06a30b169086b91a \ - --hash=sha256:0bf2a864d67e76e5c9a34dc26ec616a66b9888e25e7b9460e1c76d3293bd9dbf \ - --hash=sha256:0db14f5dafddbb6d9208827849fad01f1a2609380add406671a26386cdf15a19 \ - --hash=sha256:0eb9ff8191e8498cca014656ae6b8d61f39da5f95b488805da4bb029cccbfbaf \ - --hash=sha256:0f4b68347f8c5eab4a13419215bdfd7f8c9b19f2b25520968adfad23eb0ce60c \ - --hash=sha256:1085e7fbddd3be5f89cc898938f42c0b3c711fdcb37d75221de2666af647c175 \ - --hash=sha256:116bb52f642a37c115f517494ea5feb03889e04df47eeff5b130b1808ce7c219 \ - --hash=sha256:12c63dfb4a98206f045aa9563db46507995f7ef6d83b2f68eda65c307c6829eb \ - --hash=sha256:133a43e73a802c5562be9bbcd03d090aa5a1fe899db609c29e8c8d815c5f6de6 \ - --hash=sha256:1353ef0c1b138e1907ae78e2f6c63ff67501122006b0f9abad68fda5f4ffc6ab \ - --hash=sha256:15d939a21d546304880945ca1ecb8a039db6b4dc49b2c5a400387cdae6a62e26 \ - --hash=sha256:177b5253b2834fe3678cb4a5f0059808258584c559193998be2601324fdeafb1 \ - --hash=sha256:1872df69a4de6aead3491198eaf13810b565bdbeec3ae2dc8780f14458ec73ce \ - --hash=sha256:1b4b79e8ebf6b55351f0d91fe80f893b4743f104bff22e90697db1590e47a218 \ - --hash=sha256:1b52b4fb9df4eb9ae465f8d0c228a00624de2334f216f178a995ccdcf82c4634 \ - --hash=sha256:1ba88449deb3de88bd40044603fafffb7bc2b055d626a330323a9ed736661695 \ - --hash=sha256:1cc7ea17a6824959616c525620e387f6dd30fec8cb44f649e31712db02123dad \ - --hash=sha256:218551f6df4868a8d527e3062d0fb968682fe92054e89978594c28e642c43a73 \ - --hash=sha256:26a5784ded40c9e318cfc2bdb30fe164bdb8665ded9cd64d500a34fb42067b1c \ - --hash=sha256:2713baf880df847f2bece4230d4d094280f4e67b1e813eec43b4c0e144a34ffe \ - --hash=sha256:2a15a08b17dd94c53a1da0438822d70ebcd13f8c3a95abe3a9ef9f11a94830aa \ - --hash=sha256:2f981d352f04553a7171b8e44369f2af4055f888dfb147d55e42d29e29e74559 \ - --hash=sha256:32001d6a8fc98c8cb5c947787c5d08b0a50663d139f1305bac5885d98d9b40fa \ - --hash=sha256:3524b778fe5cfb3452a09d31e7b5adefeea8c5be1d43c4f810ba09f2ceb29d37 \ - --hash=sha256:3537e01efc9d4dccdf77221fb1cb3b8e1a38d5428920e0657ce299b20324d758 \ - --hash=sha256:35add3b638a5d900e807944a078b51922212fb3dedb01633a8defc4b01a3c85f \ - --hash=sha256:38664109c14ffc9e7437e86b4dceb442b0096dfe3541d7864d9cbe1da4cf36c8 \ - --hash=sha256:3a7e8ae81ae39e62a41ec302f972ba6ae23a5c5396c8e60113e9066ef893da0d \ - --hash=sha256:3b562dd9e9ea93f13d53989d23a7e775fdfd1066c33494ff43f5418bc8c58a5c \ - --hash=sha256:457a69a9577064c05a97c41f4e65148652db078a3a509039e64d3467b9e7ef97 \ - --hash=sha256:4bd4cd07944443f5a265608cc6aab442e4f74dff8088b0dfc8238647b8f6ae9a \ - --hash=sha256:4e885a3d1efa2eadc93c894a21770e4bc67899e3543680313b09f139e149ab19 \ - --hash=sha256:4faffd047e07c38848ce017e8725090413cd80cbc23d86e55c587bf979e579c9 \ - --hash=sha256:509fa21c6deb7a7a273d629cf5ec029bc209d1a51178615ddf718f5918992ab9 \ - --hash=sha256:5678211cb9333a6468fb8d8be0305520aa073f50d17f089b5b4b477ea6e67fdc \ - --hash=sha256:591ae9f2a647529ca990bc681daebdd52c8791ff06c2bfa05b65163e28102ef2 \ - --hash=sha256:5a7d5dc5140555cf21a6fefbdbf8723f06fcd2f63ef108f2854de715e4422cb4 \ - --hash=sha256:69c0b73548bc525c8cb9a251cddf1931d1db4d2258e9599c28c07ef3580ef354 \ - --hash=sha256:6b5420a1d9450023228968e7e6a9ce57f65d148ab56d2313fcd589eee96a7a50 \ - --hash=sha256:722695808f4b6457b320fdc131280796bdceb04ab50fe1795cd540799ebe1698 \ - --hash=sha256:729586769a26dbceff69f7a7dbbf59ab6572b99d94576a5592625d5b411576b9 \ - --hash=sha256:77f0643abe7495da77fb436f50f8dab76dbc6e5fd25d39589a0f1fe6548bfa2b \ - --hash=sha256:795e7751525cae078558e679d646ae45574b47ed6e7771863fcc079a6171a0fc \ - --hash=sha256:7be7b61bb172e1ed687f1754f8e7484f1c8019780f6f6b0786e76bb01c2ae115 \ - --hash=sha256:7c3fb7d25180895632e5d3148dbdc29ea38ccb7fd210aa27acbd1201a1902c6e \ - --hash=sha256:7e68f88e5b8799aa49c85cd116c932a1ac15caaa3f5db09087854d218359e485 \ - --hash=sha256:83891d0e9fb81a825d9a6d61e3f07550ca70a076484292a70fde82c4b807286f \ - --hash=sha256:8485f406a96febb5140bfeca44a73e3ce5116b2501ac54fe953e488fb1d03b12 \ - --hash=sha256:8709b08f4a89aa7586de0aadc8da56180242ee0ada3999749b183aa23df95025 \ - --hash=sha256:8f71bc33915be5186016f675cd83a1e08523649b0e33efdb898db577ef5bb009 \ - --hash=sha256:915c04ba3851909ce68ccc2b8e2cd691618c4dc4c4232fb7982bca3f41fd8c3d \ - --hash=sha256:949b8d66bc381ee8b007cd945914c721d9aba8e27f71959d750a46f7c282b20b \ - --hash=sha256:94c6f0bb423f739146aec64595853541634bde58b2135f27f61c1ffd1cd4d16a \ - --hash=sha256:9a1abfdc021a164803f4d485104931fb8f8c1efd55bc6b748d2f5774e78b62c5 \ - --hash=sha256:9b79b7a16f7fedff2495d684f2b59b0457c3b493778c9eed31111be64d58279f \ - --hash=sha256:a320721ab5a1aba0a233739394eb907f8c8da5c98c9181d1161e77a0c8e36f2d \ - --hash=sha256:a4afe79fb3de0b7097d81da19090f4df4f8d3a2b3adaa8764138aac2e44f3af1 \ - --hash=sha256:ad2cf8aa28b8c020ab2fc8287b0f823d0a7d8630784c31e9ee5edea20f406287 \ - --hash=sha256:b8512a91625c9b3da6f127803b166b629725e68af71f8184ae7e7d54686a56d6 \ - --hash=sha256:bc51efed119bc9cfdf792cdeaa4d67e8f6fcccab66ed4bfdd6bde3e59bfcbb2f \ - --hash=sha256:bdc919ead48f234740ad807933cdf545180bfbe9342c2bb451556db2ed958581 \ - --hash=sha256:bdd37121970bfd8be76c5fb069c7751683bdf373db1ed6c010162b2a130248ed \ - --hash=sha256:be8813b57049a7dc738189df53d69395eba14fb99345e0a5994914a3864c8a4b \ - --hash=sha256:c0c0b3ade1c0b13b936d7970b1d37a57acde9199dc2aecc4c336773e1d86049c \ - --hash=sha256:c47a551199eb8eb2121d4f0f15ae0f923d31350ab9280078d1e5f12b249e0026 \ - --hash=sha256:c4ffb7ebf07cfe8931028e3e4c85f0357459a3f9f9490886198848f4fa002ec8 \ - --hash=sha256:ccfcd093f13f0f0b7fdd0f198b90053bf7b2f02a3927a30e63f3ccc9df56b676 \ - --hash=sha256:d2ee202e79d8ed691ceebae8e0486bd9a2cd4794cec4824e1c99b6f5009502f6 \ - --hash=sha256:d53197da72cc091b024dd97249dfc7794d6a56530370992a5e1a08983ad9230e \ - --hash=sha256:d6dd0be5b5b189d31db7cda48b91d7e0a9795f31430b7f271219ab30f1d3ac9d \ - --hash=sha256:d88b440e37a16e651bda4c7c2b930eb586fd15ca7406cb39e211fcff3bf3017d \ - --hash=sha256:de8a88e63464af587c950061a5e6a67d3632e36df62b986892331d4620a35c01 \ - --hash=sha256:df2449253ef108a379b8b5d6b43f4b1a8e81a061d6537becd5582fba5f9196d7 \ - --hash=sha256:e1c1493fb6e50ab01d20a22826e57520f1284df32f2d8601fdd90b6304601419 \ - --hash=sha256:e1cf1972137e83c5d4c136c43ced9ac51d0e124706ee1c8aa8532c1287fa8795 \ - --hash=sha256:e2103a929dfa2fcaf9bb4e7c091983a49c9ac3b19c9061b6d5427dd7d14d81a1 \ - --hash=sha256:e56b7d45a839a697b5eb268c82a71bd8c7f6c94d6fd50c3d577fa39a9f1409f5 \ - --hash=sha256:e8afc3f2ccfa24215f8cb28dcf43f0113ac3c37c2f0f0806d8c70e4228c5cf4d \ - --hash=sha256:e8fc20152abba6b83724d7ff268c249fa196d8259ff481f3b1476383f8f24e42 \ - --hash=sha256:eaa9599de571d72e2daf60164784109f19978b327a3910d3e9de8c97b5b70cfe \ - --hash=sha256:ec15a59cf5af7be74194f7ab02d0f59a62bdcf1a537677ce67a2537c9b87fcda \ - --hash=sha256:f190daf01f13c72eac4efd5c430a8de82489d9cff23c364c3ea822545032993e \ - --hash=sha256:f34c41761022dd093b4b6896d4810782ffbabe30f2d443ff5f083e0cbbb8c737 \ - --hash=sha256:f3e98bb3798ead92273dc0e5fd0f31ade220f59a266ffd8a4f6065e0a3ce0523 \ - --hash=sha256:f42d0984e947b8adf7dd6dde396e720934d12c506ce84eea8476409563607591 \ - --hash=sha256:f71a396b3bf33ecaa1626c255855702aca4d3d9fea5e051b41ac59a9c1c41edc \ - --hash=sha256:f9e130248f4462aaa8e2552d547f36ddadbeaa573879158d721bbd33dfe4743a \ - --hash=sha256:fed51ac40f757d41b7c48425901843666a6677e3e8eb0abcff09e4ba6e664f50 - # via - # -c requirements-ci.txt - # jinja2 -matplotlib==3.11.1 \ - --hash=sha256:0c1f44890d435c1b4ef52f701ad5828cb450ea97bcc83918fda6be74965d6cd2 \ - --hash=sha256:11664c551345553db92e61cae6cf1376f138f8c47cafdf13b64b18f3e3e9e464 \ - --hash=sha256:1524e2bdd48a93557aa47ddcfe9c225dfdd57d5a01a5c49128c20f0632980ee1 \ - --hash=sha256:191163532cdefcb1571ca38a6d7e6474baccde64495783e6ba47aa07ec4b9bbb \ - --hash=sha256:1ac697e591c11b6ad04679a73c2d2f9980fe9d9f0311fb414a2e329706343dfb \ - --hash=sha256:216fbb93a74add02ddb4cb38ef5348f59ac00b3e84567eaf16598772d40e150a \ - --hash=sha256:21a67b961a6d597bca54fae826cd20695ba4a6e4d05424a08da6e13e3176fd6b \ - --hash=sha256:2abdee5ffa2fe11b2d19f7a5c63b785fb7c28cc46c7bc1814156341d9d1a33e1 \ - --hash=sha256:30c492d4ba9448595b6fd8708c6725963f8148e25c0d8842948da5b05f0ee8d3 \ - --hash=sha256:3d3fd84082b1afbd9398466c81309e20045be20d48fe0fb18c43504d164cbbb2 \ - --hash=sha256:427258425f9a3fc4ed79a91f9e9b9aaf5a82cb6571e85dc14063cc6fbb993741 \ - --hash=sha256:480194afceca4df2f137c2721227d3cba67121fbf4397b69cee7f83714b0a58a \ - --hash=sha256:54d47b8ae8b579633a3902ca5b4ad6c1e132a5626d64447b2e22a66394e79987 \ - --hash=sha256:5af0dcda57d471440a7b5b623e70e0a61003518443d9098f211a96ecfbbc25be \ - --hash=sha256:5e1f8922ba31959cf6a9dfb51be64b7f7bc582801a3957dc0c2f3afcd3537adf \ - --hash=sha256:5e510088c27a89d53580a752f959146893563e63c330e161d159b0fee652af6f \ - --hash=sha256:6771b0cd7838c6a857a7209814158c0ad09bfef878db3033dd82d70ad101f191 \ - --hash=sha256:67e4c3cd578c65ebd81bdc09a1b6592ceafee6dfafe116dc85dfcb647b5bbb18 \ - --hash=sha256:68408341f2312836fbbdf6b3c78047f65b2d8752f5fd221c3e72d348f5b34f8b \ - --hash=sha256:69647db5746941c793d6e445a4cd349323ffb87d9cc958c2ad84a659b4832d30 \ - --hash=sha256:6be943cb68bc6660ead58c55b3aa6366cba2ef7feb06460fbcce32360376f19f \ - --hash=sha256:7389b77ed2ab0552f46d9a90b81b7b8e6dfcdc42adc36c37a0865799843e0e3e \ - --hash=sha256:7f33a781e12b1e53b278deb2f5373c2e55ec4f10727be3440c0cfb5cda9f944f \ - --hash=sha256:83235693abde86e5e0129998f80ee39fc7f58e6d56a88fafb28a9278833e9d5f \ - --hash=sha256:88a2a27dd9691ae448dfae4b26f59036be90c3c28757edd3553a29559d00859f \ - --hash=sha256:89b193b255f4f6f7948dbcee3691f4f341ab05d9a8874a67b45ddb4182922eda \ - --hash=sha256:8b14eb22961fe865efb0e4ff167e333e428908b00115a8d800ccb65ee108e481 \ - --hash=sha256:9601a1e90be21e4884c53b4f3dc3ee0544654946f9975258d691f1c2e2f119c6 \ - --hash=sha256:96f4bdeea33a8d15a071dbfe6d119451b1d719c733ac666d65357082901a9099 \ - --hash=sha256:9a076f4fc5cdc43fdf510f5981418d25c2db4973418d9f22d8bb3dc8045ada78 \ - --hash=sha256:9fdf1c818ab05d0e74002091ddaf414478a3a449ec9d51c8976d45be7e3a01e2 \ - --hash=sha256:ac104be2768ffdd8655db9e71b768cbb45f2b9aa7b450cf1595e8f65d3822319 \ - --hash=sha256:ae30c6109848ac0f9fa36c5d6270938487614c47ba31860bd5361266dabc5685 \ - --hash=sha256:aee55e9041211bf84302ab55ec3965df18dd90ae19f8b58332a7feaf208bfe83 \ - --hash=sha256:b0a19dcf73406d3746d25a5ed42d713604c9a3e024d129b102852b0d941cb9f3 \ - --hash=sha256:b4c78ceb2f11bcac7389d305cda17aeb1f4586a857854ab5780bd3dd8dbfc407 \ - --hash=sha256:b7cf158e7add54a8d51ac9b5a84abd6d4e13ed4951b4f25f1c5139f41c2addb2 \ - --hash=sha256:b937b9dba5f5f6c1e31c47abe2186c865c0914fd18f2ce0dfc39c9adcef5951d \ - --hash=sha256:ba8f811b8ddfac493734d6af0b2dff96919d0c28ca0d641858dab4262777c6ea \ - --hash=sha256:c52f7ad20ef476806ed212380b1d54d20310c8b86bdc2c9a68b51f0024a44472 \ - --hash=sha256:c90be0b73568da4f662afac580956a76e308437e641b4a45aa08925eeb67d95f \ - --hash=sha256:d2ace7273b9a5061a3b420918a16fae1f2dc5dfee1abcc13aba71b5d94b1820c \ - --hash=sha256:dadfe80797174e2984aae3be0b77594a3c72d2c0a40fbd4a0de48d2728caf3ae \ - --hash=sha256:e15ef41507f3d525f46154ac9e3ae785dacde9f20e593a25de8986267892ef74 \ - --hash=sha256:e4b9ac2f1f607ecda2af90a5232beee2af7582fce1cc30c4b6a1b012dc21ee99 \ - --hash=sha256:f2912f647f3fbe1ccf085f91e213936f9101bead81a5e670565b1f1b3712f4fb - # via - # -c requirements-ci.txt - # semantica (pyproject.toml) - # seaborn -matplotlib-inline==0.2.2 \ - --hash=sha256:3c821cf1c209f59fb2d2d64abbf5b23b67bcb2210d663f9918dd851c6da1fcf6 \ - --hash=sha256:72f3fe8fce36b70d4a5b612f899090cd0401deddc4ea90e1572b9f4bfb058c79 - # via - # -c requirements-ci.txt - # ipython mdurl==0.1.2 \ --hash=sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8 \ --hash=sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba # via # -c requirements-ci.txt # markdown-it-py -mmh3==5.2.1 \ - --hash=sha256:022aa1a528604e6c83d0a7705fdef0b5355d897a9e0fa3a8d26709ceaa06965d \ - --hash=sha256:0634581290e6714c068f4aa24020acf7880927d1f0084fa753d9799ae9610082 \ - --hash=sha256:08043f7cb1fb9467c3fbbbaea7896986e7fbc81f4d3fd9289a73d9110ab6207a \ - --hash=sha256:0a3984146e414684a6be2862d84fcb1035f4984851cb81b26d933bab6119bf00 \ - --hash=sha256:0bbc17250b10d3466875a40a52520a6bac3c02334ca709207648abd3c223ed5c \ - --hash=sha256:0cc21533878e5586b80d74c281d7f8da7932bc8ace50b8d5f6dbf7e3935f63f1 \ - --hash=sha256:0d0b7e803191db5f714d264044e06189c8ccd3219e936cc184f07106bd17fd7b \ - --hash=sha256:113f78e7463a36dbbcea05bfe688efd7fa759d0f0c56e73c974d60dcfec3dfcc \ - --hash=sha256:169e0d178cb59314456ab30772429a802b25d13227088085b0d49b9fe1533104 \ - --hash=sha256:17fbb47f0885ace8327ce1235d0416dc86a211dcd8cc1e703f41523be32cfec8 \ - --hash=sha256:19bbd3b841174ae6ed588536ab5e1b1fe83d046e668602c20266547298d939a9 \ - --hash=sha256:1d9f9a3ce559a5267014b04b82956993270f63ec91765e13e9fd73daf2d2738e \ - --hash=sha256:1e4ecee40ba19e6975e1120829796770325841c2f153c0e9aecca927194c6a2a \ - --hash=sha256:22b0f9971ec4e07e8223f2beebe96a6cfc779d940b6f27d26604040dd74d3a44 \ - --hash=sha256:26fb5b9c3946bf7f1daed7b37e0c03898a6f062149127570f8ede346390a0825 \ - --hash=sha256:2778fed822d7db23ac5008b181441af0c869455b2e7d001f4019636ac31b6fe4 \ - --hash=sha256:28cfab66577000b9505a0d068c731aee7ca85cd26d4d63881fab17857e0fe1fb \ - --hash=sha256:29bc3973676ae334412efdd367fcd11d036b7be3efc1ce2407ef8676dabfeb82 \ - --hash=sha256:2bd9f19f7f1fcebd74e830f4af0f28adad4975d40d80620be19ffb2b2af56c9f \ - --hash=sha256:2d5d542bf2abd0fd0361e8017d03f7cb5786214ceb4a40eef1539d6585d93386 \ - --hash=sha256:30e4d2084df019880d55f6f7bea35328d9b464ebee090baa372c096dc77556fb \ - --hash=sha256:3619473a0e0d329fd4aec8075628f8f616be2da41605300696206d6f36920c3d \ - --hash=sha256:368625fb01666655985391dbad3860dc0ba7c0d6b9125819f3121ee7292b4ac8 \ - --hash=sha256:3737303ca9ea0f7cb83028781148fcda4f1dac7821db0c47672971dabcf63593 \ - --hash=sha256:3a9fed49c6ce4ed7e73f13182760c65c816da006debe67f37635580dfb0fae00 \ - --hash=sha256:3c38d142c706201db5b2345166eeef1e7740e3e2422b470b8ba5c8727a9b4c7a \ - --hash=sha256:3cb61db880ec11e984348227b333259994c2c85caa775eb7875decb3768db890 \ - --hash=sha256:3d74a03fb57757ece25aa4b3c1c60157a1cece37a020542785f942e2f827eed5 \ - --hash=sha256:3f796b535008708846044c43302719c6956f39ca2d93f2edda5319e79a29efbb \ - --hash=sha256:41105377f6282e8297f182e393a79cfffd521dde37ace52b106373bdcd9ca5cb \ - --hash=sha256:41aac7002a749f08727cb91babff1daf8deac317c0b1f317adc69be0e6c375d1 \ - --hash=sha256:44983e45310ee5b9f73397350251cdf6e63a466406a105f1d16cb5baa659270b \ - --hash=sha256:4cbbde66f1183db040daede83dd86c06d663c5bb2af6de1142b7c8c37923dd74 \ - --hash=sha256:4eda76074cfca2787c8cf1bec603eaebdddd8b061ad5502f85cddae998d54f00 \ - --hash=sha256:4fc6cd65dc4d2fdb2625e288939a3566e36127a84811a4913f02f3d5931da52d \ - --hash=sha256:50885073e2909251d4718634a191c49ae5f527e5e1736d738e365c3e8be8f22b \ - --hash=sha256:5174a697ce042fa77c407e05efe41e03aa56dae9ec67388055820fb48cf4c3ba \ - --hash=sha256:54b64fb2433bc71488e7a449603bf8bd31fbcf9cb56fbe1eb6d459e90b86c37b \ - --hash=sha256:54fe8518abe06a4c3852754bfd498b30cc58e667f376c513eac89a244ce781a4 \ - --hash=sha256:55dbbd8ffbc40d1697d5e2d0375b08599dae8746b0b08dea05eee4ce81648fac \ - --hash=sha256:57b52603e89355ff318025dd55158f6e71396c0f1f609d548e9ea9c94cc6ce0a \ - --hash=sha256:58370d05d033ee97224c81263af123dea3d931025030fd34b61227a768a8858a \ - --hash=sha256:5d87a3584093e1a89987e3d36d82c98d9621b2cb944e22a420aa1401e096758f \ - --hash=sha256:623f938f6a039536cc02b7582a07a080f13fdfd48f87e63201d92d7e34d09a18 \ - --hash=sha256:62815d2c67f2dd1be76a253d88af4e1da19aeaa1820146dec52cf8bee2958b16 \ - --hash=sha256:6290289fa5fb4c70fd7f72016e03633d60388185483ff3b162912c81205ae2cf \ - --hash=sha256:67e41a497bac88cc1de96eeba56eeb933c39d54bc227352f8455aa87c4ca4000 \ - --hash=sha256:6c85c38a279ca9295a69b9b088a2e48aa49737bb1b34e6a9dc6297c110e8d912 \ - --hash=sha256:6f01f044112d43a20be2f13a11683666d87151542ad627fe41a18b9791d2802f \ - --hash=sha256:707151644085dd0f20fe4f4b573d28e5130c4aaa5f587e95b60989c5926653b5 \ - --hash=sha256:723b2681ed4cc07d3401bbea9c201ad4f2a4ca6ba8cddaff6789f715dd2b391e \ - --hash=sha256:72d1cc63bcc91e14933f77d51b3df899d6a07d184ec515ea7f56bff659e124d7 \ - --hash=sha256:7374d6e3ef72afe49697ecd683f3da12f4fc06af2d75433d0580c6746d2fa025 \ - --hash=sha256:7501e9be34cb21e72fcfe672aafd0eee65c16ba2afa9dcb5500a587d3a0580f0 \ - --hash=sha256:76219cd1eefb9bf4af7856e3ae563d15158efa145c0aab01e9933051a1954045 \ - --hash=sha256:7aec798c2b01aaa65a55f1124f3405804184373abb318a3091325aece235f67c \ - --hash=sha256:7be6dfb49e48fd0a7d91ff758a2b51336f1cd21f9d44b20f6801f072bd080cdd \ - --hash=sha256:7e4e1f580033335c6f76d1e0d6b56baf009d1a64d6a4816347e4271ba951f46d \ - --hash=sha256:7e8ec5f606e0809426d2440e0683509fb605a8820a21ebd120dcdba61b74ef7f \ - --hash=sha256:7f196cd7910d71e9d9860da0ff7a77f64d22c1ad931f1dd18559a06e03109fc0 \ - --hash=sha256:82f3802bfc4751f420d591c5c864de538b71cea117fce67e4595c2afede08a15 \ - --hash=sha256:85ffc9920ffc39c5eee1e3ac9100c913a0973996fbad5111f939bbda49204bb7 \ - --hash=sha256:8e6c219e375f6341d0959af814296372d265a8ca1af63825f65e2e87c618f006 \ - --hash=sha256:8f767ba0911602ddef289404e33835a61168314ebd3c729833db2ed685824211 \ - --hash=sha256:8ff038d52ef6aa0f309feeba00c5095c9118d0abf787e8e8454d6048db2037fc \ - --hash=sha256:915e7a2418f10bd1151b1953df06d896db9783c9cfdb9a8ee1f9b3a4331ab503 \ - --hash=sha256:92883836caf50d5255be03d988d75bc93e3f86ba247b7ca137347c323f731deb \ - --hash=sha256:960b1b3efa39872ac8b6cc3a556edd6fb90ed74f08c9c45e028f1005b26aa55d \ - --hash=sha256:9aeaf53eaa075dd63e81512522fd180097312fb2c9f476333309184285c49ce0 \ - --hash=sha256:9d8089d853c7963a8ce87fff93e2a67075c0bc08684a08ea6ad13577c38ffc38 \ - --hash=sha256:a4130d0b9ce5fad6af07421b1aecc7e079519f70d6c05729ab871794eded8617 \ - --hash=sha256:a482ac121de6973897c92c2f31defc6bafb11c83825109275cffce54bb64933f \ - --hash=sha256:add7ac388d1e0bf57259afbcf9ed05621a3bf11ce5ee337e7536f1e1aaf056b0 \ - --hash=sha256:b1f12bd684887a0a5d55e6363ca87056f361e45451105012d329b86ec19dbe0b \ - --hash=sha256:b3f99e1756fc48ad507b95e5d86f2fb21b3d495012ff13e6592ebac14033f166 \ - --hash=sha256:b4cce60d0223074803c9dbe0721ad3fa51dafe7d462fee4b656a1aa01ee07518 \ - --hash=sha256:baeb47635cb33375dee4924cd93d7f5dcaa786c740b08423b0209b824a1ee728 \ - --hash=sha256:bbea5b775f0ac84945191fb83f845a6fd9a21a03ea7f2e187defac7e401616ad \ - --hash=sha256:bbfcb95d9a744e6e2827dfc66ad10e1020e0cac255eb7f85652832d5a264c2fc \ - --hash=sha256:bd6e7d363aa93bd3421b30b6af97064daf47bc96005bddba67c5ffbc6df426b8 \ - --hash=sha256:be77c402d5e882b6fbacfd90823f13da8e0a69658405a39a569c6b58fdb17b03 \ - --hash=sha256:c302245fd6c33d96bd169c7ccf2513c20f4c1e417c07ce9dce107c8bc3f8411f \ - --hash=sha256:c88653877aeb514c089d1b3d473451677b8b9a6d1497dbddf1ae7934518b06d2 \ - --hash=sha256:cae6383181f1e345317742d2ddd88f9e7d2682fa4c9432e3a74e47d92dce0229 \ - --hash=sha256:cd471ede0d802dd936b6fab28188302b2d497f68436025857ca72cd3810423fe \ - --hash=sha256:d106493a60dcb4aef35a0fac85105e150a11cf8bc2b0d388f5a33272d756c966 \ - --hash=sha256:d30b650595fdbe32366b94cb14f30bb2b625e512bd4e1df00611f99dc5c27fd4 \ - --hash=sha256:d51fde50a77f81330523562e3c2734ffdca9c4c9e9d355478117905e1cfe16c6 \ - --hash=sha256:d57dea657357230cc780e13920d7fa7db059d58fe721c80020f94476da4ca0a1 \ - --hash=sha256:d771f085fcdf4035786adfb1d8db026df1eb4b41dac1c3d070d1e49512843227 \ - --hash=sha256:dae0f0bd7d30c0ad61b9a504e8e272cb8391eed3f1587edf933f4f6b33437450 \ - --hash=sha256:db0562c5f71d18596dcd45e854cf2eeba27d7543e1a3acdafb7eef728f7fe85d \ - --hash=sha256:dfd51b4c56b673dfbc43d7d27ef857dd91124801e2806c69bb45585ce0fa019b \ - --hash=sha256:e080c0637aea036f35507e803a4778f119a9b436617694ae1c5c366805f1e997 \ - --hash=sha256:e48d4dbe0f88e53081da605ae68644e5182752803bbc2beb228cca7f1c4454d6 \ - --hash=sha256:e8b4b5580280b9265af3e0409974fb79c64cf7523632d03fbf11df18f8b0181e \ - --hash=sha256:e8b5378de2b139c3a830f0209c1e91f7705919a4b3e563a10955104f5097a70a \ - --hash=sha256:e904f2417f0d6f6d514f3f8b836416c360f306ddaee1f84de8eef1e722d212e5 \ - --hash=sha256:eee884572b06bbe8a2b54f424dbd996139442cf83c76478e1ec162512e0dd2c7 \ - --hash=sha256:f1fbb0a99125b1287c6d9747f937dc66621426836d1a2d50d05aecfc81911b57 \ - --hash=sha256:f40a95186a72fa0b67d15fef0f157bfcda00b4f59c8a07cbe5530d41ac35d105 \ - --hash=sha256:f6e0bfe77d238308839699944164b96a2eeccaf55f2af400f54dc20669d8d5f2 \ - --hash=sha256:f963eafc0a77a6c0562397da004f5876a9bcf7265a7bcc3205e29636bc4a1312 \ - --hash=sha256:fb9d44c25244e11c8be3f12c938ca8ba8404620ef8092245d2093c6ab3df260f \ - --hash=sha256:fc78739b5ec6e4fb02301984a3d442a91406e7700efbe305071e7fd1c78278f2 \ - --hash=sha256:fceef7fe67c81e1585198215e42ad3fdba3a25644beda8fbdaf85f4d7b93175a \ - --hash=sha256:fd96476f04db5ceba1cfa0f21228f67c1f7402296f0e73fee3513aa680ad237b +narwhals==2.25.0 \ + --hash=sha256:1f0f403e8c7e4463cde9bfe78b12fdd809e3ae3dda6d9b2f802934fb9c7a6a8f \ + --hash=sha256:62c036c810662bf7820b7737077176313bc59350eeeefb808510f388c743e4b2 # via # -c requirements-ci.txt - # fastembed -mpmath==1.3.0 \ - --hash=sha256:7a28eb2a9774d00c7bc92411c19a89209d5da7c4c9a9e227be8330a23a25b91f \ - --hash=sha256:a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c - # via - # -c requirements-ci.txt - # sympy -msgpack==1.2.1 \ - --hash=sha256:01e2dd6c9b19d333a00282330cc8a73d38d8dabc306dc5b42cd668c3ac82e833 \ - --hash=sha256:020e881a764b20d8d7ca1a54fc01b8175519d108e3c3f194fddc200bda95951a \ - --hash=sha256:04c721c2c7448767e9e3f2520a475663d8ee0f09c31890f6d2bd70fd636a9647 \ - --hash=sha256:05f340e47e7e47d2da8db9b53e1bb1d294369e9ef45a747441309f6650b8351d \ - --hash=sha256:0a70e3cf2804a300d921bb0940426e35f4e489a23adfb77a808892241db0a064 \ - --hash=sha256:0adcf06ffde0777c0e1a9b771a2b1c4226ba1bbf748c8efcc02fcdeca3299107 \ - --hash=sha256:0c0d9802354507bcba62af19c17918e3eb437cc25e6f50657d511b5856a77aac \ - --hash=sha256:0e2bf9280bceb5efca998435904b5d3e9fdbcc11d90dc9df30aec7973252b720 \ - --hash=sha256:1233ee2dd0cefba127583de50ea654677277047d238303521db35def3d7b2e7c \ - --hash=sha256:146ee4e9ce80b365c6d4c47073da9da7bcec473e58194ceee5dd7620ace77e06 \ - --hash=sha256:1548006a91aa93c5da81f3bdcebc1a0d10cea2d25969754fbe848da622b2b895 \ - --hash=sha256:196300e7e5d6e74d50f1607ab9c06c4a1484c383cd22defd727902591f7e8dde \ - --hash=sha256:1dabedcd0f23559f3596428c6589c1cd8c6eaed3a0d720795b07b0225d769203 \ - --hash=sha256:20466cca18c49c7292a8984bc15d65857b171e7264bdcb5f96baf8be238791fc \ - --hash=sha256:298872ecf9e61950f1c6af4ca969b859ee91783bb920ef6e6172697d0c8aad74 \ - --hash=sha256:29a3f6e9667868429d8240dfd063ea5ffdc1321c13d783aa23827a38de0dcb22 \ - --hash=sha256:2eda0b7ebb1283a98d3e4492ac933c8af6aff59fd3df1c3ed024f536af4b1dc8 \ - --hash=sha256:2ef59c659f289eddf8aa6623823f19fa2f40a4029266889eac7a2505dd210c35 \ - --hash=sha256:2ff164c1b0bcb740b073b99e945234d0212852fa378e44a208c425379140dbeb \ - --hash=sha256:33f14fba63278b714efe6ad07e50ea5f03d91537aa6a1c5f1ceca4cf44013ca9 \ - --hash=sha256:350cb813d0af6e65d2f7ef0d729f7ff5be5a8bce03665892f43e5883d4ecc1b8 \ - --hash=sha256:4202c74688ca06591f78cb18988228bd4cca2cc75d57b60008372892d2f1e6e6 \ - --hash=sha256:4227224aaec8f7fbcbfbd4272319347b2bb4030366502600f8c45588c5187b07 \ - --hash=sha256:491cc39455ca765fad51fb451bf2915eb2cf41192ab5801ce8d67c1d614fe056 \ - --hash=sha256:575957e79cd51903a4e8495a242442949641e08f1efd5197b43bebd3ea7682b4 \ - --hash=sha256:5ad5467fc3f68b5468e06c5f788d712e9f8ffc8b0cd1bcb160c105c1ee92dae7 \ - --hash=sha256:5bb9c386f0a329c035ddbab4b72d1028bf9627add8dda41070288563d57ed1b1 \ - --hash=sha256:5c24aa15d5963051e1a5c62b12c50cd705992502b5ec1f3bece6046f33c9fc24 \ - --hash=sha256:5f6277e5f783c36786a145e0247fc189a03f35f84b251646e53592d2bc12b355 \ - --hash=sha256:60926b75d00c8e816ef98f3034f484a8bc64242d66839cef4cf7e503142316a0 \ - --hash=sha256:633727297ed063441fd1cda2288865487f33ad14eeb8831afb5f0c396a62cfce \ - --hash=sha256:67f6dd22fa72a93752643f07889796d62739a13415ee630169a8ce764f86cf9f \ - --hash=sha256:6d09badf350af2be9d189184e04e64cf54ad93569ab3d96fca58bd3e84aad707 \ - --hash=sha256:6ee967f7c7e1df2890c671ff2ee51a28ded0efc95da3e507176dee881ce36c66 \ - --hash=sha256:74847557e28ce71bd3c438a447ca90e4b507e997ddbdef8a12a7b283b86c156b \ - --hash=sha256:779197a6513bab3c3632265e3d0f7cb3227e62510841a6f34f1eaa37efbb345e \ - --hash=sha256:787c9bebb5833e8f6fc8abca3c0597683d8d87f56a8842b6b89c75a5f3176e2d \ - --hash=sha256:7d31c0ac0c640f877804c67cb2bc9f4e23dc2db97e96c2e67fa27d38283b41f8 \ - --hash=sha256:810b916696c86ef0deb3b74588480224df4c1b071136c34183e4a2a4284d7ac7 \ - --hash=sha256:83efa1c898e0fc5380fc0cabbf75164c52e3b5cbb45973710d75821928380c73 \ - --hash=sha256:85f57e960d877f2977f6430896191b04a21f8901b3b4baf2e4604329f4db5402 \ - --hash=sha256:8b267ce94efb76fbd1b3373511420074ee3187f0f7811bf394531de13294735a \ - --hash=sha256:8c2ed1e48cc0f460bf3c7780e7137ff21a4e18433451916f2442c1b21036cd7d \ - --hash=sha256:8c7b398c56ff125feae96c2737abfec5595f1fa0aa186df60c56040b8accb95c \ - --hash=sha256:8d00f177ca88a77c1cf848d204a38f249751650b601cb6532acc68805d8a8273 \ - --hash=sha256:8ff92d7feeaf5bc26c51495b69e2f99ed97ab79346fb6555f44be7dd2ac6503b \ - --hash=sha256:91054a783328e0ea7954b8771095705c8d2243b814743fbaadf14552c9c52c5d \ - --hash=sha256:98b58bdb89c46190e4609bb36abe17c6d4105ad13f9c5f8f6f64d320f8ced3fb \ - --hash=sha256:a28d076ca7c82b9c8728ad90b7147489449557038bed50e4241eb832395169b4 \ - --hash=sha256:aa6c4be5d1c02a42b066ca6ddb71adf36432868fdcdb6ee87e634e86e0674190 \ - --hash=sha256:aded5bdf32609dc7987a49bbbd15a8ef096193f96dd8bbeb791de729e650acf5 \ - --hash=sha256:afc5febcd4c99effbc02b528e49d6fd0760b2b7d48c05239e345a5fa6e743d9a \ - --hash=sha256:b50b727bd652bdc37d950336c848ef20ec54a4cafc38dce19b1cd86ad625d0f7 \ - --hash=sha256:c1c79a604a2969a868a78b6ebd27a887e00c624f14f66b3038e0590cb23332d1 \ - --hash=sha256:ca0dacff965c47afdc3749a8469d7302a8f801d6a28758d55120d75e66ce6889 \ - --hash=sha256:d3567748a5107cb40cdf66a275430c2f87c07777698f4bfd25c35f44d533258c \ - --hash=sha256:dc871b997a9370d855b7394465f2f350e847a5b806dd38dcc9c989e7d87da155 \ - --hash=sha256:dd3bfe82d53edfe4b7fc9a7ec9761e23a7a5b1dac22264505af428253c29ed24 \ - --hash=sha256:e3dc2feb0876209d9c38aa56cb1de169bd6c4348f1aa48271f241226590993e6 \ - --hash=sha256:e4f1d0f8f98ade9634e01fb704a408f9336c0a8f1117b369f5db83dc7551d8b1 \ - --hash=sha256:ec0e675d59150a6269ddc9139087c722292664a37d071a849c05c473350f1f2d \ - --hash=sha256:ee1d9ed27d0497b848923746cf762ed2e7db24f4be7eec8e5cbe8c766aa707b7 \ - --hash=sha256:f02cf17a6ca1abe29b5f980644f7551f94d71f2011509b26d8625ce038f0df64 \ - --hash=sha256:f12038a35fabd52e56a3547bab42401af49a45caa6dd00b34c44de235bc93ee2 \ - --hash=sha256:f310233ef7fb9c14e201c93639fe5f5260b005f56f0b29048e999c30935596cc \ - --hash=sha256:f9389552ecf4784886345ead0647e4edc96bee37cbab05b75540f542f766c48c - # via - # -c requirements-ci.txt - # librosa -murmurhash==1.0.15 \ - --hash=sha256:0861cb11039409eaf46878456b7d985ef17b6b484103a6fc367b2ecec846891d \ - --hash=sha256:1349a7c23f6092e7998ddc5bd28546cc31a595afc61e9fdb3afc423feec3d7ad \ - --hash=sha256:189a8de4d657b5da9efd66601b0636330b08262b3a55431f2379097c986995d0 \ - --hash=sha256:213d710fb6f4ef3bc11abbfad0fa94a75ffb675b7dc158c123471e5de869f9af \ - --hash=sha256:2224f30f7729717644745a6f513ea7662517dfe7b1867cf1588177f64c61df3c \ - --hash=sha256:22aa3ceaedd2e57078b491ed08852d512b84ff4ff9bb2ff3f9bf0eec7f214c9e \ - --hash=sha256:231dc7982e1aeae8bbab21f8f21953e3b9fb0a34e3ffe2d2342ff32e4f07af9d \ - --hash=sha256:263807eca40d08c7b702413e45cca75ecb5883aa337237dc5addb660f1483378 \ - --hash=sha256:2680851af6901dbe66cc4aa7ef8e263de47e6e1b425ae324caa571bdf18f8d58 \ - --hash=sha256:26fd7c7855ac4850ad8737991d7b0e3e501df93ebaf0cf45aa5954303085fdba \ - --hash=sha256:32c6fde7bd7e9407003370a07b5f4addacabe1556ad3dc2cac246b7a2bba3400 \ - --hash=sha256:342277d8d7f712d136507fb3ccdba26c076a34ca0f8d1b96f65f0daa556da2e9 \ - --hash=sha256:34e5a91139c40b10f98d0b297907f5d5267b4b1b2e5dd2eb74a021824f751b98 \ - --hash=sha256:3c69b4d3bcd6233782a78907fe10b9b7a796bdc5d28060cf097d067bec280a5d \ - --hash=sha256:43bf4541892ecd95963fcd307bf1c575fc0fee1682f41c93007adee71ca2bb40 \ - --hash=sha256:43cc6ac3b91ca0f7a5ae9c063ba4d6c26972c97fd7c25280ecc666413e4c5535 \ - --hash=sha256:44d211bcc3ec203c47dac06f48ee871093fcbdffa6652a6cc5ea7180306680a8 \ - --hash=sha256:4a70ca4ae19e600d9be3da64d00710e79dde388a4d162f22078d64844d0ebdda \ - --hash=sha256:4fd8189ee293a09f30f4931408f40c28ccd42d9de4f66595f8814879339378bc \ - --hash=sha256:539d8405885d1d19c005f3a2313b47e8e54b0ee89915eb8dfbb430b194328e6c \ - --hash=sha256:55e1a7f65095f0af141c8a460765e026e35d9ec526f0daa2f88fed29a292b2ff \ - --hash=sha256:5678a3ea4fbf0cbaaca2bed9b445f556f294d5f799c67185d05ffcb221a77faf \ - --hash=sha256:58e2b27b7847f9e2a6edf10b47a8c8dd70a4705f45dccb7bf76aeadacf56ba01 \ - --hash=sha256:5a301decfaccfec70fe55cb01dde2a012c3014a874542eaa7cc73477bb749616 \ - --hash=sha256:5d8b43a7011540dc3c7ce66f2134df9732e2bc3bbb4a35f6458bc755e48bde26 \ - --hash=sha256:66395b1388f7daa5103db92debe06842ae3be4c0749ef6db68b444518666cdcc \ - --hash=sha256:671979f15b24817968ff6fab5e3a468e2b05555bac5e92f11155610a37165ffc \ - --hash=sha256:694fd42a74b7ce257169d14c24aa616aa6cd4ccf8abe50eca0557e08da99d055 \ - --hash=sha256:6cb4e962ec4f928b30c271b2d84e6707eff6d942552765b663743cfa618b294b \ - --hash=sha256:7c4280136b738e85ff76b4bdc4341d0b867ee753e73fd8b6994288080c040d0b \ - --hash=sha256:8155d106c63c5a509ec58c19b0c30804f3a0931bc65cca9826efc53373332536 \ - --hash=sha256:847d712136cb462f0e4bd6229ee2d9eb996d8854eb8312dff3d20c8f5181fda5 \ - --hash=sha256:88dc1dd53b7b37c0df1b8b6bce190c12763014492f0269ff7620dc6027f470f4 \ - --hash=sha256:898a629bf111f1aeba4437e533b5b836c0a9d2dd12d6880a9c75f6ca13e30e22 \ - --hash=sha256:899068ba3d7c371e7edd093852c634cce802fefd9aaddfcc0d2fda1d7433c7f9 \ - --hash=sha256:8a181494b5f03ba831f9a13f2de3aab9ef591e508e57239043d65c5c592f5837 \ - --hash=sha256:95d7c52598dce7a8543e5a5f61a893cbb762a62a907c6c9cd025d5f618bb8522 \ - --hash=sha256:9aba94c5d841e1904cd110e94ceb7f49cfb60a874bbfb27e0373622998fb7c7c \ - --hash=sha256:a2ea4546ba426390beff3cd10db8f0152fdc9072c4f2583ec7d8aa9f3e4ac070 \ - --hash=sha256:a32054edb567417ac81f7172b7dd7731846f25c63084edeb20545fa7abc849d7 \ - --hash=sha256:aadac5fd5f3f465094a5e4ecd00d739a2b870651cad06c8d1005153c2e815fb3 \ - --hash=sha256:b3ba6d05de2613535b5a9227d4ad8ef40a540465f64660d4a8800634ae10e04f \ - --hash=sha256:b65a5c4e7f5d71f7ccac2d2b60bdf7092d7976270878cfec59d5a66a533db823 \ - --hash=sha256:bba0e0262c0d08682b028cb963ac477bd9839029486fa1333fc5c01fb6072749 \ - --hash=sha256:bc54facccb32fe1e97d6231edd4f3e2937467c35658b26aa35bbd6a87ebb7cb0 \ - --hash=sha256:c22e56c6a0b70598a66e456de5272f76088bc623688da84ef403148a6d41851d \ - --hash=sha256:c4cd739a00f5a4602201b74568ddabae46ec304719d9be752fd8f534a9464b5e \ - --hash=sha256:cb8ebafae60d5f892acff533cc599a359954d8c016a829514cb3f6e9ee10f322 \ - --hash=sha256:cc93769619b6b42740cab8eebb587709daaa3d8f813372cc60358a571de20d2d \ - --hash=sha256:d37e3ae44746bca80b1a917c2ea625cf216913564ed43f69d2888e5df97db0cb \ - --hash=sha256:d4d681f474830489e2ec1d912095cfff027fbaf2baa5414c7e9d25b89f0fab68 \ - --hash=sha256:d7e47c5746785db6a43b65fac47b9e63dd71dfbd89a8c92693425b9715e68c6e \ - --hash=sha256:dc35606868a5961cf42e79314ca0bddf5a400ce377b14d83192057928d6252ec \ - --hash=sha256:e43a69496342ce530bdd670264cb7c8f45490b296e4764c837ce577e3c7ebd53 \ - --hash=sha256:e525bbd8e26e6b9ab1b56758a59b16c2fffd73bad2f7b8bf361c16f70ff1d980 \ - --hash=sha256:e8e674f02a99828c8a671ba99cd03299381b2f0744e6f25c29cadfc6151dc724 \ - --hash=sha256:ef19f38c6b858eef83caf710773db98c8f7eb2193b4c324650c74f3d8ba299e0 \ - --hash=sha256:f32307fb9347680bb4fe1cbef6362fb39bd994f1b59abd8c09ca174e44199081 \ - --hash=sha256:f3e99a6ee36ef5372df5f138e3d9c801420776d3641a34a49e5c2555f44edba7 \ - --hash=sha256:f4989c16053a9a83b02c520dd00a31f0877d5fd2ab8a9b6b75ed9eba0e25c489 \ - --hash=sha256:f4ac15a2089dc42e6eb0966622d42d2521590a12c92480aafecf34c085302cca \ - --hash=sha256:f9bf47101354fb1dc4b2e313192566f04ba295c28a37e2f71c692759acc1ba3c \ - --hash=sha256:fa1b70b3cc2801ab44179c65827bbd12009c68b34e9d9ce7125b6a0bd35af63c \ - --hash=sha256:fe50dc70e52786759358fd1471e309b94dddfffb9320d9dfea233c7684c894ba \ - --hash=sha256:fe883982114de576c793fd1cf55945c8ee6453ad4c4785ac1a48f84e74fdc650 - # via - # -c requirements-ci.txt - # preshed - # spacy - # thinc -narwhals==2.24.0 \ - --hash=sha256:42fdedf44e5b2ca7505630d45b4ac3058f38d8485cba9fe1652ca23152df7489 \ - --hash=sha256:b5c0f684ccd9d7475b564111e319a4964abcf2baf79d3cf6b1003d06ac9b828d - # via - # -c requirements-ci.txt - # plotly # scikit-learn networkx==3.6.1 \ --hash=sha256:26b7c357accc0c8cde558ad486283728b65b6a95d85ee1cd66bafab4c8168509 \ @@ -1793,39 +451,6 @@ networkx==3.6.1 \ # via # -c requirements-ci.txt # semantica (pyproject.toml) - # torch -numba==0.67.0 \ - --hash=sha256:00c964a5b94d3ae82d83ac162cd610755875b98dadb779fdde06e6bfcdbca47e \ - --hash=sha256:3fa3d1b27f96f2c0d54513d953d7197886aa1eaa7d2439a0eedc44d993fb181a \ - --hash=sha256:4a2ed006635bbd0fe45681ed49f3b4f4bad1abf0c233bcc5842c9e3a34cabd61 \ - --hash=sha256:4d576e62bf2c9370f61312b51573c4bb1f3fe96798bbab56730847a368a316c4 \ - --hash=sha256:50e2b72406c18cda5dd7431b0082cb85ea94e06c64c33607248fc8bef92cfb81 \ - --hash=sha256:5269245a675abdd3e2c35ec6bb2f250355effa9032514d8f2354f0d2d10854bd \ - --hash=sha256:6004d8d5f28d4028687fb2d972d629295b13685943bd2ed5cd8810c3b848e219 \ - --hash=sha256:694c81c6560b2b47e5fc1dc39c29175b907adf862d9af0af801453400a022a61 \ - --hash=sha256:76d3335aaeffb9dc88309420890e73497a00be08a7530441bc2b58ffe025bfa5 \ - --hash=sha256:77e1c7173fee57a0d84e006c7e70346689d6cb3e7db503489bae58646b4eff7b \ - --hash=sha256:7930748ce8355d2a5a28602abab056a61fdc676d17377f27d17993905428171f \ - --hash=sha256:83ab968b0e0fa744eba03351282dd8000796e6ec8e4518f47bd3ed86c0a20c7b \ - --hash=sha256:88f6e0f5cb6c545e158b6ef0496c01b6d6958a7ccc6634a1576a94bbbab29ff2 \ - --hash=sha256:8c0e88acd4341ddf40779db3c0228b9188aca7fcab5f5f3ce9949a1fc71e9a02 \ - --hash=sha256:8c80c847301dc33dc8f84a97a952004023d9a05578ae4512b087176264cc1960 \ - --hash=sha256:9c4953387c77864b596d8296e2cfbdef82b0eea4166ab4864b05d226c51143e0 \ - --hash=sha256:aa5f002f665bec321b950dacaa26ee009e1d720f6ac9d9856eed5efe1caa03a6 \ - --hash=sha256:b68ad5125fe245339cc8dcc036081fc1ea482c5063387b9612a76ccd83dc91cd \ - --hash=sha256:cd75aa535b33fa05d9d930b1ae8af9f97a2881e96d72dfb38ec9b78284d9f851 \ - --hash=sha256:cfba1ac34f0363fb1a250a10e97240780d11e05227892f7286b26fbfd0ad58ce \ - --hash=sha256:d6c8e9ba3f9602471e8c6f563ffcce8db8046741f0bafb782a052e41dc6b6861 \ - --hash=sha256:e7a7b0121466f1e9a8a074b0545fe90e16389623abf979b5d7c299dca1294d7e \ - --hash=sha256:ed333e0af4386294e7f03e550e01411856b6935e717d859225e0a7338c6b6795 \ - --hash=sha256:f074a8e23db78490f11a3930c940be758316c10ac5985be83d2f298dc080acf7 \ - --hash=sha256:f63d43db06b4756424d6d2484737c902e0ae944a0eec3e8b0b4de2c695b15caa \ - --hash=sha256:f99f880ff25f418a67f9a1d00d0ddfbc63430f627b523e515085a592a7567f4b - # via - # -c requirements-ci.txt - # librosa - # pynndescent - # umap-learn numpy==2.4.6 \ --hash=sha256:001fbb8e08d942dd57599e781f2472269ee7f2755fae407b4f67b2f0b17da3f1 \ --hash=sha256:0280e0356c0829a18d9de1cb7eee50ec22ca639878d7240307ca0943d73cd2c4 \ @@ -1902,200 +527,9 @@ numpy==2.4.6 \ # via # -c requirements-ci.txt # semantica (pyproject.toml) - # blis - # contourpy - # faiss-cpu - # fastembed - # gensim - # librosa - # matplotlib - # numba - # onnxruntime - # opencv-python # pandas # scikit-learn # scipy - # seaborn - # sentence-transformers - # soundfile - # soxr - # spacy - # thinc - # transformers - # umap-learn -nvidia-cublas==13.1.1.3 \ - --hash=sha256:37936a16db8fe4ac1f065c2139360608a543a09275cb1a1af612e08cfa065436 \ - --hash=sha256:b6cdce694e47ff6aadf0a69df1cab6628d696f5ff56e8d16af50309d855fa20f \ - --hash=sha256:b7a210458267ac818974c53038fbec2e969d5c99f305ab15c72522fa9f001dd5 - # via - # -c requirements-ci.txt - # cuda-toolkit - # nvidia-cudnn-cu13 - # nvidia-cusolver -nvidia-cuda-cupti==13.0.85 \ - --hash=sha256:4eb01c08e859bf924d222250d2e8f8b8ff6d3db4721288cf35d14252a4d933c8 \ - --hash=sha256:683f58d301548deeefcb8f6fac1b8d907691b9d8b18eccab417f51e362102f00 \ - --hash=sha256:796bd679890ee55fb14a94629b698b6db54bcfd833d391d5e94017dd9d7d3151 - # via - # -c requirements-ci.txt - # cuda-toolkit -nvidia-cuda-nvrtc==13.0.88 \ - --hash=sha256:6bcd4e7f8e205cbe644f5a98f2f799bef9556fefc89dd786e79a16312ce49872 \ - --hash=sha256:ad9b6d2ead2435f11cbb6868809d2adeeee302e9bb94bcf0539c7a40d80e8575 \ - --hash=sha256:d27f20a0ca67a4bb34268a5e951033496c5b74870b868bacd046b1b8e0c3267b - # via - # -c requirements-ci.txt - # cuda-toolkit - # nvidia-cublas -nvidia-cuda-runtime==13.0.96 \ - --hash=sha256:7f82250d7782aa23b6cfe765ecc7db554bd3c2870c43f3d1821f1d18aebf0548 \ - --hash=sha256:ef9bcbe90493a2b9d810e43d249adb3d02e98dd30200d86607d8d02687c43f55 \ - --hash=sha256:f79298c8a098cec150a597c8eba58ecdab96e3bdc4b9bc4f9983635031740492 - # via - # -c requirements-ci.txt - # cuda-toolkit -nvidia-cudnn-cu13==9.20.0.48 \ - --hash=sha256:0c45dd8eeb50b603f07995b1b300c62ffe6a1980482b82b3bcf94a4ca9d49304 \ - --hash=sha256:af8139732b99c0118be65ea5aac97f0d46018f8c552889e49d2fb0c6261a4a24 \ - --hash=sha256:e31454ae00094b0c55319d9d15b6fa2fc50a9e1c0f5c8c80fb75258234e731e1 - # via - # -c requirements-ci.txt - # torch -nvidia-cufft==12.0.0.61 \ - --hash=sha256:2708c852ef8cd89d1d2068bdbece0aa188813a0c934db3779b9b1faa8442e5f5 \ - --hash=sha256:2abce5b39d2f5ae12730fb7e5db6696533e36c26e2d3e8fd1750bdd2853364eb \ - --hash=sha256:6c44f692dce8fd5ffd3e3df134b6cdb9c2f72d99cf40b62c32dde45eea9ddad3 - # via - # -c requirements-ci.txt - # cuda-toolkit -nvidia-cufile==1.15.1.6 \ - --hash=sha256:08a3ecefae5a01c7f5117351c64f17c7c62efa5fffdbe24fc7d298da19cd0b44 \ - --hash=sha256:bdc0deedc61f548bddf7733bdc216456c2fdb101d020e1ab4b88d232d5e2f6d1 - # via - # -c requirements-ci.txt - # cuda-toolkit -nvidia-curand==10.4.0.35 \ - --hash=sha256:133df5a7509c3e292aaa2b477afd0194f06ce4ea24d714d616ff36439cee349a \ - --hash=sha256:1aee33a5da6e1db083fe2b90082def8915f30f3248d5896bcec36a579d941bfc \ - --hash=sha256:65b1710aa6961d326b411e314b374290904c5ddf41dc3f766ebc3f1d7d4ca69f - # via - # -c requirements-ci.txt - # cuda-toolkit -nvidia-cusolver==12.0.4.66 \ - --hash=sha256:02c2457eaa9e39de20f880f4bd8820e6a1cfb9f9a34f820eb12a155aa5bc92d2 \ - --hash=sha256:0a759da5dea5c0ea10fd307de75cdeb59e7ea4fcb8add0924859b944babf1112 \ - --hash=sha256:16515bd33a8e76bb54d024cfa068fa68d30e80fc34b9e1090813ea9362e0cb65 - # via - # -c requirements-ci.txt - # cuda-toolkit -nvidia-cusparse==12.6.3.3 \ - --hash=sha256:2b3c89c88d01ee0e477cb7f82ef60a11a4bcd57b6b87c33f789350b59759360b \ - --hash=sha256:80bcc4662f23f1054ee334a15c72b8940402975e0eab63178fc7e670aa59472c \ - --hash=sha256:cbcf42feb737bd7ec15b4c0a63e62351886bd3f975027b8815d7f720a2b5ea79 - # via - # -c requirements-ci.txt - # cuda-toolkit - # nvidia-cusolver -nvidia-cusparselt-cu13==0.8.1 \ - --hash=sha256:4dca476c50bf4780d46cd0bfbd82e2bc10a08e4fef7950917ce8d7578d22a23f \ - --hash=sha256:786ce87568c303fadb5afcc7102d454cd3040d75f6f8626f5db460d1871f4dd0 \ - --hash=sha256:dccbd362f91a7b9024d1f55ee9f548ac065027ff15d8c8b0db889ab3a8f31215 - # via - # -c requirements-ci.txt - # torch -nvidia-nccl-cu13==2.29.7 \ - --hash=sha256:674a12383e3c38a1bcccae7d4f3633b37852230b6047883cb2f4c2d1b36d9bf5 \ - --hash=sha256:edd81538446786ec3b73972543e53bb43bcaf0bfc8ef76cb679fcc390ffe136d - # via - # -c requirements-ci.txt - # torch -nvidia-nvjitlink==13.3.33 \ - --hash=sha256:26a6de7fb4c8fdaa7703d3dad720d6d427ddfea5c48a528fd97c11733ad830e5 \ - --hash=sha256:4297ee49639b4f2e07255a1d69b3acc7ab2d011bb892b403e91ac98368962e3b \ - --hash=sha256:ce48b37dfeb3cb1eae4cf85adacb47d7a6539ea2272870c9a3628ce275c2037e - # via - # -c requirements-ci.txt - # cuda-toolkit - # nvidia-cufft - # nvidia-cusolver - # nvidia-cusparse -nvidia-nvshmem-cu13==3.4.5 \ - --hash=sha256:290f0a2ee94c9f3687a02502f3b9299a9f9fe826e6d0287ee18482e78d495b80 \ - --hash=sha256:6dc2a197f38e5d0376ad52cd1a2a3617d3cdc150fd5966f4aee9bcebb1d68fe9 - # via - # -c requirements-ci.txt - # torch -nvidia-nvtx==13.0.85 \ - --hash=sha256:4936d1d6780fbe68db454f5e72a42ff64d1fd6397df9f363ae786930fd5c1cd4 \ - --hash=sha256:cb7780edb6b14107373c835bf8b72e7a178bac7367e23da7acb108f973f157a6 \ - --hash=sha256:d66ea44254dd3c6eacc300047af6e1288d2269dd072b417e0adffbf479e18519 - # via - # -c requirements-ci.txt - # cuda-toolkit -onnxruntime==1.28.0 \ - --hash=sha256:07fb3cbe990d6bf0ab3c22bfbbfb0e314151266046ea6edb4a07f556b4258c5f \ - --hash=sha256:0a83bdb70d143cede762b677789bf2a7acca54b3fb82565601d5c30695aa933c \ - --hash=sha256:0d650aeee29368414367b65529e90afe4bf1bab76254789063b8b2f7ea3013c8 \ - --hash=sha256:0faf85fb447a663c9cdadc39bd6b19bdf7bedded6699e45731b9b36c46fd993d \ - --hash=sha256:1a1a19175464665c9b8d50bc916f216cc0b569110045b7bbca8f9f290b186f58 \ - --hash=sha256:26ff0fdd06efb6c155bae95387a09db1a2be89c7a03e4d0bffd5a171cc2826da \ - --hash=sha256:31410f544674f534c2f27348af52ef81682ca9c8719154bf4d48f0ef23823b1e \ - --hash=sha256:4e81a23df16e7acb9d51b06d30cc098e49315ef9180f97bc2221d167b4b04d9c \ - --hash=sha256:4f6e92367ddce1e4d33cf295024f40192be6c6171a09208f515ba169ced06c8e \ - --hash=sha256:54fa221d669282bd8f582708ce4c96010a7e9fb0661f9006b37fe2fedafb73fe \ - --hash=sha256:6afdc83f1317c136e92fc29f5ee9f058de59d87c0b22cee3fdbfbaa0ccc2098a \ - --hash=sha256:8adff67a3f28257b37cfe945a7e952e4122666aa8c91a0380862e9fd4c2ed19f \ - --hash=sha256:8d66f9ceb29909c70839e4e4fb3435c7b490050d8f162bd5f3aba4ca01ee517f \ - --hash=sha256:a166b78ee04f3a37fa1ef82034b6a3ce96d9684e582d4d30b296de83e9998bb5 \ - --hash=sha256:ac301f53b1930402fc46c368e268acfed02f3207272aaff05070d7e09f96f031 \ - --hash=sha256:bc2565e487b4896fb988d6383577d875d958e071fc5f6c3550bd5d02ae98264b \ - --hash=sha256:c35064f9b3c43c81c5d5d282091401d0f1ff22796d93ccade4ea2ece5e137ab8 \ - --hash=sha256:cfab507abe09d6ffeb817eee07944d452fdc0b00fdcef34cab4db10a45e378c7 \ - --hash=sha256:e02feeb0165c5f13b4cc954738078d59b90128516ac12b671ee24a530242bf02 \ - --hash=sha256:e562d6e36a749f6764481c0ddb0f2af3d0b5a3c164291361d08803c557f369af \ - --hash=sha256:f2a3b9e30ce880d4ca54999cb313569e36da4f62eefe25f87be18f43e9a3a4d5 \ - --hash=sha256:f5c5daabd28aad610f83fdcf32acec8fb57e6adc6c6a39fe2a3c755db957b410 \ - --hash=sha256:f649dd6f6452d12a8059888aa489fe519e062e18793dac72b9efa0f9fdb64135 \ - --hash=sha256:f7f022a1103cae591c75fc4565589a515f2ddd14a6ac8e8a05812dfeda142e28 - # via - # -c requirements-ci.txt - # semantica (pyproject.toml) - # fastembed -opencv-python==5.0.0.93 \ - --hash=sha256:08d5d91d967b58d6db86073b2ad3eaef88ca4ebdfd45c9059bf59f5ded0c7ad2 \ - --hash=sha256:198a75138241810206a17c829dbcc40a7cb1841cda538ca86cbbfc6c7d95f898 \ - --hash=sha256:4b4b1a34c79bf8d3738e3cfe9a9e67b51a79663f6b692cbdad8c31f570da4157 \ - --hash=sha256:66aac3e5b5faa48d4025816592f3af19e4bfc2c68dec067bae2dbb4ca10aa9e2 \ - --hash=sha256:6bbc32f59e1b1a7db7b39c81f63d00625f041d333037fd8702f6da52cc39108b \ - --hash=sha256:c8de2dec111122a02e8beb28e16c31904992dfd6186560b142a92c71403c1039 \ - --hash=sha256:e2b4272e736836f66c2d176e43ab8101f3a00d45654916399f52e150c58981ac \ - --hash=sha256:f8b6d0a212253dd26ad338c812f1f23ca118fdf05a9c8c6b9444f161aa8c5881 \ - --hash=sha256:f90ba04b8f73bc5c3814037699739f0156f597338a98f05956c684e7c3ca10d2 - # via - # -c requirements-ci.txt - # semantica (pyproject.toml) -openpyxl==3.1.5 \ - --hash=sha256:5282c12b107bffeef825f4617dc029afaf41d0ea60823bbb665ef3079dc79de2 \ - --hash=sha256:cf0e3cf56142039133628b5acffe8ef0c12bc902d2aadd3e0fe5878dc08d1050 - # via - # -c requirements-ci.txt - # semantica (pyproject.toml) -packaging==26.3 \ - --hash=sha256:94edc256424af38762eb31306eed28beb9f0efc50a8837492c9d6fd6004aed79 \ - --hash=sha256:d7193f7c8e4e93f444fde0262bf90af30e16fa0ad0ad44cb553c87339b23cd1c - # via - # -c requirements-ci.txt - # faiss-cpu - # huggingface-hub - # lazy-loader - # matplotlib - # onnxruntime - # plotly - # pooch - # spacy - # thinc - # transformers - # weasel pandas==3.0.5 \ --hash=sha256:08d24fe11a17dc33bd6e937dc9c665f9cba08fbdc9f657f405713515febe300d \ --hash=sha256:0d298e951f23016ce4699951d044ae6418dbc91bf68cefca0f77666fcbb4e5c6 \ @@ -2142,19 +576,6 @@ pandas==3.0.5 \ # via # -c requirements-ci.txt # semantica (pyproject.toml) - # seaborn -parso==0.8.7 \ - --hash=sha256:a8926eb2a1b915486941fdbd31e86a4baf88fe8c210f25f2f35ecec5b574ca1c \ - --hash=sha256:eaaac4c9fdd5e9e8852dc778d2d7405897ec510f2a298071453e5e3a07914bb1 - # via - # -c requirements-ci.txt - # jedi -pexpect==4.9.0 \ - --hash=sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523 \ - --hash=sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f - # via - # -c requirements-ci.txt - # ipython pillow==12.3.0 \ --hash=sha256:00808c5e14ef63ac5161091d242999076604ff74b883423a11e5d7bbb38bf756 \ --hash=sha256:04f01d28a6aaff387bf842a13be313df23ba0597a44f1a976c9feb3c6ff4711a \ @@ -2246,203 +667,20 @@ pillow==12.3.0 \ # via # -c requirements-ci.txt # semantica (pyproject.toml) - # fastembed - # matplotlib -platformdirs==4.11.2 \ - --hash=sha256:3a2ae5fca3520a01ab1be8b45613537f52ddf5b5f6f53d88233892dfbf0cd82d \ - --hash=sha256:7f89089b6ea71bda7962953edcf784b2e2d9d285b40ad88be2bb75c6e9d82ab4 - # via - # -c requirements-ci.txt - # pooch -plotly==6.9.0 \ - --hash=sha256:36bebe2f1bb13884774fe61689c329071446f6ce4a8927fb1f0d6fb24f581236 \ - --hash=sha256:967ad33e8c704fed051800d11d985eb206a9c795c14206b30a6f463ed9c67d0d +protobuf==6.33.6 \ + --hash=sha256:0cd27b587afca21b7cfa59a74dcbd48a50f0a6400cfb59391340ad729d91d326 \ + --hash=sha256:77179e006c476e69bf8e8ce866640091ec42e1beb80b213c3900006ecfba6901 \ + --hash=sha256:7d29d9b65f8afef196f8334e80d6bc1d5d4adedb449971fefd3723824e6e77d3 \ + --hash=sha256:9720e6961b251bde64edfdab7d500725a2af5280f3f4c87e57c0208376aa8c3a \ + --hash=sha256:a6768d25248312c297558af96a9f9c929e8c4cee0659cb07e780731095f38135 \ + --hash=sha256:bd56799fb262994b2c2faa1799693c95cc2e22c62f56fb43af311cae45d26f0e \ + --hash=sha256:c96c37eec15086b79762ed265d59ab204dabc53056e3443e702d2681f4b39ce3 \ + --hash=sha256:e2afbae9b8e1825e3529f88d514754e094278bb95eadc0e199751cdd9a2e82a2 \ + --hash=sha256:e9db7e292e0ab79dd108d7f1a94fe31601ce1ee3f7b79e0692043423020b0593 \ + --hash=sha256:f443a394af5ed23672bc6c486be138628fbe5c651ccbc536873d7da23d1868cf # via # -c requirements-ci.txt # semantica (pyproject.toml) -pooch==1.9.0 \ - --hash=sha256:de46729579b9857ffd3e741987a2f6d5e0e03219892c167c6578c0091fb511ed \ - --hash=sha256:f265597baa9f760d25ceb29d0beb8186c243d6607b0f60b83ecf14078dbc703b - # via - # -c requirements-ci.txt - # librosa -preshed==3.0.13 \ - --hash=sha256:04d8f13f2986e5d11af5ac51f55ce3106c70c41b483d20ea392e6180bdd0f870 \ - --hash=sha256:09397592d333a77f88454e72b7f1f941b2afaf040b392b9e74898dbc4648cdf5 \ - --hash=sha256:09f96b477c987755b3c945df214ea1c1c80bfb350e9f34e78da89585535b77e8 \ - --hash=sha256:0e5b2865aecbd2e1e10e5d19bb8bfad765863c1307c6c3e51f2a08bd64122409 \ - --hash=sha256:183b339956a9e1d7a4a00038a3b9587a734db9e8bd915939a49791bd1b372156 \ - --hash=sha256:19318dc1cd8cac6663c6c830bf7e0002d2de853769fb03e056774e97c21bedfd \ - --hash=sha256:208dcebbe294bf1881ce33fb015d56ab2a7587aece85a09147727174207892e4 \ - --hash=sha256:2b704e46cb7b88f656ef16a3e5347b36525a1c53721d327a4ba1457404101f85 \ - --hash=sha256:2e77bed56aded7cbe5d28d6bd2178bc5b13eda0e0e464dab205fb578fa915000 \ - --hash=sha256:35d6c5acb3ee3b12b87a551913063f0cec784055c2af16e028c19fe875f079d0 \ - --hash=sha256:3e3528f6628329349e281b607aad746ae3c06c15ba59fd5b6599c7c2fd77911b \ - --hash=sha256:40e9445911051bc67cf84ba12745e3be4d010aaf4f8ade3ba3def82fdb45d18e \ - --hash=sha256:42c58b07e8b431e33d0ad9922e896632453821cad8b09171b619b8c61101916f \ - --hash=sha256:461327f8dd36520dcf1fd55a671e0c3c2c97a2d95e22fc85faa31173f4785dda \ - --hash=sha256:4a7bc48220de579be6bdb0a8715482cf36e2a625a6fd5ad26c9f43485a4a23b5 \ - --hash=sha256:4e9ae86c982e49f58620d45eeb51e073e50feb88f52ac10a95fe117c1d222a84 \ - --hash=sha256:4f8856ca3d88e9b250630d70abb4f260d8933151ddfb413024784b25b009868e \ - --hash=sha256:502f93f49a22788203f02d3067d4ea077a0cca3864de6a792eae12e7ce589e14 \ - --hash=sha256:5268c0e6fa96f50cdf87f516c2d4b32563c12706ee768e75c00e8d0098acd545 \ - --hash=sha256:5d14eea14bd01291388928991d7df7d60b9fd19ae970e55006eb4d29b0c1e8eb \ - --hash=sha256:5e2753779832e411e93eb727f3d409c0a6b7408e5ce4dd868076d8ece48c7693 \ - --hash=sha256:62cf7f3113132891d6bba70ff547ad81c6fe50a31930bbbb8499f1d47cd122b7 \ - --hash=sha256:670db59a52e1823b5f088c764df474e65b686592d4093adbeef14581c95ee2cb \ - --hash=sha256:70d502e081348df207d90f347f21770ed596822bb04eb3c3b32b7281579e90c6 \ - --hash=sha256:7557963d0125a3a7bcdb2eb6948f3e45da31b5a7f066b55320de3dea22d7557f \ - --hash=sha256:7770987c2e57497cd26124a9be5f652b5b3ccd0def89859ab0da8bca6144a3de \ - --hash=sha256:7c333f18e9a81c8a6de0603fd8781e17115324b117c445ca91abdf7bfb1abe49 \ - --hash=sha256:7da9d931e7660dcdd757e5870269f0c159126d682ed73ed313971d199eb0f334 \ - --hash=sha256:867aa73abbf4ee3b4d7662148091c33a8c039271269e3a7f1e0ca995f91995c8 \ - --hash=sha256:8b82d7a7bb63d248a6cbbfcabb4a570c993d54d964e39dc5d85c14018ba2079e \ - --hash=sha256:8b8de3f58043070a354477995acdd98626ce43e4193c708ebd0f694e467f5155 \ - --hash=sha256:8d6acc1f5031a535a55a6f7148e2f274554a8343a16309c700cebea0fe7aee8c \ - --hash=sha256:985cb9b097beda76cd13c01a0499707103e8915f888fa30f8aa8324ef2cc6b08 \ - --hash=sha256:9ca43ecbc3783eda4d6ab3416ae2ecd9ef23dca5f53995843f69f7457bcd0677 \ - --hash=sha256:a06e27f4e5b9d7943840087828c6a0dae4a3475576d12c2e95b71abbb325a80b \ - --hash=sha256:a3ac301b065e67e9541f8e3ab3f67533e53deb57c2d258395c5bb98f9723f99b \ - --hash=sha256:a8682988e47739adba369bf43789fc870b554a21e2d1f30a3d17ed336d05f451 \ - --hash=sha256:acd4d89abeca3678c5d8c89b3cd351314465bc67c7fa053d2644f8513e543386 \ - --hash=sha256:b03e21b0bf95eb56e23973f32cabb930e94f352228652f81c0955dbd6967d904 \ - --hash=sha256:b980f3ea9bb74b7f94464bc3d6eb3c9162b6b79b531febd14c6465c24344d2cc \ - --hash=sha256:bef84b225d226af43adfee78ce5ddede72a6155ce5292c1a41dcd1f0b9c87c30 \ - --hash=sha256:c046736239cc8d72670749b79b526e4111839a2fc461a58545d212797649129c \ - --hash=sha256:c0d0c14187dc0078d8a63bf190ec045a4d13e7748b6caeb557a7d575e411410b \ - --hash=sha256:c4bc60dc994864095d784b7e4d77dba3e64188d169ac88722b699d175561fddb \ - --hash=sha256:c8596e41a258ff213553a441e0bb3eb388fd8158e84a7bf3aae6d8ede2c166d3 \ - --hash=sha256:cf8e1a7a1823b2a7765121446c630140ac6e8650c07a6efbf375e168d1fef4f7 \ - --hash=sha256:d0e114300e5577e806c17fb1cc9f07bc6584188d84545401f66e690c8315feef \ - --hash=sha256:d2f1efae396cadab5f3890a2fd43d2ee65373ef9096ccbb805e51e8d8bcc563b \ - --hash=sha256:d4ae5cfe075bb7a07982e382bca44f41ddf041f4d24cbd358e8cccfc049259b8 \ - --hash=sha256:d75f718bbfd97e992f7827e0fa7faf6a91bdd9c922d5baa4b50d62731396cb89 \ - --hash=sha256:dbd7c735a613857ae39ac23bf4690b0d92adc30add977828529b50ba09e33fbc \ - --hash=sha256:de87fbabb0f37c3c92d4dd9b94fc82ab73cdab4247cdfbd57ab3926caa983919 \ - --hash=sha256:df642547a1a94079978a0ea8f4593ab4b8d3bd43f767bef0ef64d9a214f8c4c9 \ - --hash=sha256:e1ab099b2f5843b19e875502b64001b0705e375fb5bd1ca6240aa14e4ffc31e4 \ - --hash=sha256:e5c8462472f790c16708306aef3a102a762bd19dfe3d2f8ee08bd5e12f51b835 \ - --hash=sha256:f05b08ce92399c0655b5e0eb5a1cc1f9e295703ed3aabdfaf6538dfa8ae23d57 \ - --hash=sha256:f8e6fe0620ed0f96a246d46447055c447e071cd8222731a045c235e8a758c918 - # via - # -c requirements-ci.txt - # spacy - # thinc -prompt-toolkit==3.0.53 \ - --hash=sha256:01c0891d7f9237d5e339f7d3e42cdae80b7534abb1c7c0e3352efba6231492f2 \ - --hash=sha256:9ec8a0ad96d5c56148b3f914aa79c1564c3fde5d2e6b876e7bc327e353cf8fa6 - # via - # -c requirements-ci.txt - # ipython -protobuf==7.35.1 \ - --hash=sha256:11d6b0ec246892d85215b0a13ca6e0233cf5284b68f0ac02646427f4ff88a799 \ - --hash=sha256:230a75ddfc2de4806e56696ce9640c1cdfdb6543b7cfce98d42a4c0a0e7bdb87 \ - --hash=sha256:24f857477359a85c0c235261b8ba905fd51b2562f4a64ca1df5473f29850cbf6 \ - --hash=sha256:353652e4efd0bca5b5fc2656abf8307ef351f0cf938c9eba09f0e09c20a25c30 \ - --hash=sha256:4bc97768d8fe4ad6743c8a19403e314511ed9f6d13205b687e52421c023ac1b9 \ - --hash=sha256:74758715c53d7158fb76caf4f0cfdacc5329a4b1bb994f865d6cf302d413a1c4 \ - --hash=sha256:b73f9489a4b8b1c9cb1f8ed951c736392592edb24b9d6819f36d2e10b171d5b4 \ - --hash=sha256:ce115a26fe0c39a2c29973d914d327e516a6455464489fe3cd1e51a1b354f81a - # via - # -c requirements-ci.txt - # semantica (pyproject.toml) - # onnxruntime -psutil==7.2.2 \ - --hash=sha256:0746f5f8d406af344fd547f1c8daa5f5c33dbc293bb8d6a16d80b4bb88f59372 \ - --hash=sha256:076a2d2f923fd4821644f5ba89f059523da90dc9014e85f8e45a5774ca5bc6f9 \ - --hash=sha256:11fe5a4f613759764e79c65cf11ebdf26e33d6dd34336f8a337aa2996d71c841 \ - --hash=sha256:1a571f2330c966c62aeda00dd24620425d4b0cc86881c89861fbc04549e5dc63 \ - --hash=sha256:1a7b04c10f32cc88ab39cbf606e117fd74721c831c98a27dc04578deb0c16979 \ - --hash=sha256:1fa4ecf83bcdf6e6c8f4449aff98eefb5d0604bf88cb883d7da3d8d2d909546a \ - --hash=sha256:2edccc433cbfa046b980b0df0171cd25bcaeb3a68fe9022db0979e7aa74a826b \ - --hash=sha256:7b6d09433a10592ce39b13d7be5a54fbac1d1228ed29abc880fb23df7cb694c9 \ - --hash=sha256:8c233660f575a5a89e6d4cb65d9f938126312bca76d8fe087b947b3a1aaac9ee \ - --hash=sha256:917e891983ca3c1887b4ef36447b1e0873e70c933afc831c6b6da078ba474312 \ - --hash=sha256:ab486563df44c17f5173621c7b198955bd6b613fb87c71c161f827d3fb149a9b \ - --hash=sha256:ae0aefdd8796a7737eccea863f80f81e468a1e4cf14d926bd9b6f5f2d5f90ca9 \ - --hash=sha256:b0726cecd84f9474419d67252add4ac0cd9811b04d61123054b9fb6f57df6e9e \ - --hash=sha256:b58fabe35e80b264a4e3bb23e6b96f9e45a3df7fb7eed419ac0e5947c61e47cc \ - --hash=sha256:c7663d4e37f13e884d13994247449e9f8f574bc4655d509c3b95e9ec9e2b9dc1 \ - --hash=sha256:e452c464a02e7dc7822a05d25db4cde564444a67e58539a00f929c51eddda0cf \ - --hash=sha256:e78c8603dcd9a04c7364f1a3e670cea95d51ee865e4efb3556a3a63adef958ea \ - --hash=sha256:eb7e81434c8d223ec4a219b5fc1c47d0417b12be7ea866e24fb5ad6e84b3d988 \ - --hash=sha256:ed0cace939114f62738d808fdcecd4c869222507e266e574799e9c0faa17d486 \ - --hash=sha256:eed63d3b4d62449571547b60578c5b2c4bcccc5387148db46e0c2313dad0ee00 \ - --hash=sha256:fd04ef36b4a6d599bbdb225dd1d3f51e00105f6d48a28f006da7f9822f2606d8 - # via - # -c requirements-ci.txt - # ipython -ptyprocess==0.7.0 \ - --hash=sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35 \ - --hash=sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220 - # via - # -c requirements-ci.txt - # pexpect -pure-eval==0.2.3 \ - --hash=sha256:1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0 \ - --hash=sha256:5f4e983f40564c576c7c8635ae88db5956bb2229d7e9237d03b3c0b0190eaf42 - # via - # -c requirements-ci.txt - # stack-data -py-rust-stemmers==0.1.8 \ - --hash=sha256:08c258deab6d994551a92e9468ce88e58f97e636e73d9c5763978a57d7675a13 \ - --hash=sha256:0a68745d4b3c7f5abc778ca967e8711df6154873abcfe4e62a6631fa2363cc32 \ - --hash=sha256:0f1d2135974bbbea2c15087a7d8cec8697338b2a748c9694c92943775f4d6c14 \ - --hash=sha256:13b25ce65509ff7e37725bd38c62704f32ae0604ac0899f43c8cce41d5543212 \ - --hash=sha256:15af4e12e1288de2e5241eec375afc6ad6be4c125a28ca010599d9f92db23f01 \ - --hash=sha256:1686fc009869ff8bcc1d5a305f071eeb8c3b3612a9827bcadd4e61fdb5727179 \ - --hash=sha256:21ed8055cec1f78d666afad8ffd7a51775ba419d2c615b8a1df7b32ca7f33e2b \ - --hash=sha256:22d037a82920bed8fccbec62cf5ef47d821ac3966a3d098fa48a2053397ea6b7 \ - --hash=sha256:234fdcb58f4d907877ed03c9358668a149b5a66d096abcf43c324a4f5697d36d \ - --hash=sha256:245e2c61c52e073341893a9682cd1396b61047154548aee30bb1af3d8ed4b4cc \ - --hash=sha256:25bb9b0b6b8d79b32c151c7f5f94af9af9aea201ca8736e6f117c841b017f028 \ - --hash=sha256:2b607f0b270951fb66479baf4b68716cc63a981585cbd898b0b6b5c359efde7e \ - --hash=sha256:2e86ad68fe297a6652f0f0390625ea81858b6f27862fd4c5ee1214bf5af29b9d \ - --hash=sha256:3007ad4ec51e0c352ae410234a24a9ac75fab0c1e06c585fbac9fcced69385f8 \ - --hash=sha256:342b6cc9eb833f102d86e146ee71bccb3c1ed1e8320db8e6553cc81b716b1b14 \ - --hash=sha256:35570098da02eb439afcd7270a12bf850bbe874b85cb912e0fb2d87a6e703920 \ - --hash=sha256:36b952ce65a794faf15553b8f5b60431483c2d5bec00bc6982bf490e727250f9 \ - --hash=sha256:3bef8062d28251b465299cc676de7c11dde003858caf2c2b5c14de7298dc63db \ - --hash=sha256:40c86be90cee4a709ad84fde4db7f11ca44d65630a56b77ec86fe84c23adfc09 \ - --hash=sha256:451ee1c02a3f5cf1e161b46ba9032cdda4ba10a8b03ff9ee61c1d34d42a0bc81 \ - --hash=sha256:45d0c42346f8e5d04b86a0b0f895bb15c53788bf551e7fad36be1dad093e856f \ - --hash=sha256:479c77c32d8be692f3cfcde7e19273f02ac81d6f45c6aef49887ef95cab7abbb \ - --hash=sha256:4a1e11d22a240318dc917266eb3c85919455b6ea834445b95997712d9ede6b93 \ - --hash=sha256:4b1159a38a198eabeabd908015f9425c4220b61b42c6603c58870481ff2b50bb \ - --hash=sha256:4b90fc81411943b114e8eb4988a876ba3b12bd2d20741559803eddc4131575dc \ - --hash=sha256:515884bcfb47b10335146648f276930d0c1201ae5e8b7b400fb46d8ea05c0ec2 \ - --hash=sha256:51d0042d2a92ef0f7048bfc06b6c2a02306af31ea47f09d24b34e4b7e63c4e80 \ - --hash=sha256:526b58958c6ffa36c4a805326cfb624ecbd665d16ba435027dbed0bcbcaa09d2 \ - --hash=sha256:56cc2c2df742fa6529285b7d204720f34b7da789ed78eb578442f93c6de97d89 \ - --hash=sha256:5bd15b89203ecd886960e237124d1aa6e55498d76418c36c967d3b12168d43dc \ - --hash=sha256:5cc8fab9d0f1b274a26935a632362b8278f03e81b65e8b8644d5ca3f62a5a1a4 \ - --hash=sha256:6a9a4b8733d0b307bd0879ab7e321aa8a0bfd054a75a5cb23c647df5ca7d17c3 \ - --hash=sha256:6b0f6f48bc54d607aed802de872fcd5a71bae969a6760976dc78ce55e8eaf3da \ - --hash=sha256:6c92733b020534470ca5a0d7fe8b85c85622ff383d4f37fec75a1c677aa84921 \ - --hash=sha256:769f37882905da2311cb720681b112eb70a4e6bd56fb424d473427b5379c8396 \ - --hash=sha256:7cc0cc0b8eb45d2158c28ea43e2f338c110aad63052ad3bd00bc7446a595e12f \ - --hash=sha256:870afb2d1d4731bd2d74b715b34439b29734e4dc94c55342096f07669f7f9fa0 \ - --hash=sha256:89d3d34094b9b6078a8ea6fe1c7044e5fd32f14e76c94818c5008f49ae075f08 \ - --hash=sha256:8b0327b151ab8a338fb54fdac114ba34394327fc1e2c4c425ad1caf2013e5de3 \ - --hash=sha256:931d13570962b093417e5443a9d1bd63d73fa239ebb81e5b1d346663571403e4 \ - --hash=sha256:9ab605a86c950ba7e8ab1392cf91296c0bec3084babb897a4aecf90a10c82395 \ - --hash=sha256:ae773e1d01e9aa328d175f461475d0cd7074a82bfcc71de6dc5765e51f1cc9f7 \ - --hash=sha256:af749b3b9f6531342250dd05854c0ae93e01f79b0049a8769012e0b50e9aba5b \ - --hash=sha256:bfc185b599e646a0e39d11df3f5e6d15edefb110496601556385d33b55fed5de \ - --hash=sha256:c03f51280d5d72f7f9b07101ad248845279dc1c82c47a74149303d25937464b7 \ - --hash=sha256:c786235275c5c2abb7f206b8236aee3ca0bc53c7497daf7fb7b01d3491469547 \ - --hash=sha256:d396dd25c473c1bc4248c79cd223f4b36356b55a124652f015c6a001547f81ac \ - --hash=sha256:da0326c913070d5f3fabd56393ca4118167bb0b13c2932a77c7a1b31f85f651a \ - --hash=sha256:dab8a862fa8e4c9e715848e9d64c317229d7a2c37238cd1c73237b85d655ab7e \ - --hash=sha256:dadd0e369703817fc7026987b3093f461f9f58d8dde74e689d546184bc8f3451 \ - --hash=sha256:dca0ae40715238582d6f1824b61d09ea3982359a061b69798ab5732b3ba0d4c5 \ - --hash=sha256:dd967eea2f808a1e73aa71ecccef0f4925a4cca4eb02ced94057afe3303153ef \ - --hash=sha256:eee4af7ada2ce9cb3ec59ffe8458148c3933a86507d816bf954ee506a0e45b61 \ - --hash=sha256:f16deb1557b8253d8c11693047bec4ed67d6b09ae0f84c8b896ea03ac2fc8925 \ - --hash=sha256:fa42f5f8feb694aaaa869eedf477fcaf66f67a192cd64d94302d06920c33864a - # via - # -c requirements-ci.txt - # fastembed pyarrow==25.0.1 \ --hash=sha256:0b1edbb2f385a6a65e9711b62ba86ac54a7816a3f8d17bb3e8a5929d65fb2485 \ --hash=sha256:0b726ad7e7b669be982b0c71c07fe4b037d654354130da79a7902a669e93a66b \ @@ -2490,183 +728,158 @@ pyarrow==25.0.1 \ # via # -c requirements-ci.txt # semantica (pyproject.toml) -pycparser==3.0 \ - --hash=sha256:600f49d217304a5902ac3c37e1281c9fe94e4d0489de643a9504c5cdfdfc6b29 \ - --hash=sha256:b727414169a36b7d524c1c3e31839a521725078d7b2ff038656844266160a992 - # via - # -c requirements-ci.txt - # cffi -pydantic==2.13.4 \ - --hash=sha256:45a282cde31d808236fd7ea9d919b128653c8b38b393d1c4ab335c62924d9aba \ - --hash=sha256:c40756b57adaa8b1efeeced5c196f3f3b7c435f90e84ea7f443901bec8099ef6 +pydantic==2.13.5 \ + --hash=sha256:346a034f080da3755d8e9cb5e00e8b07de1d39e4f6e2c87d8ab7cafa0b269a73 \ + --hash=sha256:51a9c5f7b2f8e636f04c6cada605d9b6a3bf1348fdf945a3d8869b19bba0ee08 # via # -c requirements-ci.txt # semantica (pyproject.toml) # fastapi - # spacy - # thinc - # weasel -pydantic-core==2.46.4 \ - --hash=sha256:00c603d540afdd6b80eb39f078f33ebd46211f02f33e34a32d9f053bba711de0 \ - --hash=sha256:0186750b482eefa11d7f435892b09c5c606193ef3375bcf94aa00ae6bfb66262 \ - --hash=sha256:041bde0a48fd37cf71cab1c9d56d3e8625a3793fef1f7dd232b3ff37e978ecda \ - --hash=sha256:0c563b08bca408dc7f65f700633d8442fffb2421fc47b8101377e9fd65051ff0 \ - --hash=sha256:0cbe8b01f948de4286c74cdd6c667aceb38f5c1e26f0693b3983d9d74887c65e \ - --hash=sha256:0ce40cd7b21210e99342afafbd4d0f76d784eb5b1d60f3bdc566be4983c6c73b \ - --hash=sha256:0e96592440881c74a213e5ad528e2b24d3d4f940de2766bed9010ab1d9e51594 \ - --hash=sha256:10e17cbb10a330363733efc4d7c4d0dd827ac0909b8f6a6542298fed1ea62f29 \ - --hash=sha256:133878133d271ade3d41d1bfb2a45ec38dbdbda40bc065921c6b04e4630127e2 \ - --hash=sha256:14d4edf427bdcf950a8a02d7cb44a08614388dd6e1bdcbf4f67504fa7887da9c \ - --hash=sha256:14f4c5d6db102bd796a627bbb3a17b4cf4574b9ae861d8b7c9a9661c6dd3362d \ - --hash=sha256:17299feefe090f2caa5b8e37222bb5f663e4935a8bfa6931d4102e5df1a9f398 \ - --hash=sha256:184c081504d17f1c1066e430e117142b2c77d9448a97f7b65c6ac9fd9aee238d \ - --hash=sha256:18e5ceec2ab67e6d5f1a9085e5a24c9c4e2ac4545730bfe668680bca05e555f3 \ - --hash=sha256:19e51f073cd3df251856a8a4189fbdf1de4012c3ebacfb1884f94f1eb406079f \ - --hash=sha256:1a7dd0b3ee80d90150e3495a3a13ac34dbcbfd4f012996a6a1d8900e91b5c0fb \ - --hash=sha256:1d8ba486450b14f3b1d63bc521d410ec7565e52f887b9fb671791886436a42f7 \ - --hash=sha256:2108ba5c1c1eca18030634489dc544844144ee36357f2f9f780b93e7ddbb44b5 \ - --hash=sha256:228ee9bae8bef5b1e97ec58302f80357c37199e0d0a99174e138d28e6957b9d9 \ - --hash=sha256:23ace664830ee0bfe014a0c7bc248b1f7f25ed7ad103852c317624a1083af462 \ - --hash=sha256:2412e734dcb48da14d4e4006b82b46b74f2518b8a26ee7e58c6844a6cd6d03c4 \ - --hash=sha256:29c61fc04a3d840155ff08e475a04809278972fe6aef51e2720554e96367e34b \ - --hash=sha256:2f84c03c8607173d16b5a854ec68a2f9079ae03237a54fb506d13af47e1d018d \ - --hash=sha256:3009f12e4e90b7f88b4f9adb1b0c4a3d58fe7820f3238c190047209d148026df \ - --hash=sha256:3245406455a5d98187ec35530fd772b1d799b26667980872c8d4614991e2c4a2 \ - --hash=sha256:3447661d99f75a3683a4cf5c87da72f2161964611864dbbeac7fbb118bb4bfc0 \ - --hash=sha256:372429a130e469c9cd698925ce5fc50940b7a1336b0d82038e63d5bbc4edc519 \ - --hash=sha256:395aebd9183f9d112f569aeb5b2214d1a10a33bec8456447f7fbdfa51d38d4cd \ - --hash=sha256:3a233125ac121aa3ffba9a2b59edfc4a985a76092dc8279586ab4b71390875e7 \ - --hash=sha256:3be77f45df024d789a672ae34f8b06fb346c4f9f46ea714956660ea4862e89ac \ - --hash=sha256:3bf92c5d0e00fefaab325a4d27828fe6b6e2a21848686b5b60d2d9eeb09d76c6 \ - --hash=sha256:3ecbc122d18468d06ca279dc26a8c2e2d5acb10943bb35e36ae92096dc3b5565 \ - --hash=sha256:3fb702cd90b0446a3a1c5e470bfa0dd23c0233b676a9099ddcc964fa6ca13898 \ - --hash=sha256:428e04521a40150c85216fc8b85e8d39fece235a9cf5e383761238c7fa9b96fb \ - --hash=sha256:432c179df7874eeb73307aad2df0755e1ae0efa61ff0ea89b93e194411ae3928 \ - --hash=sha256:4a05d69cba51d852c5c3e92758653245a50c0b646ced0cf05bd793ed592839d6 \ - --hash=sha256:4c63ebc82684aa89d9a3bcbd13d515b3be44250dc68dd3bd81526c1cb31286c3 \ - --hash=sha256:4fc73cb559bdb54b1134a706a2802a4cddd27a0633f5abb7e53056268751ac6a \ - --hash=sha256:4fcbe087dbc2068af7eda3aa87634eba216dbda64d1ae73c8684b621d33f6596 \ - --hash=sha256:56cb4851bcaf3d117eddcef4fe66afd750a50274b0da8e22be256d10e5611987 \ - --hash=sha256:5855698a4856556d86e8e6cd8434bc3ac0314ee8e12089ae0e143f64c6256e4e \ - --hash=sha256:5a4330cdbc57162e4b3aa303f588ba752257694c9c9be3e7ebb11b4aca659b5d \ - --hash=sha256:5b712b53160b79a5850310b912a5ef8e57e56947c8ad690c227f5c9d7e561712 \ - --hash=sha256:5d5902252db0d3cedf8d4a1bc68f70eeb430f7e4c7104c8c476753519b423008 \ - --hash=sha256:617d7e2ca7dcb8c5cf6bcb8c59b8832c94b36196bbf1cbd1bfb56ed341905edd \ - --hash=sha256:62f875393d7f270851f20523dd2e29f082bcc82292d66db2b64ea71f64b6e1c1 \ - --hash=sha256:633147d34cf4550417f12e2b1a0383973bdf5cdfde212cb09e9a581cf10820be \ - --hash=sha256:66ce7632c22d837c95301830e111ad0128a32b8207533b60896a96c4915192ea \ - --hash=sha256:6b3ace8194b0e5204818c92802dcdca7fc6d88aabbb799d7c795540d9cd6d292 \ - --hash=sha256:6f2eeda33a839975441c86a4119e1383c50b47faf0cbb5176985565c6bb02c33 \ - --hash=sha256:7027560ee92211647d0d34e3f7cd6f50da56399d26a9c8ad0da286d3869a53f3 \ - --hash=sha256:7283d57845ecf5a163403eb0702dfc220cc4fbdd18919cb5ccea4f95ee1cdab4 \ - --hash=sha256:7a5f930472650a82629163023e630d160863fce524c616f4e5186e5de9d9a49b \ - --hash=sha256:7bfb192b3f4b9e8a89b6277b6ce787564f62cfd272055f6e685726b111dc7826 \ - --hash=sha256:811ff8e9c313ab425368bcbb36e5c4ebd7108c2bbf4e4089cfbb0b01eff63fac \ - --hash=sha256:8233f2947cf85404441fd7e0085f53b10c93e0ee78611099b5c7237e36aacbf7 \ - --hash=sha256:82cf5301172168103724d49a1444d3378cb20cdee30b116a1bd6031236298a5d \ - --hash=sha256:8358a950c8909158e3df31538a7e4edc2d7265a7c54b47f0864d9e5bae9dcebf \ - --hash=sha256:85bb3611ff1802f3ee7fdd7dbff26b56f343fb432d57a4728fdd49b6ef35e2f4 \ - --hash=sha256:86e1a4418c6cd97d60c95c71164158eaf7324fae7b0923264016baa993eba6fc \ - --hash=sha256:8b9bab013d1c7a79d3501ff86d0bc9c31bf587db4551677b96bec07df78c6b15 \ - --hash=sha256:8c5dac79fa1614d1e06ca695109c6105923bd9c7d1d6c918d4e637b7e6b32fd3 \ - --hash=sha256:8d0820e8192167f80d88d64038e609c31452eeca865b4e1d9950a27a4609b00b \ - --hash=sha256:8daafc69c93ee8a0204506a3b6b30f586ef54028f52aeeeb5c4cfc5184fd5914 \ - --hash=sha256:9037063db01f09b09e237c282b6792bd4da634b5402c4e7f0c61effed7701a04 \ - --hash=sha256:905a0ed8ea6f2d61c1738835f99b699348d7857379083e5fc497fa0c967a407c \ - --hash=sha256:90884113d8b48f760e9587002789ddd741e76ab9f89518cd1e43b1f1a52ec44b \ - --hash=sha256:91a06d2e259ecfbd8c901d70c3c507900458498142b3026a296b7de4d1322cc9 \ - --hash=sha256:926c9541b14b12b1681dca8a0b75feb510b06c6341b70a8e500c2fdcff837cce \ - --hash=sha256:9401557acd873c3a7f3eb9383edef8ac4968f9510e340f4808d427e75667e7b4 \ - --hash=sha256:9551187363ffc0de2a00b2e47c25aeaeb1020b69b668762966df15fc5659dd5a \ - --hash=sha256:962ccbab7b642487b1d8b7df90ef677e03134cf1fd8880bf698649b22a69371f \ - --hash=sha256:97e7cf2be5c77b7d1a9713a05605d49460d02c6078d38d8bef3cbe323c548424 \ - --hash=sha256:9aa768456404a8bf48a4406685ac2bec8e72b62c69313734fa3b73cf33b3a894 \ - --hash=sha256:9bc519fbf2b7578398853d815009ae5e4d4603d12f4e3f91da8c06852d3da3e9 \ - --hash=sha256:9d56801be94b86a9da183e5f3766e6310752b99ff647e38b09a9500d88e46e76 \ - --hash=sha256:9f444c499b3eefd3a92e348059471ea0c3a6e303d9c1cec09fa748fd9f895201 \ - --hash=sha256:9fa8ae11da9e2b3126c6426f147e0fba88d96d65921799bb30c6abd1cb2c97fb \ - --hash=sha256:a0f62d0a58f4e7da165457e995725421e0064f2255d8eccebc49f41bbc23b109 \ - --hash=sha256:a396dcc17e5a0b164dbe026896245a4fa9ff402edca1dff0be3d53a517f74de4 \ - --hash=sha256:aaa2a54443eff1950ba5ddc6b6ccda0d9c84a364276a62f969bdf2a390650848 \ - --hash=sha256:ad785e92e6dc634c21555edc8bd6b64957ab844541bcb96a1366c202951ae526 \ - --hash=sha256:af8244b2bef6aaad6d92cda81372de7f8c8d36c9f0c3ea36e827c60e7d9467a0 \ - --hash=sha256:b078afbc25f3a1436c7a1d2cd3e322497ee99615ba97c563566fdf46aff1ee01 \ - --hash=sha256:b2f69dec1725e79a012d920df1707de5caf7ed5e08f3be4435e25803efc47458 \ - --hash=sha256:b8458003118a712e66286df6a707db01c52c0f52f7db8e4a38f0da1d3b94fc4e \ - --hash=sha256:bb63e0198ca18aad131c089b9204c23079c3afa95487e561f4c522d519e55aba \ - --hash=sha256:bfec22eab3c8cc2ceec0248aec886624116dc079afa027ecc8ad4a7e62010f8a \ - --hash=sha256:c1747f85cee84c26985853c6f3d9bd3e75da5212912443fa111c113b9c246f39 \ - --hash=sha256:c1b3f518abeca3aa13c712fd202306e145abf59a18b094a6bafb2d2bbf59192c \ - --hash=sha256:c50f2528cf200c5eed56faf3f4e22fcd5f38c157a8b78576e6ba3168ec35f000 \ - --hash=sha256:c68fcd102d71ea85c5b2dfac3f4f8476eff42a9e078fd5faefff6d145063536b \ - --hash=sha256:c7a7bd4e39e8e4c12c39cd480356842b6a8a06e41b23a55a5e3e191718838ddf \ - --hash=sha256:c94f0688e7b8d0a67abf40e57a7eaaecd17cc9586706a31b76c031f63df052b4 \ - --hash=sha256:cbaf13819775b7f769bf4a1f066cb6df7a28d4480081a589828ef190226881cd \ - --hash=sha256:cd2213145bcc2ba85884d0ac63d222fece9209678f77b9b4d76f054c561adb28 \ - --hash=sha256:ce5c1d2a8b27468f433ca974829c44060b8097eedc39933e3c206a90ee49c4a9 \ - --hash=sha256:d396ec2b979760aaf3218e76c24e65bd0aca24983298653b3a9d7a45f9e47b30 \ - --hash=sha256:d51026d73fcfd93610abc7b27789c26b313920fcfb20e27462d74a7f8b06e983 \ - --hash=sha256:d80ee3d731373b24cebbc10d689ca4ee1875caf0d5703a245db18efd4dd37fc1 \ - --hash=sha256:d995260fdf4e1db774581b4900e0f832abe3c7c84996726bbc161b19c8f29e76 \ - --hash=sha256:da4b951fe36dc7c3a1ccb4e3cd1747c3542b8c9ceede8fc86cae054e764485f5 \ - --hash=sha256:daa27d92c36f24388fe3ad306b174781c747627f134452e4f128ea00ce1fe8c4 \ - --hash=sha256:db06ffe51636ffe9ca531fe9023dd64bdd794be8754cb5df57c5498ae5b518a7 \ - --hash=sha256:e0d65b8c354be7fb5f720c3caa8bc940bc2d20ce749c8e06135f07f8ed95dd7c \ - --hash=sha256:e68b7a074f65a2fd746c52a7ce6142ab7006074ac269ace0c25cd8ba171f8066 \ - --hash=sha256:e739fee756ba1010f8bcccb534252e85a35fe45ae92c295a06059ce58b74ccd3 \ - --hash=sha256:e846ae7835bf0703ae43f534ab79a867146dadd59dc9ca5c8b53d5c8f7c9ef02 \ - --hash=sha256:e9c26f834c65f5752f3f06cb08cb86a913ceb7274d0db6e267808a708b46bc89 \ - --hash=sha256:ea793e075b70290d89d8142074262885d3f7da19634845135751bd6344f73b50 \ - --hash=sha256:f027324c56cd5406ca49c124b0db10e56c69064fec039acc571c29020cc87c76 \ - --hash=sha256:f13a646d65d09fbf1bc6b3a9635d30095c8e7e5cc419ff35ecc563c5fd04cd49 \ - --hash=sha256:f47286a97f0bc9b8859519809077b91b2cefe4ae47fcbf5e466a009c1c5d742b \ - --hash=sha256:f747929cf940cddb5b3668a390056ddd5ba2e5010615ea2dcf4f9c4f3ab8791d \ - --hash=sha256:f99626688942fb746e545232e7726926f3be91b5975f8b55327665fafda991c7 \ - --hash=sha256:f9fa868638bf362d3d138ea55829cefb3d5f4b0d7f142234382a15e2485dbec4 \ - --hash=sha256:fbdb89b3e1c94a30cc5edfce477c6e6a5dc4d8f84665b455c27582f211a1c72c \ - --hash=sha256:fc010ab034c8c7452522748bf937df58020d256ccae0874463d1f4d01758af8e \ - --hash=sha256:fc3e9034a63de20e15e8ade85358bc6efc614008cab72898b4b4952bea0509ff \ - --hash=sha256:fd8b3d9fd264be37976686c7f65cd52a83f5e84f4bfd2adf9c1d469676bbb6ae +pydantic-core==2.46.5 \ + --hash=sha256:013d6f3483d81e02e7c328831808f336c8596ee33b4bd4026b9ffb1e960b8942 \ + --hash=sha256:03b9666e41e35d8909852ba191a0607520f81b74eaf12ccf8737005dbb313821 \ + --hash=sha256:045ab3b6d308439e32b81cc173bba5b9018bc6ed896afd0c65b3b009b1699af5 \ + --hash=sha256:0bddb4020d8f04175865ccd17eff3040874fc11fb593f424edb452653b4b947c \ + --hash=sha256:0cdbada856a1c69a7624a64d3d9aefe79300bd6ef827b43a4f265010b9b55184 \ + --hash=sha256:0fc5be0abd4a407e200d844b404e33639a554e7bd0d448e7b9ae181be4789ac2 \ + --hash=sha256:10416c15b8839ecc4ef4d0885da76da6fd0f67333a0eb8aff6d93c4b8f2910fc \ + --hash=sha256:15f4a94963c95accac15b7b657bb177d3ad82bb90b0d0526d9a9b85079925db5 \ + --hash=sha256:18a09e1e1011b462f2e32774f25859ef1223d5c2b0546a633cf56654710721e0 \ + --hash=sha256:193375f3548919d3f0b60936ca113ada3e38f264f91b9b8e0508efaad57be931 \ + --hash=sha256:1a353f84de772f423b5ffb11d7ae352fbbef0f446f3c0b0af0f8236d7233606e \ + --hash=sha256:1e449def1945a462c464331254e5a44fca7c3b4f9aedf59ec2f50f8066dd8e25 \ + --hash=sha256:1e5aad1220a1192c42341c8fd4a8686657e73ab2a920c970bdc4de334fe3193d \ + --hash=sha256:200aa3dc9f8d54f0754f43247c0bad0999fdcfbfd2488384dd44f37279271fe6 \ + --hash=sha256:2471fd51c61c610e1dcf7de44d7299283661654d11264ab4802b303368d69c47 \ + --hash=sha256:24922243639cbdac66c75fcb6fd6495a9cb52b213d62f9a0d16f0310b1ff8038 \ + --hash=sha256:28a6a556cd3b6066bea827857f9d9cce027c96f776e512f544a581f9e42161f8 \ + --hash=sha256:2bc9419666990c06d7397831f2126a1ecc3594aaa3ff7de5bf2d066802f4e07b \ + --hash=sha256:2cbd9a5eff05e51c447c34dfa4632145b26b09120cf04bd0c871e44c1a5e1c9a \ + --hash=sha256:2d330aaba8621b1edcec8ae2c4050f63b84ccf6d98723a8f212e9684713abf0e \ + --hash=sha256:2d5d76654becf5efd62c9e51c3756c67b49498b0c9a40884934c40807adbd074 \ + --hash=sha256:337639ba62a11acde6ef3aeb08c8ea755f8ef1fe5e513356c0f36a2b0d7568b0 \ + --hash=sha256:347ec774390c87326a2e4929d58d3f7e8763a104d5d35f4cd595a4c952366433 \ + --hash=sha256:356c8368cbc321050b169595683a2e1d63413b1e0e2868b330af9fc14c616d3f \ + --hash=sha256:37ae34309d7bd8c0d61ab839668058f2a7962ea1fc51d105d2db228fe0618034 \ + --hash=sha256:37ea7b83c935e5b0d68c9449b82651accf78a10828b2c02b2f2d9e9496446c21 \ + --hash=sha256:3a3e26b6a8274211bddee2d0e4d0d42778f17a34510f49d2ec44b58abfc41736 \ + --hash=sha256:3aa166e99c4f2985407fb8714aebede877ecb5455cf321b606adca926d30d5a0 \ + --hash=sha256:3d2652072b2d774947ba5cf78a9e59644ac62ee572daf6dd2e1dfe905e15b2b7 \ + --hash=sha256:40375c2d05acec10323e45dfe2077ac44bc74659008614af5069034e2cfc781c \ + --hash=sha256:413a717a410d0c817ef5b786a059415550b3794e1d0c2abffd9efb93a3d9f7b4 \ + --hash=sha256:46c25dda9d092a06c08db76ffe0a197107904d0dfac653f7d5306bbcd6d6119c \ + --hash=sha256:49776eab08766a08dfff7012f8b422dcd7e25e43b316eedf0477c24fcfa84b7c \ + --hash=sha256:4d44cf99ddebf875f9b68cc267aa684c99b7b44fe63ee1cac4ec163807290069 \ + --hash=sha256:4dedce55295becb61921e386b99d4f2706045306e7fa52249a33004c837379fb \ + --hash=sha256:4f8507560a9284e1370bb048ed4282012fbef4e8d109875b95e884d228552061 \ + --hash=sha256:4fdc8b93a41521988916eeaa271173fcca7fa0803d62f87675aac8dcec1c8e29 \ + --hash=sha256:5086029a57366b8cf81b130a43908738095c270c21a8d7f0e8bdfdb89718e2f3 \ + --hash=sha256:52e24eacdb536cade636aa90fb851835222becff8484b7001fdc78cb0290f2aa \ + --hash=sha256:53feb344243bb9510a9dec7bf3cf1b64d88a98af5dc7872a5160465f8b198c8e \ + --hash=sha256:545f26c504b27c3758439a5e6d9349931f0a04f855668d5fe323c89e82300a38 \ + --hash=sha256:54d510bac3ee52247af28ed4bb18a1e799f040ac60fd2bf5ccd4c92f1fbe786f \ + --hash=sha256:5cb482e9e84c851f4e623fe4acc1ced89168cf1fe18f7089db4548c8f5bbb65b \ + --hash=sha256:5e81740c09e310f5aa5cbd3e434a01c154d4bef93241c7877b39f211d2b78ba8 \ + --hash=sha256:5ee239d575f80b08eca11f6e20f90c4c695de7825c67eefe6091fbf20dda648e \ + --hash=sha256:5f194189415698233dd1114a093a9b56e61e2c57e11b469be3b0506f46f0771c \ + --hash=sha256:5f93c5fe914d75fbec9a49209b00da5f08e9e467d69da2b1510c81940cfd10be \ + --hash=sha256:657b40d6240c0a7b6a64b30f22d1e3aa631c7e846c621b0c0f6d1d75e2e15ea6 \ + --hash=sha256:6d30e1a4f138b8951063e9a394752a9179b51da288ffa507b1e659222f4c1793 \ + --hash=sha256:6f7b393a8b3da82f5c1fc0751e6d01ac6c55b93c18226a60bdfba4a724efafd1 \ + --hash=sha256:701b2e04b560eeb4bddf7a25ab8ca476176e34fdbd9a0e18196f0d12d4685f0b \ + --hash=sha256:771cf63ae0b1b50dd22e5f3e3549fab5f3f4ff1635d352a9e1a97fe01c7b2e64 \ + --hash=sha256:79bdfa52f843137045b2d081cc05c120ba6665d29b7559c2c47690906f39279f \ + --hash=sha256:7ac031912d54f3d83ef3b3eb98dfabc1608802e2202263d25957eeed40b94761 \ + --hash=sha256:7b0fc826b16c55e561e5d2a0c5c77b051ba1d92808118c4e4b5390f5e0cf191d \ + --hash=sha256:7c6be839a5a8312626b32029a415644a0846b420bc8b52b95b28cd92da162168 \ + --hash=sha256:816ff0a6550ffc06c098ccd2e0698600f9aa7da192a79eaa6f9af504a35db869 \ + --hash=sha256:82a36973cf8a2ef5406f4fe2edbf8ed0c99629535d959e0b100c76a32535a111 \ + --hash=sha256:837b396ca3d7b74091ca623f6cbd8351bd42d670a79c2683e79fb089f06a2de5 \ + --hash=sha256:850a08d167dde16db8702c274f320c7be9d7da6f6dff2b58b18f9e815bd94f5b \ + --hash=sha256:8816f3d218beb4b787de5c9759c259b8fa61f9dec42dc7811f320a33771778b7 \ + --hash=sha256:892a881d5f68c2b9ea304b7a6c2c60d9343df578a311b0f86b94bc8f1ffe8129 \ + --hash=sha256:895395f8918627b04efb1ad2a4cf605387143300ba03304cd1dfa6d03f5e095e \ + --hash=sha256:8b10e3e8fd7ddc2bd915848a2768e44c15b22936f1cc54c462ad1164deb02655 \ + --hash=sha256:8e24d8f05fa2d28513d94e877e9c75ad66175376209b3977f916e240e623193c \ + --hash=sha256:8feeac04b5794e513e710af2f9c87d49f31a6dc47967bb264a1fed61a8989bec \ + --hash=sha256:9432f3598db432cb51c5b37fdbf29a60fcccc79e30d37a05022776a6bc4ab689 \ + --hash=sha256:976e1128455aa595ea04c79ccfedff1aaeab96ee013fcc916bed120c4f0ad94f \ + --hash=sha256:978e7b97d4824b5be09c69fb70507cbde3b0323fc147332ca40a94d9a6a0ebbf \ + --hash=sha256:97bf8de4d541598c94a59344eeb988a94c08ff76b5723c41f6567ec18c7892ea \ + --hash=sha256:97cf3eb53a8cccacf9d46686a0926186c9bfb5574f2ed66d3639d5fe117cd3a9 \ + --hash=sha256:9b68938dd5b0c783d88ff8e2dcc69451b5eb936fe212d516b21b9d5567f6d464 \ + --hash=sha256:9c4b71f10dd532fb7a5cbc8f58707779e64f03a258c2bf8bfbaecfcd9970b519 \ + --hash=sha256:9f47b8a949e60f027f0aa0a6f6c7b7e9c55cbf4380d10b344e282fa4e7ab1e1b \ + --hash=sha256:a1dee1b804ff4d11c663636cf15d2ea47e9f79cd56c033fb1cbf08924842a48f \ + --hash=sha256:a2468d93d181667a7abd66e1b64bb9f76f361b0fef8faddf687456453576f5ee \ + --hash=sha256:a2a5e1d0ff29adddc9f6d6821a66302e4493f8ca898b715b6b1182c2c201ea0a \ + --hash=sha256:a39ac25a9a2fa4072efdb429833c4a4c8009a51ff9eea3eeae131713cd27991e \ + --hash=sha256:a445486499897b88a7d6c310c88ed64dd37b1b59bfd7ae9107490bbb362f47d6 \ + --hash=sha256:a91c17edf6eea2402cb5457b4c89e99bc5ed1004aa34c4adf1d4258c1a5c22c2 \ + --hash=sha256:ab4b66edffb32d9e951efb3814bd104b8367a7501b81b955cacb5726d897389f \ + --hash=sha256:aca6c767f552b21b10f774aeac128e828eafb796adfa1b666a18bf6321453c3a \ + --hash=sha256:acf8a67ba51f4ca9ddbd0e6b3000a65ac51ab734661778b3e7ba64d99a710f2f \ + --hash=sha256:b10ec717381bdbfafef34607824db4c91de69ff085e4fca3b2af91b4fa17e68a \ + --hash=sha256:b49924c73a235e969511bf2aabdff3beebf9820931f646c80274d5d780010c47 \ + --hash=sha256:b6acfb46a814762367fb7ba0828b0a17d441b92ce249a0e007474c9072662dda \ + --hash=sha256:b7ca9034437b6022f941f4857459562ee00a560b97e7cce8a0ec5a74fc6766e0 \ + --hash=sha256:b98134087d9de723658d17a42c7d0da8d6e2ef08015dee7dc93889047315f5e4 \ + --hash=sha256:b9fe6fb92520e3fd61f2e49000b6911b188824f089b75973ea06d6267f0b476d \ + --hash=sha256:bce57638e08ac148e5778cce7feb968307a727d66f8e2274a543d0cf0c9ad6a3 \ + --hash=sha256:c14ad3bdc85ee7f318742c457ca3968a92126d144b15721c759033bfb06296c2 \ + --hash=sha256:c1c43ad4339643d70ebb8124e1305a7dab423001eff58bb41a0f731adbc98355 \ + --hash=sha256:c3471e5c4a949c26ec00a77f01df59096aa9495877de76fd60a980f8ee6be461 \ + --hash=sha256:c583b927a8838dab890706a6fa7573fbb8b70e24000ef9f7238e2d6f6435a5ed \ + --hash=sha256:c76fe65e607be28c7fd4d56fc3c42b1583aa058ce3408b7ad0fd540171d31f9f \ + --hash=sha256:c7ea57fc63aa7da93a1bd2d644e6577befae10c52c4e36377635eea1056a74f5 \ + --hash=sha256:cd5214352ae68f3b5e9af7768bdc5253695ee069675db3480518420b3be881f2 \ + --hash=sha256:cdbb78909f52b981d3b2d56b97328d71eb0b974c36bd77c920123a7ebb192829 \ + --hash=sha256:cdc8b74ecc48c0cb1e9607a05ec4e9e88db60a19ffcc9a1d5f9088ede40c8dc0 \ + --hash=sha256:d0a24b40877af2de4950252be9d21eaf7fb07660f3c2cae1f56c6b599ada5266 \ + --hash=sha256:d22a945598fb91236b4dd793a6e42e4f3dd7740bb5aace5ebd7d4c08d13bb575 \ + --hash=sha256:d2f9fc07a8042a8f95925b35c4f04f469707c981fc33245b6ca187cf5d2dd290 \ + --hash=sha256:d625a186a65201c23a9e3b8ed9c47e90a026e03256608cc91851c6709096844f \ + --hash=sha256:d925f3d9afd05a8c0fb3a1031463a8d59ebe5e2afad297e29c78be19e13b4e62 \ + --hash=sha256:e64e88d5585bea9ce95861079de72006c7fa6d3df4e3a3b65ba31eb979c15c9f \ + --hash=sha256:e652ab17569c94bff5475520f907b7148b8c24036a8ebbe5cf7cf7493d28579a \ + --hash=sha256:e7b891faeedeafba41b2983e5001a81b6a915b69544c7e7570d1989ce1c36ac7 \ + --hash=sha256:e80675d75ae2cd14372cb65cad5400d9347a3d3f6c13000183f22dfd027283ed \ + --hash=sha256:e9c134bb666dd54b778b9fc0d2b50cbb7f979b9e3716f26a88c9ab3b6fc1dd0f \ + --hash=sha256:eb7d8d0e5886a89a55d2eef490e272fa965a9d57c6b29a5b5088a7997ec2cad1 \ + --hash=sha256:ecb42011e12ee19cafbc312887cbf3546959fe02fbad44f272d4be5baa997615 \ + --hash=sha256:ef3fbbf161dc9351a2fe0422e51b129f9e97e42385bd0320b309c15f7d287dd8 \ + --hash=sha256:efd62a42486f1bda5d24cb4f63d15a3c7768375fe83d36f9417b4ad7a2fb20b3 \ + --hash=sha256:f077d0b97ab11fa7dcc633fca53515f290bca8a8a633e966d5b6d1879d9ed01a \ + --hash=sha256:f332f0e72a5a0400141f830744e141bf9f97917878dbe968669e8a7fefea78ff \ + --hash=sha256:f7b0ec93a2893de856652154d73b7ba622f26fa97726487dcac373de5f4c6084 \ + --hash=sha256:fa10ef4112775900e7a0661068635eb67b2ab824fbde764de6e0e21982a93db0 \ + --hash=sha256:fc5d783bd4a2387e97b8a2d5ec781cfb92b3d893bf82370548e99db5915935d3 \ + --hash=sha256:fc8515076c11f3cfdf4fb142dcca0fe384b1230a3b5415458ac84f3e0903ec13 \ + --hash=sha256:ff218293c9c806138dca139765e3b067621be52bcd93cdc14c7711be7ddc90a9 # via # -c requirements-ci.txt # pydantic -pygments==2.20.0 \ - --hash=sha256:6757cd03768053ff99f3039c1a36d6c0aa0b263438fcab17520b30a303a82b5f \ - --hash=sha256:81a9e26dd42fd28a23a2d169d86d7ac03b46e2f8b59ed4698fb4785f946d0176 +pygments==2.21.0 \ + --hash=sha256:2363c69b61c4a97c838da3b130dcd6468f4848992b21a82f2a63ec34377137d9 \ + --hash=sha256:610ca751c9bc2492b38eb9a38a7fbc93edbbb2d7182edaf34e66ae493dee5c8c # via # -c requirements-ci.txt - # ipython - # ipython-pygments-lexers # rich -pynndescent==0.6.0 \ - --hash=sha256:7ffde0fb5b400741e055a9f7d377e3702e02250616834231f6c209e39aac24f5 \ - --hash=sha256:dc8c74844e4c7f5cbd1e0cd6909da86fdc789e6ff4997336e344779c3d5538ef - # via - # -c requirements-ci.txt - # umap-learn pyparsing==3.3.2 \ --hash=sha256:850ba148bd908d7e2411587e247a1e4f0327839c40e2e5e6d05a007ecc69911d \ --hash=sha256:c777f4d763f140633dcb6d8a3eda953bf7a214dc4eff598413c070bcdc117cbc # via # -c requirements-ci.txt - # matplotlib # rdflib python-dateutil==2.9.0.post0 \ --hash=sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3 \ --hash=sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427 # via # -c requirements-ci.txt - # matplotlib # pandas -python-docx==1.2.0 \ - --hash=sha256:3fd478f3250fbbbfd3b94fe1e985955737c145627498896a8a6bf81f4baf66c7 \ - --hash=sha256:7bc9d7b7d8a69c9c02ca09216118c86552704edc23bac179283f2e38f86220ce - # via - # -c requirements-ci.txt - # semantica (pyproject.toml) -python-dotenv==1.2.2 \ - --hash=sha256:1d8214789a24de455a8b8bd8ae6fe3c6b69a5e3d64aa8a8e5d68e694bbcb285a \ - --hash=sha256:2c371a91fbd7ba082c2c1dc1f8bf89ca22564a087c2c287cd9b662adde799cf3 +python-dotenv==1.2.3 \ + --hash=sha256:904552145e8bfed22162c09dab1c2b9b54fefa7b23ba780f4f26ca0316b0f0d9 \ + --hash=sha256:a20a594dabeaa385725aa239d5244871c143ecb356add8a20fcf23773a6c3a35 # via # -c requirements-ci.txt # semantica (pyproject.toml) @@ -2754,8 +967,6 @@ pyyaml==6.0.3 \ # via # -c requirements-ci.txt # semantica (pyproject.toml) - # huggingface-hub - # transformers # uvicorn rdflib==7.6.0 \ --hash=sha256:30c0a3ebf4c0e09215f066be7246794b6492e054e782d7ac2a34c9f70a15e0dd \ @@ -2763,161 +974,18 @@ rdflib==7.6.0 \ # via # -c requirements-ci.txt # semantica (pyproject.toml) -regex==2026.7.19 \ - --hash=sha256:062f8cb7a9739c4835d22bd96f370c59aba89f257adcfa53be3cc209e08d3ae0 \ - --hash=sha256:064f1760a5a4ade65c5419be23e782f29147528e8a66e0c42dd4cedb8d4e9fc6 \ - --hash=sha256:09523a592938aa9f587fb74467c63ff0cf88fc3df14c82ab0f0517dcf76aaa62 \ - --hash=sha256:09d3007fc76249a83cdd33de160d50e6cb77f54e09d8fa9e7148e10607ce24af \ - --hash=sha256:09f3e5287f94f17b709dc9a9e70865855feee835c861613be144218ce4ca82cc \ - --hash=sha256:0c41c63992bf1874cebb6e7f56fd7d3c007924659a604ae3d90e427d40d4fd13 \ - --hash=sha256:0e9554c8785eac5cffe6300f69a91f58ba72bc88a5f8d661235ad7c6aa5b8ccd \ - --hash=sha256:1123ef4211d763ee771d47916a1596e2f4915794f7aabdc1adcb20e4249a6951 \ - --hash=sha256:15b364b9b98d6d2fe1a85034c23a3180ff913f46caddc3895f6fd65186255ccc \ - --hash=sha256:1649eb39fcc9ea80c4d2f110fde2b8ab2aef3877b98f02ab9b14e961f418c511 \ - --hash=sha256:17ed5692f6acc4183e98331101a5f9e4f64d72fe58b753da4d444a2c77d05b12 \ - --hash=sha256:199535629f25caf89698039af3d1ad5fcae7f933e2112c73f1cdf49165c99518 \ - --hash=sha256:1c398716054621aa300b3d411f467dda903806c5da0df6945ab73982b8d115db \ - --hash=sha256:1d3372064506b94dd2c67c845f2db8062e9e9ba84d04e33cb96d7d33c11fe1ae \ - --hash=sha256:1d58561843f0ff7dc78b4c28b5e2dc388f3eff94ebc8a232a3adba961fc00009 \ - --hash=sha256:1d793a7988e04fcb1e2e135567443d82173225d657419ec09414a9b5a145b986 \ - --hash=sha256:1ebac3474b8589fce2f9b225b650afd61448f7c73a5d0255a10cc6366471aed1 \ - --hash=sha256:20568e182eb82d39a6bf7cff3fd58566f14c75c6f74b2c8c96537eecf9010e3a \ - --hash=sha256:22a992de9a0d91bda927bf02b94351d737a0302905432c88a53de7c4b9ce62e2 \ - --hash=sha256:2955907b7157a6660f27079edf7e0229e9c9c5325c77a2ef6a890cba91efa6f0 \ - --hash=sha256:2c4e61e2e1be56f63ec3cc618aa9e0de81ef6f43d177205451840022e24f5b78 \ - --hash=sha256:2cc3460cedf7579948486eab03bc9ad7089df4d7281c0f47f4afe03e8d13f02d \ - --hash=sha256:2ce9e679f776649746729b6c86382da519ef649c8e34cc41df0d2e5e0f6c36d4 \ - --hash=sha256:2ef7eeb108c47ce7bcc9513e51bcb1bf57e8f483d52fce68a8642e3527141ae0 \ - --hash=sha256:3080a7fd38ef049bd489e01c970c97dd84ff446a885b0f1f6b26d9b1ad13ce11 \ - --hash=sha256:343a4504e3fb688c47cad451221ca5d4814f42b1e16c0065bde9cbf7f473bd52 \ - --hash=sha256:36aacfb15faaff3ced55afbf35ec72f50d4aee22082c4f7fe0573a33e2fca92e \ - --hash=sha256:3d3143f159261b1ce5b24c261c590e5913370c3200c5e9ebbb92b5aa5e111902 \ - --hash=sha256:40b34dd88658e4fedd2fddbf0275ac970d00614b731357f425722a3ed1983d11 \ - --hash=sha256:4458124d71339f505bf1fb94f69fd1bb8fa9d2481eebfef27c10ef4f2b9e12f6 \ - --hash=sha256:4896db1f4ce0576765b8272aa922df324e0f5b9bb2c3d03044ff32a7234a9aba \ - --hash=sha256:4a0530bb1b8c1c985e7e2122e2b4d3aedd8a3c21c6bfddae6767c4405668b56e \ - --hash=sha256:4aa5435cdb3eb6f55fe98a171b05e3fbcd95fadaa4aa32acf62afd9b0cfdbcac \ - --hash=sha256:4c3501bfa814ab07b5580741f9bf78dfdfe146a04057f82df9e2402d2a975939 \ - --hash=sha256:4e5413bd5f13d3a4e3539ca98f70f75e7fca92518dd7f117f030ebedd10b60cb \ - --hash=sha256:4e6883a021db30511d9fb8cfb0f222ce1f2c369f7d4d8b0448f449a93ba0bdfc \ - --hash=sha256:52579c60a6078be70a0e49c81d6e56d677f34cd439af281a0083b8c7bc75c095 \ - --hash=sha256:555497390743af1a65045fa4527782d10ff5b88970359412baa4a1e628fe393b \ - --hash=sha256:56ad4d9f77df871a99e25c37091052a02528ec0eb059de928ee33956b854b45b \ - --hash=sha256:571fde9741eb0ccde23dd4e0c1d50fbae910e901fa7e629faf39b2dda740d220 \ - --hash=sha256:572fc57b0009c735ee56c175ea021b637a15551a312f56734277f923d6fd0f6c \ - --hash=sha256:59787bd5f8c70aa339084e961d2996b53fbdeab4d5393bba5c1fe1fc32e02bae \ - --hash=sha256:5a2721c8720e2cb3c209925dfb9200199b4b07361c9e01d321719404b21458b3 \ - --hash=sha256:5cc26a66e212fa5d6c6170c3a40d99d888db3020c6fdab1523250d4341382e44 \ - --hash=sha256:5ebee1ee89c39c953baac6924fcde08c5bb427c4057510862f9d7c7bdb3d8665 \ - --hash=sha256:60be8693a1dadc210bbcbc0db3e26da5f7d01d1d5a3da594e99b4fa42df404f5 \ - --hash=sha256:618a0aed532be87294c4477b0481f3aa0f1520f4014a4374dd4cf789b4cd2c97 \ - --hash=sha256:61bb1bd45520aacd56dd80943bd34991fb5350afdd1f36f2282230fd5154a218 \ - --hash=sha256:6383cd2ed53a646c659ba1fe65727db76437fdaa069e697a0b44a51d5843d864 \ - --hash=sha256:64729333167c2dcaaa56a331d40ee097bd9c5617ffd51dabb09eaddafb1b532e \ - --hash=sha256:64b6ca7391a1395c2638dd5c7456d67bea44fc6c5e8e92c5dc8aa6a8f23292b4 \ - --hash=sha256:65dcd28d3eba2ab7c2fd906485cc301392b47cc2234790d27d4e4814e02cdfda \ - --hash=sha256:65fa6cb38ed5e9c3637e68e544f598b39c3b86b808ed0627a67b68320384b459 \ - --hash=sha256:66bd62c59a5427746e8c44becae1d9b99d22fb13f30f492083dfb9ad7c45cc18 \ - --hash=sha256:6e44c0e7c5664be20aee92085153150c0a7967310a73a43c0f832b7cd35d0dd3 \ - --hash=sha256:6f8c6e7a1cfa3dc9d0ee2de0e65e834537fa29992cc3976ffec914afc35c5dd5 \ - --hash=sha256:7322ec6cc9fba9d49ab888bb82d67ac5625627aa168f0165139b17018df3fb8a \ - --hash=sha256:73b133a9e6fb512858e7f065e96f1180aa46646bc74a83aea62f1d314f3dd035 \ - --hash=sha256:73f272fba87b8ccfe70a137d02a54af386f6d27aa509fbffdd978f5947aae1aa \ - --hash=sha256:7e77b324909c1617cbb4c668677e2c6ae13f44d7c1de0d4f15f2e3c10f3315b5 \ - --hash=sha256:80115dd39481fd3a4b4080220799dbcacb921a844de4b827264ececacbe17c78 \ - --hash=sha256:87ccab0db8d5f4fbb0272642113c1adb2ffc698c16d3a0944580222331fa7a20 \ - --hash=sha256:89dfee3319f5ae3f75ebd5c2445a809bb320252ba5529ffdafea4ef25d79cf1a \ - --hash=sha256:8ac59a0900474a52b7c04af8196affc22bd9842acb0950df12f7b813e983609a \ - --hash=sha256:8cae6fd77a5b72dae505084b1a2ee0360139faf72fedbab667cd7cc65aae7a6a \ - --hash=sha256:8d3469c91dd92ee41b7c95280edbd975ef1ba9195086686623a1c6e8935ce965 \ - --hash=sha256:90c633e7e8d6bf4e992b8b36ce69e018f834b641dd6de8cea6d78c06ffa119c5 \ - --hash=sha256:93db40c8de0815baab96a06e08a984bac71f989d13bab789e382158c5d426797 \ - --hash=sha256:9724e6cb5e478cd7d8cabf027826178739cb18cf0e117d0e32814d479fa02276 \ - --hash=sha256:98c6ac18480fcdb33f35439183f1d2e79760ab41930309c6d951cb1f8e46694c \ - --hash=sha256:9a15e785f244f3e07847b984ce8773fc3da10a9f3c131cc49a4c5b4d672b4547 \ - --hash=sha256:9b60d7814174f059e5de4ab98271cc5ba9259cfea55273a81544dceea32dc8d9 \ - --hash=sha256:9be2a6647740dd3cca6acb24e87f03d7632cd280dbce9bbe40c26353a215a45d \ - --hash=sha256:9c7472192ebfad53a6be7c4a8bfb2d64b81c0e93a1fc8c57e1dd0b638297b5d1 \ - --hash=sha256:9dce8ec9695f531a1b8a6f314fd4b393adcccf2ea861db480cdf97a301d01a68 \ - --hash=sha256:9e50d748a32da622f256e8d505867f5d3c43a837c6a9f0efb149655fadd1042a \ - --hash=sha256:a81758ed242b861b72e778ba34d41366441a2e10b16b472784c88da2dea7e2dd \ - --hash=sha256:ac777001cdfc28b72477d93c8564bb7583081ea8fb45cdca3d568e0a4f87183c \ - --hash=sha256:b2b506b1788df5fecd270a10d5e70a95fe77b87ea2b370a318043f6f5f817ee6 \ - --hash=sha256:b2ea4a3e8357be8849e833beeae757ac3c7a6b3fc055c03c808a53c91ad30d82 \ - --hash=sha256:bf1516fe58fc104f39b2d1dbe2d5e27d0cd45c4be2e42ba6ee0cc763701ec3c7 \ - --hash=sha256:c0d702548d89d572b2929879bc883bb7a4c4709efafe4512cadee56c55c9bd15 \ - --hash=sha256:c10b82c2634df08dfb13b1f04e38fe310d086ee092f4f69c0c8da234251e556e \ - --hash=sha256:c42572142ed0b9d5d261ba727157c426510da78e20828b66bbb855098b8a4e38 \ - --hash=sha256:c4585c3e64b4f9e583b4d2683f18f5d5d872b3d71dcf24594b74ecc23602fa96 \ - --hash=sha256:c639ea314df70a7b2811e8020448c75af8c9445f5a60f8a4ced81c306a9380c2 \ - --hash=sha256:c670fe7be5b6020b76bc6e8d2196074657e1327595bca93a389e1a76ab130ad8 \ - --hash=sha256:cc1b2440423a851fad781309dd87843868f4f66a6bcd1ddb9225cf4ec2c84732 \ - --hash=sha256:cd3584591ea4429026cdb931b054342c2bcf189b44ff367f8d5c15bc092a2966 \ - --hash=sha256:d15df07081d91b76ff20d43f94592ee110330152d617b730fdbe5ef9fb680053 \ - --hash=sha256:d19662dbedbe783d323196312d38f5ba53cf56296378252171985da6899887d3 \ - --hash=sha256:d24ecb4f5e009ea0bd275ee37ad9953b32005e2e5e60f8bbae16da0dbbf0d3a0 \ - --hash=sha256:d446c6ac40bb6e05025ccee55b84d80fe9bf8e93010ffc4bb9484f13d498835f \ - --hash=sha256:d51ffd3427640fa2da6ade574ceba932f210ad095f65fcc450a2b0a0d454868e \ - --hash=sha256:d6ce43a0269d68cee79a7d1ade7def53c20f8f2a047b92d7b5d5bcc73ae88327 \ - --hash=sha256:d721e53758b2cca74990185eb0671dd466d7a388a1a45d0c6f4c13cef41a68ac \ - --hash=sha256:d7da47a0f248977f08e2cb659ff3c17ddc13a4d39b3a7baa0a81bf5b415430f6 \ - --hash=sha256:db47b561c9afd884baa1f96f797c9ca369872c4b65912bc691cfa99e68340af2 \ - --hash=sha256:dbe6493fbd27321b1d1f2dd4f5c7e5bd4d8b1d7cab7f32fd67db3d0b2ed8248a \ - --hash=sha256:dbece16025afda5e3031af0c4059207e61dcf73ef13af844964f57f387d1c435 \ - --hash=sha256:ddd67571c10869f65a5d7dde536d1e066e306cc90de57d7de4d5f34802428bb5 \ - --hash=sha256:de9208bb427130c82a5dbfd104f92c8876fc9559278c880b3002755bbbe9c83d \ - --hash=sha256:e30d40268a28d54ce0437031750497004c22602b8e3ab891f759b795a003b312 \ - --hash=sha256:e8b0abe7d870f53ca5143895fef7d1041a0c831a140d3dc2c760dd7ba25d4a8b \ - --hash=sha256:f035d9dc1d25eff9d361456572231c7d27b5ccd473ca7dc0adfce732bd006d40 \ - --hash=sha256:f04b9f56b0e0614c0126be12c2c2d9f8850c1e57af302bd0a63bed379d4af974 \ - --hash=sha256:f0fa4fa9c3632d708742baf2282f2055c11d888a790362670a403cbf48a2c404 \ - --hash=sha256:f2e7f8e2ab6c2922be02c7ec45185aa5bd771e2e57b95455ee343a44d8130dff \ - --hash=sha256:f8f6fa298bb4f7f58a33334406218ba74716e68feddf5e4e54cd5d8082705abf \ - --hash=sha256:fbf300e2070bb35038660b3be1be4b91b0024edb41517e6996320b49b92b4175 \ - --hash=sha256:fce7760bf283405b2c7999cab3da4e72f7deca6396013115e3f7a955db9760da \ - --hash=sha256:fcee38cd8e5089d6d4f048ba1233b3ad76e5954f545382180889112ff5cb712d \ - --hash=sha256:fe31f28c94402043161876a258a9c6f757cb485905c7614ce8d6cd40e6b7bdc1 \ - --hash=sha256:ffd8893ccc1c2fce6e0d6ca402d716fe1b29db70c7132609a05955e31b2aa8f2 - # via - # -c requirements-ci.txt - # transformers requests==2.34.2 \ --hash=sha256:2a0d60c172f83ac6ab31e4554906c0f3b3588d37b5cb939b1c061f4907e278e0 \ --hash=sha256:f288924cae4e29463698d6d60bc6a4da69c89185ad1e0bcc4104f584e960b9ed # via # -c requirements-ci.txt # semantica (pyproject.toml) - # fastembed - # pooch - # spacy rich==14.3.4 \ --hash=sha256:07e7adb4690f68864777b1450859253bed81a99a31ac321ac1817b2313558952 \ --hash=sha256:817e02727f2b25b40ef56f5aa2217f400c8489f79ca8f46ea2b70dd5e14558a9 # via # -c requirements-ci.txt # semantica (pyproject.toml) - # typer -safetensors==0.8.0 \ - --hash=sha256:040070828e36dc8e122178bbbd5830ff9e97920affb84cbe0f46442497bed358 \ - --hash=sha256:096ec1a98435df7beb08853bb5aa9081a84f23d0adc67ed1a0a10550f608373f \ - --hash=sha256:2ddf52eac562eda224f99acfa7889d02968c1fd59a5b011ae7d8137c37e9c02d \ - --hash=sha256:3ae091f16662658bdc019a4ff6cb4c085bb7d725eb5978b183ffd265863b6d2d \ - --hash=sha256:4124502b78f03534117c848f87a39b8f31e577b15eff423bf8bfb95f2a8c30d0 \ - --hash=sha256:4a95ae2b05d7726d751da4ebf626a2ca782b706e101bd894c95bc2450b1cffcc \ - --hash=sha256:7a46e5ff292c356d6991e60942ba7f79817682d3a2cef0702136448cb9c4d235 \ - --hash=sha256:7bc0a787ba8a35be368ee3574edfa2b1ad389eebd0a72e482ae275490e3f6c98 \ - --hash=sha256:87eec7ffed2b809f05a398a8becb7d013f19f7837cd15d9748580d6cf30dbaf4 \ - --hash=sha256:8e080062fcde23be189565e1c3305d16751a218ecf9412c8601e64204eb6f846 \ - --hash=sha256:8e9f537aa183a38ace122d27303dcd986b26bd2a7591f9181d7f0c396f4677ca \ - --hash=sha256:c554f85858e05226d3c2828e32395e677434685d6d94594a41643361c5e837f0 \ - --hash=sha256:c80201d22cbf405b80647a60ada77bba06c8fba2da2743ba1e89cdcc39a81f25 \ - --hash=sha256:f7838e5135a406ad3e02efdcb8cf2e5397d368b0154537c4fec682dbc544d452 \ - --hash=sha256:fabaf3e0f18a6618d9b36560682562157f77c2b71fcffc7b432be2baed9d753d \ - --hash=sha256:fcdd41ec4628fee5799f807c73c353629130fbd942aa23d83c623dd6c9d52d78 \ - --hash=sha256:fd6f3f93c9a0a7cc2788ee63fb763353d4bd2e89b0751bc78fcf7dda00bea774 - # via - # -c requirements-ci.txt - # transformers scikit-learn==1.9.0 \ --hash=sha256:051075bda8b7aab87b1906ab3d4740a1e1224a19d7b3781a576736edc94e76aa \ --hash=sha256:056c92bb67ad4c28463c2f2653d9701449201e7e7a9e94e321be0f71c4fef2b8 \ @@ -2953,10 +1021,6 @@ scikit-learn==1.9.0 \ # via # -c requirements-ci.txt # semantica (pyproject.toml) - # librosa - # pynndescent - # sentence-transformers - # umap-learn scipy==1.17.1 \ --hash=sha256:010f4333c96c9bb1a4516269e33cb5917b08ef2166d5556ca2fd9f082a9e6ea0 \ --hash=sha256:02ae3b274fde71c5e92ac4d54bc06c42d80e399fec704383dcd99b301df37458 \ @@ -3022,226 +1086,19 @@ scipy==1.17.1 \ # via # -c requirements-ci.txt # semantica (pyproject.toml) - # gensim - # librosa - # pynndescent # scikit-learn - # sentence-transformers - # umap-learn -seaborn==0.13.2 \ - --hash=sha256:636f8336facf092165e27924f223d3c62ca560b1f2bb5dff7ab7fad265361987 \ - --hash=sha256:93e60a40988f4d65e9f4885df477e2fdaff6b73a9ded434c1ab356dd57eefff7 - # via - # -c requirements-ci.txt - # semantica (pyproject.toml) -sentence-transformers==5.7.0 \ - --hash=sha256:b78141da3d8137e70d965866e2ca43190b9266f3d4d8752e250ded75e7136730 \ - --hash=sha256:fd8c8fc35e6323631dff9f3760969ebf7980dc3cfda0ab1354bc6a774cc0e5d8 - # via - # -c requirements-ci.txt - # semantica (pyproject.toml) -setuptools==84.0.0 \ - --hash=sha256:51a52592b3b99e102b609654876bd65f19f999935166d1352678931132b0c670 \ - --hash=sha256:f4695c21257f0d9b537ec2692c941d02ee143b7cc1276941349a546573b2ef73 - # via - # -c requirements-ci.txt - # spacy - # thinc - # torch -shellingham==1.5.4 \ - --hash=sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686 \ - --hash=sha256:8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de - # via - # -c requirements-ci.txt - # typer six==1.17.0 \ --hash=sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274 \ --hash=sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81 # via # -c requirements-ci.txt # python-dateutil -smart-open==8.0.1 \ - --hash=sha256:18b1c4496003c6902be17c15f032b5c319f307c89c6ae9e6b028b508bed8b2cf \ - --hash=sha256:3e97f90e92a952cb57863dfe132082c400a52eeeb27c067692fb51dbcc5b0089 - # via - # -c requirements-ci.txt - # gensim - # weasel -smmap==5.0.3 \ - --hash=sha256:4d9debb8b99007ae47165abc08670bd74cb74b5227dda7f643eccc4e9eb5642c \ - --hash=sha256:c106e05d5a61449cf6ba9a1e650227ecfb141590d2a98412103ff35d89fc7b2f - # via - # -c requirements-ci.txt - # gitdb -soundfile==0.14.0 \ - --hash=sha256:0a6ae43c50c71b4e020cc55382925cb89451c1ed1a0c3d0f5d802da269226849 \ - --hash=sha256:19be05428da76ed61a4cad29b8e4bcf43a3e5c100089d2ec81dc961eed1b0dd4 \ - --hash=sha256:1e38bac1853412871318e82a1ba69a8be677619b56025bbfcccdb41b6cafe82d \ - --hash=sha256:299491d3499460fb1b74bb4bd78b57ffc2d243a5fafa7b6ec1b264875c78453e \ - --hash=sha256:8ba81ae3a89fd5ab3bef8a8eb481fbbe794e806309675a89b4df48b8d31908a8 \ - --hash=sha256:ba1c1a2d618bca5c406647c83b89f07cc8810fa506a50622a6993ba130c1de11 \ - --hash=sha256:d828d35a059626da52f1415b5faee610aeab393319cb3fc4a9aef47b619fc14c \ - --hash=sha256:e090704718e124e7c844695236f1fce8d18a5e761eaf7c82dfcd124620805f98 \ - --hash=sha256:e85724a90bc99a6e8062c0b4ddf725f53b2a3b70afd4da875e9d2cfc4e92f377 - # via - # -c requirements-ci.txt - # librosa -soupsieve==2.9.2 \ - --hash=sha256:4a55d8cf158a9c2e587fa4922f1bbb91d68ac829e2d6f25403a85747c71daf74 \ - --hash=sha256:8089a26fd974ca7a1f30276d3d8492ab266ab15af581642dfe8aa162e0c1c823 - # via - # -c requirements-ci.txt - # beautifulsoup4 -soxr==1.1.0 \ - --hash=sha256:1577865e993f98ffb261257c3060fa76ec3db44ed3f181b16464268000424464 \ - --hash=sha256:26925618945f1a44dfbd783cc572874f0685e9ecdf46b96f4000f6b8c9c8b825 \ - --hash=sha256:318925f7281df61dfa7f17fe343952eb10cefd3954f2423a733fabe3a517bab2 \ - --hash=sha256:33525740fb7dbed8b09970bf0cd4219b365538845053987b11cc235b20562e09 \ - --hash=sha256:34cc92208c3c412c046813e69da639c04a792c6a41fbfd7d909d359cd3e97a2d \ - --hash=sha256:3b033078e86f3c4a658e5697fac8995764fad9e799563616b630136b613167f1 \ - --hash=sha256:3da87e3ffa3e41823d873b051c7ecb2acebd8d1b6b46b752f5facf10a0d84ab9 \ - --hash=sha256:474aabb9283f177e899747510d60661730538052fca0ed93a943d4686d6655b1 \ - --hash=sha256:52c9ca84e3dc656d83acc424574770e20ea8e0704dc3842d4e27b0fe9d3ba449 \ - --hash=sha256:588c7de1abafe59e66face9a074514658ac0398c85a774cdbb8efac131192692 \ - --hash=sha256:6ae2a174bffea94e8ead857dad85999d3f49f091774dbad5b046c0417d7092f4 \ - --hash=sha256:868a24d864c25024f60ca964f851a759f2ada5352608fc194d927b7facc2e28b \ - --hash=sha256:8e11e26f1718b5c2e5b96f2f71b9f00e31d247b065289661e3a6996c758669d9 \ - --hash=sha256:9443e5eb82152d8952422b7285692192cc7dcffa5218bb511b096203018bc273 \ - --hash=sha256:9564d82f7fa6bf548e5f18bb86235dff20eea8bd30727b64d49783c95c34fb8d \ - --hash=sha256:9f228ae21c78fa9359ca98d8a5e8e91f30639e438e574133dace62c5b5309e44 \ - --hash=sha256:a941f5aaa0b8abced24318105c1ea22576afcc1138c19f625716ce4e2f76ad64 \ - --hash=sha256:ae30c48ac795378cf23ba3c7c640b8ff794af714ac388b9fd6b31a40b39e6e86 \ - --hash=sha256:b2e94c713b7d96fb92841947b785bcee6606124bc852273fab70454b51bfe270 \ - --hash=sha256:bd30f7201eac896ebf5db7b09156e6f1a1b82601900d29d9c8449bdad8365b11 \ - --hash=sha256:bf98c0d7b7d5ef5bf072fee8d3020e8b664f2d195933ea7bc5089267c2e22a06 \ - --hash=sha256:d6a7ad82b8d5f3fcc04b1d2ca055562b96af571e1d4fa7c6c61d0fb509ac43b4 \ - --hash=sha256:e0e09fa633ce2e67df08b298afced4d184f6e753fc330f241022250f1d0d61da \ - --hash=sha256:e17d4ef9b0185214b2c0935605ae63f827ea423bc74964be44763d68d2b6c21e \ - --hash=sha256:f4977323ef9c3aa3c2a26ff5fe0191c84b8fd759daf7afb1f25a91a55ad8b730 \ - --hash=sha256:feebcba99ac99adb8009d46c8f4c1956b8c167576b0ae8a6fb47502e9a6f78e7 - # via - # -c requirements-ci.txt - # librosa -spacy==3.8.15 \ - --hash=sha256:0262f86956e751ace6e47e530cf9841d66f2354d8cd91cfeeb39eee4c5f2962f \ - --hash=sha256:1c8a27500b409b472a743c2b0b2af2dff42f4287ace36f2b776e4592d65ab493 \ - --hash=sha256:2cbd33b0801ed0fed71454cdfaefbabb18b1b854471f7683c5df2f78be00e8cc \ - --hash=sha256:35060be85c952df84e9095713ba05f8515473e127ad0c6b43cd22a1b42d4cdbc \ - --hash=sha256:37f370f579c1bb56aa767e6d585672133f37e89c1181ebbd251fd946777f0ef5 \ - --hash=sha256:39ac175bbf8a8381c41b8e0abbdede3ff29d1f29f3cac42644f5719671e20884 \ - --hash=sha256:4031de613e8ba666392fef107a06b5144270f0f64b6a61df37faf6a329d61b5a \ - --hash=sha256:59c1ad50c8d0afe8397a06e28f39f3cebced0cdf53b14607dfca44c9822d7650 \ - --hash=sha256:6b27d0abf1138644837536705578dc1ea48a693796b283a49202e1dbde0a3b02 \ - --hash=sha256:7863c35506ec6f7e3fc13836330a4badd723514b9dc067ed79a8b0c593b824b4 \ - --hash=sha256:81ca434f0a08062fe5d5fd05858196b3c007c755d8b54e2019c071949a93eefe \ - --hash=sha256:8397a6e76b85d7a1d42b2654ed0bbad053e9100b80f41efcf608a8cf02df76f6 \ - --hash=sha256:9ad71e9ce6c4e1b984a91bc82b2e4e08df23581f5cc670bbacf29a07a9822d5a \ - --hash=sha256:9b22d269dfa6aa3c6a000e576b261bee46c277afaf915a3fe1e0a81ad227ee7e \ - --hash=sha256:aaa70356876c152f0235ff5bc4869f7a45133392ff73aa881113376f7eec0caa \ - --hash=sha256:b4527b7824e8228f2abed18774b224de7aad9b900d47ff66483abdf16d0c8a5e \ - --hash=sha256:c8b187654941e417c4cc0378ed7860bf6aad7bbbc370b925994a9cebeb8ca615 \ - --hash=sha256:c9279132fee6e131b295f5336b8f9e46c16e5ec430e6c58a56fc9ef134cc1f5a \ - --hash=sha256:c9683078efb96dee8b1a751bc0bfa9271a6604b7257547849b4254f285ce77d9 \ - --hash=sha256:cb0782680cf930e9ab984a73b2078c981343f77c5c407773c704cbf8c7df13c0 \ - --hash=sha256:ce66d75279ee84b749eea058ff3ea79a31adf0ff53f887943dced258ceb6ce2a \ - --hash=sha256:d41166f5f763ff3a3e085d4314b6cf34cf1cd2bf0845aaafa1acc266e9a46ef7 \ - --hash=sha256:d5806db3034618ef426e360dd8519283dc08f5be1690ce5bc3bb2c628f86215f \ - --hash=sha256:e1aaf79b42c0e8c5dd4801b474c22a61fc68edb347fd3a6e09d5cba7e1aed5db \ - --hash=sha256:e7ca79280762f1de0a7a5c1ce8ccfe1f54b772e8761ea7d9408e535427592749 \ - --hash=sha256:f04bc083600ff688fe500a736dd4d8ac3d06527f7808c2d7932d4174d8f3b751 \ - --hash=sha256:f1c0f054365fdfd95cfe96acbb4c5c1dbefb787905e4e63013eda54d3c815050 \ - --hash=sha256:f5714a76826756cea2257d35524233ebe49c6f70b6510b224e46036a4a341a79 \ - --hash=sha256:fa9df68fc8887c0a6440b84d1d307980e594d99b45f19a37d733e58caa9a6682 \ - --hash=sha256:ff1a616862d6c07a9e7ae13b911005f89c064ce884ec31784f8032adb3f86829 - # via - # -c requirements-ci.txt - # semantica (pyproject.toml) -spacy-legacy==3.0.12 \ - --hash=sha256:476e3bd0d05f8c339ed60f40986c07387c0a71479245d6d0f4298dbd52cda55f \ - --hash=sha256:b37d6e0c9b6e1d7ca1cf5bc7152ab64a4c4671f59c85adaf7a3fcb870357a774 - # via - # -c requirements-ci.txt - # spacy -spacy-loggers==1.0.5 \ - --hash=sha256:196284c9c446cc0cdb944005384270d775fdeaf4f494d8e269466cfa497ef645 \ - --hash=sha256:d60b0bdbf915a60e516cc2e653baeff946f0cfc461b452d11a4d5458c6fe5f24 - # via - # -c requirements-ci.txt - # spacy -srsly==2.5.3 \ - --hash=sha256:0017c7d2a0cd9a4f1bdc00d946b45edcf90bb0e271e8f084c1ce542bf6708c32 \ - --hash=sha256:06a43d63bde2e8cccadb953d7fff70b18196ca286b65dd2ad16006d65f3f8166 \ - --hash=sha256:07d682679e639eb46ff7e6da4a92714f4d5ffe351d088ee66f221e9b1f8865bb \ - --hash=sha256:08f98dbecbff3a31466c4ae7c833131f59d3655a0ad8ac749e6e2c149e2b0680 \ - --hash=sha256:0f106b0a700ab56e4a7c431b0f1444009ab6cb332edc7bbf6811c2a43f4722cb \ - --hash=sha256:111805927f05f5db440aeeacb85ce43da0b19ce7b2a09567a9ef8d30f3cc4d83 \ - --hash=sha256:14c930767cc169611a2dc14e23bc7638cfb616d6f79029700ade033607343540 \ - --hash=sha256:1a3d6e03c65e3af15bfb1ad18f1888ba0a8482903218c1a5b5ed6fd66f5b0fb1 \ - --hash=sha256:1c9129c4abe31903ff7996904a51afdd5428060de6c3d12af49a4da5e8df2821 \ - --hash=sha256:1d93c22f42dfc4383a89ff3fcbe89ed9b286cf1d7e762cba533f2fac5ed36b28 \ - --hash=sha256:1fd6c35c65c4d2435ae5bfb57b59682cf9b61606318a2a761856be9d7cc2d9e3 \ - --hash=sha256:21cf09e417d3e4f3fbf7dd337fd6d948c97abd01896b9b4cb80e81cd9778a73a \ - --hash=sha256:29d5d01ba4c2e9c01f936e5e6d5babc4a47b38c9cbd6e1ec23f6d5a49df32605 \ - --hash=sha256:2f2d464f0d0237e32fb53f0ec6f05418652c550e772b50e9918e83a1577cba4d \ - --hash=sha256:2f73c0db911552e94fe2016e1759d261d2f47926f68826664cada3723c87006a \ - --hash=sha256:2f76a2507cc2debf0aeb31120c8d04d752eb0ca8bd84599a62461796a3c0f71f \ - --hash=sha256:348c231b4477d8fe86603131d0f166d2feac9c372704dfc4398be71cc5b6fb07 \ - --hash=sha256:3576c125c486ce2958c2047e8858fe3cfc9ea877adfa05203b0986f9badee355 \ - --hash=sha256:39c13d552a9f9674a12cdcdc66b0c2f02f3430d0cd04c5f9cf598824c2bd3d65 \ - --hash=sha256:4b1b721cd3ad1a9b2343519aadc786a4d09d5c0666962d49852eb12d6ec3fe26 \ - --hash=sha256:4ca4a068f6e14d84113a02fcb875c6b50a6285a12938c0e7a157eb3a63c50a86 \ - --hash=sha256:4d6ebaeac9baa5c85b6b56c180458f1b4fef9213bc36b62fcbecf5b3d8a3001c \ - --hash=sha256:565f69083d33cb329cfc74317da937fb3270c0f40fabc1b4488702d8074b4a3e \ - --hash=sha256:598f1e494c18cacb978299d77125415a586417081959f8ec3f068b32d97f8933 \ - --hash=sha256:5c1ac27ae5f4bb9163c7d2c45fc8ec173aac3d92e32086d9472b326c5c6e570e \ - --hash=sha256:5c8df4039426d99f0148b5743542842ab96b82daded0b342555e15a639927757 \ - --hash=sha256:5f6a837954429ecbe6dcdd27390d2fb4c7d01a3f99c9ffcf9ce66b2a6dd1b738 \ - --hash=sha256:5fb59c42922e095d1ea36085c55bc16e2adb06a7bfe57b24d381e0194ae699f2 \ - --hash=sha256:63c0f4c088ddf0c736a24f7d7be1f6e2896a71822630c2805569b14de93eb393 \ - --hash=sha256:66ebae2c70305987341519ec1a720072a3cb3e4b1d52ac0e9e841f4d02658d3d \ - --hash=sha256:6a02d7dcc16126c8fae1c1c09b2072798a1dc482ab5f9c52b12c7114dac47325 \ - --hash=sha256:71d4cbe2b2a1335c76ed0acae2dc862163787d8b01a705e1949796907ed94ccd \ - --hash=sha256:71e51c046ccbeefb86524c6b1e17574f579c6ac4dc8ea4a09437d3e8f88342d3 \ - --hash=sha256:7326bc048073b04e4e7d59dd4a2d737c8e7cc270ef74ea1acb764382e995590c \ - --hash=sha256:785a09216ac31570fb301ddb9f61ee73d1f18f8b9561f712dce0b8ac8628bc88 \ - --hash=sha256:7ea5412ea229e571ac9738cbe14f845cc06c8e4e956afb5f42061ccd087ef31f \ - --hash=sha256:808cfafc047f0dec507a34c8fa8e4cda5722737fd33577df73452f52f7aca644 \ - --hash=sha256:8ac016ffaeac35bc010992b71bf8afdd39d458f201c8138d84cf78778a936e6c \ - --hash=sha256:8d3988970b4cf7d03bdd5b5169302ff84562dd2e1e0f84aeb34df3e5b5dc19bf \ - --hash=sha256:8e0542d85d6b55cf2934050d6ffcb1cd76c768dcf9572e7467002cf087bb366d \ - --hash=sha256:91688edb1f49110870d2c215db2cf445f1763c14173698ead0818908c51fb2a1 \ - --hash=sha256:916edb6dc1051732610e37863232e5a1d64bed7b130fed067f7dbc80d12d0065 \ - --hash=sha256:953d77ba0d8c96b29657622492c2c0bc7c161a304c069043a14c368aec20aeef \ - --hash=sha256:99026bcd9cbd3211cc36517400b04ca0fc5d3e412b14daf84ee6e65f67d9a2d8 \ - --hash=sha256:9ffc97e22730ea97b00f7c303ccc60b1305e786afadb2a4a46578dafa4d29da0 \ - --hash=sha256:a595958d0b1ff6d59c2570a3f0d1c8e36ab9f89d6e1b9c96fa7eb5e1a8698510 \ - --hash=sha256:b0938c2978c91ae1ef9c1f2ba35abb86330e198fb23469e356eba311e02233ee \ - --hash=sha256:b9df76d5a6bbf50967589bd42df3c522dd88babea2be745a507f56b41ab40626 \ - --hash=sha256:bc0ad5be2aeb9ff29c8512848d39d7c63fdd4bfbb5516bc523f5de5a77e55e6d \ - --hash=sha256:c378afcb7dd7c42f426a66112496c949fc39e5883de6817d86e60afa51720ccc \ - --hash=sha256:c812302a9acfe171e82f680b7ad642014cd017380b2c678441b3da4fb513c498 \ - --hash=sha256:d18933248a5bb0ad56a1bae6003a9a7f37daac2ecb0c5bcbfaaf081b317e1c84 \ - --hash=sha256:d2b8cfd8aee4d06ab335d359e4095d206102300a5e105a4b4bc69acca42427a6 \ - --hash=sha256:d822083fe26ec6728bd8c273ac121fc4ab3864a0fdf0cf0ff3efb188fcd209ed \ - --hash=sha256:e283fa2a8f7350fb9fb70ecdee28d59d39c92f4c7f1cc90a44d6b86db3b3a8b3 \ - --hash=sha256:e67b6bbacbfadea5e100266d2797f2d4cec9883ea4dc84a5537673850036a8d8 \ - --hash=sha256:f09b551f6c3e334652831ac68c770ee4284741ce0a3895bf1ccf2a1178d66cdd - # via - # -c requirements-ci.txt - # spacy - # thinc - # weasel -stack-data==0.6.3 \ - --hash=sha256:836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9 \ - --hash=sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695 - # via - # -c requirements-ci.txt - # ipython starlette==1.6.0 \ --hash=sha256:a86dd39d14bb45f85a3d18525215a9ef0cfd1f192ac793220e72598c90335f0c \ --hash=sha256:d4e3ac5e546444960c710297a3c9fc3f7ebae1b7e963f3d36173b49da535be9b # via # -c requirements-ci.txt + # semantica (pyproject.toml) # fastapi structlog==26.1.0 \ --hash=sha256:e081a26d6c373e6d201eca24eede26d8ffab07f88f477822e679183428d3d91e \ @@ -3249,198 +1106,35 @@ structlog==26.1.0 \ # via # -c requirements-ci.txt # semantica (pyproject.toml) -sympy==1.14.0 \ - --hash=sha256:d3d3fe8df1e5a0b42f0e7bdf50541697dbe7d23746e894990c030e2b05e72517 \ - --hash=sha256:e091cc3e99d2141a0ba2847328f5479b05d94a6635cb96148ccb3f34671bd8f5 - # via - # -c requirements-ci.txt - # torch -thinc==8.3.13 \ - --hash=sha256:0355c37e40d1a9fc2a1b8e9c2e294d8586f6baa97bcac6b9002f2dddb4b82ae9 \ - --hash=sha256:0a0fa13dcfe4b319c3a396432c1dbff30d3de37dbbdee559e76600ee2b9486df \ - --hash=sha256:11754fada9ad5ba2e02d5f3f234f940e24015b82333db58372f4a6aedad9b43f \ - --hash=sha256:303477eb51b9b39c94a7fc7967ee8a039eca1ca37d95dcce1234c83b95b4ee9f \ - --hash=sha256:3710d318b4e5460cf366a6f7b5ddbefb5d39dbd4cfa408222750fdc6c27c4411 \ - --hash=sha256:3dac18a0fb0a42f711c2ce9c02cbb090385aecae92089aa17b9dfd808a542013 \ - --hash=sha256:433e3826e018da489f1a8068e6de677f6eff3cc93991a599d90f12cd1bc26cdc \ - --hash=sha256:4565102638038a01a2193c7f5d41ccbd6233fbdcb1f1b184322a06add4f51f18 \ - --hash=sha256:4b5ec9ff313819e7d8667794a3559463fa89ff45aaa73e3fd8d6273b1e0d7a7f \ - --hash=sha256:5593e6300cb1ebe0c0e546e9c9fb49e7c2627a0aa688795cd4f995a8b820d2ec \ - --hash=sha256:565300b7e13de799e5abff00d445f537e9256cf7da4dcb0d0f005fc16748a29e \ - --hash=sha256:5a08c87143a6d20177652dca1ec0dc815d88216d8fc62594a57e8bc45bf5ed49 \ - --hash=sha256:5c9a48f2bc1e04f138240ed5f9b815a9141a5de26accd0f08fa0137fcefed258 \ - --hash=sha256:68e658549fc1eb3ff92aed5147fcbb9c15d6e9cc0e623b4d0998d16522ffb4f9 \ - --hash=sha256:723949cab11d1925c15447928513a718276316cec6e0de28337cca0a62be0521 \ - --hash=sha256:77a41f66285321d20aaedaea1e87d7cd48dca6d2427bed1867ec7cba7109fc8d \ - --hash=sha256:79a29a44d76bd02f5ac0624268c6e42b3576ae472c791a8ae9c2d813ae789b59 \ - --hash=sha256:7a99d0e242d1ccd23f9ae6bea7cd502f8626efa65c156b91d84581d0356696c3 \ - --hash=sha256:7badb0be4825535e6362c19e8a41872b65409e9da46d3453a391b843a0720865 \ - --hash=sha256:81337dfbee37f58f36c0c70f9a819dce1b32cdc13d959181e10de079621f6ac6 \ - --hash=sha256:84fb50fe572a1860165f2e7a640c7cb70d43d6962366e69f643fa9a27e4a2127 \ - --hash=sha256:859fbd9d9b16af5278da23589b4afbe2ab6b0dd615df4d3229b7c4e67cd3107e \ - --hash=sha256:8ad40307f20e83f77af28ff5c6be0b86af7a8b251d1231c545508d2763157d8f \ - --hash=sha256:a518d5c761a0f2341e530e867de133dc3ed814558365b2a68ec53b89c482a43f \ - --hash=sha256:a61a31fd0ce3c2771cf4901ba6df70e774ffe32febf1024c5b43d63575cd58fe \ - --hash=sha256:ba8119daf84a12259ae4d251d36426417bafa0b34108890b4b7e2b50966bd990 \ - --hash=sha256:c17cef1900a1aba7e1487493d16b8aa0a8633116f1b2a51c6649a4000697f17b \ - --hash=sha256:c2811dfd8d46d8b5d3b39051b23e64006b2994a5143b1978b436938018792af8 \ - --hash=sha256:c6a049703a6011c8fe26ee41af7e70272145594140d82f79bb23de619c6a6525 \ - --hash=sha256:cd8a2b714c061969eee65802965167a6ada1fe708d82fe176d98dcb95ebe182a \ - --hash=sha256:d7a9654f9ca362a4be7f5e590fdfee26e2e2084da9fd3306032ec037e99f2f8e \ - --hash=sha256:e08b1577a56e7315770af280aabd8fa5f2a1fb6afd1c50a4183c06e907faf558 \ - --hash=sha256:e1f8d13bf92ee10595c40692fd4cf8e7bbe73bd9f260107e975fd5dbee1af42b \ - --hash=sha256:e676edd21a747afbe3e6b9f3fca8b962e36d146ded03b070cb0c28e2dfbe9499 \ - --hash=sha256:e7f046d8914055cad51e83ff0da1a892acb73cd58556d7c1a5d4015a3766a899 \ - --hash=sha256:e9c7c5c104737b414c8c4ec578e67d78b6c859afe25cbc0684402e721415bd7f \ - --hash=sha256:ed1dc709ac4f2f03b710457889e4e02f05de51bc8456980c241d0b28798bc7cb \ - --hash=sha256:f4f26d1eec9b2a6a8f2e0298a5515d13eb06d70730d0d9e1040bb329e12bf3fb \ - --hash=sha256:f697174d3fb474966ce50b430bbafa101a6d2f7ffb559dac4b5c59389ef72d22 \ - --hash=sha256:fbc0ee16edd260c6a4a9e365ff36d0a682c9e7ca6d7b985682659ef2e3e73826 - # via - # -c requirements-ci.txt - # spacy threadpoolctl==3.6.0 \ --hash=sha256:43a0b8fd5a2928500110039e43a5eed8480b918967083ea48dc3ab9f13c4a7fb \ --hash=sha256:8ab8b4aa3491d812b623328249fab5302a68d2d71745c8a4c719a2fcaba9f44e # via # -c requirements-ci.txt # scikit-learn -tokenizers==0.22.2 \ - --hash=sha256:143b999bdc46d10febb15cbffb4207ddd1f410e2c755857b5a0797961bbdc113 \ - --hash=sha256:1a62ba2c5faa2dd175aaeed7b15abf18d20266189fb3406c5d0550dd34dd5f37 \ - --hash=sha256:1c774b1276f71e1ef716e5486f21e76333464f47bece56bbd554485982a9e03e \ - --hash=sha256:1e418a55456beedca4621dbab65a318981467a2b188e982a23e117f115ce5001 \ - --hash=sha256:1e50f8554d504f617d9e9d6e4c2c2884a12b388a97c5c77f0bc6cf4cd032feee \ - --hash=sha256:2249487018adec45d6e3554c71d46eb39fa8ea67156c640f7513eb26f318cec7 \ - --hash=sha256:25b85325d0815e86e0bac263506dd114578953b7b53d7de09a6485e4a160a7dd \ - --hash=sha256:29c30b83d8dcd061078b05ae0cb94d3c710555fbb44861139f9f83dcca3dc3e4 \ - --hash=sha256:319f659ee992222f04e58f84cbf407cfa66a65fe3a8de44e8ad2bc53e7d99012 \ - --hash=sha256:369cc9fc8cc10cb24143873a0d95438bb8ee257bb80c71989e3ee290e8d72c67 \ - --hash=sha256:37ae80a28c1d3265bb1f22464c856bd23c02a05bb211e56d0c5301a435be6c1a \ - --hash=sha256:38337540fbbddff8e999d59970f3c6f35a82de10053206a7562f1ea02d046fa5 \ - --hash=sha256:473b83b915e547aa366d1eee11806deaf419e17be16310ac0a14077f1e28f917 \ - --hash=sha256:544dd704ae7238755d790de45ba8da072e9af3eea688f698b137915ae959281c \ - --hash=sha256:64d94e84f6660764e64e7e0b22baa72f6cd942279fdbb21d46abd70d179f0195 \ - --hash=sha256:753d47ebd4542742ef9261d9da92cd545b2cacbb48349a1225466745bb866ec4 \ - --hash=sha256:791135ee325f2336f498590eb2f11dc5c295232f288e75c99a36c5dbce63088a \ - --hash=sha256:9ce725d22864a1e965217204946f830c37876eee3b2ba6fc6255e8e903d5fcbc \ - --hash=sha256:a6bf3f88c554a2b653af81f3204491c818ae2ac6fbc09e76ef4773351292bc92 \ - --hash=sha256:bfb88f22a209ff7b40a576d5324bf8286b519d7358663db21d6246fb17eea2d5 \ - --hash=sha256:c9ea31edff2968b44a88f97d784c2f16dc0729b8b143ed004699ebca91f05c48 \ - --hash=sha256:df6c4265b289083bf710dff49bc51ef252f9d5be33a45ee2bed151114a56207b \ - --hash=sha256:e10bf9113d209be7cd046d40fbabbaf3278ff6d18eb4da4c500443185dc1896c \ - --hash=sha256:f01a9c019878532f98927d2bacb79bbb404b43d3437455522a00a30718cdedb5 - # via - # -c requirements-ci.txt - # semantica (pyproject.toml) - # fastembed - # sentence-transformers - # transformers toml==0.10.2 \ --hash=sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b \ --hash=sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f # via # -c requirements-ci.txt # semantica (pyproject.toml) -torch==2.13.0 \ - --hash=sha256:024c6cc0c1b085f2f91f20a3dc27b0471d021c31ce84b81be3afdc39f791fd9d \ - --hash=sha256:092790c696a760c729fd5722835f50b9d81fd7c8f141571f3f3cf4081a8f664c \ - --hash=sha256:0ab4b69f3ee03a62a002cfbf77b1ca5e88aceb4ea64cb4388bb28f638ddbb045 \ - --hash=sha256:1e09d6a722504957c694faceca843acde562786df1144ebcc5a74075ec7f6005 \ - --hash=sha256:2bd30b6b730d987fa386ce3898933762c5cb8cc82eb0535211d787cc3ce2dfeb \ - --hash=sha256:2fe228aba290d14b9f31b049be550dbd469c3fd3013d7a19705b30454da97027 \ - --hash=sha256:31061ff56ed8fbf26c749806905aeb749ebeb819810fd5d52508aa5afd90dddc \ - --hash=sha256:33449899ce5496c1b84b4853179d94fd102028ae1407314d9fb956bb79e70d09 \ - --hash=sha256:49b58f1e2c52440abb6f17c28f0335fe6c6d01ad1a7f55b0183b81e4b34d64e6 \ - --hash=sha256:49f1ea385c754e54919408a9bb3b5a72b0b755bbe2c916c1d6f70afbec4908a2 \ - --hash=sha256:4f8573e3ce9ebcd53fe922f01077a6085ccdfbe5f12fd215883a9d87d7a744fd \ - --hash=sha256:572df8be8ffb4599c88cbd6a0726f1f854f4da65d2e3c09f0e2c2283333cd6d4 \ - --hash=sha256:60fcdcb2f3876e21146cb4524ef06397d727ca9ad5f020818547e25075fe3cb7 \ - --hash=sha256:796633c4cdf0fe2cdced72d8f88f22e73dbcfce83132763162f6d4bff13b820b \ - --hash=sha256:94f0de129916f77b8dc2c7a8eff644cfeddfe59e39c9f55e9f6e17543410281d \ - --hash=sha256:a0d8b11f16a48d60e2015d8213aa0390744cbebb98e58b62b3514dddc656e330 \ - --hash=sha256:a3893dc2da0a972a8ca5d698c85a9f967559ac5f8ee1797b77408aa8734d073c \ - --hash=sha256:a3a9a21312872af8a26950b2c15680335a386a1f56ed03e780653d78b9607e9e \ - --hash=sha256:a7de8a313090dc5c7d7ba4bfe5c3be222528f9a4dba1acc83bddb1157360c4b8 \ - --hash=sha256:c28def70706c2f9ecc752574766e8ae4da9b810ab6676b611166761a78a9f1e1 \ - --hash=sha256:c78b7b4d04461855a764cf01bae9a462bb88bc93defcfa11235cbc8fdf3e12c4 \ - --hash=sha256:cc26eead4cf51d0b544e31e364dcf000846549c273bd148936fe9d24d29acb92 \ - --hash=sha256:d849b390e07d8d333ce8ecaf91b273c656c598379a19c9acf1318a883f6b391c \ - --hash=sha256:e76f9bcecc52b8ff711239a2f7547d5353df95878ab232f0773c1d95928b92f8 - # via - # -c requirements-ci.txt - # semantica (pyproject.toml) - # sentence-transformers tqdm==4.70.0 \ --hash=sha256:55b0b0dbd97462d06ebee91e4dac24ed4d4702be82b24f07e6c1d27e08cea220 \ --hash=sha256:7f585706bfddbdebf89daac705b2dfcc16890130727d3197ca62c732b4310953 # via # -c requirements-ci.txt # semantica (pyproject.toml) - # fastembed - # huggingface-hub - # sentence-transformers - # spacy - # transformers - # umap-learn -traitlets==5.16.1 \ - --hash=sha256:ed900c2b631aa3a112811139fa97b8d2c3bad5e989656bba4b7e52c7852c18c1 \ - --hash=sha256:f775618166caa0396c8e337099240f2bd3e5e917d203b2e6fbe21a58d3cb1f6b - # via - # -c requirements-ci.txt - # ipython - # ipywidgets - # matplotlib-inline -transformers==5.15.0 \ - --hash=sha256:bbf98f57b2ddd7c4ecbccfa2c0069017aa6fd01cc204bd50cbc0eeadcf2a13b8 \ - --hash=sha256:d7f007736f67749ae9490c4f8cb5d30b452ae2d68c8675e50ba8d63ea7feb107 - # via - # -c requirements-ci.txt - # semantica (pyproject.toml) - # sentence-transformers -triton==3.7.1 \ - --hash=sha256:10ba85fa2cca4a2fbdeb36bf1cb082f2c252bda55bf9fccd74f65ec5bc647e68 \ - --hash=sha256:2020153b08280415ec0da6607834e79166442147e78e144df06b508c75b186d2 \ - --hash=sha256:3daf64305d6cea88d3334c65ebc9bcd0c64c9564a977084366aa768d57cbcf64 \ - --hash=sha256:58c0e131da05134a2a4788ccbcc0c1105cf0f54c8e98f19e34cd465396dc15eb \ - --hash=sha256:6744957e9fd610a29680ec2346057d0c86948ed3812468670719f391e94b44a5 \ - --hash=sha256:7e40869937a68206ec70d7f25bb7ec6433cb083f9135e1f36dbd318dc449a728 \ - --hash=sha256:9497f2e696ee368862a181a90b2dcc03ca978cc4f602abd67c7d81022a6988e1 \ - --hash=sha256:c58e4c61f0c73b5dba3b5d19b4a7093c32f90dc18b2a7f121a7c16ccd31107b7 \ - --hash=sha256:cdbfc09d9ec58bc5e68321525653220de7515c199e7a8097a97c85e62b52cd0a \ - --hash=sha256:d4a0e1cd4c4a76370ed74a8432a53cea28716827d19e40ffc732233e35ceb3f6 \ - --hash=sha256:ee89fbf782ec2ad50391dd1cf26cbea4f4467154c37f4773026da8fc31c0f58e \ - --hash=sha256:fe4ea396a06171f1f1f58cbd39c70b09294398f7dd7c620939bab54ad6f934fa - # via - # -c requirements-ci.txt - # torch -typer==0.26.8 \ - --hash=sha256:3512ca79ac5c11113414b36e80281b872884477722440691c89d1112e321a49c \ - --hash=sha256:c244a6bd558886fe3f8780efb6bdd28bb9aff005a94eedebaa5cb32926fe2f7e - # via - # -c requirements-ci.txt - # spacy - # transformers - # weasel typing-extensions==4.16.0 \ --hash=sha256:481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8 \ --hash=sha256:dc983d19a509c94dba722ee6abd33940f7c05a89e243c47e907eb4db6f1a43e5 # via # -c requirements-ci.txt # anyio - # beautifulsoup4 # fastapi # grpcio - # huggingface-hub - # ipython - # librosa # pydantic # pydantic-core - # python-docx - # sentence-transformers - # soundfile # starlette - # torch # typing-inspection typing-inspection==0.4.4 \ --hash=sha256:547274fa6b0a561ccf549cc9524b999a578e737d015d8709d021f9d0d13bea47 \ @@ -3449,21 +1143,15 @@ typing-inspection==0.4.4 \ # -c requirements-ci.txt # fastapi # pydantic -umap-learn==0.5.12 \ - --hash=sha256:6aff02ecac5f2aad9f3c65ee518d7ae93e1a985ae38721fdcffceee4232c33c7 \ - --hash=sha256:f2a85d2a2adcb52b541bed9b27a23ca169b56bb1b23283abeebfb8dfb8a42fe5 - # via - # -c requirements-ci.txt - # semantica (pyproject.toml) urllib3==2.7.0 \ --hash=sha256:231e0ec3b63ceb14667c67be60f2f2c40a518cb38b03af60abc813da26505f4c \ --hash=sha256:9fb4c81ebbb1ce9531cce37674bbc6f1360472bc18ca9a553ede278ef7276897 # via # -c requirements-ci.txt # requests -uvicorn==0.52.1 \ - --hash=sha256:112ec661814189acbccd3f7b86460147cc065fc92c0821afa78918780e4354dd \ - --hash=sha256:e4403f9d93188cf9d1088e9f40e3acd12630e2df8675316704379a7fc20fff6a +uvicorn==0.52.4 \ + --hash=sha256:73acfee47a0b133c5de13d219492d62d8a31e935f4fe6e41a232451a15379f86 \ + --hash=sha256:f86e41a149d7d05a9969337e3946a9c171c06a5d42680896daaba624aeac8da1 # via # -c requirements-ci.txt # semantica (pyproject.toml) @@ -3520,14 +1208,6 @@ uvloop==0.22.1 \ # via # -c requirements-ci.txt # uvicorn -wasabi==1.1.3 \ - --hash=sha256:4bb3008f003809db0c3e28b4daf20906ea871a2bb43f9914197d540f4f2e0878 \ - --hash=sha256:f76e16e8f7e79f8c4c8be49b4024ac725713ab10cd7f19350ad18a8e3f71728c - # via - # -c requirements-ci.txt - # spacy - # thinc - # weasel watchfiles==1.2.0 \ --hash=sha256:01859b11fd9fbca670f4d5da00fbac282cfea9bd67a2125d8b2833a3b5617ea9 \ --hash=sha256:01ea8d66f0693b9b60a6541c8d10263091ca9a9060d242f3c1f3143f9aad2c98 \ @@ -3639,229 +1319,77 @@ watchfiles==1.2.0 \ # via # -c requirements-ci.txt # uvicorn -wcwidth==0.8.2 \ - --hash=sha256:91fbef97204b96a3d4d421609b80340b760cf33e26da123ff243d76b1fda8dda \ - --hash=sha256:d63947694a0539a1d51e01eda7caf800c291020e6cdd7e28ad7b14dd33ad4f85 - # via - # -c requirements-ci.txt - # prompt-toolkit -weasel==1.0.0 \ - --hash=sha256:7b129b44c90cc543b760532974ca1e4eb30dad2aa2026f57bdce66354ae610fc \ - --hash=sha256:89518acee027f49d743126c3502d35e6dd14f5768be5c37c9af47c171b6005cc - # via - # -c requirements-ci.txt - # spacy -websockets==16.1.1 \ - --hash=sha256:01fbdcbac298efe19360b94bc0039c8f746f0220ba570f327577bfee81059175 \ - --hash=sha256:024193f8551a2b0eafbdd160911012c4e6c228c28430c84433253299a9e42d6a \ - --hash=sha256:04fd29a0e2fe9414a95b00e92c67ae51bf900c50c0f8a4b2dafdad621f49ea1d \ - --hash=sha256:056ae37939ed7e9974f364f5864e76e49182622d8f9751ac1903c0d09b013985 \ - --hash=sha256:0f62863e8a00a6d33c3d6566ec0b89f23787b747ffe0c3bc71ec0e76b82c94b1 \ - --hash=sha256:0ffd3031ea8bda8d61762e84220186105ba3b748b3c8da2ae4f7816fac03e573 \ - --hash=sha256:1214e673c404684b9bf7154f5cf43b45025b1a6160fac3a9e438e9c1a97e22cb \ - --hash=sha256:125f22dbefaf1554fea66fc83851490edb284ce4f501d37ffed2752f418332d9 \ - --hash=sha256:130937b167a52af203c8d58e78d67705874e82759862e3b9671a452fec4abc87 \ - --hash=sha256:1427fb4cf0d72f66333e2cacc3ff5f575bf2d7008166ce991a4a470b21d51a22 \ - --hash=sha256:195c978b065fa40910582464f99d6b15c8b314c68e0546549a55ed83f4735328 \ - --hash=sha256:1d27fa8462ad6a1cb36206a3d0640b2333340def181fae11ed7f9adeaa5c0747 \ - --hash=sha256:1db4de4a0e95673f7545d393c49eeb0c2f18ac1ef93073218c79d5cdb2ee75ab \ - --hash=sha256:1f79c89b5eb034d1722938a891916582f8f7f503f58ca22518a63c3f2cd18499 \ - --hash=sha256:23253dd5bcae3f9aaee0a1d30967a8dbd52e5d3cff93a2e5b84df57b77d4750d \ - --hash=sha256:249116b4a76063d930a46391ad56e135c286e4562a18309029fc2c73f4ed4c62 \ - --hash=sha256:29dfa8114c4a620c69591c5973860f768eac29d3fd6904f37f34266cb219c512 \ - --hash=sha256:2a606d9c24035242a3e256e9d5b77ed9cd6bccfcb7cf993e5ca3c0f6f68fb6a7 \ - --hash=sha256:2a636ff1e7a5c4edf71ef0e79adae7f25dba93b4fcbe3dc958733477ffeb0eaf \ - --hash=sha256:2bb5d041a8307d2e18782e7ce777f6fdb1e8c2f5d09291484b18c294b789d9aa \ - --hash=sha256:2e28e602bb13da44fbe518c1781a88e3b9d4c3d48d02c9bad83e546164336f57 \ - --hash=sha256:30bbe120437b5648a77d3519b7024ea09530e0b5b18d3698c5a0ae536fe0cc2e \ - --hash=sha256:34420aaa64440ebd51ac72ca8a45ef4626429438c9b02e633ae412ed43f925d3 \ - --hash=sha256:38565aca3e01ea8734e578fb2118dade0ecb0250533f29e22b8d1a7a196cf4d0 \ - --hash=sha256:387e8e4aa5df2f90b198fa3cad3478822a89cf905b6a6d6c97dc3664689640cc \ - --hash=sha256:39f2a024af5c345ffe8fcf1ee18c049c024c94df393bb09b044a6917c77bde43 \ - --hash=sha256:3df13f73af9b3b38ab1195eb299ecb67a4330c911c97ae04043ff74085728abe \ - --hash=sha256:414e596c75f74e0994084694189d7dc9229fb278e33064d6784b73ffbba3ca31 \ - --hash=sha256:41c8e77f17294c0ac18008a7309b99b34ee72247ef10b6dff4c3f8b5ac29896b \ - --hash=sha256:42290eb6db4ccaca7012656738214f8514082fb6fa40cdeb61bb9a471b52e383 \ - --hash=sha256:42f599f4d48c7e1a3338fdaac3acd075be3b3cf02d4b274f3bf2767aedd3d217 \ - --hash=sha256:43e3a9fdd7cbf7ba6040c31fae0faf84ca1474fef777c4e37912f1540f854499 \ - --hash=sha256:443aefe96b7fdb132e2a70806cca1f2af49bb3f28e47abcd7c2e9dcf4d8fa1b8 \ - --hash=sha256:46dcaa042cd1de6c59e7d9269fa63ff7572b6df40510600b678f0826b3c7af51 \ - --hash=sha256:496af849a472b531f758dbd4d61338f5000538cb1a7b3d20d9d32a264517f509 \ - --hash=sha256:49ae99bdfcae803a885c926bf14f886196e84925395bb3f568fef5c0f0979d7d \ - --hash=sha256:4b57693728576d84ede0a77987ab16881b783d2cd9f1dc180a8fbbc3f79c4428 \ - --hash=sha256:4e3b680b1e0a27457e727a0d572fd81dffa87b6dbf8b228ab57da64f7d85aead \ - --hash=sha256:4e8d01cc3bcae7bbf8167f944aeafefed590fae5693552bba9794a9df68371cc \ - --hash=sha256:5283810d2646741a0d8da2aa733d6aefa0545809afccb2a5d105a26bc45125f1 \ - --hash=sha256:53260c8930da5771cec89439bff99c20c8cb03ddb9588b980697355a83cd4bd3 \ - --hash=sha256:536676848fc5961aca9d20389951f59169508f765637a172403dc5434d722fa0 \ - --hash=sha256:54509b8e92fee4453e152b7558ddef37ce9705a044922f2095a6105e3f80c96f \ - --hash=sha256:56cd5fc4f10a9ea8aa0804bddb7b42506cf9e136046f3b4c27de8fec9e2ecba5 \ - --hash=sha256:5bfd1ac19b1b9986a9c95a82d5e23a391ebb09e12c34d7be6094b86efcc35731 \ - --hash=sha256:5c31aa7e39ee3e8a358573257f1c0bb5c52430d1b637030dd9c8cc2c282926be \ - --hash=sha256:5e3b7d601f6f84156b08cc4a5e541c2b50ad7b36cfc302b657a12477c904a5df \ - --hash=sha256:61922544a0587a13fd3f53e4c0e5e606510c7b0d9d22c8444e5fae22a06b38cb \ - --hash=sha256:6456ff333092d509127d75a638cb411afae8ff17f092635015d1902efec8a293 \ - --hash=sha256:69159730a823dde3ea8d08783e8d47ef135a6d7e8d44eb127e32b321c9db8e3e \ - --hash=sha256:69e52d175a0a7d1e13b4b67ad41c560b7d98e8c6f6126eb0bda496c784faf8c7 \ - --hash=sha256:6aaface73b9c71974c6497366d8b9628357f6c9749e09c4ea3610176c63f2ae3 \ - --hash=sha256:6abbd3e82c731c8e531714466acd5d87b5e88ac3243465337ba71d68e23ae7e3 \ - --hash=sha256:6ff9417c0ada4d0f7d212f928303e5579bdf3ace4c802fa4afabb30995da58c3 \ - --hash=sha256:7421fad442de870a8cbf2287d1cad7e706ece0dbfeba5e911df132cbdc1cb56a \ - --hash=sha256:7883388947767080f094950b342b30d35a2a06b849cd967c422fa0db72b40ea9 \ - --hash=sha256:79eace538c6a97e96d0d03d4f9d314f9677f5ed85a8a984992ffd90b13cb8a56 \ - --hash=sha256:7b1b19636af86a3c7995d4d028dbe376f39b4bf31541146f9c123582a6c94562 \ - --hash=sha256:7dfcad78ea1492ee3a9ec765cb7f51bbc17d477107aaf6b22abf7b2558d1c5a0 \ - --hash=sha256:8087e82f842609734c9b5a1330464f8e94e346ba0e18c832c08bafa4b0d63c15 \ - --hash=sha256:820fb8450edddae3812fd58cbc08e2bf22812cb248ecb5f06dbb82119a56e869 \ - --hash=sha256:8483c2096363120eea8b07c06ae7304d520f686665fffd4811fad423930a65d7 \ - --hash=sha256:84a2cef8deffbd9ab8ee0ea546a2a6a7030c28f44e6cdd4547dbfeb489eb8999 \ - --hash=sha256:86d7f0f8bdb25d2c632b72527325e4776430fd5bc61b9118de4e2b8ddb5f5b01 \ - --hash=sha256:8fe0b50da2d84535fb4f7b4bfa951280f97ce3d558a0443b541166d609e67b57 \ - --hash=sha256:90001d893bc368e302ef168d82130b4e4fdd27b85fa094682df9b667c2d48838 \ - --hash=sha256:9246a0d063cfcbcc85f2359dd6876d681213f4790832272aa16641b4ed5d64d4 \ - --hash=sha256:92b820d345f7a3fc7b8163949ee92df910f290c3fc517b3d5301c78065adafe1 \ - --hash=sha256:952303a7318d4cbe1011400839bb2051c9f84fa0a35923267f5daba34b15d458 \ - --hash=sha256:97fd3a0e8b53efa41970ac1dff3d8cf0d2884cadeb4caaf95db7ad1526926ee3 \ - --hash=sha256:9c1c5705e314449e3308872fe084b8571ce078ee4fc55a98a769bdefe5917392 \ - --hash=sha256:9c9f23004a3d40e89c01a7955d186a6cc83418d93b749701944ce2de3e95a1f3 \ - --hash=sha256:9f63bcef7f4b02b06b35fc01c93b96c43b5e88e1e8868676caacf493d5a31f3a \ - --hash=sha256:a0eadbbf2c30f01efa58e1f110eb6fa293261f6b0b1aa38f7f48707107690af9 \ - --hash=sha256:a28fcbc9b6baf54a2e23f8655f308e4ccc6afdd7266f8fe7954f320dcda0f785 \ - --hash=sha256:a6a61aff018180c9c50b7b0da33bfd29d378af3497429c95006c589a23a11648 \ - --hash=sha256:aabe464bfd13bd25f4821faf111da6fefdc389f870265a53105580e45b0a2e49 \ - --hash=sha256:ab59169ace05dcb49a1d4118f0bde139557adf45091bd85747e36bf5de984dd1 \ - --hash=sha256:b436f6ec4fc3a6b4237c84d3f83170ed2b40bb584222f0ac47a0c8a5921980c7 \ - --hash=sha256:b6b9dadbef0cccd9f4c4ee96b08898afa73e26803bbe0f6aeb5bb12b0074206d \ - --hash=sha256:b852788aa51764e2d8e4cf5493d559326bcae5e38d16ba25ffa322b034df272a \ - --hash=sha256:bae954c382e013d5ea5b190d2830526bfa45ad121c326da0049b8c769f185db6 \ - --hash=sha256:bcce07e23e5769375158f5efdcdafa8d5cd014b93c6683865b840ed65b96f231 \ - --hash=sha256:cc97814dfb786a83b6e2dc2e79351e1b83e6d715647d6887fcabd83026417a00 \ - --hash=sha256:cd2ca96a082a36964aca83e992f72abeb61b7306c1a6cba4c7d06a7b93750cac \ - --hash=sha256:cfb70b4eb56cac4da0a83588f3ad50d46beb0690391082f3d4e2d488c70b68ea \ - --hash=sha256:d0fcf657e9f13ff4b177960ab2200237b12994232dfb6df16f1cfe1d4339f93c \ - --hash=sha256:d14bfb217eb4701e850f1525c9d29d79c44794cdf1c299ead25f39f8c78dea81 \ - --hash=sha256:d57685547e0060cc6fd90ee6a28405d6bd395e525545f13c8d7cd99c78afd79f \ - --hash=sha256:d6bec75c290fe484a8ba4cacdf838501e17c06ecfbbf31eede81a9e431bd7751 \ - --hash=sha256:d9531d9cbeac99af6f038fb1bc351403531f7d634a2c2e10e2f7c854c6ed5b68 \ - --hash=sha256:da4ca1a9d72f9030b3146b8d7022719a9f3d478f61efe6f7dd51d243f61c51b2 \ - --hash=sha256:dab9eb87869da2d6ed3af3f3adf28414baae6ec9d4df355ffc18889132f3436c \ - --hash=sha256:db234eda965dcce15df96bb9709f587cd87d4d52aaf0e80e2f34ec04c7670c57 \ - --hash=sha256:dc0fad4933f427acd5b1cec210f3ea6dce7089e1724e4b9ec6ef47c6c04d1b3b \ - --hash=sha256:dc385593a42e31cd6fb60c19f0ecb015b386603818fc2c6c274fb42bd2bb4165 \ - --hash=sha256:dcc04fedf83effaeb9cce98abc9469bb1b42ef85f03e01c8c1f4438ef7555737 \ - --hash=sha256:e047dc87ef7ca50f4d309bf775ad4a71711c58556d75d7bd0604b2317f43e94b \ - --hash=sha256:e09f753a169951eb4f28c2c774f71069304f66e7277e0f5a2892423599cfa854 \ - --hash=sha256:ed5bb271084b46530ee2ddc0410537a9961152c5ccba2fc98c5276d992ccba87 \ - --hash=sha256:f0aa4aad3b1b69ad3fd85a0fd0952ec64331c762bd77ec51cc814170873890b2 \ - --hash=sha256:f17dbe07eb3ea7f99e4df9b7e0efefe80fbf30d37a8cc4d561a0aed310bc8847 \ - --hash=sha256:f2769a0344a09e9ccf5b3cce538bc75a51b53eff3275d3896310c8552049195d \ - --hash=sha256:f55f0b01956a094c8587146d9558c91937e78789c333860ffaf35931a6e5dbc4 \ - --hash=sha256:f5d497865f05bb222cab7016c6034542e84e5f29f49c6fd3f4939cda7197b5b8 \ - --hash=sha256:f70541f3104339f59f830522d94ebadb1bf47426287381623443d8bb1cdbf33d \ - --hash=sha256:fb9a0a6dc3d1b3986cb88091b6899f0396651e0f74e2c9766ab8d6ffc3842e29 \ - --hash=sha256:fce6c48559c86d1ac3632ccb1bebc7d5442fbe79bd9bb0e40379ee54be2a4051 \ - --hash=sha256:fd46fff7eb62c24804d234f0051c7a8ea81285ad63e0337d3dcf33ca82aee58a +websockets==15.0.1 \ + --hash=sha256:0701bc3cfcb9164d04a14b149fd74be7347a530ad3bbf15ab2c678a2cd3dd9a2 \ + --hash=sha256:0a34631031a8f05657e8e90903e656959234f3a04552259458aac0b0f9ae6fd9 \ + --hash=sha256:0af68c55afbd5f07986df82831c7bff04846928ea8d1fd7f30052638788bc9b5 \ + --hash=sha256:0c9e74d766f2818bb95f84c25be4dea09841ac0f734d1966f415e4edfc4ef1c3 \ + --hash=sha256:0f3c1e2ab208db911594ae5b4f79addeb3501604a165019dd221c0bdcabe4db8 \ + --hash=sha256:0fdfe3e2a29e4db3659dbd5bbf04560cea53dd9610273917799f1cde46aa725e \ + --hash=sha256:1009ee0c7739c08a0cd59de430d6de452a55e42d6b522de7aa15e6f67db0b8e1 \ + --hash=sha256:1234d4ef35db82f5446dca8e35a7da7964d02c127b095e172e54397fb6a6c256 \ + --hash=sha256:16b6c1b3e57799b9d38427dda63edcbe4926352c47cf88588c0be4ace18dac85 \ + --hash=sha256:2034693ad3097d5355bfdacfffcbd3ef5694f9718ab7f29c29689a9eae841880 \ + --hash=sha256:21c1fa28a6a7e3cbdc171c694398b6df4744613ce9b36b1a498e816787e28123 \ + --hash=sha256:229cf1d3ca6c1804400b0a9790dc66528e08a6a1feec0d5040e8b9eb14422375 \ + --hash=sha256:27ccee0071a0e75d22cb35849b1db43f2ecd3e161041ac1ee9d2352ddf72f065 \ + --hash=sha256:363c6f671b761efcb30608d24925a382497c12c506b51661883c3e22337265ed \ + --hash=sha256:39c1fec2c11dc8d89bba6b2bf1556af381611a173ac2b511cf7231622058af41 \ + --hash=sha256:3b1ac0d3e594bf121308112697cf4b32be538fb1444468fb0a6ae4feebc83411 \ + --hash=sha256:3be571a8b5afed347da347bfcf27ba12b069d9d7f42cb8c7028b5e98bbb12597 \ + --hash=sha256:3c714d2fc58b5ca3e285461a4cc0c9a66bd0e24c5da9911e30158286c9b5be7f \ + --hash=sha256:3d00075aa65772e7ce9e990cab3ff1de702aa09be3940d1dc88d5abf1ab8a09c \ + --hash=sha256:3e90baa811a5d73f3ca0bcbf32064d663ed81318ab225ee4f427ad4e26e5aff3 \ + --hash=sha256:47819cea040f31d670cc8d324bb6435c6f133b8c7a19ec3d61634e62f8d8f9eb \ + --hash=sha256:47b099e1f4fbc95b701b6e85768e1fcdaf1630f3cbe4765fa216596f12310e2e \ + --hash=sha256:4a9fac8e469d04ce6c25bb2610dc535235bd4aa14996b4e6dbebf5e007eba5ee \ + --hash=sha256:4b826973a4a2ae47ba357e4e82fa44a463b8f168e1ca775ac64521442b19e87f \ + --hash=sha256:4c2529b320eb9e35af0fa3016c187dffb84a3ecc572bcee7c3ce302bfeba52bf \ + --hash=sha256:54479983bd5fb469c38f2f5c7e3a24f9a4e70594cd68cd1fa6b9340dadaff7cf \ + --hash=sha256:558d023b3df0bffe50a04e710bc87742de35060580a293c2a984299ed83bc4e4 \ + --hash=sha256:5756779642579d902eed757b21b0164cd6fe338506a8083eb58af5c372e39d9a \ + --hash=sha256:592f1a9fe869c778694f0aa806ba0374e97648ab57936f092fd9d87f8bc03665 \ + --hash=sha256:595b6c3969023ecf9041b2936ac3827e4623bfa3ccf007575f04c5a6aa318c22 \ + --hash=sha256:5a939de6b7b4e18ca683218320fc67ea886038265fd1ed30173f5ce3f8e85675 \ + --hash=sha256:5d54b09eba2bada6011aea5375542a157637b91029687eb4fdb2dab11059c1b4 \ + --hash=sha256:5df592cd503496351d6dc14f7cdad49f268d8e618f80dce0cd5a36b93c3fc08d \ + --hash=sha256:5f4c04ead5aed67c8a1a20491d54cdfba5884507a48dd798ecaf13c74c4489f5 \ + --hash=sha256:64dee438fed052b52e4f98f76c5790513235efaa1ef7f3f2192c392cd7c91b65 \ + --hash=sha256:66dd88c918e3287efc22409d426c8f729688d89a0c587c88971a0faa2c2f3792 \ + --hash=sha256:678999709e68425ae2593acf2e3ebcbcf2e69885a5ee78f9eb80e6e371f1bf57 \ + --hash=sha256:67f2b6de947f8c757db2db9c71527933ad0019737ec374a8a6be9a956786aaf9 \ + --hash=sha256:693f0192126df6c2327cce3baa7c06f2a117575e32ab2308f7f8216c29d9e2e3 \ + --hash=sha256:746ee8dba912cd6fc889a8147168991d50ed70447bf18bcda7039f7d2e3d9151 \ + --hash=sha256:756c56e867a90fb00177d530dca4b097dd753cde348448a1012ed6c5131f8b7d \ + --hash=sha256:76d1f20b1c7a2fa82367e04982e708723ba0e7b8d43aa643d3dcd404d74f1475 \ + --hash=sha256:7f493881579c90fc262d9cdbaa05a6b54b3811c2f300766748db79f098db9940 \ + --hash=sha256:823c248b690b2fd9303ba00c4f66cd5e2d8c3ba4aa968b2779be9532a4dad431 \ + --hash=sha256:82544de02076bafba038ce055ee6412d68da13ab47f0c60cab827346de828dee \ + --hash=sha256:8dd8327c795b3e3f219760fa603dcae1dcc148172290a8ab15158cf85a953413 \ + --hash=sha256:8fdc51055e6ff4adeb88d58a11042ec9a5eae317a0a53d12c062c8a8865909e8 \ + --hash=sha256:a625e06551975f4b7ea7102bc43895b90742746797e2e14b70ed61c43a90f09b \ + --hash=sha256:abdc0c6c8c648b4805c5eacd131910d2a7f6455dfd3becab248ef108e89ab16a \ + --hash=sha256:ac017dd64572e5c3bd01939121e4d16cf30e5d7e110a119399cf3133b63ad054 \ + --hash=sha256:ac1e5c9054fe23226fb11e05a6e630837f074174c4c2f0fe442996112a6de4fb \ + --hash=sha256:ac60e3b188ec7574cb761b08d50fcedf9d77f1530352db4eef1707fe9dee7205 \ + --hash=sha256:b359ed09954d7c18bbc1680f380c7301f92c60bf924171629c5db97febb12f04 \ + --hash=sha256:b7643a03db5c95c799b89b31c036d5f27eeb4d259c798e878d6937d71832b1e4 \ + --hash=sha256:ba9e56e8ceeeedb2e080147ba85ffcd5cd0711b89576b83784d8605a7df455fa \ + --hash=sha256:c338ffa0520bdb12fbc527265235639fb76e7bc7faafbb93f6ba80d9c06578a9 \ + --hash=sha256:cad21560da69f4ce7658ca2cb83138fb4cf695a2ba3e475e0559e05991aa8122 \ + --hash=sha256:d08eb4c2b7d6c41da6ca0600c077e93f5adcfd979cd777d747e9ee624556da4b \ + --hash=sha256:d50fd1ee42388dcfb2b3676132c78116490976f1300da28eb629272d5d93e905 \ + --hash=sha256:d591f8de75824cbb7acad4e05d2d710484f15f29d4a915092675ad3456f11770 \ + --hash=sha256:d5f6b181bb38171a8ad1d6aa58a67a6aa9d4b38d0f8c5f496b9e42561dfc62fe \ + --hash=sha256:d63efaa0cd96cf0c5fe4d581521d9fa87744540d4bc999ae6e08595a1014b45b \ + --hash=sha256:d99e5546bf73dbad5bf3547174cd6cb8ba7273062a23808ffea025ecb1cf8562 \ + --hash=sha256:e09473f095a819042ecb2ab9465aee615bd9c2028e4ef7d933600a8401c79561 \ + --hash=sha256:e8b56bdcdb4505c8078cb6c7157d9811a85790f2f2b3632c7d1462ab5783d215 \ + --hash=sha256:ee443ef070bb3b6ed74514f5efaa37a252af57c90eb33b956d35c8e9c10a1931 \ + --hash=sha256:f29d80eb9a9263b8d109135351caf568cc3f80b9928bccde535c235de55c22d9 \ + --hash=sha256:f7a866fbc1e97b5c617ee4116daaa09b722101d4a3c170c787450ba409f9736f \ + --hash=sha256:fcd5cf9e305d7b8338754470cf69cf81f420459dbae8a3b40cee57417f4614a7 # via # -c requirements-ci.txt # semantica (pyproject.toml) # uvicorn -widgetsnbextension==4.0.15 \ - --hash=sha256:8156704e4346a571d9ce73b84bee86a29906c9abfd7223b7228a28899ccf3366 \ - --hash=sha256:de8610639996f1567952d763a5a41af8af37f2575a41f9852a38f947eb82a3b9 - # via - # -c requirements-ci.txt - # ipywidgets -wrapt==2.3.0 \ - --hash=sha256:0a45ffae742ce91a16e11cb6c7cd71e7f9994f3cbd283b962ab093f5c6dcf525 \ - --hash=sha256:0bb2797048db0956348cb3058c33bc4184614f13231389cfbccc16a5d32780a7 \ - --hash=sha256:0d3fb71e65b001adfc42684522eeccd9c21d8ba679945abc993439567b66e59f \ - --hash=sha256:0db083387d6e75ec0be8173ecbf0e811cf60bae1cc75a815feb104167ea10d4d \ - --hash=sha256:10461884b3014fbfc8eb7d09a93c5f246363e6711d9d881f95eb8c27fdef049f \ - --hash=sha256:1236fa25173ca964c97422470482e9011b9e3c7ed0d75798b40b3da3b0e0e760 \ - --hash=sha256:141ed6211286a9660d8d6702de598b43f0934b4f0eda16393f100a80f501d945 \ - --hash=sha256:1598becd30f8f2777d18564064eb4f4dbe1ab0e05a8f09786d0ef505ac782bf3 \ - --hash=sha256:195b1842b4122fb54e3cd3dd5b2b4aa49302a5a61da901df0481f5c97aedde84 \ - --hash=sha256:1d6159c9b2fefec02314e1332dbbbfaf960e369dfd26bcf7f8b258b5732065b3 \ - --hash=sha256:22cc5c0a717bd4da87018ae0bffd4c19c6fb679d3ff357216ba566ab26c76cab \ - --hash=sha256:242b60c21e30866e6a2fa606c612b47c553fa60c0eaeeeb7797fb842ac0ce609 \ - --hash=sha256:24da48596326ef8e448cfa837b454f638713d3531262375f00e5a9681682fc07 \ - --hash=sha256:261f53870cd4fb2bf38f9f972c56c728fd224cb7c65721307de59d9e7e6741ae \ - --hash=sha256:2935d5454b3f179a29b12cf390ee47246740ba2c3a7545b1b46ba31a5f2a4a0b \ - --hash=sha256:2e49885a62ec4ee854d1b9e6371fda6afd219917225752abf729a3f36d4df9a5 \ - --hash=sha256:379f670f45b7bb8993edd9f6fc36c6cc65edb81cffa0b504be34acb0303fff0a \ - --hash=sha256:3873c3c5ca9f4ef91f693602eca19d1f1e7c410338df82a4ff11d826b5896a8f \ - --hash=sha256:392158c9a7f2ab1b8699418bfc0fe6f83548788c418b27d7bf2019ad3405cebb \ - --hash=sha256:39febbee6d77301d31da6996b152ce52452da7c7ef72aba10c2fa976dff9c295 \ - --hash=sha256:3d1c2c1b808600d2ea808e6360910a60ed5f409a4011655e10f9164ba0a414a6 \ - --hash=sha256:3da470536bf9645143323dd41b32db55c6f4304ad382094c1a1da8a92061e10d \ - --hash=sha256:418f54bb09d1762db02c7009b4051149893af3153a87f92d70356703c11eea02 \ - --hash=sha256:42869085687f0aefd57c0f636c3f9354f8ffb321a8ba9cb52d19beb796e561c5 \ - --hash=sha256:45c9279b373d15649dfa2c2077cb3408ea1a6d3125afbdab9d6b809a66f68e14 \ - --hash=sha256:4fa0df3bff4e7ce45759f33fd39335fe2f60477bb9ecf7b8aa41e7d07ee36a23 \ - --hash=sha256:50f416b74d092bb9f41b424e90dd457f365f7ba4b11de62a23679769a21bd85c \ - --hash=sha256:51a7a4181c1295774812271fbcd7c909df372bc25579d4ed9eb875caaf0ae86f \ - --hash=sha256:54ca1d5573f69b5fe1d74f1f65799c68015e82f685efec9fd8cfa40a094c44d0 \ - --hash=sha256:5ab559e1b2551d23d54db2a0001c6d73bad022a254639561c5f6c382a9d6c2fe \ - --hash=sha256:5ba1e5e08ddc46130e9682b2c249f2d1dd39bda9106ed4bd401b7519f18f41bd \ - --hash=sha256:5d221a6e6ddd302b8397433184e96b59f259f50024b854db1c411a881586b6b8 \ - --hash=sha256:6208f302f110295d64b22a7ac96500c791bf492dce4366e622e4912b077c9687 \ - --hash=sha256:626b69db2021aa01671ec7bbc9740e558522bd44c18cf2ce69bf3d666a014109 \ - --hash=sha256:628f3ba8ec793a5b10a6cd8c6c6b7b55eb552abd1f3bd301336acb74c7a82dfe \ - --hash=sha256:629d73378082c00a8173031f9fb30a3ac6abbc894a5bfdfae71fabc60642d501 \ - --hash=sha256:646d20d413ffcd1b0a2f700076e2d0252d872dcb7754860a73e45a59ea883614 \ - --hash=sha256:67bfe2485f50368c3fcd2275fc1fd100e350d601e0058921a7c82678a465aeab \ - --hash=sha256:681a2d0eefd721998f90642762b8e75c2159ec531b20ad5e437245ea7b06a107 \ - --hash=sha256:69e477046f2237ef0bc6547544ee73008dc764ca26eff44f09e976d221b34d5d \ - --hash=sha256:6db604ef0c67bdb2042ecdfd7b7f037cf09733557ca42360d1018285634f7b98 \ - --hash=sha256:729126e667da34d251b8ebf8a45ef0c5ddadc21542b3d6e1abf4259ece6508df \ - --hash=sha256:73d0b10b64620a2cf4bc3d31775c4d9527e309a5549e4379e3bf71e8d2dc193e \ - --hash=sha256:7ebb274aba688b043429eb1500ff8a76ce0cb8ac0812ca3e301f06247b8722b3 \ - --hash=sha256:8159ec0b0cb7608175eb150de94c19e34f4d47ac655f5ca9baf45df6b688ffd3 \ - --hash=sha256:816877aa749253149f9ecfd2635d4d948ecfa338e1a0311d187b1acb1bb8a3eb \ - --hash=sha256:85de890ff968196e92dd1ae73a9fb8970495e7650a457b1c9ef0ac3dd550bce2 \ - --hash=sha256:8f8a1c6472675956cece9a8f403f43c3594f1681319eed2dd56f60877397c636 \ - --hash=sha256:9045917809c63fdf7abe3a2ceaed3d670b8ee4500ddd9291192d30aeb34467c5 \ - --hash=sha256:932dced0a7b2950ed58a3325536a1dcb7b58e7330af54e8552d2e566b5328b99 \ - --hash=sha256:93513bec052c6cd987f9f580c3df068c8bc4ebae6543736be3ca7ec5959cafcd \ - --hash=sha256:9790ea25190a4e0fe4cdf4eeb868e9d75f8a024a70a5b6bf9c348a3a2b72e731 \ - --hash=sha256:9f5d2aec29dfc76c37e23897dee92766a3fd4f3bff3ae7fc9c6b4bf37d8c1360 \ - --hash=sha256:a65e8db2b4e90c2e7ade931086351c98ef420bf7a94ee08c95ac8a3cbbc43579 \ - --hash=sha256:a6b5984cd65dd639546f0eb4b8eacf1c31cb2fe9fb5c27bffe240987cdb2cf84 \ - --hash=sha256:a6e19531ae33c508cea7d84a7edfda01fa86e51b8d1a93a77712c55e6e469152 \ - --hash=sha256:abc71504669d126d91f89fc0e388c6295d8fbd2439be884f175133fda8aa403c \ - --hash=sha256:ac870cc97b73bb00ac353329e9559a4bebc47c4c86792ed9b23b58c15b6ad838 \ - --hash=sha256:ad71df7a04dd3497e9302e81f4a7c91bd401ea0e15a9df9029527900f94bee43 \ - --hash=sha256:b1e5aa486e269b00ed35e64771c7d0ab8096cfd2643405ca8cd60ebedc099a51 \ - --hash=sha256:b4fc96b159af0a3e0faa72475a69d66292bea72a5bed1e1aca1bffbddc3cb2b0 \ - --hash=sha256:b767a9566f165dd14decf8f4194c6bb0ce3a8420cec213824e05a99400c9260a \ - --hash=sha256:bff9a671bc00709cab5a7f745c592b5671873449db0ee2a569af994f16b29a4d \ - --hash=sha256:c3b476ae63b4a3b4da681aafcb25ff3542d289fbda8b5da7caf76aaffafafdbb \ - --hash=sha256:c4bded758ad6f03b965830944a2f0bc5b2eb3767fe5a7310134315d1a6610e98 \ - --hash=sha256:c8388ba7faf5dbf9ee106bb70d66f257629b1bd98091123e19e8a4553a319199 \ - --hash=sha256:c8858d8ff9822a081e3cc49ae1b3b22f0f789c14001cdac8f94564010d9c9d66 \ - --hash=sha256:c88abcf53daef80e01a75c7530e727fa6e2c1888fe83e3dcdba4c96216a1f5c7 \ - --hash=sha256:cc2cea812e5cb179a796b766747e7d3b21088760d8deb95676d482b8c8e6fa7d \ - --hash=sha256:cd3a2edf0427013736b8127955cec62608c56e53ea47e82812ea32059cda407f \ - --hash=sha256:cdc021cb0b62471d6aac7f2bd92f3b4658073775f9ee7fcd325c511129e7bcc8 \ - --hash=sha256:ce9f398f868d2b3b27aa2ea4de79645ef9077aeeac8dfc2814b0d542c6a2b87f \ - --hash=sha256:d0077f3d65541925fa83002f967b22ad6550d24813ac64cb905f717194128d9c \ - --hash=sha256:d0f7284f88f4833705132d06d3b425a43095c2cbd07c58166aac3ab646ba12a4 \ - --hash=sha256:d2cc64539da63e39ffb9c7ede849b6e8ddaaf7b3876b5cfb04efd85a5f3f4eb6 \ - --hash=sha256:d8c7ed08477429752b8c44991f40ad7838b18332a160698740a6bfbc10d998a2 \ - --hash=sha256:df4ce31150bcd5d9f36f816aac3010ab4f4bf8672ac1d3b0ac7d539ec61c7c02 \ - --hash=sha256:e045ff75d7d94900fc32896ed93c45ce2d2cac28c9dead582ff9a5a49d446e35 \ - --hash=sha256:e2e692bc0d63f881cf7006730a56bd4e0c2fab5dc318466942805d692b166276 \ - --hash=sha256:e31734c5077f29f892b2565eee5106d610278151ad49fc6a9d69a647cd5730e2 \ - --hash=sha256:e3b9eaa742ae7a0aaaaad4ca4b69469d757af2d6e6663ef1dadc47adec0aeb41 \ - --hash=sha256:e3f3d7ec0a51fbfe00d3aef047641ff2c58b25565b4717fc1f90e050be01cba8 \ - --hash=sha256:e5301c35cf75655eb33498f2bd6ae8703ca19940e3167dc9cdf740c712a39c60 \ - --hash=sha256:ea52a0d0f08c584943d5764be0e84efa912c8da23c23e1e285ff2f5641c18fcc \ - --hash=sha256:ed635a9ca4f3a5a2b900c10c69e823373bc00ebc114b459383596d3487da3570 \ - --hash=sha256:fb8e2e6704a1e0b1b989546c69e2688371ef4a07fa5f61bde3eb6211186f5ac1 \ - --hash=sha256:fc648a335d7e01adb3640b25f02fd0ea05886cf04d0af7f4ee902bc7b5e466e8 \ - --hash=sha256:fc82c2ccc8e234c844f5303d9f2984b346dcdd53e94823ce8420d2c75b4b9023 \ - --hash=sha256:fd1f2f557dd3491fe75905e578f4db967393d40d1a8f468edc4d40ac7f2d5944 \ - --hash=sha256:fd85b0aa88efdb189d6ae2f35f4526943a8f091c38599c9c31478241c819e6a1 - # via - # -c requirements-ci.txt - # smart-open diff --git a/.github/requirements/explorer-extra-py313.txt b/.github/requirements/explorer-extra-py313.txt index f3df95ce..d2e01c72 100644 --- a/.github/requirements/explorer-extra-py313.txt +++ b/.github/requirements/explorer-extra-py313.txt @@ -6,7 +6,6 @@ annotated-doc==0.0.5 \ # via # -c requirements-ci.txt # fastapi - # typer annotated-types==0.8.0 \ --hash=sha256:13b2beaad985e05e2d6407ee4c4f35590b11f8d693a258a561055cac8f64cab7 \ --hash=sha256:f072f4d804ea359e4eaf198b1af7a8b0943881a87f31bb764f8bf219bb9419e0 @@ -21,125 +20,6 @@ anyio==4.14.2 \ # httpx # starlette # watchfiles -asttokens==3.0.2 \ - --hash=sha256:3ecdbd8f2cc195f53ccada3a613538bb5f9ef6f6869129f13e03c30a677b8fe2 \ - --hash=sha256:9da13157f5b28becde0bd374fc677dcd3c290614264eff096f167c469cd9f933 - # via - # -c requirements-ci.txt - # stack-data -audioop-lts==0.2.2 \ - --hash=sha256:0337d658f9b81f4cd0fdb1f47635070cc084871a3d4646d9de74fdf4e7c3d24a \ - --hash=sha256:03f061a1915538fd96272bac9551841859dbb2e3bf73ebe4a23ef043766f5449 \ - --hash=sha256:068aa17a38b4e0e7de771c62c60bbca2455924b67a8814f3b0dee92b5820c0b3 \ - --hash=sha256:088327f00488cdeed296edd9215ca159f3a5a5034741465789cad403fcf4bec0 \ - --hash=sha256:0d9385e96f9f6da847f4d571ce3cb15b5091140edf3db97276872647ce37efd7 \ - --hash=sha256:106753a83a25ee4d6f473f2be6b0966fc1c9af7e0017192f5531a3e7463dce58 \ - --hash=sha256:143fad0311e8209ece30a8dbddab3b65ab419cbe8c0dde6e8828da25999be911 \ - --hash=sha256:15ab25dd3e620790f40e9ead897f91e79c0d3ce65fe193c8ed6c26cffdd24be7 \ - --hash=sha256:167d3b62586faef8b6b2275c3218796b12621a60e43f7e9d5845d627b9c9b80e \ - --hash=sha256:2b267b70747d82125f1a021506565bdc5609a2b24bcb4773c16d79d2bb260bbd \ - --hash=sha256:3bcddaaf6cc5935a300a8387c99f7a7fbbe212a11568ec6cf6e4bc458c048636 \ - --hash=sha256:3fc38008969796f0f689f1453722a0f463da1b8a6fbee11987830bfbb664f623 \ - --hash=sha256:47eba38322370347b1c47024defbd36374a211e8dd5b0dcbce7b34fdb6f8847b \ - --hash=sha256:48159d96962674eccdca9a3df280e864e8ac75e40a577cc97c5c42667ffabfc5 \ - --hash=sha256:49ee1a41738a23e98d98b937a0638357a2477bc99e61b0f768a8f654f45d9b7a \ - --hash=sha256:4a53aa7c16a60a6857e6b0b165261436396ef7293f8b5c9c828a3a203147ed4a \ - --hash=sha256:4b4cd51a57b698b2d06cb9993b7ac8dfe89a3b2878e96bc7948e9f19ff51dba6 \ - --hash=sha256:51c916108c56aa6e426ce611946f901badac950ee2ddaf302b7ed35d9958970d \ - --hash=sha256:550c114a8df0aafe9a05442a1162dfc8fec37e9af1d625ae6060fed6e756f303 \ - --hash=sha256:58cf54380c3884fb49fdd37dfb7a772632b6701d28edd3e2904743c5e1773602 \ - --hash=sha256:5b00be98ccd0fc123dcfad31d50030d25fcf31488cde9e61692029cd7394733b \ - --hash=sha256:5f93a5db13927a37d2d09637ccca4b2b6b48c19cd9eda7b17a2e9f77edee6a6f \ - --hash=sha256:64d0c62d88e67b98a1a5e71987b7aa7b5bcffc7dcee65b635823dbdd0a8dbbd0 \ - --hash=sha256:73f80bf4cd5d2ca7814da30a120de1f9408ee0619cc75da87d0641273d202a09 \ - --hash=sha256:752d76472d9804ac60f0078c79cdae8b956f293177acd2316cd1e15149aee132 \ - --hash=sha256:83c381767e2cc10e93e40281a04852facc4cd9334550e0f392f72d1c0a9c5753 \ - --hash=sha256:8fefe5868cd082db1186f2837d64cfbfa78b548ea0d0543e9b28935ccce81ce9 \ - --hash=sha256:9191d68659eda01e448188f60364c7763a7ca6653ed3f87ebb165822153a8547 \ - --hash=sha256:96f19de485a2925314f5020e85911fb447ff5fbef56e8c7c6927851b95533a1c \ - --hash=sha256:9a13dc409f2564de15dd68be65b462ba0dde01b19663720c68c1140c782d1d75 \ - --hash=sha256:a2c2a947fae7d1062ef08c4e369e0ba2086049a5e598fda41122535557012e9e \ - --hash=sha256:a2d4f1513d63c795e82948e1305f31a6d530626e5f9f2605408b300ae6095093 \ - --hash=sha256:a5bf613e96f49712073de86f20dbdd4014ca18efd4d34ed18c75bd808337851b \ - --hash=sha256:a6d2e0f9f7a69403e388894d4ca5ada5c47230716a03f2847cfc7bd1ecb589d6 \ - --hash=sha256:b492c3b040153e68b9fdaff5913305aaaba5bb433d8a7f73d5cf6a64ed3cc1dd \ - --hash=sha256:ba7c3a7e5f23e215cb271516197030c32aef2e754252c4c70a50aaff7031a2c8 \ - --hash=sha256:c0022283e9556e0f3643b7c3c03f05063ca72b3063291834cca43234f20c60bb \ - --hash=sha256:c174e322bb5783c099aaf87faeb240c8d210686b04bd61dfd05a8e5a83d88969 \ - --hash=sha256:c9c8e68d8b4a56fda8c025e538e639f8c5953f5073886b596c93ec9b620055e7 \ - --hash=sha256:cfcac6aa6f42397471e4943e0feb2244549db5c5d01efcd02725b96af417f3fe \ - --hash=sha256:d5e73fa573e273e4f2e5ff96f9043858a5e9311e94ffefd88a3186a910c70917 \ - --hash=sha256:def246fe9e180626731b26e89816e79aae2276f825420a07b4a647abaa84becc \ - --hash=sha256:dfbbc74ec68a0fd08cfec1f4b5e8cca3d3cd7de5501b01c4b5d209995033cde9 \ - --hash=sha256:e160bf9df356d841bb6c180eeeea1834085464626dc1b68fa4e1d59070affdc3 \ - --hash=sha256:e541c3ef484852ef36545f66209444c48b28661e864ccadb29daddb6a4b8e5f5 \ - --hash=sha256:f9b0b8a03ef474f56d1a842af1a2e01398b8f7654009823c6d9e0ecff4d5cfbf \ - --hash=sha256:f9ee9b52f5f857fbaf9d605a360884f034c92c1c23021fb90b2e39b8e64bede6 \ - --hash=sha256:fbdd522624141e40948ab3e8cdae6e04c748d78710e9f0f8d4dae2750831de19 \ - --hash=sha256:fd3d4602dc64914d462924a08c1a9816435a2155d74f325853c1f1ac3b2d9800 - # via - # standard-aifc - # standard-sunau -audioread==3.1.0 \ - --hash=sha256:1c4ab2f2972764c896a8ac61ac53e261c8d29f0c6ccd652f84e18f08a4cab190 \ - --hash=sha256:b30d1df6c5d3de5dcef0fb0e256f6ea17bdcf5f979408df0297d8a408e2971b4 - # via - # -c requirements-ci.txt - # librosa -beautifulsoup4==4.15.0 \ - --hash=sha256:288e3ca7d54b06f2ac191970bc275c1939cb46d450b255bf6718b04aa37ab4f7 \ - --hash=sha256:d6f88de62e1d4e38ecb1077eb9724cd0eff29d2a08ca16a401e9b9e93f117cf9 - # via - # -c requirements-ci.txt - # semantica (pyproject.toml) -blis==1.3.3 \ - --hash=sha256:034d4560ff3cc43e8aa37e188451b0440e3261d989bb8a42ceee865607715ecd \ - --hash=sha256:1e647341f958421a86b028a2efe16ce19c67dba2a05f79e8f7e80b1ff45328aa \ - --hash=sha256:1ef6d6e2b599a3a2788eb6d9b443533961265aa4ec49d574ed4bb846e548dcdb \ - --hash=sha256:27f82b8633030f8d095d2b412dffa7eb6dbc8ee43813139909a20012e54422ea \ - --hash=sha256:2a1c74e100665f8e918ebdbae2794576adf1f691680b5cdb8b29578432f623ef \ - --hash=sha256:30b8a5b90cb6cb81d1ada9ae05aa55fb8e70d9a0ae9db40d2401bb9c1c8f14c4 \ - --hash=sha256:3f6c595185176ce021316263e1a1d636a3425b6c48366c1fd712d08d0b71849a \ - --hash=sha256:3f966ca74f89f8a33e568b9a1d71992fc9a0d29a423e047f0a212643e21b5458 \ - --hash=sha256:45866a9027d43b93e8b59980a23c5d7358b6536fc04606286e39fdcfce1101c2 \ - --hash=sha256:6297e7616c158b305c9a8a4e47ca5fc9b0785194dd96c903b1a1591a7ca21ddf \ - --hash=sha256:62fb8c731347b0f98f5f81d19d339049e61489798738467d156c66cc329b0754 \ - --hash=sha256:631836d4f335e62c30aa50a1aa0170773265c73654d296361f95180006e88c04 \ - --hash=sha256:650f1d2b28e3c875927c63deebda463a6f9d237dff30e445bfe2127718c1a344 \ - --hash=sha256:66e6249564f1db22e8af1e0513ff64134041fa7e03c8dd73df74db3f4d8415a7 \ - --hash=sha256:6f165930e8d3a85c606d2003211497e28d528c7416fbfeafb6b15600963f7c9b \ - --hash=sha256:7260da065958b4e5475f62f44895ef9d673b0f47dcf61b672b22b7dae1a18505 \ - --hash=sha256:7a0fc4b237a3a453bdc3c7ab48d91439fcd2d013b665c46948d9eaf9c3e45a97 \ - --hash=sha256:7e88181e9dd8430029ebaf22d41bf79e756e8c95363e9471717102c66beb4a6d \ - --hash=sha256:8177879fd3590b5eecdd377f9deafb5dc8af6d684f065bd01553302fb3fcf9a7 \ - --hash=sha256:878d4d96d8f2c7a2459024f013f2e4e5f46d708b23437dae970d998e7bff14a0 \ - --hash=sha256:8c888438ae99c500422d50698e3028b65caa8ebb44e24204d87fda2df64058f7 \ - --hash=sha256:9b0d42420ddd543eec51ccb99d38364a0c0833b6895eced37127822de6ecacff \ - --hash=sha256:9de26fbd72bac900c273b76d46f0b45b77a28eace2e01f6ac6c2239531a413bb \ - --hash=sha256:9e5fdf4211b1972400f8ff6dafe87cb689c5d84f046b4a76b207c0bd2270faaf \ - --hash=sha256:c3e33cfbf22a418373766816343fcfcd0556012aa3ffdf562c29cddec448a415 \ - --hash=sha256:c4ae70629cf302035d268858a10ca4eb6242a01b2dc8d64422f8e6dcb8a8ee74 \ - --hash=sha256:d0114cf2d8f19e0ed210f9ae92594cd0a12efa1bbbce444028b0fc365bbbb8af \ - --hash=sha256:d563160f874abb78a57e346f07312c5323f7ad67b6370052b6b17087ef234a8e \ - --hash=sha256:d734b19fba0be7944f272dfa7b443b37c61f9476d9ab054a9ac53555ceadd2e0 \ - --hash=sha256:e10c8d3e892b1dbdff365b9d00e08291876fc336915bf1a5e9f188ed087e1a91 \ - --hash=sha256:e5a662c48cd4aad5dae1a950345df23957524f071315837a4c6feb7d3b288990 \ - --hash=sha256:e9327a6ca67de8ae76fe071e8584cc7f3b2e8bfadece4961d40f2826e1cda2df \ - --hash=sha256:e9f5c53b277f6ac5b3ca30bc12ebab7ea16c8f8c36b14428abb56924213dc127 \ - --hash=sha256:f0628a030d44aa71cac5973e40c9e95ec767abaaf2fd366a094b9398885f82f2 \ - --hash=sha256:f20f7ad69aaffd1ce14fe77de557b6df9b61e0c9e582f75a843715d836b5c8af \ - --hash=sha256:f36c0ca84a05ee5d3dbaa38056c4423c1fc29948b17a7923dd2fed8967375d74 - # via - # -c requirements-ci.txt - # thinc -catalogue==2.0.10 \ - --hash=sha256:4f56daa940913d3f09d589c191c74e5a6d51762b3a9e37dd53b7437afd6cda15 \ - --hash=sha256:58c2de0020aa90f4a2da7dfad161bf7b3b054c86a5f09fcedc0b2b740c109a9f - # via - # -c requirements-ci.txt - # spacy - # srsly - # thinc certifi==2026.7.22 \ --hash=sha256:62f22742b58a1a33014a2b6b706588a8d7e2a88ae7bd1a6ebe8c992928483775 \ --hash=sha256:741e2c3b351ddf169a738da9f2c048608ff7f2c5cc02f1ebc6b118bb090d5d55 @@ -148,110 +28,6 @@ certifi==2026.7.22 \ # httpcore # httpx # requests -cffi==2.1.1 \ - --hash=sha256:046bfc24911b37851ee1b51aab8bffe713d89c68c6a057b09484ce9fd5f69b4e \ - --hash=sha256:06c72bb76605a4b0cd0aad6930b69d4baf7dd5d806cfc409b824191099700e66 \ - --hash=sha256:0beceaabe56af686895136a2de78db54ecd8e4046b236b8fd6d6cb61389e9bf2 \ - --hash=sha256:154852545011f779917b11c78db2358d095da62a9a172b78ad0a583ee5adc0d0 \ - --hash=sha256:194cffa889098ced9976c3fc6340305e43f6303657d298da55366907c05c22d6 \ - --hash=sha256:19ee6127ee34de7d83ce3d371ebc5ed91addbdcc39f9ab15ce4eb35a4e534971 \ - --hash=sha256:1a18a57b58cfb21fc28d72e876acf10eaed67a1ed96226f92af4df681d571c4c \ - --hash=sha256:1aa5645c30469b09530c4ebca77ebf8f17618293c58f8549cb1a543a50236e7d \ - --hash=sha256:1dea0e4d7d4f11f619fe8c1d76caf49e24405b4b5743c0e3be16a500ecd930c9 \ - --hash=sha256:208f941bb9d18e768138677f0a6d2ce01f590df56043dda1df1535ac57c88517 \ - --hash=sha256:210019b6c7cf07f081b4c54635c8cf744377001350e29cc0f81c4377b4797735 \ - --hash=sha256:246fa40ce8645a614ff682e0b70f37134e460eaf93a775e0cbe3cca585a67a80 \ - --hash=sha256:25792eac27877609e7bb06d42ff88278a6624fff2ba9bbb523c09616b117e80f \ - --hash=sha256:27350daa11d4f10c540e6e89dada4c54feb7256ad03e9a4dc075ebad7ba360d1 \ - --hash=sha256:28907ab9bfb6aa13184cfc17c6b8e1023c5ab6fd7076d8c20a35e59fe04f8f29 \ - --hash=sha256:2ae64be792b8966f2c69538199728b290e34726562896df1e5dc8ffd8d8188e8 \ - --hash=sha256:31348097ff5bbe827ccc41795d4dd099d9f0625e7def00ee653c137a490c2a6c \ - --hash=sha256:3143d81e29e1e20a9ce10901ec369012947876596f75a222235965f2b7ae832e \ - --hash=sha256:3222ba5d678f80a030e6afbcc33dc1ae5cb45facabb61cee2c7016b8432fde48 \ - --hash=sha256:3311ed60d36f83378794e1009ac6258bafbf81f7888b4caa7b35a521e3f95813 \ - --hash=sha256:334644fbac4eff73d985a17a91226df55d0f394160c4cfb880e084c8f7161cac \ - --hash=sha256:34e261f78cb6ceaaa36f42f2613f4380d94d9c759a9c73c769ee6e0247364632 \ - --hash=sha256:363e05fa78e15116c3c32c210ee36884fd6b9afa6d440e47112c3bd511d64cb6 \ - --hash=sha256:398aff33cee2767e3e781d2554c54bd0dff386bb437581e0d8011fde1a942ec1 \ - --hash=sha256:3d22a20b1fb1632cc72c22f95f7b0d2961c3e1c235f245ba4c606c4771035659 \ - --hash=sha256:42a494cee34437f05546455144f2b5d9ac09b1face62bcfce597d2e521066688 \ - --hash=sha256:42e2f76b9455f5a9a844f770bf3e200ed3da0e15f5df3db9c31fe80b04b3d004 \ - --hash=sha256:42f6930c31dc7f50732c9ae793c2786c7b6b044195967bbdde40bb9be81c4cc0 \ - --hash=sha256:456a61fa52d579ebf9df2e9552ead5129855dbaff6c1e5a9b1bc408809bdc062 \ - --hash=sha256:471cee653ae88de62096552e6d24ccb4a5adb8c8c9f10b5054d0122c15bf2779 \ - --hash=sha256:49cbc70e6542d4ccccb936558d1064a8012541e78f821f955cff24e357776c94 \ - --hash=sha256:4a7c934f7360e8cd64fe9efadcbd10c7c6364f531e432b9a4bf5ccbc9e0e8b50 \ - --hash=sha256:4be96343e422f2dfcd12ab5c9f5aebe03f82f737c6bffeca6830b3875cb44aab \ - --hash=sha256:4f42141fc14250de6dde5ee7ea4432be017252d91f19c5ad043c084cea629cac \ - --hash=sha256:507a24c282e0f42f8ed737cf048572cbf580468da5555764a8331735e9c736b6 \ - --hash=sha256:51b31d1c98274844cfd7838ce00bfc27c7423a4dc00fc0772fc3331c2cc90676 \ - --hash=sha256:58acb8ab8e295e6c5ea12f888cbb13cf21511ef2a3303a23f4325c29d17fe5c1 \ - --hash=sha256:5a59cc1c4442bc3d5c703bf720b51138d0bfc173618807c9ee2490a7541dd3d9 \ - --hash=sha256:5bb4e7ea95dcd6a014a6fef62e62467d67d8e582326443f3d68e71d6320a9fcf \ - --hash=sha256:5c58fe613dc5e5336357eff555824a314d8e43282600435c8d1cb6a7a2fedd13 \ - --hash=sha256:5e7cecbaadb83884793e05828cee59b210b24583b9c7425d0ba6a754fe22eb4e \ - --hash=sha256:616f097f2fe415bc92a247f02e11f634e1f9e9a83d327e3c915c15089c87869e \ - --hash=sha256:63bbfd5ded17c4840ac07cd8f1c21ba9d9708141f840b324f422f41b207e3973 \ - --hash=sha256:64faea20f4e2613363a1a9b9c7dd73058f3ecd00133a511e72ad7c511658f527 \ - --hash=sha256:661c298b4821edebead0c91edd2b00374d67ad7c5a1f7a91d4442633b79d6a72 \ - --hash=sha256:68e62fe11f30d5ca8289242866f0a5291402d8529ca2178ab8afc5c9694ae890 \ - --hash=sha256:6a8dddef476fab96d066d578fc88526767b836ab5ab21754e1d5bf3879c31c7c \ - --hash=sha256:6e192623c49c94421616a5778fba35cf0d5a8d000650c1967ef4448ee5cdd990 \ - --hash=sha256:7225e4514edb64eb6740324353e0da0711954fd8d7da4576755b1c6e09b697cd \ - --hash=sha256:75f80557d1389eddbd0de2681f6a390a0c5338c31ddaa821381c203fc3fd50d9 \ - --hash=sha256:770de9db11e84213beec501cfcaa013b019820ca881e03344dea5844f7876d94 \ - --hash=sha256:7750c6449dff7864bb9bb27ddfb0267756189201a3afc911d82b3caacd70dfc3 \ - --hash=sha256:7bde5e4cc5c10140859842b9d383af292b22639a4dffb725314baf45968cef80 \ - --hash=sha256:7ce713ace7c0e4520535b42b77eaa742c16dab813978064913e5a3cf82973b41 \ - --hash=sha256:7da0c5eff80f0197f3b3d1232ec5a682a9325f4ae9016a78f5f5ca35f9ced1f5 \ - --hash=sha256:7dbb61fe3a7699468030f71bbe5f8a0e326a151daa91beb11a6fc1f980c55e1c \ - --hash=sha256:811bd1e21d32de12efca32393a0ab3f5133b54fce9bd44b8bd77ab07da14bf6a \ - --hash=sha256:8ef53b2de9bcb9197d31854256575d59dbac0cba72ac627bb291ef5eceb74be4 \ - --hash=sha256:937c0052c05a31ca1daf18de3158eed4dbfcb9cc107adbea227728d647be701e \ - --hash=sha256:9d2055050ea716bd38b7f7f1579c275386646b4894c155a3e2f3cd62ed41b7c6 \ - --hash=sha256:9f8d177621de5cb38ee3e731eda45d421db093ec0739f46a5594babda7987a98 \ - --hash=sha256:a2d7755bef5a12ed488f4ef1f1b69ee9191d7396083b755a5d2295f6edb4768b \ - --hash=sha256:a48d62ab9d6f4f98c983223a547af44be6ca3691074c31cecced6facd3ba2dc1 \ - --hash=sha256:a4f00aa42f75d6e4595e8866e748cc1705adc0cddfeb2ca86d0d03993d63ba03 \ - --hash=sha256:a6e721d4b0e45d5b65e87534470e67b18dcd092c83f68fba09f152b9cbc061af \ - --hash=sha256:a730a083190634c65cca36ba5f489531576ebd79bcd5c8e172130f6453127231 \ - --hash=sha256:a931079504ecc49efed7744c476a5c343a92fabf66dec2db95edb1b2fdc770e2 \ - --hash=sha256:aa9511c62d14da7aacc9b4bf51f3f697a621e83b2d6919008243c3aad168eea3 \ - --hash=sha256:ab36d55f9ed2d067327667c2fea18dda018eb628dd6347aa01dda6cf1f5d3836 \ - --hash=sha256:ad2c86c495b899d862ea0f4b42891b8713a3bd45dd4105c7fd51c2a72f39f3a5 \ - --hash=sha256:aeae0e330c9f6acd681f647d46cefd30c29f93e3392882e792e82080c9691399 \ - --hash=sha256:b0431303acaea1089ad4b3e9ce4e6518193def1118d4073ca848635ee4ea2e96 \ - --hash=sha256:b5bdfd1c873d4e093aabc0ca84c4ca6dbc4f752afb5c86f146d9742580c9da2e \ - --hash=sha256:baed1e86cc735622097354b9d1281406caf42ff42a886d29faa8e8d1630333be \ - --hash=sha256:c1453022f490d2459a11819d83ad1d586e9ff65a12ac3e705ffebd46d3685dcf \ - --hash=sha256:c26608d2222fb1e94487e4a387d85f13eb55d5ed725cb25a0c589ac4ee60e7bc \ - --hash=sha256:c7659f22557c5a0bc4855cd635f55edec690cc008a40768527762cb9fb263455 \ - --hash=sha256:c8c69575568085ba0b1b10c0249d779a214aea6f6522e949a0fc9fb0fcb449d0 \ - --hash=sha256:c8d2c9fd1f2d16f780d15127abb050d13d1a76c03a4bd87d7e4980e45e511e12 \ - --hash=sha256:ca82be1a1d406ecfe1d25dc16cb33488e5a16bf4438c9fb590484ea29d92478b \ - --hash=sha256:cc572dace3f60ef98d7b12ff411d20f5362feb31a0439eab0085bbfd349982d7 \ - --hash=sha256:d18e5ac0f2f03f4f518d3e23db0f0cad7faa1da8620e9c09461d443bbf6e6692 \ - --hash=sha256:d28630f5854ab07ab1fd4aba756de52326c82e6be15d414b12793f1975048b54 \ - --hash=sha256:d9c275eaacd24aa73f94ffd6de08fc3f932424d8b6c376f4bed7cde376fe7bc3 \ - --hash=sha256:da0e573f9f97159390c89d9f1a9e41908b66d408cc5b58d08cf3847d844c531b \ - --hash=sha256:dd31f52ea1086513bb9df30f8fcee9b8918323ae067a3d5b78bc826a000712be \ - --hash=sha256:dddad92b554513a31f272570678ba307fb9f618f05e3d4a5eacafff9eae03e1d \ - --hash=sha256:df423d40ee8654634421812bc3b196da3f9bd7d32929da813f8394c4348a5358 \ - --hash=sha256:df913725b79db7bcf03448f36b7bf8815363417d5b58deecf9305e3e30f0f21a \ - --hash=sha256:e0bcb7e0f677f543555d2adff3bf19c05f66cdb4796e5ff602442ab2fe3c4ef7 \ - --hash=sha256:e2d65b31f36619cda3999b78b2aa9632e76b78448e7a56fc4240824200e7c4fc \ - --hash=sha256:e6e8cff14d6fb0be70a09c0bdc58096f501952d04624ebf867e0e56da2df8960 \ - --hash=sha256:f16c709686a78c727bbbf059f92b0bf41c6fc60deec706d2dc19f529175a6125 \ - --hash=sha256:f24fb43132a4c6b4cb4eb029492919b2db645be6808d738f244fd146c03c32cb \ - --hash=sha256:f53e442b08449d42821fa4a4fba000095af9f62742a500f978a9f557ec44339a \ - --hash=sha256:f5cfbc5fe74540d335175b656c725d74d90e3730c626d92575eea35029d9afaa \ - --hash=sha256:f81b3b8f3d4e343550fa4baa0e479bba9f2d29ce9c2e9b51d1ce1718d7442fcf \ - --hash=sha256:f8ec5e643a9a937f64e1999eb9f75d072263751912dc5cd06d3c85f8f44be7c3 \ - --hash=sha256:fb92203a88b3d3053034db775110081c49d28be6551923805e039924093761e4 \ - --hash=sha256:fcd22650c908d7b7da162bbfaab594a1227a15d1643a98c68b122ac642fa2264 - # via - # -c requirements-ci.txt - # soundfile chardet==7.6.0 \ --hash=sha256:089e3bb81a0a07e94f15461ded9f9ee66d349615b1a9fd557d4de1003e2fc12e \ --hash=sha256:0ad9bc6dab4f338673353fa3f0dc96122f559aaf746087408106e2fcbf132fe8 \ @@ -484,402 +260,25 @@ click==8.5.0 \ # via # -c requirements-ci.txt # semantica (pyproject.toml) - # huggingface-hub - # spacy # uvicorn -cloudpathlib==0.25.0 \ - --hash=sha256:63612e17778c5e3a51b472def8d785d0aaaf347486d6b6786dc7be627556d4c6 \ - --hash=sha256:8faef3ed3a0dd71d134e8617b4fdc5ce56a12a6b485c080cfe80106e5f1d1f5d - # via - # -c requirements-ci.txt - # weasel cloudpickle==3.1.2 \ --hash=sha256:7fda9eb655c9c230dab534f1983763de5835249750e85fbcef43aaa30a9a2414 \ --hash=sha256:9acb47f6afd73f60dc1df93bb801b472f05ff42fa6c84167d25cb206be1fbf4a # via # -c requirements-ci.txt # joblib -comm==0.2.3 \ - --hash=sha256:2dc8048c10962d55d7ad693be1e7045d891b7ce8d999c97963a5e3e99c055971 \ - --hash=sha256:c615d91d75f7f04f095b30d1c1711babd43bdc6419c1be9886a85f2f4e489417 - # via - # -c requirements-ci.txt - # ipywidgets -confection==1.3.3 \ - --hash=sha256:b9fef9ee84b237ef4611ec3eb5797b70e13063e6310ad9f15536373f5e313c82 \ - --hash=sha256:f0f6810d567ff73993fe74d218ca5e1ffb6a44fb03f391257fc5d033546cbfaa - # via - # -c requirements-ci.txt - # spacy - # thinc - # weasel -contourpy==1.3.3 \ - --hash=sha256:023b44101dfe49d7d53932be418477dba359649246075c996866106da069af69 \ - --hash=sha256:07ce5ed73ecdc4a03ffe3e1b3e3c1166db35ae7584be76f65dbbe28a7791b0cc \ - --hash=sha256:083e12155b210502d0bca491432bb04d56dc3432f95a979b429f2848c3dbe880 \ - --hash=sha256:0bf67e0e3f482cb69779dd3061b534eb35ac9b17f163d851e2a547d56dba0a3a \ - --hash=sha256:0c1fc238306b35f246d61a1d416a627348b5cf0648648a031e14bb8705fcdfe8 \ - --hash=sha256:13b68d6a62db8eafaebb8039218921399baf6e47bf85006fd8529f2a08ef33fc \ - --hash=sha256:15ff10bfada4bf92ec8b31c62bf7c1834c244019b4a33095a68000d7075df470 \ - --hash=sha256:177fb367556747a686509d6fef71d221a4b198a3905fe824430e5ea0fda54eb5 \ - --hash=sha256:1cadd8b8969f060ba45ed7c1b714fe69185812ab43bd6b86a9123fe8f99c3263 \ - --hash=sha256:1fd43c3be4c8e5fd6e4f2baeae35ae18176cf2e5cced681cca908addf1cdd53b \ - --hash=sha256:22e9b1bd7a9b1d652cd77388465dc358dafcd2e217d35552424aa4f996f524f5 \ - --hash=sha256:23416f38bfd74d5d28ab8429cc4d63fa67d5068bd711a85edb1c3fb0c3e2f381 \ - --hash=sha256:283edd842a01e3dcd435b1c5116798d661378d83d36d337b8dde1d16a5fc9ba3 \ - --hash=sha256:2a2a8b627d5cc6b7c41a4beff6c5ad5eb848c88255fda4a8745f7e901b32d8e4 \ - --hash=sha256:2b7e9480ffe2b0cd2e787e4df64270e3a0440d9db8dc823312e2c940c167df7e \ - --hash=sha256:322ab1c99b008dad206d406bb61d014cf0174df491ae9d9d0fac6a6fda4f977f \ - --hash=sha256:33c82d0138c0a062380332c861387650c82e4cf1747aaa6938b9b6516762e772 \ - --hash=sha256:348ac1f5d4f1d66d3322420f01d42e43122f43616e0f194fc1c9f5d830c5b286 \ - --hash=sha256:3519428f6be58431c56581f1694ba8e50626f2dd550af225f82fb5f5814d2a42 \ - --hash=sha256:3c30273eb2a55024ff31ba7d052dde990d7d8e5450f4bbb6e913558b3d6c2301 \ - --hash=sha256:3d1a3799d62d45c18bafd41c5fa05120b96a28079f2393af559b843d1a966a77 \ - --hash=sha256:451e71b5a7d597379ef572de31eeb909a87246974d960049a9848c3bc6c41bf7 \ - --hash=sha256:459c1f020cd59fcfe6650180678a9993932d80d44ccde1fa1868977438f0b411 \ - --hash=sha256:4d00e655fcef08aba35ec9610536bfe90267d7ab5ba944f7032549c55a146da1 \ - --hash=sha256:4debd64f124ca62069f313a9cb86656ff087786016d76927ae2cf37846b006c9 \ - --hash=sha256:4feffb6537d64b84877da813a5c30f1422ea5739566abf0bd18065ac040e120a \ - --hash=sha256:50ed930df7289ff2a8d7afeb9603f8289e5704755c7e5c3bbd929c90c817164b \ - --hash=sha256:51e79c1f7470158e838808d4a996fa9bac72c498e93d8ebe5119bc1e6becb0db \ - --hash=sha256:556dba8fb6f5d8742f2923fe9457dbdd51e1049c4a43fd3986a0b14a1d815fc6 \ - --hash=sha256:598c3aaece21c503615fd59c92a3598b428b2f01bfb4b8ca9c4edeecc2438620 \ - --hash=sha256:5ed3657edf08512fc3fe81b510e35c2012fbd3081d2e26160f27ca28affec989 \ - --hash=sha256:626d60935cf668e70a5ce6ff184fd713e9683fb458898e4249b63be9e28286ea \ - --hash=sha256:644a6853d15b2512d67881586bd03f462c7ab755db95f16f14d7e238f2852c67 \ - --hash=sha256:655456777ff65c2c548b7c454af9c6f33f16c8884f11083244b5819cc214f1b5 \ - --hash=sha256:66c8a43a4f7b8df8b71ee1840e4211a3c8d93b214b213f590e18a1beca458f7d \ - --hash=sha256:6afc576f7b33cf00996e5c1102dc2a8f7cc89e39c0b55df93a0b78c1bd992b36 \ - --hash=sha256:6c3d53c796f8647d6deb1abe867daeb66dcc8a97e8455efa729516b997b8ed99 \ - --hash=sha256:709a48ef9a690e1343202916450bc48b9e51c049b089c7f79a267b46cffcdaa1 \ - --hash=sha256:70f9aad7de812d6541d29d2bbf8feb22ff7e1c299523db288004e3157ff4674e \ - --hash=sha256:8153b8bfc11e1e4d75bcb0bff1db232f9e10b274e0929de9d608027e0d34ff8b \ - --hash=sha256:87acf5963fc2b34825e5b6b048f40e3635dd547f590b04d2ab317c2619ef7ae8 \ - --hash=sha256:88df9880d507169449d434c293467418b9f6cbe82edd19284aa0409e7fdb933d \ - --hash=sha256:929ddf8c4c7f348e4c0a5a3a714b5c8542ffaa8c22954862a46ca1813b667ee7 \ - --hash=sha256:92d9abc807cf7d0e047b95ca5d957cf4792fcd04e920ca70d48add15c1a90ea7 \ - --hash=sha256:95b181891b4c71de4bb404c6621e7e2390745f887f2a026b2d99e92c17892339 \ - --hash=sha256:9e999574eddae35f1312c2b4b717b7885d4edd6cb46700e04f7f02db454e67c1 \ - --hash=sha256:a15459b0f4615b00bbd1e91f1b9e19b7e63aea7483d03d804186f278c0af2659 \ - --hash=sha256:a22738912262aa3e254e4f3cb079a95a67132fc5a063890e224393596902f5a4 \ - --hash=sha256:ab2fd90904c503739a75b7c8c5c01160130ba67944a7b77bbf36ef8054576e7f \ - --hash=sha256:ab3074b48c4e2cf1a960e6bbeb7f04566bf36b1861d5c9d4d8ac04b82e38ba20 \ - --hash=sha256:afe5a512f31ee6bd7d0dda52ec9864c984ca3d66664444f2d72e0dc4eb832e36 \ - --hash=sha256:b08a32ea2f8e42cf1d4be3169a98dd4be32bafe4f22b6c4cb4ba810fa9e5d2cb \ - --hash=sha256:b20c7c9a3bf701366556e1b1984ed2d0cedf999903c51311417cf5f591d8c78d \ - --hash=sha256:b2e8faa0ed68cb29af51edd8e24798bb661eac3bd9f65420c1887b6ca89987c8 \ - --hash=sha256:b7301b89040075c30e5768810bc96a8e8d78085b47d8be6e4c3f5a0b4ed478a0 \ - --hash=sha256:b7448cb5a725bb1e35ce88771b86fba35ef418952474492cf7c764059933ff8b \ - --hash=sha256:ca0fdcd73925568ca027e0b17ab07aad764be4706d0a925b89227e447d9737b7 \ - --hash=sha256:ca658cd1a680a5c9ea96dc61cdbae1e85c8f25849843aa799dfd3cb370ad4fbe \ - --hash=sha256:cbedb772ed74ff5be440fa8eee9bd49f64f6e3fc09436d9c7d8f1c287b121d77 \ - --hash=sha256:cd5dfcaeb10f7b7f9dc8941717c6c2ade08f587be2226222c12b25f0483ed497 \ - --hash=sha256:cf9022ef053f2694e31d630feaacb21ea24224be1c3ad0520b13d844274614fd \ - --hash=sha256:d002b6f00d73d69333dac9d0b8d5e84d9724ff9ef044fd63c5986e62b7c9e1b1 \ - --hash=sha256:d06bb1f751ba5d417047db62bca3c8fde202b8c11fb50742ab3ab962c81e8216 \ - --hash=sha256:d304906ecc71672e9c89e87c4675dc5c2645e1f4269a5063b99b0bb29f232d13 \ - --hash=sha256:e4e6b05a45525357e382909a4c1600444e2a45b4795163d3b22669285591c1ae \ - --hash=sha256:e74a9a0f5e3fff48fb5a7f2fd2b9b70a3fe014a67522f79b7cca4c0c7e43c9ae \ - --hash=sha256:ea37e7b45949df430fe649e5de8351c423430046a2af20b1c1961cae3afcda77 \ - --hash=sha256:f64836de09927cba6f79dcd00fdd7d5329f3fccc633468507079c829ca4db4e3 \ - --hash=sha256:fd6ec6be509c787f1caf6b247f0b1ca598bef13f4ddeaa126b7658215529ba0f \ - --hash=sha256:fd907ae12cd483cd83e414b12941c632a969171bf90fc937d0c9f268a31cafff \ - --hash=sha256:fd914713266421b7536de2bfa8181aa8c699432b6763a0ea64195ebe28bff6a9 \ - --hash=sha256:fde6c716d51c04b1c25d0b90364d0be954624a0ee9d60e23e850e8d48353d07a - # via - # -c requirements-ci.txt - # matplotlib -cuda-bindings==13.3.1 \ - --hash=sha256:04436a9364059c84b8f9636f359eccda1cf814341f5b670c71d80d2f79dbc708 \ - --hash=sha256:120fcc53d57903df529c3486962c56528cba5b7d6c57c99537320ed9922c8b86 \ - --hash=sha256:18c8c167c8907b8f02531ca810534315c458dabef31f7965095619bf647b9202 \ - --hash=sha256:1ab2f74ed65bfef4163ba07a8db16f1085e0729291db12a2423aff84ee8278b8 \ - --hash=sha256:2732904099e0a4d4db774a5fc6d91ee95fae065b4d2ecabb4968c5fe2406c9d7 \ - --hash=sha256:36febb7c1079d68a981dbbd8d5a67235b399802b82075c9388624719607e52b9 \ - --hash=sha256:507b0e19e7f934c5e30f30f0244ad70a75812619a7d3a0d742543caae1bd50f1 \ - --hash=sha256:61120b5e4f4a63f67efd7e7396914cb9ef871bb1f0021e990fb70277be240a4d \ - --hash=sha256:8de12ef60bf40756852cb62bbb40460609269f6ece522903d1cc93d73a3ececb \ - --hash=sha256:9851b0caa8bfd3bc6fa054eaf57bea7c8e9c3a62db2d2621224677f49f3c53d0 \ - --hash=sha256:9efb21c1ee64981e184b9e0ba5eb3179e5ba3d4b51665a6cb52b8ef3d01a7cbf \ - --hash=sha256:b134dd8c5c66ae4c4ad814f7aee88fd215353c077010cbc47e3b55ed35ec9eff \ - --hash=sha256:c0c4b1a995098c46695c24257a342dc97d6e6d3f3050b944c9f43bd26d734051 \ - --hash=sha256:c3c772dfff49681541d59630c90f858e173ac926b9c593a2b7123f2a1043cc76 \ - --hash=sha256:c5879712accf6e14bb01aa5e67440eb84998b8d104b509cc7a6dc0b8f656a474 \ - --hash=sha256:c7855c4868aabc0cfae28abbe83d56734bdfbd08f08fc234ac1912a12858bf49 \ - --hash=sha256:e32d08f71ebcdf00f0f41eab2eb37e8da94c8ed411cc9f7f7a019ce6b34abe3a \ - --hash=sha256:efd4c814d311ec08c981f6dded1dbe7d4b371067ee4f6c14cccec4bde9590f80 - # via - # -c requirements-ci.txt - # torch -cuda-pathfinder==1.8.1 \ - --hash=sha256:ae0137ff9e56ea97499bcbf54f5f2778ec25f3266715ac86da192a795af982a8 - # via - # -c requirements-ci.txt - # cuda-bindings -cuda-toolkit==13.0.3.0 \ - --hash=sha256:d693caaa261214ddd7dbb60d68e71cbed884e68c2be7509778f3051da0b91c3f - # via - # -c requirements-ci.txt - # torch -cycler==0.12.1 \ - --hash=sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30 \ - --hash=sha256:88bb128f02ba341da8ef447245a9e138fae777f6a23943da4540077d3601eb1c - # via - # -c requirements-ci.txt - # matplotlib -cymem==2.0.13 \ - --hash=sha256:03cb7bdb55718d5eb6ef0340b1d2430ba1386db30d33e9134d01ba9d6d34d705 \ - --hash=sha256:042e8611ef862c34a97b13241f5d0da86d58aca3cecc45c533496678e75c5a1f \ - --hash=sha256:0d78a27c88b26c89bd1ece247d1d5939dba05a1dae6305aad8fd8056b17ddb51 \ - --hash=sha256:0dca715e708e545fd1d97693542378a00394b20a37779c1ae2c8bdbb43acef79 \ - --hash=sha256:1366c7437a209230f4b797fae10227a8206d4021d37c9f9c0d31fd97ea4feb35 \ - --hash=sha256:1710390e7fb2510a8091a1991024d8ae838fd06b02cdfdcd35f006192e3c6b0e \ - --hash=sha256:1775d3fd34cf099929b79c3e48469283642463f977af6801231f3c0e5d9c9369 \ - --hash=sha256:18ad5b116a82fa3674bc8838bd3792891b428971e2123ae8c0fd3ca472157c5e \ - --hash=sha256:1c91a92ae8c7104275ac26bd4d29b08ccd3e7faff5893d3858cb6fadf1bc1588 \ - --hash=sha256:2fae4a29a36267772010a05ca85220e53f4fb3e1083d4f686342d8a3cc7620db \ - --hash=sha256:2ff1c41fd59b789579fdace78aa587c5fc091991fa59458c382b116fc36e30dc \ - --hash=sha256:30c4e75a3a1d809e89106b0b21803eb78e839881aa1f5b9bd27b454bc73afde3 \ - --hash=sha256:38aefeb269597c1a0c2ddf1567dd8605489b661fa0369c6406c1acd433b4c7ba \ - --hash=sha256:45dcaba0f48bef9cc3d8b0b92058640244a95a9f12542210b51318da97c2cf28 \ - --hash=sha256:52b76216c59e0078cebd988754426c41ee60e7c972f4c5185ac32fbd53b6d035 \ - --hash=sha256:666ce6146bc61b9318aa70d91ce33f126b6344a25cf0b925621baed0c161e9cc \ - --hash=sha256:673183466b0ff2e060d97ec5116711d44200b8f7be524323e080d215ee2d44a5 \ - --hash=sha256:68489bf0035c4c280614067ab6a82815b01dc9fcd486742a5306fe9f68deb7ef \ - --hash=sha256:6bbd701338df7bf408648191dff52472a9b334f71bcd31a21a41d83821050f67 \ - --hash=sha256:6d36710760f817194dacb09d9fc45cb6a5062ed75e85f0ef7ad7aeeb13d80cc3 \ - --hash=sha256:717270dcfd8c8096b479c42708b151002ff98e434a7b6f1f916387a6c791e2ad \ - --hash=sha256:742fc19764467a49ed22e56a4d2134c262d73a6c635409584ae3bf9afa092c33 \ - --hash=sha256:7700b116524b087e0169f10f267539223b48240ef2734c3a727a9e6b4db9a671 \ - --hash=sha256:7a8d404a48af953084fcec4239487ab05e14b829da251628827d51c87880aeb8 \ - --hash=sha256:7e1a863a7f144ffb345397813701509cfc74fc9ed360a4d92799805b4b865dd1 \ - --hash=sha256:8431347901026e9b554daeb982f5f1ecf3780ce46435c7a8e0cb82490e58f13c \ - --hash=sha256:84c1168c563d9d1e04546cb65e3e54fde2bf814f7c7faf11fc06436598e386d1 \ - --hash=sha256:84e2976e38cd663f758e40b5497fa5cd183d7c5fb0d04ce81a4b42a1ba124ff0 \ - --hash=sha256:891fd9030293a8b652dc7fb9fdc79a910a6c76fc679cd775e6741b819ffea476 \ - --hash=sha256:89c4889bd16513ce1644ccfe1e7c473ba7ca150f0621e66feac3a571bde09e7e \ - --hash=sha256:8efc4f308169237aade0e82877a65a563833dec32eb7ab2326120253e0e9e918 \ - --hash=sha256:90c2d0c04bcda12cd5cebe9be93ce3af6742ad8da96e1b1907e3f8e00291def1 \ - --hash=sha256:92a2ce50afa5625fb5ce7c9302cee61e23a57ccac52cd0410b4858e572f8614b \ - --hash=sha256:9d441d0e45798ec1fd330373bf7ffa6b795f229275f64016b6a193e6e2a51522 \ - --hash=sha256:a84ba3178d9128b9ffb52ce81ebab456e9fe959125b51109f5b73ebdfc6b60d6 \ - --hash=sha256:a868c1e3fe4f6f51232883b7bee7319a35e36644604577f4c6032cf957b9056b \ - --hash=sha256:a9150be2896fbe0096911bc9138a54e6fcc3814f197bc0c3d64d7c005a5e579d \ - --hash=sha256:ac699c8ec72a3a9de8109bd78821ab22f60b14cf2abccd970b5ff310e14158ed \ - --hash=sha256:bc116a70cc3a5dc3d1684db5268eff9399a0be8603980005e5b889564f1ea42f \ - --hash=sha256:bee2791b3f6fc034ce41268851462bf662ff87e8947e35fb6dd0115b4644a61f \ - --hash=sha256:c0046a619ecc845ccb4528b37b63426a0cbcb4f14d7940add3391f59f13701e6 \ - --hash=sha256:c16cb80efc017b054f78998c6b4b013cef509c7b3d802707ce1f85a1d68361bf \ - --hash=sha256:c3ff57aec4f264451739b18b7eab9d161d51af42b570ca0392fc051dcca28cb1 \ - --hash=sha256:c8dbfddfe5c604974e17c6f373cedd4d25cd67f84812ede7dea12128fa0c2015 \ - --hash=sha256:c8f30971cadd5dcf73bcfbbc5849b1f1e1f40db8cd846c4aa7d3b5e035c7b583 \ - --hash=sha256:c90a6ecba994a15b17a3f45d7ec74d34081df2f73bd1b090e2adc0317e4e01b6 \ - --hash=sha256:c9251d889348fe79a75e9b3e4d1b5fa651fca8a64500820685d73a3acc21b6a8 \ - --hash=sha256:ce821e6ba59148ed17c4567113b8683a6a0be9c9ac86f14e969919121efb61a5 \ - --hash=sha256:d1c950eebb9f0f15e3ef3591313482a5a611d16fc12d545e2018cd607f40f472 \ - --hash=sha256:d2a4bf67db76c7b6afc33de44fb1c318207c3224a30da02c70901936b5aafdf1 \ - --hash=sha256:d670329ee8dbbbf241b7c08069fe3f1d3a1a3e2d69c7d05ea008a7010d826298 \ - --hash=sha256:d8d06ea59006b1251ad5794bcc00121e148434826090ead0073c7b7fedebe431 \ - --hash=sha256:e02d3e2c3bfeb21185d5a4a70790d9df40629a87d8d7617dc22b4e864f665fa3 \ - --hash=sha256:e03bb575a96c59bc210d7d59862747f0012696b0dac3427ce8af33c7afb3d4a2 \ - --hash=sha256:e8afbc5162a0fe14b6463e1c4e45248a1b2fe2cbcecc8a5b9e511117080da0eb \ - --hash=sha256:e9027764dc5f1999fb4b4cabee1d0322c59e330c0a6485b436a68275f614277f \ - --hash=sha256:e96848faaafccc0abd631f1c5fb194eac0caee4f5a8777fdbb3e349d3a21741c \ - --hash=sha256:ec99efa03cf8ec11c8906aa4d4cc0c47df393bc9095c9dd64b89b9b43e220b04 \ - --hash=sha256:ed9de1b9b042f76fe5c312e4359eab58bf52ac7dfdf6887368a760410d809440 \ - --hash=sha256:f190a92fe46197ee64d32560eb121c2809bb843341733227f51538ce77b3410d \ - --hash=sha256:f3aee3adf16272bca81c5826eed55ba3c938add6d8c9e273f01c6b829ecfde22 \ - --hash=sha256:fb8291691ba7ff4e6e000224cc97a744a8d9588418535c9454fd8436911df612 \ - --hash=sha256:fe5424b38f61709b046df2ba7a6d7b54272ee1e2a2c56772d9cd309e4c1ea5ef \ - --hash=sha256:fece5229fd5ecdcd7a0738affb8c59890e13073ae5626544e13825f26c019d3c \ - --hash=sha256:ff036bbc1464993552fd1251b0a83fe102af334b301e3896d7aa05a4999ad042 - # via - # -c requirements-ci.txt - # preshed - # spacy - # thinc -decorator==5.3.1 \ - --hash=sha256:4cbcdd55a6efadb9dbea26b858f4fb3264567b52d69ca0d25b721b553f60ea82 \ - --hash=sha256:f47fe6fdbd2edd623ecfe36875d37aba411624e2670dd395dddae1358689bb3c - # via - # -c requirements-ci.txt - # librosa defusedxml==0.7.1 \ --hash=sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69 \ --hash=sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61 # via # -c requirements-ci.txt # semantica (pyproject.toml) -et-xmlfile==2.0.0 \ - --hash=sha256:7a91720bc756843502c3b7504c77b8fe44217c85c537d85037f0f536151b2caa \ - --hash=sha256:dab3f4764309081ce75662649be815c4c9081e88f0837825f90fd28317d4da54 - # via - # -c requirements-ci.txt - # openpyxl -executing==2.2.1 \ - --hash=sha256:3632cc370565f6648cc328b32435bd120a1e4ebb20c77e3fdde9a13cd1e533c4 \ - --hash=sha256:760643d3452b4d777d295bb167ccc74c64a81df23fb5e08eff250c425a4b2017 - # via - # -c requirements-ci.txt - # stack-data -faiss-cpu==1.15.0 \ - --hash=sha256:22dddb013e764aad66dac6cd15b49c7598d60339e0591b73b5e081629419c21b \ - --hash=sha256:30da3029952f0de69f16ce31946fd63fc3e292c867749bbcd2c0a0f09fd06f65 \ - --hash=sha256:37170d5e9ead4b6bfd9c314afc39e17e92064068a0c5a4063dd3f39568c2667e \ - --hash=sha256:50ea471ef1f4f3580eda8ab0ec9727d4bf65fd71c444bf306ce7cdbba8a42b21 \ - --hash=sha256:5b940897b317febaa761088513a3db164fad3ac71a5e1ed7be9a052c9bf1a447 \ - --hash=sha256:5d0a2d5d33fe023e263d0d355a837f20db67578e3be27fc5f4012a273274abf6 \ - --hash=sha256:88fbe1acac6978869063cb2f9477f85718da596a6e0a17751618f9c756bce255 \ - --hash=sha256:90169515a95ea58a9a95d419e518907927a8ef54c46788396365ec5902c9c8df \ - --hash=sha256:dd383bb1ce06fabcff5785f998f253aa88f88dcbe1fe36c922417cd6666dd896 \ - --hash=sha256:e0fe7278f3784b7d205ae715a115801cafb75f6e55db6b0fbe83c4ff379f003f \ - --hash=sha256:ec9b29aae29e428c085c2d49dbb02e4673cdea75db418d420f9e60e0b4184498 - # via - # -c requirements-ci.txt - # semantica (pyproject.toml) fastapi==0.141.1 \ --hash=sha256:bfb91aa2d334c61cb35ba9a116fc123b3d3df31640b801cf57a7a78ec3f603b3 \ --hash=sha256:e8822fc40db1e1858054d7a949a888695bc9bdce70139178e33bd2871a453ca1 # via # -c requirements-ci.txt # semantica (pyproject.toml) -fastembed==0.8.0 \ - --hash=sha256:40bee672657574a1009e35ec50030a55f2b426842cb011845379817641bbbbd0 \ - --hash=sha256:75966edfa8b006ee78514c726bd7f6a50721dadc89305279052be9db72fd53e8 - # via - # -c requirements-ci.txt - # semantica (pyproject.toml) -filelock==3.32.5 \ - --hash=sha256:142cd9fa77a872c5e78c62329a0d15278fadc686eb89e760017968961a4fd6b2 \ - --hash=sha256:f6a6a28f743f9b95ce19db5abe0f376f75eb56517dff21e1a4751e2657d3e83d - # via - # -c requirements-ci.txt - # huggingface-hub - # torch -flatbuffers==25.12.19 \ - --hash=sha256:7634f50c427838bb021c2d66a3d1168e9d199b0607e6329399f04846d42e20b4 - # via - # -c requirements-ci.txt - # onnxruntime -fonttools==4.64.0 \ - --hash=sha256:043f6c572bf236f2a76e762c25f841daea11e8fc03e78088d7be66e0c5b4e4c0 \ - --hash=sha256:06b6409b868494556a831ae33b2d9a090476c37516b38d70f45a9720b460d423 \ - --hash=sha256:08f172961e11f4eb4f80f2f20049e09b0ea8e044fa6d456fed8346eb8588f360 \ - --hash=sha256:09657817b75575822bcd6098ef0ebf0386f34430839ee53109e70fd40a7f6539 \ - --hash=sha256:1c3661324f3f0fa4539a32288a3e0711a5f3ccf020036e760bb558ae9811a16f \ - --hash=sha256:1e4e84b47839d35be24dbf476845a34f2ccf99707b66df125c1c414d3e86d25d \ - --hash=sha256:236e59bc7e2a63557a4d7b013f9cb9e28d9aebc45bc09f85e545e6bf091db626 \ - --hash=sha256:2524a26f8fdb9051b0d778d052f5d238285ca9f91a7dc004514c7d6cf38d35f4 \ - --hash=sha256:2730946ca8f12c356bd98eb9b2b095c8e761ed05bed5afb0d5b380cebe4f6370 \ - --hash=sha256:2c42237b7e8c6813643e57d3efed3be094d4c06339dc2166b626e2cc5c12ee93 \ - --hash=sha256:3200180abc69639483cf54a17cca2e13c31ede5f665979ea0a9c829d093f372f \ - --hash=sha256:398b14f89ca950b288bd290875f07e4e10685644fa4ac668546fb107b1ada4d4 \ - --hash=sha256:45e3ecc3888f1637094fd75cd8fc727f3a4b06d1ddf89181126c071e244fd2a5 \ - --hash=sha256:4691a122b8c1d0d82d6e7510ce59d5c42146518240274b53e912e255573924f7 \ - --hash=sha256:498f02ea92c9ca18c0f9c581ea93184a9d56c25b0af14189b0767adaf34235d8 \ - --hash=sha256:4a05783ff54ce4c7a28f18e5772efdf63c219374bd9ffc55452182e1cef8be60 \ - --hash=sha256:507c553cdb5abe2e951b5368423849fe29911a828c2135319c3e500e3bf25b32 \ - --hash=sha256:50e52b6f479ddb1fe32423c2ec860811f36584cf6eabf279fb9a4f98b859a8b4 \ - --hash=sha256:53eee22af5b5a305c1ee2652955ed46b148e881456fcec1e7f0eb27f642f6bb4 \ - --hash=sha256:5af87d1a6d247d7467ee082ae977a5443b2c45f8cd4d59375b6daa38d523c2de \ - --hash=sha256:5b90ad6637237b636d15c9ae8b7c4a7a1c194f33def378677e468c13fd4542f8 \ - --hash=sha256:5bfdaada437e7730c17d366bd7bb8c4a16639963ddbfc1b2f302a68a17a290e7 \ - --hash=sha256:66a83f93579fb3493e458c4449d1d566a7b2a1c7b19915cd0fa3c9b8b5a8540b \ - --hash=sha256:6786bed88581e19bc4f28ea7a64ad531e8f54acf50327fddca942688824a60bd \ - --hash=sha256:6946c033a144086d5b98c976b72f476b70c93fbbedf914eee0e886f073a4e9fa \ - --hash=sha256:6eae4376adb104c2acfa76fd9ea0cb12b572ca1d70eceac709871f638ff76e93 \ - --hash=sha256:6f1ce9ef9a1b13098efdc2e43a2ed96d9851bbde7b31c652a87552c4efe9b422 \ - --hash=sha256:70fd99e5a09fb77f14b29d70879a4fce9529b2d2948b14c96708e0a61e001b98 \ - --hash=sha256:730eed859508cb7b0775ebe6bb39f18901f168eb989d8ee23a4fe082700e1e3f \ - --hash=sha256:769fb64412ca237547ca73f111a64252d9e32c9d938bed51ed537bc9146a8f54 \ - --hash=sha256:7d7995b906666037d7114c20a5566a372902747452af7d5bd4cd6bca8f1a2550 \ - --hash=sha256:801fd04899d72eab34f02ab78d0451525621b3bd589da9d2d480dfffe951b643 \ - --hash=sha256:8252f20108e557532f91d7d6dd9af87c16ed6fa930f65516aa480fa2cfed3363 \ - --hash=sha256:83cc48d1411d2ff388dab99973dca81172cc9ceae9c9799da9548d494cfb38cb \ - --hash=sha256:89356c0793b474af7e49ec90d39fb2363e2341516a90460e38231df5ebe8acd5 \ - --hash=sha256:8dd18fdff0ac9759b8d67a714730abee07b2312e3656c20ba5affb0107094762 \ - --hash=sha256:917fd520bb60809d83c14d43cfe48d5ad2516abaf2c073d65a431800dade2d29 \ - --hash=sha256:9443eefff58aad558608f352092e1be6d278980e8c3b4e8621fcbfda97818500 \ - --hash=sha256:9ecb2b206b5b2386f6968721a0770226b66bdd54adc4279bfff3ddf62873eed8 \ - --hash=sha256:a0afa8bac675445dc0e2ba2891ecbedd9be89cb437afa94c823e0290cc2c4bc5 \ - --hash=sha256:a3238a693e806a3158375c6403b8f6f71d86eb9c149b60c97f26dfd560c98ac8 \ - --hash=sha256:a515f664cad988f2295056833a59f62220bc3e46afdaffe389a29060f6712355 \ - --hash=sha256:a8c631303bb1fd7be3067c47536a30ff1fcb4846d6008c112bc52a03f7cd6965 \ - --hash=sha256:b2763e452b025ee8e990f0462e76052de9bb094ebc21d296f62c6dfe958886b4 \ - --hash=sha256:b4a7af455ffed980925bc0ebf5b8d6239e6c3e797d9d755b6db192fb3080d614 \ - --hash=sha256:be084d19a3ac0c8b2aba696680642d703118d3b1f18cf83f5b7dbaf0ffc62ab6 \ - --hash=sha256:c3c1fb656063a2f762db5378ea8d38ad5f7836b4f3fb8c4652270ded43df2935 \ - --hash=sha256:c60be0aed97a32c6ba8cee21f0d0477136e495451bd97910f589ac892db120d4 \ - --hash=sha256:cf67f96dc0bfe9607f5f2b734cedfbe2f6f995231adee4ccefa12872044d452d \ - --hash=sha256:d16102cbcd4615b09c64e6022733faccc93200785f1ab0d4493afb8b0261edde \ - --hash=sha256:d30c966bea2deffa19c738c81776f7182da5ccabd97e666bae4f3d6ba87341d9 \ - --hash=sha256:d652592c71683941b768306fa1c7c6ce1bb9b072505043feafe86305d71030b7 \ - --hash=sha256:da4c9bdeaf6b06c12d13d0addfc8ef15aa9695d26574a6dc10751258bef72f30 \ - --hash=sha256:dac25768be4c03a990c359f408cb7e8958ed0e93061e495b3642ce7909761205 \ - --hash=sha256:dc96150f99e05a317cb1f042b92c4cf8bc93cdb1f9f85717322e202ecdf2e505 \ - --hash=sha256:de8acaa5f4160f537a3cf41b031171d51004b9f4aebfa6c194f18dffa9533d03 \ - --hash=sha256:e412767d1c9765cf1b82f7b00f1686c6ca5809ebb77af363b3f9f2325a465c01 \ - --hash=sha256:e4812f71c39d77ec5041348dafa400532adf7bf8f1fffa9aa6495fce5876d7b8 \ - --hash=sha256:e63b63b8b5fdb8e29318dff2b15c5f852be46e972775b466f75b848f6eed4502 \ - --hash=sha256:e662f874ab2c7da9861584db44a13573e0936df087215f63013138f6e5eba083 \ - --hash=sha256:e7b34209eef39462563c05ea9dcf51c272a2ded56f5753da925e66bca3baa484 \ - --hash=sha256:ecb2e59a7bc692fee64dda6010deb66222335693b30046f15cccf81233aa715f \ - --hash=sha256:f521d79d6acda4923b264805541696f452079db0952a5bb96f9ff742f50629ec \ - --hash=sha256:f8669ce37851b597d3435b91fefa51139e58d506ca449ca0e5bb68c63b8b6d2b \ - --hash=sha256:fa75c7970bc6bca340cc6e20f20f069201bfcb50094c31a536fd99724d1d01ca \ - --hash=sha256:ff7aff4637fbf71394df139c63ccfe08a47aa4252d2f91224ddb3335c716c925 - # via - # -c requirements-ci.txt - # matplotlib -fsspec==2026.7.0 \ - --hash=sha256:b57ddbafedfaef7018c1ecab32aa200a9d7ca26b77965f64e48b70061249d279 \ - --hash=sha256:c803c40f4cf860b49dea58ee3e1c33cb9c790520e233537e1340049f89b82a88 - # via - # -c requirements-ci.txt - # huggingface-hub - # torch -gensim==4.4.0 \ - --hash=sha256:05a027238b5eb544a17afe73ec227d6a7e0c6b4e2108b1131c0b8f291a0e0e2e \ - --hash=sha256:06704acd354728262f9f32a9435c70945930f8d11b58531b3cb5c699f4757ad4 \ - --hash=sha256:0845b2fa039dbea5667fb278b5414e70f6d48fd208ef51f33e84a78444288d8d \ - --hash=sha256:120d58351f67ef38f3b102a724fb2ece298b20a06fbeae02797f18c1087591ca \ - --hash=sha256:1853fc5be730f692c444a826041fef9a2fc8d74c73bb59748904b2e3221daa86 \ - --hash=sha256:23a2a4260f01c8f71bae5dd0e8a01bb247a2c789480c033e0eaba100b0ad4239 \ - --hash=sha256:3bec3e6a1ecaa6439b21a3e42ceb0ca67ffabc114b646f89b1aab5fe69a39ffc \ - --hash=sha256:484286ff973c77d262776e44e0bc3b958331b7b0f5d61f83014f6cc12f1a814f \ - --hash=sha256:4b73ff30af6ddd0d2ddf9473b1eb44603cd79ec14c87d93b75291802b991916c \ - --hash=sha256:54a32a196502bf0e376cd7ef935be97f7ca96cc0f90ee9514d48406b7bd21bad \ - --hash=sha256:59d0d29099a76dd97d4563e002f3488a43e51f99d46387025da38007ebfeeff9 \ - --hash=sha256:5c4d8f2a5e69bc246931dfd8e03d0ce3f3bcf82adbbdbcf20dfc35c43b8e1035 \ - --hash=sha256:5e2c1d584d1c7d16b2a0fe7d2f6f59a451422df7b5edb7e3ca46c8e462782127 \ - --hash=sha256:6ecb7aed37fb92d24e15a6adbabe693074003263db0fd9ce97c9f4234a9edc1b \ - --hash=sha256:724b93c9b6e92cd15837048c71b7fdd38059276c85dd1f9c0375576f0aea153f \ - --hash=sha256:7590e7313848ca8f3ff064898bcd6ecf6ec71c752cf4d3ec83f7ac992bc7c088 \ - --hash=sha256:7e110e2d3533f5b35239850a96cb2016a586ecd85671d655079b3048332b7169 \ - --hash=sha256:9033b18920b7774e68eafacdbd87252ffa29382ec465ddb88bd036e00fc86365 \ - --hash=sha256:91a7fa5e814e7b1bad4b2dffa8d62c1e55410d5cbdf930714c1997ffb4404db8 \ - --hash=sha256:a3f5b626da5518e79a479140361c663089fe7998df8ba52d56e1ded71ac5bdf5 \ - --hash=sha256:b3a3f9bc8d4178b01d114e1c58c5ab2333f131c7415fb3d8ec8f1ecfe4c5b544 \ - --hash=sha256:b8961b7a2bb5190b46bc6cd26c29d5bfea22f99123ed5f506ebd0aaf65996758 \ - --hash=sha256:d56613fcb77d4068c1be845843508dcd9d384ede34700a61bbeac32b947d1fc3 \ - --hash=sha256:de863f72b97ee142e7ce1c28da8f8e5473b76064ecbfe139da62127f46ab5c07 \ - --hash=sha256:e29a2109819fdf5ff59bef670c8c22c1690d52239fe172b43e408908871de5f6 \ - --hash=sha256:f0977e5e5df03f829f322662e37ac973b93272c526f1432f865d214c0b573f98 - # via - # -c requirements-ci.txt - # semantica (pyproject.toml) -gitdb==4.0.12 \ - --hash=sha256:5ef71f855d191a3326fcfbc0d5da835f26b13fbcba60c32c21091c349ffdb571 \ - --hash=sha256:67073e15955400952c6565cc3e707c554a4eea2e428946f7a4c162fab9bd9bcf - # via - # -c requirements-ci.txt - # gitpython -gitpython==3.1.61 \ - --hash=sha256:8ab28c9da863cdd9e7d7694ec46cf3e6c9a12d8a30a1acd3447aec11975d530c \ - --hash=sha256:f51c24d8c0f733a195447385f5774a5dfe8767f5acfd7994a33755644c6ecc95 - # via - # -c requirements-ci.txt - # semantica (pyproject.toml) grpcio==1.83.1 \ --hash=sha256:0468b627f2987c9a77f7580030207cbd85457ffe52998beff4f0b5c38c58a72c \ --hash=sha256:05ba265193fbd9f63355311ec7567bba32a72aeb8e9fd7b3443e4fcad87b0750 \ @@ -942,27 +341,6 @@ h11==0.16.0 \ # -c requirements-ci.txt # httpcore # uvicorn -hf-xet==1.6.0 \ - --hash=sha256:0e6e21fa3cdfcdcd76748564bf593870a5e013f47d97cf10aed63aa222cff5b7 \ - --hash=sha256:23379c2f9ec8696d952b16414a2bae72cad86a52df869b050698ba60f538c675 \ - --hash=sha256:2e58454a340b3556dfa4972d5451aff4fba8dd42a236600ba1a1d2b1514f0fef \ - --hash=sha256:35cec30d75c6f9eb9c16a77cef68e85a103b72e24d4b473714ec9ff06428bab9 \ - --hash=sha256:3dc3e35441ba395006af5aaacc40ef2e603c51ef46c3530b9156185f00935ea3 \ - --hash=sha256:4fc74352a17015bd0ee90038bc9efe38db894cde45f268b6712b04fce8cd0acb \ - --hash=sha256:5153e6bb103ad49d6ea9f1b2e230db5a2ea32551ad09a706d2f61d7c7c80d80e \ - --hash=sha256:5789835d7c6bc9436962853192082374297fb72d7eff7e7762ec25ceb7e25338 \ - --hash=sha256:633dc0cd71d32da58ab8c03ad38e2fac452c15c2b0a2866ebf6ededfe0a5061d \ - --hash=sha256:70cbb9c896901600128cb9b6f06e132954fbede1db30f31f7c6c63f84cb7c31d \ - --hash=sha256:75765820ce4700db3750c94acc8fe27c5fae4c9ec000a0dbac3ca082acf97765 \ - --hash=sha256:8fb4f71cba6129110c3374a33f919001ff130488fc23553698e34cc1c2a1198c \ - --hash=sha256:948f15d3a9545cfe5932f6bd8b440f6ae630aee108f14b7bd6c561f7c2dcc522 \ - --hash=sha256:d62671bb130879cef0ee4c9ebe47a14af6c66ec53e6d84dc15936e5ffdfac82f \ - --hash=sha256:f0906082d9932ae0c0057fa194041c22b4e2cdb46b2592ef3b91f020d62a081a \ - --hash=sha256:f2f7278c05c22fd60cb436cda1269649b3e81db65ecdc8496e5e164aa4143e7b \ - --hash=sha256:fb4fadde1b2b70bf4c0c14a6dccbe7194b1c28947fefd5bbe3fed9d940676c3b - # via - # -c requirements-ci.txt - # huggingface-hub httpcore==1.0.9 \ --hash=sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55 \ --hash=sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8 @@ -1029,17 +407,6 @@ httpx==0.28.1 \ # via # -c requirements-ci.txt # semantica (pyproject.toml) - # huggingface-hub - # weasel -huggingface-hub==1.29.0 \ - --hash=sha256:6ebb385a581435325cf6d5c5b233d5d4bc91175834d99fd65dae14379b36e9ad \ - --hash=sha256:b00f7782afc14db4bc6572763810a635bdfbab8623d957bfb553bd18e03852cd - # via - # -c requirements-ci.txt - # fastembed - # sentence-transformers - # tokenizers - # transformers idna==3.19 \ --hash=sha256:5e0811a4383b21dc5838069f801c4fb62113b7447663d2530d2bd6e77b49bf15 \ --hash=sha256:815e7be7a7806d54abb586dc943addc79e8b2ee16915059658cbeff4b1b43bf4 @@ -1048,912 +415,35 @@ idna==3.19 \ # anyio # httpx # requests -ipython==9.17.1 \ - --hash=sha256:6d1645743cfd1a07eb695d85aa2b5fa66721f8cbae9431d4049f7084bbf06509 \ - --hash=sha256:8919be8c27f20a6f4423145028063f6637b42a03ce57665bb12015ee1f073529 - # via - # -c requirements-ci.txt - # ipywidgets -ipython-pygments-lexers==1.1.1 \ - --hash=sha256:09c0138009e56b6854f9535736f4171d855c8c08a563a0dcd8022f78355c7e81 \ - --hash=sha256:a9462224a505ade19a605f71f8fa63c2048833ce50abc86768a0d81d876dc81c - # via - # -c requirements-ci.txt - # ipython -ipywidgets==8.1.9 \ - --hash=sha256:bcccba38a6ec3253f7a39c943cea5b9ad01999ce071396171adbc51c6a6a8613 \ - --hash=sha256:f2b8cbcaae10252b809fbe4d7470db75c09b769a32cbf816d20e5ca6d3c5a79d - # via - # -c requirements-ci.txt - # semantica (pyproject.toml) -jedi==0.20.0 \ - --hash=sha256:7bdd9c2634f56713299976f4cbd59cb3fa92165cc5e05ea811fb253480728b67 \ - --hash=sha256:c3f4ccbd276696f4b19c54618d4fb18f9fc24b0aef02acf704b23f487daa1011 - # via - # -c requirements-ci.txt - # ipython -jinja2==3.1.6 \ - --hash=sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d \ - --hash=sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67 - # via - # -c requirements-ci.txt - # spacy - # torch joblib==1.6.0 \ --hash=sha256:2ccc96785b12046c08fd6d55839c12857831b54a3c1673ffadd2f04bfc4eda03 \ --hash=sha256:3dbbf9f6e4b592a2357b854608e980fe6390d131d7a82f011a377ef2ebef7aba # via # -c requirements-ci.txt - # librosa - # pynndescent # scikit-learn -jupyterlab-widgets==3.0.17 \ - --hash=sha256:40ac1e9955acf116c4d995d9bfa082d86ad9ec6d91c4f134827cf5e0a5eb75e0 \ - --hash=sha256:6e61fe21ca8a66039180a5cc52a433e07279d2fee79c8be963e00d55193f17a8 - # via - # -c requirements-ci.txt - # ipywidgets -kiwisolver==1.5.1 \ - --hash=sha256:007a5553dfc4f4e8d184f588a0200e2cd4b63a59cc8796df3c39909e679dc7a0 \ - --hash=sha256:0324cd2567259b7a095f6cf18a52b0ffc6f3de9e69528ff1bc0e7a37bd43ff1a \ - --hash=sha256:0627b9bceb9c3cdcf12b8a18655eedfed2692b038df27423383c120d0b7dc2d6 \ - --hash=sha256:06a6917674de9e0fe3f66f5430787f59a9f2ddb64af9b714eaec547e29ef5c19 \ - --hash=sha256:072bdb15a3c19a5b5dbc8f8fb1f4e1884bf4f3507eeb4cc6334401274d37a5c0 \ - --hash=sha256:0a4faea5c6db201c6a21391d2ac926ea97acf7dacdbc3c417189e1adb1a00837 \ - --hash=sha256:0ba9527afc80ae3d7814ed98b6572d02bf85eaf48065678342c5f0c6dab7a8c7 \ - --hash=sha256:0d8924877ce22e17326a99a418c3c82037da078df3c6a260b13eca677444e6e7 \ - --hash=sha256:0ebdef3eae5336568147c39a55be6a2036ffde53faa9ca2d978989ae7c2da12c \ - --hash=sha256:1209042a623ddfda5497e4066c7b77651dde8e1d3a9dd97599dc7e97f3b9b78c \ - --hash=sha256:16895f553ee6620a827d2da56b871f835fb70b9216cca5d188e885caf6e3bd23 \ - --hash=sha256:17851e5dad4484be0cbccbde3b15331deae036de9aebd45eed964487802b172f \ - --hash=sha256:1798e83840c3f627246104c4d8a9639c60fa068adf9ce92b61791781fa8a68c1 \ - --hash=sha256:18170a77ddfecf40ec60d0928268dc95880c881864e015a8f34094ed18b9b9ad \ - --hash=sha256:186884a58486651e3c217b6acea0a53eaa9498fdd472057c46f2f0fb5c25aad5 \ - --hash=sha256:18a0cfb124546a4c2e6087c5f3029c7f44b37c85b142e0ced71f73a7599ac208 \ - --hash=sha256:1983f0974a750a6f6556f368ba11105d1d8369c735b944747c9f12ae5aea7aae \ - --hash=sha256:1a7587dc335f2c0f5bd577fd0540bd16c66006bdb60f759a1059f025e6c4f071 \ - --hash=sha256:1acc7e5b7ef05e9da8bb70cd6c7c4513090213d2e1ad9720f599f0bf6c52aec5 \ - --hash=sha256:1d852545c4d0e35a72728d072cbaa59e2fa7dd84bdf01e068d670dd0ceb58eb6 \ - --hash=sha256:1ed0f5e49d0ceff8b72190824d9e59c062fbbc02c231b853112c78474b3f5ec2 \ - --hash=sha256:1fff05e239575b1481b6ed1a782f6fad616efbf1f0b1f44e6e85c4dfe426e483 \ - --hash=sha256:21e46b23a2da695c364124817bc01d970effd5483147f8d66a6a7167e3f6b851 \ - --hash=sha256:22d5e5aaad6be121f2515765e3b1c444352cb8eb4c86510801db8f2e50757316 \ - --hash=sha256:2551cf9917af48ee7c4b29cc82320489508cf96fd26a51f6fc124de661cd44c7 \ - --hash=sha256:255605693a483db7bd5c79f60437f7bf658f7f520d61aa42722e32257c941951 \ - --hash=sha256:26e8268480be5061d509e29669d59103c067a26377a56491630ece11762e3858 \ - --hash=sha256:27add358abe374ebaa3b8763ef380bc99051b5a4b18d94878366a9e4f59efef0 \ - --hash=sha256:2ae70bc59790d2af72a3f76f24b272403e135070340281108b447cb77ea70819 \ - --hash=sha256:2e10ae1bba1899188b33557c10d73affcc12033edd18adddb57d209039976a4c \ - --hash=sha256:3221f78211074f561c44ca42eac0619828171bec15a2c4cf6f7747d07df76e8e \ - --hash=sha256:34633ecf50d16187ab8e5528b7a2530f2feb4e23f300db4672538b51cfc5cd38 \ - --hash=sha256:34ec467940442c9943016fb2d4c81d1ba84351eeca2f1a78f8bc87f1ba0d414c \ - --hash=sha256:37f801b5d7cc0e5a548921308e059fd2b057bb42972b591cfa3049f95423c4ed \ - --hash=sha256:38f6e0deb4d0a4615efe0c4efc5990b06ae450ab50a0b321c0b078b6d238c083 \ - --hash=sha256:3c24cd69455e1b00ddf770c13b6e2c33e07d6dc3f2d34add0bf9277c5c6bbd46 \ - --hash=sha256:3cc210010fd2f438a3ed430b45f1b501fd13a8618bf984dc2c5ce5b69b78752e \ - --hash=sha256:3fa5855898f6d3d01b72ccd48a2d65cbdee301251603fefe34e2025bddba219c \ - --hash=sha256:416ba7ff9f233b7036689bb5a3783537e838ad483f63558d2a800f75afe738b1 \ - --hash=sha256:431dc224a1a92a5c8f582d96e505196a3b5997a7271076678da2dfde67b77e9a \ - --hash=sha256:43844c1a7ad6d723d5b5b4c4fc7f5bd399c40e288120d16257c7c9e8765c6e85 \ - --hash=sha256:44b8faef94f1857e77fa0238f3390ff1ac51d2ea20a487e2e452a59fd2b5f5ca \ - --hash=sha256:470d420f98d368d6f010633a20659b544c5fdfa5329e6b70219f2ef08fd4a7ef \ - --hash=sha256:482676e5bd48d70ac99d9fc78863469845421e01184fa83f1f9366dc49f7e974 \ - --hash=sha256:4d4ca09bf13cff792b1884f64b98ee6c2467930d632233be25c56b442d99f10e \ - --hash=sha256:5025e36fb4fb275cef0a4e30dbb11cb4ae61d1c83deb90189cb5d7e4cafd6b55 \ - --hash=sha256:509735237ae0d849e8a843551d423d2500d2e0a9ac1611a145658b29c0fb9f85 \ - --hash=sha256:534f02c1abb31ed6dbd3515545285c330b2f12d00fdb1fdb71658b9ca5a13a6a \ - --hash=sha256:5978c3340f16a35c30f8ab2fa7bcf559973c55f1a5ef6970e1f621acf3c4db13 \ - --hash=sha256:5b973887ff782cfd6b67c9904ad8ca542e0bc5e4961503408b423b5a688b4d38 \ - --hash=sha256:5c490db2168a508088f59140dd392556a54b8bd1048fc6383c8baff13c359673 \ - --hash=sha256:5d142e352eb13facc7dd047489aebdff6ba78576c239f1ea04931979caaf0567 \ - --hash=sha256:5daa1f19e097050b9c4d9a78fcc9263cb96c9dfae08037ddc1b7c4ad1889f2a2 \ - --hash=sha256:61e9a64c7635095a6bfe483e2ff055d437c59bd45f3617a228b37277f0185d62 \ - --hash=sha256:63fb7294b768f444eb4b068965f2662f28c2fd4161e23bd60fcf3ff27b74c046 \ - --hash=sha256:685929988b208a911f1285e2f8ed54210b0d681a3dc0f03e00d599d291986e7e \ - --hash=sha256:6a797a1cefc8b9c93170db580337e1fe3d011ad18b1299943231279406342048 \ - --hash=sha256:6b92f60017dda7d877fdc546438b5e28f31c523264f49cf5a48c1d0ce1a0dfbc \ - --hash=sha256:70ed9a45c7484d2b30cdacf60d220f494a1763b9fec1ad03285c6553fa0889f2 \ - --hash=sha256:719a35fa1156db3640555f95ebb94f60a444e64d1c69626b0edef5df78eba225 \ - --hash=sha256:74ad5c3dad54a4641b4c28cd15ded70899d04459c6c7aeacafea716be97cce6d \ - --hash=sha256:74ea337e0ec3f6f342a36a4f1b5cd94dd9affddcd28ba9aae2905af932ee8c6b \ - --hash=sha256:75d9b1cf8258462dbdc1eeda718c96ea7f079324c09067f6daabfcf37712b7fe \ - --hash=sha256:77a4c8187a5948d7f8795adb765a3c7b553d07d86d88e43038fc32fc1fb9a3f3 \ - --hash=sha256:7824b5e8bdbf0bccb4ccd37bbb115849a1dc45437fb4de8351385ed07c437ee0 \ - --hash=sha256:7d38b0c279c3032e8c9cc013b405c6df8e1668dbf15465779aa7f15f61201812 \ - --hash=sha256:7e9c01d3dd7ceba4d1d436cc021d40d592466e40b9bc7f5d83dc4e98a5c9cd8c \ - --hash=sha256:7fd82debf43c6acd0a94359d232f6bb516ee13f269a7993736a9ac9f988bb5d9 \ - --hash=sha256:824c3d763a05ea9e9003610145186b0e9848c7584a5575c79bac5a8e7cd80bad \ - --hash=sha256:828f75af2b0080c8a972e75f649ab46af008e92c6104a57a759157200b835b75 \ - --hash=sha256:83f78128fa28705fa85d01c59771c72fe81c11bd0e6155edbb9f818983a7d761 \ - --hash=sha256:876bbfd276473d3daffe30e8c975df4ed9429967b41a6cb362dbb5155b6f13ad \ - --hash=sha256:886fc26012f0e8b5f69d1cfe6d711f6b11f194621539bf8e6bb1c25c5dc82724 \ - --hash=sha256:8a34616dc2521cc8dc1d7d081734da63539f021ac0450ce950908340c6e7aa2f \ - --hash=sha256:8a708a47ade1fe19e8371d5da076bac0dd4b0a5a7985ad6c637f7f7e361b6baa \ - --hash=sha256:8af9b142ad719ae3a911ebf616bc4b78b32bbab84d6a40d3ad2f129670509957 \ - --hash=sha256:8bf4df63592c2a66b4f8edc5df2544998c288aa02f96ce0acd880cd1de8c8127 \ - --hash=sha256:8de6f2a4ce7e7bd27d23dd94abf0ccafe0e0e5cc9c764b0577191f2c25f08f26 \ - --hash=sha256:8f8fddb8e323bd6eee4e54e69a39243beab22689070f4c66b472c4cc88bb89d8 \ - --hash=sha256:8fca690b00c4c48f6c2a547b0160ed511357093a4e4c9b47e0fadf3128066d89 \ - --hash=sha256:9506e892bcc3b409831d363c6f53e5985e1c8d1f6f6b0256d00358684ff85378 \ - --hash=sha256:958254518717542d02d0688d0d20cbf771da5e415e6f49543f92481c850a4540 \ - --hash=sha256:95a02752aa032eef4aed01cda6d9b687c669bd0396bf4519eef8bba22a286720 \ - --hash=sha256:96c30002424670b5e1e46495c2b8cbffef39cf77c1d79e76462029d50339785b \ - --hash=sha256:98b208a7cc42c803445ef551d6753cc42a5ea13e9cab1ee66cd8b9cb70195330 \ - --hash=sha256:9b3092d8992a1d69b7a59c3e39f35e1b9be327a17f68a7c35fc17329e337d6f2 \ - --hash=sha256:9e51c119992ea8820706871c30a4642ec76de20ae82f9b50b9a45517d8e9f810 \ - --hash=sha256:a5716a33bfabb2c6ce27b6cf03253467b3804f83e215f4d202685cf93c6c9874 \ - --hash=sha256:a5a00665d1a0e26763a7338d7e911d4598fbc1d50dd0d6b7919b7dc6c5d6569f \ - --hash=sha256:a5ca5aebae78a0bc13c1943af4af615d4966c5b650b05d5aa83b50e427196fee \ - --hash=sha256:a7b85b2cc6ea45e5f7e8c9a30bc9fabd47cda09106cbb4b967335c3e6c43b69d \ - --hash=sha256:a83ee7107df13abe42a54a6654670eef9bb39425cf2e27f65e0007465e1286ab \ - --hash=sha256:aa7d00b1700966d2917e54d278aba86897890ca9276dd8b76cf6446b6c181b92 \ - --hash=sha256:ab620eb663952455271ac37f9aaad86b73c969c02f11f53cea405b38e96a4300 \ - --hash=sha256:ad8b9671348d7c8716715652ae11f85ed0eb99e265a2df2ca490577d69860b2c \ - --hash=sha256:aefe930d113798330e9462f7874542977869c0613cba3262e2de3a8d5dee8f3a \ - --hash=sha256:b03af77d77e50edba2030fd5f7c352ff209314b09030a3cba7c14edf9a09a444 \ - --hash=sha256:b390aec180a7c054919c04898835e1c77bced23ea8383eb2c570213bf25d1a86 \ - --hash=sha256:b3d78f7bb2b9d9a30345be1474b9aaa8685430b54afb51ba3639b5c6c11e9ed6 \ - --hash=sha256:b5664603a253efd3a75716d793d1d3a6a82723b61dc6db767b2460bbbeec4c0f \ - --hash=sha256:b69602970994a2ed8bbfa78c2f0394a7435226c6040489702d9f0a0ad0c07052 \ - --hash=sha256:b6ae6a0328f0bc035741820fdeecdcd67bf4694eee03972e843663107122f450 \ - --hash=sha256:bad20d4c69c851c982a1e3606f4c293edfd5a87885786c50082412240c4b1ffd \ - --hash=sha256:bb7c99f0673c03017a3ee01e54a5c2617a05468b11eabe513b0080e063ed95b1 \ - --hash=sha256:bebb89489b279b2f5661bbbb2abcc87bcd4a46607bb4a5c966f04f1db6b8df9a \ - --hash=sha256:bfd1de989b3330420e29de39352f5c049905c9e3ee67233a50d550e3d652c148 \ - --hash=sha256:c2306e8bb53601979fcb3fa09cc65e031876d9ae01eff2fcbcd7a84ef94d5bc1 \ - --hash=sha256:c3a4e41e3096bf1f0f1b76e2ffd6d828d6547f574f702d59bdbef7acfa59db9c \ - --hash=sha256:c6834b92dd2428e2dd85ef3d85f723d3c12f20aaf43a2ddd4f944ca25d833408 \ - --hash=sha256:c90d3022d8a94778939cda8638c6c8da8fa757b8958dad7ec868ce29c87681b8 \ - --hash=sha256:ca307d6c259e5c98d3cb9ade55342b47a6839762caf2536f3d7b46ee660cc82e \ - --hash=sha256:ca7f6fe0f37ca978a1e5eb7a3a68e6413f417e78e838324947ffd420202b198b \ - --hash=sha256:cb6fae641357ed2f6e533c0d3c6504a4a5703621a50c89459e46051d56b61140 \ - --hash=sha256:cdaeeb6c350106df6bf9d873395973e5f066a9713200b72cd64f55d0a3eafab6 \ - --hash=sha256:cea20da04494e662b83c872683bf4ff2345206043d036315ed0e924b652e7294 \ - --hash=sha256:cea90547bfd93807e0013a004dc76552be44fad3bc1cc2b38610a9e889ed098f \ - --hash=sha256:d09037ca068d784ebc4aec290ef952ca27ac15dd9c0b5801a88c6e1096b83e6b \ - --hash=sha256:d27c2123977cb9269c30a49ba45f03a4323017ef693e19db4ec9dbe1299a3002 \ - --hash=sha256:d50de98e8d807dc31822fff96f50293163a62418eb65487a21b42713d72ed0b7 \ - --hash=sha256:d66a64dd5dec136040ec2ae94aa026a912ee60fdd45bc28d3db30037fd809e88 \ - --hash=sha256:d79308fa689fac89cbcfbd4dbfc80b5f95c54c5a7fd4d194be221f9d33d026e6 \ - --hash=sha256:da3275833be0edbaf4830fae08bae3dc7219f40ce0c37eaa6c25825957e06612 \ - --hash=sha256:dc1a26b8e53395a01c2c611e58602fa47461f136fba7cd5542e6db6d64be1839 \ - --hash=sha256:dc23390afe9f4ef9ac3bcc72a03a56eebbde03f4c571a32cb38f859cff9a6524 \ - --hash=sha256:e05c2f7925f1d88778e53cb44f14e0223204a3bdd09a41664750363acfb1f2ef \ - --hash=sha256:e12dfea7f5fc2a34a9080efbf79c4c44eb380ec5b9c6fea09407e08f0d1e941d \ - --hash=sha256:e4e4523d6f336708d732516e6cfca7796cf3d96c9474eb5aecf6165f2f1fefc3 \ - --hash=sha256:e4e49f7e1a4e7191bdf9dc67a974db714501b1fc52c24324103d06a86abd5c08 \ - --hash=sha256:e68e151428b5384f766cd25739bf77c7e4a3dc93b5ded7a12118d9fbfdf78ab6 \ - --hash=sha256:e8e4d953faaded9ec7ede36824e9814082d22d4c7b1eafbfa079ecba8cd0d076 \ - --hash=sha256:ee9df1f0d77b9c6e94f4ac0fec533fbddd5ea3a327807f18d7b069ae019ded80 \ - --hash=sha256:f0a887b6565bbfe80efde2b7f6e8890d7d9bbdb11bdb17028a3690c32fe0621f \ - --hash=sha256:f0f4a42db92d6ec7677ab9d12830a2a8ec145a9c6d15db2b593466bc875c78d7 \ - --hash=sha256:f1303ef2eec81262a4b708c3e858afe58d7c75ad91c1c05266eda7673369859a \ - --hash=sha256:f1d56ec54d257d05e0b50f5780d967540cd07beeaf9e5f645b26d50cce79f4d8 \ - --hash=sha256:f4167e87b397f273dc2356fcf1eaf50a6bac51e6105f45103ef7129c8efb0255 \ - --hash=sha256:f76fc85bd054c806960f917ec0f329e24e436f1712267d90588e4c39890caa63 \ - --hash=sha256:f942903fde7363d1d879057ec5de01310efda2597161784d752fa9953a01a71a \ - --hash=sha256:f9b1c4900736e489a812c529100de4b8fb617d4db075e931e213c57424b83d9b \ - --hash=sha256:fc271a6f0a2126958f4090e5507b9da5848927dae331f8f763bd4aa642b3d2cd \ - --hash=sha256:febcce10f2bcdbb80b4ea919238a6a4ac13dbc4c7cadbe8d5d75c3682f8b5404 - # via - # -c requirements-ci.txt - # matplotlib -lazy-loader==0.5 \ - --hash=sha256:717f9179a0dbed357012ddad50a5ad3d5e4d9a0b8712680d4e687f5e6e6ed9b3 \ - --hash=sha256:ab0ea149e9c554d4ffeeb21105ac60bed7f3b4fd69b1d2360a4add51b170b005 - # via - # -c requirements-ci.txt - # librosa -librosa==0.11.0 \ - --hash=sha256:0b6415c4fd68bff4c29288abe67c6d80b587e0e1e2cfb0aad23e4559504a7fa1 \ - --hash=sha256:f5ed951ca189b375bbe2e33b2abd7e040ceeee302b9bbaeeffdfddb8d0ace908 - # via - # -c requirements-ci.txt - # semantica (pyproject.toml) -llvmlite==0.49.0 \ - --hash=sha256:00f16db782f4a13c78c5804aedc434e46794a77e89999a168f9401106270e50a \ - --hash=sha256:039fa4054a06f537fb39248d4472284ca96be311a142ec09e69f95630ab469cc \ - --hash=sha256:20496a5c9fdb8179fb9300e7d19f6782555d98aeeb4a322264aa7fd99f980618 \ - --hash=sha256:294e2f0b70aef8f92d0ae7b203e2609f08beb39437eee73de59a21669331aae9 \ - --hash=sha256:3a9c9e3af4e214acfefa4f73ebe7bc3fb35854a62b654edb3953f5ae33c08ba3 \ - --hash=sha256:4281a0171d66d2098adce4ba706b8c550b1b10718650f682d64cde16e84e4de5 \ - --hash=sha256:4b0e710880b7cc910392bd6b9f1bbf468fed99b182e4420d51598f36114b3dce \ - --hash=sha256:4ec8ad805e7515cb8440a690eb3cef4d34acb29eef80b705ec4e1c1ad3c43c68 \ - --hash=sha256:6a5b06c1b5fc4ae4c9b169b065f42b719448ef1f873687ef224ef69969b75ec3 \ - --hash=sha256:6acba646d88abbc87d5c113a3d62c1fbf8b8fee11c6493f516803e30f21ae870 \ - --hash=sha256:80a84683d04516bb51da1bbeebddaf2c2f558809c93078a8f91807909ae331f8 \ - --hash=sha256:854941c2267fd4fc5b2ce02b8af8ecdffa79fb7784591d3a89370322039ea09f \ - --hash=sha256:95d1071023ed858b79f6971954fd7cc1f5dbcbab987718a4ccbe1411e47d0b81 \ - --hash=sha256:a1b414dc6b164738ec39dd8987cea73829057b7dd92fc6d91b52838385fc1dd2 \ - --hash=sha256:a8c0fc9d624bdc30a3d2db11eb2fb98f80fb209d20b37604eda516cd9b699cf4 \ - --hash=sha256:b095f15fb12c4d90495df5b1a3772b4732cc408398b204a787dbedd370e09c69 \ - --hash=sha256:b352c14353330c879e339b8f8d7491d565fe94242697714a24e80bd757202384 \ - --hash=sha256:b541c8fac3450db7574d1f53cf9dff83f285bfed9d69bf81fe71fc2a7d4f97fe \ - --hash=sha256:be637e465010bc9c50f070468f7f1cf5385e92fee364d192dd5e6cea790ecba9 \ - --hash=sha256:d3dee64784201b64c13a8df62c48a4f4218858faaa65889866bb29bdc243c038 \ - --hash=sha256:d5555ea1d63928481cbf7fcb1d67452b216c7e5b393a4eb7aa1401e67f2a4fc4 \ - --hash=sha256:da7b64474ac15ca595efa2644d5c6836638ccf70709fad3aba3fc56a55966928 \ - --hash=sha256:ddc7aecd4f56397ed6e8f120ec5dcd5a1a8f0e6032ca4af413462792d4dca2e3 \ - --hash=sha256:e32adb84fdaae28aeb86fdb6253084ee707ee157289a2e98fe3caf48a62bee82 \ - --hash=sha256:ee81e96c15a6f870918f1eb60c913551c16aa23defb4f5f1acfa660d6a0aaac2 \ - --hash=sha256:f3f2ff0aeb17d34fcce9f79b99baac441cfd3efa41b83e233ca4530a72381f72 - # via - # -c requirements-ci.txt - # numba - # pynndescent loguru==0.7.3 \ --hash=sha256:19480589e77d47b8d85b2c827ad95d49bf31b0dcde16593892eb51dd18706eb6 \ --hash=sha256:31a33c10c8e1e10422bfd431aeb5d351c7cf7fa671e3c4df004162264b28220c # via # -c requirements-ci.txt # semantica (pyproject.toml) - # fastembed -lxml==6.1.2 \ - --hash=sha256:0349321a0537d4fdbebb2af06dd1b64676132c72e2ae250de8cdb58f8c43019c \ - --hash=sha256:04cf9e3f4ee9cab9d9ba05401bef8668840fa9620fcd4d8e85a2d2fd0b0fa960 \ - --hash=sha256:054175250531a5fb102d485743ff16412279c93add12385b3b1c3d7b16d8deaa \ - --hash=sha256:058c79e172926ef524fb3c7c6beea4b55e15886ac99cb0c139ecaac6b375f1e2 \ - --hash=sha256:0666943ee1576fa890a6dc6316ef42e8241b5dd56f67bc5475acb2ac298c6ca9 \ - --hash=sha256:074a88f70a7360a4a0c5be5d898062cd26f898c25b459efb1bdd43ae700c5a1a \ - --hash=sha256:08cd52e6487435c75f2da0a5b276beef7fed161681b93ab766e66b954f0c349a \ - --hash=sha256:08f0c9ed7cded07c5e798b17c9c25bbba5d0650c8ff0a7f65f84c634966f0f10 \ - --hash=sha256:093fbf547d0f3ca02705381f795a050fbb58988be4aac7f79f99f280c4082313 \ - --hash=sha256:0aa07065497f191ad26c4b587ce5dbb5a7105285a3789aafd0661750e8bac537 \ - --hash=sha256:1055241852f2b02068af4a625a5d32c087db193c12251928af2562ecd2239f18 \ - --hash=sha256:1133bd969f2bfcc6b0c0cf7cdf5f2631e62b23fa2471ee8bd44f6ab73554ee9a \ - --hash=sha256:11f529062255209a421ae4de5b1bb36b2f0a2e1a700745e675a4bf4084d13c00 \ - --hash=sha256:12acd337d2821cb8b9247dfe4b7aa2f2769a3df5ae8511b7e550df42b8f4d3c3 \ - --hash=sha256:12ecfea07d767f6accbf30b014e1c477b5eabb13eb4e8c748215efb52c0e314a \ - --hash=sha256:14879fa5eb2b793c040bbfcb62011aa3015c65d6c9875e063ea98ce2029d51fb \ - --hash=sha256:18467b0e9f7f0bc477df69e99829a59ae17fb37d34e5f68399371c7c67be9002 \ - --hash=sha256:1a2331da06dd55a8184985306eb2afd72d708283ce7e85d67bba77317b785060 \ - --hash=sha256:1c0173595dc1c25768f42681a1517dcfc74bb18a34695f127931cbd05f4dead6 \ - --hash=sha256:1c4c6dc1b2485aaa4adfb6ed754f90dddcb2b96a66bbebc9e1ac242b5ce5e818 \ - --hash=sha256:1d55a614d2f0457b1f7511c1b7bec0db0dcdd4af4d09d226829eb054c647527c \ - --hash=sha256:1e3c67b817867c484794d7fe0d73045d7d0c67460c78a0a1249a9e92266e6a0e \ - --hash=sha256:1edca8f4a92b94e873093df959f141d388f2141fcad0c47598442fb4730ef57a \ - --hash=sha256:1fcfe8481302e6dec07909914b8f3f9e1739ae1615209d4b9e7544325fb699c4 \ - --hash=sha256:20134744db7abcbd5232214e767814ef64e5ab57a5b7df93a2bd68b74ef0a6c0 \ - --hash=sha256:215bb3cc4be015ccac3c7d4f25eb7b941f857fe5b02c0e3504cca61f7fb12455 \ - --hash=sha256:2170d0a280c877b6e2dc6738217db947be35dd8cf09ca458b355aa1bab2a9e70 \ - --hash=sha256:2374235206ec83d4827ad219c93c0f7366b93626eab85392c0ee7c8026649376 \ - --hash=sha256:243ecef7cb7415766dd742336cd5b8361a84c6f297e2773c865b783724cbbe74 \ - --hash=sha256:261d98065326676d7253882db0198d0aa06748d7ee0443367acf10b148273f99 \ - --hash=sha256:26ff164c6629e5c4d11c9e55d5ea3d6eed0be2a420eee1f55cbce6e2c23e231a \ - --hash=sha256:2afd1688e372d8eafaa6f56c589399e0a87d086a0c110f6346b0b50f42e67e25 \ - --hash=sha256:2dcc69e307e0916c7a0b552212010938d02a664d29b6bda75ab2bc5fa487c861 \ - --hash=sha256:2e37fe49fe2d5aa40a2cb1cc8176673ad7de0d124e6f4a509d9318f5979c7871 \ - --hash=sha256:2f3194777c0d05945ac91d8594be25d2679d1d826e01e1fc90bae568ff3a547b \ - --hash=sha256:351318f5c0eb7fcab5b4fdb507c6f88fb2c4b5e67784c7e5911448c91fffb5d4 \ - --hash=sha256:351855814dec4ad55ca5f24d0f4b1cdaca7927fe48023a2965351845f3b60cff \ - --hash=sha256:3a698fad6f122a9b3e2dc2fb598c1de7329c74a67c7a334c9109a440de2508e5 \ - --hash=sha256:3be94d2464f19e42d8c39a299f356b12f2fd095c28793671eabfcd9db9c76987 \ - --hash=sha256:3e3b666f57a5d81562f38c766c762416b0f6eb58a00590546911514b48412abd \ - --hash=sha256:40366c23a938008a3bedfcfd80709b3a857c188b4d710b083e978ef5d2c1c715 \ - --hash=sha256:4303f904fb6c41b58dc70743b1d8a470aba6c9897427c48324cff1a95673ddb4 \ - --hash=sha256:442766b326d9892585a64e8c6c4b5ab81d0e6c0538c9f0fc11a84dc101a5d97f \ - --hash=sha256:446f1f92c137e0cbb97eb7e932e15315c11a7c86974f43f15e68c9707ac6a9f6 \ - --hash=sha256:4618b20f43dc98b49569b1dc822176140ea0f2598d672a6989187ba49bcbfec1 \ - --hash=sha256:4622c5616683faf63791b349e6c8dad7717412dc5f29f4febe7575f110609a86 \ - --hash=sha256:47c92dc5167de16e27ace8332454f12ba172dcab04f7a78a9eae14e2e41b6a41 \ - --hash=sha256:47e367dfe341521426692819803e260d0673899c0ff611f14af978d725e2c999 \ - --hash=sha256:48e912f37c99a297175ba955f55a47c0e1c834b506ef162e52a6e4fe276e6e45 \ - --hash=sha256:4a16457e330b7099aa5a8e8bfa5d53a33a1672a819fa656157e9e6dc433ac7a4 \ - --hash=sha256:4aced3284e0353c798b060fe2c175eb81410e99b9a7e2ae6951be5333732b111 \ - --hash=sha256:4b0fa7109b1d0bc1747d8241a0853e135eefb1c978685241b544c46937383efd \ - --hash=sha256:4bf14db2f0214003ec7f46c4300e2065668fc93e20448c1c95bac2e952072168 \ - --hash=sha256:4e220a9c297e5d36895d489a08c9a3f1f6193b6414e702c5fb751e4a3767f8d0 \ - --hash=sha256:4f4d2c36fd5997d30ff19c29fb93293401d0daaf87512297d47610e6883964b5 \ - --hash=sha256:5078ff51e6316c0f75ea8127c2cd24374747fb351f62fb93d1761f8ae5a04a40 \ - --hash=sha256:50ee0c360862f4152db835b456e38614f94b674bca2a47bc8de7171ee6ccbbb8 \ - --hash=sha256:522387e05cd015a81d1dc621fb167fb42b8f629ccd2e8b39de583828f165aae6 \ - --hash=sha256:5295205fd57510c19a0e46385b516119f3a781d45c2672159bce02949238981a \ - --hash=sha256:52f6d4dff133c9778a24e9a2cfc1608930b15869866171aacc5131b5a418a003 \ - --hash=sha256:57188e441ab24f906bd5a5c14eb55363ab51aa6c0de549f3dd320043721cc118 \ - --hash=sha256:575fef7f30048b744dffb3e4ff64a18cac7dba3fd26efdea5730ade9d1bdeb33 \ - --hash=sha256:5848f3de6a8de8a93cff9f068134393ff5fa69ac2a04399f7d49cd67c61c348c \ - --hash=sha256:5a096d6a5f96b776a5b020cb45c17c545effd2a3b6639e6fa97bc95537600923 \ - --hash=sha256:5c2bae42b3a09f977330a08f4a8fe72aec58c4bdb89069d3fe7272a71d885881 \ - --hash=sha256:5d78ba560f3dd404d87b1fcc89b2b382d638ea2998431a3b2e5cda0f3ba2da91 \ - --hash=sha256:604f4778632588d7c000e7e19430639dc12fca58b5b6e99edffba7631725ef0e \ - --hash=sha256:614d4c5a34556e369b86cfcc8d0cf71cd0759a3444a464a07a9427ab0f5e3a99 \ - --hash=sha256:6330cf0ce83f6273ad8ad99bdd25d6ebb3863912f9ac717f96bc8942706e0e26 \ - --hash=sha256:633ac039cb32366dd5935868e041e385875c017b8cd54ea56aeee3fe29ca5935 \ - --hash=sha256:6454d184d556eaf4cb3d6f69e405d21602d6fdcf08b8d57796824275986c6595 \ - --hash=sha256:648861c19b775b89ebefa14586f85090b10163367476d77f242c4131c835ce73 \ - --hash=sha256:65c32ddc5d0750129c7b119fb57d48192b76d334c21e6b690d19dfb06b34af79 \ - --hash=sha256:662432a6103e671d971e06e75ed146d9ff67f39d2c98c2f26613b6057f54eafc \ - --hash=sha256:678e35f1cbca98f55107511ee21a60568535c950f3c2371819bd64504c980d20 \ - --hash=sha256:69df1856cb6c065e5bfd23adcc7408bfa6dcf32b0018373a99b0769bd86e2256 \ - --hash=sha256:6c9cc4b6532abe154dbdebb42aaba8d52c852919591e45067f5b7d46a0405e88 \ - --hash=sha256:6cb0c87421946030b92b558be416852780a912454e3dcba0998e4497c9c588d5 \ - --hash=sha256:733dfb492ec3dfef8350a5cc896e90d202c5171e791e1609e77563751d69a15d \ - --hash=sha256:75530642d8471327e691ab9b0513a5f9c77f38871014ceda40f51bb51765c0a1 \ - --hash=sha256:7766e525282dd38fd89567311323e441996eb958e8e816d16b38f782e3aecd2a \ - --hash=sha256:785761d5123f222cd97f2263a510107226fe32ce7aa7824a90616a41c574ace1 \ - --hash=sha256:79b428c3242e63bdacf3b526a34e0b8b26583846fc597da84b8f0c3d5ea446b2 \ - --hash=sha256:7c444c3a6e8e75334879980eed96568f0e12064c8b1913424eac1805e976736b \ - --hash=sha256:7c482e87cc86bed78a50462560675bc2c348ef72c47596f9b933346d5a8e920e \ - --hash=sha256:7c534ed898413f439b048130011e99a4245ee13d62d431f6b4f7f2484d02a93a \ - --hash=sha256:7c687fd8e558c7d169f6f1987b696f37824d3a097f291bffd0ab4a2ea2307dfb \ - --hash=sha256:7d506bdba580ecb1a6ad2e2b5c49445e66d3e1f95894885739094393a1aad237 \ - --hash=sha256:7e81fc065ede5d58dd0bf0912025aee1bd04c52c2affd61fdb93226a97ce2fc6 \ - --hash=sha256:7f35ba7667004ecdafebbe08da7c9fa06ee6195275bb7ef7a29ee1901e69519c \ - --hash=sha256:7feb72424f19a893ae4f3373c7aae821b1aacb6076b708915c651f0683a97c49 \ - --hash=sha256:822d9397033edbe530a13bb1e0091c0e817536b6aba87a9b4ad626ed779ca0bd \ - --hash=sha256:827438bf6c8292d22a409bb7990d7cffce410f33e7664e46ca74d2ecc26975ef \ - --hash=sha256:83e7510a6dda8df41d1b68b783de2953b3feb55a11dcebf693201ebaa5cc0c4a \ - --hash=sha256:841630176c15fa5d3c5cd6f755435d3c5540a82e1dd2a7de1799401f92ee6d24 \ - --hash=sha256:84a2a46b93b789d8acb44cfcb3d967ce9dbe29884ddb93fbb1a33f0e0c8fcd86 \ - --hash=sha256:8512b3775d68994dd1d6d533161e0a214f2ad9c634659d34a99c98e86c6c3d68 \ - --hash=sha256:85690cfc8ed54c4292e36a08bcf984dde7957e653fd6d94f59184244bcc35843 \ - --hash=sha256:86d93dc3882c283e9aa2124d7d2b50c85579485216a2b3b7f91ba479e31a128f \ - --hash=sha256:87534cec6ea325435e4adf2326b0cf3110eee9a47abf73652eb155db639c08c6 \ - --hash=sha256:878e7c8ada8f92c52f13f35a2ab98ef0adf7fd0211d164fc2af589e4c3cfed63 \ - --hash=sha256:87e9673cd8a3445024fe38e7f91b55fa3428437eec9b7a7ff7d81979520c0d2d \ - --hash=sha256:8807998c1023d1e9d60e02500f90e85a0752dbc0b670989806bba87b82dd5b42 \ - --hash=sha256:8b68f2548259bb04e0b3d5df0c397abe8b0080f5e1ffe4019fb7a8bf01a9339e \ - --hash=sha256:8e613018a5ac66de7abaf1acaae0d7af37a5e1b9bf1ae190a1198b0fdb988ad8 \ - --hash=sha256:8ec111ff8067325f85c08aa9c2b26179ec0537bb89c003fde31127139f85f82d \ - --hash=sha256:8ffb17ec0a8bae18b6628ae40b0896eb264dd285e39a0faa864965c00933b64c \ - --hash=sha256:9031f5f01452681abf39fdd65f84a70cb01a7572a1bbf570042e826b1232d07b \ - --hash=sha256:9088da25ecd609965f838d89fda0465a905b48f4dd90331db9845518f2177372 \ - --hash=sha256:9221442682c27417f10fe11184ea4cce174b25ab52465570b1f3ee3f85f320fa \ - --hash=sha256:927f3e1d04dc0906265fc0416c13500363e42cd683bbb8d46911c79b73d26800 \ - --hash=sha256:92c2b366028ac01e90399e6d17734ce6e4f4aeddd8ba75fbaf80ea11d6c6d645 \ - --hash=sha256:94162456ed0a64fb1c06915df5bd06af4675ae3966d6048fcb73b0906e0e0222 \ - --hash=sha256:9429d2371d406344ed1da5b5686d9412e74137c07b0171278368ff704f470ed5 \ - --hash=sha256:9477e14217c212e6023c994a71a1a349db19b0e10fd5bf189666b281ae63b1fd \ - --hash=sha256:962c12b51d0b164f12569af225dea57568477e24a845b96eaccbef6c07e4cc03 \ - --hash=sha256:9b52ea73a37fc64aa3357ff8607801d46dd170506d3cf8253a91a1d91639d4f9 \ - --hash=sha256:9bdc2db9e04538f917bba0242920764dd740649d8df58700d6d687ead4429429 \ - --hash=sha256:a02164a8cd3e2dc028918e51af844c934c7a24a0b8f4064368360aa14ad1aac4 \ - --hash=sha256:a2b7fe53abced1fe8bd984a9ab3c8c98bc093ec4f9f543089a8817a493818208 \ - --hash=sha256:a5005c0c9e4d749a76a2ff8bd5918a8bb248df8e08e73a55654b9f79c9cd1e2b \ - --hash=sha256:a7fd1dd6faa3df9dcd8f1765237362cd885ca62cdf77a7c5f5ea383ae5b6048b \ - --hash=sha256:a8326e24ae6c3a6bfb03fa8b4793f9a5d804c125228aa067f652b0428e31b87c \ - --hash=sha256:aa224ecc613d411690aa650dbf01daafbe385cd6c67145e80bc5fc01b3a71469 \ - --hash=sha256:adbecbfe44a497c742792457b1c27300617967c18c3934d2416023eba8d8c553 \ - --hash=sha256:ae520f189895c5dd7eeb2b7a372d464da6f4a1ba1d0ecb741b1d4fe4c1f699ac \ - --hash=sha256:aea814342f6afd20d832937ff8b333cd6506428a39c0c4c70c2380aab1887bfb \ - --hash=sha256:aebcc6b184c935e1f7091c09124cfe5107b7c2253894ba23ad646828c17e4c3b \ - --hash=sha256:af6585a466cee2c5a524f7fffc591844bd604a29fdd9cade964f548512b5ef7e \ - --hash=sha256:b1c0d2dde8a50520efc51644587f0fc4810e3af7d3e029d7af0be93bf39e2b5c \ - --hash=sha256:b20440e578d269c5e8a722ab602ddd0f0cedb8b080006b3f936da9991a593d3b \ - --hash=sha256:b28842b30c4bc2e6afe137d98a5d2071a62589471e76d053bea55b0e53298af9 \ - --hash=sha256:b3ca02ef3b5920b88119c82eb6badfb2d082b1f681d528a856dcce17c8706da8 \ - --hash=sha256:b3db5497af55f7a557c95265dd3b91c75dc56364a7b59f258c45fa5576dce058 \ - --hash=sha256:b631174cd2e4d9f8a94ef17f911c6ded10ede93b5e7860dee7bbf85961d321e9 \ - --hash=sha256:b7233a987a101bdf79059014130262a01339094a0a709f175162542f33b55d4e \ - --hash=sha256:b97153ca609b434b712ddfb92cd6af101a7045a7724c542258bd4727a344472f \ - --hash=sha256:ba0dfead73be5be9ad0b7fbf9f31ff29c1b1eae858816dfc8d85099d6e4af0d6 \ - --hash=sha256:ba58574d710b82ead7cbedea01cac3e110bc3ef82d4731519b74a2c11f7cf5e9 \ - --hash=sha256:be365ce8d2d411cf2fb573747684b4fd470fa6224e0094d9d5a21155acc369d3 \ - --hash=sha256:be6f87cd224254a8f81324e34cc655508b83f1d70458a1a39857ad2aa9925852 \ - --hash=sha256:bfcbee8ffff4188f4c6d97eceeff36d8eb983cf838933cbc12ce5f5dd51476c6 \ - --hash=sha256:c0edde95e4b4278dcc0175eda06dc8aa2631ad9f83ae5dbdbc4f0925e200b0b0 \ - --hash=sha256:c20fa05d128c463209ef5323ebf33ee1cac6d87cdc3933fd789fd3c101017c8e \ - --hash=sha256:c470d192e27f97842a068cf12a1c1296b20ca716c56a9249715c6654bc192d19 \ - --hash=sha256:c67f3c1278f942e97d8665c2a690324aaea5137de16f056583a21f0ac706177f \ - --hash=sha256:cb0cf498efa3204621b3c5576f0accd80ad2ee85575f1cae5d2f98de32c8d9cc \ - --hash=sha256:cdd35422de747237f451e821766e2b6be3dd2c31955c1ecd7f17984c5b9bb62d \ - --hash=sha256:cde6b8db7d2e5135129eb5e74b7b44dd2053aa767cd5023541fccedddc262453 \ - --hash=sha256:ceafa5e0536c62a5cd9f65327fa0b57d6f0b0e3435daf2c98a78d0dde7ecbae1 \ - --hash=sha256:cfeac14425fc7a6fca7864b774d4ee63547926158f4a18c67d77b2c9a948acf1 \ - --hash=sha256:d0bfd719c254bbe60ea022cff0e6ffb799a6fa7d4d72852cebe0257957b32d68 \ - --hash=sha256:d117f39b28ab8a330a74abdbe61c2255b51973b238db25fd6c2448de1eb2a02d \ - --hash=sha256:d3e97ac4353cca3fbbfa829bc0c6a913771573d1c6d46932d4335c46f2b7796a \ - --hash=sha256:d50a44113fe6800dcc8a859332b823a4735b1e6ae1b0063882e4cca569ec3e29 \ - --hash=sha256:d858e718b94033ab4b67e4a58fe3114c65bae01ae2314a62fb39ae8897ed4324 \ - --hash=sha256:d86130d70a2557cdf825dffc56255f1f16b83a7bbeab677b4cd040c4c53d8c52 \ - --hash=sha256:da6a4f55f0e3308c07354b1ee239c5550afc212f81629a6067db505ace3b667a \ - --hash=sha256:dd7ea3fa47154b9fff90591b961e41b3718bd7fcd5bc2d9bb47e9845c8ace088 \ - --hash=sha256:e062f5ac1255dfa6c98e3e3863ec18bc79d0947d22d08921a3ca60cee40559fd \ - --hash=sha256:e17e2c30e27f56da5551e7a425888b45f013e940b99ab07d125a1c33f77a4605 \ - --hash=sha256:e7269cc410f3cdf84a66914fc0ef54b1618115c87fb4f9a59a05c5dfc23bece1 \ - --hash=sha256:e8b9a92652e75e7731309ea51db5dee892eef414ce70a6ec3441e5d36bf5189f \ - --hash=sha256:e8dc3d29f2ed2bbf24c205a86326d6681230ace55abfb3f9d5230f42078ad63d \ - --hash=sha256:e92e4419cad18d60b14bf18b82152fbae67f4b1128be7d73b172df275554f5d9 \ - --hash=sha256:ec8d09f460fdeb65f9ead9b75941e312def4bcbb23e1f951b7def061eb99501d \ - --hash=sha256:ee23f6599682bd4d48bb757c0633e78774eedfb65a7e52851f9ad182eeeb625e \ - --hash=sha256:ee7410c98222070fd717ad881ee2a80cc11826b7001b9a5a807155d8918bfc7a \ - --hash=sha256:ef0b8ba6e13597f681b2b4924ca9c4e8c88420bf0e21d9a9006c757f2fc39d1f \ - --hash=sha256:eff128ffdc093cc6317955934ad9751105d37ed8dbca3ff4ccd751af6be37185 \ - --hash=sha256:f16a407766bac51c65d605b06d900821751a79aa20e12185f273f14a17180e7b \ - --hash=sha256:f86e23ed610727a7f025ebbff788f22a7956d3f1b24a25bb1d9286fc7b7642b0 \ - --hash=sha256:f8b89b3be75a37509602b03f9cfa1a28298d4eed4625748148307aeb907901b7 \ - --hash=sha256:f93bc5e25992f5545709000d840c6cafdbd022781a7a0ed79d58a5633733a4e8 \ - --hash=sha256:fa813b0247d0543a563b993ac3dba6168eef59e3a61448432cf5453300c2412b \ - --hash=sha256:feda2ef68c339987dfb370af3a4b785dbc40f925723fe2365e68e43c2640f85a - # via - # -c requirements-ci.txt - # semantica (pyproject.toml) - # python-docx markdown-it-py==4.2.0 \ --hash=sha256:04a21681d6fbb623de53f6f364d352309d4094dd4194040a10fd51833e418d49 \ --hash=sha256:9f7ebbcd14fe59494226453aed97c1070d83f8d24b6fc3a3bcf9a38092641c4a # via # -c requirements-ci.txt # rich -markupsafe==3.0.3 \ - --hash=sha256:0303439a41979d9e74d18ff5e2dd8c43ed6c6001fd40e5bf2e43f7bd9bbc523f \ - --hash=sha256:068f375c472b3e7acbe2d5318dea141359e6900156b5b2ba06a30b169086b91a \ - --hash=sha256:0bf2a864d67e76e5c9a34dc26ec616a66b9888e25e7b9460e1c76d3293bd9dbf \ - --hash=sha256:0db14f5dafddbb6d9208827849fad01f1a2609380add406671a26386cdf15a19 \ - --hash=sha256:0eb9ff8191e8498cca014656ae6b8d61f39da5f95b488805da4bb029cccbfbaf \ - --hash=sha256:0f4b68347f8c5eab4a13419215bdfd7f8c9b19f2b25520968adfad23eb0ce60c \ - --hash=sha256:1085e7fbddd3be5f89cc898938f42c0b3c711fdcb37d75221de2666af647c175 \ - --hash=sha256:116bb52f642a37c115f517494ea5feb03889e04df47eeff5b130b1808ce7c219 \ - --hash=sha256:12c63dfb4a98206f045aa9563db46507995f7ef6d83b2f68eda65c307c6829eb \ - --hash=sha256:133a43e73a802c5562be9bbcd03d090aa5a1fe899db609c29e8c8d815c5f6de6 \ - --hash=sha256:1353ef0c1b138e1907ae78e2f6c63ff67501122006b0f9abad68fda5f4ffc6ab \ - --hash=sha256:15d939a21d546304880945ca1ecb8a039db6b4dc49b2c5a400387cdae6a62e26 \ - --hash=sha256:177b5253b2834fe3678cb4a5f0059808258584c559193998be2601324fdeafb1 \ - --hash=sha256:1872df69a4de6aead3491198eaf13810b565bdbeec3ae2dc8780f14458ec73ce \ - --hash=sha256:1b4b79e8ebf6b55351f0d91fe80f893b4743f104bff22e90697db1590e47a218 \ - --hash=sha256:1b52b4fb9df4eb9ae465f8d0c228a00624de2334f216f178a995ccdcf82c4634 \ - --hash=sha256:1ba88449deb3de88bd40044603fafffb7bc2b055d626a330323a9ed736661695 \ - --hash=sha256:1cc7ea17a6824959616c525620e387f6dd30fec8cb44f649e31712db02123dad \ - --hash=sha256:218551f6df4868a8d527e3062d0fb968682fe92054e89978594c28e642c43a73 \ - --hash=sha256:26a5784ded40c9e318cfc2bdb30fe164bdb8665ded9cd64d500a34fb42067b1c \ - --hash=sha256:2713baf880df847f2bece4230d4d094280f4e67b1e813eec43b4c0e144a34ffe \ - --hash=sha256:2a15a08b17dd94c53a1da0438822d70ebcd13f8c3a95abe3a9ef9f11a94830aa \ - --hash=sha256:2f981d352f04553a7171b8e44369f2af4055f888dfb147d55e42d29e29e74559 \ - --hash=sha256:32001d6a8fc98c8cb5c947787c5d08b0a50663d139f1305bac5885d98d9b40fa \ - --hash=sha256:3524b778fe5cfb3452a09d31e7b5adefeea8c5be1d43c4f810ba09f2ceb29d37 \ - --hash=sha256:3537e01efc9d4dccdf77221fb1cb3b8e1a38d5428920e0657ce299b20324d758 \ - --hash=sha256:35add3b638a5d900e807944a078b51922212fb3dedb01633a8defc4b01a3c85f \ - --hash=sha256:38664109c14ffc9e7437e86b4dceb442b0096dfe3541d7864d9cbe1da4cf36c8 \ - --hash=sha256:3a7e8ae81ae39e62a41ec302f972ba6ae23a5c5396c8e60113e9066ef893da0d \ - --hash=sha256:3b562dd9e9ea93f13d53989d23a7e775fdfd1066c33494ff43f5418bc8c58a5c \ - --hash=sha256:457a69a9577064c05a97c41f4e65148652db078a3a509039e64d3467b9e7ef97 \ - --hash=sha256:4bd4cd07944443f5a265608cc6aab442e4f74dff8088b0dfc8238647b8f6ae9a \ - --hash=sha256:4e885a3d1efa2eadc93c894a21770e4bc67899e3543680313b09f139e149ab19 \ - --hash=sha256:4faffd047e07c38848ce017e8725090413cd80cbc23d86e55c587bf979e579c9 \ - --hash=sha256:509fa21c6deb7a7a273d629cf5ec029bc209d1a51178615ddf718f5918992ab9 \ - --hash=sha256:5678211cb9333a6468fb8d8be0305520aa073f50d17f089b5b4b477ea6e67fdc \ - --hash=sha256:591ae9f2a647529ca990bc681daebdd52c8791ff06c2bfa05b65163e28102ef2 \ - --hash=sha256:5a7d5dc5140555cf21a6fefbdbf8723f06fcd2f63ef108f2854de715e4422cb4 \ - --hash=sha256:69c0b73548bc525c8cb9a251cddf1931d1db4d2258e9599c28c07ef3580ef354 \ - --hash=sha256:6b5420a1d9450023228968e7e6a9ce57f65d148ab56d2313fcd589eee96a7a50 \ - --hash=sha256:722695808f4b6457b320fdc131280796bdceb04ab50fe1795cd540799ebe1698 \ - --hash=sha256:729586769a26dbceff69f7a7dbbf59ab6572b99d94576a5592625d5b411576b9 \ - --hash=sha256:77f0643abe7495da77fb436f50f8dab76dbc6e5fd25d39589a0f1fe6548bfa2b \ - --hash=sha256:795e7751525cae078558e679d646ae45574b47ed6e7771863fcc079a6171a0fc \ - --hash=sha256:7be7b61bb172e1ed687f1754f8e7484f1c8019780f6f6b0786e76bb01c2ae115 \ - --hash=sha256:7c3fb7d25180895632e5d3148dbdc29ea38ccb7fd210aa27acbd1201a1902c6e \ - --hash=sha256:7e68f88e5b8799aa49c85cd116c932a1ac15caaa3f5db09087854d218359e485 \ - --hash=sha256:83891d0e9fb81a825d9a6d61e3f07550ca70a076484292a70fde82c4b807286f \ - --hash=sha256:8485f406a96febb5140bfeca44a73e3ce5116b2501ac54fe953e488fb1d03b12 \ - --hash=sha256:8709b08f4a89aa7586de0aadc8da56180242ee0ada3999749b183aa23df95025 \ - --hash=sha256:8f71bc33915be5186016f675cd83a1e08523649b0e33efdb898db577ef5bb009 \ - --hash=sha256:915c04ba3851909ce68ccc2b8e2cd691618c4dc4c4232fb7982bca3f41fd8c3d \ - --hash=sha256:949b8d66bc381ee8b007cd945914c721d9aba8e27f71959d750a46f7c282b20b \ - --hash=sha256:94c6f0bb423f739146aec64595853541634bde58b2135f27f61c1ffd1cd4d16a \ - --hash=sha256:9a1abfdc021a164803f4d485104931fb8f8c1efd55bc6b748d2f5774e78b62c5 \ - --hash=sha256:9b79b7a16f7fedff2495d684f2b59b0457c3b493778c9eed31111be64d58279f \ - --hash=sha256:a320721ab5a1aba0a233739394eb907f8c8da5c98c9181d1161e77a0c8e36f2d \ - --hash=sha256:a4afe79fb3de0b7097d81da19090f4df4f8d3a2b3adaa8764138aac2e44f3af1 \ - --hash=sha256:ad2cf8aa28b8c020ab2fc8287b0f823d0a7d8630784c31e9ee5edea20f406287 \ - --hash=sha256:b8512a91625c9b3da6f127803b166b629725e68af71f8184ae7e7d54686a56d6 \ - --hash=sha256:bc51efed119bc9cfdf792cdeaa4d67e8f6fcccab66ed4bfdd6bde3e59bfcbb2f \ - --hash=sha256:bdc919ead48f234740ad807933cdf545180bfbe9342c2bb451556db2ed958581 \ - --hash=sha256:bdd37121970bfd8be76c5fb069c7751683bdf373db1ed6c010162b2a130248ed \ - --hash=sha256:be8813b57049a7dc738189df53d69395eba14fb99345e0a5994914a3864c8a4b \ - --hash=sha256:c0c0b3ade1c0b13b936d7970b1d37a57acde9199dc2aecc4c336773e1d86049c \ - --hash=sha256:c47a551199eb8eb2121d4f0f15ae0f923d31350ab9280078d1e5f12b249e0026 \ - --hash=sha256:c4ffb7ebf07cfe8931028e3e4c85f0357459a3f9f9490886198848f4fa002ec8 \ - --hash=sha256:ccfcd093f13f0f0b7fdd0f198b90053bf7b2f02a3927a30e63f3ccc9df56b676 \ - --hash=sha256:d2ee202e79d8ed691ceebae8e0486bd9a2cd4794cec4824e1c99b6f5009502f6 \ - --hash=sha256:d53197da72cc091b024dd97249dfc7794d6a56530370992a5e1a08983ad9230e \ - --hash=sha256:d6dd0be5b5b189d31db7cda48b91d7e0a9795f31430b7f271219ab30f1d3ac9d \ - --hash=sha256:d88b440e37a16e651bda4c7c2b930eb586fd15ca7406cb39e211fcff3bf3017d \ - --hash=sha256:de8a88e63464af587c950061a5e6a67d3632e36df62b986892331d4620a35c01 \ - --hash=sha256:df2449253ef108a379b8b5d6b43f4b1a8e81a061d6537becd5582fba5f9196d7 \ - --hash=sha256:e1c1493fb6e50ab01d20a22826e57520f1284df32f2d8601fdd90b6304601419 \ - --hash=sha256:e1cf1972137e83c5d4c136c43ced9ac51d0e124706ee1c8aa8532c1287fa8795 \ - --hash=sha256:e2103a929dfa2fcaf9bb4e7c091983a49c9ac3b19c9061b6d5427dd7d14d81a1 \ - --hash=sha256:e56b7d45a839a697b5eb268c82a71bd8c7f6c94d6fd50c3d577fa39a9f1409f5 \ - --hash=sha256:e8afc3f2ccfa24215f8cb28dcf43f0113ac3c37c2f0f0806d8c70e4228c5cf4d \ - --hash=sha256:e8fc20152abba6b83724d7ff268c249fa196d8259ff481f3b1476383f8f24e42 \ - --hash=sha256:eaa9599de571d72e2daf60164784109f19978b327a3910d3e9de8c97b5b70cfe \ - --hash=sha256:ec15a59cf5af7be74194f7ab02d0f59a62bdcf1a537677ce67a2537c9b87fcda \ - --hash=sha256:f190daf01f13c72eac4efd5c430a8de82489d9cff23c364c3ea822545032993e \ - --hash=sha256:f34c41761022dd093b4b6896d4810782ffbabe30f2d443ff5f083e0cbbb8c737 \ - --hash=sha256:f3e98bb3798ead92273dc0e5fd0f31ade220f59a266ffd8a4f6065e0a3ce0523 \ - --hash=sha256:f42d0984e947b8adf7dd6dde396e720934d12c506ce84eea8476409563607591 \ - --hash=sha256:f71a396b3bf33ecaa1626c255855702aca4d3d9fea5e051b41ac59a9c1c41edc \ - --hash=sha256:f9e130248f4462aaa8e2552d547f36ddadbeaa573879158d721bbd33dfe4743a \ - --hash=sha256:fed51ac40f757d41b7c48425901843666a6677e3e8eb0abcff09e4ba6e664f50 - # via - # -c requirements-ci.txt - # jinja2 -matplotlib==3.11.1 \ - --hash=sha256:0c1f44890d435c1b4ef52f701ad5828cb450ea97bcc83918fda6be74965d6cd2 \ - --hash=sha256:11664c551345553db92e61cae6cf1376f138f8c47cafdf13b64b18f3e3e9e464 \ - --hash=sha256:1524e2bdd48a93557aa47ddcfe9c225dfdd57d5a01a5c49128c20f0632980ee1 \ - --hash=sha256:191163532cdefcb1571ca38a6d7e6474baccde64495783e6ba47aa07ec4b9bbb \ - --hash=sha256:1ac697e591c11b6ad04679a73c2d2f9980fe9d9f0311fb414a2e329706343dfb \ - --hash=sha256:216fbb93a74add02ddb4cb38ef5348f59ac00b3e84567eaf16598772d40e150a \ - --hash=sha256:21a67b961a6d597bca54fae826cd20695ba4a6e4d05424a08da6e13e3176fd6b \ - --hash=sha256:2abdee5ffa2fe11b2d19f7a5c63b785fb7c28cc46c7bc1814156341d9d1a33e1 \ - --hash=sha256:30c492d4ba9448595b6fd8708c6725963f8148e25c0d8842948da5b05f0ee8d3 \ - --hash=sha256:3d3fd84082b1afbd9398466c81309e20045be20d48fe0fb18c43504d164cbbb2 \ - --hash=sha256:427258425f9a3fc4ed79a91f9e9b9aaf5a82cb6571e85dc14063cc6fbb993741 \ - --hash=sha256:480194afceca4df2f137c2721227d3cba67121fbf4397b69cee7f83714b0a58a \ - --hash=sha256:54d47b8ae8b579633a3902ca5b4ad6c1e132a5626d64447b2e22a66394e79987 \ - --hash=sha256:5af0dcda57d471440a7b5b623e70e0a61003518443d9098f211a96ecfbbc25be \ - --hash=sha256:5e1f8922ba31959cf6a9dfb51be64b7f7bc582801a3957dc0c2f3afcd3537adf \ - --hash=sha256:5e510088c27a89d53580a752f959146893563e63c330e161d159b0fee652af6f \ - --hash=sha256:6771b0cd7838c6a857a7209814158c0ad09bfef878db3033dd82d70ad101f191 \ - --hash=sha256:67e4c3cd578c65ebd81bdc09a1b6592ceafee6dfafe116dc85dfcb647b5bbb18 \ - --hash=sha256:68408341f2312836fbbdf6b3c78047f65b2d8752f5fd221c3e72d348f5b34f8b \ - --hash=sha256:69647db5746941c793d6e445a4cd349323ffb87d9cc958c2ad84a659b4832d30 \ - --hash=sha256:6be943cb68bc6660ead58c55b3aa6366cba2ef7feb06460fbcce32360376f19f \ - --hash=sha256:7389b77ed2ab0552f46d9a90b81b7b8e6dfcdc42adc36c37a0865799843e0e3e \ - --hash=sha256:7f33a781e12b1e53b278deb2f5373c2e55ec4f10727be3440c0cfb5cda9f944f \ - --hash=sha256:83235693abde86e5e0129998f80ee39fc7f58e6d56a88fafb28a9278833e9d5f \ - --hash=sha256:88a2a27dd9691ae448dfae4b26f59036be90c3c28757edd3553a29559d00859f \ - --hash=sha256:89b193b255f4f6f7948dbcee3691f4f341ab05d9a8874a67b45ddb4182922eda \ - --hash=sha256:8b14eb22961fe865efb0e4ff167e333e428908b00115a8d800ccb65ee108e481 \ - --hash=sha256:9601a1e90be21e4884c53b4f3dc3ee0544654946f9975258d691f1c2e2f119c6 \ - --hash=sha256:96f4bdeea33a8d15a071dbfe6d119451b1d719c733ac666d65357082901a9099 \ - --hash=sha256:9a076f4fc5cdc43fdf510f5981418d25c2db4973418d9f22d8bb3dc8045ada78 \ - --hash=sha256:9fdf1c818ab05d0e74002091ddaf414478a3a449ec9d51c8976d45be7e3a01e2 \ - --hash=sha256:ac104be2768ffdd8655db9e71b768cbb45f2b9aa7b450cf1595e8f65d3822319 \ - --hash=sha256:ae30c6109848ac0f9fa36c5d6270938487614c47ba31860bd5361266dabc5685 \ - --hash=sha256:aee55e9041211bf84302ab55ec3965df18dd90ae19f8b58332a7feaf208bfe83 \ - --hash=sha256:b0a19dcf73406d3746d25a5ed42d713604c9a3e024d129b102852b0d941cb9f3 \ - --hash=sha256:b4c78ceb2f11bcac7389d305cda17aeb1f4586a857854ab5780bd3dd8dbfc407 \ - --hash=sha256:b7cf158e7add54a8d51ac9b5a84abd6d4e13ed4951b4f25f1c5139f41c2addb2 \ - --hash=sha256:b937b9dba5f5f6c1e31c47abe2186c865c0914fd18f2ce0dfc39c9adcef5951d \ - --hash=sha256:ba8f811b8ddfac493734d6af0b2dff96919d0c28ca0d641858dab4262777c6ea \ - --hash=sha256:c52f7ad20ef476806ed212380b1d54d20310c8b86bdc2c9a68b51f0024a44472 \ - --hash=sha256:c90be0b73568da4f662afac580956a76e308437e641b4a45aa08925eeb67d95f \ - --hash=sha256:d2ace7273b9a5061a3b420918a16fae1f2dc5dfee1abcc13aba71b5d94b1820c \ - --hash=sha256:dadfe80797174e2984aae3be0b77594a3c72d2c0a40fbd4a0de48d2728caf3ae \ - --hash=sha256:e15ef41507f3d525f46154ac9e3ae785dacde9f20e593a25de8986267892ef74 \ - --hash=sha256:e4b9ac2f1f607ecda2af90a5232beee2af7582fce1cc30c4b6a1b012dc21ee99 \ - --hash=sha256:f2912f647f3fbe1ccf085f91e213936f9101bead81a5e670565b1f1b3712f4fb - # via - # -c requirements-ci.txt - # semantica (pyproject.toml) - # seaborn -matplotlib-inline==0.2.2 \ - --hash=sha256:3c821cf1c209f59fb2d2d64abbf5b23b67bcb2210d663f9918dd851c6da1fcf6 \ - --hash=sha256:72f3fe8fce36b70d4a5b612f899090cd0401deddc4ea90e1572b9f4bfb058c79 - # via - # -c requirements-ci.txt - # ipython mdurl==0.1.2 \ --hash=sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8 \ --hash=sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba # via # -c requirements-ci.txt # markdown-it-py -mmh3==5.3.0 \ - --hash=sha256:00105934e7d52f80b4364282918c37e2cc3cf9868ef4052016cbc39d8711c3f4 \ - --hash=sha256:002414b951d980072a90dc25e84fe41570e399503c9db46a45edf61c7f0bd3bf \ - --hash=sha256:045b44b299a658f02dfb43db4037437c66290f6d00984992030648b8ffc230d0 \ - --hash=sha256:060888503ab547f4700e93d13f45ee0d7633f5196028529c1e98c27d5b31520d \ - --hash=sha256:0619b41fc524c0e1bda7b29e47a9cdb4746be3ebd9413798f82c024894283d47 \ - --hash=sha256:0a301b316198758aabbfa3ee565e221b757645d9f94b8a9d2889bfefabbb77dd \ - --hash=sha256:0a6bd95c410ec9500d9515a4fe522e24452f71df38de47395f99aebc085a5d5a \ - --hash=sha256:0d8deb73a11a7b41bb831bc1c40fb9a70d9993d96dbfe82c0d3c6fb3acbe14ea \ - --hash=sha256:0e23bb59643dd36cfc1b5b6f32ca494dcb798f46281f2fa4561d34e7de777a24 \ - --hash=sha256:10508e24e01f6b52c91577e22c4466d703c2c696d34fac1a9048e0da837a1a1c \ - --hash=sha256:1232c5667aaa2f1f77096d94dc0019ceb7ace106e9066b66d28773c4226364b0 \ - --hash=sha256:1617be1ce93f97513bbf23cafa28a6ab1d20b0928de760054a4c603a89bdab7c \ - --hash=sha256:166e3c09c56e980bfef1ee4fe4eded81d544615359eb92fb7ccda8c96f5d9538 \ - --hash=sha256:1b51409765cbec88396b7a47d87220f9a34112c74a8d0db3ca2551941f023c74 \ - --hash=sha256:1d5cd932e6e44762e393570299d50c719c91f3610e33da4bc82578bcdd039c29 \ - --hash=sha256:1d5de36640293374673ec6813b7a23d8a9621bbd87f079c6ec4c5e8585cb1f64 \ - --hash=sha256:1e2cc33121171b1e4657146bfdaf77eb135787465f298d9f5ed04c14771c35d2 \ - --hash=sha256:222ea0a485e23bdcb29e28d15b8b01ebe34e8720bad4b5f92b645ed86e3fc715 \ - --hash=sha256:22cf74b87b11fbe732ce6e23699d59b53208114232515975ce486d1e6b5248f8 \ - --hash=sha256:231fa0e3e9f9d02f46b19c2fd5bba4d61db4415f06f450b9f0bcb82a69be6f48 \ - --hash=sha256:235135d482a4176b9cf42920bc1f47f46daf746f5124921e3bf1932b55b6a327 \ - --hash=sha256:23bafb94a90f3ce2044b8a7a36c6c98ac6830ac8df1b3c0b65faa27a1bcbc49e \ - --hash=sha256:24eb191910181f4f41ffa2f323d63ebe725ddb0ac461baaa2274658cbe6b4c7e \ - --hash=sha256:25743ca117f8fdb707952c55fd86a03457e99036c9bcd22e6d5f9dbd0d80dc7a \ - --hash=sha256:2585bef3623efaceb1cf4734c27bbba81b9bcb4ea5b8bf53823ca75b388933c9 \ - --hash=sha256:27706a3a4700d34718bd1eaf89719a13bbaa269606048dd00173997562c19c92 \ - --hash=sha256:28de4e0a140f86bea109a6d91de9f1e9a94c9d88e6ec9d4d3c78924e4f8c0a42 \ - --hash=sha256:2b4cd2fcf1b517872530d9ef1a2de2ef9b86e5a0f8927539ea0b68337618244e \ - --hash=sha256:2bc13752e7d80c7ea09d09368b78fca0d52f461c5c16abee5e4f78218f3d346a \ - --hash=sha256:2d028a0e523d0c3e478544fc8350c024a0e0d73b549dd6013af4119a87589de2 \ - --hash=sha256:2d58d876bfeb587cd95c9e00e31cd7d2737cb31e6ca83dbcba445667c4403ac3 \ - --hash=sha256:2ff91eadc4301f12ca6b46eaef21937348ed35a4789803fd92df5a2c044fdb3f \ - --hash=sha256:302e5b527b36a875abb611911142e92abac7580faec51318440149ab13b8e936 \ - --hash=sha256:381e2f183ebf25ac91c73e5d1b44b1676b287062fc9732d63bd05fb35bacb2b1 \ - --hash=sha256:397b26f58cb062233abe36b6cdcb99f08204f529d2384e0f3ed07901dca6a2c0 \ - --hash=sha256:3bfc16e0bca99ecc91d4c9fdc708c432fac2eba3797e78577f4d280031456f37 \ - --hash=sha256:3fb0d4918b7d827ac804069849fde03d516628cbbf7bffe0b957ba6f1440cca6 \ - --hash=sha256:408d37be08e12a154b482dcb300781d3dd154abab8e002ab32ecde6aa6a325bc \ - --hash=sha256:422defa81ff5c114213033cb1ce45f3904427ec9dbfa0442a0f4656191f75f5b \ - --hash=sha256:430ed4de594d0084d9b7956b05075a9054d290a3a0d7b370553a9096a4fd429f \ - --hash=sha256:44ca9d01e9761208de5ab845ce86096d3e730b35acc0f90cedaf58d3dfa4e325 \ - --hash=sha256:453571409c955837178bedab51d5514aeda9ee4854dcde9e9134765f22da4380 \ - --hash=sha256:4770ee0d719be9edc3849a231fc29fde75bfab6cf234b79733ed35cb7cf901f7 \ - --hash=sha256:4785dec2f768b74c0735c9f0441b2392111a1467c463cae737bad30ac976b524 \ - --hash=sha256:48ae6e629a63cdadc29264a66edbaac9f18dd77feed973880c65393820867426 \ - --hash=sha256:49e91971bcc5f6170b451a18bf2c7c50072826ffce7a365d097b32ee01789add \ - --hash=sha256:4a19b00097fcc8e3008bb006cd6bfaf0544e9fa2abc4cc77fbad57971a37dcc0 \ - --hash=sha256:4b660543eee66d5f07408fc1cdd0d017416f0f5cd1725def314cca3f67b0cac5 \ - --hash=sha256:50958a182c7e189fa1408d9a28d9a37afbb3d72107cf8c6fb69b07b13506c246 \ - --hash=sha256:55347832dc6d49731283717087551839fa46a7997929403c96599b1bc93124f1 \ - --hash=sha256:592e561f01e670699126207ac05b0cfa068af110adf95c7a8317615cdd9345d8 \ - --hash=sha256:598350a6adefb5799c800fd00bbeacbc115ee560e2fd7b35f703608c1037a2ed \ - --hash=sha256:5c0772d6bba19a5601d24b3c6ce6627484fd5a3fd1d402913e1578b1447d51a0 \ - --hash=sha256:5e7373e6834e4bdf2c24dbb1a0c6dd834bb5a189efb65723ebb58a8f3e76204b \ - --hash=sha256:60d00bbddaec09e8d3259a0d8805e16b96b2709f14d9c486e29568ffe6f55993 \ - --hash=sha256:61104a5fc2923d5670f30e3ecbcb12ed70f49a17dfd757b32bc965eb90b53988 \ - --hash=sha256:6576400e7a748ec5c7ea72f38d626939876dd1756f4a0ccf552b8646dcf6f3e9 \ - --hash=sha256:67be681c7024df71c5d38c976b8d38c5998a17058533fc4eca6599b730d73b3a \ - --hash=sha256:6be479b31ba2f4f86f886060cff1e640facc7f22d266d960b0ca41a9bf2690ef \ - --hash=sha256:6e30838399bf3ff46a97a90a9997ed6960abce22352b33f7469d0f54b4294064 \ - --hash=sha256:6f60209149e1011b4a3f3119ad2404b06507fe077755bdfcd4ea0090f64cb399 \ - --hash=sha256:6ff08246d6c6dcdd6306a7d806eb75867cea6238eeb88778fc9c577d8e9fe2d9 \ - --hash=sha256:70cd0d092d872b17cf1cd66c394a0537c291c97a539bd884fd0c2bdbf989cccb \ - --hash=sha256:762a03f0726850677f7f1e34a105d9121b4e11a0c20c28c56fc4b33a809c0e64 \ - --hash=sha256:76601efc7bfe44014d7bf7d6ba9c75bbb0b426c93ce0f9216cd9ec5d384c224b \ - --hash=sha256:767c6c0cf3f67c3e4e246ae7e1cc9ce7755f174f994aa3111c8357f16a587161 \ - --hash=sha256:7f9cb34c661454f73432112a81ac522ebe69500feeb8d77f744f6bd3e8b2f2ba \ - --hash=sha256:811f0ef99cc178becef108563505b9e5aa69a406028136874edf6513d3568f8b \ - --hash=sha256:816db9f5ca3da2ecc9c74481c5b0474cc4368cb94e77f40bff8493abeeac81f0 \ - --hash=sha256:81b2682cdcaef93e1bc110ee4d626d8117c50c0427e0e9b8120e7c00dca90474 \ - --hash=sha256:83537149cfeff3d960758a2e5db9894f6207d83750858b4e1ec249849d864edb \ - --hash=sha256:83d93abf6a68d54b4e2c4c041ffcffeb94b1c9ab3171443fda3f5f19024be517 \ - --hash=sha256:8404f75bd1f23c2a806d8e61c95845969f9e256a91d8cdc07fdecde9a39b88b2 \ - --hash=sha256:844f16c472352afa499d3a2ff0316cc812204bda42540af4768ac80a98b56277 \ - --hash=sha256:86238bb78ff65c9fc1e6b371b78f271e23c5d61898222c201122209dc8eadc76 \ - --hash=sha256:88a79efc9949837126358be48d3a73628b615d0f9e4a81b2f819cf324b6fedd2 \ - --hash=sha256:8962a67c314f1da82957aee5b940698aaffff13e41b3298baa59d30cbddb23e2 \ - --hash=sha256:8d58d74be01b0eb74a14cfe768495c57f3a7a7c573a9db3c984b5f2c759a0fe5 \ - --hash=sha256:9063635665d5e62601d1f089526155ad2aba3c85e2050e439c774919447155aa \ - --hash=sha256:90ac257fd93bcd915672262b5f93f606400c1cc29e869bb2ff806038e7234a94 \ - --hash=sha256:93203131f4da1824dec6ffad11ff8afa03f0690f0075efa901ad7517a261a359 \ - --hash=sha256:9438a4436d33b4c71b57f20cb982f791703c868f8c497c998ec33de3b9c4ce0b \ - --hash=sha256:95832419b87b882bec9dcd7d041d74887ba7745b3659c14be1ae1db5cfa35cad \ - --hash=sha256:97206d90a8c68079525f9c4f64e94699927ceb01569b4a4da1c798c758abcf47 \ - --hash=sha256:98db40c6ef8bbeb028e0424736a6bef3b1d8d0a02399236eb00db0dd0b7ca957 \ - --hash=sha256:99a5b0a908beb01b0e134b7b085d0ea6bfb7ed28ba3ed0737365aa2ce9bda0e4 \ - --hash=sha256:9a1841be8752f46cbf58a4825f3789ea66ed9c1190be5d81327509cf757b6f5a \ - --hash=sha256:9e03132ea81849b5732122d3d2f39e46a327a461eb3d678f1e74747c9b7ef154 \ - --hash=sha256:a0eee1c2cafed49facb1fd300f684401ba5bd557d6d7dfa9bd0c13c5b0904f0c \ - --hash=sha256:a2b77b3e6a9d817822407b32c514205b44ceeb8ab197bee09de19e5f1e04ce18 \ - --hash=sha256:a2c36e6d747dcf42f5afc49b107c65c7e2be5dd8e80209244bc50c6bf2bfb81c \ - --hash=sha256:a404419c65611d015eb03b204d3558635d97fcef149d0e8ed0ef818f7262f76b \ - --hash=sha256:a4fa195374868fc65fe0ddefacf080c191f7405b36c8ee4ff7ce6c749b52dff9 \ - --hash=sha256:a5ada8e81fecfca0d934520be81117e5fdccbce7ae43612ae8aeb6c40dfd69ff \ - --hash=sha256:a78928eb29e96e8386eebc6c4271648e3918502a24296da7020607d74d33e622 \ - --hash=sha256:a8389010a2721e568fbe40ba94e7d8f931beabd59b95af2b2ab8238fd40a6b3e \ - --hash=sha256:ad12368a31ddcbc3aed132ffee572917026315936a7df5433b9a9e8a5a9b0c33 \ - --hash=sha256:ad5e6b56000d4b1b82a380c664982371939dc8f728fcbb73d017edc035247dcb \ - --hash=sha256:ae30d67c5f41be6c70d28557c0a3285787dccbde46a3c84a97d01996cbf43e7c \ - --hash=sha256:af550cb399a702b1f277c375461fcd9533f46b435bba1e7847b4b729c6a316aa \ - --hash=sha256:b1829bfe98d1f6e7bd79646b78e73dcef92c5aa32aaa622b9e07bf39df98c9b5 \ - --hash=sha256:b6b7397804e9299bd0c01ea426245fa3d730d3e9c31f583f51aa87bed399c481 \ - --hash=sha256:b77364386164808efb1d7ea1305b14bb04fc6907aab242df3f6c04f5f0c1b371 \ - --hash=sha256:b8e62fec0ca6a14d8e47cde788be90237b089ef9cf46628dafcd5bb1bd64a219 \ - --hash=sha256:b93c17989d23a08104acc7e1912250b2eec4d24da9983d3c5f8ca9cda8d62a02 \ - --hash=sha256:bc6018e95814fd64ea8357c6e9e5608b97b1f33962c76cff60efd52f76b18a40 \ - --hash=sha256:bd044cff158529364124210044fec4f1b0a13219fb6e8b9e393384458bb753fc \ - --hash=sha256:be154e808cce4259aec43e3097599d8986f39963cf300fba1b414eb1c3137e1d \ - --hash=sha256:bee76669a5b588cd806aa619ea9eb8f0c8a00e6991001d830e07cc69258962a9 \ - --hash=sha256:c1fc62fc688e884fb6300a536297a09c089c43f9eb8228790bafa66c28e28900 \ - --hash=sha256:c1fe81cd71d35fd2770dc206a4bd818bd73b515810314e1573b9db8c9a0284db \ - --hash=sha256:c260e150268c47a51b5dc7c2d907ca2a18ecc9a1dabebd62da427342fa6923b6 \ - --hash=sha256:c541249b3b9b5a023a9b6c9cc29e16777926e513c97fad3e2c44956e30d5fc7d \ - --hash=sha256:c6fbc4e3017fb99e639abdb58a6a31e14bcbd270562805a0b80a102f8a4f3024 \ - --hash=sha256:ca4b9402ca8ad16ac8a76aa740c6d8c33a783c684b2f9320685f806ea88306ca \ - --hash=sha256:ceee3a95661cd91eaa7b42d303e1d3c7d0d302674cefe74022b574523af218d2 \ - --hash=sha256:d04df504ac8c214eb5e0c9ef640ebe97c539c4a32a94603e9c7aea595aeba688 \ - --hash=sha256:d0eaf2ff43d5940112cb863c6a09d7d942b6317c006362c555d4c523eab6367a \ - --hash=sha256:d1a9424ee53ac4600568f02683254237a3400af2f683060e7217f744d0833885 \ - --hash=sha256:d1cda1816c79bf9f7b0f7ced1b48bda64c8157a8532e1318727b4157062a5a67 \ - --hash=sha256:d4cc2cb5f117da6460c14c65cbc0d1cf0976af3e56de6cd627cc36019f323e15 \ - --hash=sha256:d54b2f5dcd78b99893d0f6f265749886ae4d316fc54ab352444e581972555210 \ - --hash=sha256:d5babb2a32f79826644c75ebe1e449ddf9035f38cfe4c820e2e3aa61adb0dd08 \ - --hash=sha256:d6f6a61516c4caa5413bd71e635039976224ccc56e82e3eb4a1df3eb5e370a28 \ - --hash=sha256:d7eec1b09bde3a9b6e2102717a587b9c9a96c360a1ef478b5668414619cac606 \ - --hash=sha256:d95ee6696aa5b7283f4a27b67eb7db1c4fb5bb7a9117205d29ebaaa7f6294d7b \ - --hash=sha256:da4ad7a0d4c589069c46101dcb55ee304616293bcf614f4c445b3ecc961fa836 \ - --hash=sha256:db98041fc5d22f1cf66b38a361cf07a15321c0f2956b6134b007733de8befe2a \ - --hash=sha256:def4d23969c4e944a9b01ad3187893edda1cf185d5913224420a72d1959245ff \ - --hash=sha256:e0c195d2a2cf60c5f32928415d44d430129899b4c215d710f93179a056cf560b \ - --hash=sha256:e2f439ffd4fd7d64b77f6a287d4605700bad26fe12bb1b63b4ee45211344e2fc \ - --hash=sha256:e4e32e99c3f56f4e4766bd86f0d14f32590098240bce76df2452a8caecf7cdac \ - --hash=sha256:e5133cc123cbbb69b585bb0b0166bf03c035787892a8b365238dd060ce02f8b1 \ - --hash=sha256:e7adbd0f38ead7310e1e7428f254d450857645efc761c937a7d71100cce7a3a4 \ - --hash=sha256:e87e2c89016a83a6d7b8ff4e688ee6da843c5bf46bd1dcbdd36b181639575350 \ - --hash=sha256:e90bf1e025fee24edbba0b1459624d46ef9208d3d479cd13fae799d26f1609b4 \ - --hash=sha256:ecd0172b50350cae19e8dbb07789e11234099de8ea44db0a981467a98c165170 \ - --hash=sha256:ef9fe783b932927da8070f5b2913ce412e42c80bf17fd523042325ee3a44f756 \ - --hash=sha256:f0c7a36ccb66bfc8fcfa7a9722614b959231e325f0e08862c6ea70a7283a6520 \ - --hash=sha256:f401a82d80c53d88605b82a80623edd95d922732d2c513c1c5f8e4b5e10c2913 \ - --hash=sha256:f61f2850b318c043961662f6cdd08e69b05f1d25d0e321782a3995d39f811548 \ - --hash=sha256:fa216ac716e7c99e4dc4b039c6219a31cd381cc0588ca45cf66f36011613f3ed \ - --hash=sha256:fcd32858eb0df02dd0210523f12e1dabbae1a8d2d74b58ba40aabf2ca75ef872 \ - --hash=sha256:fe9b3b53b0688e9e5d7358e934e87c2da5ed34d997d0ef1ec403024ea760215b - # via - # -c requirements-ci.txt - # fastembed -mpmath==1.3.0 \ - --hash=sha256:7a28eb2a9774d00c7bc92411c19a89209d5da7c4c9a9e227be8330a23a25b91f \ - --hash=sha256:a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c - # via - # -c requirements-ci.txt - # sympy -msgpack==1.2.2 \ - --hash=sha256:06d95f61de7afe4f4ff908a6feebfcb070d0582ac87c9cf3cedf8551cf634516 \ - --hash=sha256:0708afbf6a9587f0bfe479a9825c141d14d91e2f6a5c8103cf28bc96f4edb5d9 \ - --hash=sha256:0883a1578168929fd1640fbbc4614773f1a130e419a8a817dc2918d9af1b651c \ - --hash=sha256:0a652ceeededf71d3fa40c303a02a149d42338d310162367b91c539d4bd6e0a3 \ - --hash=sha256:0dd9173c5ebaf5ecc5ca86e7ae1db92934e1d57b856f3dd90698941431f4fd77 \ - --hash=sha256:0e3315de5a4b2920ccef48d96b4448025e064a10d0f5a250f6584477d839c8d4 \ - --hash=sha256:0e91332144f69bc3018c91232fac26da580ef748fb8eaddd7914d4458001cc4f \ - --hash=sha256:0fbc1bed8a535389b41882cfae66376e248cd1680eaa94fd83193c73e1d24986 \ - --hash=sha256:11e8c421e117d1c36728b423d0402555cccbf0c6f53e288f0e75b6b12100d70f \ - --hash=sha256:1510f24612d4b983dff6935d9273e02c320cfd525727fbcb58836a75f589fdbc \ - --hash=sha256:1814f92306ae7862908e9ece7cfd90e0dc87ded3e89b6ae7ffdd1175d6376fdc \ - --hash=sha256:1e8cdd1f3e7cc52c751092a9bf740e81e6919ab109cd376ae2d965dad0bbae34 \ - --hash=sha256:1f3af0baafd184436501004828bb3df64eeb2fc49dfe9d89abcf604956094563 \ - --hash=sha256:1f6b6f8deb07d49090e1808c6ef9cb7d23ca17bef3aa6ed3e5e03df16606e60c \ - --hash=sha256:226a62ffe99fe54c5c61d910ec64c3449b7766c3280bd286bf6c94838dde239a \ - --hash=sha256:29cc2d5291711a52956a79a51f41c732329df39ad727c886bd8f0b5b9237a808 \ - --hash=sha256:336525cc2688e43ea77dfb1a4ce012c8cde561835913801dbfcfdcf4111d8abb \ - --hash=sha256:34e83e345194a2a51d8bd447dea9de2104f91e75b247f4735f14f04529f0746b \ - --hash=sha256:352ed831042549cca8be23780e1fe7c9177e65ff02bf183509c4b4d33f671782 \ - --hash=sha256:3e915d390d7068b257ca8b62f3fc59fad135c8631d1017ab03b0b924b07c5367 \ - --hash=sha256:419a45c67a5c04213172a14b1864657e014665b77d7081b107a51707923dd39e \ - --hash=sha256:42fd9260416885b4815caca5bdd14dfd5dda6cdade732d6c09104ef8f6228761 \ - --hash=sha256:46ec851571d8f1b6e29794ebb9dd36f785008da6d14f57c702e60781d6caf648 \ - --hash=sha256:4710d881d8fb047deed2485707409116722af2b992d3fefd73c7667c4e350839 \ - --hash=sha256:4955accbd87f27beebef5f3ecc27503aa74cb016fb4f640868e749fd93194a35 \ - --hash=sha256:4a4348705be86e029d04e741cf9ed0dfe03e942d7d3b92e838fa80d3aa2c3ebc \ - --hash=sha256:4b554d8164ebb526892194f71dcd96ef1fefe0c250087498785d3ffc04a80be3 \ - --hash=sha256:4d9a562aec0a92fe536da2e533d313b3d2a6b929157b1dec7ff623446dc0a8ab \ - --hash=sha256:51dd39d23cfdea0400ed3ff2d29d1e83bd951d3aea79dc89be5b701a09edfe23 \ - --hash=sha256:53679573c75cce5f82359e0bd4e6a97809a6b9a9b7a48fd1ba592f4a82cddc84 \ - --hash=sha256:55faa6f8395e23b848c535ad5dcb96b3462f37f5e7f4ac500d500434f7345da7 \ - --hash=sha256:58ce37a4a54577115922385d37201d9a44d66d0167dfbbf4770a2e9bf8ea7ba3 \ - --hash=sha256:59d5b93efa45fd09f620d0c9ba81cde339a2c9937af3eea42ee9653094ce6640 \ - --hash=sha256:6195257a107bf25872ef84aab7295078271eea3ac6413f0506b631f6c9586ed5 \ - --hash=sha256:652d1bf13d01bac8fd569def0fe76745e55bcda01e30aa6332d5947ea3788839 \ - --hash=sha256:682804bf31e43d46e51a9a33bd575b51e839d715ce6bd5612c055f7b28ad637b \ - --hash=sha256:68df2947921d449f6dcfeafd86cb2cdde13327a8b447534bbe4ee5aaf32a5695 \ - --hash=sha256:6f53285f20d592ed309ee19e509cc4c77a3bda1db02ad67e8a0949bb227a5a6d \ - --hash=sha256:73b0e05c32c3cfc3cd84994908e57430c0ebc6813abf905d3f18ff115d54df3f \ - --hash=sha256:77c2e018417dc1d66f235e383877ee885b60ade9d29e494dd581e08af2cb1923 \ - --hash=sha256:7826f16edc763e768404f55605ef85dfcf5857e729c1ed29e0d7c180be4fe6d8 \ - --hash=sha256:7afa5431f6f3487c584187ca6c8e2a34e9b106529893b3e720eabb068f6ac970 \ - --hash=sha256:7d095df2627e5dd59ac7b0c5ad627a671c76e6020171e03cbe4621a61f0562c3 \ - --hash=sha256:7fe374ba76eb0ecca13a1703daa8fa85825a6ddddbb52d4c1a732fa524194683 \ - --hash=sha256:82b1bdf293267afaadcc608b125e7fc6576bb0785a60c4fa7d07c7ab76ed76ec \ - --hash=sha256:86f173a584f72f6164801f31866d22a581f60c991572cf922aed9ab8eb422b77 \ - --hash=sha256:8b1415d02e9bf722672af8a90f90813265a0cd0b14163187261e54a5592bc949 \ - --hash=sha256:8b2a281b556f120a43e591ea39915741b7ad54d4727b9c4350a0a11692252533 \ - --hash=sha256:8c6321a414f8b4a8dc43976b2fa8349156434ca9adedd9a187b796f7e1d3d3fc \ - --hash=sha256:8dc4487097571f7311188c3eca2a3e86cd1f1db4c37c7a017bcc3fd38486cbfe \ - --hash=sha256:90986cc9aab9d7d1d8f38bcbf65d3f7ac83bdd90c35765db7d691b4829698cba \ - --hash=sha256:9352e6cdb510a7b1a5d3ccaccec730e82e50cf3484a3af7bdaab19e23b9589ff \ - --hash=sha256:935b1cfad9b908b0fa845010f4271df4c2f04e1cd26e3f18acd61a45f93c9e36 \ - --hash=sha256:9b659d77f8726fa5e7038967dda6b68d53cf34472c094cfa5b845454713b90d5 \ - --hash=sha256:9bd3d1557c3fe1a095068210708a03e3e4795973392af6f4047060e70abd9a6c \ - --hash=sha256:9bf452ff4d4981f25a18e9476e002bcc9263e7928024aa4d7148e25f7be3f929 \ - --hash=sha256:9d7fb25b4442fae0cb2590272d06ab4f6caa526ee36a994edb81e946b874813e \ - --hash=sha256:9db1ba1c1e6a84245a9dd866265b56b8a1e9461549cc72ed296d8cbfbd32961b \ - --hash=sha256:9eb0b0e602064527a045ea28c4f174ed69383587e29cebe28947e3b84106eb2a \ - --hash=sha256:9fd7f32e2f0fb334e7ecc5adb5cf0458785bd3a9d9d86f950e1715f101cebce5 \ - --hash=sha256:a378e12ccc06d76efde115caf4073b7e5ff3cc18291d1341f9e65fb882e3f754 \ - --hash=sha256:a4161eee7799863aee237c35c90427861f7b994416dd81ae829f560b0a81bdcd \ - --hash=sha256:a9b4cf3685a135666d27d0d7a73fece74e2fad01d9b508fded89e843512f0e90 \ - --hash=sha256:aa1120c653b76d8eafa50423b5eba06b5c9737f8692c74fa3afe03e84b8978ea \ - --hash=sha256:b07c03f0da7e5279170df7745ddc732d526c8a198208936ec1a95c11ed2b2d5f \ - --hash=sha256:b13b59e66f107cca1ba708dd5307179870ca1b15b19fcee7ccf722e5308d9212 \ - --hash=sha256:b542ffc0a5c531eedc40419f291f1bd659aa8d4223408a5b51c88a2796083fd3 \ - --hash=sha256:b5c696ae7cd7166b3657261adb855b461ff31f07823fdbae9de8bf80adfccc21 \ - --hash=sha256:b68614fba0570349833b7dd999ff0aed4e5cc8d9eb6e3a7d4527be33c65e33d3 \ - --hash=sha256:b8dd6c71d20c28d2d0eb0c51e7cccf3584afde3b1364f6629596186c9025bd54 \ - --hash=sha256:b9b0c1f2aa7b0026b4bd50718100e8b04175e4f36e160aa852502377b5e572e7 \ - --hash=sha256:c522420d78db2431887d45b518e304d86e27b9ad0b30f24e3806a6ad5d8bdbfc \ - --hash=sha256:ccfd880988f8438d1c91c77d7edc58e70f4d2012e999167bc154c64c6f06ea6b \ - --hash=sha256:cdb6cc6e1127d15879c47a8b3270716243da82d3e7feab1f5946872c75b3d60f \ - --hash=sha256:cf66fb38703e61a486b01b56d43bb1f50698fbe99b6bd90feba10f24fab60b3b \ - --hash=sha256:d13d07efbf655f9ae7a2352b630c52727b359005b21ba08a507585c9ac8c0896 \ - --hash=sha256:d242f3c4ccf55b056e6cf901720dccde58f1df117898f2bbf3bcd6e38ec7c248 \ - --hash=sha256:d24b38a825bcca41bb956de50eb98451ef291304a8607fad99e619043d3e79b9 \ - --hash=sha256:d3c247d457ae9079974c7ce3c665396754a6d2baff7eaa51332212a8a5a3f13b \ - --hash=sha256:d886baa46b2532135e7320067e6a44edb09ba5883a6096b0f9c044533984b8a8 \ - --hash=sha256:e05a94a0442de86818a30281c6cc2cb9cc7aa148386fd3541c4d4774b73cb3a9 \ - --hash=sha256:e1b99ad34613d5f8477fa5cf99bc4eaeaf27965588007c102370cd9a78fe9de5 \ - --hash=sha256:e2eb7ea0ac3911a7aac9d8aaa36d40f216d99455b3274cd3fac38181bcd910cf \ - --hash=sha256:e497ee34e8a3342bbde51b27c22d8db05a651df3361dd3daef5b3ab0d66f3e04 \ - --hash=sha256:f11e09f10210a91c169e39c7a5a1f9090eaa73ad75555fafad5023c3053c47ba \ - --hash=sha256:f466049b8e1ec0854287bbe9a074316826fe0e08dcf707245f98b1ae49e92650 \ - --hash=sha256:f80361592c13d7226b4379c8941529b63fe1a9d0e05d2de8f3306b70e522b53f \ - --hash=sha256:ffdd2f4950daf7815490f23087963e3420175b9609520b7ff5df64d351159c22 - # via - # -c requirements-ci.txt - # librosa -murmurhash==1.0.15 \ - --hash=sha256:0861cb11039409eaf46878456b7d985ef17b6b484103a6fc367b2ecec846891d \ - --hash=sha256:1349a7c23f6092e7998ddc5bd28546cc31a595afc61e9fdb3afc423feec3d7ad \ - --hash=sha256:189a8de4d657b5da9efd66601b0636330b08262b3a55431f2379097c986995d0 \ - --hash=sha256:213d710fb6f4ef3bc11abbfad0fa94a75ffb675b7dc158c123471e5de869f9af \ - --hash=sha256:2224f30f7729717644745a6f513ea7662517dfe7b1867cf1588177f64c61df3c \ - --hash=sha256:22aa3ceaedd2e57078b491ed08852d512b84ff4ff9bb2ff3f9bf0eec7f214c9e \ - --hash=sha256:231dc7982e1aeae8bbab21f8f21953e3b9fb0a34e3ffe2d2342ff32e4f07af9d \ - --hash=sha256:263807eca40d08c7b702413e45cca75ecb5883aa337237dc5addb660f1483378 \ - --hash=sha256:2680851af6901dbe66cc4aa7ef8e263de47e6e1b425ae324caa571bdf18f8d58 \ - --hash=sha256:26fd7c7855ac4850ad8737991d7b0e3e501df93ebaf0cf45aa5954303085fdba \ - --hash=sha256:32c6fde7bd7e9407003370a07b5f4addacabe1556ad3dc2cac246b7a2bba3400 \ - --hash=sha256:342277d8d7f712d136507fb3ccdba26c076a34ca0f8d1b96f65f0daa556da2e9 \ - --hash=sha256:34e5a91139c40b10f98d0b297907f5d5267b4b1b2e5dd2eb74a021824f751b98 \ - --hash=sha256:3c69b4d3bcd6233782a78907fe10b9b7a796bdc5d28060cf097d067bec280a5d \ - --hash=sha256:43bf4541892ecd95963fcd307bf1c575fc0fee1682f41c93007adee71ca2bb40 \ - --hash=sha256:43cc6ac3b91ca0f7a5ae9c063ba4d6c26972c97fd7c25280ecc666413e4c5535 \ - --hash=sha256:44d211bcc3ec203c47dac06f48ee871093fcbdffa6652a6cc5ea7180306680a8 \ - --hash=sha256:4a70ca4ae19e600d9be3da64d00710e79dde388a4d162f22078d64844d0ebdda \ - --hash=sha256:4fd8189ee293a09f30f4931408f40c28ccd42d9de4f66595f8814879339378bc \ - --hash=sha256:539d8405885d1d19c005f3a2313b47e8e54b0ee89915eb8dfbb430b194328e6c \ - --hash=sha256:55e1a7f65095f0af141c8a460765e026e35d9ec526f0daa2f88fed29a292b2ff \ - --hash=sha256:5678a3ea4fbf0cbaaca2bed9b445f556f294d5f799c67185d05ffcb221a77faf \ - --hash=sha256:58e2b27b7847f9e2a6edf10b47a8c8dd70a4705f45dccb7bf76aeadacf56ba01 \ - --hash=sha256:5a301decfaccfec70fe55cb01dde2a012c3014a874542eaa7cc73477bb749616 \ - --hash=sha256:5d8b43a7011540dc3c7ce66f2134df9732e2bc3bbb4a35f6458bc755e48bde26 \ - --hash=sha256:66395b1388f7daa5103db92debe06842ae3be4c0749ef6db68b444518666cdcc \ - --hash=sha256:671979f15b24817968ff6fab5e3a468e2b05555bac5e92f11155610a37165ffc \ - --hash=sha256:694fd42a74b7ce257169d14c24aa616aa6cd4ccf8abe50eca0557e08da99d055 \ - --hash=sha256:6cb4e962ec4f928b30c271b2d84e6707eff6d942552765b663743cfa618b294b \ - --hash=sha256:7c4280136b738e85ff76b4bdc4341d0b867ee753e73fd8b6994288080c040d0b \ - --hash=sha256:8155d106c63c5a509ec58c19b0c30804f3a0931bc65cca9826efc53373332536 \ - --hash=sha256:847d712136cb462f0e4bd6229ee2d9eb996d8854eb8312dff3d20c8f5181fda5 \ - --hash=sha256:88dc1dd53b7b37c0df1b8b6bce190c12763014492f0269ff7620dc6027f470f4 \ - --hash=sha256:898a629bf111f1aeba4437e533b5b836c0a9d2dd12d6880a9c75f6ca13e30e22 \ - --hash=sha256:899068ba3d7c371e7edd093852c634cce802fefd9aaddfcc0d2fda1d7433c7f9 \ - --hash=sha256:8a181494b5f03ba831f9a13f2de3aab9ef591e508e57239043d65c5c592f5837 \ - --hash=sha256:95d7c52598dce7a8543e5a5f61a893cbb762a62a907c6c9cd025d5f618bb8522 \ - --hash=sha256:9aba94c5d841e1904cd110e94ceb7f49cfb60a874bbfb27e0373622998fb7c7c \ - --hash=sha256:a2ea4546ba426390beff3cd10db8f0152fdc9072c4f2583ec7d8aa9f3e4ac070 \ - --hash=sha256:a32054edb567417ac81f7172b7dd7731846f25c63084edeb20545fa7abc849d7 \ - --hash=sha256:aadac5fd5f3f465094a5e4ecd00d739a2b870651cad06c8d1005153c2e815fb3 \ - --hash=sha256:b3ba6d05de2613535b5a9227d4ad8ef40a540465f64660d4a8800634ae10e04f \ - --hash=sha256:b65a5c4e7f5d71f7ccac2d2b60bdf7092d7976270878cfec59d5a66a533db823 \ - --hash=sha256:bba0e0262c0d08682b028cb963ac477bd9839029486fa1333fc5c01fb6072749 \ - --hash=sha256:bc54facccb32fe1e97d6231edd4f3e2937467c35658b26aa35bbd6a87ebb7cb0 \ - --hash=sha256:c22e56c6a0b70598a66e456de5272f76088bc623688da84ef403148a6d41851d \ - --hash=sha256:c4cd739a00f5a4602201b74568ddabae46ec304719d9be752fd8f534a9464b5e \ - --hash=sha256:cb8ebafae60d5f892acff533cc599a359954d8c016a829514cb3f6e9ee10f322 \ - --hash=sha256:cc93769619b6b42740cab8eebb587709daaa3d8f813372cc60358a571de20d2d \ - --hash=sha256:d37e3ae44746bca80b1a917c2ea625cf216913564ed43f69d2888e5df97db0cb \ - --hash=sha256:d4d681f474830489e2ec1d912095cfff027fbaf2baa5414c7e9d25b89f0fab68 \ - --hash=sha256:d7e47c5746785db6a43b65fac47b9e63dd71dfbd89a8c92693425b9715e68c6e \ - --hash=sha256:dc35606868a5961cf42e79314ca0bddf5a400ce377b14d83192057928d6252ec \ - --hash=sha256:e43a69496342ce530bdd670264cb7c8f45490b296e4764c837ce577e3c7ebd53 \ - --hash=sha256:e525bbd8e26e6b9ab1b56758a59b16c2fffd73bad2f7b8bf361c16f70ff1d980 \ - --hash=sha256:e8e674f02a99828c8a671ba99cd03299381b2f0744e6f25c29cadfc6151dc724 \ - --hash=sha256:ef19f38c6b858eef83caf710773db98c8f7eb2193b4c324650c74f3d8ba299e0 \ - --hash=sha256:f32307fb9347680bb4fe1cbef6362fb39bd994f1b59abd8c09ca174e44199081 \ - --hash=sha256:f3e99a6ee36ef5372df5f138e3d9c801420776d3641a34a49e5c2555f44edba7 \ - --hash=sha256:f4989c16053a9a83b02c520dd00a31f0877d5fd2ab8a9b6b75ed9eba0e25c489 \ - --hash=sha256:f4ac15a2089dc42e6eb0966622d42d2521590a12c92480aafecf34c085302cca \ - --hash=sha256:f9bf47101354fb1dc4b2e313192566f04ba295c28a37e2f71c692759acc1ba3c \ - --hash=sha256:fa1b70b3cc2801ab44179c65827bbd12009c68b34e9d9ce7125b6a0bd35af63c \ - --hash=sha256:fe50dc70e52786759358fd1471e309b94dddfffb9320d9dfea233c7684c894ba \ - --hash=sha256:fe883982114de576c793fd1cf55945c8ee6453ad4c4785ac1a48f84e74fdc650 - # via - # -c requirements-ci.txt - # preshed - # spacy - # thinc narwhals==2.25.0 \ --hash=sha256:1f0f403e8c7e4463cde9bfe78b12fdd809e3ae3dda6d9b2f802934fb9c7a6a8f \ --hash=sha256:62c036c810662bf7820b7737077176313bc59350eeeefb808510f388c743e4b2 # via # -c requirements-ci.txt - # plotly # scikit-learn networkx==3.6.1 \ --hash=sha256:26b7c357accc0c8cde558ad486283728b65b6a95d85ee1cd66bafab4c8168509 \ @@ -1961,39 +451,6 @@ networkx==3.6.1 \ # via # -c requirements-ci.txt # semantica (pyproject.toml) - # torch -numba==0.67.0 \ - --hash=sha256:00c964a5b94d3ae82d83ac162cd610755875b98dadb779fdde06e6bfcdbca47e \ - --hash=sha256:3fa3d1b27f96f2c0d54513d953d7197886aa1eaa7d2439a0eedc44d993fb181a \ - --hash=sha256:4a2ed006635bbd0fe45681ed49f3b4f4bad1abf0c233bcc5842c9e3a34cabd61 \ - --hash=sha256:4d576e62bf2c9370f61312b51573c4bb1f3fe96798bbab56730847a368a316c4 \ - --hash=sha256:50e2b72406c18cda5dd7431b0082cb85ea94e06c64c33607248fc8bef92cfb81 \ - --hash=sha256:5269245a675abdd3e2c35ec6bb2f250355effa9032514d8f2354f0d2d10854bd \ - --hash=sha256:6004d8d5f28d4028687fb2d972d629295b13685943bd2ed5cd8810c3b848e219 \ - --hash=sha256:694c81c6560b2b47e5fc1dc39c29175b907adf862d9af0af801453400a022a61 \ - --hash=sha256:76d3335aaeffb9dc88309420890e73497a00be08a7530441bc2b58ffe025bfa5 \ - --hash=sha256:77e1c7173fee57a0d84e006c7e70346689d6cb3e7db503489bae58646b4eff7b \ - --hash=sha256:7930748ce8355d2a5a28602abab056a61fdc676d17377f27d17993905428171f \ - --hash=sha256:83ab968b0e0fa744eba03351282dd8000796e6ec8e4518f47bd3ed86c0a20c7b \ - --hash=sha256:88f6e0f5cb6c545e158b6ef0496c01b6d6958a7ccc6634a1576a94bbbab29ff2 \ - --hash=sha256:8c0e88acd4341ddf40779db3c0228b9188aca7fcab5f5f3ce9949a1fc71e9a02 \ - --hash=sha256:8c80c847301dc33dc8f84a97a952004023d9a05578ae4512b087176264cc1960 \ - --hash=sha256:9c4953387c77864b596d8296e2cfbdef82b0eea4166ab4864b05d226c51143e0 \ - --hash=sha256:aa5f002f665bec321b950dacaa26ee009e1d720f6ac9d9856eed5efe1caa03a6 \ - --hash=sha256:b68ad5125fe245339cc8dcc036081fc1ea482c5063387b9612a76ccd83dc91cd \ - --hash=sha256:cd75aa535b33fa05d9d930b1ae8af9f97a2881e96d72dfb38ec9b78284d9f851 \ - --hash=sha256:cfba1ac34f0363fb1a250a10e97240780d11e05227892f7286b26fbfd0ad58ce \ - --hash=sha256:d6c8e9ba3f9602471e8c6f563ffcce8db8046741f0bafb782a052e41dc6b6861 \ - --hash=sha256:e7a7b0121466f1e9a8a074b0545fe90e16389623abf979b5d7c299dca1294d7e \ - --hash=sha256:ed333e0af4386294e7f03e550e01411856b6935e717d859225e0a7338c6b6795 \ - --hash=sha256:f074a8e23db78490f11a3930c940be758316c10ac5985be83d2f298dc080acf7 \ - --hash=sha256:f63d43db06b4756424d6d2484737c902e0ae944a0eec3e8b0b4de2c695b15caa \ - --hash=sha256:f99f880ff25f418a67f9a1d00d0ddfbc63430f627b523e515085a592a7567f4b - # via - # -c requirements-ci.txt - # librosa - # pynndescent - # umap-learn numpy==2.4.6 \ --hash=sha256:001fbb8e08d942dd57599e781f2472269ee7f2755fae407b4f67b2f0b17da3f1 \ --hash=sha256:0280e0356c0829a18d9de1cb7eee50ec22ca639878d7240307ca0943d73cd2c4 \ @@ -2070,200 +527,9 @@ numpy==2.4.6 \ # via # -c requirements-ci.txt # semantica (pyproject.toml) - # blis - # contourpy - # faiss-cpu - # fastembed - # gensim - # librosa - # matplotlib - # numba - # onnxruntime - # opencv-python # pandas # scikit-learn # scipy - # seaborn - # sentence-transformers - # soundfile - # soxr - # spacy - # thinc - # transformers - # umap-learn -nvidia-cublas==13.1.1.3 \ - --hash=sha256:37936a16db8fe4ac1f065c2139360608a543a09275cb1a1af612e08cfa065436 \ - --hash=sha256:b6cdce694e47ff6aadf0a69df1cab6628d696f5ff56e8d16af50309d855fa20f \ - --hash=sha256:b7a210458267ac818974c53038fbec2e969d5c99f305ab15c72522fa9f001dd5 - # via - # -c requirements-ci.txt - # cuda-toolkit - # nvidia-cudnn-cu13 - # nvidia-cusolver -nvidia-cuda-cupti==13.0.85 \ - --hash=sha256:4eb01c08e859bf924d222250d2e8f8b8ff6d3db4721288cf35d14252a4d933c8 \ - --hash=sha256:683f58d301548deeefcb8f6fac1b8d907691b9d8b18eccab417f51e362102f00 \ - --hash=sha256:796bd679890ee55fb14a94629b698b6db54bcfd833d391d5e94017dd9d7d3151 - # via - # -c requirements-ci.txt - # cuda-toolkit -nvidia-cuda-nvrtc==13.0.88 \ - --hash=sha256:6bcd4e7f8e205cbe644f5a98f2f799bef9556fefc89dd786e79a16312ce49872 \ - --hash=sha256:ad9b6d2ead2435f11cbb6868809d2adeeee302e9bb94bcf0539c7a40d80e8575 \ - --hash=sha256:d27f20a0ca67a4bb34268a5e951033496c5b74870b868bacd046b1b8e0c3267b - # via - # -c requirements-ci.txt - # cuda-toolkit - # nvidia-cublas -nvidia-cuda-runtime==13.0.96 \ - --hash=sha256:7f82250d7782aa23b6cfe765ecc7db554bd3c2870c43f3d1821f1d18aebf0548 \ - --hash=sha256:ef9bcbe90493a2b9d810e43d249adb3d02e98dd30200d86607d8d02687c43f55 \ - --hash=sha256:f79298c8a098cec150a597c8eba58ecdab96e3bdc4b9bc4f9983635031740492 - # via - # -c requirements-ci.txt - # cuda-toolkit -nvidia-cudnn-cu13==9.20.0.48 \ - --hash=sha256:0c45dd8eeb50b603f07995b1b300c62ffe6a1980482b82b3bcf94a4ca9d49304 \ - --hash=sha256:af8139732b99c0118be65ea5aac97f0d46018f8c552889e49d2fb0c6261a4a24 \ - --hash=sha256:e31454ae00094b0c55319d9d15b6fa2fc50a9e1c0f5c8c80fb75258234e731e1 - # via - # -c requirements-ci.txt - # torch -nvidia-cufft==12.0.0.61 \ - --hash=sha256:2708c852ef8cd89d1d2068bdbece0aa188813a0c934db3779b9b1faa8442e5f5 \ - --hash=sha256:2abce5b39d2f5ae12730fb7e5db6696533e36c26e2d3e8fd1750bdd2853364eb \ - --hash=sha256:6c44f692dce8fd5ffd3e3df134b6cdb9c2f72d99cf40b62c32dde45eea9ddad3 - # via - # -c requirements-ci.txt - # cuda-toolkit -nvidia-cufile==1.15.1.6 \ - --hash=sha256:08a3ecefae5a01c7f5117351c64f17c7c62efa5fffdbe24fc7d298da19cd0b44 \ - --hash=sha256:bdc0deedc61f548bddf7733bdc216456c2fdb101d020e1ab4b88d232d5e2f6d1 - # via - # -c requirements-ci.txt - # cuda-toolkit -nvidia-curand==10.4.0.35 \ - --hash=sha256:133df5a7509c3e292aaa2b477afd0194f06ce4ea24d714d616ff36439cee349a \ - --hash=sha256:1aee33a5da6e1db083fe2b90082def8915f30f3248d5896bcec36a579d941bfc \ - --hash=sha256:65b1710aa6961d326b411e314b374290904c5ddf41dc3f766ebc3f1d7d4ca69f - # via - # -c requirements-ci.txt - # cuda-toolkit -nvidia-cusolver==12.0.4.66 \ - --hash=sha256:02c2457eaa9e39de20f880f4bd8820e6a1cfb9f9a34f820eb12a155aa5bc92d2 \ - --hash=sha256:0a759da5dea5c0ea10fd307de75cdeb59e7ea4fcb8add0924859b944babf1112 \ - --hash=sha256:16515bd33a8e76bb54d024cfa068fa68d30e80fc34b9e1090813ea9362e0cb65 - # via - # -c requirements-ci.txt - # cuda-toolkit -nvidia-cusparse==12.6.3.3 \ - --hash=sha256:2b3c89c88d01ee0e477cb7f82ef60a11a4bcd57b6b87c33f789350b59759360b \ - --hash=sha256:80bcc4662f23f1054ee334a15c72b8940402975e0eab63178fc7e670aa59472c \ - --hash=sha256:cbcf42feb737bd7ec15b4c0a63e62351886bd3f975027b8815d7f720a2b5ea79 - # via - # -c requirements-ci.txt - # cuda-toolkit - # nvidia-cusolver -nvidia-cusparselt-cu13==0.8.1 \ - --hash=sha256:4dca476c50bf4780d46cd0bfbd82e2bc10a08e4fef7950917ce8d7578d22a23f \ - --hash=sha256:786ce87568c303fadb5afcc7102d454cd3040d75f6f8626f5db460d1871f4dd0 \ - --hash=sha256:dccbd362f91a7b9024d1f55ee9f548ac065027ff15d8c8b0db889ab3a8f31215 - # via - # -c requirements-ci.txt - # torch -nvidia-nccl-cu13==2.29.7 \ - --hash=sha256:674a12383e3c38a1bcccae7d4f3633b37852230b6047883cb2f4c2d1b36d9bf5 \ - --hash=sha256:edd81538446786ec3b73972543e53bb43bcaf0bfc8ef76cb679fcc390ffe136d - # via - # -c requirements-ci.txt - # torch -nvidia-nvjitlink==13.3.33 \ - --hash=sha256:26a6de7fb4c8fdaa7703d3dad720d6d427ddfea5c48a528fd97c11733ad830e5 \ - --hash=sha256:4297ee49639b4f2e07255a1d69b3acc7ab2d011bb892b403e91ac98368962e3b \ - --hash=sha256:ce48b37dfeb3cb1eae4cf85adacb47d7a6539ea2272870c9a3628ce275c2037e - # via - # -c requirements-ci.txt - # cuda-toolkit - # nvidia-cufft - # nvidia-cusolver - # nvidia-cusparse -nvidia-nvshmem-cu13==3.4.5 \ - --hash=sha256:290f0a2ee94c9f3687a02502f3b9299a9f9fe826e6d0287ee18482e78d495b80 \ - --hash=sha256:6dc2a197f38e5d0376ad52cd1a2a3617d3cdc150fd5966f4aee9bcebb1d68fe9 - # via - # -c requirements-ci.txt - # torch -nvidia-nvtx==13.0.85 \ - --hash=sha256:4936d1d6780fbe68db454f5e72a42ff64d1fd6397df9f363ae786930fd5c1cd4 \ - --hash=sha256:cb7780edb6b14107373c835bf8b72e7a178bac7367e23da7acb108f973f157a6 \ - --hash=sha256:d66ea44254dd3c6eacc300047af6e1288d2269dd072b417e0adffbf479e18519 - # via - # -c requirements-ci.txt - # cuda-toolkit -onnxruntime==1.29.0 \ - --hash=sha256:07c5907474dec4a2792fd7626b753dc66707808385a6d9eecf993db0066a9d0f \ - --hash=sha256:0d4f427afac434b0070fe992b540ddf20a7aff2265f760f314d91331935b6b98 \ - --hash=sha256:11264bb58f7b7cf6af835ab10d36838d73680580820fd6f51d90124a1ca8f449 \ - --hash=sha256:16925ef8497e2c07e4b5ae15b504079b3ab3f65e22c58efd10dde0f3caea969a \ - --hash=sha256:1ea91cef3b971506e51ae9c37c16d027774ec64994a524ec1bdfb027d68a9832 \ - --hash=sha256:2945e1f82f81f27e88decea88c7861f45baea23818950d467bf3909aa303119e \ - --hash=sha256:2b80d8c7ec2cc7438e4da3760b88c24568cba72c9ace96d668800a6c79419acb \ - --hash=sha256:3a3814c041251d6a77fdf513fb282056538ee826d2f1178a0df3c549d3fff6ba \ - --hash=sha256:4a3129ae56e70d2618ff773920166916310370a7e3cacb60b9e0e8910092725f \ - --hash=sha256:4acf2b4948b7ede87221ca6332344b8facdc8059d6ac751a7d367d04532b02dd \ - --hash=sha256:4b940b0d777590c7e20bf298f5c16af1ea6ad1b400a1c822a6be192f64f4d954 \ - --hash=sha256:4eae472cf7dc3107dec1bb53cd6d142d1964616d08aae48654cd4254b2363c4b \ - --hash=sha256:533f8370ce124304e5cb08ab961836cf755631e3dd77adc5f3bbdab70c2b7d99 \ - --hash=sha256:6c0c37b92f67ed68dd36221ce0403e1d9bd4f7efce724439978a2597848530e5 \ - --hash=sha256:85f8e8406c52658735fe5c7fbfd3ebaa1ed340768324f6252e4274e374580a23 \ - --hash=sha256:939e5d65f332e6d399774b2bd0d3559fd8fa629c1e77833db29d968d2384f23d \ - --hash=sha256:be0f8ed688cfb1d4d5765a137193b7bfab0c8ea214eed99260b380bb525a3a7f \ - --hash=sha256:c1ad3f437153fe77f9d01a08fbaac0beb030e09b8a80ace1603bcf69b6c95481 \ - --hash=sha256:d2fb19e848f7c33ed8d3182b52504aaa11c5e8da438bbb47296f85b133cbcf6b \ - --hash=sha256:d67673c5367727860922c5262d724472f1b5539fb7ccf4c81a638f9b71719803 \ - --hash=sha256:dc61a79cb39afd66ab3f01fd2c23591a7f01de89c1668e1fb6315067fc279164 \ - --hash=sha256:e2128f31f449e922c62dbe5d8b6b7b079f0bcaf2d56a102fa203cb6e5bb5ab19 \ - --hash=sha256:e417ef8628dcce310d2d53023e750ea298ec14d4341ae6dc3a572bfd9bc7fa97 \ - --hash=sha256:e74b278af1d949876f5d91d1268fd6c680e79f2bac194967394eaba9fdf69e7e - # via - # -c requirements-ci.txt - # semantica (pyproject.toml) - # fastembed -opencv-python==5.0.0.93 \ - --hash=sha256:08d5d91d967b58d6db86073b2ad3eaef88ca4ebdfd45c9059bf59f5ded0c7ad2 \ - --hash=sha256:198a75138241810206a17c829dbcc40a7cb1841cda538ca86cbbfc6c7d95f898 \ - --hash=sha256:4b4b1a34c79bf8d3738e3cfe9a9e67b51a79663f6b692cbdad8c31f570da4157 \ - --hash=sha256:66aac3e5b5faa48d4025816592f3af19e4bfc2c68dec067bae2dbb4ca10aa9e2 \ - --hash=sha256:6bbc32f59e1b1a7db7b39c81f63d00625f041d333037fd8702f6da52cc39108b \ - --hash=sha256:c8de2dec111122a02e8beb28e16c31904992dfd6186560b142a92c71403c1039 \ - --hash=sha256:e2b4272e736836f66c2d176e43ab8101f3a00d45654916399f52e150c58981ac \ - --hash=sha256:f8b6d0a212253dd26ad338c812f1f23ca118fdf05a9c8c6b9444f161aa8c5881 \ - --hash=sha256:f90ba04b8f73bc5c3814037699739f0156f597338a98f05956c684e7c3ca10d2 - # via - # -c requirements-ci.txt - # semantica (pyproject.toml) -openpyxl==3.1.5 \ - --hash=sha256:5282c12b107bffeef825f4617dc029afaf41d0ea60823bbb665ef3079dc79de2 \ - --hash=sha256:cf0e3cf56142039133628b5acffe8ef0c12bc902d2aadd3e0fe5878dc08d1050 - # via - # -c requirements-ci.txt - # semantica (pyproject.toml) -packaging==26.3 \ - --hash=sha256:94edc256424af38762eb31306eed28beb9f0efc50a8837492c9d6fd6004aed79 \ - --hash=sha256:d7193f7c8e4e93f444fde0262bf90af30e16fa0ad0ad44cb553c87339b23cd1c - # via - # -c requirements-ci.txt - # faiss-cpu - # huggingface-hub - # lazy-loader - # matplotlib - # onnxruntime - # plotly - # pooch - # spacy - # thinc - # transformers - # weasel pandas==3.0.5 \ --hash=sha256:08d24fe11a17dc33bd6e937dc9c665f9cba08fbdc9f657f405713515febe300d \ --hash=sha256:0d298e951f23016ce4699951d044ae6418dbc91bf68cefca0f77666fcbb4e5c6 \ @@ -2310,19 +576,6 @@ pandas==3.0.5 \ # via # -c requirements-ci.txt # semantica (pyproject.toml) - # seaborn -parso==0.8.7 \ - --hash=sha256:a8926eb2a1b915486941fdbd31e86a4baf88fe8c210f25f2f35ecec5b574ca1c \ - --hash=sha256:eaaac4c9fdd5e9e8852dc778d2d7405897ec510f2a298071453e5e3a07914bb1 - # via - # -c requirements-ci.txt - # jedi -pexpect==4.9.0 \ - --hash=sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523 \ - --hash=sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f - # via - # -c requirements-ci.txt - # ipython pillow==12.3.0 \ --hash=sha256:00808c5e14ef63ac5161091d242999076604ff74b883423a11e5d7bbb38bf756 \ --hash=sha256:04f01d28a6aaff387bf842a13be313df23ba0597a44f1a976c9feb3c6ff4711a \ @@ -2414,94 +667,6 @@ pillow==12.3.0 \ # via # -c requirements-ci.txt # semantica (pyproject.toml) - # fastembed - # matplotlib -platformdirs==4.11.7 \ - --hash=sha256:4f41487eeeeeb07f3a6625e61d9bc0ae6809f92d3386dbd74392fbb76108104d \ - --hash=sha256:8a02cb259042c79d1cd0450facc2fe6dc9d303ae7901afbe33bf8ea0b188cef6 - # via - # -c requirements-ci.txt - # pooch -plotly==7.0.0 \ - --hash=sha256:08b21f1244a97e7a1a699833c4bb2678475aa108b3f1989886ed0b038ebfd849 \ - --hash=sha256:78cbf7bd06d1b05bb3b8ec1b709864695229b55151b6f7530fbf55517ead6fdd - # via - # -c requirements-ci.txt - # semantica (pyproject.toml) -pooch==1.9.0 \ - --hash=sha256:de46729579b9857ffd3e741987a2f6d5e0e03219892c167c6578c0091fb511ed \ - --hash=sha256:f265597baa9f760d25ceb29d0beb8186c243d6607b0f60b83ecf14078dbc703b - # via - # -c requirements-ci.txt - # librosa -preshed==3.0.13 \ - --hash=sha256:04d8f13f2986e5d11af5ac51f55ce3106c70c41b483d20ea392e6180bdd0f870 \ - --hash=sha256:09397592d333a77f88454e72b7f1f941b2afaf040b392b9e74898dbc4648cdf5 \ - --hash=sha256:09f96b477c987755b3c945df214ea1c1c80bfb350e9f34e78da89585535b77e8 \ - --hash=sha256:0e5b2865aecbd2e1e10e5d19bb8bfad765863c1307c6c3e51f2a08bd64122409 \ - --hash=sha256:183b339956a9e1d7a4a00038a3b9587a734db9e8bd915939a49791bd1b372156 \ - --hash=sha256:19318dc1cd8cac6663c6c830bf7e0002d2de853769fb03e056774e97c21bedfd \ - --hash=sha256:208dcebbe294bf1881ce33fb015d56ab2a7587aece85a09147727174207892e4 \ - --hash=sha256:2b704e46cb7b88f656ef16a3e5347b36525a1c53721d327a4ba1457404101f85 \ - --hash=sha256:2e77bed56aded7cbe5d28d6bd2178bc5b13eda0e0e464dab205fb578fa915000 \ - --hash=sha256:35d6c5acb3ee3b12b87a551913063f0cec784055c2af16e028c19fe875f079d0 \ - --hash=sha256:3e3528f6628329349e281b607aad746ae3c06c15ba59fd5b6599c7c2fd77911b \ - --hash=sha256:40e9445911051bc67cf84ba12745e3be4d010aaf4f8ade3ba3def82fdb45d18e \ - --hash=sha256:42c58b07e8b431e33d0ad9922e896632453821cad8b09171b619b8c61101916f \ - --hash=sha256:461327f8dd36520dcf1fd55a671e0c3c2c97a2d95e22fc85faa31173f4785dda \ - --hash=sha256:4a7bc48220de579be6bdb0a8715482cf36e2a625a6fd5ad26c9f43485a4a23b5 \ - --hash=sha256:4e9ae86c982e49f58620d45eeb51e073e50feb88f52ac10a95fe117c1d222a84 \ - --hash=sha256:4f8856ca3d88e9b250630d70abb4f260d8933151ddfb413024784b25b009868e \ - --hash=sha256:502f93f49a22788203f02d3067d4ea077a0cca3864de6a792eae12e7ce589e14 \ - --hash=sha256:5268c0e6fa96f50cdf87f516c2d4b32563c12706ee768e75c00e8d0098acd545 \ - --hash=sha256:5d14eea14bd01291388928991d7df7d60b9fd19ae970e55006eb4d29b0c1e8eb \ - --hash=sha256:5e2753779832e411e93eb727f3d409c0a6b7408e5ce4dd868076d8ece48c7693 \ - --hash=sha256:62cf7f3113132891d6bba70ff547ad81c6fe50a31930bbbb8499f1d47cd122b7 \ - --hash=sha256:670db59a52e1823b5f088c764df474e65b686592d4093adbeef14581c95ee2cb \ - --hash=sha256:70d502e081348df207d90f347f21770ed596822bb04eb3c3b32b7281579e90c6 \ - --hash=sha256:7557963d0125a3a7bcdb2eb6948f3e45da31b5a7f066b55320de3dea22d7557f \ - --hash=sha256:7770987c2e57497cd26124a9be5f652b5b3ccd0def89859ab0da8bca6144a3de \ - --hash=sha256:7c333f18e9a81c8a6de0603fd8781e17115324b117c445ca91abdf7bfb1abe49 \ - --hash=sha256:7da9d931e7660dcdd757e5870269f0c159126d682ed73ed313971d199eb0f334 \ - --hash=sha256:867aa73abbf4ee3b4d7662148091c33a8c039271269e3a7f1e0ca995f91995c8 \ - --hash=sha256:8b82d7a7bb63d248a6cbbfcabb4a570c993d54d964e39dc5d85c14018ba2079e \ - --hash=sha256:8b8de3f58043070a354477995acdd98626ce43e4193c708ebd0f694e467f5155 \ - --hash=sha256:8d6acc1f5031a535a55a6f7148e2f274554a8343a16309c700cebea0fe7aee8c \ - --hash=sha256:985cb9b097beda76cd13c01a0499707103e8915f888fa30f8aa8324ef2cc6b08 \ - --hash=sha256:9ca43ecbc3783eda4d6ab3416ae2ecd9ef23dca5f53995843f69f7457bcd0677 \ - --hash=sha256:a06e27f4e5b9d7943840087828c6a0dae4a3475576d12c2e95b71abbb325a80b \ - --hash=sha256:a3ac301b065e67e9541f8e3ab3f67533e53deb57c2d258395c5bb98f9723f99b \ - --hash=sha256:a8682988e47739adba369bf43789fc870b554a21e2d1f30a3d17ed336d05f451 \ - --hash=sha256:acd4d89abeca3678c5d8c89b3cd351314465bc67c7fa053d2644f8513e543386 \ - --hash=sha256:b03e21b0bf95eb56e23973f32cabb930e94f352228652f81c0955dbd6967d904 \ - --hash=sha256:b980f3ea9bb74b7f94464bc3d6eb3c9162b6b79b531febd14c6465c24344d2cc \ - --hash=sha256:bef84b225d226af43adfee78ce5ddede72a6155ce5292c1a41dcd1f0b9c87c30 \ - --hash=sha256:c046736239cc8d72670749b79b526e4111839a2fc461a58545d212797649129c \ - --hash=sha256:c0d0c14187dc0078d8a63bf190ec045a4d13e7748b6caeb557a7d575e411410b \ - --hash=sha256:c4bc60dc994864095d784b7e4d77dba3e64188d169ac88722b699d175561fddb \ - --hash=sha256:c8596e41a258ff213553a441e0bb3eb388fd8158e84a7bf3aae6d8ede2c166d3 \ - --hash=sha256:cf8e1a7a1823b2a7765121446c630140ac6e8650c07a6efbf375e168d1fef4f7 \ - --hash=sha256:d0e114300e5577e806c17fb1cc9f07bc6584188d84545401f66e690c8315feef \ - --hash=sha256:d2f1efae396cadab5f3890a2fd43d2ee65373ef9096ccbb805e51e8d8bcc563b \ - --hash=sha256:d4ae5cfe075bb7a07982e382bca44f41ddf041f4d24cbd358e8cccfc049259b8 \ - --hash=sha256:d75f718bbfd97e992f7827e0fa7faf6a91bdd9c922d5baa4b50d62731396cb89 \ - --hash=sha256:dbd7c735a613857ae39ac23bf4690b0d92adc30add977828529b50ba09e33fbc \ - --hash=sha256:de87fbabb0f37c3c92d4dd9b94fc82ab73cdab4247cdfbd57ab3926caa983919 \ - --hash=sha256:df642547a1a94079978a0ea8f4593ab4b8d3bd43f767bef0ef64d9a214f8c4c9 \ - --hash=sha256:e1ab099b2f5843b19e875502b64001b0705e375fb5bd1ca6240aa14e4ffc31e4 \ - --hash=sha256:e5c8462472f790c16708306aef3a102a762bd19dfe3d2f8ee08bd5e12f51b835 \ - --hash=sha256:f05b08ce92399c0655b5e0eb5a1cc1f9e295703ed3aabdfaf6538dfa8ae23d57 \ - --hash=sha256:f8e6fe0620ed0f96a246d46447055c447e071cd8222731a045c235e8a758c918 - # via - # -c requirements-ci.txt - # spacy - # thinc -prompt-toolkit==3.0.53 \ - --hash=sha256:01c0891d7f9237d5e339f7d3e42cdae80b7534abb1c7c0e3352efba6231492f2 \ - --hash=sha256:9ec8a0ad96d5c56148b3f914aa79c1564c3fde5d2e6b876e7bc327e353cf8fa6 - # via - # -c requirements-ci.txt - # ipython protobuf==6.33.6 \ --hash=sha256:0cd27b587afca21b7cfa59a74dcbd48a50f0a6400cfb59391340ad729d91d326 \ --hash=sha256:77179e006c476e69bf8e8ce866640091ec42e1beb80b213c3900006ecfba6901 \ @@ -2516,103 +681,6 @@ protobuf==6.33.6 \ # via # -c requirements-ci.txt # semantica (pyproject.toml) - # onnxruntime -psutil==7.2.2 \ - --hash=sha256:0746f5f8d406af344fd547f1c8daa5f5c33dbc293bb8d6a16d80b4bb88f59372 \ - --hash=sha256:076a2d2f923fd4821644f5ba89f059523da90dc9014e85f8e45a5774ca5bc6f9 \ - --hash=sha256:11fe5a4f613759764e79c65cf11ebdf26e33d6dd34336f8a337aa2996d71c841 \ - --hash=sha256:1a571f2330c966c62aeda00dd24620425d4b0cc86881c89861fbc04549e5dc63 \ - --hash=sha256:1a7b04c10f32cc88ab39cbf606e117fd74721c831c98a27dc04578deb0c16979 \ - --hash=sha256:1fa4ecf83bcdf6e6c8f4449aff98eefb5d0604bf88cb883d7da3d8d2d909546a \ - --hash=sha256:2edccc433cbfa046b980b0df0171cd25bcaeb3a68fe9022db0979e7aa74a826b \ - --hash=sha256:7b6d09433a10592ce39b13d7be5a54fbac1d1228ed29abc880fb23df7cb694c9 \ - --hash=sha256:8c233660f575a5a89e6d4cb65d9f938126312bca76d8fe087b947b3a1aaac9ee \ - --hash=sha256:917e891983ca3c1887b4ef36447b1e0873e70c933afc831c6b6da078ba474312 \ - --hash=sha256:ab486563df44c17f5173621c7b198955bd6b613fb87c71c161f827d3fb149a9b \ - --hash=sha256:ae0aefdd8796a7737eccea863f80f81e468a1e4cf14d926bd9b6f5f2d5f90ca9 \ - --hash=sha256:b0726cecd84f9474419d67252add4ac0cd9811b04d61123054b9fb6f57df6e9e \ - --hash=sha256:b58fabe35e80b264a4e3bb23e6b96f9e45a3df7fb7eed419ac0e5947c61e47cc \ - --hash=sha256:c7663d4e37f13e884d13994247449e9f8f574bc4655d509c3b95e9ec9e2b9dc1 \ - --hash=sha256:e452c464a02e7dc7822a05d25db4cde564444a67e58539a00f929c51eddda0cf \ - --hash=sha256:e78c8603dcd9a04c7364f1a3e670cea95d51ee865e4efb3556a3a63adef958ea \ - --hash=sha256:eb7e81434c8d223ec4a219b5fc1c47d0417b12be7ea866e24fb5ad6e84b3d988 \ - --hash=sha256:ed0cace939114f62738d808fdcecd4c869222507e266e574799e9c0faa17d486 \ - --hash=sha256:eed63d3b4d62449571547b60578c5b2c4bcccc5387148db46e0c2313dad0ee00 \ - --hash=sha256:fd04ef36b4a6d599bbdb225dd1d3f51e00105f6d48a28f006da7f9822f2606d8 - # via - # -c requirements-ci.txt - # ipython -ptyprocess==0.7.0 \ - --hash=sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35 \ - --hash=sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220 - # via - # -c requirements-ci.txt - # pexpect -pure-eval==0.2.3 \ - --hash=sha256:1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0 \ - --hash=sha256:5f4e983f40564c576c7c8635ae88db5956bb2229d7e9237d03b3c0b0190eaf42 - # via - # -c requirements-ci.txt - # stack-data -py-rust-stemmers==0.1.8 \ - --hash=sha256:08c258deab6d994551a92e9468ce88e58f97e636e73d9c5763978a57d7675a13 \ - --hash=sha256:0a68745d4b3c7f5abc778ca967e8711df6154873abcfe4e62a6631fa2363cc32 \ - --hash=sha256:0f1d2135974bbbea2c15087a7d8cec8697338b2a748c9694c92943775f4d6c14 \ - --hash=sha256:13b25ce65509ff7e37725bd38c62704f32ae0604ac0899f43c8cce41d5543212 \ - --hash=sha256:15af4e12e1288de2e5241eec375afc6ad6be4c125a28ca010599d9f92db23f01 \ - --hash=sha256:1686fc009869ff8bcc1d5a305f071eeb8c3b3612a9827bcadd4e61fdb5727179 \ - --hash=sha256:21ed8055cec1f78d666afad8ffd7a51775ba419d2c615b8a1df7b32ca7f33e2b \ - --hash=sha256:22d037a82920bed8fccbec62cf5ef47d821ac3966a3d098fa48a2053397ea6b7 \ - --hash=sha256:234fdcb58f4d907877ed03c9358668a149b5a66d096abcf43c324a4f5697d36d \ - --hash=sha256:245e2c61c52e073341893a9682cd1396b61047154548aee30bb1af3d8ed4b4cc \ - --hash=sha256:25bb9b0b6b8d79b32c151c7f5f94af9af9aea201ca8736e6f117c841b017f028 \ - --hash=sha256:2b607f0b270951fb66479baf4b68716cc63a981585cbd898b0b6b5c359efde7e \ - --hash=sha256:2e86ad68fe297a6652f0f0390625ea81858b6f27862fd4c5ee1214bf5af29b9d \ - --hash=sha256:3007ad4ec51e0c352ae410234a24a9ac75fab0c1e06c585fbac9fcced69385f8 \ - --hash=sha256:342b6cc9eb833f102d86e146ee71bccb3c1ed1e8320db8e6553cc81b716b1b14 \ - --hash=sha256:35570098da02eb439afcd7270a12bf850bbe874b85cb912e0fb2d87a6e703920 \ - --hash=sha256:36b952ce65a794faf15553b8f5b60431483c2d5bec00bc6982bf490e727250f9 \ - --hash=sha256:3bef8062d28251b465299cc676de7c11dde003858caf2c2b5c14de7298dc63db \ - --hash=sha256:40c86be90cee4a709ad84fde4db7f11ca44d65630a56b77ec86fe84c23adfc09 \ - --hash=sha256:451ee1c02a3f5cf1e161b46ba9032cdda4ba10a8b03ff9ee61c1d34d42a0bc81 \ - --hash=sha256:45d0c42346f8e5d04b86a0b0f895bb15c53788bf551e7fad36be1dad093e856f \ - --hash=sha256:479c77c32d8be692f3cfcde7e19273f02ac81d6f45c6aef49887ef95cab7abbb \ - --hash=sha256:4a1e11d22a240318dc917266eb3c85919455b6ea834445b95997712d9ede6b93 \ - --hash=sha256:4b1159a38a198eabeabd908015f9425c4220b61b42c6603c58870481ff2b50bb \ - --hash=sha256:4b90fc81411943b114e8eb4988a876ba3b12bd2d20741559803eddc4131575dc \ - --hash=sha256:515884bcfb47b10335146648f276930d0c1201ae5e8b7b400fb46d8ea05c0ec2 \ - --hash=sha256:51d0042d2a92ef0f7048bfc06b6c2a02306af31ea47f09d24b34e4b7e63c4e80 \ - --hash=sha256:526b58958c6ffa36c4a805326cfb624ecbd665d16ba435027dbed0bcbcaa09d2 \ - --hash=sha256:56cc2c2df742fa6529285b7d204720f34b7da789ed78eb578442f93c6de97d89 \ - --hash=sha256:5bd15b89203ecd886960e237124d1aa6e55498d76418c36c967d3b12168d43dc \ - --hash=sha256:5cc8fab9d0f1b274a26935a632362b8278f03e81b65e8b8644d5ca3f62a5a1a4 \ - --hash=sha256:6a9a4b8733d0b307bd0879ab7e321aa8a0bfd054a75a5cb23c647df5ca7d17c3 \ - --hash=sha256:6b0f6f48bc54d607aed802de872fcd5a71bae969a6760976dc78ce55e8eaf3da \ - --hash=sha256:6c92733b020534470ca5a0d7fe8b85c85622ff383d4f37fec75a1c677aa84921 \ - --hash=sha256:769f37882905da2311cb720681b112eb70a4e6bd56fb424d473427b5379c8396 \ - --hash=sha256:7cc0cc0b8eb45d2158c28ea43e2f338c110aad63052ad3bd00bc7446a595e12f \ - --hash=sha256:870afb2d1d4731bd2d74b715b34439b29734e4dc94c55342096f07669f7f9fa0 \ - --hash=sha256:89d3d34094b9b6078a8ea6fe1c7044e5fd32f14e76c94818c5008f49ae075f08 \ - --hash=sha256:8b0327b151ab8a338fb54fdac114ba34394327fc1e2c4c425ad1caf2013e5de3 \ - --hash=sha256:931d13570962b093417e5443a9d1bd63d73fa239ebb81e5b1d346663571403e4 \ - --hash=sha256:9ab605a86c950ba7e8ab1392cf91296c0bec3084babb897a4aecf90a10c82395 \ - --hash=sha256:ae773e1d01e9aa328d175f461475d0cd7074a82bfcc71de6dc5765e51f1cc9f7 \ - --hash=sha256:af749b3b9f6531342250dd05854c0ae93e01f79b0049a8769012e0b50e9aba5b \ - --hash=sha256:bfc185b599e646a0e39d11df3f5e6d15edefb110496601556385d33b55fed5de \ - --hash=sha256:c03f51280d5d72f7f9b07101ad248845279dc1c82c47a74149303d25937464b7 \ - --hash=sha256:c786235275c5c2abb7f206b8236aee3ca0bc53c7497daf7fb7b01d3491469547 \ - --hash=sha256:d396dd25c473c1bc4248c79cd223f4b36356b55a124652f015c6a001547f81ac \ - --hash=sha256:da0326c913070d5f3fabd56393ca4118167bb0b13c2932a77c7a1b31f85f651a \ - --hash=sha256:dab8a862fa8e4c9e715848e9d64c317229d7a2c37238cd1c73237b85d655ab7e \ - --hash=sha256:dadd0e369703817fc7026987b3093f461f9f58d8dde74e689d546184bc8f3451 \ - --hash=sha256:dca0ae40715238582d6f1824b61d09ea3982359a061b69798ab5732b3ba0d4c5 \ - --hash=sha256:dd967eea2f808a1e73aa71ecccef0f4925a4cca4eb02ced94057afe3303153ef \ - --hash=sha256:eee4af7ada2ce9cb3ec59ffe8458148c3933a86507d816bf954ee506a0e45b61 \ - --hash=sha256:f16deb1557b8253d8c11693047bec4ed67d6b09ae0f84c8b896ea03ac2fc8925 \ - --hash=sha256:fa42f5f8feb694aaaa869eedf477fcaf66f67a192cd64d94302d06920c33864a - # via - # -c requirements-ci.txt - # fastembed pyarrow==25.0.1 \ --hash=sha256:0b1edbb2f385a6a65e9711b62ba86ac54a7816a3f8d17bb3e8a5929d65fb2485 \ --hash=sha256:0b726ad7e7b669be982b0c71c07fe4b037d654354130da79a7902a669e93a66b \ @@ -2660,12 +728,6 @@ pyarrow==25.0.1 \ # via # -c requirements-ci.txt # semantica (pyproject.toml) -pycparser==3.0 \ - --hash=sha256:600f49d217304a5902ac3c37e1281c9fe94e4d0489de643a9504c5cdfdfc6b29 \ - --hash=sha256:b727414169a36b7d524c1c3e31839a521725078d7b2ff038656844266160a992 - # via - # -c requirements-ci.txt - # cffi pydantic==2.13.5 \ --hash=sha256:346a034f080da3755d8e9cb5e00e8b07de1d39e4f6e2c87d8ab7cafa0b269a73 \ --hash=sha256:51a9c5f7b2f8e636f04c6cada605d9b6a3bf1348fdf945a3d8869b19bba0ee08 @@ -2673,9 +735,6 @@ pydantic==2.13.5 \ # -c requirements-ci.txt # semantica (pyproject.toml) # fastapi - # spacy - # thinc - # weasel pydantic-core==2.46.5 \ --hash=sha256:013d6f3483d81e02e7c328831808f336c8596ee33b4bd4026b9ffb1e960b8942 \ --hash=sha256:03b9666e41e35d8909852ba191a0607520f81b74eaf12ccf8737005dbb313821 \ @@ -2805,35 +864,19 @@ pygments==2.21.0 \ --hash=sha256:610ca751c9bc2492b38eb9a38a7fbc93edbbb2d7182edaf34e66ae493dee5c8c # via # -c requirements-ci.txt - # ipython - # ipython-pygments-lexers # rich -pynndescent==0.6.0 \ - --hash=sha256:7ffde0fb5b400741e055a9f7d377e3702e02250616834231f6c209e39aac24f5 \ - --hash=sha256:dc8c74844e4c7f5cbd1e0cd6909da86fdc789e6ff4997336e344779c3d5538ef - # via - # -c requirements-ci.txt - # umap-learn pyparsing==3.3.2 \ --hash=sha256:850ba148bd908d7e2411587e247a1e4f0327839c40e2e5e6d05a007ecc69911d \ --hash=sha256:c777f4d763f140633dcb6d8a3eda953bf7a214dc4eff598413c070bcdc117cbc # via # -c requirements-ci.txt - # matplotlib # rdflib python-dateutil==2.9.0.post0 \ --hash=sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3 \ --hash=sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427 # via # -c requirements-ci.txt - # matplotlib # pandas -python-docx==1.2.0 \ - --hash=sha256:3fd478f3250fbbbfd3b94fe1e985955737c145627498896a8a6bf81f4baf66c7 \ - --hash=sha256:7bc9d7b7d8a69c9c02ca09216118c86552704edc23bac179283f2e38f86220ce - # via - # -c requirements-ci.txt - # semantica (pyproject.toml) python-dotenv==1.2.3 \ --hash=sha256:904552145e8bfed22162c09dab1c2b9b54fefa7b23ba780f4f26ca0316b0f0d9 \ --hash=sha256:a20a594dabeaa385725aa239d5244871c143ecb356add8a20fcf23773a6c3a35 @@ -2924,8 +967,6 @@ pyyaml==6.0.3 \ # via # -c requirements-ci.txt # semantica (pyproject.toml) - # huggingface-hub - # transformers # uvicorn rdflib==7.6.0 \ --hash=sha256:30c0a3ebf4c0e09215f066be7246794b6492e054e782d7ac2a34c9f70a15e0dd \ @@ -2933,177 +974,18 @@ rdflib==7.6.0 \ # via # -c requirements-ci.txt # semantica (pyproject.toml) -regex==2026.9.3 \ - --hash=sha256:01bdce6a372efd5ae3d8560cedbc691be259a50206564bbaf04008b2937721ab \ - --hash=sha256:0540de6e7917f89acaf9771bdcd6fa7e505c67416d3b283e52ad4ab25399c6d6 \ - --hash=sha256:05e9f7d16b42686fb38b1702071a7359469ba89e9d516e2ba5228e077dcac524 \ - --hash=sha256:0b1ba3aaaf5776de473ee16625ac60ac195abb0343afb273575a8201d99be089 \ - --hash=sha256:0edd12c8201222f58817689dc61fe44893f3f2f2aee530b211dfa92af84df9cc \ - --hash=sha256:0ee4721472e00e96b3cceec545c9867f91815f628f6ea304ae6cea93a7e4e7ae \ - --hash=sha256:0efb99024ad5ba9198ffa816156b3319c3164b5a8d1e35940d92fdc9158b8d9f \ - --hash=sha256:107319f437fc382e1e445d0abf8923db07f76e5fb3245ac5b09604e5dc8d4f63 \ - --hash=sha256:11f9b104fa7b23f736b50fe1980a1422eb4641865e82614a25413deabccae575 \ - --hash=sha256:14bf4a88833c12a990dbf5cca77eb293401d60878be7d566a2d5096fb0216c27 \ - --hash=sha256:14f8969a92ed847f78e8eed81c6a0384a9e8058a56eb659f83ddb59879c2e4e3 \ - --hash=sha256:185c1ae881856208dda05708b6c908aff76878e59c998c8548d365c1bbcaf1bd \ - --hash=sha256:1ba1dbbb93c5c5629c1861763aec5bfa9f05ad24ef450694130e25029ce7bc36 \ - --hash=sha256:1d9148e47cfa1a067138867996b1d5d825de0132fed8dac3c92eebaaf312d280 \ - --hash=sha256:1f22e0d21ae7016c77175c139a7fca465b988efc1280df4816c79752068d9e2e \ - --hash=sha256:1f975a75dae06e88665e4a709873d936a7e8f9445e3d354b75de0e735d28cf71 \ - --hash=sha256:233662cf8cfdfe3c0e58aa8f7bbefc579b5be0ac34546f123c159804179e8687 \ - --hash=sha256:24b4bbb65ff2c4e8c552c93c342bf5ffa0ad162d963d96bac7c1883c20e1b34e \ - --hash=sha256:27f0809798071f56fb1bc536bb93714a95e8ed2ec0dfd869f095deebb30fd11a \ - --hash=sha256:294ef8fb58a45f912513692380f366ca191940de5b3b3de5308ce2e8500d8ea4 \ - --hash=sha256:2a1269856278ae8bc78342bf20191c1f10638d2c22df72364d2fa02d70d49f35 \ - --hash=sha256:2a36e654181ecb996241bae256d28f26b03d019d6ef65c61dcf44396ab07c548 \ - --hash=sha256:2c71da070224baf426850d9eab23ac797d9859b1841dbda43012c01b69697803 \ - --hash=sha256:2cbc83154c8b0201ada07bc5d6e37106df6325f2fda60d73228e2e8da7433cae \ - --hash=sha256:2d25e41851e41539898116ac760fcc856e2c1047a843a336b19e2c8e4a43ad16 \ - --hash=sha256:2ef9a284ec658d48ec57edfba0944d1582532601472f695b799ba08d37fd6544 \ - --hash=sha256:3077ace9bf59f8513c8471a817a5af63699987dc024f535c1eac3447a4d70211 \ - --hash=sha256:307dbd844f678de48ea74cdc909b007729c50e6be7f182bdf6a1df6732374c69 \ - --hash=sha256:32a32d2664e602b20e4b9c11234cb32f2e985323e453b2b396ea4ae686d82052 \ - --hash=sha256:3367d5eefae493ac2a1586ec11cc8213c3305528ed3f8e19d5c3871cc01da6ce \ - --hash=sha256:33c2860b73ea342c0a42bee9ebe3b3a0de3d68c580c4dcb52241cf4b6663731b \ - --hash=sha256:33d3a772ff62c882a5d1402045e17c0199f33b9b173139071c4203e7e0292420 \ - --hash=sha256:356fc21b4c313decb3214a4306bb5bd0623dce4a8d03d0d5ada6fb0b6a5b93b5 \ - --hash=sha256:35d48ce3dee087b63b15cd0a7a3110d0a76c29edbe1f2ad0520b8c4adb7cb596 \ - --hash=sha256:39d8d5490ba4b8f26ef2aef72b775b1e7fc1a5ebaf28d11e637eb27b0b6a3048 \ - --hash=sha256:3cc1a82779315f7b2a4642d5028b39057838cd4c0415744d4e53c8b512352141 \ - --hash=sha256:3d75065d9f6ed1afb2a41588def408cf442cee65b3651cbd7e86650146127bb4 \ - --hash=sha256:3de4eab8c763393b75bbb26f81934ab2cc8794f48f79e90622e3ab7ea57f3d14 \ - --hash=sha256:445623b1337e971ccc571d3642aeb3f2fec77e60b6ee193dd7688168471d1846 \ - --hash=sha256:48e84252a16234ee860206a738f9a5084f830a5d0a1370a418d3af4e917f5e08 \ - --hash=sha256:490a81770599b17b8594227674872dfb215af05f2be0065a32a7c70175fd9e23 \ - --hash=sha256:4a9cd8485a6729387c889c88c24d5eace39dc0c0c9ddb9003f9c81751f654b69 \ - --hash=sha256:4ac52b95a938789fcfcfbf6faf647b45d7be940f0c51f06991c1353db54c67aa \ - --hash=sha256:4f39485bb02dae23e14cdbad086ab0e468756775bc5c64bb69e7cb756ebc1dcd \ - --hash=sha256:5133884ec10c9d6bcf7fed4ceb98fb3a6acbb6c2ba1bab6c4b6700d6c39c7595 \ - --hash=sha256:55493b5b6cb6c4ec9a3c310d4ef947dbd34326ee4eecd4249e18e00d84f14be5 \ - --hash=sha256:56d8659c65166641d8f1b5efccc391c62c8a899eff4d528b981cc62b7b402a4b \ - --hash=sha256:57f405fcb82e2b78df88f04f8aa49ce513ce23bfea073b581597bd52545e9b3f \ - --hash=sha256:5db80d0b1c8238940b5957dd66b5c818ea40a221f6652fb717c027a562d09c77 \ - --hash=sha256:5dd356a646fe549d42b766cb9075b54eccd3f20604d87a3eff25f1430bba5b2e \ - --hash=sha256:5e49096c90364317897b8d9fe97e2f86063dc0fc0bcd352017ea6fdd703ff25d \ - --hash=sha256:5e674cecb61cb160be392da07fd8a71509ef927f437fbf3215432692ed385151 \ - --hash=sha256:5fecba510f6b8f9cf1dfd103d785a61da47221cf09d4cec10946d1950daf1a17 \ - --hash=sha256:610371fe95c7e8e824ad8762248836cabbb5a4ab8befb982cb7dc8df773075d3 \ - --hash=sha256:61a9da95a836e7d300945891265bbeb6510a860863f6b01ed6397e6239a31253 \ - --hash=sha256:635482cd183a1856da75a39c473a2e222697b7927f1955f586db83fc8a5da17c \ - --hash=sha256:63fa79eab192623acb169de1dfe8e733598c4047d06f7712347d1bb810a5ad20 \ - --hash=sha256:647983d2609be6155c748249e770ab7e75e15e386cbf15469569f3eaf165bbb7 \ - --hash=sha256:665207e41bacd435db001099eeab44103197c2c1a729d73ade74688a905ed4ce \ - --hash=sha256:690ab9d06cd689b79aab84afa0984a1bc85ea4b93b0a42b015f3ff5e2f5b08be \ - --hash=sha256:6b5dc780377e35be6b0cf6fec7fb4a45cadb1e834bc0ef2ce596cc015290ef69 \ - --hash=sha256:6c0f60b05cc708e6cdf68dbca86b7a36d99695962db0189bb1b3884ca3b28e90 \ - --hash=sha256:6c997a1703401089bc02d731e360127428fb4ecdf6524268e8975882ff02528b \ - --hash=sha256:6d416ed4058ea38f69884f3db523b0414c0094d262dde63694aa254e32a433e6 \ - --hash=sha256:6f198b622a3ccf02eeab00de71f6b2f45b1b50b1979aa56b25178c963e475950 \ - --hash=sha256:6f64c66b3b13758b4f8f56f17972cd0ce5d0033d19d7332ed32e2dbdbce94dec \ - --hash=sha256:6fe39780de6916ecb1c664eda81802e6310fd9d4a07dccb13a86b63918e00e65 \ - --hash=sha256:6ff5a98456194621f757d6226f88035c00ebbeab0a9095dc9b5a9ec5cc94b50b \ - --hash=sha256:70082b2a8f099b8bf660b553b22a4b8ffd34fcc09ef154fc6b9c7108518fc124 \ - --hash=sha256:72df83ee0eb89b070e28d1260786d13485b98a8b80228c7439d303dd9aac9970 \ - --hash=sha256:7a7ddc9a8ca1795166a1ca80364b8ce74187fc210e112d3fb048b711b934f36c \ - --hash=sha256:7ab7ad8b557d1f21e8b4a97a2c1a2ac82cf10c92d6a875c90f038ca9ed85dc5b \ - --hash=sha256:7bb75921a4885d30d9e881d7a595ce50407a8a82933e15451ad7e0d89d1a5944 \ - --hash=sha256:7d2eed2e4d231278a2ccab3f4bfa2c1e39855f336475f7756a281d767d2b1753 \ - --hash=sha256:82c27460ff2ea683159a204db2f9ce0f9549dec7070aa0809fbc36226bac1816 \ - --hash=sha256:837c1859913798d8bebcd98d4a037e113f8d79e81733009bf590e449769eecb3 \ - --hash=sha256:862c29f7e7927e71391df6700079b1dd7c2aeb75115dc46e37004a092f8f16b7 \ - --hash=sha256:8c8a63d55cdf3c716225a2f8741a1df7a52b5fa98ac7530165c9cc9b32feabcc \ - --hash=sha256:90aa2a7f9cc1cd2e8082db61618a2ed0f4197eef52266a6420e88277f184e328 \ - --hash=sha256:92e06a5ecabd6e8352da58b9201ae241a1e7382c1419defa9d2f64ad4ea6abf2 \ - --hash=sha256:98620c9c4c22568ad70f57b80527c780b6f8fd26e36507bf8e2273262a228275 \ - --hash=sha256:9887e9455398a1517294dec14e23ed9a178c8dd909f2788e971b66623d3f7c16 \ - --hash=sha256:99034ec353c973e2c89555866083491b9a2dbe81f2fbe15fb0f2b68506232f01 \ - --hash=sha256:994fa00a9b0d14c6e6926ff5ade98d4d83676a5eeab6f87718170e481396d380 \ - --hash=sha256:99896cc18fb421be93e337d6bf2c1686ba330bc2d5c0ef581c842f0639a5e886 \ - --hash=sha256:9c407afee6ea4caa313e815814e76d8447fcd32f81e3331d7937c2d33ab80c1b \ - --hash=sha256:9ce34fc5a6f6c9b2ba4a8060009d989e4f55630e3f9c3bf5962f42dcc31355ef \ - --hash=sha256:9e1c602c55dc8ec05cc7e0a8e31f3ad3d4644dbcb7ac39114105c9bd0384371f \ - --hash=sha256:9e61478a8a06e6456ff2e66b9ac18f7f28d76a75fa5fda0c5198a4de07b8dcb8 \ - --hash=sha256:a87ab35e92d40b53c5373af36625794e422f83ec56122f0a63871892856d721c \ - --hash=sha256:aabd43208e335f4c3f0b56de3464b066dd425983a58f6eeb5738bcd7465403db \ - --hash=sha256:ad2027883344e70ddddff02259411f80faf47d5e779eb0e39cb95ee546fa628c \ - --hash=sha256:ae9f7055e7357b2873866a3d77d0136a251ca2ae2dde3d8cdb819425d717c177 \ - --hash=sha256:af06c9099df15ee44fda3fdfa002bfe37de02901c2b3a5ef350853861ef3b4b5 \ - --hash=sha256:b5f85bffdfe17da7dfff78eb32b261c27f3cd64c060033645079493f4cebc8e9 \ - --hash=sha256:b7b7e6be82fd6d5256adabb82253c5c307de981cc20c0ce4cff0cbe6de88529b \ - --hash=sha256:b9190d4901d7786af9ab0ec46172e27cf7d72cdba2b82ee38eb40aadd3239a6e \ - --hash=sha256:bb2d4ad7f9bac398a7a19f07bd09fd5b2c1e4eeab316065aa84a305f62fc5361 \ - --hash=sha256:bda6af6fb4d5fe9532620e4f72d3c7efcdf7472ead9037b184c0a060f0e7c71f \ - --hash=sha256:c07eaf30bc072b179acc8ac50519a2a81f03f88a220750c6d83dadbdc33fb1de \ - --hash=sha256:c0ea77435b1d5a27cccf27f8762f50e73fd2d94e8e412a8e5cdedb650b36d5fc \ - --hash=sha256:c1fa3f84cee5211a3e574ba76ac9596df8c8d16a855f31a25681d23eadcc6c16 \ - --hash=sha256:c90f34f1b1905d7d6c42b25b6ffb4e5066e6c95c7715169e3332b1760614d092 \ - --hash=sha256:cb6374a84f11a6b25e63aa69ee2d015286048c1efee93c4a3b5b8df62da79ff8 \ - --hash=sha256:cc5d0f82cf05beb6c0d463398173a09357ed4f4a631f7641cef6f6480a05bc57 \ - --hash=sha256:cce8e5243d95068f595155663e3e18b1938b16cf716dce6cf2491ebc08b98d96 \ - --hash=sha256:cda393bb35828e3993fcaf39c8ede78b16614954eb15fe77336d5d141be40f76 \ - --hash=sha256:ce6505846d29f860966e0e9cfadaad1041a7d8ce7dc4af39940fcb1877dec29a \ - --hash=sha256:d10a442c6450ebd35aa89392b8e4b0459ba474df63fc5e6828573d0a31a627ec \ - --hash=sha256:d1d52739de118acf82bfbaf7046955ead4fb613d24ba4187be565cd91ff9a64e \ - --hash=sha256:d36e9097a1bc6eebe8858216ccd2326f561662de4e50c27533452491c1cf1685 \ - --hash=sha256:d514026ca1c473cc14440e4d7bdf6721c642455b647a74c8143c0f22da358c28 \ - --hash=sha256:d539a51be176e874ed66029b2df8cb8e1123a3e6420d52a690de6effded4f20d \ - --hash=sha256:d7b3a8a4bbd83ad8b29758f5d24bab10a3f2de87970db36f1e3651c733353136 \ - --hash=sha256:d963442186918577ad83e3a8c5564eeeba90e2da233ce59f6eeccbb7b5cf771e \ - --hash=sha256:db6538d733047f9ce4b74ee29c77643a1f99e4ca36e273495da93fbeedd2f03f \ - --hash=sha256:e27003c0a93a5aa541c260bd8ba8b917a2af4c378eb684daa9f1565f5e363181 \ - --hash=sha256:e3037d02425863ce9501afbaa04ba967162810004bacde39a53ea9a5b740eb32 \ - --hash=sha256:e337dceb936f333775cf51d49f6badb8cd3d2a6b27e8cb443a6c5861fbf3c1f9 \ - --hash=sha256:e33dfc13c02d9c4e55bcf3f3b2eb448537823a6f6f30bf737b2974b63a530bc9 \ - --hash=sha256:e7663a6803a47255c32cc7e17ae3ccfe02dba5b0849f87729651c0263a129d20 \ - --hash=sha256:ecc27adda0d1e1bc39793b41fdd562d2f4bc4dcee6ee0e3c733d519c332183b2 \ - --hash=sha256:edfd2b0cad175780f8668fd6f66486354b8770e4057e44038daaa4a066f8ddff \ - --hash=sha256:f02091b425bbcc2d8481913855c744baa4dd73e334814337b201d837e9040ef7 \ - --hash=sha256:f4381151a29a7b9307842ff444609c4b9a402775fbe9afb3ec3e34ec0396bbae \ - --hash=sha256:f568bdc17b7ebb3a323ee8920468d2ed74af84da911a00d9585ac887bac73b88 \ - --hash=sha256:f584dd93ef6ddb10ba028e247fe1fc0ba52ed70ca4d596bb8d52bf4304c147ec \ - --hash=sha256:f5e8a0ce681ddabf6a35d7b817d74a94ab237ae7233a5b97118db0b4e524473f \ - --hash=sha256:f93c60d8c522b4ecea35dd6c58cc42f251ecb12882a5d67d4bd8d12137fbd05b \ - --hash=sha256:fbaf76379bf2a72e534bbb1276d45e63a80d8cade17953ed79a350d6426262fb - # via - # -c requirements-ci.txt - # transformers requests==2.34.2 \ --hash=sha256:2a0d60c172f83ac6ab31e4554906c0f3b3588d37b5cb939b1c061f4907e278e0 \ --hash=sha256:f288924cae4e29463698d6d60bc6a4da69c89185ad1e0bcc4104f584e960b9ed # via # -c requirements-ci.txt # semantica (pyproject.toml) - # fastembed - # pooch - # spacy rich==14.3.4 \ --hash=sha256:07e7adb4690f68864777b1450859253bed81a99a31ac321ac1817b2313558952 \ --hash=sha256:817e02727f2b25b40ef56f5aa2217f400c8489f79ca8f46ea2b70dd5e14558a9 # via # -c requirements-ci.txt # semantica (pyproject.toml) - # typer -safetensors==0.8.0 \ - --hash=sha256:040070828e36dc8e122178bbbd5830ff9e97920affb84cbe0f46442497bed358 \ - --hash=sha256:096ec1a98435df7beb08853bb5aa9081a84f23d0adc67ed1a0a10550f608373f \ - --hash=sha256:2ddf52eac562eda224f99acfa7889d02968c1fd59a5b011ae7d8137c37e9c02d \ - --hash=sha256:3ae091f16662658bdc019a4ff6cb4c085bb7d725eb5978b183ffd265863b6d2d \ - --hash=sha256:4124502b78f03534117c848f87a39b8f31e577b15eff423bf8bfb95f2a8c30d0 \ - --hash=sha256:4a95ae2b05d7726d751da4ebf626a2ca782b706e101bd894c95bc2450b1cffcc \ - --hash=sha256:7a46e5ff292c356d6991e60942ba7f79817682d3a2cef0702136448cb9c4d235 \ - --hash=sha256:7bc0a787ba8a35be368ee3574edfa2b1ad389eebd0a72e482ae275490e3f6c98 \ - --hash=sha256:87eec7ffed2b809f05a398a8becb7d013f19f7837cd15d9748580d6cf30dbaf4 \ - --hash=sha256:8e080062fcde23be189565e1c3305d16751a218ecf9412c8601e64204eb6f846 \ - --hash=sha256:8e9f537aa183a38ace122d27303dcd986b26bd2a7591f9181d7f0c396f4677ca \ - --hash=sha256:c554f85858e05226d3c2828e32395e677434685d6d94594a41643361c5e837f0 \ - --hash=sha256:c80201d22cbf405b80647a60ada77bba06c8fba2da2743ba1e89cdcc39a81f25 \ - --hash=sha256:f7838e5135a406ad3e02efdcb8cf2e5397d368b0154537c4fec682dbc544d452 \ - --hash=sha256:fabaf3e0f18a6618d9b36560682562157f77c2b71fcffc7b432be2baed9d753d \ - --hash=sha256:fcdd41ec4628fee5799f807c73c353629130fbd942aa23d83c623dd6c9d52d78 \ - --hash=sha256:fd6f3f93c9a0a7cc2788ee63fb763353d4bd2e89b0751bc78fcf7dda00bea774 - # via - # -c requirements-ci.txt - # transformers scikit-learn==1.9.0 \ --hash=sha256:051075bda8b7aab87b1906ab3d4740a1e1224a19d7b3781a576736edc94e76aa \ --hash=sha256:056c92bb67ad4c28463c2f2653d9701449201e7e7a9e94e321be0f71c4fef2b8 \ @@ -3139,10 +1021,6 @@ scikit-learn==1.9.0 \ # via # -c requirements-ci.txt # semantica (pyproject.toml) - # librosa - # pynndescent - # sentence-transformers - # umap-learn scipy==1.17.1 \ --hash=sha256:010f4333c96c9bb1a4516269e33cb5917b08ef2166d5556ca2fd9f082a9e6ea0 \ --hash=sha256:02ae3b274fde71c5e92ac4d54bc06c42d80e399fec704383dcd99b301df37458 \ @@ -3208,247 +1086,13 @@ scipy==1.17.1 \ # via # -c requirements-ci.txt # semantica (pyproject.toml) - # gensim - # librosa - # pynndescent # scikit-learn - # sentence-transformers - # umap-learn -seaborn==0.13.2 \ - --hash=sha256:636f8336facf092165e27924f223d3c62ca560b1f2bb5dff7ab7fad265361987 \ - --hash=sha256:93e60a40988f4d65e9f4885df477e2fdaff6b73a9ded434c1ab356dd57eefff7 - # via - # -c requirements-ci.txt - # semantica (pyproject.toml) -sentence-transformers==6.0.1 \ - --hash=sha256:1c3b8d9403f87ad0c879638554f36cc85744f38a6a70d150fd7e964ca0e9935b \ - --hash=sha256:b8888d72c707ba33c63aa30845850702dd5acadf1dd0d051436380bcebe4fd0f - # via - # -c requirements-ci.txt - # semantica (pyproject.toml) -setuptools==84.0.0 \ - --hash=sha256:51a52592b3b99e102b609654876bd65f19f999935166d1352678931132b0c670 \ - --hash=sha256:f4695c21257f0d9b537ec2692c941d02ee143b7cc1276941349a546573b2ef73 - # via - # -c requirements-ci.txt - # spacy - # thinc - # torch -shellingham==1.5.4 \ - --hash=sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686 \ - --hash=sha256:8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de - # via - # -c requirements-ci.txt - # typer six==1.17.0 \ --hash=sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274 \ --hash=sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81 # via # -c requirements-ci.txt # python-dateutil -smart-open==8.0.1 \ - --hash=sha256:18b1c4496003c6902be17c15f032b5c319f307c89c6ae9e6b028b508bed8b2cf \ - --hash=sha256:3e97f90e92a952cb57863dfe132082c400a52eeeb27c067692fb51dbcc5b0089 - # via - # -c requirements-ci.txt - # gensim - # weasel -smmap==5.0.3 \ - --hash=sha256:4d9debb8b99007ae47165abc08670bd74cb74b5227dda7f643eccc4e9eb5642c \ - --hash=sha256:c106e05d5a61449cf6ba9a1e650227ecfb141590d2a98412103ff35d89fc7b2f - # via - # -c requirements-ci.txt - # gitdb -soundfile==0.14.0 \ - --hash=sha256:0a6ae43c50c71b4e020cc55382925cb89451c1ed1a0c3d0f5d802da269226849 \ - --hash=sha256:19be05428da76ed61a4cad29b8e4bcf43a3e5c100089d2ec81dc961eed1b0dd4 \ - --hash=sha256:1e38bac1853412871318e82a1ba69a8be677619b56025bbfcccdb41b6cafe82d \ - --hash=sha256:299491d3499460fb1b74bb4bd78b57ffc2d243a5fafa7b6ec1b264875c78453e \ - --hash=sha256:8ba81ae3a89fd5ab3bef8a8eb481fbbe794e806309675a89b4df48b8d31908a8 \ - --hash=sha256:ba1c1a2d618bca5c406647c83b89f07cc8810fa506a50622a6993ba130c1de11 \ - --hash=sha256:d828d35a059626da52f1415b5faee610aeab393319cb3fc4a9aef47b619fc14c \ - --hash=sha256:e090704718e124e7c844695236f1fce8d18a5e761eaf7c82dfcd124620805f98 \ - --hash=sha256:e85724a90bc99a6e8062c0b4ddf725f53b2a3b70afd4da875e9d2cfc4e92f377 - # via - # -c requirements-ci.txt - # librosa -soupsieve==2.9.2 \ - --hash=sha256:4a55d8cf158a9c2e587fa4922f1bbb91d68ac829e2d6f25403a85747c71daf74 \ - --hash=sha256:8089a26fd974ca7a1f30276d3d8492ab266ab15af581642dfe8aa162e0c1c823 - # via - # -c requirements-ci.txt - # beautifulsoup4 -soxr==1.1.0 \ - --hash=sha256:1577865e993f98ffb261257c3060fa76ec3db44ed3f181b16464268000424464 \ - --hash=sha256:26925618945f1a44dfbd783cc572874f0685e9ecdf46b96f4000f6b8c9c8b825 \ - --hash=sha256:318925f7281df61dfa7f17fe343952eb10cefd3954f2423a733fabe3a517bab2 \ - --hash=sha256:33525740fb7dbed8b09970bf0cd4219b365538845053987b11cc235b20562e09 \ - --hash=sha256:34cc92208c3c412c046813e69da639c04a792c6a41fbfd7d909d359cd3e97a2d \ - --hash=sha256:3b033078e86f3c4a658e5697fac8995764fad9e799563616b630136b613167f1 \ - --hash=sha256:3da87e3ffa3e41823d873b051c7ecb2acebd8d1b6b46b752f5facf10a0d84ab9 \ - --hash=sha256:474aabb9283f177e899747510d60661730538052fca0ed93a943d4686d6655b1 \ - --hash=sha256:52c9ca84e3dc656d83acc424574770e20ea8e0704dc3842d4e27b0fe9d3ba449 \ - --hash=sha256:588c7de1abafe59e66face9a074514658ac0398c85a774cdbb8efac131192692 \ - --hash=sha256:6ae2a174bffea94e8ead857dad85999d3f49f091774dbad5b046c0417d7092f4 \ - --hash=sha256:868a24d864c25024f60ca964f851a759f2ada5352608fc194d927b7facc2e28b \ - --hash=sha256:8e11e26f1718b5c2e5b96f2f71b9f00e31d247b065289661e3a6996c758669d9 \ - --hash=sha256:9443e5eb82152d8952422b7285692192cc7dcffa5218bb511b096203018bc273 \ - --hash=sha256:9564d82f7fa6bf548e5f18bb86235dff20eea8bd30727b64d49783c95c34fb8d \ - --hash=sha256:9f228ae21c78fa9359ca98d8a5e8e91f30639e438e574133dace62c5b5309e44 \ - --hash=sha256:a941f5aaa0b8abced24318105c1ea22576afcc1138c19f625716ce4e2f76ad64 \ - --hash=sha256:ae30c48ac795378cf23ba3c7c640b8ff794af714ac388b9fd6b31a40b39e6e86 \ - --hash=sha256:b2e94c713b7d96fb92841947b785bcee6606124bc852273fab70454b51bfe270 \ - --hash=sha256:bd30f7201eac896ebf5db7b09156e6f1a1b82601900d29d9c8449bdad8365b11 \ - --hash=sha256:bf98c0d7b7d5ef5bf072fee8d3020e8b664f2d195933ea7bc5089267c2e22a06 \ - --hash=sha256:d6a7ad82b8d5f3fcc04b1d2ca055562b96af571e1d4fa7c6c61d0fb509ac43b4 \ - --hash=sha256:e0e09fa633ce2e67df08b298afced4d184f6e753fc330f241022250f1d0d61da \ - --hash=sha256:e17d4ef9b0185214b2c0935605ae63f827ea423bc74964be44763d68d2b6c21e \ - --hash=sha256:f4977323ef9c3aa3c2a26ff5fe0191c84b8fd759daf7afb1f25a91a55ad8b730 \ - --hash=sha256:feebcba99ac99adb8009d46c8f4c1956b8c167576b0ae8a6fb47502e9a6f78e7 - # via - # -c requirements-ci.txt - # librosa -spacy==3.8.16 \ - --hash=sha256:024ce6408ea00c7f8c6387a6de65bb67aad40c51c9d63705303c5cb9a8ef51b0 \ - --hash=sha256:04fd0206c9f33a0542a40049211528742b5492ef5f971d06b151b9cc49b9237b \ - --hash=sha256:111d817b32755d869e5ed6cc258b55c50c6687f47b78f6ebb2c14b1ce5ee707c \ - --hash=sha256:15908539b375bd8e3c627a076dac793b8fd790c5945f3a696837dd70776a4fc0 \ - --hash=sha256:2810fd2ce41f6a8dde62642dad0d11fd9db7cb6a1cd40b1c8b70a01586e6ff9f \ - --hash=sha256:32fe82bfbe6711a4687e427c8eec44af7cd5e09322a252b35bc8166aa84b9025 \ - --hash=sha256:39304dd9800065c09fa440983ac75cf444469b159959171c0e0d761b3e854d62 \ - --hash=sha256:397a80c4d09a6237eebaaee00a2e5f8732ff4cc165f94679b899f30179d38ea8 \ - --hash=sha256:44a641085abbe3a09ea56a89f2e50b5f51aea6cf69213b70305fb48e341b883b \ - --hash=sha256:49fe8d6a6cf343777caf59a3d4ba76f81cee0dfc1abe78be571cdc2db0d77672 \ - --hash=sha256:4e91c4f9a320d964a27ffae1b62e37bb6e8c391aa837890a082d82bd9a89ed43 \ - --hash=sha256:5991c334e71c23b798c25e0d403295dde4d2d1fb58c2e075450b964db03c05ea \ - --hash=sha256:5e32a51b115674d3f42c6cde696c583dc1594f5bff6b430de4aba4c753d47f93 \ - --hash=sha256:6a1523ce0a1358936fa1abdc3a43f2ec558d4166ac5c2f246b33fd88e3f238aa \ - --hash=sha256:6c51eac85344784ca7b184f0c3f7da0fca47c354d63e05e733d90cae35a2ecc4 \ - --hash=sha256:770cc0581fc06c0723cb1488dc1d1da0570801168da786674626f342d903ed37 \ - --hash=sha256:81fe468596678c7bf717650b12352c8e4d174c72d050dcc01c8ee3c6c781ccad \ - --hash=sha256:86227a0a0d3dfee3f3dcc15f73c1387b586d77b075348afc250ffafea88ffcec \ - --hash=sha256:8681eb07f6b0e48fb3ba4a5f7f2582c0fc6df991d240b431b628131029c4ade3 \ - --hash=sha256:8a8a2bf3eb3486a0992176b77ac1d38ca9c669623941fdb8d3dddacb44dfd28e \ - --hash=sha256:8d0f63c3124d0a34a37e9b519d004cee1269744be07f91f843902e6c9f3e557a \ - --hash=sha256:97bb04bd81a3690c45dfd62d4bd19584aa544bb955c8b497fb488256d10ac54c \ - --hash=sha256:9e89bebe168ec8714b21f0225950f0525d0ef87109cfcb11e5d18ebb1f4e658a \ - --hash=sha256:a237491463e351755f0167546f6a821d42971c5275a219a62d468f19f654138b \ - --hash=sha256:a2c46c35467d963a62dc0407c99d3a18562d4c85ee887a57e4a07dde020f1a38 \ - --hash=sha256:a3d19da23637cc396b42d22fc33852680f675d8ddcb847d3e2a0d094712d1794 \ - --hash=sha256:b022ebde7465334c0631f74e0cd21dff257ee5f80ca68918c56fd64681b49463 \ - --hash=sha256:b741266d901222dde979a802d5e9f3cf3d9bf77a15be3137b387f62905a74d57 \ - --hash=sha256:bc4e59799dcb0eb4823e5946515d3ca0d503ff78ef2502172d4b59ee0fc567ec \ - --hash=sha256:cb07d4b8255be6b6ff3a34ada93173176d0937d2023b35302a34eed3364681c0 \ - --hash=sha256:cc5a850ba2ce371ac13893ef4153a7f3cf0d7fee8ca4ddea21fac2d2628d7ea0 \ - --hash=sha256:cc7e449aec9a313bc037ef5ea45fb0ac99135d92dace8421d68414d16be39543 \ - --hash=sha256:ccd74917536fa82896f31c66db5f230301ec2662b7ad3c0d8c3eb790b0fc6121 \ - --hash=sha256:ce120d4077050352f344b987354be3e3fddb207436b537cf91a891837657ce2c \ - --hash=sha256:dc17227717aa254b63c90161d8de4ec672ca5bd8e5c92effba2a8510498ee355 \ - --hash=sha256:e045765035e9760f38637101f41a7c89d3b69659dcc70e716bb4011a95969ac9 \ - --hash=sha256:e67052bebdeba53847d3d09058f814708d587c4fb2216c65239964a341da2280 \ - --hash=sha256:f08555e5204da7d9c3f8440d9d88dc3011edcfc1fd21689069091da1973c883b \ - --hash=sha256:f42f257404e749d9048d3b3b97004692210057d38e03c2f156817258bf6daf2b \ - --hash=sha256:f765cb6cbef82b5d98c46936a1385e87fb05919433fbc6b953e3c093ac30f8ef - # via - # -c requirements-ci.txt - # semantica (pyproject.toml) -spacy-legacy==3.0.12 \ - --hash=sha256:476e3bd0d05f8c339ed60f40986c07387c0a71479245d6d0f4298dbd52cda55f \ - --hash=sha256:b37d6e0c9b6e1d7ca1cf5bc7152ab64a4c4671f59c85adaf7a3fcb870357a774 - # via - # -c requirements-ci.txt - # spacy -spacy-loggers==1.0.5 \ - --hash=sha256:196284c9c446cc0cdb944005384270d775fdeaf4f494d8e269466cfa497ef645 \ - --hash=sha256:d60b0bdbf915a60e516cc2e653baeff946f0cfc461b452d11a4d5458c6fe5f24 - # via - # -c requirements-ci.txt - # spacy -srsly==2.5.3 \ - --hash=sha256:0017c7d2a0cd9a4f1bdc00d946b45edcf90bb0e271e8f084c1ce542bf6708c32 \ - --hash=sha256:06a43d63bde2e8cccadb953d7fff70b18196ca286b65dd2ad16006d65f3f8166 \ - --hash=sha256:07d682679e639eb46ff7e6da4a92714f4d5ffe351d088ee66f221e9b1f8865bb \ - --hash=sha256:08f98dbecbff3a31466c4ae7c833131f59d3655a0ad8ac749e6e2c149e2b0680 \ - --hash=sha256:0f106b0a700ab56e4a7c431b0f1444009ab6cb332edc7bbf6811c2a43f4722cb \ - --hash=sha256:111805927f05f5db440aeeacb85ce43da0b19ce7b2a09567a9ef8d30f3cc4d83 \ - --hash=sha256:14c930767cc169611a2dc14e23bc7638cfb616d6f79029700ade033607343540 \ - --hash=sha256:1a3d6e03c65e3af15bfb1ad18f1888ba0a8482903218c1a5b5ed6fd66f5b0fb1 \ - --hash=sha256:1c9129c4abe31903ff7996904a51afdd5428060de6c3d12af49a4da5e8df2821 \ - --hash=sha256:1d93c22f42dfc4383a89ff3fcbe89ed9b286cf1d7e762cba533f2fac5ed36b28 \ - --hash=sha256:1fd6c35c65c4d2435ae5bfb57b59682cf9b61606318a2a761856be9d7cc2d9e3 \ - --hash=sha256:21cf09e417d3e4f3fbf7dd337fd6d948c97abd01896b9b4cb80e81cd9778a73a \ - --hash=sha256:29d5d01ba4c2e9c01f936e5e6d5babc4a47b38c9cbd6e1ec23f6d5a49df32605 \ - --hash=sha256:2f2d464f0d0237e32fb53f0ec6f05418652c550e772b50e9918e83a1577cba4d \ - --hash=sha256:2f73c0db911552e94fe2016e1759d261d2f47926f68826664cada3723c87006a \ - --hash=sha256:2f76a2507cc2debf0aeb31120c8d04d752eb0ca8bd84599a62461796a3c0f71f \ - --hash=sha256:348c231b4477d8fe86603131d0f166d2feac9c372704dfc4398be71cc5b6fb07 \ - --hash=sha256:3576c125c486ce2958c2047e8858fe3cfc9ea877adfa05203b0986f9badee355 \ - --hash=sha256:39c13d552a9f9674a12cdcdc66b0c2f02f3430d0cd04c5f9cf598824c2bd3d65 \ - --hash=sha256:4b1b721cd3ad1a9b2343519aadc786a4d09d5c0666962d49852eb12d6ec3fe26 \ - --hash=sha256:4ca4a068f6e14d84113a02fcb875c6b50a6285a12938c0e7a157eb3a63c50a86 \ - --hash=sha256:4d6ebaeac9baa5c85b6b56c180458f1b4fef9213bc36b62fcbecf5b3d8a3001c \ - --hash=sha256:565f69083d33cb329cfc74317da937fb3270c0f40fabc1b4488702d8074b4a3e \ - --hash=sha256:598f1e494c18cacb978299d77125415a586417081959f8ec3f068b32d97f8933 \ - --hash=sha256:5c1ac27ae5f4bb9163c7d2c45fc8ec173aac3d92e32086d9472b326c5c6e570e \ - --hash=sha256:5c8df4039426d99f0148b5743542842ab96b82daded0b342555e15a639927757 \ - --hash=sha256:5f6a837954429ecbe6dcdd27390d2fb4c7d01a3f99c9ffcf9ce66b2a6dd1b738 \ - --hash=sha256:5fb59c42922e095d1ea36085c55bc16e2adb06a7bfe57b24d381e0194ae699f2 \ - --hash=sha256:63c0f4c088ddf0c736a24f7d7be1f6e2896a71822630c2805569b14de93eb393 \ - --hash=sha256:66ebae2c70305987341519ec1a720072a3cb3e4b1d52ac0e9e841f4d02658d3d \ - --hash=sha256:6a02d7dcc16126c8fae1c1c09b2072798a1dc482ab5f9c52b12c7114dac47325 \ - --hash=sha256:71d4cbe2b2a1335c76ed0acae2dc862163787d8b01a705e1949796907ed94ccd \ - --hash=sha256:71e51c046ccbeefb86524c6b1e17574f579c6ac4dc8ea4a09437d3e8f88342d3 \ - --hash=sha256:7326bc048073b04e4e7d59dd4a2d737c8e7cc270ef74ea1acb764382e995590c \ - --hash=sha256:785a09216ac31570fb301ddb9f61ee73d1f18f8b9561f712dce0b8ac8628bc88 \ - --hash=sha256:7ea5412ea229e571ac9738cbe14f845cc06c8e4e956afb5f42061ccd087ef31f \ - --hash=sha256:808cfafc047f0dec507a34c8fa8e4cda5722737fd33577df73452f52f7aca644 \ - --hash=sha256:8ac016ffaeac35bc010992b71bf8afdd39d458f201c8138d84cf78778a936e6c \ - --hash=sha256:8d3988970b4cf7d03bdd5b5169302ff84562dd2e1e0f84aeb34df3e5b5dc19bf \ - --hash=sha256:8e0542d85d6b55cf2934050d6ffcb1cd76c768dcf9572e7467002cf087bb366d \ - --hash=sha256:91688edb1f49110870d2c215db2cf445f1763c14173698ead0818908c51fb2a1 \ - --hash=sha256:916edb6dc1051732610e37863232e5a1d64bed7b130fed067f7dbc80d12d0065 \ - --hash=sha256:953d77ba0d8c96b29657622492c2c0bc7c161a304c069043a14c368aec20aeef \ - --hash=sha256:99026bcd9cbd3211cc36517400b04ca0fc5d3e412b14daf84ee6e65f67d9a2d8 \ - --hash=sha256:9ffc97e22730ea97b00f7c303ccc60b1305e786afadb2a4a46578dafa4d29da0 \ - --hash=sha256:a595958d0b1ff6d59c2570a3f0d1c8e36ab9f89d6e1b9c96fa7eb5e1a8698510 \ - --hash=sha256:b0938c2978c91ae1ef9c1f2ba35abb86330e198fb23469e356eba311e02233ee \ - --hash=sha256:b9df76d5a6bbf50967589bd42df3c522dd88babea2be745a507f56b41ab40626 \ - --hash=sha256:bc0ad5be2aeb9ff29c8512848d39d7c63fdd4bfbb5516bc523f5de5a77e55e6d \ - --hash=sha256:c378afcb7dd7c42f426a66112496c949fc39e5883de6817d86e60afa51720ccc \ - --hash=sha256:c812302a9acfe171e82f680b7ad642014cd017380b2c678441b3da4fb513c498 \ - --hash=sha256:d18933248a5bb0ad56a1bae6003a9a7f37daac2ecb0c5bcbfaaf081b317e1c84 \ - --hash=sha256:d2b8cfd8aee4d06ab335d359e4095d206102300a5e105a4b4bc69acca42427a6 \ - --hash=sha256:d822083fe26ec6728bd8c273ac121fc4ab3864a0fdf0cf0ff3efb188fcd209ed \ - --hash=sha256:e283fa2a8f7350fb9fb70ecdee28d59d39c92f4c7f1cc90a44d6b86db3b3a8b3 \ - --hash=sha256:e67b6bbacbfadea5e100266d2797f2d4cec9883ea4dc84a5537673850036a8d8 \ - --hash=sha256:f09b551f6c3e334652831ac68c770ee4284741ce0a3895bf1ccf2a1178d66cdd - # via - # -c requirements-ci.txt - # spacy - # thinc - # weasel -stack-data==0.6.3 \ - --hash=sha256:836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9 \ - --hash=sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695 - # via - # -c requirements-ci.txt - # ipython -standard-aifc==3.13.0 \ - --hash=sha256:64e249c7cb4b3daf2fdba4e95721f811bde8bdfc43ad9f936589b7bb2fae2e43 \ - --hash=sha256:f7ae09cc57de1224a0dd8e3eb8f73830be7c3d0bc485de4c1f82b4a7f645ac66 - # via - # audioread - # librosa -standard-chunk==3.13.0 \ - --hash=sha256:17880a26c285189c644bd5bd8f8ed2bdb795d216e3293e6dbe55bbd848e2982c \ - --hash=sha256:4ac345d37d7e686d2755e01836b8d98eda0d1a3ee90375e597ae43aaf064d654 - # via standard-aifc -standard-sunau==3.13.0 \ - --hash=sha256:53af624a9529c41062f4c2fd33837f297f3baa196b0cfceffea6555654602622 \ - --hash=sha256:b319a1ac95a09a2378a8442f403c66f4fd4b36616d6df6ae82b8e536ee790908 - # via - # audioread - # librosa starlette==1.6.0 \ --hash=sha256:a86dd39d14bb45f85a3d18525215a9ef0cfd1f192ac793220e72598c90335f0c \ --hash=sha256:d4e3ac5e546444960c710297a3c9fc3f7ebae1b7e963f3d36173b49da535be9b @@ -3462,188 +1106,33 @@ structlog==26.1.0 \ # via # -c requirements-ci.txt # semantica (pyproject.toml) -sympy==1.14.0 \ - --hash=sha256:d3d3fe8df1e5a0b42f0e7bdf50541697dbe7d23746e894990c030e2b05e72517 \ - --hash=sha256:e091cc3e99d2141a0ba2847328f5479b05d94a6635cb96148ccb3f34671bd8f5 - # via - # -c requirements-ci.txt - # torch -thinc==8.3.13 \ - --hash=sha256:0355c37e40d1a9fc2a1b8e9c2e294d8586f6baa97bcac6b9002f2dddb4b82ae9 \ - --hash=sha256:0a0fa13dcfe4b319c3a396432c1dbff30d3de37dbbdee559e76600ee2b9486df \ - --hash=sha256:11754fada9ad5ba2e02d5f3f234f940e24015b82333db58372f4a6aedad9b43f \ - --hash=sha256:303477eb51b9b39c94a7fc7967ee8a039eca1ca37d95dcce1234c83b95b4ee9f \ - --hash=sha256:3710d318b4e5460cf366a6f7b5ddbefb5d39dbd4cfa408222750fdc6c27c4411 \ - --hash=sha256:3dac18a0fb0a42f711c2ce9c02cbb090385aecae92089aa17b9dfd808a542013 \ - --hash=sha256:433e3826e018da489f1a8068e6de677f6eff3cc93991a599d90f12cd1bc26cdc \ - --hash=sha256:4565102638038a01a2193c7f5d41ccbd6233fbdcb1f1b184322a06add4f51f18 \ - --hash=sha256:4b5ec9ff313819e7d8667794a3559463fa89ff45aaa73e3fd8d6273b1e0d7a7f \ - --hash=sha256:5593e6300cb1ebe0c0e546e9c9fb49e7c2627a0aa688795cd4f995a8b820d2ec \ - --hash=sha256:565300b7e13de799e5abff00d445f537e9256cf7da4dcb0d0f005fc16748a29e \ - --hash=sha256:5a08c87143a6d20177652dca1ec0dc815d88216d8fc62594a57e8bc45bf5ed49 \ - --hash=sha256:5c9a48f2bc1e04f138240ed5f9b815a9141a5de26accd0f08fa0137fcefed258 \ - --hash=sha256:68e658549fc1eb3ff92aed5147fcbb9c15d6e9cc0e623b4d0998d16522ffb4f9 \ - --hash=sha256:723949cab11d1925c15447928513a718276316cec6e0de28337cca0a62be0521 \ - --hash=sha256:77a41f66285321d20aaedaea1e87d7cd48dca6d2427bed1867ec7cba7109fc8d \ - --hash=sha256:79a29a44d76bd02f5ac0624268c6e42b3576ae472c791a8ae9c2d813ae789b59 \ - --hash=sha256:7a99d0e242d1ccd23f9ae6bea7cd502f8626efa65c156b91d84581d0356696c3 \ - --hash=sha256:7badb0be4825535e6362c19e8a41872b65409e9da46d3453a391b843a0720865 \ - --hash=sha256:81337dfbee37f58f36c0c70f9a819dce1b32cdc13d959181e10de079621f6ac6 \ - --hash=sha256:84fb50fe572a1860165f2e7a640c7cb70d43d6962366e69f643fa9a27e4a2127 \ - --hash=sha256:859fbd9d9b16af5278da23589b4afbe2ab6b0dd615df4d3229b7c4e67cd3107e \ - --hash=sha256:8ad40307f20e83f77af28ff5c6be0b86af7a8b251d1231c545508d2763157d8f \ - --hash=sha256:a518d5c761a0f2341e530e867de133dc3ed814558365b2a68ec53b89c482a43f \ - --hash=sha256:a61a31fd0ce3c2771cf4901ba6df70e774ffe32febf1024c5b43d63575cd58fe \ - --hash=sha256:ba8119daf84a12259ae4d251d36426417bafa0b34108890b4b7e2b50966bd990 \ - --hash=sha256:c17cef1900a1aba7e1487493d16b8aa0a8633116f1b2a51c6649a4000697f17b \ - --hash=sha256:c2811dfd8d46d8b5d3b39051b23e64006b2994a5143b1978b436938018792af8 \ - --hash=sha256:c6a049703a6011c8fe26ee41af7e70272145594140d82f79bb23de619c6a6525 \ - --hash=sha256:cd8a2b714c061969eee65802965167a6ada1fe708d82fe176d98dcb95ebe182a \ - --hash=sha256:d7a9654f9ca362a4be7f5e590fdfee26e2e2084da9fd3306032ec037e99f2f8e \ - --hash=sha256:e08b1577a56e7315770af280aabd8fa5f2a1fb6afd1c50a4183c06e907faf558 \ - --hash=sha256:e1f8d13bf92ee10595c40692fd4cf8e7bbe73bd9f260107e975fd5dbee1af42b \ - --hash=sha256:e676edd21a747afbe3e6b9f3fca8b962e36d146ded03b070cb0c28e2dfbe9499 \ - --hash=sha256:e7f046d8914055cad51e83ff0da1a892acb73cd58556d7c1a5d4015a3766a899 \ - --hash=sha256:e9c7c5c104737b414c8c4ec578e67d78b6c859afe25cbc0684402e721415bd7f \ - --hash=sha256:ed1dc709ac4f2f03b710457889e4e02f05de51bc8456980c241d0b28798bc7cb \ - --hash=sha256:f4f26d1eec9b2a6a8f2e0298a5515d13eb06d70730d0d9e1040bb329e12bf3fb \ - --hash=sha256:f697174d3fb474966ce50b430bbafa101a6d2f7ffb559dac4b5c59389ef72d22 \ - --hash=sha256:fbc0ee16edd260c6a4a9e365ff36d0a682c9e7ca6d7b985682659ef2e3e73826 - # via - # -c requirements-ci.txt - # spacy threadpoolctl==3.6.0 \ --hash=sha256:43a0b8fd5a2928500110039e43a5eed8480b918967083ea48dc3ab9f13c4a7fb \ --hash=sha256:8ab8b4aa3491d812b623328249fab5302a68d2d71745c8a4c719a2fcaba9f44e # via # -c requirements-ci.txt # scikit-learn -tokenizers==0.23.1 \ - --hash=sha256:120468fb4c24faf0543c835a4fabafa4deb3f20a035c9b6e83d0b553a97615d4 \ - --hash=sha256:1974288a609c343774f1b897c8b482c791ab17b75ab5c8c2b1737565c1d82288 \ - --hash=sha256:1bf13402aff9bc533c89cb849ec3b412dc3fbeacc9744840e423d7bf3f7dc0e3 \ - --hash=sha256:1feeeadf865a7915adc25445dea30e9933e593c31bb96c277cee36de227c8bfa \ - --hash=sha256:5075b405006415ea148a992d093699c66eb01952bf59f4d5727089a98bda45a4 \ - --hash=sha256:53b09e85775d5187941e7bab30e941b4134ab4a7dd8c68e783d231fb7ca27c51 \ - --hash=sha256:56f3a77de629917652f876294dc9fe6bad4a0c43bc229dc72e59bb23a0f4729a \ - --hash=sha256:93120a930b919416da7cd10a2f606ac9919cc69cacae7980fa2140e277660948 \ - --hash=sha256:9d10a6d957ef01896dc274e890eee27d41bd0e74ef31e60616f0fc311345184e \ - --hash=sha256:a26197957d8e4425dfba746315f3c425ea00cfa8367c5fbc4ec73447893dcea9 \ - --hash=sha256:ae848657742035523fdf261773630cb819a26995fcd3d9ecae0c1daf6e5a4959 \ - --hash=sha256:e03d6ffcbe0d56ee9c1ccd070e70a13fa750727c0277e138152acbc0252c2224 \ - --hash=sha256:e0948bbb1ac1d7cdfc9fb6d62c596e3b7550036ad60ecd654a66ad273326324e \ - --hash=sha256:e3d8f40ea6268047de7046906326abed5134f27d4e8447b23763afe5808c8a96 \ - --hash=sha256:e7bfaf995c1bdbbd21d13539decb6650967013759318627d85daeb7881af16b7 \ - --hash=sha256:ea5a0ce170074329faaa8ea3f6400ecde604b6678192688533af80980daae71a \ - --hash=sha256:f836ca703b89ae07919a309f9651f7a88fd5a33d5f718ba5ad0870ec0256bad6 - # via - # -c requirements-ci.txt - # semantica (pyproject.toml) - # fastembed - # sentence-transformers - # transformers toml==0.10.2 \ --hash=sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b \ --hash=sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f # via # -c requirements-ci.txt # semantica (pyproject.toml) -torch==2.13.0 \ - --hash=sha256:024c6cc0c1b085f2f91f20a3dc27b0471d021c31ce84b81be3afdc39f791fd9d \ - --hash=sha256:092790c696a760c729fd5722835f50b9d81fd7c8f141571f3f3cf4081a8f664c \ - --hash=sha256:0ab4b69f3ee03a62a002cfbf77b1ca5e88aceb4ea64cb4388bb28f638ddbb045 \ - --hash=sha256:1e09d6a722504957c694faceca843acde562786df1144ebcc5a74075ec7f6005 \ - --hash=sha256:2bd30b6b730d987fa386ce3898933762c5cb8cc82eb0535211d787cc3ce2dfeb \ - --hash=sha256:2fe228aba290d14b9f31b049be550dbd469c3fd3013d7a19705b30454da97027 \ - --hash=sha256:31061ff56ed8fbf26c749806905aeb749ebeb819810fd5d52508aa5afd90dddc \ - --hash=sha256:33449899ce5496c1b84b4853179d94fd102028ae1407314d9fb956bb79e70d09 \ - --hash=sha256:49b58f1e2c52440abb6f17c28f0335fe6c6d01ad1a7f55b0183b81e4b34d64e6 \ - --hash=sha256:49f1ea385c754e54919408a9bb3b5a72b0b755bbe2c916c1d6f70afbec4908a2 \ - --hash=sha256:4f8573e3ce9ebcd53fe922f01077a6085ccdfbe5f12fd215883a9d87d7a744fd \ - --hash=sha256:572df8be8ffb4599c88cbd6a0726f1f854f4da65d2e3c09f0e2c2283333cd6d4 \ - --hash=sha256:60fcdcb2f3876e21146cb4524ef06397d727ca9ad5f020818547e25075fe3cb7 \ - --hash=sha256:796633c4cdf0fe2cdced72d8f88f22e73dbcfce83132763162f6d4bff13b820b \ - --hash=sha256:94f0de129916f77b8dc2c7a8eff644cfeddfe59e39c9f55e9f6e17543410281d \ - --hash=sha256:a0d8b11f16a48d60e2015d8213aa0390744cbebb98e58b62b3514dddc656e330 \ - --hash=sha256:a3893dc2da0a972a8ca5d698c85a9f967559ac5f8ee1797b77408aa8734d073c \ - --hash=sha256:a3a9a21312872af8a26950b2c15680335a386a1f56ed03e780653d78b9607e9e \ - --hash=sha256:a7de8a313090dc5c7d7ba4bfe5c3be222528f9a4dba1acc83bddb1157360c4b8 \ - --hash=sha256:c28def70706c2f9ecc752574766e8ae4da9b810ab6676b611166761a78a9f1e1 \ - --hash=sha256:c78b7b4d04461855a764cf01bae9a462bb88bc93defcfa11235cbc8fdf3e12c4 \ - --hash=sha256:cc26eead4cf51d0b544e31e364dcf000846549c273bd148936fe9d24d29acb92 \ - --hash=sha256:d849b390e07d8d333ce8ecaf91b273c656c598379a19c9acf1318a883f6b391c \ - --hash=sha256:e76f9bcecc52b8ff711239a2f7547d5353df95878ab232f0773c1d95928b92f8 - # via - # -c requirements-ci.txt - # semantica (pyproject.toml) - # sentence-transformers tqdm==4.70.0 \ --hash=sha256:55b0b0dbd97462d06ebee91e4dac24ed4d4702be82b24f07e6c1d27e08cea220 \ --hash=sha256:7f585706bfddbdebf89daac705b2dfcc16890130727d3197ca62c732b4310953 # via # -c requirements-ci.txt # semantica (pyproject.toml) - # fastembed - # huggingface-hub - # sentence-transformers - # spacy - # transformers - # umap-learn -traitlets==5.16.1 \ - --hash=sha256:ed900c2b631aa3a112811139fa97b8d2c3bad5e989656bba4b7e52c7852c18c1 \ - --hash=sha256:f775618166caa0396c8e337099240f2bd3e5e917d203b2e6fbe21a58d3cb1f6b - # via - # -c requirements-ci.txt - # ipython - # ipywidgets - # matplotlib-inline -transformers==5.16.1 \ - --hash=sha256:17b0eac726ddc55e84ac58946063e0c6d37fd000c456b581f050ea0f4e822869 \ - --hash=sha256:2f2d5b98a5ad3718713653734298fa620754ed683702a635ebb587df3ed29c7e - # via - # -c requirements-ci.txt - # semantica (pyproject.toml) - # sentence-transformers -triton==3.7.1 \ - --hash=sha256:10ba85fa2cca4a2fbdeb36bf1cb082f2c252bda55bf9fccd74f65ec5bc647e68 \ - --hash=sha256:2020153b08280415ec0da6607834e79166442147e78e144df06b508c75b186d2 \ - --hash=sha256:3daf64305d6cea88d3334c65ebc9bcd0c64c9564a977084366aa768d57cbcf64 \ - --hash=sha256:58c0e131da05134a2a4788ccbcc0c1105cf0f54c8e98f19e34cd465396dc15eb \ - --hash=sha256:6744957e9fd610a29680ec2346057d0c86948ed3812468670719f391e94b44a5 \ - --hash=sha256:7e40869937a68206ec70d7f25bb7ec6433cb083f9135e1f36dbd318dc449a728 \ - --hash=sha256:9497f2e696ee368862a181a90b2dcc03ca978cc4f602abd67c7d81022a6988e1 \ - --hash=sha256:c58e4c61f0c73b5dba3b5d19b4a7093c32f90dc18b2a7f121a7c16ccd31107b7 \ - --hash=sha256:cdbfc09d9ec58bc5e68321525653220de7515c199e7a8097a97c85e62b52cd0a \ - --hash=sha256:d4a0e1cd4c4a76370ed74a8432a53cea28716827d19e40ffc732233e35ceb3f6 \ - --hash=sha256:ee89fbf782ec2ad50391dd1cf26cbea4f4467154c37f4773026da8fc31c0f58e \ - --hash=sha256:fe4ea396a06171f1f1f58cbd39c70b09294398f7dd7c620939bab54ad6f934fa - # via - # -c requirements-ci.txt - # torch -typer==0.26.8 \ - --hash=sha256:3512ca79ac5c11113414b36e80281b872884477722440691c89d1112e321a49c \ - --hash=sha256:c244a6bd558886fe3f8780efb6bdd28bb9aff005a94eedebaa5cb32926fe2f7e - # via - # -c requirements-ci.txt - # spacy - # transformers - # weasel typing-extensions==4.16.0 \ --hash=sha256:481caa481374e813c1b176ada14e97f1f67a4539ce9cfeb3f350d78d6370c2e8 \ --hash=sha256:dc983d19a509c94dba722ee6abd33940f7c05a89e243c47e907eb4db6f1a43e5 # via # -c requirements-ci.txt - # beautifulsoup4 # fastapi # grpcio - # huggingface-hub - # librosa # pydantic # pydantic-core - # python-docx - # sentence-transformers - # soundfile - # torch # typing-inspection typing-inspection==0.4.4 \ --hash=sha256:547274fa6b0a561ccf549cc9524b999a578e737d015d8709d021f9d0d13bea47 \ @@ -3652,12 +1141,6 @@ typing-inspection==0.4.4 \ # -c requirements-ci.txt # fastapi # pydantic -umap-learn==0.5.12 \ - --hash=sha256:6aff02ecac5f2aad9f3c65ee518d7ae93e1a985ae38721fdcffceee4232c33c7 \ - --hash=sha256:f2a85d2a2adcb52b541bed9b27a23ca169b56bb1b23283abeebfb8dfb8a42fe5 - # via - # -c requirements-ci.txt - # semantica (pyproject.toml) urllib3==2.7.0 \ --hash=sha256:231e0ec3b63ceb14667c67be60f2f2c40a518cb38b03af60abc813da26505f4c \ --hash=sha256:9fb4c81ebbb1ce9531cce37674bbc6f1360472bc18ca9a553ede278ef7276897 @@ -3723,14 +1206,6 @@ uvloop==0.22.1 \ # via # -c requirements-ci.txt # uvicorn -wasabi==1.1.3 \ - --hash=sha256:4bb3008f003809db0c3e28b4daf20906ea871a2bb43f9914197d540f4f2e0878 \ - --hash=sha256:f76e16e8f7e79f8c4c8be49b4024ac725713ab10cd7f19350ad18a8e3f71728c - # via - # -c requirements-ci.txt - # spacy - # thinc - # weasel watchfiles==1.2.0 \ --hash=sha256:01859b11fd9fbca670f4d5da00fbac282cfea9bd67a2125d8b2833a3b5617ea9 \ --hash=sha256:01ea8d66f0693b9b60a6541c8d10263091ca9a9060d242f3c1f3143f9aad2c98 \ @@ -3842,18 +1317,6 @@ watchfiles==1.2.0 \ # via # -c requirements-ci.txt # uvicorn -wcwidth==0.8.3 \ - --hash=sha256:d128512515fbf4612e0ff21fd6380399210318b7b54a9af59dff8454cf9730eb \ - --hash=sha256:d5b73dba6158a595ec9370350e7f2637bcac8d6c5e4fde34f30fcffb6103a5e4 - # via - # -c requirements-ci.txt - # prompt-toolkit -weasel==1.0.0 \ - --hash=sha256:7b129b44c90cc543b760532974ca1e4eb30dad2aa2026f57bdce66354ae610fc \ - --hash=sha256:89518acee027f49d743126c3502d35e6dd14f5768be5c37c9af47c171b6005cc - # via - # -c requirements-ci.txt - # spacy websockets==15.0.1 \ --hash=sha256:0701bc3cfcb9164d04a14b149fd74be7347a530ad3bbf15ab2c678a2cd3dd9a2 \ --hash=sha256:0a34631031a8f05657e8e90903e656959234f3a04552259458aac0b0f9ae6fd9 \ @@ -3928,114 +1391,3 @@ websockets==15.0.1 \ # -c requirements-ci.txt # semantica (pyproject.toml) # uvicorn -widgetsnbextension==4.0.16 \ - --hash=sha256:a31a8774885b96fe825462f5d6496166f0c7cae111195b6465c801d230eb5a4e \ - --hash=sha256:adeea0ae78f0856ee4945f413299801b82a0a01416303301f39a704282a37b73 - # via - # -c requirements-ci.txt - # ipywidgets -wrapt==2.4.0 \ - --hash=sha256:0191d717dfbb8e519e7bfd4775e5b9bd57e359b3a09ab5db1ea47f6025b4d845 \ - --hash=sha256:0536f5d85ff6a157ebe7e0fe08c5479943742cf1ce59569075a66159efcbc495 \ - --hash=sha256:07daab5babb7edaf89413f5c8bd638474540fb2643b5dfb685bdc0680c96803a \ - --hash=sha256:08d8378c4514ac8dcc0ace76044cf87a873e6a52b5e6109834c8fb9037f4441b \ - --hash=sha256:09064c7be688c38c3ff125ce86bc26b69b5d78dd56062c3ddd9c814b2a25f1e1 \ - --hash=sha256:0972cd025f4c86fa2d8abd953d9f875779935343af58b4ce019ff89573fc65bd \ - --hash=sha256:0b8851a54b137eec9a8480d73cc1a309613e6a465d6f157300f1eb6b5b7c0505 \ - --hash=sha256:0eca69c9e93518240abe8801fb9b2726116a6e48172e4564c2651a2e14521747 \ - --hash=sha256:11ccb5f3de2047ef91408464abdc04682e40e7d7bc9614885d2abcaa7e2ef149 \ - --hash=sha256:15bb88c0a6c6312244917bb0a094368746fefb92663209363e16f20972a57b34 \ - --hash=sha256:1656de3835f760781c9b974bce07d8c04edb9c9ad7ad67264aee69cd68a1db09 \ - --hash=sha256:174f3576dacf55c8a7c21719d4b7c8088efb991888db5728cfc891b80b28853f \ - --hash=sha256:18aabd9301d06026f5900538051773d6f87f65ae02cdc60de482df978513dc0a \ - --hash=sha256:28f5de1526831b8f173889a436e289fe181ede8c66c9feb669d1aca8fd602eaf \ - --hash=sha256:2a9f1a2f75bb95257cc5744e255e10a5a86e923f328b40ad3dbf9d8d03430013 \ - --hash=sha256:2dc0f6412aaf5fc7e6a3abf119b7c671dbd026303daccac20112c046a48b68b9 \ - --hash=sha256:325c24cfddb46f93c931cf37fa3a9929ac94e70a5627efccd51283f9fd69c6db \ - --hash=sha256:328eb2d978ca3a6ae25f8d8fe560bf8f4bc9778b5932e7b142664eef05b92e8f \ - --hash=sha256:332d9bad7e9b718974bb2a576504c4956f45b4a0fcd7b3bb7827279167550464 \ - --hash=sha256:3367a5212212c9393e0d3ca6ae029b3a8fa40c5896e4a985d43fe8a4b8322f0d \ - --hash=sha256:36b56a4fba13b34ed8ff307557325fff215de0a58b5dbaef2c50e4d8aa39dbd1 \ - --hash=sha256:37ba372e9ae71ec43e165b5db05f52e71f7c07dafb9d6a254ef7128112dce751 \ - --hash=sha256:39cd68df4dff79f5336f9c745c06259d204bcb42d504040c9c91eac9e2abb39c \ - --hash=sha256:3a69161cae7f0dca44c89c1d14146b4a0508a0c3cad98b3f2db1f4e9016c94ba \ - --hash=sha256:3d5e5eb76fb87e62752af751d2dcd9d1cd986b12037d2e1363d109ba716029e8 \ - --hash=sha256:413e757dce7a43fcda8bb8441994b1127492ffac6a5803af777d44516df8c6e2 \ - --hash=sha256:430fde1a116df3ceb5c29035de1da6609b70e680d9b8ce3ee624422f3fe0978c \ - --hash=sha256:4597d19904b4aa97331d8bb651ac626d9397727e717942cf11bd7699ff97aa45 \ - --hash=sha256:49bb5a572469e0e18163a8ec2aa972135a0929899ecbe627665f274506e1b5b4 \ - --hash=sha256:4a1d591386ec4aa99780f672232868620f4f3b63401e2ceb529762580ef8c54e \ - --hash=sha256:4f8ddff4bbb75916be36da5169b8b9d475b59a1bd24acdb7551bb2c71be9aaac \ - --hash=sha256:52f01626f1d2bc54585954cd8b4931f81003b0ac8dad61c741f43014bc9a0f0b \ - --hash=sha256:5b8fff692f74782de89ba9d7b526a7cc398569b6a988ddc848159cc033c86237 \ - --hash=sha256:5c5c4c728cd22a36e4b8bb5df4a7d3bccaa865d27725b36eeb3b6f18fb2e1bc2 \ - --hash=sha256:5cc2e7c7b6032e11a2b367a9baadaf0c5241feff2d8205260d87f1aa6dbdf84b \ - --hash=sha256:5f041ed6a4d571010944bd6cfad9072db463e1851877b6d3227467a44af37456 \ - --hash=sha256:5f3bdfc35c83b562fcaebc0f24593045e5ed9f3b633adafd35222718a0ec38fa \ - --hash=sha256:635cc171ddfd72edff10e295a02daa65edaa1c0ba619ad11eeed15cd2258c5df \ - --hash=sha256:637fd6a18bb668a0c27b4767dcbc2fa93119c90da735bd2669fdde2d7b59fab3 \ - --hash=sha256:63b94f401d7ae3a9a3027472fd3a3ff38afd2ed293b2f0b3b84a6d133a9f99a3 \ - --hash=sha256:6436e2bda993a3eb69a1b317fc831c8ebcafb5704c390859ebd49f81218c4bbb \ - --hash=sha256:643e45aa88698c8aae938c50e61940985d4ab9e53ea666d3e8e4eb86a4820d0f \ - --hash=sha256:648d1d4f94e8a0a1656675c755f40d2f0ee5fe92c449ab45326f4ecc2738cbe8 \ - --hash=sha256:66e7512c0d324cc37bba1def2be1fc365cbb685d3aa393a8f6f4d2d00202881d \ - --hash=sha256:694005fdc3002ade0f21641408c588028abde03c85961f3ba7727d8bead3ed6b \ - --hash=sha256:6a48bc764deb585d3b8862544ca12df417109984e018767b4ac9aa46bbb55ccd \ - --hash=sha256:6b3e082d43f592fcd381aee46354a11ce887a813ce5bbcedd9766fd681723c09 \ - --hash=sha256:6b9b32d5e4f0a179cef5075cc79b79d6d3482c44c434c12969e48c6719e06d95 \ - --hash=sha256:6d57264c9dfcf37d2bf0b0fbec68d0f6184fc5617267619ada04d03e8b0231f3 \ - --hash=sha256:7082fc1f94b020ac275870c4af71b09cff22876fe6e9c4c0ad01ea21d217b288 \ - --hash=sha256:717dd7ef439863933664951f89902b7e0ee3652293543cb9917c2e16bbde1949 \ - --hash=sha256:72826910a1cf5a081234720fd43011304b899acfee219af49148155b4d795533 \ - --hash=sha256:75529a2fb569a671cf162f762c1b576f569f571b55ec7f3481258ca842ba507f \ - --hash=sha256:75944792cf6b99262d649d55710bf5901f7013fbb212c7a1d736b97a20517607 \ - --hash=sha256:788e473d1a6786d29d577b1e2bd95e214c09cdafde84907c522c31069c9acfac \ - --hash=sha256:7a057d376d994da6bd1bbf955ecfda699aa7353826f98847f5605e1801abdfd4 \ - --hash=sha256:7a27d9653e0f88aa06598954337a545fc3f75bc811df897157a8614846d18d9c \ - --hash=sha256:7d28f8f35a02d49f75f57fa4e755db4ba33f65841c0de64cd65b253916f5bf06 \ - --hash=sha256:7de5b8d94417e55c02be50cc226e0ae1209bbc73813bf691dff3979c94438115 \ - --hash=sha256:811a36628d8b76724b980d508d576e5c5ecae1073b6ec4b4eb21646921906fe6 \ - --hash=sha256:85ed3c67fd39e8d9a36c224758cb6f2f4eb277d07ea677930caa0008c18ec002 \ - --hash=sha256:8763ad01e3725b7751a4575f38bbcc19c0aa0822fec91c5c5bd21ce3ce7e1d2b \ - --hash=sha256:8828369b7d3e93c547cc8ad931b5a57b4e8d174035c82762fb1091e7d05ac9f5 \ - --hash=sha256:8b464316489fb2fca0669ea0f8f07290054a0f26fc72982d3e4cf95469628ba9 \ - --hash=sha256:9125c6dbe8b88c00dd8ef4fc1e55757e8eb4720b6b2b2cc610a45bd32bd28c57 \ - --hash=sha256:93180c2199784dd6a1075b33f9ed636bd0966821edbece6b3d5379b1c4f0bb7d \ - --hash=sha256:932a8892265df7b71257c30e5752635bc1f06a8c4e264024ff031bdf9bb10918 \ - --hash=sha256:947bd4b3438167b3638bf5477cb83a068a586ffb6d331ac427f39839c2b93b3c \ - --hash=sha256:9905bceb7b2833559518574ad6259d2ec9ffd111a0aa330ca685db74478e1ae3 \ - --hash=sha256:9c884240e7415d3a384e70a15ceea0e884cc9289bcc254afd6412d4e7cf99c47 \ - --hash=sha256:a1117c63a39ba4d1b884e658089e512412d5174217ea1b4fe570977e42a5b129 \ - --hash=sha256:a112a1bfdd2621e4344cb0a32dbaab80636b32dac1b055d03fbb2a67d806d1db \ - --hash=sha256:a67ec80d15ac199d4a9a04a33f3039a1c219c9bf1c07b1b0422497613f167fb9 \ - --hash=sha256:a9ca1cdb3f7facb4990c7739ea5afbaceeb6728d066feedde03a4cfe83b29b03 \ - --hash=sha256:abc347e92f9202c8ac1d5c1626a800fd5e56e13433f0651b26dddda5b421ac79 \ - --hash=sha256:b1737f46b1e4a81eb93500a7f2854319e1c7a86e8863fb050b7b4daadd5a4178 \ - --hash=sha256:b33df90f3d1e5b1c8811830b11a3e718b4f3a2823b748fa9be1688cb82b193f1 \ - --hash=sha256:be535bdfbedda84cb8ebc6a80955dfd03d46840c13470486bd038f089e38b172 \ - --hash=sha256:c246aaed719dcdb62eeb7b8d9306a6237777226ef3baad35919c4ae134c91ce7 \ - --hash=sha256:c4b42c92df24a986da7e2b5b44fb142504d858c54a276f9f366983ca4482dfda \ - --hash=sha256:c4fca1e63af6675af3df7cdfcd5a0c878b5e655c7e48611ced9dc8d62183a11d \ - --hash=sha256:d294576fddac636589e4deccfe782e8f429da10f167c1985c4d51071de3672b7 \ - --hash=sha256:d5f45bead708e2c0014be5e98531ce7202916b098a208c7be83c6ceb0a2559fa \ - --hash=sha256:d7c496a966d70f8caf215faddc00de9931a5bf652664221b785a73b20229a696 \ - --hash=sha256:d7dbbdbfdacb85c2d962fa52db791c77943fd777d600d74c95af2d53b32f5a94 \ - --hash=sha256:d8e6e1e5dc684dfce7c33fc8b67a08ba2af94f3a45cfc70d5c1d6a839d2caf97 \ - --hash=sha256:db1285071ea09a7767fac608e7b5c7b03c09833b06186875a359905fbc659d29 \ - --hash=sha256:e084558fbd112d2e1e34b0f5c71e45a3405bdad51a17150368a959bcf6697964 \ - --hash=sha256:e52c6a5be3284719e53b629ccfa565c146e604e861de35e861c94f7622806eb5 \ - --hash=sha256:e78c947e18fadfd690c9420c30a96d221feeb93fc8f1cc00509b370ac16c3114 \ - --hash=sha256:e8df31a126a0a247c1aa379e30873839de03912dea09ca360c680f3625d815df \ - --hash=sha256:e9e7e94472f0e3f1447caf27e1939eb384d0e87972a35a05f5c2e0968e9c01af \ - --hash=sha256:e9f8017443595870aa31f46125553a5c55ce95a26a267b96261baee6ba566d83 \ - --hash=sha256:ef4e2d6e399ce6eecc80179a6b9ef6544f121288f95fc132bc36c9d9503903af \ - --hash=sha256:ef9797bf7c6f9ad9d294538c4f9a64ef3dbbadb63590a9a067393fd49ba28b0f \ - --hash=sha256:efd9a4be6785295e471f71efdf5682bd11d5b822b9665e6e1b4844917cf2f7ac \ - --hash=sha256:f1e9e088094f4895f84ab043e7d59401df137d663efbf1e80c82144882960830 \ - --hash=sha256:f43af38a642c3d6062e9740d8f5cc0feb5dbe0da516702df892147393b8cb14d \ - --hash=sha256:f53837b56ca834f381d300621f8c9525b9da517331ce0f4b805ed08f63bedcd7 \ - --hash=sha256:f7fed45dbadf5d98a52bfff9624d3cca00affeb9543d493c9632b7a53cdd35c9 \ - --hash=sha256:fc1b2cebd6d8db9b4ac0adc817c08b4901922e85604ae2a69aecb5217b2c09d8 - # via - # -c requirements-ci.txt - # smart-open diff --git a/CHANGELOG.md b/CHANGELOG.md index 427a5e7b..354fdc0c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,32 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [0.7.0] - 2026-09-07 + +### Changed + +- **Slim core dependencies: moved ~22 heavy packages to optional extras** (#1513) + - Core dependencies in `pyproject.toml` are now reduced to exactly 22 direct packages: `numpy`, `pandas`, `scipy`, `scikit-learn`, `rdflib`, `networkx`, `requests`, `chardet`, `protobuf`, `grpcio`, `pillow`, `pydantic`, `click`, `rich`, `tqdm`, `pyyaml`, `toml`, `python-dotenv`, `loguru`, `structlog`, `httpx`, and `pyarrow`. + - Heavy ML/NLP, visualization, document parsing, and ingestion packages moved into granular optional extras: + - `models-huggingface`: `torch`, `transformers` + - `embeddings-local`: `sentence-transformers`, `fastembed`, `onnxruntime`, `tokenizers` + - `nlp-spacy`: `spacy`, `thinc` + - `viz`: expanded to include `matplotlib`, `seaborn`, `plotly`, `ipywidgets`, `umap-learn`, alongside `pyvis`, `graphviz`, and `d3blocks` + - `media`: `librosa`, `opencv-python` + - `vectorstore-faiss`: `faiss-cpu` (also included in `vectorstore-all`) + - `documents`: `python-docx`, `openpyxl`, `lxml`, `beautifulsoup4` + - `ingest-git`: `GitPython` + - `graph-embeddings`: `gensim` (also included in `graph-all`) + - Full bundled behavior preserved via `pip install "semantica[all]"`, which includes all optional extras. Pinning `semantica<0.7.0` remains a permanent escape hatch for legacy workflows. + - Safe lazy construction across parsers and visualizers: + - `DOCXParser`, `ExcelParser`, `HTMLParser`, and `XMLParser` remain constructible without error on `__init__()`. They fail only upon calling `.parse()` with actionable error messages directing users to install `semantica[documents]`. + - `XMLParser` automatically falls back to standard library `xml.etree` (`_parse_with_etree`) when `lxml` is not installed, preserving XML parsing capabilities without extra dependencies. + - `EmbeddingVisualizer` and `OntologyVisualizer` safely guard `matplotlib` and optional reduction packages, advising `pip install 'semantica[viz]'`. + - `RepoIngestor` guards `GitPython` with a clear error pointing to `semantica[ingest-git]`. + - `PublicAPIIngestor` guards `lxml` and `_SAFE_XML_PARSER`. + - Updated user-facing installation hints across CLI doctor commands, node embeddings (`NodeEmbedder`), vector stores (`FAISSStore`), and model loaders. + - Recompiled CI lockfiles (`requirements-ci.txt`, `.github/requirements/explorer-extra-py311.txt`, `.github/requirements/explorer-extra-py313.txt`, and `.github/requirements/base-deps.txt`). + ## [0.6.8] - 2026-09-05 ### Added diff --git a/CITATION.cff b/CITATION.cff index e8cf3506..22a194b9 100644 --- a/CITATION.cff +++ b/CITATION.cff @@ -7,7 +7,7 @@ authors: repository-code: "https://github.com/semantica-agi/semantica" url: "https://getsemantica.ai" license: MIT -version: 0.6.8 +version: 0.7.0 date-released: 2026-09-05 keywords: - knowledge-graph diff --git a/README.md b/README.md index 8958f26d..beee7b95 100644 --- a/README.md +++ b/README.md @@ -1480,6 +1480,14 @@ app = create_app(session=GraphSession(graph), agent_memory=memory) The Memories workspace is shown only when `agent_memory` is provided. Apply updates the supplied runtime object; it does not add disk persistence. +## What's New in v0.7.0 + +**Slim core dependencies: lightweight base install with granular optional extras** — `pip install semantica` now installs only 22 essential core dependencies, moving heavy packages into dedicated optional extras: +- **Dramatically lighter and faster installation**: Core installation no longer pulls heavy machine learning or visualization packages by default. +- **Granular extras**: Install only what your workload requires (`documents`, `embeddings-local`, `models-huggingface`, `nlp-spacy`, `viz`, `media`, `vectorstore-faiss`, `graph-embeddings`, `ingest-git`). +- **Full backward compatibility**: `pip install "semantica[all]"` preserves the full bundled suite, while `semantica<0.7.0` remains a permanent escape hatch. +- **Lazy parser construction & graceful fallbacks**: Document parsers can be constructed without extras and only raise actionable error hints upon calling `.parse()`; `XMLParser` automatically falls back to Python's standard library `xml.etree`. + --- ## What's New in v0.6.8 @@ -1518,32 +1526,42 @@ Semantica is designed for environments where AI outputs must be explainable, aud ## Installation ```bash -pip install semantica # core -pip install semantica[all] # everything +pip install semantica # lightweight core (22 essential dependencies) +pip install "semantica[all]" # full bundled behavior with all extras ``` +> **Note for upgrades from <0.7.0**: In Semantica 0.7.0+, heavy machine learning, NLP, visualization, and document dependencies were moved into optional extras to make core installation significantly lighter and faster. If you want the previous bundled installation, install with `pip install "semantica[all]"` or pin `semantica<0.7.0`. + ```bash -pip install semantica[agno] # Agno multi-agent integration -pip install semantica[crewai] # CrewAI integration -pip install semantica[langchain] # LangChain / LangGraph integration -pip install semantica[llm-litellm] # OpenAI, Anthropic, Gemini, Mistral, Llama, Groq, Cohere, Bedrock, Ollama, DeepSeek, and more -pip install semantica[graph-neo4j] # Neo4j graph store (LPG) -pip install semantica[graph-falkordb] # FalkorDB graph store (LPG) -pip install semantica[graph-apache-age] # Apache AGE graph store (LPG) -pip install semantica[graph-amazon-neptune] # AWS Neptune graph store (LPG) -pip install semantica[tripletstore-oxigraph] # Embedded in-memory/on-disk RDF store +# Granular Extras +pip install "semantica[documents]" # Document parsing (docx, openpyxl, lxml, beautifulsoup4) +pip install "semantica[embeddings-local]" # Local embeddings (sentence-transformers, fastembed, onnxruntime) +pip install "semantica[models-huggingface]" # HuggingFace models (transformers, torch) +pip install "semantica[nlp-spacy]" # spaCy NLP pipelines (spacy, thinc) +pip install "semantica[viz]" # Visualization (matplotlib, seaborn, plotly, pyvis, graphviz) +pip install "semantica[media]" # Audio & computer vision (librosa, opencv-python) +pip install "semantica[graph-embeddings]" # Knowledge graph embeddings (gensim / Node2Vec) +pip install "semantica[ingest-git]" # Git repository ingestor (GitPython) +pip install "semantica[vectorstore-faiss]" # FAISS vector store +pip install "semantica[vectorstore-all]" # All vector stores (Qdrant, Pinecone, Weaviate, FAISS, PgVector, SQLite) +pip install "semantica[agno]" # Agno multi-agent integration +pip install "semantica[crewai]" # CrewAI integration +pip install "semantica[langchain]" # LangChain / LangGraph integration +pip install "semantica[llm-all]" # All LLM provider clients +pip install "semantica[graph-neo4j]" # Neo4j graph store (LPG) +pip install "semantica[graph-falkordb]" # FalkorDB graph store (LPG) +pip install "semantica[graph-apache-age]" # Apache AGE graph store (LPG) +pip install "semantica[graph-amazon-neptune]" # AWS Neptune graph store (LPG) +pip install "semantica[tripletstore-oxigraph]" # Embedded in-memory/on-disk RDF store # RDF triple stores (Blazegraph, Apache Jena, Eclipse RDF4J) need no extra: # semantica.triplet_store talks SPARQL over HTTP using the core `requests` dependency -pip install semantica[vectorstore-qdrant] # Qdrant vector store -pip install semantica[vectorstore-pinecone] # Pinecone vector store -pip install semantica[db-snowflake] # Snowflake -pip install semantica[db-databricks] # Databricks (SDK + SQL connector) -pip install semantica[ingest-sap] # SAP OData -pip install semantica[ingest-parquet] # Parquet / PyArrow -pip install semantica[ingest-arrow] # Apache Arrow, Feather, IPC -pip install semantica[viz] # HTML interactive visualization -pip install semantica[watch] # Directory file watcher -pip install semantica[explorer] # Knowledge Explorer dashboard +pip install "semantica[db-snowflake]" # Snowflake +pip install "semantica[db-databricks]" # Databricks (SDK + SQL connector) +pip install "semantica[ingest-sap]" # SAP OData +pip install "semantica[ingest-parquet]" # Parquet / PyArrow +pip install "semantica[ingest-arrow]" # Apache Arrow, Feather, IPC +pip install "semantica[watch]" # Directory file watcher +pip install "semantica[explorer]" # Knowledge Explorer dashboard ``` For production deployments, use Docker or Kubernetes rather than a local `pip install`. Set `SEMANTICA_API_KEY`, configure a persistent LPG graph store (Neo4j / FalkorDB / Apache AGE / AWS Neptune) and/or RDF triple store (Blazegraph / Apache Jena / Eclipse RDF4J), and point the vector store at a hosted backend (Qdrant / Pinecone). See [ARCHITECTURE.md](ARCHITECTURE.md) for the full deployment topology. diff --git a/pyproject.toml b/pyproject.toml index 154eaa76..3646838d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "semantica" -version = "0.6.8" +version = "0.7.0" description = "Graph-Native Infrastructure for Context and Accountable AI Systems: context graphs, decision intelligence, full provenance tracking, and explainable reasoning engines — every AI decision traceable, every output auditable." readme = "README.md" license = { text = "MIT" } @@ -52,30 +52,13 @@ dependencies = [ # last 3.9-compatible release line; 3.10+ is left unconstrained. "scikit-learn>=1.6.1,<1.7.0; python_version < '3.10'", "scikit-learn>=1.7.2; python_version >= '3.10'", - "umap-learn>=0.5.12", - # thinc (spacy's core dep) dropped Python 3.9 wheels at 8.3.10, and later - # spacy patch releases (3.8.8+) require thinc>=8.3.9-only-on-3.10+ ranges, - # which forces a source build that fails outright on 3.9 (see Install - # Matrix run history). Capping both keeps 3.9 on the last wheel-compatible - # pair; 3.10+ is left unconstrained to always get the latest spacy/thinc. - "spacy>=3.4.0,<3.8.8; python_version < '3.10'", - "spacy>=3.4.0; python_version >= '3.10'", - "thinc<8.3.5; python_version < '3.10'", - "transformers>=4.20.0", - "torch>=1.13.1", - "sentence-transformers>=2.2.0", "rdflib>=6.2.0", "networkx>=2.8.0", - "matplotlib>=3.9.4", - "seaborn>=0.13.2", - "plotly>=6.8.0", - "ipywidgets>=8.0.0", # requests dropped Python 3.9 support at 2.33.0 (requires_python >=3.10), # so an unqualified >=2.34.2 floor is unsatisfiable on 3.9. Cap 3.9 to the # last 3.9-compatible release; 3.10+ is left unconstrained. "requests>=2.32.5,<2.33.0; python_version < '3.10'", "requests>=2.34.2; python_version >= '3.10'", - "GitPython>=3.1.58", # chardet dropped Python 3.9 support at 6.0.0 (requires_python >=3.10), so # an unqualified >=7.4.3 floor is unsatisfiable on 3.9. Cap 3.9 to the last # 3.9-compatible release; 3.10+ is left unconstrained. @@ -87,26 +70,11 @@ dependencies = [ # 3.9-compatible release; 3.10+ is left unconstrained. "grpcio>=1.80.0,<1.81.0; python_version < '3.10'", "grpcio>=1.81.1; python_version >= '3.10'", - "beautifulsoup4>=4.15.0", - "lxml>=6.1.1", - "python-docx>=1.2.0", - "openpyxl>=3.1.5", # pillow dropped Python 3.9 support at 12.0.0 (requires_python >=3.10), so # an unqualified >=12.2.0 floor is unsatisfiable on 3.9. Cap 3.9 to the last # 3.9-compatible release; 3.10+ is left unconstrained. "pillow>=11.3.0,<12.0.0; python_version < '3.10'", "pillow>=12.2.0; python_version >= '3.10'", - "librosa>=0.9.0", - "opencv-python>=4.13.0.92", - "faiss-cpu>=1.7.0", - "fastembed>=0.2.0", - # onnxruntime stopped shipping cp39 wheels at 1.20.0 (its PyPI metadata - # still claims requires_python >=3.9, but no matching wheel exists), so an - # unqualified >=1.20.1 floor is unsatisfiable on 3.9. Cap 3.9 to the last - # release with a cp39 wheel; 3.10+ is left unconstrained. - "onnxruntime>=1.19.2,<1.20.0; python_version < '3.10'", - "onnxruntime>=1.20.1; python_version >= '3.10'", - "tokenizers>=0.15.0", "pydantic>=2.13.4", # click dropped Python 3.9 support at 8.2.0 (requires_python >=3.10), so an # unqualified >=8.4.2 floor is unsatisfiable on 3.9. Cap 3.9 to the last @@ -120,7 +88,6 @@ dependencies = [ "python-dotenv>=1.2.1", "loguru>=0.7.3", "structlog>=22.1.0", - "gensim>=4.4.0", "httpx<0.29.0", "pyarrow>=14.0.0" ] @@ -152,6 +119,12 @@ llm-all = [ ] # ---- Document Parsing ---- +documents = [ + "python-docx>=1.2.0", + "openpyxl>=3.1.5", + "lxml>=6.1.1", + "beautifulsoup4>=4.15.0" +] parse-docling = ["docling>=2.107.0"] # ---- SHACL Validation ---- @@ -165,6 +138,7 @@ db-salesforce = ["simple-salesforce>=1.12.0"] ingest-parquet = ["pyarrow>=24.0.0"] ingest-arrow = ["pyarrow>=24.0.0"] ingest-sap = ["requests>=2.28.0"] +ingest-git = ["GitPython>=3.1.58"] db-all = [ "semantica[db-snowflake,db-databricks,db-salesforce,db-arrow]" @@ -175,21 +149,35 @@ models-huggingface = [ "transformers>=4.20.0", "torch>=1.13.1" ] +embeddings-local = [ + "sentence-transformers>=2.2.0", + "fastembed>=0.2.0", + "onnxruntime>=1.19.2,<1.20.0; python_version < '3.10'", + "onnxruntime>=1.20.1; python_version >= '3.10'", + "tokenizers>=0.15.0" +] +nlp-spacy = [ + "spacy>=3.4.0,<3.8.8; python_version < '3.10'", + "spacy>=3.4.0; python_version >= '3.10'", + "thinc<8.3.5; python_version < '3.10'" +] # ---- Graph Backends ---- graph-neo4j = ["neo4j>=5.0.0"] graph-falkordb = ["falkordb>=1.0.0", "redis>=4.3.0"] graph-amazon-neptune = ["boto3>=1.24.0", "neo4j>=5.0.0"] graph-apache-age = ["psycopg2-binary>=2.9.0"] +graph-embeddings = ["gensim>=4.4.0"] graph-all = [ - "semantica[graph-neo4j,graph-falkordb,graph-amazon-neptune,graph-apache-age]" + "semantica[graph-neo4j,graph-falkordb,graph-amazon-neptune,graph-apache-age,graph-embeddings]" ] # ---- Triplet Store Backends ---- tripletstore-oxigraph = ["pyoxigraph>=0.5.0"] # ---- Vector Store Backends ---- +vectorstore-faiss = ["faiss-cpu>=1.7.0"] vectorstore-qdrant = ["qdrant-client>=1.0.0"] vectorstore-weaviate = ["weaviate-client>=4.0.0"] vectorstore-pinecone = ["pinecone>=3.0.0"] @@ -198,7 +186,7 @@ vectorstore-pgvector = ["psycopg[binary,pool]>=3.0.0", "pgvector>=0.2.0"] vectorstore-sqlite = ["sqlite-vec>=0.1.1"] vectorstore-all = [ - "semantica[vectorstore-qdrant,vectorstore-weaviate,vectorstore-pinecone,vectorstore-milvus,vectorstore-pgvector,vectorstore-sqlite]" + "semantica[vectorstore-qdrant,vectorstore-weaviate,vectorstore-pinecone,vectorstore-milvus,vectorstore-pgvector,vectorstore-sqlite,vectorstore-faiss]" ] # ---- Infra / Queues / Workers ---- @@ -230,7 +218,18 @@ monitoring = [ viz = [ "pyvis>=0.3.0", "graphviz>=0.21", - "d3blocks>=1.0.0" + "d3blocks>=1.0.0", + "matplotlib>=3.9.4", + "seaborn>=0.13.2", + "plotly>=6.8.0", + "ipywidgets>=8.0.0", + "umap-learn>=0.5.12" +] + +# ---- Media ---- +media = [ + "librosa>=0.9.0", + "opencv-python>=4.13.0.92" ] # ---- GPU ---- @@ -294,8 +293,7 @@ explorer-lite = [ # (CVE-2026-45829) with no fixed release — including it here would fail the CI # dependency-audit/security gates. Install it explicitly via ``semantica[crewai]``. all = [ - "semantica[dev,viz,infra,cloud,monitoring,watch,llm-all,models-huggingface,split-all,graph-all,tripletstore-oxigraph,vectorstore-all,parse-docling,ingest-parquet,ingest-arrow,shacl,explorer]", - "semantica[dev,viz,infra,cloud,monitoring,watch,llm-all,models-huggingface,split-all,graph-all,tripletstore-oxigraph,vectorstore-all,parse-docling,ingest-parquet,ingest-arrow,shacl,agno,langchain,google-adk]" + "semantica[dev,viz,media,infra,cloud,monitoring,watch,llm-all,models-huggingface,embeddings-local,nlp-spacy,documents,ingest-git,graph-embeddings,split-all,graph-all,tripletstore-oxigraph,vectorstore-all,parse-docling,ingest-parquet,ingest-arrow,shacl,explorer,agno,langchain,google-adk]" ] # ---------------- ENTRYPOINTS ---------------- diff --git a/requirements-ci.txt b/requirements-ci.txt index 482a967f..c90c394f 100644 --- a/requirements-ci.txt +++ b/requirements-ci.txt @@ -181,6 +181,7 @@ anyio==4.14.2 \ # jupyter-server # langsmith # openai + # pinecone # starlette # watchfiles argon2-cffi==25.1.0 \ diff --git a/semantica/__init__.py b/semantica/__init__.py index cdbcb815..c674cdfd 100644 --- a/semantica/__init__.py +++ b/semantica/__init__.py @@ -10,7 +10,7 @@ Main exports: - Config: Configuration management """ -__version__ = "0.6.8" +__version__ = "0.7.0" __author__ = "Semantica Contributors" __license__ = "MIT" diff --git a/semantica/cli.py b/semantica/cli.py index dd8c09b5..8d728b33 100644 --- a/semantica/cli.py +++ b/semantica/cli.py @@ -880,10 +880,18 @@ def doctor(cli_ctx: CLIContext, local_json: bool, deep_embeddings: bool) -> None def _embedding_backend(method: str) -> str: if method == "sentence_transformers": import sentence_transformers # noqa: F401 - note = f"importable ({importlib.metadata.version('sentence-transformers')})" + try: + ver = importlib.metadata.version("sentence-transformers") + except Exception: + ver = getattr(sentence_transformers, "__version__", "installed") + note = f"importable ({ver})" else: import fastembed # noqa: F401 - note = f"importable ({importlib.metadata.version('fastembed')})" + try: + ver = importlib.metadata.version("fastembed") + except Exception: + ver = getattr(fastembed, "__version__", "installed") + note = f"importable ({ver})" if not deep: return note try: @@ -904,12 +912,12 @@ def doctor(cli_ctx: CLIContext, local_json: bool, deep_embeddings: bool) -> None checks.append(_check( "Embeddings (sentence-transformers)", lambda: _embedding_backend("sentence_transformers"), - hint="pip install sentence-transformers", + hint="pip install 'semantica[embeddings-local]'", )) checks.append(_check( "Embeddings (fastembed)", lambda: _embedding_backend("fastembed"), - hint="pip install fastembed", + hint="pip install 'semantica[embeddings-local]'", )) # LLM provider keys diff --git a/semantica/embeddings/provider_stores.py b/semantica/embeddings/provider_stores.py index 7213c9b6..3b1df9d0 100644 --- a/semantica/embeddings/provider_stores.py +++ b/semantica/embeddings/provider_stores.py @@ -212,7 +212,7 @@ class FastEmbedStore(ProviderStore): self.logger.info(f"Loaded FastEmbed model: {self.model_name}") except (ImportError, OSError): self.logger.warning( - "fastembed not available. Install with: pip install fastembed" + "fastembed not available. Install with: pip install 'semantica[embeddings-local]'" ) except Exception as e: self.logger.warning(f"Failed to load FastEmbed model: {e}") diff --git a/semantica/embeddings/text_embedder.py b/semantica/embeddings/text_embedder.py index 584b8e50..f4e69e4e 100644 --- a/semantica/embeddings/text_embedder.py +++ b/semantica/embeddings/text_embedder.py @@ -35,6 +35,7 @@ try: SENTENCE_TRANSFORMERS_AVAILABLE = True except (ImportError, OSError): + SentenceTransformer = None SENTENCE_TRANSFORMERS_AVAILABLE = False try: @@ -42,6 +43,7 @@ try: FASTEMBED_AVAILABLE = True except (ImportError, OSError): + TextEmbedding = None FASTEMBED_AVAILABLE = False @@ -156,7 +158,7 @@ class TextEmbedder: else: self.logger.warning( "fastembed not available. " - "Install with: pip install fastembed. " + "Install with: pip install 'semantica[embeddings-local]'. " "Using fallback embedding method." ) else: @@ -178,7 +180,7 @@ class TextEmbedder: else: self.logger.warning( "sentence-transformers not available. " - "Install with: pip install sentence-transformers. " + "Install with: pip install 'semantica[embeddings-local]'. " "Using fallback embedding method." ) diff --git a/semantica/export/vector_exporter.py b/semantica/export/vector_exporter.py index 04e4d0a5..fc299224 100644 --- a/semantica/export/vector_exporter.py +++ b/semantica/export/vector_exporter.py @@ -421,7 +421,7 @@ class VectorExporter: import numpy as np except (ImportError, OSError): raise ImportError( - "FAISS not installed. Install with: pip install faiss-cpu or faiss-gpu" + "FAISS not installed. Install with: pip install 'semantica[vectorstore-faiss]' (or 'semantica[gpu]' for CUDA)" ) # Extract vectors and IDs diff --git a/semantica/ingest/__init__.py b/semantica/ingest/__init__.py index 320a3bbb..e7859604 100644 --- a/semantica/ingest/__init__.py +++ b/semantica/ingest/__init__.py @@ -248,32 +248,42 @@ _LAZY_EXPORTS: Dict[str, Tuple[str, str]] = { _OPTIONAL_DEPENDENCY_MESSAGES = { ".repo_ingestor": ( "Repository ingestion requires optional dependency 'GitPython'. " - "Install it before importing RepoIngestor or using ingest_repository()." + "Install it before importing RepoIngestor or using ingest_repository(). " + "Install it with: pip install 'semantica[ingest-git]'" ), ".web_ingestor": ( "Web ingestion requires optional dependency 'beautifulsoup4'. " - "Install it before importing WebIngestor or using ingest_web()." + "Install it before importing WebIngestor or using ingest_web(). " + "Install it with: pip install 'semantica[documents]'" ), ".feed_ingestor": ( "Feed ingestion requires optional dependency 'beautifulsoup4'. " - "Install it before importing FeedIngestor or using ingest_feed()." + "Install it before importing FeedIngestor or using ingest_feed(). " + "Install it with: pip install 'semantica[documents]'" ), ".email_ingestor": ( "Email ingestion requires optional dependency 'beautifulsoup4'. " - "Install it before importing EmailIngestor or using ingest_email()." + "Install it before importing EmailIngestor or using ingest_email(). " + "Install it with: pip install 'semantica[documents]'" + ), + ".xml_ingestor": ( + "XML ingestion requires optional dependency 'lxml'. " + "Install it before importing XMLIngestor or using ingest_xml(). " + "Install it with: pip install 'semantica[documents]'" ), ".parquet_ingestor": ( "Parquet ingestion requires optional dependency 'pyarrow'. " - "Install it before importing ParquetIngestor or using ingest_parquet()." + "Install it before importing ParquetIngestor or using ingest_parquet(). " + "Install it with: pip install 'semantica[ingest-parquet]'" ), ".arrow_ingestor": ( "Arrow ingestion requires optional dependency 'pyarrow'. " - "Install it before importing ArrowIngestor or using ingest_arrow()." + "Install it before importing ArrowIngestor or using ingest_arrow(). " + "Install it with: pip install 'semantica[ingest-arrow]'" ), ".salesforce_ingestor": ( "Salesforce ingestion requires optional dependency 'simple-salesforce'. " - "Install it with: pip install \"semantica[db-salesforce]\" " - "or: pip install simple-salesforce>=1.12.0" + "Install it with: pip install 'semantica[db-salesforce]'" ), } @@ -289,7 +299,7 @@ def __getattr__(name: str) -> Any: except ModuleNotFoundError as exc: message = _OPTIONAL_DEPENDENCY_MESSAGES.get(module_name) missing_name = getattr(exc, "name", None) - if message and missing_name in {"git", "bs4", "pyarrow", "simple_salesforce"}: + if message and missing_name in {"git", "bs4", "pyarrow", "simple_salesforce", "lxml"}: raise ImportError(message) from exc raise diff --git a/semantica/ingest/methods.py b/semantica/ingest/methods.py index 15378705..3736288b 100644 --- a/semantica/ingest/methods.py +++ b/semantica/ingest/methods.py @@ -887,7 +887,12 @@ def ingest_repository( config = ingest_config.get_method_config("repo") config.update(kwargs) - ingestor = RepoIngestor(**config) + try: + ingestor = RepoIngestor(**config) + except ImportError as exc: + raise _missing_optional_dependency( + "Repository ingestion", "GitPython" + ) from exc if method == "clone" or ( isinstance(source, str) diff --git a/semantica/ingest/public_api_ingestor.py b/semantica/ingest/public_api_ingestor.py index 2ea15b20..7df07be4 100644 --- a/semantica/ingest/public_api_ingestor.py +++ b/semantica/ingest/public_api_ingestor.py @@ -28,7 +28,21 @@ from typing import Any, Dict, List, Optional, Tuple from urllib.parse import parse_qs, urlparse import requests -from lxml import etree as lxml_etree + +try: + from lxml import etree as lxml_etree + _SAFE_XML_PARSER = lxml_etree.XMLParser( + resolve_entities=False, + no_network=True, + recover=False, + huge_tree=False, + load_dtd=False, + ) + _LXML_SYNTAX_ERRORS: Tuple[type, ...] = (lxml_etree.XMLSyntaxError,) +except (ImportError, ModuleNotFoundError): + lxml_etree = None + _SAFE_XML_PARSER = None + _LXML_SYNTAX_ERRORS = () try: from defusedxml import ElementTree as safe_xml_etree @@ -71,14 +85,6 @@ AUTH_PARAM_NAMES = { "subscription-key", } -_SAFE_XML_PARSER = lxml_etree.XMLParser( - resolve_entities=False, - no_network=True, - recover=False, - huge_tree=False, - load_dtd=False, -) - @dataclass class PublicAPIExample: @@ -730,7 +736,7 @@ class PublicAPIIngestor(RESTIngestor): raise ProcessingError( f"Failed to parse {detected_format.upper()} public API response" ) from exc - except (DefusedXmlException, lxml_etree.XMLSyntaxError) as exc: + except (DefusedXmlException, *_LXML_SYNTAX_ERRORS) as exc: raise ProcessingError("Failed to parse XML public API response") from exc def _detect_response_format( @@ -770,11 +776,16 @@ class PublicAPIIngestor(RESTIngestor): def _parse_xml(self, xml_text: str) -> Dict[str, Any]: if safe_xml_etree is not None: root = safe_xml_etree.fromstring(xml_text) - else: + elif lxml_etree is not None and _SAFE_XML_PARSER is not None: root = lxml_etree.fromstring( xml_text.encode("utf-8"), parser=_SAFE_XML_PARSER, ) + else: + raise ProcessingError( + "XML parsing requires 'defusedxml' or 'lxml'. " + "Install it with: pip install 'semantica[documents]'" + ) return self._element_to_dict(root) def _element_to_dict(self, element: Any) -> Dict[str, Any]: diff --git a/semantica/ingest/repo_ingestor.py b/semantica/ingest/repo_ingestor.py index ad0a9b88..da045a0b 100644 --- a/semantica/ingest/repo_ingestor.py +++ b/semantica/ingest/repo_ingestor.py @@ -44,7 +44,10 @@ from pathlib import Path from typing import Any, Dict, List, Optional, Set, Tuple, Union from urllib.parse import urlparse -import git +try: + import git +except (ImportError, ModuleNotFoundError): + git = None from ..utils.exceptions import ProcessingError, ValidationError from ..utils.logging import get_logger @@ -525,6 +528,11 @@ class RepoIngestor: **kwargs: Additional configuration parameters (merged into config) """ self.logger = get_logger("repo_ingestor") + if git is None: + raise ImportError( + "GitPython is required for repository ingestion. " + "Install it with: pip install 'semantica[ingest-git]'" + ) self.config = config or {} self.config.update(kwargs) diff --git a/semantica/ingest/xml_ingestor.py b/semantica/ingest/xml_ingestor.py index 57523538..c7689f90 100644 --- a/semantica/ingest/xml_ingestor.py +++ b/semantica/ingest/xml_ingestor.py @@ -24,7 +24,10 @@ from datetime import datetime from pathlib import Path from typing import Any, Dict, List, Optional, Tuple, Union -from lxml import etree +try: + from lxml import etree +except (ImportError, ModuleNotFoundError): + etree = None from ..utils.constants import FILE_SIZE_LIMITS from ..utils.exceptions import ProcessingError, ValidationError @@ -72,6 +75,11 @@ class XMLIngestor: **kwargs: Additional configuration values """ self.logger = get_logger("xml_ingestor") + if etree is None: + raise ProcessingError( + "lxml is required for XMLIngestor. " + "Install it with: pip install 'semantica[documents]'" + ) self.config = config or {} self.config.update(kwargs) self.progress_tracker = get_progress_tracker() diff --git a/semantica/kg/node_embeddings.py b/semantica/kg/node_embeddings.py index 551edf77..517a863d 100644 --- a/semantica/kg/node_embeddings.py +++ b/semantica/kg/node_embeddings.py @@ -141,7 +141,7 @@ class NodeEmbedder: if method == "node2vec" and not GENSIM_AVAILABLE: raise ImportError( - "gensim is required for Node2Vec. Install with: pip install gensim" + "gensim is required for Node2Vec. Install with: pip install 'semantica[graph-embeddings]'" ) def compute_embeddings( diff --git a/semantica/parse/docx_parser.py b/semantica/parse/docx_parser.py index 9282ddcb..390e8ba8 100644 --- a/semantica/parse/docx_parser.py +++ b/semantica/parse/docx_parser.py @@ -32,12 +32,20 @@ from dataclasses import dataclass, field from pathlib import Path from typing import Any, Dict, List, Optional, Union -from docx import Document -from docx.document import Document as DocxDocument -from docx.oxml.table import CT_Tbl -from docx.oxml.text.paragraph import CT_P -from docx.table import Table -from docx.text.paragraph import Paragraph +try: + from docx import Document + from docx.document import Document as DocxDocument + from docx.oxml.table import CT_Tbl + from docx.oxml.text.paragraph import CT_P + from docx.table import Table + from docx.text.paragraph import Paragraph +except (ImportError, ModuleNotFoundError): + Document = None + DocxDocument = None + CT_Tbl = None + CT_P = None + Table = None + Paragraph = None from ..utils.exceptions import ProcessingError, ValidationError from ..utils.logging import get_logger @@ -99,6 +107,12 @@ class DOCXParser: Returns: dict: Parsed document data """ + if Document is None: + raise ProcessingError( + "python-docx is required to parse DOCX files. " + "Install it with: pip install 'semantica[documents]'" + ) + file_path = Path(file_path) # Track DOCX parsing diff --git a/semantica/parse/excel_parser.py b/semantica/parse/excel_parser.py index b8943939..c3ba3d91 100644 --- a/semantica/parse/excel_parser.py +++ b/semantica/parse/excel_parser.py @@ -33,7 +33,10 @@ from pathlib import Path from typing import Any, Dict, List, Optional, Union import pandas as pd -from openpyxl import load_workbook +try: + from openpyxl import load_workbook +except (ImportError, ModuleNotFoundError): + load_workbook = None from ..utils.exceptions import ProcessingError, ValidationError from ..utils.logging import get_logger @@ -92,6 +95,12 @@ class ExcelParser: Returns: ExcelData or ExcelSheet: Parsed Excel data """ + if load_workbook is None: + raise ProcessingError( + "openpyxl is required to parse Excel files. " + "Install it with: pip install 'semantica[documents]'" + ) + file_path = Path(file_path) # Track Excel parsing diff --git a/semantica/parse/html_parser.py b/semantica/parse/html_parser.py index 44705f38..8cf4007e 100644 --- a/semantica/parse/html_parser.py +++ b/semantica/parse/html_parser.py @@ -33,7 +33,10 @@ from pathlib import Path from typing import Any, Dict, List, Optional, Union from urllib.parse import urljoin -from bs4 import BeautifulSoup +try: + from bs4 import BeautifulSoup +except (ImportError, ModuleNotFoundError): + BeautifulSoup = None from ..utils.exceptions import ProcessingError, ValidationError from ..utils.logging import get_logger @@ -113,6 +116,12 @@ class HTMLParser: Returns: HTMLData: Parsed HTML data """ + if BeautifulSoup is None: + raise ProcessingError( + "beautifulsoup4 is required to parse HTML files. " + "Install it with: pip install 'semantica[documents]'" + ) + # Track HTML parsing file_path = None if isinstance(html_content, Path) or ( diff --git a/semantica/parse/methods.py b/semantica/parse/methods.py index 4e9e9365..8dd74824 100644 --- a/semantica/parse/methods.py +++ b/semantica/parse/methods.py @@ -178,7 +178,7 @@ def parse_document( >>> text = parse_document("document.pdf", method="default", extract_text=True) """ custom_method = method_registry.get("document", method) - if custom_method: + if custom_method and custom_method != parse_document: fallback = kwargs.pop("fallback_on_custom_error", False) result = call_custom_method( logger, method, custom_method, file_path, file_type, fallback_on_custom_error=fallback, **kwargs @@ -289,7 +289,7 @@ def parse_web_content( >>> html = parse_web_content("page.html", content_type="html", method="default") """ custom_method = method_registry.get("web", method) - if custom_method: + if custom_method and custom_method != parse_web_content: fallback = kwargs.pop("fallback_on_custom_error", False) result = call_custom_method( logger, method, custom_method, content, content_type, base_url, fallback_on_custom_error=fallback, **kwargs @@ -345,7 +345,7 @@ def parse_structured_data( >>> csv_data = parse_structured_data("data.csv", data_format="csv", method="default") """ custom_method = method_registry.get("structured", method) - if custom_method: + if custom_method and custom_method != parse_structured_data: fallback = kwargs.pop("fallback_on_custom_error", False) result = call_custom_method( logger, method, custom_method, data, data_format, fallback_on_custom_error=fallback, **kwargs @@ -392,7 +392,7 @@ def parse_email( >>> headers = parse_email("email.eml", method="headers") """ custom_method = method_registry.get("email", method) - if custom_method: + if custom_method and custom_method != parse_email: fallback = kwargs.pop("fallback_on_custom_error", False) result = call_custom_method( logger, method, custom_method, email_content, fallback_on_custom_error=fallback, **kwargs @@ -442,7 +442,7 @@ def parse_code( >>> structure = parse_code("script.py", method="ast") """ custom_method = method_registry.get("code", method) - if custom_method: + if custom_method and custom_method != parse_code: fallback = kwargs.pop("fallback_on_custom_error", False) result = call_custom_method( logger, method, custom_method, file_path, language, fallback_on_custom_error=fallback, **kwargs @@ -495,7 +495,7 @@ def parse_media( >>> video = parse_media("video.mp4", method="default") """ custom_method = method_registry.get("media", method) - if custom_method: + if custom_method and custom_method != parse_media: fallback = kwargs.pop("fallback_on_custom_error", False) result = call_custom_method( logger, method, custom_method, file_path, media_type, fallback_on_custom_error=fallback, **kwargs @@ -541,7 +541,7 @@ def parse_pdf( >>> pages = parse_pdf("document.pdf", method="default", pages=[1, 2, 3]) """ custom_method = method_registry.get("document", method) - if custom_method: + if custom_method and custom_method not in (parse_pdf, parse_document): fallback = kwargs.pop("fallback_on_custom_error", False) result = call_custom_method( logger, method, custom_method, file_path, fallback_on_custom_error=fallback, **kwargs @@ -585,7 +585,7 @@ def parse_docx( >>> docx = parse_docx("document.docx", method="default") """ custom_method = method_registry.get("document", method) - if custom_method: + if custom_method and custom_method not in (parse_docx, parse_document): fallback = kwargs.pop("fallback_on_custom_error", False) result = call_custom_method( logger, method, custom_method, file_path, fallback_on_custom_error=fallback, **kwargs @@ -628,7 +628,7 @@ def parse_json(file_path: Union[str, Path], method: str = "default", **kwargs) - >>> flattened = parse_json("data.json", method="default", flatten=True) """ custom_method = method_registry.get("structured", method) - if custom_method: + if custom_method and custom_method not in (parse_json, parse_structured_data): fallback = kwargs.pop("fallback_on_custom_error", False) result = call_custom_method( logger, method, custom_method, file_path, fallback_on_custom_error=fallback, **kwargs @@ -675,7 +675,7 @@ def parse_csv( >>> tab_separated = parse_csv("data.tsv", delimiter="\t", method="default") """ custom_method = method_registry.get("structured", method) - if custom_method: + if custom_method and custom_method not in (parse_csv, parse_structured_data): fallback = kwargs.pop("fallback_on_custom_error", False) result = call_custom_method( logger, method, custom_method, file_path, delimiter, fallback_on_custom_error=fallback, **kwargs @@ -714,7 +714,7 @@ def parse_xml(file_path: Union[str, Path], method: str = "default", **kwargs) -> >>> xml_data = parse_xml("data.xml", method="default") """ custom_method = method_registry.get("structured", method) - if custom_method: + if custom_method and custom_method not in (parse_xml, parse_structured_data): fallback = kwargs.pop("fallback_on_custom_error", False) result = call_custom_method( logger, method, custom_method, file_path, fallback_on_custom_error=fallback, **kwargs @@ -762,7 +762,7 @@ def parse_image( >>> ocr_text = image.get("ocr_result", {}).get("text", "") """ custom_method = method_registry.get("media", method) - if custom_method: + if custom_method and custom_method not in (parse_image, parse_media): fallback = kwargs.pop("fallback_on_custom_error", False) result = call_custom_method( logger, method, custom_method, file_path, fallback_on_custom_error=fallback, **kwargs diff --git a/semantica/parse/web_parser.py b/semantica/parse/web_parser.py index 443c7d0e..0ea4f8e7 100644 --- a/semantica/parse/web_parser.py +++ b/semantica/parse/web_parser.py @@ -33,7 +33,10 @@ from pathlib import Path from typing import Any, Dict, List, Optional, Union from urllib.parse import urljoin, urlparse -from bs4 import BeautifulSoup +try: + from bs4 import BeautifulSoup +except (ImportError, ModuleNotFoundError): + BeautifulSoup = None from ..utils.exceptions import ProcessingError, ValidationError from ..utils.logging import get_logger @@ -187,6 +190,12 @@ class HTMLContentParser(HTMLParser): } # Load HTML for structure extraction + if BeautifulSoup is None: + raise ProcessingError( + "beautifulsoup4 is required for HTML structure extraction. " + "Install it with: pip install 'semantica[documents]'" + ) + if isinstance(html_content, Path) or ( isinstance(html_content, str) and Path(html_content).exists() ): @@ -243,6 +252,12 @@ class HTMLContentParser(HTMLParser): else: html_string = html_content + if BeautifulSoup is None: + raise ProcessingError( + "beautifulsoup4 is required for HTML cleaning. " + "Install it with: pip install 'semantica[documents]'" + ) + soup = BeautifulSoup(html_string, "html.parser") # Remove scripts and styles diff --git a/semantica/parse/xml_parser.py b/semantica/parse/xml_parser.py index cbf3b7c9..5088577c 100644 --- a/semantica/parse/xml_parser.py +++ b/semantica/parse/xml_parser.py @@ -34,7 +34,10 @@ from dataclasses import dataclass, field from pathlib import Path from typing import Any, Dict, List, Optional, Union -from lxml import etree +try: + from lxml import etree +except (ImportError, ModuleNotFoundError): + etree = None from ..utils.exceptions import ProcessingError, ValidationError from ..utils.logging import get_logger @@ -105,7 +108,13 @@ class XMLParser: ) try: - engine = options.get("engine", "lxml") + explicit_engine = options.get("engine") or self.config.get("engine") + engine = explicit_engine or ("lxml" if etree is not None else "etree") + if engine == "lxml" and etree is None: + raise ProcessingError( + "lxml is required to parse XML with engine='lxml'. " + "Install it with: pip install 'semantica[documents]'" + ) # Load XML content if file_path_obj: @@ -249,6 +258,12 @@ class XMLParser: xml_data = self.parse(file_path, **options) # Use lxml for XPath queries + if etree is None: + raise ProcessingError( + "lxml is required for find_elements (XPath queries). " + "Install it with: pip install 'semantica[documents]'" + ) + xml_string = ( file_path if isinstance(file_path, str) and not Path(file_path).exists() diff --git a/semantica/semantic_extract/methods.py b/semantica/semantic_extract/methods.py index c38bcf88..10fe3e76 100644 --- a/semantica/semantic_extract/methods.py +++ b/semantica/semantic_extract/methods.py @@ -209,6 +209,11 @@ def load_spacy_model(name: str): Raises whatever ``spacy.load`` raises (``OSError`` for a missing model), so callers keep their existing fallback behavior. """ + if spacy is None: + raise ImportError( + "spaCy is not installed. Install with: pip install 'semantica[nlp-spacy]'" + ) + cached = _spacy_model_cache.get(name) if cached is not None and cached[0] is spacy: return cached[1] diff --git a/semantica/semantic_extract/providers.py b/semantica/semantic_extract/providers.py index 241c6ca4..5e76e8f6 100644 --- a/semantica/semantic_extract/providers.py +++ b/semantica/semantic_extract/providers.py @@ -1184,7 +1184,7 @@ class HuggingFaceLLMProvider(BaseProvider): import torch except (ImportError, OSError): raise ImportError( - "torch is required for HuggingFaceLLMProvider. Install with: pip install torch" + "torch is required for HuggingFaceLLMProvider. Install with: pip install 'semantica[models-huggingface]'" ) self.model_name = model_name @@ -1204,7 +1204,7 @@ class HuggingFaceLLMProvider(BaseProvider): self.model.eval() except (ImportError, OSError): self.logger.warning( - "transformers library not installed. Install with: pip install semantica[models-huggingface]" + "transformers library not installed. Install with: pip install 'semantica[models-huggingface]'" ) except Exception as e: self.logger.warning( @@ -1271,7 +1271,7 @@ class HuggingFaceModelLoader: import torch except (ImportError, OSError): raise ImportError( - "torch is required for HuggingFaceModelLoader. Install with: pip install torch" + "torch is required for HuggingFaceModelLoader. Install with: pip install 'semantica[models-huggingface]'" ) self.device = device or ("cuda" if torch.cuda.is_available() else "cpu") @@ -1293,7 +1293,7 @@ class HuggingFaceModelLoader: from transformers import pipeline except ImportError: raise ImportError( - "transformers library not installed. Install with: pip install semantica[models-huggingface]" + "transformers library not installed. Install with: pip install 'semantica[models-huggingface]'" ) try: @@ -1326,7 +1326,7 @@ class HuggingFaceModelLoader: from transformers import pipeline, AutoTokenizer except ImportError: raise ImportError( - "transformers library not installed. Install with: pip install semantica[models-huggingface]" + "transformers library not installed. Install with: pip install 'semantica[models-huggingface]'" ) try: @@ -1362,7 +1362,7 @@ class HuggingFaceModelLoader: from transformers import AutoModelForSeq2SeqLM, AutoTokenizer, pipeline except ImportError: raise ImportError( - "transformers library not installed. Install with: pip install semantica[models-huggingface]" + "transformers library not installed. Install with: pip install 'semantica[models-huggingface]'" ) try: diff --git a/semantica/vector_store/faiss_store.py b/semantica/vector_store/faiss_store.py index f02595ec..880c8e6e 100644 --- a/semantica/vector_store/faiss_store.py +++ b/semantica/vector_store/faiss_store.py @@ -343,7 +343,9 @@ class FAISSIndex: was originally saved. """ if not FAISS_AVAILABLE: - raise ProcessingError("FAISS not available") + raise ProcessingError( + "FAISS not available. Install with: pip install 'semantica[vectorstore-faiss]' (or 'semantica[gpu]' for CUDA)" + ) path = Path(path) index = faiss.read_index(str(path)) @@ -482,7 +484,7 @@ class FAISSIndexBuilder: """ if not FAISS_AVAILABLE: raise ProcessingError( - "FAISS is not available. Install it with: pip install faiss-cpu or faiss-gpu" + "FAISS is not available. Install it with: pip install 'semantica[vectorstore-faiss]' (or 'semantica[gpu]' for CUDA)" ) # Create index based on type @@ -554,7 +556,7 @@ class FAISSStore: # Check FAISS availability if not FAISS_AVAILABLE: self.logger.warning( - "FAISS not available. Install with: pip install faiss-cpu or faiss-gpu" + "FAISS not available. Install with: pip install 'semantica[vectorstore-faiss]' (or 'semantica[gpu]' for CUDA)" ) def create_index( @@ -753,7 +755,9 @@ class FAISSStore: FAISSIndex instance """ if not FAISS_AVAILABLE: - raise ProcessingError("FAISS not available") + raise ProcessingError( + "FAISS not available. Install with: pip install 'semantica[vectorstore-faiss]' (or 'semantica[gpu]' for CUDA)" + ) path = Path(path) if path.exists() and not _metadata_path(path).exists(): diff --git a/semantica/visualization/analytics_visualizer.py b/semantica/visualization/analytics_visualizer.py index 2f570257..bcac07a4 100644 --- a/semantica/visualization/analytics_visualizer.py +++ b/semantica/visualization/analytics_visualizer.py @@ -85,7 +85,7 @@ class AnalyticsVisualizer: if px is None or go is None: raise ProcessingError( "Plotly is required for analytics visualization. " - "Install with: pip install plotly" + "Install with: pip install 'semantica[viz]'" ) if np is None: raise ProcessingError( diff --git a/semantica/visualization/embedding_visualizer.py b/semantica/visualization/embedding_visualizer.py index b8671582..b6ba2d88 100644 --- a/semantica/visualization/embedding_visualizer.py +++ b/semantica/visualization/embedding_visualizer.py @@ -33,7 +33,10 @@ License: MIT from pathlib import Path from typing import Any, Dict, List, Optional, Tuple, Union -import matplotlib.pyplot as plt +try: + import matplotlib.pyplot as plt +except (ImportError, OSError): + plt = None import numpy as np try: @@ -45,8 +48,12 @@ except (ImportError, OSError): go = None make_subplots = None -from sklearn.decomposition import PCA -from sklearn.manifold import TSNE +try: + from sklearn.decomposition import PCA + from sklearn.manifold import TSNE +except (ImportError, OSError): + PCA = None + TSNE = None try: import umap @@ -99,7 +106,7 @@ class EmbeddingVisualizer: if px is None or go is None: raise ProcessingError( "Plotly is required for embedding visualization. " - "Install with: pip install plotly" + "Install with: pip install 'semantica[viz]'" ) def visualize_2d_projection( @@ -632,7 +639,7 @@ class EmbeddingVisualizer: else: # Fallback to PCA if UMAP not available self.logger.warning( - "UMAP not available, using PCA. Install with: pip install umap-learn" + "UMAP not available, using PCA. Install with: pip install 'semantica[viz]'" ) pca = PCA(n_components=n_components) return pca.fit_transform(embeddings) diff --git a/semantica/visualization/kg_visualizer.py b/semantica/visualization/kg_visualizer.py index b265df70..e00b099c 100644 --- a/semantica/visualization/kg_visualizer.py +++ b/semantica/visualization/kg_visualizer.py @@ -124,7 +124,7 @@ class KGVisualizer: if px is None or go is None: raise ProcessingError( "Plotly is required for KG visualization. " - "Install with: pip install plotly" + "Install with: pip install 'semantica[viz]'" ) def _convert_knowledge_graph(self, kg: Any) -> Dict[str, Any]: diff --git a/semantica/visualization/ontology_visualizer.py b/semantica/visualization/ontology_visualizer.py index 82e6682a..b3ec564d 100644 --- a/semantica/visualization/ontology_visualizer.py +++ b/semantica/visualization/ontology_visualizer.py @@ -35,8 +35,14 @@ License: MIT from pathlib import Path from typing import Any, Dict, List, Optional, Union -import matplotlib.patches as mpatches -import matplotlib.pyplot as plt +try: + import matplotlib.patches as mpatches + import matplotlib.pyplot as plt + from matplotlib.patches import FancyBboxPatch +except (ImportError, OSError): + mpatches = None + plt = None + FancyBboxPatch = None try: import plotly.express as px @@ -47,8 +53,6 @@ except (ImportError, OSError): go = None make_subplots = None -from matplotlib.patches import FancyBboxPatch - try: import graphviz except (ImportError, OSError): @@ -106,13 +110,13 @@ class OntologyVisualizer: if graphviz is None: raise ProcessingError( "Graphviz is required for DOT export. " - "Install with: pip install graphviz" + "Install with: pip install 'semantica[viz]'" ) else: - if px is None or go is None: + if go is None: raise ProcessingError( "Plotly is required for ontology visualization. " - "Install with: pip install plotly" + "Install with: pip install 'semantica[viz]'" ) def visualize_hierarchy( @@ -892,7 +896,7 @@ class OntologyVisualizer: """Create Graphviz hierarchy visualization.""" if graphviz is None: raise ProcessingError( - "Graphviz not available. Install with: pip install graphviz" + "Graphviz not available. Install with: pip install 'semantica[viz]'" ) dot = graphviz.Digraph(comment="Ontology Hierarchy") diff --git a/semantica/visualization/semantic_network_visualizer.py b/semantica/visualization/semantic_network_visualizer.py index cd860e9c..19771c56 100644 --- a/semantica/visualization/semantic_network_visualizer.py +++ b/semantica/visualization/semantic_network_visualizer.py @@ -74,7 +74,7 @@ class SemanticNetworkVisualizer: if px is None or go is None: raise ProcessingError( "Plotly is required for semantic network visualization. " - "Install with: pip install plotly" + "Install with: pip install 'semantica[viz]'" ) def visualize_network( diff --git a/semantica/visualization/temporal_visualizer.py b/semantica/visualization/temporal_visualizer.py index a0d519f0..2a5963f2 100644 --- a/semantica/visualization/temporal_visualizer.py +++ b/semantica/visualization/temporal_visualizer.py @@ -83,7 +83,7 @@ class TemporalVisualizer: if px is None or go is None: raise ProcessingError( "Plotly is required for temporal visualization. " - "Install with: pip install plotly" + "Install with: pip install 'semantica[viz]'" ) def visualize_temporal_dashboard( diff --git a/tests/semantic_extract/test_temporal_extraction.py b/tests/semantic_extract/test_temporal_extraction.py index 7b8ffcc7..9aa7d46a 100644 --- a/tests/semantic_extract/test_temporal_extraction.py +++ b/tests/semantic_extract/test_temporal_extraction.py @@ -18,14 +18,11 @@ from datetime import datetime, timezone from unittest.mock import MagicMock, patch # ── Mock optional heavyweight dependencies before any semantica import ────── -sys.modules.setdefault("spacy", MagicMock()) -sys.modules.setdefault("instructor", MagicMock()) -_openai_mock = MagicMock() -sys.modules.setdefault("openai", _openai_mock) -sys.modules.setdefault("groq", MagicMock()) -sys.modules.setdefault("sentence_transformers", MagicMock()) -sys.modules.setdefault("transformers", MagicMock()) -sys.modules.setdefault("torch", MagicMock()) +_MOCKED_MODULES = ["spacy", "instructor", "openai", "groq", "sentence_transformers", "transformers", "torch"] +_original_modules = {k: sys.modules.get(k) for k in _MOCKED_MODULES} + +for k in _MOCKED_MODULES: + sys.modules.setdefault(k, MagicMock()) sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), "../.."))) @@ -38,6 +35,12 @@ from semantica.semantic_extract.schemas import ( from semantica.kg.temporal_normalizer import TemporalNormalizer from semantica.utils.exceptions import TemporalAmbiguityWarning +for _key, _original in _original_modules.items(): + if _original is None: + sys.modules.pop(_key, None) + else: + sys.modules[_key] = _original + # ── Helpers ───────────────────────────────────────────────────────────────── diff --git a/tests/test_cli_commands.py b/tests/test_cli_commands.py index c2b5f870..add47075 100644 --- a/tests/test_cli_commands.py +++ b/tests/test_cli_commands.py @@ -2302,7 +2302,7 @@ class TestDoctorEmbeddings: checks = self._doctor_checks(runner) st = checks["Embeddings (sentence-transformers)"] assert st["status"] == "fail" - assert st["hint"] == "pip install sentence-transformers" + assert st["hint"] == "pip install 'semantica[embeddings-local]'" def test_deep_probe_detects_fallback_active(self, runner, monkeypatch): self._with_fake_st(monkeypatch) diff --git a/tests/test_issue_1513_slim_core.py b/tests/test_issue_1513_slim_core.py new file mode 100644 index 00000000..683e9720 --- /dev/null +++ b/tests/test_issue_1513_slim_core.py @@ -0,0 +1,130 @@ +from pathlib import Path +from unittest.mock import patch +import pytest +try: + import tomllib +except ImportError: + import toml as tomllib + +from semantica.parse.docx_parser import DOCXParser +from semantica.parse.excel_parser import ExcelParser +from semantica.parse.html_parser import HTMLParser +from semantica.parse.xml_parser import XMLParser +from semantica.utils.exceptions import ProcessingError + + +def test_core_dependencies_count(): + """pyproject.toml must contain exactly 22 unique core dependencies.""" + repo_root = Path(__file__).resolve().parents[1] + with open(repo_root / "pyproject.toml", "rb") as f: + data = tomllib.load(f) + deps = data["project"]["dependencies"] + normalized_names = { + d.split(";")[0].split(">=")[0].split("<")[0].split("==")[0].strip() + for d in deps + } + expected_22 = { + "numpy", "pandas", "scipy", "scikit-learn", "rdflib", "networkx", + "requests", "chardet", "protobuf", "grpcio", "pillow", "pydantic", + "click", "rich", "tqdm", "pyyaml", "toml", "python-dotenv", + "loguru", "structlog", "httpx", "pyarrow" + } + assert normalized_names == expected_22 + assert len(normalized_names) == 22 + + +def test_optional_extras_defined(): + """All required optional extras must be declared in pyproject.toml.""" + repo_root = Path(__file__).resolve().parents[1] + with open(repo_root / "pyproject.toml", "rb") as f: + data = tomllib.load(f) + extras = data["project"]["optional-dependencies"] + for extra in [ + "documents", "ingest-git", "embeddings-local", "nlp-spacy", + "viz", "media", "vectorstore-faiss", "graph-embeddings", "all" + ]: + assert extra in extras, f"Missing extra {extra}" + all_extra_str = str(extras["all"]) + for expected_ref in [ + "documents", "ingest-git", "embeddings-local", "nlp-spacy", + "viz", "media", "graph-embeddings", "vectorstore-all" + ]: + assert expected_ref in all_extra_str, f"Missing {expected_ref} in all" + # And vectorstore-faiss is in vectorstore-all + assert "vectorstore-faiss" in str(extras["vectorstore-all"]) + + +def test_docx_parser_lazy_construction_and_parse_hint(): + with patch("semantica.parse.docx_parser.Document", None): + parser = DOCXParser() + assert parser is not None + with pytest.raises(ProcessingError, match=r"semantica\[documents\]"): + parser.parse("nonexistent.docx") + + +def test_excel_parser_lazy_construction_and_parse_hint(): + with patch("semantica.parse.excel_parser.load_workbook", None): + parser = ExcelParser() + assert parser is not None + with pytest.raises(ProcessingError, match=r"semantica\[documents\]"): + parser.parse("nonexistent.xlsx") + + +def test_html_parser_lazy_construction_and_parse_hint(): + with patch("semantica.parse.html_parser.BeautifulSoup", None): + parser = HTMLParser() + assert parser is not None + with pytest.raises(ProcessingError, match=r"semantica\[documents\]"): + parser.parse("nonexistent.html") + + +def test_xml_parser_etree_fallback(): + with patch("semantica.parse.xml_parser.etree", None): + parser = XMLParser() + assert parser is not None + result = parser.parse("Test") + assert result is not None + assert result.root is not None + assert result.root.tag == "root" + + +def test_xml_parser_lxml_explicit_requires_documents_extra(): + with patch("semantica.parse.xml_parser.etree", None): + parser = XMLParser(engine="lxml") + assert parser is not None + with pytest.raises(ProcessingError, match=r"semantica\[documents\]"): + parser.parse("") + + +def test_node_embedder_gensim_missing_hint(): + with patch("semantica.kg.node_embeddings.GENSIM_AVAILABLE", False): + from semantica.kg.node_embeddings import NodeEmbedder + with pytest.raises(ImportError, match=r"semantica\[graph-embeddings\]"): + NodeEmbedder() + + +def test_faiss_store_missing_hint(): + with patch("semantica.vector_store.faiss_store.FAISS_AVAILABLE", False): + from semantica.vector_store.faiss_store import FAISSIndexBuilder, FAISSStore + builder = FAISSIndexBuilder(128) + with pytest.raises(ProcessingError, match=r"semantica\[vectorstore-faiss\]"): + builder.build_index("flat") + store = FAISSStore(128) + with pytest.raises(ProcessingError, match=r"semantica\[vectorstore-faiss\]"): + store.load_index("nonexistent.faiss") + + +def test_visualization_missing_hint(): + import numpy as np + from semantica.visualization.embedding_visualizer import EmbeddingVisualizer + with patch("semantica.visualization.embedding_visualizer.plt", None): + visualizer = EmbeddingVisualizer() + with pytest.raises(ProcessingError, match=r"semantica\[viz\]"): + visualizer.visualize_2d_projection(np.array([[0.1, 0.2], [0.3, 0.4]]), output="png") + + +def test_spacy_load_missing_hint(): + from semantica.semantic_extract.methods import load_spacy_model + with patch("semantica.semantic_extract.methods.spacy", None): + with pytest.raises(ImportError, match=r"semantica\[nlp-spacy\]"): + load_spacy_model("en_core_web_sm") From 3a69721abf72d7188a0d6fd72c8462261b2c44eb Mon Sep 17 00:00:00 2001 From: Sakshi Jain Date: Mon, 7 Sep 2026 20:32:30 +0530 Subject: [PATCH 06/14] test(gemini): cover legacy-SDK per-model instance cache (#1512) Co-authored-by: Mohd Kaif <98801504+KaifAhmad1@users.noreply.github.com> --- .../test_gemini_legacy_model_cache.py | 149 ++++++++++++++++++ 1 file changed, 149 insertions(+) create mode 100644 tests/semantic_extract/test_gemini_legacy_model_cache.py diff --git a/tests/semantic_extract/test_gemini_legacy_model_cache.py b/tests/semantic_extract/test_gemini_legacy_model_cache.py new file mode 100644 index 00000000..04c2b924 --- /dev/null +++ b/tests/semantic_extract/test_gemini_legacy_model_cache.py @@ -0,0 +1,149 @@ +"""Regression tests for the legacy-SDK model-instance cache on ``GeminiProvider``. + +When the new ``google.genai`` package is unavailable, ``GeminiProvider`` falls +back to the legacy ``google.generativeai`` package, whose ``GenerativeModel`` +binds its model name at construction time and whose API key lives in +module-level state (``genai.configure()``). + +``GeminiProvider._legacy_client_for()`` therefore keeps a per-instance cache +keyed by model name, so a repeated per-call ``model=`` override reuses one +``GenerativeModel`` instead of rebuilding it on every request, and re-asserts +``genai.configure(api_key=...)`` with this provider's own key before each use. + +PR #1488 (issue #1268) locked in *which* model a per-call override resolves to. +These tests cover what it did not: that the resolved instance is built once and +cached, and that the cache and credentials stay isolated per provider instance +(issue #1269). +""" + +import sys +from unittest.mock import MagicMock, patch + +import pytest + +from semantica.semantic_extract.providers import GeminiProvider + +CONSTRUCTION_MODEL = "gemini-pro" +OVERRIDE_MODEL = "gemini-1.5-flash" +OTHER_MODEL = "gemini-1.5-pro" +JSON_TEXT = '{"answer": 42}' + + +def _make_provider(api_key="fake-key", model=CONSTRUCTION_MODEL): + """A GeminiProvider on the legacy path with the real SDK bootstrap skipped.""" + with patch.object(GeminiProvider, "_init_client", return_value=None): + provider = GeminiProvider(api_key=api_key, model=model) + provider._use_new_genai = False + provider.client = MagicMock(name="construction client") + return provider + + +@pytest.fixture +def fake_legacy_genai(monkeypatch): + """Install a stand-in ``google.generativeai`` module. + + Unlike the fake in ``test_gemini_model_override``, ``GenerativeModel`` here + does **not** cache internally: it returns a fresh mock every call and records + every model name it was asked to build, so a test can tell whether the + provider rebuilt a model or served it from its own cache. ``configure`` is a + plain mock so credential re-assertion is observable. + """ + module = MagicMock() + module.build_calls = [] + + def build_model(name): + module.build_calls.append(name) + model = MagicMock(name=f"GenerativeModel({name})#{len(module.build_calls)}") + response = MagicMock() + response.text = JSON_TEXT + model.generate_content.return_value = response + return model + + module.GenerativeModel.side_effect = build_model + monkeypatch.setitem(sys.modules, "google.generativeai", module) + return module + + +class TestLegacyModelCacheReuse: + """``_legacy_client_for()`` builds each per-call model once, then caches it.""" + + def test_repeated_override_builds_one_generative_model(self, fake_legacy_genai): + provider = _make_provider() + + provider.generate("hello", model=OVERRIDE_MODEL) + provider.generate("hello", model=OVERRIDE_MODEL) + provider.generate_structured("hello", model=OVERRIDE_MODEL) + + assert fake_legacy_genai.build_calls == [OVERRIDE_MODEL] + assert list(provider._legacy_model_cache) == [OVERRIDE_MODEL] + + def test_cache_hit_returns_the_same_instance(self, fake_legacy_genai): + provider = _make_provider() + + first = provider._legacy_client_for(OVERRIDE_MODEL) + second = provider._legacy_client_for(OVERRIDE_MODEL) + + assert first is second + assert first is provider._legacy_model_cache[OVERRIDE_MODEL] + assert fake_legacy_genai.build_calls == [OVERRIDE_MODEL] + + def test_distinct_overrides_are_cached_separately(self, fake_legacy_genai): + provider = _make_provider() + + provider.generate("hello", model=OVERRIDE_MODEL) + provider.generate("hello", model=OTHER_MODEL) + provider.generate("hello", model=OVERRIDE_MODEL) + + assert fake_legacy_genai.build_calls == [OVERRIDE_MODEL, OTHER_MODEL] + assert set(provider._legacy_model_cache) == {OVERRIDE_MODEL, OTHER_MODEL} + assert ( + provider._legacy_model_cache[OVERRIDE_MODEL] + is not provider._legacy_model_cache[OTHER_MODEL] + ) + + def test_default_model_is_not_cached_or_rebuilt(self, fake_legacy_genai): + provider = _make_provider(model=CONSTRUCTION_MODEL) + construction_client = provider.client + + provider.generate("hello") + provider.generate("hello", model=CONSTRUCTION_MODEL) + + assert fake_legacy_genai.build_calls == [] + assert provider._legacy_model_cache == {} + assert construction_client.generate_content.call_count == 2 + + +class TestLegacyModelCacheIsolation: + """The cache and the legacy SDK's module-level key stay per-instance.""" + + def test_configure_reasserted_with_this_key_before_every_call( + self, fake_legacy_genai + ): + provider = _make_provider(api_key="key-A") + + provider.generate("hello", model=OVERRIDE_MODEL) + provider.generate("hello", model=OVERRIDE_MODEL) # cache hit still re-asserts + + assert fake_legacy_genai.configure.call_count == 2 + for call in fake_legacy_genai.configure.call_args_list: + assert call.kwargs == {"api_key": "key-A"} + + def test_two_instances_keep_separate_caches_and_keys(self, fake_legacy_genai): + provider_a = _make_provider(api_key="key-A") + provider_b = _make_provider(api_key="key-B") + + provider_a.generate("hello", model=OVERRIDE_MODEL) + provider_b.generate("hello", model=OVERRIDE_MODEL) + + # Same model name, but each instance built and cached its own object. + assert fake_legacy_genai.build_calls == [OVERRIDE_MODEL, OVERRIDE_MODEL] + assert ( + provider_a._legacy_model_cache[OVERRIDE_MODEL] + is not provider_b._legacy_model_cache[OVERRIDE_MODEL] + ) + assert fake_legacy_genai.configure.call_args_list[-2].kwargs == { + "api_key": "key-A" + } + assert fake_legacy_genai.configure.call_args_list[-1].kwargs == { + "api_key": "key-B" + } From a0de5c2cdd508ddc3b1aa803d60306ce7268f7ba Mon Sep 17 00:00:00 2001 From: Zohaib Hassnain <109234410+ZohaibHassan16@users.noreply.github.com> Date: Mon, 7 Sep 2026 20:32:00 +0500 Subject: [PATCH 07/14] fix(deps): address review feedback on slim core dependencies (#1513) - Remove thinc direct constraint from nlp-spacy in pyproject.toml and update README/CHANGELOG - Raise ProcessingError with install hint when UMAP is requested but unavailable in EmbeddingVisualizer - Guard PCA and TSNE dimensionality reducers against None with actionable error messages - Prevent keyword collisions in EmbeddingVisualizer dimensionality reduction (_reduce_dimensions) - Add core-only install & test step to .github/workflows/ci.yml using base-deps.txt - Prevent AttributeError on module load in repo_ingestor.py and xml_ingestor.py when optional dependencies are absent - Make TOML loading in tests/test_issue_1513_slim_core.py portable across Python versions via UTF-8 text decode and loads - Expand slim-core test suite to 17 test cases covering 2D/3D projections, core imports, and options handling --- .github/workflows/ci.yml | 44 +++--- CHANGELOG.md | 2 +- README.md | 2 +- pyproject.toml | 3 +- semantica/ingest/repo_ingestor.py | 5 +- semantica/ingest/xml_ingestor.py | 4 +- .../visualization/embedding_visualizer.py | 70 +++++--- tests/test_issue_1513_slim_core.py | 149 ++++++++++++++++-- .../test_optional_dependencies.py | 11 +- 9 files changed, 225 insertions(+), 65 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 917afbfe..9070ec51 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -97,24 +97,10 @@ jobs: - name: Build Explorer frontend working-directory: explorer run: npm run build - - name: Install Explorer backend test dependencies + - name: Install core package and base dependencies run: | - # Run the deterministic backend path before the all-extras CI - # environment is installed. The Explorer extra supplies the - # production API dependencies without importing optional vector - # providers such as Pinecone during test collection. - # - # --no-deps + a separate hash-pinned install (rather than the old - # `pip install -e ".[explorer]" pytest==9.1.1`) so every fetched - # package is hash-verified (Scorecard Pinned-Dependencies); the - # local editable install itself has nothing to hash. - # .github/requirements/explorer-extra-py311.txt is - # `uv pip compile pyproject.toml --extra explorer --python-version 3.11 --constraint requirements-ci.txt --generate-hashes` - # - regenerate it the same way if pyproject.toml's base/explorer - # deps change. Resolved specifically for this job's python 3.11 - # (see the Dockerfile's explorer-extra-py313.txt for why this - # can't be shared with python 3.13: audioread needs extra - # standard-aifc/standard-sunau hashes only on 3.13+). + # Verify that core semantica installs cleanly with only its base dependencies + # (no optional extras) and that core imports and lazy missing-dependency hints work. # # --no-deps only skips *runtime* dependency resolution - `-e .` # still does a PEP 517 build, which by default creates an isolated @@ -125,8 +111,30 @@ jobs: # copies instead of fetching its own. pip install -r .github/requirements/pep517-build.txt --require-hashes pip install --no-deps --no-build-isolation -e . - pip install -r .github/requirements/explorer-extra-py311.txt --require-hashes + pip install -r .github/requirements/base-deps.txt --require-hashes pip install -r .github/requirements/pytest-tool.txt --require-hashes + - name: Verify core-only package importability and slim behavior + run: | + python -c " + import semantica + print('semantica', semantica.__version__, 'core installed and importable') + " + pytest -q tests/test_issue_1513_slim_core.py + - name: Install Explorer backend test dependencies + run: | + # Run the deterministic backend path before the all-extras CI + # environment is installed. The Explorer extra supplies the + # production API dependencies without importing optional vector + # providers such as Pinecone during test collection. + # + # .github/requirements/explorer-extra-py311.txt is + # `uv pip compile pyproject.toml --extra explorer --python-version 3.11 --constraint requirements-ci.txt --generate-hashes` + # - regenerate it the same way if pyproject.toml's base/explorer + # deps change. Resolved specifically for this job's python 3.11 + # (see the Dockerfile's explorer-extra-py313.txt for why this + # can't be shared with python 3.13: audioread needs extra + # standard-aifc/standard-sunau hashes only on 3.13+). + pip install -r .github/requirements/explorer-extra-py311.txt --require-hashes - name: Test deterministic Explorer backend path run: | pytest -q tests/explorer/test_explorer_deterministic_rendering_e2e.py diff --git a/CHANGELOG.md b/CHANGELOG.md index 354fdc0c..ac219efa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,7 +18,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Heavy ML/NLP, visualization, document parsing, and ingestion packages moved into granular optional extras: - `models-huggingface`: `torch`, `transformers` - `embeddings-local`: `sentence-transformers`, `fastembed`, `onnxruntime`, `tokenizers` - - `nlp-spacy`: `spacy`, `thinc` + - `nlp-spacy`: `spacy` - `viz`: expanded to include `matplotlib`, `seaborn`, `plotly`, `ipywidgets`, `umap-learn`, alongside `pyvis`, `graphviz`, and `d3blocks` - `media`: `librosa`, `opencv-python` - `vectorstore-faiss`: `faiss-cpu` (also included in `vectorstore-all`) diff --git a/README.md b/README.md index beee7b95..59c36a70 100644 --- a/README.md +++ b/README.md @@ -1537,7 +1537,7 @@ pip install "semantica[all]" # full bundled behavior with all extras pip install "semantica[documents]" # Document parsing (docx, openpyxl, lxml, beautifulsoup4) pip install "semantica[embeddings-local]" # Local embeddings (sentence-transformers, fastembed, onnxruntime) pip install "semantica[models-huggingface]" # HuggingFace models (transformers, torch) -pip install "semantica[nlp-spacy]" # spaCy NLP pipelines (spacy, thinc) +pip install "semantica[nlp-spacy]" # spaCy NLP pipelines (spacy) pip install "semantica[viz]" # Visualization (matplotlib, seaborn, plotly, pyvis, graphviz) pip install "semantica[media]" # Audio & computer vision (librosa, opencv-python) pip install "semantica[graph-embeddings]" # Knowledge graph embeddings (gensim / Node2Vec) diff --git a/pyproject.toml b/pyproject.toml index 3646838d..c853f605 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -158,8 +158,7 @@ embeddings-local = [ ] nlp-spacy = [ "spacy>=3.4.0,<3.8.8; python_version < '3.10'", - "spacy>=3.4.0; python_version >= '3.10'", - "thinc<8.3.5; python_version < '3.10'" + "spacy>=3.4.0; python_version >= '3.10'" ] # ---- Graph Backends ---- diff --git a/semantica/ingest/repo_ingestor.py b/semantica/ingest/repo_ingestor.py index da045a0b..5996a9d7 100644 --- a/semantica/ingest/repo_ingestor.py +++ b/semantica/ingest/repo_ingestor.py @@ -28,6 +28,7 @@ Example Usage: Author: Semantica Contributors License: MIT """ +from __future__ import annotations import ipaddress import os @@ -1070,14 +1071,14 @@ class RepoIngestor: return code_files def get_repository_info( - self, repo_url: str, repo: Optional[git.Repo] = None + self, repo_url: str, repo: Optional[Any] = None ) -> Dict[str, Any]: """ Get repository metadata and information. Args: repo_url: Repository URL - repo: Git repository object (optional) + repo: Git repository object (git.Repo, optional) Returns: dict: Repository information diff --git a/semantica/ingest/xml_ingestor.py b/semantica/ingest/xml_ingestor.py index c7689f90..9f3be0ed 100644 --- a/semantica/ingest/xml_ingestor.py +++ b/semantica/ingest/xml_ingestor.py @@ -792,8 +792,8 @@ class XMLIngestor: first_error = errors[0] if errors else "No detailed validation error available." return f"{prefix} for {source}: {first_error}" - def _format_xml_error(self, exc: etree.XMLSyntaxError) -> str: - if exc.error_log: + def _format_xml_error(self, exc: Any) -> str: + if hasattr(exc, "error_log") and exc.error_log: return str(exc.error_log.last_error) return str(exc) diff --git a/semantica/visualization/embedding_visualizer.py b/semantica/visualization/embedding_visualizer.py index b6ba2d88..648c9515 100644 --- a/semantica/visualization/embedding_visualizer.py +++ b/semantica/visualization/embedding_visualizer.py @@ -33,10 +33,6 @@ License: MIT from pathlib import Path from typing import Any, Dict, List, Optional, Tuple, Union -try: - import matplotlib.pyplot as plt -except (ImportError, OSError): - plt = None import numpy as np try: @@ -64,7 +60,7 @@ from ..utils.exceptions import ProcessingError from ..utils.logging import get_logger from ..utils.progress_tracker import get_progress_tracker from .utils.color_schemes import ColorPalette, ColorScheme -from .utils.export_formats import export_matplotlib_figure, export_plotly_figure +from .utils.export_formats import export_plotly_figure class EmbeddingVisualizer: @@ -101,13 +97,18 @@ class EmbeddingVisualizer: self.color_scheme = ColorScheme.DEFAULT self.point_size = config.get("point_size", 5) - def _check_dependencies(self): + def _check_dependencies(self, require_sklearn: bool = False): """Check if dependencies are available.""" if px is None or go is None: raise ProcessingError( "Plotly is required for embedding visualization. " "Install with: pip install 'semantica[viz]'" ) + if require_sklearn and (PCA is None or TSNE is None): + raise ProcessingError( + "scikit-learn is required for dimensionality reduction. " + "Reinstall scikit-learn or install dependencies." + ) def visualize_2d_projection( self, @@ -172,8 +173,10 @@ class EmbeddingVisualizer: self.progress_tracker.update_tracking( tracking_id, message=f"Reducing dimensions using {method}..." ) + dim_options = dict(options) + n_comp = dim_options.pop("n_components", 2) projected = self._reduce_dimensions( - embeddings, method=method, n_components=2, **options + embeddings, method=method, n_components=n_comp, **dim_options ) self.progress_tracker.update_tracking( @@ -244,8 +247,10 @@ class EmbeddingVisualizer: self.progress_tracker.update_tracking( tracking_id, message=f"Reducing dimensions using {method}..." ) + dim_options = dict(options) + n_comp = dim_options.pop("n_components", 3) projected = self._reduce_dimensions( - embeddings, method=method, n_components=3, **options + embeddings, method=method, n_components=n_comp, **dim_options ) self.progress_tracker.update_tracking( @@ -411,8 +416,10 @@ class EmbeddingVisualizer: self.progress_tracker.update_tracking( tracking_id, message=f"Reducing dimensions using {method}..." ) + dim_options = dict(options) + n_comp = dim_options.pop("n_components", 2) projected = self._reduce_dimensions( - embeddings, method=method, n_components=2, **options + embeddings, method=method, n_components=n_comp, **dim_options ) num_clusters = len(set(cluster_labels)) @@ -548,8 +555,10 @@ class EmbeddingVisualizer: self.progress_tracker.update_tracking( tracking_id, message=f"Reducing dimensions using {method}..." ) + dim_options = dict(options) + n_comp = dim_options.pop("n_components", 2) projected = self._reduce_dimensions( - combined_embeddings, method=method, n_components=2, **options + combined_embeddings, method=method, n_components=n_comp, **dim_options ) # Color by type @@ -615,39 +624,56 @@ class EmbeddingVisualizer: **options, ) -> np.ndarray: """Reduce embedding dimensions using specified method.""" + opts = dict(options) + opts.pop("n_components", None) + if method == "pca": - pca = PCA(n_components=n_components, **options) + if PCA is None: + raise ProcessingError( + "scikit-learn is required for dimensionality reduction. " + "Reinstall scikit-learn or install dependencies." + ) + pca = PCA(n_components=n_components, **opts) return pca.fit_transform(embeddings) elif method == "tsne": - perplexity = options.get("perplexity", min(30, len(embeddings) - 1)) + if TSNE is None: + raise ProcessingError( + "scikit-learn is required for dimensionality reduction. " + "Reinstall scikit-learn or install dependencies." + ) + perplexity = opts.pop("perplexity", min(30, len(embeddings) - 1)) + random_state = opts.pop("random_state", 42) tsne = TSNE( n_components=n_components, perplexity=perplexity, - random_state=42, - **options, + random_state=random_state, + **opts, ) return tsne.fit_transform(embeddings) elif method == "umap": if umap is not None: - n_neighbors = options.get("n_neighbors", min(15, len(embeddings) - 1)) + n_neighbors = opts.pop("n_neighbors", min(15, len(embeddings) - 1)) reducer = umap.UMAP( - n_components=n_components, n_neighbors=n_neighbors, **options + n_components=n_components, n_neighbors=n_neighbors, **opts ) return reducer.fit_transform(embeddings) else: - # Fallback to PCA if UMAP not available - self.logger.warning( - "UMAP not available, using PCA. Install with: pip install 'semantica[viz]'" + raise ProcessingError( + "UMAP is required for UMAP dimensionality reduction. " + "Install with: pip install 'semantica[viz]'" ) - pca = PCA(n_components=n_components) - return pca.fit_transform(embeddings) else: + if PCA is None: + raise ProcessingError( + "scikit-learn is required for dimensionality reduction. " + "Reinstall scikit-learn or install dependencies." + ) # Fallback to PCA self.logger.warning(f"Method {method} not available, using PCA") - pca = PCA(n_components=n_components) + pca = PCA(n_components=n_components, **opts) return pca.fit_transform(embeddings) def _visualize_2d_plotly( diff --git a/tests/test_issue_1513_slim_core.py b/tests/test_issue_1513_slim_core.py index 683e9720..039bccd9 100644 --- a/tests/test_issue_1513_slim_core.py +++ b/tests/test_issue_1513_slim_core.py @@ -1,10 +1,6 @@ from pathlib import Path from unittest.mock import patch import pytest -try: - import tomllib -except ImportError: - import toml as tomllib from semantica.parse.docx_parser import DOCXParser from semantica.parse.excel_parser import ExcelParser @@ -13,11 +9,25 @@ from semantica.parse.xml_parser import XMLParser from semantica.utils.exceptions import ProcessingError +def _load_toml(file_path: Path) -> dict: + """Load and parse a TOML file across Python 3.8-3.14+ without mode mismatches.""" + content = file_path.read_text(encoding="utf-8") + try: + import tomllib # Python 3.11+ standard library + return tomllib.loads(content) + except ImportError: + try: + import tomli # Fast PEP 680 compatible parser for Python < 3.11 + return tomli.loads(content) + except ImportError: + import toml # Fallback toml parser + return toml.loads(content) + + def test_core_dependencies_count(): """pyproject.toml must contain exactly 22 unique core dependencies.""" repo_root = Path(__file__).resolve().parents[1] - with open(repo_root / "pyproject.toml", "rb") as f: - data = tomllib.load(f) + data = _load_toml(repo_root / "pyproject.toml") deps = data["project"]["dependencies"] normalized_names = { d.split(";")[0].split(">=")[0].split("<")[0].split("==")[0].strip() @@ -36,8 +46,7 @@ def test_core_dependencies_count(): def test_optional_extras_defined(): """All required optional extras must be declared in pyproject.toml.""" repo_root = Path(__file__).resolve().parents[1] - with open(repo_root / "pyproject.toml", "rb") as f: - data = tomllib.load(f) + data = _load_toml(repo_root / "pyproject.toml") extras = data["project"]["optional-dependencies"] for extra in [ "documents", "ingest-git", "embeddings-local", "nlp-spacy", @@ -53,6 +62,27 @@ def test_optional_extras_defined(): # And vectorstore-faiss is in vectorstore-all assert "vectorstore-faiss" in str(extras["vectorstore-all"]) + # Verify nlp-spacy does not declare thinc directly (Qodo bot issue 1) + nlp_spacy_deps = str(extras.get("nlp-spacy", [])) + assert "thinc" not in nlp_spacy_deps, "nlp-spacy should not directly declare thinc" + assert "spacy" in nlp_spacy_deps, "nlp-spacy must declare spacy" + + +def test_core_modules_importable(): + """Core modules must be importable without requiring optional extras.""" + import semantica + import semantica.cli + import semantica.parse + import semantica.ingest + import semantica.embeddings + import semantica.export + import semantica.kg + import semantica.vector_store + import semantica.visualization + import semantica.semantic_extract + import semantica.pipeline + assert semantica.__version__ is not None + def test_docx_parser_lazy_construction_and_parse_hint(): with patch("semantica.parse.docx_parser.Document", None): @@ -96,6 +126,20 @@ def test_xml_parser_lxml_explicit_requires_documents_extra(): parser.parse("") +def test_xml_ingestor_missing_hint(): + with patch("semantica.ingest.xml_ingestor.etree", None): + from semantica.ingest.xml_ingestor import XMLIngestor + with pytest.raises(ProcessingError, match=r"semantica\[documents\]"): + XMLIngestor() + + +def test_repo_ingestor_missing_hint(): + with patch("semantica.ingest.repo_ingestor.git", None): + from semantica.ingest.repo_ingestor import RepoIngestor + with pytest.raises(ImportError, match=r"semantica\[ingest-git\]"): + RepoIngestor() + + def test_node_embedder_gensim_missing_hint(): with patch("semantica.kg.node_embeddings.GENSIM_AVAILABLE", False): from semantica.kg.node_embeddings import NodeEmbedder @@ -117,10 +161,93 @@ def test_faiss_store_missing_hint(): def test_visualization_missing_hint(): import numpy as np from semantica.visualization.embedding_visualizer import EmbeddingVisualizer - with patch("semantica.visualization.embedding_visualizer.plt", None): + + # Plotly is checked via px and go in _check_dependencies + with patch("semantica.visualization.embedding_visualizer.px", None): visualizer = EmbeddingVisualizer() - with pytest.raises(ProcessingError, match=r"semantica\[viz\]"): - visualizer.visualize_2d_projection(np.array([[0.1, 0.2], [0.3, 0.4]]), output="png") + with pytest.raises(ProcessingError, match=r"Plotly is required.*semantica\[viz\]"): + visualizer.visualize_2d_projection(np.array([[0.1, 0.2], [0.3, 0.4]])) + + with patch("semantica.visualization.embedding_visualizer.go", None): + visualizer = EmbeddingVisualizer() + with pytest.raises(ProcessingError, match=r"Plotly is required.*semantica\[viz\]"): + visualizer.visualize_2d_projection(np.array([[0.1, 0.2], [0.3, 0.4]])) + + +def test_visualization_umap_missing_hint(): + import numpy as np + from unittest.mock import MagicMock + from semantica.visualization.embedding_visualizer import EmbeddingVisualizer + + # Stand in for Plotly so we reach dimensionality reduction + with patch("semantica.visualization.embedding_visualizer.px", MagicMock()), \ + patch("semantica.visualization.embedding_visualizer.go", MagicMock()), \ + patch("semantica.visualization.embedding_visualizer.umap", None): + visualizer = EmbeddingVisualizer() + # High-dimensional embeddings (>2D) trigger dimensionality reduction with method="umap" + embeddings = np.array([[0.1, 0.2, 0.3], [0.4, 0.5, 0.6], [0.7, 0.8, 0.9]]) + with pytest.raises(ProcessingError, match=r"UMAP is required.*semantica\[viz\]"): + visualizer.visualize_2d_projection(embeddings, method="umap") + + # Also verify 3D projection triggers the same actionable error on >3D embeddings + embeddings_4d = np.array([[0.1, 0.2, 0.3, 0.4], [0.5, 0.6, 0.7, 0.8], [0.9, 1.0, 1.1, 1.2]]) + with pytest.raises(ProcessingError, match=r"UMAP is required.*semantica\[viz\]"): + visualizer.visualize_3d_projection(embeddings_4d, method="umap") + + +def test_visualization_sklearn_missing_hint(): + import numpy as np + from unittest.mock import MagicMock + from semantica.visualization.embedding_visualizer import EmbeddingVisualizer + + # Stand in for Plotly so we reach dimensionality reduction + with patch("semantica.visualization.embedding_visualizer.px", MagicMock()), \ + patch("semantica.visualization.embedding_visualizer.go", MagicMock()): + visualizer = EmbeddingVisualizer() + embeddings = np.array([[0.1, 0.2, 0.3], [0.4, 0.5, 0.6], [0.7, 0.8, 0.9]]) + + # Test direct dependency check + with patch("semantica.visualization.embedding_visualizer.PCA", None): + with pytest.raises(ProcessingError, match=r"scikit-learn is required"): + visualizer._check_dependencies(require_sklearn=True) + + with patch("semantica.visualization.embedding_visualizer.PCA", None): + with pytest.raises(ProcessingError, match=r"scikit-learn is required"): + visualizer.visualize_2d_projection(embeddings, method="pca") + + with patch("semantica.visualization.embedding_visualizer.TSNE", None): + with pytest.raises(ProcessingError, match=r"scikit-learn is required"): + visualizer.visualize_2d_projection(embeddings, method="tsne") + + +def test_visualization_options_collision_free(): + """Options such as n_components, perplexity, n_neighbors must not cause keyword collisions.""" + import numpy as np + from unittest.mock import MagicMock + from semantica.visualization.embedding_visualizer import EmbeddingVisualizer + + mock_pca = MagicMock() + mock_tsne = MagicMock() + mock_umap_cls = MagicMock() + mock_umap_module = MagicMock() + mock_umap_module.UMAP = mock_umap_cls + + with patch("semantica.visualization.embedding_visualizer.PCA", mock_pca), \ + patch("semantica.visualization.embedding_visualizer.TSNE", mock_tsne), \ + patch("semantica.visualization.embedding_visualizer.umap", mock_umap_module), \ + patch("semantica.visualization.embedding_visualizer.px", MagicMock()), \ + patch("semantica.visualization.embedding_visualizer.go", MagicMock()): + visualizer = EmbeddingVisualizer() + embeddings = np.array([[0.1, 0.2, 0.3], [0.4, 0.5, 0.6], [0.7, 0.8, 0.9]]) + + # PCA with n_components + visualizer.visualize_2d_projection(embeddings, method="pca", n_components=2) + # TSNE with perplexity and random_state + visualizer.visualize_2d_projection(embeddings, method="tsne", perplexity=1, random_state=42) + # UMAP with n_neighbors and min_dist + visualizer.visualize_2d_projection(embeddings, method="umap", n_neighbors=2, min_dist=0.1) + # 3D with n_components + visualizer.visualize_3d_projection(embeddings, method="pca", n_components=3) def test_spacy_load_missing_hint(): diff --git a/tests/visualization/test_optional_dependencies.py b/tests/visualization/test_optional_dependencies.py index af41e5ca..0e7f7fb2 100644 --- a/tests/visualization/test_optional_dependencies.py +++ b/tests/visualization/test_optional_dependencies.py @@ -38,14 +38,13 @@ class TestOptionalDependencies(unittest.TestCase): with import_without( "semantica.visualization.embedding_visualizer", "umap" ) as module: - with plotly_doubles(module), patch.object(module, "PCA") as mock_pca_class: - mock_pca_class.return_value.fit_transform.return_value = np.zeros((4, 2)) - + with plotly_doubles(module): viz = module.EmbeddingVisualizer() embeddings = np.array([[0, 1, 2], [1, 0, 3], [0, 0, 0], [1, 1, 1]]) - viz.visualize_2d_projection(embeddings, method="umap") - - mock_pca_class.assert_called() + with self.assertRaises(module.ProcessingError) as cm: + viz.visualize_2d_projection(embeddings, method="umap") + self.assertIn("UMAP is required", str(cm.exception)) + self.assertIn("semantica[viz]", str(cm.exception)) def test_ontology_visualizer_without_graphviz(self): """Test OntologyVisualizer behavior when graphviz is missing.""" From ad0fbcf235dc1e266ac99900c3804004ebda5e11 Mon Sep 17 00:00:00 2001 From: Sameer Kadam Date: Tue, 8 Sep 2026 00:43:06 +0530 Subject: [PATCH 08/14] fix: update Qdrant client compatibility --- pyproject.toml | 2 +- semantica/vector_store/qdrant_store.py | 26 +- .../test_qdrant_collection_search.py | 322 ++++++++++++++++++ 3 files changed, 342 insertions(+), 8 deletions(-) create mode 100644 tests/vector_store/test_qdrant_collection_search.py diff --git a/pyproject.toml b/pyproject.toml index 154eaa76..db7aad10 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -190,7 +190,7 @@ graph-all = [ tripletstore-oxigraph = ["pyoxigraph>=0.5.0"] # ---- Vector Store Backends ---- -vectorstore-qdrant = ["qdrant-client>=1.0.0"] +vectorstore-qdrant = ["qdrant-client>=1.10.0"] vectorstore-weaviate = ["weaviate-client>=4.0.0"] vectorstore-pinecone = ["pinecone>=3.0.0"] vectorstore-milvus = ["pymilvus>=2.0.0"] diff --git a/semantica/vector_store/qdrant_store.py b/semantica/vector_store/qdrant_store.py index ac55f553..43db6996 100644 --- a/semantica/vector_store/qdrant_store.py +++ b/semantica/vector_store/qdrant_store.py @@ -153,9 +153,12 @@ class QdrantCollection: raise ProcessingError("Qdrant not available") try: - search_results = self.client.search( + # qdrant-client >=1.10.0: query_points() supersedes the removed search(). + # It returns a QueryResponse whose .points attribute is a list of + # ScoredPoint objects (id, score, payload, …). + response = self.client.query_points( collection_name=self.collection_name, - query_vector=query_vector.tolist(), + query=query_vector.tolist(), limit=limit, query_filter=query_filter, with_payload=True, @@ -164,19 +167,19 @@ class QdrantCollection: ) results = [] - for result in search_results: + for point in response.points: results.append( { - "id": result.id, + "id": point.id, # See pinecone_store.py PineconeIndex.search_vectors for why # this uses x/(1+|x|) rather than clamping distance-to-zero: # Qdrant's Dot distance metric is unbounded, and the old # clamped formula collapsed every score >= 1.0 to 1.0. "score": ( - float(result.score) / (1.0 + abs(float(result.score))) + 1.0 + float(point.score) / (1.0 + abs(float(point.score))) + 1.0 ) / 2.0, - "metadata": result.payload or {}, + "metadata": point.payload or {}, "vector": None, "distance": None, } @@ -697,7 +700,16 @@ class QdrantStore: ) return { "points_count": collection_info.points_count, - "vectors_count": collection_info.vectors_count, + # vectors_count was removed in qdrant-client 1.16.0. + # indexed_vectors_count is NOT equivalent: it counts only vectors + # in fully-optimised segments and is 0 for freshly-inserted points. + # Semantica inserts one vector per point, so points_count is the + # correct substitute for the old vectors_count statistic. + "vectors_count": getattr( + collection_info, + "vectors_count", + collection_info.points_count, + ), "status": str(collection_info.status) if hasattr(collection_info, "status") else "unknown", diff --git a/tests/vector_store/test_qdrant_collection_search.py b/tests/vector_store/test_qdrant_collection_search.py new file mode 100644 index 00000000..95ba163d --- /dev/null +++ b/tests/vector_store/test_qdrant_collection_search.py @@ -0,0 +1,322 @@ +"""Tests for QdrantCollection.search_points and QdrantStore.get_stats. + +These cover the qdrant-client >=1.16.0 compatibility fixes: + +1. search_points() must call client.query_points() (not the removed .search()), + read ScoredPoints from response.points, and map them to the documented + Semantica result shape. + +2. get_stats() must not access vectors_count unconditionally; it falls back to + indexed_vectors_count (present since 1.10.0) or None. + +All tests drive the real implementation against a MagicMock client, following +the established pattern in test_qdrant_store.py. +""" + +from unittest.mock import MagicMock, patch + +import numpy as np +import pytest + +from semantica.utils.exceptions import ProcessingError +from semantica.vector_store.qdrant_store import QdrantCollection, QdrantStore + + +# --------------------------------------------------------------------------- +# Helpers +# --------------------------------------------------------------------------- + +def _scored_point(point_id, score, payload=None): + """Build a stand-in for a qdrant_client ScoredPoint.""" + sp = MagicMock() + sp.id = point_id + sp.score = score + sp.payload = payload + return sp + + +def _query_response(*scored_points): + """Build a stand-in for a qdrant_client QueryResponse.""" + qr = MagicMock() + qr.points = list(scored_points) + return qr + + +def _collection_with_query_response(*scored_points): + """QdrantCollection whose client.query_points() returns the given points.""" + client = MagicMock() + client.query_points.return_value = _query_response(*scored_points) + return QdrantCollection(client, "test_collection") + + +# --------------------------------------------------------------------------- +# QdrantCollection.search_points — API call +# --------------------------------------------------------------------------- + +@patch("semantica.vector_store.qdrant_store.QDRANT_AVAILABLE", True) +def test_search_points_calls_query_points_not_search(): + """search_points() must call .query_points(), NOT the removed .search().""" + collection = _collection_with_query_response() + query = np.array([0.1, 0.2, 0.3, 0.4]) + + collection.search_points(query, limit=5) + + collection.client.query_points.assert_called_once() + collection.client.search.assert_not_called() + + +@patch("semantica.vector_store.qdrant_store.QDRANT_AVAILABLE", True) +def test_search_points_passes_correct_arguments(): + """query_points() must receive collection_name, query list, limit, and payload flag.""" + collection = _collection_with_query_response() + query = np.array([0.1, 0.2, 0.3, 0.4]) + + collection.search_points(query, limit=7) + + _, kwargs = collection.client.query_points.call_args + assert kwargs["collection_name"] == "test_collection" + assert kwargs["query"] == [0.1, 0.2, 0.3, 0.4] + assert kwargs["limit"] == 7 + assert kwargs["with_payload"] is True + assert kwargs["with_vectors"] is False + + +@patch("semantica.vector_store.qdrant_store.QDRANT_AVAILABLE", True) +def test_search_points_passes_query_filter_through(): + """The query_filter argument must be forwarded verbatim to query_points().""" + collection = _collection_with_query_response() + mock_filter = MagicMock() + query = np.array([0.5, 0.6]) + + collection.search_points(query, limit=3, query_filter=mock_filter) + + _, kwargs = collection.client.query_points.call_args + assert kwargs["query_filter"] is mock_filter + + +@patch("semantica.vector_store.qdrant_store.QDRANT_AVAILABLE", True) +def test_search_points_passes_none_filter_when_unfiltered(): + """query_filter=None must be passed through (not omitted) so the server + returns all matching vectors rather than raising a missing-argument error.""" + collection = _collection_with_query_response() + query = np.array([0.1, 0.2]) + + collection.search_points(query, limit=5, query_filter=None) + + _, kwargs = collection.client.query_points.call_args + assert kwargs["query_filter"] is None + + +# --------------------------------------------------------------------------- +# QdrantCollection.search_points — result shape +# --------------------------------------------------------------------------- + +@patch("semantica.vector_store.qdrant_store.QDRANT_AVAILABLE", True) +def test_search_points_result_shape(): + """Each result dict must contain id, score, metadata, vector, distance.""" + sp = _scored_point(42, 0.8, payload={"tag": "ml"}) + collection = _collection_with_query_response(sp) + query = np.array([0.1, 0.2, 0.3]) + + results = collection.search_points(query, limit=1) + + assert len(results) == 1 + r = results[0] + assert set(r.keys()) == {"id", "score", "metadata", "vector", "distance"} + + +@patch("semantica.vector_store.qdrant_store.QDRANT_AVAILABLE", True) +def test_search_points_maps_id_and_payload(): + """id and metadata must come from ScoredPoint.id and ScoredPoint.payload.""" + sp = _scored_point(99, 0.5, payload={"source": "wiki", "year": 2024}) + collection = _collection_with_query_response(sp) + + results = collection.search_points(np.array([0.1, 0.2]), limit=1) + + assert results[0]["id"] == 99 + assert results[0]["metadata"] == {"source": "wiki", "year": 2024} + + +@patch("semantica.vector_store.qdrant_store.QDRANT_AVAILABLE", True) +def test_search_points_null_payload_becomes_empty_dict(): + """A ScoredPoint with payload=None must produce metadata={}.""" + sp = _scored_point(7, 0.9, payload=None) + collection = _collection_with_query_response(sp) + + results = collection.search_points(np.array([0.1, 0.2]), limit=1) + + assert results[0]["metadata"] == {} + + +@patch("semantica.vector_store.qdrant_store.QDRANT_AVAILABLE", True) +def test_search_points_vector_and_distance_are_none(): + """vector and distance fields must always be None (vectors are not fetched).""" + sp = _scored_point(1, 0.7, payload={}) + collection = _collection_with_query_response(sp) + + results = collection.search_points(np.array([0.1, 0.2]), limit=1) + + assert results[0]["vector"] is None + assert results[0]["distance"] is None + + +@patch("semantica.vector_store.qdrant_store.QDRANT_AVAILABLE", True) +def test_search_points_score_normalization_midrange(): + """Score=0 must map to exactly 0.5 under the normalization formula.""" + sp = _scored_point(1, 0.0) + collection = _collection_with_query_response(sp) + + results = collection.search_points(np.array([0.1, 0.2]), limit=1) + + assert results[0]["score"] == pytest.approx(0.5) + + +@patch("semantica.vector_store.qdrant_store.QDRANT_AVAILABLE", True) +def test_search_points_score_normalization_positive(): + """Positive raw scores must map to (0.5, 1.0) under the normalization formula.""" + sp = _scored_point(1, 1.0) + collection = _collection_with_query_response(sp) + + results = collection.search_points(np.array([0.1, 0.2]), limit=1) + + # (1.0/(1+1.0) + 1.0) / 2.0 = (0.5 + 1.0) / 2.0 = 0.75 + assert results[0]["score"] == pytest.approx(0.75) + + +@patch("semantica.vector_store.qdrant_store.QDRANT_AVAILABLE", True) +def test_search_points_score_normalization_negative(): + """Negative raw scores must map to (0.0, 0.5) under the normalization formula.""" + sp = _scored_point(1, -1.0) + collection = _collection_with_query_response(sp) + + results = collection.search_points(np.array([0.1, 0.2]), limit=1) + + # (-1.0/(1+1.0) + 1.0) / 2.0 = (−0.5 + 1.0) / 2.0 = 0.25 + assert results[0]["score"] == pytest.approx(0.25) + + +@patch("semantica.vector_store.qdrant_store.QDRANT_AVAILABLE", True) +def test_search_points_multiple_results_preserve_order(): + """All ScoredPoints in response.points must appear in the output, in order.""" + points = [_scored_point(i, 1.0 - i * 0.1) for i in range(5)] + collection = _collection_with_query_response(*points) + + results = collection.search_points(np.array([0.1, 0.2]), limit=5) + + assert len(results) == 5 + assert [r["id"] for r in results] == [0, 1, 2, 3, 4] + + +@patch("semantica.vector_store.qdrant_store.QDRANT_AVAILABLE", True) +def test_search_points_empty_response(): + """An empty response.points list must produce an empty result list.""" + collection = _collection_with_query_response() # zero points + + results = collection.search_points(np.array([0.1, 0.2]), limit=10) + + assert results == [] + + +# --------------------------------------------------------------------------- +# QdrantCollection.search_points — error handling +# --------------------------------------------------------------------------- + +@patch("semantica.vector_store.qdrant_store.QDRANT_AVAILABLE", False) +def test_search_points_raises_when_qdrant_unavailable(): + client = MagicMock() + collection = QdrantCollection(client, "test_collection") + + with pytest.raises(ProcessingError): + collection.search_points(np.array([0.1, 0.2]), limit=5) + + +@patch("semantica.vector_store.qdrant_store.QDRANT_AVAILABLE", True) +def test_search_points_wraps_client_errors_as_processing_error(): + client = MagicMock() + client.query_points.side_effect = RuntimeError("network failure") + collection = QdrantCollection(client, "test_collection") + + with pytest.raises(ProcessingError, match="network failure"): + collection.search_points(np.array([0.1, 0.2]), limit=5) + + +# --------------------------------------------------------------------------- +# QdrantStore.get_stats — vectors_count compatibility +# --------------------------------------------------------------------------- + +def _store_with_collection_info(**info_attrs): + """QdrantStore with a mocked client.get_collection() response.""" + store = QdrantStore() + store.client = MagicMock() + store.collection = MagicMock() + store.collection.collection_name = "test_coll" + + info = MagicMock(spec=list(info_attrs.keys())) + for attr, val in info_attrs.items(): + setattr(info, attr, val) + store.client.get_collection.return_value = info + return store + + +@patch("semantica.vector_store.qdrant_store.QDRANT_AVAILABLE", True) +def test_get_stats_uses_vectors_count_when_present(): + """On qdrant-client <1.16, vectors_count exists and must be returned.""" + store = _store_with_collection_info( + points_count=10, vectors_count=10, status="green" + ) + + stats = store.get_stats() + + assert stats["points_count"] == 10 + assert stats["vectors_count"] == 10 + + +@patch("semantica.vector_store.qdrant_store.QDRANT_AVAILABLE", True) +def test_get_stats_uses_points_count_when_vectors_count_absent(): + """On qdrant-client >=1.16, vectors_count is absent. + Semantica inserts one vector per point, so points_count is the correct + substitute. indexed_vectors_count must NOT be used: it counts only vectors + in optimised segments and is 0 for freshly-inserted data.""" + # Simulate qdrant-client >=1.16: no vectors_count attribute on the object, + # but indexed_vectors_count is present and intentionally different from + # points_count to verify the correct field is chosen. + store = QdrantStore() + store.client = MagicMock() + store.collection = MagicMock() + store.collection.collection_name = "test_coll" + + info = MagicMock(spec=["points_count", "indexed_vectors_count", "status"]) + info.points_count = 5 + info.indexed_vectors_count = 0 # typical for freshly-inserted, unoptimised data + info.status = "green" + store.client.get_collection.return_value = info + + stats = store.get_stats() + + assert stats["points_count"] == 5 + # Must equal points_count (5), NOT indexed_vectors_count (0) + assert stats["vectors_count"] == 5 + assert stats["vectors_count"] != info.indexed_vectors_count + assert stats["status"] == "green" + + +@patch("semantica.vector_store.qdrant_store.QDRANT_AVAILABLE", True) +def test_get_stats_vectors_count_equals_points_count_when_vectors_count_absent(): + """On qdrant-client >=1.16, vectors_count is absent. The fallback is + points_count, so vectors_count and points_count must always be equal. + indexed_vectors_count is intentionally absent from this mock to confirm + it is not required for the fallback path.""" + store = QdrantStore() + store.client = MagicMock() + store.collection = MagicMock() + store.collection.collection_name = "test_coll" + + info = MagicMock(spec=["points_count", "status"]) + info.points_count = 7 + info.status = "green" + store.client.get_collection.return_value = info + + stats = store.get_stats() + + assert stats["points_count"] == 7 + assert stats["vectors_count"] == 7 From 0646601219f40a6b65ce8df2cb805c10da15d9fe Mon Sep 17 00:00:00 2001 From: Sameer Kadam Date: Tue, 8 Sep 2026 00:54:16 +0530 Subject: [PATCH 09/14] fix: handle Qdrant vector count compatibility --- semantica/vector_store/qdrant_store.py | 25 ++++-- .../test_qdrant_collection_search.py | 79 ++++++++++++++++--- 2 files changed, 86 insertions(+), 18 deletions(-) diff --git a/semantica/vector_store/qdrant_store.py b/semantica/vector_store/qdrant_store.py index 43db6996..04083498 100644 --- a/semantica/vector_store/qdrant_store.py +++ b/semantica/vector_store/qdrant_store.py @@ -698,17 +698,30 @@ class QdrantStore: collection_info = self.client.get_collection( self.collection.collection_name ) + # vectors_count was removed in qdrant-client 1.16.0. + # When it is absent, only infer the total from points_count if we + # can confirm the collection uses a single unnamed vector per point + # (VectorParams). Named/multi-vector collections (dict of VectorParams) + # have an unknown multiplier, so return None rather than a wrong value. + # get_collection() accepts externally-created collections without schema + # validation, so the schema must be inspected at stats time. + vectors_count_fallback: Optional[int] + try: + vectors_cfg = collection_info.config.params.vectors + vectors_count_fallback = ( + collection_info.points_count + if QDRANT_AVAILABLE and isinstance(vectors_cfg, VectorParams) + else None + ) + except Exception: + vectors_count_fallback = None + return { "points_count": collection_info.points_count, - # vectors_count was removed in qdrant-client 1.16.0. - # indexed_vectors_count is NOT equivalent: it counts only vectors - # in fully-optimised segments and is 0 for freshly-inserted points. - # Semantica inserts one vector per point, so points_count is the - # correct substitute for the old vectors_count statistic. "vectors_count": getattr( collection_info, "vectors_count", - collection_info.points_count, + vectors_count_fallback, ), "status": str(collection_info.status) if hasattr(collection_info, "status") diff --git a/tests/vector_store/test_qdrant_collection_search.py b/tests/vector_store/test_qdrant_collection_search.py index 95ba163d..33265d88 100644 --- a/tests/vector_store/test_qdrant_collection_search.py +++ b/tests/vector_store/test_qdrant_collection_search.py @@ -6,8 +6,10 @@ These cover the qdrant-client >=1.16.0 compatibility fixes: read ScoredPoints from response.points, and map them to the documented Semantica result shape. -2. get_stats() must not access vectors_count unconditionally; it falls back to - indexed_vectors_count (present since 1.10.0) or None. +2. get_stats() must not access vectors_count unconditionally; when the field + is absent (qdrant-client >=1.16), it falls back to points_count for + single-vector collections, and to None for named/multi-vector collections + where the per-point vector count is unknown. All tests drive the real implementation against a MagicMock client, following the established pattern in test_qdrant_store.py. @@ -274,20 +276,20 @@ def test_get_stats_uses_vectors_count_when_present(): @patch("semantica.vector_store.qdrant_store.QDRANT_AVAILABLE", True) def test_get_stats_uses_points_count_when_vectors_count_absent(): """On qdrant-client >=1.16, vectors_count is absent. - Semantica inserts one vector per point, so points_count is the correct - substitute. indexed_vectors_count must NOT be used: it counts only vectors + For a single unnamed-vector collection (config.params.vectors is a + VectorParams instance), points_count is the correct substitute. + indexed_vectors_count must NOT be used: it counts only vectors in optimised segments and is 0 for freshly-inserted data.""" - # Simulate qdrant-client >=1.16: no vectors_count attribute on the object, - # but indexed_vectors_count is present and intentionally different from - # points_count to verify the correct field is chosen. + from qdrant_client.models import VectorParams, Distance store = QdrantStore() store.client = MagicMock() store.collection = MagicMock() store.collection.collection_name = "test_coll" - info = MagicMock(spec=["points_count", "indexed_vectors_count", "status"]) + info = MagicMock(spec=["points_count", "indexed_vectors_count", "config", "status"]) info.points_count = 5 info.indexed_vectors_count = 0 # typical for freshly-inserted, unoptimised data + info.config.params.vectors = VectorParams(size=4, distance=Distance.COSINE) info.status = "green" store.client.get_collection.return_value = info @@ -302,17 +304,19 @@ def test_get_stats_uses_points_count_when_vectors_count_absent(): @patch("semantica.vector_store.qdrant_store.QDRANT_AVAILABLE", True) def test_get_stats_vectors_count_equals_points_count_when_vectors_count_absent(): - """On qdrant-client >=1.16, vectors_count is absent. The fallback is - points_count, so vectors_count and points_count must always be equal. + """On qdrant-client >=1.16, vectors_count is absent. For a single unnamed- + vector collection the fallback is points_count, so both keys are equal. indexed_vectors_count is intentionally absent from this mock to confirm - it is not required for the fallback path.""" + it is not required by the fallback path.""" + from qdrant_client.models import VectorParams, Distance store = QdrantStore() store.client = MagicMock() store.collection = MagicMock() store.collection.collection_name = "test_coll" - info = MagicMock(spec=["points_count", "status"]) + info = MagicMock(spec=["points_count", "config", "status"]) info.points_count = 7 + info.config.params.vectors = VectorParams(size=8, distance=Distance.COSINE) info.status = "green" store.client.get_collection.return_value = info @@ -320,3 +324,54 @@ def test_get_stats_vectors_count_equals_points_count_when_vectors_count_absent() assert stats["points_count"] == 7 assert stats["vectors_count"] == 7 + + +@patch("semantica.vector_store.qdrant_store.QDRANT_AVAILABLE", True) +def test_get_stats_vectors_count_is_none_for_named_multi_vector_collection(): + """When vectors_count is absent and the collection uses named/multi vectors + (config.params.vectors is a dict), the total cannot be inferred and + vectors_count must be None rather than a misleading points_count value.""" + from qdrant_client.models import VectorParams, Distance + store = QdrantStore() + store.client = MagicMock() + store.collection = MagicMock() + store.collection.collection_name = "test_coll" + + info = MagicMock(spec=["points_count", "config", "status"]) + info.points_count = 4 + # Named multi-vector: qdrant-client returns a dict of VectorParams + info.config.params.vectors = { + "text": VectorParams(size=4, distance=Distance.COSINE), + "image": VectorParams(size=8, distance=Distance.DOT), + } + info.status = "green" + store.client.get_collection.return_value = info + + stats = store.get_stats() + + assert stats["points_count"] == 4 + # vectors_count must be None: total vectors = points * num_named_vectors, + # and that multiplier is unknown to the caller. + assert stats["vectors_count"] is None + + +@patch("semantica.vector_store.qdrant_store.QDRANT_AVAILABLE", True) +def test_get_stats_vectors_count_is_none_when_config_inaccessible(): + """If the collection config cannot be read (e.g. an older schema or + unexpected server response), vectors_count must fall back to None safely + without raising.""" + store = QdrantStore() + store.client = MagicMock() + store.collection = MagicMock() + store.collection.collection_name = "test_coll" + + # Simulate a CollectionInfo that has no config attribute at all + info = MagicMock(spec=["points_count", "status"]) + info.points_count = 3 + info.status = "green" + store.client.get_collection.return_value = info + + stats = store.get_stats() + + assert stats["points_count"] == 3 + assert stats["vectors_count"] is None From 1ff890abdd7b63efc5ebf6f5b72816ae8fe330bf Mon Sep 17 00:00:00 2001 From: Zohaib Hassnain <109234410+ZohaibHassan16@users.noreply.github.com> Date: Tue, 8 Sep 2026 01:27:18 +0500 Subject: [PATCH 10/14] fix(deps): address review feedback on import exceptions and probes (#1513) --- .gitignore | Bin 1333 -> 1342 bytes integrations/google_adk/session_service.py | 172 ++-- semantica/ingest/__init__.py | 52 +- semantica/ingest/methods.py | 328 +++++--- semantica/ingest/public_api_ingestor.py | 41 +- semantica/ingest/repo_ingestor.py | 30 +- semantica/ingest/xml_ingestor.py | 4 +- semantica/parse/docx_parser.py | 6 +- semantica/parse/excel_parser.py | 3 +- semantica/parse/html_parser.py | 2 +- semantica/parse/methods.py | 95 ++- semantica/parse/web_parser.py | 2 +- semantica/parse/xml_parser.py | 34 +- semantica/semantic_extract/providers.py | 773 ++++++++++++------ semantica/utils/helpers.py | 34 +- .../visualization/embedding_visualizer.py | 55 +- tests/ingest/test_optional_imports.py | 131 +++ .../test_temporal_extraction.py | 77 +- tests/test_issue_1513_slim_core.py | 253 +++++- 19 files changed, 1492 insertions(+), 600 deletions(-) diff --git a/.gitignore b/.gitignore index 79197d528712a3ecc8861ff00d9896e84e1304b7..bbfe449f483be91e91402c7f9b87f19dee80eaac 100644 GIT binary patch delta 41 xcmdnWwU2AVc4k2>z0ACn)C#@a)RIKKtm6E<&D)s68QHQki}LlkCd;r&0suEz4YdFO delta 53 zcmdnTwUukbcIM3|nZp=07_u2M8HyP48T1)=8Mqj@loi7Bi?U0KQd5h$^vYpOeJ%i; CJP%a> diff --git a/integrations/google_adk/session_service.py b/integrations/google_adk/session_service.py index f5a0a02d..1c97e099 100644 --- a/integrations/google_adk/session_service.py +++ b/integrations/google_adk/session_service.py @@ -21,6 +21,7 @@ from typing import Any, List, Optional try: from google.adk.events import Event from google.adk.sessions import BaseSessionService, Session + try: from google.adk.sessions import ListSessionsResponse except ImportError: @@ -33,7 +34,7 @@ try: except ImportError: from google.adk.sessions.base_session_service import GetSessionConfig ADK_AVAILABLE = True -except (ImportError, ModuleNotFoundError): +except (ImportError, OSError): ADK_AVAILABLE = False BaseSessionService = object Session = Any @@ -162,10 +163,10 @@ class SemanticaSessionService(BaseSessionService): return {} def _find_session_node( - self, - app_name: str, - user_id: str, - session_id: str, + self, + app_name: str, + user_id: str, + session_id: str, ) -> Optional[Any]: """Find a session node by its logical ADK session ID.""" expected_node_id = self._node_id(app_name, user_id, session_id) @@ -182,18 +183,18 @@ class SemanticaSessionService(BaseSessionService): metadata = node.get("metadata") if ( - isinstance(metadata, dict) - and str(metadata.get("session_id")) == str(session_id) - and str(metadata.get("app_name")) == str(app_name) - and str(metadata.get("user_id")) == str(user_id) + isinstance(metadata, dict) + and str(metadata.get("session_id")) == str(session_id) + and str(metadata.get("app_name")) == str(app_name) + and str(metadata.get("user_id")) == str(user_id) ): return node return None def _find_node_by_id( - self, - node_id: str, + self, + node_id: str, ) -> Optional[Any]: """Find a ContextGraph node by graph node ID.""" for node in self.graph.find_nodes() or []: @@ -212,13 +213,13 @@ class SemanticaSessionService(BaseSessionService): data = SemanticaSessionService._safe_dict(event) for field in ( - "id", - "invocation_id", - "author", - "timestamp", - "partial", - "turn_complete", - "branch", + "id", + "invocation_id", + "author", + "timestamp", + "partial", + "turn_complete", + "branch", ): if field not in data and hasattr(event, field): value = getattr(event, field) @@ -231,10 +232,10 @@ class SemanticaSessionService(BaseSessionService): return data def _event_nodes( - self, - app_name: str, - user_id: str, - session_id: str, + self, + app_name: str, + user_id: str, + session_id: str, ) -> List[Any]: """Return all event nodes connected to a session.""" session_node_id = self._node_id(app_name, user_id, session_id) @@ -275,8 +276,8 @@ class SemanticaSessionService(BaseSessionService): return str(timestamp) def _event_from_node( - self, - node: Any, + self, + node: Any, ) -> Any: """ Reconstruct an ADK Event from its stored metadata. @@ -289,7 +290,7 @@ class SemanticaSessionService(BaseSessionService): if not event_id and graph_node_id: graph_node_id = str(graph_node_id) if graph_node_id.startswith("adk-event:"): - event_id = graph_node_id[len("adk-event:"):] + event_id = graph_node_id[len("adk-event:") :] if event_id: properties["id"] = event_id @@ -310,11 +311,11 @@ class SemanticaSessionService(BaseSessionService): @staticmethod def _session_kwargs( - app_name: str, - user_id: str, - session_id: str, - state: Optional[dict], - events: Optional[List[Any]], + app_name: str, + user_id: str, + session_id: str, + state: Optional[dict], + events: Optional[List[Any]], ) -> dict: """Build kwargs for the ADK Session model.""" return { @@ -326,8 +327,8 @@ class SemanticaSessionService(BaseSessionService): } def _session_from_node( - self, - node: Any, + self, + node: Any, ) -> Session: """Reconstruct an ADK Session from a ContextGraph node.""" properties = self._node_properties(node) @@ -347,14 +348,14 @@ class SemanticaSessionService(BaseSessionService): # splitting on ':' after the prefix always yields # exactly 3 parts regardless of what characters the # original app_name/user_id/session_id contained. - parts = graph_node_id[len("adk-session:"):].split(":") + parts = graph_node_id[len("adk-session:") :].split(":") if len(parts) == 3: decoded = [urllib.parse.unquote(part) for part in parts] app_name = app_name or decoded[0] user_id = user_id or decoded[1] session_id = decoded[2] else: - session_id = graph_node_id[len("adk-session:"):] + session_id = graph_node_id[len("adk-session:") :] else: session_id = graph_node_id @@ -383,12 +384,12 @@ class SemanticaSessionService(BaseSessionService): # ------------------------------------------------------------------ async def create_session( - self, - *, - app_name: str, - user_id: str, - state: Optional[dict[str, Any]] = None, - session_id: Optional[str] = None, + self, + *, + app_name: str, + user_id: str, + state: Optional[dict[str, Any]] = None, + session_id: Optional[str] = None, ) -> Session: """Create and persist an ADK session.""" return await asyncio.to_thread( @@ -396,11 +397,11 @@ class SemanticaSessionService(BaseSessionService): ) def _create_session_sync( - self, - app_name: str, - user_id: str, - state: Optional[dict[str, Any]], - session_id: Optional[str], + self, + app_name: str, + user_id: str, + state: Optional[dict[str, Any]], + session_id: Optional[str], ) -> Session: with self._lock: session_id = session_id or str(uuid.uuid4()) @@ -430,12 +431,12 @@ class SemanticaSessionService(BaseSessionService): ) async def get_session( - self, - *, - app_name: str, - user_id: str, - session_id: str, - config: Optional[GetSessionConfig] = None, + self, + *, + app_name: str, + user_id: str, + session_id: str, + config: Optional[GetSessionConfig] = None, ) -> Optional[Session]: """Retrieve an ADK session from ContextGraph.""" return await asyncio.to_thread( @@ -443,11 +444,11 @@ class SemanticaSessionService(BaseSessionService): ) def _get_session_sync( - self, - app_name: str, - user_id: str, - session_id: str, - config: Optional[GetSessionConfig], + self, + app_name: str, + user_id: str, + session_id: str, + config: Optional[GetSessionConfig], ) -> Optional[Session]: with self._lock: node = self._find_session_node(app_name, user_id, session_id) @@ -468,7 +469,7 @@ class SemanticaSessionService(BaseSessionService): # trims the already-built Session object. if config: if config.num_recent_events: - session.events = session.events[-config.num_recent_events:] + session.events = session.events[-config.num_recent_events :] if config.after_timestamp: i = len(session.events) - 1 while i >= 0: @@ -476,14 +477,14 @@ class SemanticaSessionService(BaseSessionService): break i -= 1 if i >= 0: - session.events = session.events[i + 1:] + session.events = session.events[i + 1 :] return session async def append_event( - self, - session: Session, - event: Event, + self, + session: Session, + event: Event, ) -> Event: """Persist an ADK event and associate it with a session.""" # ADK's own base implementation is a no-op for partial/streaming @@ -510,8 +511,13 @@ class SemanticaSessionService(BaseSessionService): # Verify cross-tenant security properties = self._node_properties(session_node) - if properties.get("app_name") != app_name or properties.get("user_id") != user_id: - raise ValueError("Cross-tenant session write denied: app_name or user_id mismatch.") + if ( + properties.get("app_name") != app_name + or properties.get("user_id") != user_id + ): + raise ValueError( + "Cross-tenant session write denied: app_name or user_id mismatch." + ) # Apply ADK in-memory event and state delta semantics. This # runs inside asyncio.to_thread's worker thread, which has no @@ -553,11 +559,11 @@ class SemanticaSessionService(BaseSessionService): ) async def delete_session( - self, - *, - app_name: str, - user_id: str, - session_id: str, + self, + *, + app_name: str, + user_id: str, + session_id: str, ) -> None: """Delete a session and all of its graph-backed events.""" await asyncio.to_thread( @@ -565,10 +571,10 @@ class SemanticaSessionService(BaseSessionService): ) def _delete_session_sync( - self, - app_name: str, - user_id: str, - session_id: str, + self, + app_name: str, + user_id: str, + session_id: str, ) -> None: with self._lock: session_node = self._find_session_node(app_name, user_id, session_id) @@ -590,9 +596,9 @@ class SemanticaSessionService(BaseSessionService): continue if ( - edge.get("source") == session_node_id - and edge.get("type") == "HAS_EVENT" - and edge.get("target") + edge.get("source") == session_node_id + and edge.get("type") == "HAS_EVENT" + and edge.get("target") ): event_node_ids.append(str(edge["target"])) @@ -602,18 +608,18 @@ class SemanticaSessionService(BaseSessionService): self.graph.purge_node(session_node_id) async def list_sessions( - self, - *, - app_name: str, - user_id: Optional[str] = None, + self, + *, + app_name: str, + user_id: Optional[str] = None, ) -> ListSessionsResponse: """List sessions for an app, optionally scoped to one user.""" return await asyncio.to_thread(self._list_sessions_sync, app_name, user_id) def _list_sessions_sync( - self, - app_name: str, - user_id: Optional[str], + self, + app_name: str, + user_id: Optional[str], ) -> ListSessionsResponse: with self._lock: sessions: List[Session] = [] @@ -643,4 +649,4 @@ class SemanticaSessionService(BaseSessionService): __all__ = [ "ADK_AVAILABLE", "SemanticaSessionService", -] \ No newline at end of file +] diff --git a/semantica/ingest/__init__.py b/semantica/ingest/__init__.py index e7859604..bba55644 100644 --- a/semantica/ingest/__init__.py +++ b/semantica/ingest/__init__.py @@ -133,7 +133,11 @@ import importlib from typing import TYPE_CHECKING, Any, Dict, Tuple if TYPE_CHECKING: - from .salesforce_ingestor import SalesforceConnector, SalesforceData, SalesforceIngestor + from .salesforce_ingestor import ( + SalesforceConnector, + SalesforceData, + SalesforceIngestor, + ) from .config import IngestConfig, ingest_config from .file_ingestor import ( @@ -296,13 +300,55 @@ def __getattr__(name: str) -> Any: module_name, attr_name = _LAZY_EXPORTS[name] try: module = importlib.import_module(module_name, __name__) - except ModuleNotFoundError as exc: + except (ImportError, OSError) as exc: message = _OPTIONAL_DEPENDENCY_MESSAGES.get(module_name) missing_name = getattr(exc, "name", None) - if message and missing_name in {"git", "bs4", "pyarrow", "simple_salesforce", "lxml"}: + if message and ( + missing_name is None + or any( + pkg in missing_name + for pkg in ("git", "bs4", "pyarrow", "simple_salesforce", "lxml") + ) + ): raise ImportError(message) from exc raise + # Guard against backends whose modules imported cleanly with dependencies + # set to None; ensure probe imports (e.g. try: from semantica.ingest import ...) + # fail at import time rather than postponing failure to construction time. + if module_name == ".repo_ingestor" and name in {"RepoIngestor"}: + if getattr(module, "git", None) is None: + message = _OPTIONAL_DEPENDENCY_MESSAGES.get(module_name) + if message: + raise ImportError(message) + + if module_name == ".xml_ingestor" and name in {"XMLIngestor"}: + if getattr(module, "etree", None) is None: + message = _OPTIONAL_DEPENDENCY_MESSAGES.get(module_name) + if message: + raise ImportError(message) + + if module_name == ".parquet_ingestor" and name in {"ParquetIngestor"}: + if not getattr(module, "PARQUET_AVAILABLE", True): + message = _OPTIONAL_DEPENDENCY_MESSAGES.get(module_name) + if message: + raise ImportError(message) + + if module_name == ".arrow_ingestor" and name in {"ArrowIngestor"}: + if not getattr(module, "ARROW_AVAILABLE", True): + message = _OPTIONAL_DEPENDENCY_MESSAGES.get(module_name) + if message: + raise ImportError(message) + + if module_name == ".salesforce_ingestor" and name in { + "SalesforceIngestor", + "SalesforceConnector", + }: + if not getattr(module, "SALESFORCE_AVAILABLE", True): + message = _OPTIONAL_DEPENDENCY_MESSAGES.get(module_name) + if message: + raise ImportError(message) + value = getattr(module, attr_name) globals()[name] = value return value diff --git a/semantica/ingest/methods.py b/semantica/ingest/methods.py index 3736288b..7bd5684d 100644 --- a/semantica/ingest/methods.py +++ b/semantica/ingest/methods.py @@ -193,6 +193,7 @@ def _is_scp_like_repo_source(source: str) -> bool: """Return True for scp-like SSH remotes (``user@host:path``).""" return bool(_SCP_LIKE_REPO_URL_RE.match(source.strip())) + if TYPE_CHECKING: from .api_ingestor import APIData from .arrow_ingestor import ArrowData @@ -252,7 +253,12 @@ def ingest_file( if custom_method and custom_method != ingest_file: fallback = kwargs.pop("fallback_on_custom_error", False) result = call_custom_method( - logger, method, custom_method, source, fallback_on_custom_error=fallback, **kwargs + logger, + method, + custom_method, + source, + fallback_on_custom_error=fallback, + **kwargs, ) if result is not CUSTOM_METHOD_FELL_BACK: return result @@ -318,21 +324,18 @@ def ingest_parquet( if custom_method and custom_method != ingest_parquet: fallback = kwargs.pop("fallback_on_custom_error", False) result = call_custom_method( - logger, method, custom_method, source, fallback_on_custom_error=fallback, **kwargs + logger, + method, + custom_method, + source, + fallback_on_custom_error=fallback, + **kwargs, ) if result is not CUSTOM_METHOD_FELL_BACK: return result try: - try: - from .parquet_ingestor import ParquetIngestor - except ModuleNotFoundError as exc: - if _is_missing_dependency(exc, "pyarrow"): - raise _missing_optional_dependency( - "Parquet ingestion", - "pyarrow", - ) from exc - raise + from .parquet_ingestor import ParquetIngestor config = ingest_config.get_method_config("parquet") config.update(kwargs) @@ -397,21 +400,18 @@ def ingest_arrow( if custom_method and custom_method != ingest_arrow: fallback = kwargs.pop("fallback_on_custom_error", False) result = call_custom_method( - logger, method, custom_method, source, fallback_on_custom_error=fallback, **kwargs + logger, + method, + custom_method, + source, + fallback_on_custom_error=fallback, + **kwargs, ) if result is not CUSTOM_METHOD_FELL_BACK: return result try: - try: - from .arrow_ingestor import ArrowIngestor - except ModuleNotFoundError as exc: - if _is_missing_dependency(exc, "pyarrow"): - raise _missing_optional_dependency( - "Arrow ingestion", - "pyarrow", - ) from exc - raise + from .arrow_ingestor import ArrowIngestor config = ingest_config.get_method_config("arrow") config.update(kwargs) @@ -481,7 +481,12 @@ def ingest_xml( if custom_method and custom_method != ingest_xml: fallback = kwargs.pop("fallback_on_custom_error", False) result = call_custom_method( - logger, method, custom_method, source, fallback_on_custom_error=fallback, **kwargs + logger, + method, + custom_method, + source, + fallback_on_custom_error=fallback, + **kwargs, ) if result is not CUSTOM_METHOD_FELL_BACK: return result @@ -491,7 +496,10 @@ def ingest_xml( config = ingest_config.get_method_config("xml") config.update(kwargs) - ingestor = XMLIngestor(**config) + try: + ingestor = XMLIngestor(**config) + except ImportError as exc: + raise _missing_optional_dependency("XML ingestion", "lxml") from exc def _run_single( path: Union[str, Path], @@ -511,6 +519,8 @@ def ingest_xml( return _run_single(source_path) + except ConfigurationError: + raise except Exception as e: logger.error(f"Failed to ingest XML: {e}") raise @@ -545,7 +555,12 @@ def ingest_web( if custom_method and custom_method != ingest_web: fallback = kwargs.pop("fallback_on_custom_error", False) result = call_custom_method( - logger, method, custom_method, source, fallback_on_custom_error=fallback, **kwargs + logger, + method, + custom_method, + source, + fallback_on_custom_error=fallback, + **kwargs, ) if result is not CUSTOM_METHOD_FELL_BACK: return result @@ -635,7 +650,12 @@ def ingest_public_api( if custom_method and custom_method != ingest_public_api: fallback = kwargs.pop("fallback_on_custom_error", False) result = call_custom_method( - logger, method, custom_method, source, fallback_on_custom_error=fallback, **kwargs + logger, + method, + custom_method, + source, + fallback_on_custom_error=fallback, + **kwargs, ) if result is not CUSTOM_METHOD_FELL_BACK: return result @@ -722,7 +742,12 @@ def ingest_feed( if custom_method and custom_method != ingest_feed: fallback = kwargs.pop("fallback_on_custom_error", False) result = call_custom_method( - logger, method, custom_method, source, fallback_on_custom_error=fallback, **kwargs + logger, + method, + custom_method, + source, + fallback_on_custom_error=fallback, + **kwargs, ) if result is not CUSTOM_METHOD_FELL_BACK: return result @@ -791,7 +816,12 @@ def ingest_stream( if custom_method and custom_method != ingest_stream: fallback = kwargs.pop("fallback_on_custom_error", False) result = call_custom_method( - logger, method, custom_method, source, fallback_on_custom_error=fallback, **kwargs + logger, + method, + custom_method, + source, + fallback_on_custom_error=fallback, + **kwargs, ) if result is not CUSTOM_METHOD_FELL_BACK: return result @@ -868,20 +898,18 @@ def ingest_repository( if custom_method and custom_method != ingest_repository: fallback = kwargs.pop("fallback_on_custom_error", False) result = call_custom_method( - logger, method, custom_method, source, fallback_on_custom_error=fallback, **kwargs + logger, + method, + custom_method, + source, + fallback_on_custom_error=fallback, + **kwargs, ) if result is not CUSTOM_METHOD_FELL_BACK: return result try: - try: - from .repo_ingestor import RepoIngestor - except ModuleNotFoundError as exc: - if _is_missing_dependency(exc, "git"): - raise _missing_optional_dependency( - "Repository ingestion", "GitPython" - ) from exc - raise + from .repo_ingestor import RepoIngestor # Get config config = ingest_config.get_method_config("repo") @@ -945,7 +973,12 @@ def ingest_email( if custom_method and custom_method != ingest_email: fallback = kwargs.pop("fallback_on_custom_error", False) result = call_custom_method( - logger, method, custom_method, source, fallback_on_custom_error=fallback, **kwargs + logger, + method, + custom_method, + source, + fallback_on_custom_error=fallback, + **kwargs, ) if result is not CUSTOM_METHOD_FELL_BACK: return result @@ -1024,7 +1057,12 @@ def ingest_ontology( if custom_method and custom_method != ingest_ontology: fallback = kwargs.pop("fallback_on_custom_error", False) result = call_custom_method( - logger, method, custom_method, source, fallback_on_custom_error=fallback, **kwargs + logger, + method, + custom_method, + source, + fallback_on_custom_error=fallback, + **kwargs, ) if result is not CUSTOM_METHOD_FELL_BACK: return result @@ -1090,7 +1128,12 @@ def ingest_database( if custom_method and custom_method != ingest_database: fallback = kwargs.pop("fallback_on_custom_error", False) result = call_custom_method( - logger, method, custom_method, source, fallback_on_custom_error=fallback, **kwargs + logger, + method, + custom_method, + source, + fallback_on_custom_error=fallback, + **kwargs, ) if result is not CUSTOM_METHOD_FELL_BACK: return result @@ -1238,105 +1281,122 @@ def ingest_salesforce( if custom_method and custom_method != ingest_salesforce: fallback = kwargs.pop("fallback_on_custom_error", False) result = call_custom_method( - logger, method, custom_method, source, - fallback_on_custom_error=fallback, **kwargs, + logger, + method, + custom_method, + source, + fallback_on_custom_error=fallback, + **kwargs, ) if result is not CUSTOM_METHOD_FELL_BACK: return result try: from .salesforce_ingestor import SalesforceIngestor - except ModuleNotFoundError as exc: - if _is_missing_dependency(exc, "simple_salesforce"): + + # Unpack credential dict (if given); everything else stays in kwargs. + creds: Dict[str, Any] = {} + if source is not None: + if not isinstance(source, dict): + raise ProcessingError( + "ingest_salesforce() source must be a credential dict or None. " + "Pass sobject_name / soql as keyword arguments." + ) + creds = dict(source) + + # Merge any ingest_config method config under "salesforce". + # get_method_config() now returns a copy, so this dict is safe to mutate. + # We build the final connector config in order of increasing priority: + # 1. base method config (lowest — global defaults set by operator) + # 2. per-call credential dict supplied via `source` + # 3. per-call connector params supplied as kwargs + # Credentials are extracted from kwargs and removed so they don't also + # flow into the ingest method call (which doesn't understand them). + _CONNECTOR_PARAMS = frozenset( + { + "username", + "password", + "security_token", + "domain", + "instance_url", + "session_id", + "api_version", + } + ) + connector_kwargs = {k: v for k, v in kwargs.items() if k in _CONNECTOR_PARAMS} + for k in _CONNECTOR_PARAMS: + kwargs.pop(k, None) + + # Build a fresh per-call config dict — never mutate the global store. + config: Dict[str, Any] = { + **ingest_config.get_method_config("salesforce"), # base (already a copy) + **creds, # source dict credentials + **connector_kwargs, # kwarg credentials + } + + try: + ingestor = SalesforceIngestor(**config) + except ImportError as exc: raise _missing_optional_dependency( "Salesforce ingestion", "simple-salesforce" ) from exc + + if method == "sobject": + sobject_name = kwargs.pop("sobject_name", None) + if not sobject_name: + raise ProcessingError( + "ingest_salesforce() with method='sobject' requires " + "sobject_name keyword argument." + ) + return ingestor.ingest_sobject(sobject_name, **kwargs) + + elif method == "query": + soql = kwargs.pop("soql", None) + if not soql: + raise ProcessingError( + "ingest_salesforce() with method='query' requires " + "soql keyword argument." + ) + return ingestor.ingest_query(soql, **kwargs) + + elif method == "list_sobjects": + return ingestor.list_sobjects() + + elif method == "schema": + sobject_name = kwargs.pop("sobject_name", None) + if not sobject_name: + raise ProcessingError( + "ingest_salesforce() with method='schema' requires " + "sobject_name keyword argument." + ) + return ingestor.get_sobject_schema(sobject_name) + + elif method == "documents": + sobject_name = kwargs.pop("sobject_name", None) + if not sobject_name: + raise ProcessingError( + "ingest_salesforce() with method='documents' requires " + "sobject_name keyword argument." + ) + id_field = kwargs.pop("id_field", "Id") + text_fields = kwargs.pop("text_fields", None) + data = ingestor.ingest_sobject(sobject_name, **kwargs) + return ingestor.export_as_documents( + data, id_field=id_field, text_fields=text_fields + ) + + else: + raise ProcessingError( + f"Unknown ingest_salesforce method: {method!r}. " + "Valid methods: 'sobject', 'query', 'list_sobjects', 'schema', " + "'documents'." + ) + + except ConfigurationError: + raise + except Exception as e: + logger.error(f"Failed to ingest salesforce: {e}") raise - - # Unpack credential dict (if given); everything else stays in kwargs. - creds: Dict[str, Any] = {} - if source is not None: - if not isinstance(source, dict): - raise ProcessingError( - "ingest_salesforce() source must be a credential dict or None. " - "Pass sobject_name / soql as keyword arguments." - ) - creds = dict(source) - - # Merge any ingest_config method config under "salesforce". - # get_method_config() now returns a copy, so this dict is safe to mutate. - # We build the final connector config in order of increasing priority: - # 1. base method config (lowest — global defaults set by operator) - # 2. per-call credential dict supplied via `source` - # 3. per-call connector params supplied as kwargs - # Credentials are extracted from kwargs and removed so they don't also - # flow into the ingest method call (which doesn't understand them). - _CONNECTOR_PARAMS = frozenset({ - "username", "password", "security_token", "domain", - "instance_url", "session_id", "api_version", - }) - connector_kwargs = {k: v for k, v in kwargs.items() if k in _CONNECTOR_PARAMS} - for k in _CONNECTOR_PARAMS: - kwargs.pop(k, None) - - # Build a fresh per-call config dict — never mutate the global store. - config: Dict[str, Any] = { - **ingest_config.get_method_config("salesforce"), # base (already a copy) - **creds, # source dict credentials - **connector_kwargs, # kwarg credentials - } - - ingestor = SalesforceIngestor(**config) - - if method == "sobject": - sobject_name = kwargs.pop("sobject_name", None) - if not sobject_name: - raise ProcessingError( - "ingest_salesforce() with method='sobject' requires " - "sobject_name keyword argument." - ) - return ingestor.ingest_sobject(sobject_name, **kwargs) - - elif method == "query": - soql = kwargs.pop("soql", None) - if not soql: - raise ProcessingError( - "ingest_salesforce() with method='query' requires " - "soql keyword argument." - ) - return ingestor.ingest_query(soql, **kwargs) - - elif method == "list_sobjects": - return ingestor.list_sobjects() - - elif method == "schema": - sobject_name = kwargs.pop("sobject_name", None) - if not sobject_name: - raise ProcessingError( - "ingest_salesforce() with method='schema' requires " - "sobject_name keyword argument." - ) - return ingestor.get_sobject_schema(sobject_name) - - elif method == "documents": - sobject_name = kwargs.pop("sobject_name", None) - if not sobject_name: - raise ProcessingError( - "ingest_salesforce() with method='documents' requires " - "sobject_name keyword argument." - ) - id_field = kwargs.pop("id_field", "Id") - text_fields = kwargs.pop("text_fields", None) - data = ingestor.ingest_sobject(sobject_name, **kwargs) - return ingestor.export_as_documents(data, id_field=id_field, - text_fields=text_fields) - - else: - raise ProcessingError( - f"Unknown ingest_salesforce method: {method!r}. " - "Valid methods: 'sobject', 'query', 'list_sobjects', 'schema', " - "'documents'." - ) def ingest_mcp( @@ -1404,7 +1464,12 @@ def ingest_mcp( if custom_method and custom_method != ingest_mcp: fallback = kwargs.pop("fallback_on_custom_error", False) result = call_custom_method( - logger, method, custom_method, source, fallback_on_custom_error=fallback, **kwargs + logger, + method, + custom_method, + source, + fallback_on_custom_error=fallback, + **kwargs, ) if result is not CUSTOM_METHOD_FELL_BACK: return result @@ -1643,8 +1708,9 @@ def ingest( elif source_type == "mcp": return {"data": ingest_mcp(sources, method=method or "resources", **kwargs)} elif source_type == "salesforce": - return {"data": ingest_salesforce(sources, - method=method or "sobject", **kwargs)} + return { + "data": ingest_salesforce(sources, method=method or "sobject", **kwargs) + } else: raise ProcessingError(f"Unknown source type: {source_type}") diff --git a/semantica/ingest/public_api_ingestor.py b/semantica/ingest/public_api_ingestor.py index 7df07be4..001c132e 100644 --- a/semantica/ingest/public_api_ingestor.py +++ b/semantica/ingest/public_api_ingestor.py @@ -31,15 +31,18 @@ import requests try: from lxml import etree as lxml_etree + _SAFE_XML_PARSER = lxml_etree.XMLParser( resolve_entities=False, no_network=True, recover=False, huge_tree=False, load_dtd=False, + remove_comments=True, + remove_pis=True, ) _LXML_SYNTAX_ERRORS: Tuple[type, ...] = (lxml_etree.XMLSyntaxError,) -except (ImportError, ModuleNotFoundError): +except (ImportError, OSError): lxml_etree = None _SAFE_XML_PARSER = None _LXML_SYNTAX_ERRORS = () @@ -47,7 +50,7 @@ except (ImportError, ModuleNotFoundError): try: from defusedxml import ElementTree as safe_xml_etree from defusedxml.common import DefusedXmlException -except ModuleNotFoundError: # pragma: no cover - fallback for minimal installs +except (ImportError, OSError): # pragma: no cover - fallback for minimal installs safe_xml_etree = None class DefusedXmlException(Exception): @@ -449,7 +452,9 @@ class PublicAPIIngestor(RESTIngestor): APIData: Normalized public API response and metadata """ self._validate_endpoint(endpoint) - self._validate_no_auth_request(headers=headers, params=params, options=options, endpoint=endpoint) + self._validate_no_auth_request( + headers=headers, params=params, options=options, endpoint=endpoint + ) tracking_id = self.progress_tracker.start_tracking( file=endpoint, @@ -610,7 +615,9 @@ class PublicAPIIngestor(RESTIngestor): for endpoint in endpoints: try: results.append( - self.ingest_public_api(endpoint, method=method, **copy.deepcopy(options)) + self.ingest_public_api( + endpoint, method=method, **copy.deepcopy(options) + ) ) except Exception as exc: self.logger.warning(f"Failed to fetch public API {endpoint}: {exc}") @@ -781,6 +788,16 @@ class PublicAPIIngestor(RESTIngestor): xml_text.encode("utf-8"), parser=_SAFE_XML_PARSER, ) + for elem in root.iter(): + if ( + elem.tag is lxml_etree.Comment + or elem.tag is lxml_etree.PI + or getattr(elem.tag, "__name__", "") + in ("Comment", "ProcessingInstruction", "PI") + ): + continue + if callable(elem.tag) or not isinstance(elem.tag, str): + raise ProcessingError("Failed to parse XML public API response") else: raise ProcessingError( "XML parsing requires 'defusedxml' or 'lxml'. " @@ -789,7 +806,17 @@ class PublicAPIIngestor(RESTIngestor): return self._element_to_dict(root) def _element_to_dict(self, element: Any) -> Dict[str, Any]: - children = [self._element_to_dict(child) for child in list(element)] + children = [ + self._element_to_dict(child) + for child in list(element) + if not ( + callable(child.tag) + or ( + lxml_etree is not None + and (child.tag is lxml_etree.Comment or child.tag is lxml_etree.PI) + ) + ) + ] return { "tag": self._strip_namespace(element.tag), "attributes": { @@ -800,7 +827,9 @@ class PublicAPIIngestor(RESTIngestor): "children": children, } - def _strip_namespace(self, value: str) -> str: + def _strip_namespace(self, value: Any) -> str: + if not isinstance(value, str): + return str(value) if value.startswith("{") and "}" in value: return value.split("}", 1)[1] return value diff --git a/semantica/ingest/repo_ingestor.py b/semantica/ingest/repo_ingestor.py index 5996a9d7..1f8a906f 100644 --- a/semantica/ingest/repo_ingestor.py +++ b/semantica/ingest/repo_ingestor.py @@ -28,6 +28,7 @@ Example Usage: Author: Semantica Contributors License: MIT """ + from __future__ import annotations import ipaddress @@ -47,7 +48,7 @@ from urllib.parse import urlparse try: import git -except (ImportError, ModuleNotFoundError): +except (ImportError, OSError): git = None from ..utils.exceptions import ProcessingError, ValidationError @@ -61,9 +62,7 @@ ALLOWED_CLONE_OPTIONS: Set[str] = {"depth", "branch", "single_branch", "no_tags" ALLOWED_REPO_URL_SCHEMES = frozenset({"https", "http", "git", "ssh"}) # SCP-like SSH remotes: user@host:path/to/repo.git (no scheme) _SCP_LIKE_REPO_URL_RE = re.compile(r"^[^@\s]+@[^:\s]+:.+$") -_ENV_VAR_TOKEN_RE = re.compile( - r"\$(\{[A-Za-z_][A-Za-z0-9_]*\}|[A-Za-z_][A-Za-z0-9_]*)" -) +_ENV_VAR_TOKEN_RE = re.compile(r"\$(\{[A-Za-z_][A-Za-z0-9_]*\}|[A-Za-z_][A-Za-z0-9_]*)") # Short-lived DNS cache for host validation. This reduces repeated lookups but # does not eliminate DNS-rebinding / TOCTOU races between validate and clone — # network egress controls remain recommended. @@ -599,10 +598,7 @@ class RepoIngestor: networks). Those addresses are not SSRF-sensitive. """ return bool( - ip.is_private - or ip.is_loopback - or ip.is_link_local - or ip.is_unspecified + ip.is_private or ip.is_loopback or ip.is_link_local or ip.is_unspecified ) @staticmethod @@ -629,9 +625,7 @@ class RepoIngestor: # or hanging lookup for one host cannot stall cache access for # concurrent lookups of other hosts. try: - addrinfos = socket.getaddrinfo( - host, None, type=socket.SOCK_STREAM - ) + addrinfos = socket.getaddrinfo(host, None, type=socket.SOCK_STREAM) except socket.gaierror as exc: raise ValidationError( f"Cannot resolve repository host {host!r}: {exc}" @@ -804,9 +798,7 @@ class RepoIngestor: f"Allowed schemes: {sorted(ALLOWED_REPO_URL_SCHEMES)}" ) if not parsed.netloc or not host: - raise ValidationError( - f"Repository URL must include a host: {repo_url}" - ) + raise ValidationError(f"Repository URL must include a host: {repo_url}") RepoIngestor._validate_repo_host(host) @@ -821,9 +813,7 @@ class RepoIngestor: "include_extensions", "max_depth", } - candidate = { - k: v for k, v in options.items() if k not in non_git_options - } + candidate = {k: v for k, v in options.items() if k not in non_git_options} unsafe = set(candidate) - ALLOWED_CLONE_OPTIONS if unsafe: raise ValidationError( @@ -902,9 +892,7 @@ class RepoIngestor: if "include_extensions" in options: # Normalize extensions to include dot prefix exts = options["include_extensions"] - normalized_exts = [ - e if e.startswith(".") else f".{e}" for e in exts - ] + normalized_exts = [e if e.startswith(".") else f".{e}" for e in exts] file_filters["extensions"] = normalized_exts # Process code files @@ -1120,6 +1108,7 @@ class RepoIngestor: def cleanup(self): """Cleanup temporary repository files.""" if self.temp_dir and os.path.exists(self.temp_dir): + def onexc(func, path, exc_info): """ Error handler for shutil.rmtree. @@ -1132,6 +1121,7 @@ class RepoIngestor: Usage : shutil.rmtree(path, onerror=onexc) """ import stat + if not os.access(path, os.W_OK): # Is the error an access error ? os.chmod(path, stat.S_IWUSR) diff --git a/semantica/ingest/xml_ingestor.py b/semantica/ingest/xml_ingestor.py index 9f3be0ed..84f4067a 100644 --- a/semantica/ingest/xml_ingestor.py +++ b/semantica/ingest/xml_ingestor.py @@ -26,7 +26,7 @@ from typing import Any, Dict, List, Optional, Tuple, Union try: from lxml import etree -except (ImportError, ModuleNotFoundError): +except (ImportError, OSError): etree = None from ..utils.constants import FILE_SIZE_LIMITS @@ -76,7 +76,7 @@ class XMLIngestor: """ self.logger = get_logger("xml_ingestor") if etree is None: - raise ProcessingError( + raise ImportError( "lxml is required for XMLIngestor. " "Install it with: pip install 'semantica[documents]'" ) diff --git a/semantica/parse/docx_parser.py b/semantica/parse/docx_parser.py index 390e8ba8..9a8f1d50 100644 --- a/semantica/parse/docx_parser.py +++ b/semantica/parse/docx_parser.py @@ -39,7 +39,7 @@ try: from docx.oxml.text.paragraph import CT_P from docx.table import Table from docx.text.paragraph import Paragraph -except (ImportError, ModuleNotFoundError): +except (ImportError, OSError): Document = None DocxDocument = None CT_Tbl = None @@ -92,7 +92,9 @@ class DOCXParser: self.config = config self.progress_tracker = get_progress_tracker() - def parse(self, file_path: Union[str, Path], pipeline_id: Optional[str] = None, **options) -> Dict[str, Any]: + def parse( + self, file_path: Union[str, Path], pipeline_id: Optional[str] = None, **options + ) -> Dict[str, Any]: """ Parse DOCX document. diff --git a/semantica/parse/excel_parser.py b/semantica/parse/excel_parser.py index c3ba3d91..c1b3bab5 100644 --- a/semantica/parse/excel_parser.py +++ b/semantica/parse/excel_parser.py @@ -33,9 +33,10 @@ from pathlib import Path from typing import Any, Dict, List, Optional, Union import pandas as pd + try: from openpyxl import load_workbook -except (ImportError, ModuleNotFoundError): +except (ImportError, OSError): load_workbook = None from ..utils.exceptions import ProcessingError, ValidationError diff --git a/semantica/parse/html_parser.py b/semantica/parse/html_parser.py index 8cf4007e..b642f381 100644 --- a/semantica/parse/html_parser.py +++ b/semantica/parse/html_parser.py @@ -35,7 +35,7 @@ from urllib.parse import urljoin try: from bs4 import BeautifulSoup -except (ImportError, ModuleNotFoundError): +except (ImportError, OSError): BeautifulSoup = None from ..utils.exceptions import ProcessingError, ValidationError diff --git a/semantica/parse/methods.py b/semantica/parse/methods.py index 8dd74824..9eb44ae7 100644 --- a/semantica/parse/methods.py +++ b/semantica/parse/methods.py @@ -123,7 +123,6 @@ Example Usage: from pathlib import Path from typing import Any, Callable, Dict, List, Optional, Union -from ..utils.exceptions import ConfigurationError, ProcessingError from ..utils.logging import get_logger from ..utils.custom_methods import CUSTOM_METHOD_FELL_BACK, call_custom_method from .code_parser import CodeParser @@ -181,7 +180,13 @@ def parse_document( if custom_method and custom_method != parse_document: fallback = kwargs.pop("fallback_on_custom_error", False) result = call_custom_method( - logger, method, custom_method, file_path, file_type, fallback_on_custom_error=fallback, **kwargs + logger, + method, + custom_method, + file_path, + file_type, + fallback_on_custom_error=fallback, + **kwargs, ) if result is not CUSTOM_METHOD_FELL_BACK: return result @@ -248,7 +253,8 @@ def parse_document_docling( # Register Docling method try: - from .docling_parser import DoclingParser + from . import docling_parser # noqa: F401 + method_registry.register("document", "docling", parse_document_docling) except (ImportError, OSError): # Docling not available, skip registration @@ -292,7 +298,14 @@ def parse_web_content( if custom_method and custom_method != parse_web_content: fallback = kwargs.pop("fallback_on_custom_error", False) result = call_custom_method( - logger, method, custom_method, content, content_type, base_url, fallback_on_custom_error=fallback, **kwargs + logger, + method, + custom_method, + content, + content_type, + base_url, + fallback_on_custom_error=fallback, + **kwargs, ) if result is not CUSTOM_METHOD_FELL_BACK: return result @@ -348,7 +361,13 @@ def parse_structured_data( if custom_method and custom_method != parse_structured_data: fallback = kwargs.pop("fallback_on_custom_error", False) result = call_custom_method( - logger, method, custom_method, data, data_format, fallback_on_custom_error=fallback, **kwargs + logger, + method, + custom_method, + data, + data_format, + fallback_on_custom_error=fallback, + **kwargs, ) if result is not CUSTOM_METHOD_FELL_BACK: return result @@ -395,7 +414,12 @@ def parse_email( if custom_method and custom_method != parse_email: fallback = kwargs.pop("fallback_on_custom_error", False) result = call_custom_method( - logger, method, custom_method, email_content, fallback_on_custom_error=fallback, **kwargs + logger, + method, + custom_method, + email_content, + fallback_on_custom_error=fallback, + **kwargs, ) if result is not CUSTOM_METHOD_FELL_BACK: return result @@ -445,7 +469,13 @@ def parse_code( if custom_method and custom_method != parse_code: fallback = kwargs.pop("fallback_on_custom_error", False) result = call_custom_method( - logger, method, custom_method, file_path, language, fallback_on_custom_error=fallback, **kwargs + logger, + method, + custom_method, + file_path, + language, + fallback_on_custom_error=fallback, + **kwargs, ) if result is not CUSTOM_METHOD_FELL_BACK: return result @@ -498,7 +528,13 @@ def parse_media( if custom_method and custom_method != parse_media: fallback = kwargs.pop("fallback_on_custom_error", False) result = call_custom_method( - logger, method, custom_method, file_path, media_type, fallback_on_custom_error=fallback, **kwargs + logger, + method, + custom_method, + file_path, + media_type, + fallback_on_custom_error=fallback, + **kwargs, ) if result is not CUSTOM_METHOD_FELL_BACK: return result @@ -544,7 +580,12 @@ def parse_pdf( if custom_method and custom_method not in (parse_pdf, parse_document): fallback = kwargs.pop("fallback_on_custom_error", False) result = call_custom_method( - logger, method, custom_method, file_path, fallback_on_custom_error=fallback, **kwargs + logger, + method, + custom_method, + file_path, + fallback_on_custom_error=fallback, + **kwargs, ) if result is not CUSTOM_METHOD_FELL_BACK: return result @@ -588,7 +629,12 @@ def parse_docx( if custom_method and custom_method not in (parse_docx, parse_document): fallback = kwargs.pop("fallback_on_custom_error", False) result = call_custom_method( - logger, method, custom_method, file_path, fallback_on_custom_error=fallback, **kwargs + logger, + method, + custom_method, + file_path, + fallback_on_custom_error=fallback, + **kwargs, ) if result is not CUSTOM_METHOD_FELL_BACK: return result @@ -631,7 +677,12 @@ def parse_json(file_path: Union[str, Path], method: str = "default", **kwargs) - if custom_method and custom_method not in (parse_json, parse_structured_data): fallback = kwargs.pop("fallback_on_custom_error", False) result = call_custom_method( - logger, method, custom_method, file_path, fallback_on_custom_error=fallback, **kwargs + logger, + method, + custom_method, + file_path, + fallback_on_custom_error=fallback, + **kwargs, ) if result is not CUSTOM_METHOD_FELL_BACK: return result @@ -678,7 +729,13 @@ def parse_csv( if custom_method and custom_method not in (parse_csv, parse_structured_data): fallback = kwargs.pop("fallback_on_custom_error", False) result = call_custom_method( - logger, method, custom_method, file_path, delimiter, fallback_on_custom_error=fallback, **kwargs + logger, + method, + custom_method, + file_path, + delimiter, + fallback_on_custom_error=fallback, + **kwargs, ) if result is not CUSTOM_METHOD_FELL_BACK: return result @@ -717,7 +774,12 @@ def parse_xml(file_path: Union[str, Path], method: str = "default", **kwargs) -> if custom_method and custom_method not in (parse_xml, parse_structured_data): fallback = kwargs.pop("fallback_on_custom_error", False) result = call_custom_method( - logger, method, custom_method, file_path, fallback_on_custom_error=fallback, **kwargs + logger, + method, + custom_method, + file_path, + fallback_on_custom_error=fallback, + **kwargs, ) if result is not CUSTOM_METHOD_FELL_BACK: return result @@ -765,7 +827,12 @@ def parse_image( if custom_method and custom_method not in (parse_image, parse_media): fallback = kwargs.pop("fallback_on_custom_error", False) result = call_custom_method( - logger, method, custom_method, file_path, fallback_on_custom_error=fallback, **kwargs + logger, + method, + custom_method, + file_path, + fallback_on_custom_error=fallback, + **kwargs, ) if result is not CUSTOM_METHOD_FELL_BACK: return result diff --git a/semantica/parse/web_parser.py b/semantica/parse/web_parser.py index 0ea4f8e7..2a4cc3be 100644 --- a/semantica/parse/web_parser.py +++ b/semantica/parse/web_parser.py @@ -35,7 +35,7 @@ from urllib.parse import urljoin, urlparse try: from bs4 import BeautifulSoup -except (ImportError, ModuleNotFoundError): +except (ImportError, OSError): BeautifulSoup = None from ..utils.exceptions import ProcessingError, ValidationError diff --git a/semantica/parse/xml_parser.py b/semantica/parse/xml_parser.py index 5088577c..d12f430b 100644 --- a/semantica/parse/xml_parser.py +++ b/semantica/parse/xml_parser.py @@ -36,7 +36,7 @@ from typing import Any, Dict, List, Optional, Union try: from lxml import etree -except (ImportError, ModuleNotFoundError): +except (ImportError, OSError): etree = None from ..utils.exceptions import ProcessingError, ValidationError @@ -156,7 +156,7 @@ class XMLParser: self, xml_string: str, source: str, options: Dict[str, Any] ) -> XMLData: """Parse XML using lxml.""" - parser = etree.XMLParser(remove_blank_text=True) + parser = etree.XMLParser(remove_blank_text=True, remove_comments=True) root = etree.fromstring(xml_string.encode("utf-8"), parser) # Extract namespaces @@ -197,8 +197,10 @@ class XMLParser: metadata={"source": source, "engine": "etree"}, ) - def _element_to_xml_element(self, element) -> XMLElement: + def _element_to_xml_element(self, element) -> Optional[XMLElement]: """Convert lxml element to XMLElement.""" + if not hasattr(element, "tag") or not isinstance(element.tag, str): + return None tag = element.tag if "}" in tag: namespace, tag = tag.split("}", 1) @@ -215,12 +217,18 @@ class XMLParser: # Process children for child in element: - xml_elem.children.append(self._element_to_xml_element(child)) + child_elem = self._element_to_xml_element(child) + if child_elem is not None: + xml_elem.children.append(child_elem) return xml_elem - def _etree_element_to_xml_element(self, element: ET.Element) -> XMLElement: + def _etree_element_to_xml_element( + self, element: ET.Element + ) -> Optional[XMLElement]: """Convert ElementTree element to XMLElement.""" + if not hasattr(element, "tag") or not isinstance(element.tag, str): + return None tag = element.tag if "}" in tag: namespace, tag = tag.split("}", 1) @@ -237,7 +245,9 @@ class XMLParser: # Process children for child in element: - xml_elem.children.append(self._etree_element_to_xml_element(child)) + child_elem = self._etree_element_to_xml_element(child) + if child_elem is not None: + xml_elem.children.append(child_elem) return xml_elem @@ -267,15 +277,21 @@ class XMLParser: xml_string = ( file_path if isinstance(file_path, str) and not Path(file_path).exists() - else Path(file_path).read_text() + else Path(file_path).read_text(encoding="utf-8") ) - root = etree.fromstring(xml_string.encode("utf-8")) + parser = etree.XMLParser(remove_blank_text=True, remove_comments=True) + root = etree.fromstring(xml_string.encode("utf-8"), parser=parser) # Register namespaces for XPath namespaces = xml_data.namespaces elements = root.xpath(xpath, namespaces=namespaces) - return [self._element_to_xml_element(elem) for elem in elements] + results = [] + for elem in elements: + xml_elem = self._element_to_xml_element(elem) + if xml_elem is not None: + results.append(xml_elem) + return results def extract_by_tag( self, file_path: Union[str, Path], tag_name: str, **options diff --git a/semantica/semantic_extract/providers.py b/semantica/semantic_extract/providers.py index 5e76e8f6..64d9ebcf 100644 --- a/semantica/semantic_extract/providers.py +++ b/semantica/semantic_extract/providers.py @@ -61,7 +61,7 @@ Example Usage: >>> from semantica.semantic_extract.providers import create_provider >>> provider = create_provider("openai", model="gpt-4") >>> response = provider.generate("Extract entities from: Apple Inc. was founded in 1976.") - >>> + >>> >>> loader = HuggingFaceModelLoader(device="cuda") >>> ner_model = loader.load_ner_model("dslim/bert-base-NER") @@ -70,7 +70,6 @@ License: MIT """ import json -import os import time from typing import Any, Dict, List, Optional, Union, Type @@ -121,7 +120,7 @@ class BaseProvider: """Extract and parse JSON from text, supporting objects and lists.""" if not text: raise ProcessingError("Empty response from LLM") - + # Clean up text - remove markdown code blocks if present cleaned_text = text.strip() if "```json" in cleaned_text: @@ -131,8 +130,9 @@ class BaseProvider: blocks = cleaned_text.split("```") for block in blocks: block = block.strip() - if (block.startswith("{") and block.endswith("}")) or \ - (block.startswith("[") and block.endswith("]")): + if (block.startswith("{") and block.endswith("}")) or ( + block.startswith("[") and block.endswith("]") + ): cleaned_text = block break @@ -150,22 +150,22 @@ class BaseProvider: # Try to find JSON boundaries (outermost { } or [ ]) start_obj = cleaned_text.find("{") start_list = cleaned_text.find("[") - + # Determine which one starts first start = -1 if start_obj >= 0 and (start_list < 0 or start_obj < start_list): start = start_obj elif start_list >= 0: start = start_list - + if start >= 0: # Find the corresponding end end_obj = cleaned_text.rfind("}") end_list = cleaned_text.rfind("]") end = max(end_obj, end_list) - + if end > start: - candidate = cleaned_text[start:end+1] + candidate = cleaned_text[start : end + 1] try: return json.loads(candidate) except json.JSONDecodeError: @@ -176,78 +176,88 @@ class BaseProvider: # Last resort: if it's truncated, try to close it if candidate.endswith("..."): candidate = candidate[:-3].strip() - + # Simple attempt to close unclosed structures open_braces = candidate.count("{") - candidate.count("}") open_brackets = candidate.count("[") - candidate.count("]") - + fixed_candidate = candidate if open_braces > 0: fixed_candidate += "}" * open_braces if open_brackets > 0: fixed_candidate += "]" * open_brackets - + try: return json.loads(fix_json(fixed_candidate)) except json.JSONDecodeError as e: - raise ProcessingError(f"Failed to parse JSON from LLM response after cleaning: {e}") - - raise ProcessingError(f"No valid JSON structure found in response. Preview: {text[:100]}...") + raise ProcessingError( + f"Failed to parse JSON from LLM response after cleaning: {e}" + ) - def generate_structured(self, prompt: str, max_retries: int = 3, **kwargs) -> Union[dict, list]: + raise ProcessingError( + f"No valid JSON structure found in response. Preview: {text[:100]}..." + ) + + def generate_structured( + self, prompt: str, max_retries: int = 3, **kwargs + ) -> Union[dict, list]: """Generate structured output with retry logic.""" last_error = None import time - + for attempt in range(max_retries): try: # Add explicit JSON instruction if not present structured_prompt = prompt if "JSON" not in prompt: - structured_prompt = f"{prompt}\n\nReturn the response as valid JSON only." - + structured_prompt = ( + f"{prompt}\n\nReturn the response as valid JSON only." + ) + content = self.generate(structured_prompt, **kwargs) result = self._parse_json(content) - + # Basic validation: ensure it's not empty if we expect data if not result and attempt < max_retries - 1: - self.logger.warning(f"Empty structured response (attempt {attempt + 1}/{max_retries}). Retrying...") + self.logger.warning( + f"Empty structured response (attempt {attempt + 1}/{max_retries}). Retrying..." + ) continue - + return result - + except (ProcessingError, Exception) as e: last_error = e if attempt < max_retries - 1: - wait_time = (attempt + 1) * 2 # Simple backoff - self.logger.warning(f"Extraction error (attempt {attempt + 1}/{max_retries}): {e}. Retrying in {wait_time}s...") + wait_time = (attempt + 1) * 2 # Simple backoff + self.logger.warning( + f"Extraction error (attempt {attempt + 1}/{max_retries}): {e}. Retrying in {wait_time}s..." + ) time.sleep(wait_time) else: - self.logger.error(f"Structured generation failed after {max_retries} attempts: {e}") - + self.logger.error( + f"Structured generation failed after {max_retries} attempts: {e}" + ) + if last_error: raise ProcessingError(f"Failed to generate structured output: {last_error}") return [] def generate_typed( - self, - prompt: str, - schema: Type[BaseModel], - max_retries: int = 3, - **kwargs + self, prompt: str, schema: Type[BaseModel], max_retries: int = 3, **kwargs ) -> BaseModel: """ Generate structured output validated against a Pydantic schema. Uses instructor if available and supported for the provider, otherwise falls back to a repair loop. """ provider_name = self.__class__.__name__ - + # Try using instructor first if available if instructor: try: client = None mode = instructor.Mode.TOOLS # Default mode - + if provider_name == "OpenAIProvider" and self.client: custom_base_url = getattr(self, "base_url", None) if custom_base_url: @@ -255,7 +265,9 @@ class BaseProvider: # supported by third-party servers (Qwen, LLaMA gateways, etc.). # Mode.JSON asks the model to return plain JSON and is broadly # supported across all OpenAI-compatible APIs. - client = instructor.from_openai(self.client, mode=instructor.Mode.JSON) + client = instructor.from_openai( + self.client, mode=instructor.Mode.JSON + ) elif hasattr(instructor, "from_provider"): try: client = instructor.from_provider( @@ -270,8 +282,8 @@ class BaseProvider: if hasattr(instructor, "from_provider"): try: client = instructor.from_provider( - provider=f"anthropic/{kwargs.get('model', self.model)}", - api_key=self.api_key + provider=f"anthropic/{kwargs.get('model', self.model)}", + api_key=self.api_key, ) except Exception: client = instructor.from_anthropic(self.client) @@ -281,26 +293,24 @@ class BaseProvider: if hasattr(instructor, "from_provider"): try: client = instructor.from_provider( - provider=f"gemini/{kwargs.get('model', self.model)}", - api_key=self.api_key + provider=f"gemini/{kwargs.get('model', self.model)}", + api_key=self.api_key, ) except Exception: client = instructor.from_gemini( - self.client, - mode=instructor.Mode.GEMINI_JSON + self.client, mode=instructor.Mode.GEMINI_JSON ) else: client = instructor.from_gemini( - self.client, - mode=instructor.Mode.GEMINI_JSON + self.client, mode=instructor.Mode.GEMINI_JSON ) elif provider_name == "GroqProvider" and self.client: # Try using from_provider which is recommended for Groq in latest instructor if hasattr(instructor, "from_provider"): try: client = instructor.from_provider( - provider=f"groq/{kwargs.get('model', self.model)}", - api_key=self.api_key + provider=f"groq/{kwargs.get('model', self.model)}", + api_key=self.api_key, ) except Exception: client = None @@ -308,21 +318,28 @@ class BaseProvider: if not client: # Try using from_groq if available (newer instructor versions) if hasattr(instructor, "from_groq"): - client = instructor.from_groq(self.client, mode=instructor.Mode.JSON) + client = instructor.from_groq( + self.client, mode=instructor.Mode.JSON + ) else: # Fallback: Create OpenAI client pointing to Groq # This avoids the "Client should be an instance of openai.OpenAI" warning try: from openai import OpenAI + # Fix: Use self.api_key instead of self.client.api_key groq_client = OpenAI( base_url="https://api.groq.com/openai/v1", api_key=self.api_key, ) - client = instructor.from_openai(groq_client, mode=instructor.Mode.JSON) + client = instructor.from_openai( + groq_client, mode=instructor.Mode.JSON + ) except Exception: # Last resort: try passing the groq client directly - client = instructor.from_openai(self.client, mode=instructor.Mode.JSON) + client = instructor.from_openai( + self.client, mode=instructor.Mode.JSON + ) elif provider_name == "OllamaProvider": # Try from_provider for Ollama if available if hasattr(instructor, "from_provider"): @@ -332,21 +349,26 @@ class BaseProvider: ) except Exception: client = None - + if not client: # Create OpenAI-compatible client for Ollama try: from openai import OpenAI + # Ollama typically runs on localhost:11434/v1 - base_url = getattr(self, "base_url", "http://localhost:11434") + base_url = getattr( + self, "base_url", "http://localhost:11434" + ) if not base_url.endswith("/v1"): base_url = f"{base_url.rstrip('/')}/v1" - + ollama_client = OpenAI( base_url=base_url, - api_key="ollama", # required but unused + api_key="ollama", # required but unused + ) + client = instructor.from_openai( + ollama_client, mode=instructor.Mode.JSON ) - client = instructor.from_openai(ollama_client, mode=instructor.Mode.JSON) except ImportError: pass elif provider_name == "DeepSeekProvider" and self.client: @@ -355,7 +377,7 @@ class BaseProvider: try: client = instructor.from_provider( provider=f"deepseek/{kwargs.get('model', self.model)}", - api_key=self.api_key + api_key=self.api_key, ) except Exception: client = None @@ -364,15 +386,20 @@ class BaseProvider: # DeepSeek is OpenAI compatible try: from openai import OpenAI + if isinstance(self.client, OpenAI): - client = instructor.from_openai(self.client, mode=instructor.Mode.JSON) + client = instructor.from_openai( + self.client, mode=instructor.Mode.JSON + ) else: - # Try creating fresh client - ds_client = OpenAI( - api_key=self.api_key, - base_url="https://api.deepseek.com" - ) - client = instructor.from_openai(ds_client, mode=instructor.Mode.JSON) + # Try creating fresh client + ds_client = OpenAI( + api_key=self.api_key, + base_url="https://api.deepseek.com", + ) + client = instructor.from_openai( + ds_client, mode=instructor.Mode.JSON + ) except Exception: pass @@ -383,7 +410,9 @@ class BaseProvider: # Format for litellm in instructor is litellm/model_name provider_model = kwargs.get("model", self.model) litellm_provider = f"litellm/{provider_model}" - client = instructor.from_provider(litellm_provider, api_key=self.api_key) + client = instructor.from_provider( + litellm_provider, api_key=self.api_key + ) except Exception: pass @@ -395,10 +424,26 @@ class BaseProvider: "messages": [{"role": "user", "content": prompt}], "response_model": schema, "max_retries": max_retries, - "temperature": kwargs.get("temperature") if kwargs.get("temperature") is not None else 0.1, + "temperature": ( + kwargs.get("temperature") + if kwargs.get("temperature") is not None + else 0.1 + ), } - self._add_if_set(create_kwargs, kwargs, "max_tokens", "max_completion_tokens", - "top_p", "frequency_penalty", "presence_penalty", "seed", "stop", "logit_bias", "user", "top_k") + self._add_if_set( + create_kwargs, + kwargs, + "max_tokens", + "max_completion_tokens", + "top_p", + "frequency_penalty", + "presence_penalty", + "seed", + "stop", + "logit_bias", + "user", + "top_k", + ) if provider_name == "GroqProvider": create_kwargs["response_format"] = {"type": "json_object"} @@ -423,20 +468,27 @@ class BaseProvider: primary_err, exc_info=True, ) - json_client = instructor.from_openai(self.client, mode=instructor.Mode.JSON) + json_client = instructor.from_openai( + self.client, mode=instructor.Mode.JSON + ) # Build a clean kwargs dict for the Mode.JSON retry: drop # response_format (Mode.JSON handles schema differently) # but keep response_model/max_retries so instructor still # validates the typed output. retry_kwargs = { - k: v for k, v in create_kwargs.items() + k: v + for k, v in create_kwargs.items() if k != "response_format" } - response = json_client.chat.completions.create(**retry_kwargs) + response = json_client.chat.completions.create( + **retry_kwargs + ) else: raise - verbose_mode = kwargs.get("verbose", False) or self.config.get("verbose", False) + verbose_mode = kwargs.get("verbose", False) or self.config.get( + "verbose", False + ) if verbose_mode: self.logger.debug( "[BaseProvider.generate_typed] Typed response received via instructor (%s).", @@ -453,14 +505,16 @@ class BaseProvider: # Fallback: Manual repair loop last_error = None current_prompt = prompt - + for attempt in range(max_retries): try: # 1. Generate JSON – try structured mode first, then fall back to # plain generate() + parse. Custom gateways that reject # response_format=json_object would otherwise loop forever here. try: - json_result = self.generate_structured(current_prompt, max_retries=1, **kwargs) + json_result = self.generate_structured( + current_prompt, max_retries=1, **kwargs + ) except Exception as struct_err: self.logger.warning( "generate_structured failed (%s); retrying with plain generate() + JSON parse.", @@ -469,96 +523,133 @@ class BaseProvider: ) raw_content = self.generate(current_prompt, **kwargs) json_result = self._parse_json(raw_content) - + # 2. Validate with Schema # If the result is a list and schema expects a wrapper, or vice versa, we might need adjustment # But we assume the prompt asks for the correct structure matching the schema. - + # Special handling if schema is a wrapper but result is a list - if isinstance(json_result, list) and hasattr(schema, "entities") and "entities" in schema.model_fields: - # Auto-wrap for entities - json_result = {"entities": json_result} + if ( + isinstance(json_result, list) + and hasattr(schema, "entities") + and "entities" in schema.model_fields + ): + # Auto-wrap for entities + json_result = {"entities": json_result} # Handle categorized dictionary input (e.g. {"PERSON": ["Name"], "ORG": ["Corp"]}) - elif isinstance(json_result, dict) and hasattr(schema, "entities") and "entities" in schema.model_fields: - # Check if it's NOT already in the correct format (i.e., missing "entities" key) - if "entities" not in json_result: - # Check if values are lists, suggesting categorized output - is_categorized = any(isinstance(v, list) for v in json_result.values()) - if is_categorized: - flat_entities = [] - for label, items in json_result.items(): - if isinstance(items, list): - for item in items: - if isinstance(item, str): - flat_entities.append({"text": item, "label": label}) - elif isinstance(item, dict): - # If it's already a dict but nested under label - item["label"] = label - flat_entities.append(item) - json_result = {"entities": flat_entities} + elif ( + isinstance(json_result, dict) + and hasattr(schema, "entities") + and "entities" in schema.model_fields + ): + # Check if it's NOT already in the correct format (i.e., missing "entities" key) + if "entities" not in json_result: + # Check if values are lists, suggesting categorized output + is_categorized = any( + isinstance(v, list) for v in json_result.values() + ) + if is_categorized: + flat_entities = [] + for label, items in json_result.items(): + if isinstance(items, list): + for item in items: + if isinstance(item, str): + flat_entities.append( + {"text": item, "label": label} + ) + elif isinstance(item, dict): + # If it's already a dict but nested under label + item["label"] = label + flat_entities.append(item) + json_result = {"entities": flat_entities} # Handle categorized dictionary input for relations (e.g. {"founded_by": [{"subject":..., "object":...}]}) - elif isinstance(json_result, dict) and hasattr(schema, "relations") and "relations" in schema.model_fields: - if "relations" not in json_result: - is_categorized = any(isinstance(v, list) for v in json_result.values()) - if is_categorized: - flat_relations = [] - for label, items in json_result.items(): - if isinstance(items, list): - for item in items: - if isinstance(item, dict): - # If predicate is missing, use the key as predicate - if "predicate" not in item: - item["predicate"] = label - flat_relations.append(item) - json_result = {"relations": flat_relations} + elif ( + isinstance(json_result, dict) + and hasattr(schema, "relations") + and "relations" in schema.model_fields + ): + if "relations" not in json_result: + is_categorized = any( + isinstance(v, list) for v in json_result.values() + ) + if is_categorized: + flat_relations = [] + for label, items in json_result.items(): + if isinstance(items, list): + for item in items: + if isinstance(item, dict): + # If predicate is missing, use the key as predicate + if "predicate" not in item: + item["predicate"] = label + flat_relations.append(item) + json_result = {"relations": flat_relations} # Handle categorized dictionary input for triplets - elif isinstance(json_result, dict) and hasattr(schema, "triplets") and "triplets" in schema.model_fields: - if "triplets" not in json_result: - is_categorized = any(isinstance(v, list) for v in json_result.values()) - if is_categorized: - flat_triplets = [] - for label, items in json_result.items(): - if isinstance(items, list): - for item in items: - if isinstance(item, dict): - flat_triplets.append(item) - json_result = {"triplets": flat_triplets} + elif ( + isinstance(json_result, dict) + and hasattr(schema, "triplets") + and "triplets" in schema.model_fields + ): + if "triplets" not in json_result: + is_categorized = any( + isinstance(v, list) for v in json_result.values() + ) + if is_categorized: + flat_triplets = [] + for label, items in json_result.items(): + if isinstance(items, list): + for item in items: + if isinstance(item, dict): + flat_triplets.append(item) + json_result = {"triplets": flat_triplets} - elif isinstance(json_result, list) and hasattr(schema, "relations") and "relations" in schema.model_fields: - json_result = {"relations": json_result} - elif isinstance(json_result, list) and hasattr(schema, "triplets") and "triplets" in schema.model_fields: - json_result = {"triplets": json_result} + elif ( + isinstance(json_result, list) + and hasattr(schema, "relations") + and "relations" in schema.model_fields + ): + json_result = {"relations": json_result} + elif ( + isinstance(json_result, list) + and hasattr(schema, "triplets") + and "triplets" in schema.model_fields + ): + json_result = {"triplets": json_result} validated = schema.model_validate(json_result) return validated - + except ValidationError as e: last_error = e error_summary = str(e) # Simplify error summary for the LLM # (You could parse e.errors() for a better message) - + if attempt < max_retries - 1: wait_time = (attempt + 1) * 1 - self.logger.warning(f"Schema validation failed (attempt {attempt + 1}): {e}. Retrying with error feedback...") - + self.logger.warning( + f"Schema validation failed (attempt {attempt + 1}): {e}. Retrying with error feedback..." + ) + # Update prompt with error info current_prompt = f"{prompt}\n\nPrevious response was invalid JSON or didn't match schema:\n{error_summary}\n\nPlease fix the errors and return valid JSON matching the schema." time.sleep(wait_time) else: self.logger.error(f"Typed generation failed validation: {e}") - + except Exception as e: last_error = e if attempt < max_retries - 1: - time.sleep(1) + time.sleep(1) else: self.logger.error(f"Typed generation failed: {e}") - raise ProcessingError(f"Failed to generate typed output after {max_retries} attempts: {last_error}") + raise ProcessingError( + f"Failed to generate typed output after {max_retries} attempts: {last_error}" + ) + class OpenAIProvider(BaseProvider): """OpenAI provider implementation.""" @@ -594,6 +685,7 @@ class OpenAIProvider(BaseProvider): # Reject non-HTTP schemes (file://, ftp://, etc.) to prevent SSRF # when base_url originates from configuration rather than hardcoded values. from urllib.parse import urlparse + scheme = urlparse(self.base_url).scheme if scheme not in ("http", "https"): raise ValueError( @@ -630,8 +722,20 @@ class OpenAIProvider(BaseProvider): "model": kwargs.get("model", self.model), "messages": [{"role": "user", "content": prompt}], } - self._add_if_set(create_kwargs, kwargs, "temperature", "max_completion_tokens", "max_tokens", - "top_p", "frequency_penalty", "presence_penalty", "seed", "stop", "logit_bias", "user") + self._add_if_set( + create_kwargs, + kwargs, + "temperature", + "max_completion_tokens", + "max_tokens", + "top_p", + "frequency_penalty", + "presence_penalty", + "seed", + "stop", + "logit_bias", + "user", + ) response = self.client.chat.completions.create(**create_kwargs) return response.choices[0].message.content @@ -651,8 +755,20 @@ class OpenAIProvider(BaseProvider): if not self.base_url: create_kwargs["response_format"] = {"type": "json_object"} - self._add_if_set(create_kwargs, kwargs, "temperature", "max_completion_tokens", "max_tokens", - "top_p", "frequency_penalty", "presence_penalty", "seed", "stop", "logit_bias", "user") + self._add_if_set( + create_kwargs, + kwargs, + "temperature", + "max_completion_tokens", + "max_tokens", + "top_p", + "frequency_penalty", + "presence_penalty", + "seed", + "stop", + "logit_bias", + "user", + ) response = self.client.chat.completions.create(**create_kwargs) try: @@ -679,6 +795,7 @@ class GeminiProvider(BaseProvider): def _init_client(self): try: from google import genai as new_genai + if self.api_key: self.client = new_genai.Client(api_key=self.api_key) self._use_new_genai = True @@ -687,13 +804,16 @@ class GeminiProvider(BaseProvider): pass try: import google.generativeai as old_genai + if self.api_key: old_genai.configure(api_key=self.api_key) self.client = old_genai.GenerativeModel(self.model) self._use_new_genai = False except Exception: self.client = None - self.logger.warning("Gemini SDK not installed. Install with: pip install semantica[llm-gemini]") + self.logger.warning( + "Gemini SDK not installed. Install with: pip install semantica[llm-gemini]" + ) def _legacy_client_for(self, requested_model: str): """Return a legacy-SDK GenerativeModel bound to this instance's own @@ -711,6 +831,7 @@ class GeminiProvider(BaseProvider): """ try: import google.generativeai as old_genai + old_genai.configure(api_key=self.api_key) except Exception: # _init_client() already required this import to reach the @@ -747,18 +868,30 @@ class GeminiProvider(BaseProvider): ) config = {} - self._add_if_set(config, kwargs, "temperature", "top_p", "top_k", "stop_sequences", "candidate_count") + self._add_if_set( + config, + kwargs, + "temperature", + "top_p", + "top_k", + "stop_sequences", + "candidate_count", + ) if "max_tokens" in kwargs: config["max_output_tokens"] = kwargs["max_tokens"] if self._use_new_genai: resp = self.client.models.generate_content( - model=kwargs.get("model", self.model), contents=prompt, config=config or None + model=kwargs.get("model", self.model), + contents=prompt, + config=config or None, ) return self._resp_text(resp) else: legacy_client = self._legacy_client_for(kwargs.get("model", self.model)) - response = legacy_client.generate_content(prompt, generation_config=config or None) + response = legacy_client.generate_content( + prompt, generation_config=config or None + ) return self._resp_text(response) def generate_structured(self, prompt: str, **kwargs) -> dict: @@ -769,7 +902,15 @@ class GeminiProvider(BaseProvider): json_prompt = f"{prompt}\n\nReturn the response as valid JSON only." config = {} - self._add_if_set(config, kwargs, "temperature", "top_p", "top_k", "stop_sequences", "candidate_count") + self._add_if_set( + config, + kwargs, + "temperature", + "top_p", + "top_k", + "stop_sequences", + "candidate_count", + ) if "max_tokens" in kwargs: config["max_output_tokens"] = kwargs["max_tokens"] @@ -784,7 +925,9 @@ class GeminiProvider(BaseProvider): raise ProcessingError(f"Failed to parse JSON from Gemini response: {e}") else: legacy_client = self._legacy_client_for(kwargs.get("model", self.model)) - response = legacy_client.generate_content(json_prompt, generation_config=config or None) + response = legacy_client.generate_content( + json_prompt, generation_config=config or None + ) try: return self._parse_json(self._resp_text(response)) except Exception as e: @@ -795,7 +938,10 @@ class GroqProvider(BaseProvider): """Groq provider implementation.""" def __init__( - self, api_key: Optional[str] = None, model: str = "llama-3.3-70b-versatile", **kwargs + self, + api_key: Optional[str] = None, + model: str = "llama-3.3-70b-versatile", + **kwargs, ): """Initialize Groq provider.""" super().__init__(**kwargs) @@ -815,11 +961,11 @@ class GroqProvider(BaseProvider): return self.client = Groq(api_key=self.api_key) - + # Test connection with a minimal prompt # Only do this if we have a key and client # self._test_connection() - except ImportError: + except (ImportError, OSError): self.client = None self.logger.warning( "groq library not installed. Install with: pip install semantica[llm-groq]" @@ -837,7 +983,7 @@ class GroqProvider(BaseProvider): self.client.chat.completions.create( model=self.model, messages=[{"role": "user", "content": "ping"}], - max_tokens=1 + max_tokens=1, ) self.logger.debug("Groq connection test successful") except Exception as e: @@ -858,8 +1004,19 @@ class GroqProvider(BaseProvider): "model": kwargs.get("model", self.model), "messages": [{"role": "user", "content": prompt}], } - self._add_if_set(create_kwargs, kwargs, "temperature", "max_completion_tokens", "max_tokens", - "top_p", "frequency_penalty", "presence_penalty", "seed", "stop", "user") + self._add_if_set( + create_kwargs, + kwargs, + "temperature", + "max_completion_tokens", + "max_tokens", + "top_p", + "frequency_penalty", + "presence_penalty", + "seed", + "stop", + "user", + ) response = self.client.chat.completions.create(**create_kwargs) return response.choices[0].message.content @@ -870,15 +1027,30 @@ class GroqProvider(BaseProvider): raise ProcessingError("Groq client not initialized.") # Groq requires 'json' in the prompt for json_object mode - json_prompt = prompt if "json" in prompt.lower() else f"{prompt}\n\nReturn the response as valid JSON only." + json_prompt = ( + prompt + if "json" in prompt.lower() + else f"{prompt}\n\nReturn the response as valid JSON only." + ) create_kwargs = { "model": kwargs.get("model", self.model), "messages": [{"role": "user", "content": json_prompt}], "response_format": {"type": "json_object"}, } - self._add_if_set(create_kwargs, kwargs, "temperature", "max_completion_tokens", "max_tokens", - "top_p", "frequency_penalty", "presence_penalty", "seed", "stop", "user") + self._add_if_set( + create_kwargs, + kwargs, + "temperature", + "max_completion_tokens", + "max_tokens", + "top_p", + "frequency_penalty", + "presence_penalty", + "seed", + "stop", + "user", + ) response = self.client.chat.completions.create(**create_kwargs) try: @@ -927,19 +1099,26 @@ class AnthropicProvider(BaseProvider): "Anthropic client not initialized. Set ANTHROPIC_API_KEY or pass api_key." ) - # Anthropic requires max_tokens. + # Anthropic requires max_tokens. # We rely on kwargs, but fallback to 8192 (safe max for newer models) if not provided. max_tokens = kwargs.get("max_tokens", 8192) - + # Prepare arguments create_kwargs = { "model": kwargs.get("model", self.model), "max_tokens": max_tokens, "messages": [{"role": "user", "content": prompt}], } - + # Pass through other common parameters - for param in ["temperature", "top_p", "top_k", "stop_sequences", "system", "metadata"]: + for param in [ + "temperature", + "top_p", + "top_k", + "stop_sequences", + "system", + "metadata", + ]: if param in kwargs: create_kwargs[param] = kwargs[param] @@ -952,22 +1131,29 @@ class AnthropicProvider(BaseProvider): raise ProcessingError("Anthropic client not initialized.") json_prompt = f"{prompt}\n\nReturn the response as valid JSON only." - - # Anthropic requires max_tokens. + + # Anthropic requires max_tokens. max_tokens = kwargs.get("max_tokens", 8192) - + # Prepare arguments create_kwargs = { "model": kwargs.get("model", self.model), "max_tokens": max_tokens, "messages": [{"role": "user", "content": json_prompt}], } - + # Pass through other common parameters - for param in ["temperature", "top_p", "top_k", "stop_sequences", "system", "metadata"]: + for param in [ + "temperature", + "top_p", + "top_k", + "stop_sequences", + "system", + "metadata", + ]: if param in kwargs: create_kwargs[param] = kwargs[param] - + response = self.client.messages.create(**create_kwargs) try: return self._parse_json(response.content[0].text) @@ -1017,7 +1203,9 @@ class OllamaProvider(BaseProvider): def _build_options(self, kwargs: dict) -> Optional[dict]: """Build Ollama options dict from kwargs.""" options = {} - self._add_if_set(options, kwargs, "temperature", "top_p", "top_k", "repeat_penalty", "seed") + self._add_if_set( + options, kwargs, "temperature", "top_p", "top_k", "repeat_penalty", "seed" + ) if "max_tokens" in kwargs: options["num_predict"] = kwargs["max_tokens"] if "num_ctx" in kwargs: @@ -1058,7 +1246,9 @@ class OllamaProvider(BaseProvider): class DeepSeekProvider(BaseProvider): - def __init__(self, api_key: Optional[str] = None, model: str = "deepseek-chat", **kwargs): + def __init__( + self, api_key: Optional[str] = None, model: str = "deepseek-chat", **kwargs + ): super().__init__(**kwargs) self.api_key = api_key or config.get_api_key("deepseek") self.base_url = "https://api.deepseek.com/v1" @@ -1075,7 +1265,8 @@ class DeepSeekProvider(BaseProvider): except (ImportError, OSError): self.client = None self.logger.warning( - "openai library not installed. Install with: pip install semantica[llm-openai]" + "openai library not installed. " + "Install with: pip install semantica[llm-openai]" ) def is_available(self) -> bool: @@ -1083,13 +1274,26 @@ class DeepSeekProvider(BaseProvider): def generate(self, prompt: str, **kwargs) -> str: if not self.client: - raise ProcessingError("DeepSeek client not initialized. Set DEEPSEEK_API_KEY or pass api_key.") + raise ProcessingError( + "DeepSeek client not initialized. Set DEEPSEEK_API_KEY or pass api_key." + ) create_kwargs = { "model": kwargs.get("model", self.model), "messages": [{"role": "user", "content": prompt}], } - self._add_if_set(create_kwargs, kwargs, "temperature", "max_tokens", "top_p", "frequency_penalty", "presence_penalty", "seed", "stop", "user") + self._add_if_set( + create_kwargs, + kwargs, + "temperature", + "max_tokens", + "top_p", + "frequency_penalty", + "presence_penalty", + "seed", + "stop", + "user", + ) response = self.client.chat.completions.create(**create_kwargs) return response.choices[0].message.content @@ -1104,7 +1308,18 @@ class DeepSeekProvider(BaseProvider): "messages": [{"role": "user", "content": prompt}], "response_format": {"type": "json_object"}, } - self._add_if_set(create_kwargs, kwargs, "temperature", "max_tokens", "top_p", "frequency_penalty", "presence_penalty", "seed", "stop", "user") + self._add_if_set( + create_kwargs, + kwargs, + "temperature", + "max_tokens", + "top_p", + "frequency_penalty", + "presence_penalty", + "seed", + "stop", + "user", + ) response = self.client.chat.completions.create(**create_kwargs) try: @@ -1116,7 +1331,12 @@ class DeepSeekProvider(BaseProvider): class NovitaProvider(BaseProvider): """Novita AI provider implementation - OpenAI-compatible API.""" - def __init__(self, api_key: Optional[str] = None, model: str = "deepseek/deepseek-v3.2", **kwargs): + def __init__( + self, + api_key: Optional[str] = None, + model: str = "deepseek/deepseek-v3.2", + **kwargs, + ): """Initialize Novita provider.""" super().__init__(**kwargs) self.api_key = api_key or config.get_api_key("novita") @@ -1134,7 +1354,8 @@ class NovitaProvider(BaseProvider): except (ImportError, OSError): self.client = None self.logger.warning( - "openai library not installed. Install with: pip install semantica[llm-openai]" + "openai library not installed. " + "Install with: pip install semantica[llm-openai]" ) def is_available(self) -> bool: @@ -1142,13 +1363,26 @@ class NovitaProvider(BaseProvider): def generate(self, prompt: str, **kwargs) -> str: if not self.client: - raise ProcessingError("Novita client not initialized. Set NOVITA_API_KEY or pass api_key.") + raise ProcessingError( + "Novita client not initialized. Set NOVITA_API_KEY or pass api_key." + ) create_kwargs = { "model": kwargs.get("model", self.model), "messages": [{"role": "user", "content": prompt}], } - self._add_if_set(create_kwargs, kwargs, "temperature", "max_tokens", "top_p", "frequency_penalty", "presence_penalty", "seed", "stop", "user") + self._add_if_set( + create_kwargs, + kwargs, + "temperature", + "max_tokens", + "top_p", + "frequency_penalty", + "presence_penalty", + "seed", + "stop", + "user", + ) response = self.client.chat.completions.create(**create_kwargs) return response.choices[0].message.content @@ -1163,7 +1397,18 @@ class NovitaProvider(BaseProvider): "messages": [{"role": "user", "content": prompt}], "response_format": {"type": "json_object"}, } - self._add_if_set(create_kwargs, kwargs, "temperature", "max_tokens", "top_p", "frequency_penalty", "presence_penalty", "seed", "stop", "user") + self._add_if_set( + create_kwargs, + kwargs, + "temperature", + "max_tokens", + "top_p", + "frequency_penalty", + "presence_penalty", + "seed", + "stop", + "user", + ) response = self.client.chat.completions.create(**create_kwargs) try: @@ -1171,6 +1416,7 @@ class NovitaProvider(BaseProvider): except Exception as e: raise ProcessingError(f"Failed to parse JSON from Novita response: {e}") + class HuggingFaceLLMProvider(BaseProvider): """HuggingFace transformers for LLM tasks.""" @@ -1186,7 +1432,7 @@ class HuggingFaceLLMProvider(BaseProvider): raise ImportError( "torch is required for HuggingFaceLLMProvider. Install with: pip install 'semantica[models-huggingface]'" ) - + self.model_name = model_name self.device = device or ("cuda" if torch.cuda.is_available() else "cpu") self.model = None @@ -1222,28 +1468,25 @@ class HuggingFaceLLMProvider(BaseProvider): raise ProcessingError("HuggingFace model not initialized.") inputs = self.tokenizer.encode(prompt, return_tensors="pt").to(self.device) - + # Use max_new_tokens if available, otherwise fallback to max_length with a safe default generate_kwargs = { "temperature": kwargs.get("temperature", 0.7), "do_sample": True, } - + if "max_new_tokens" in kwargs: generate_kwargs["max_new_tokens"] = kwargs["max_new_tokens"] elif "max_tokens" in kwargs: generate_kwargs["max_new_tokens"] = kwargs["max_tokens"] - + # Support legacy max_length if explicitly provided if "max_length" in kwargs: generate_kwargs["max_length"] = kwargs["max_length"] # Remove max_new_tokens if max_length is set to avoid conflict generate_kwargs.pop("max_new_tokens", None) - outputs = self.model.generate( - inputs, - **generate_kwargs - ) + outputs = self.model.generate(inputs, **generate_kwargs) generated_text = self.tokenizer.decode(outputs[0], skip_special_tokens=True) # Remove the original prompt from the response return generated_text[len(prompt) :].strip() @@ -1271,9 +1514,10 @@ class HuggingFaceModelLoader: import torch except (ImportError, OSError): raise ImportError( - "torch is required for HuggingFaceModelLoader. Install with: pip install 'semantica[models-huggingface]'" + "torch is required for HuggingFaceModelLoader. " + "Install with: pip install 'semantica[models-huggingface]'" ) - + self.device = device or ("cuda" if torch.cuda.is_available() else "cpu") self._cache: Dict[str, Any] = {} self.logger = get_logger("huggingface_loader") @@ -1282,7 +1526,7 @@ class HuggingFaceModelLoader: """Load NER model.""" # Import torch at method level to ensure it's available import torch - + # Include aggregation_strategy in cache key agg_strategy = kwargs.get("aggregation_strategy", "simple") cache_key = f"{model_name}_ner_{agg_strategy}" @@ -1291,9 +1535,10 @@ class HuggingFaceModelLoader: try: from transformers import pipeline - except ImportError: + except (ImportError, OSError): raise ImportError( - "transformers library not installed. Install with: pip install 'semantica[models-huggingface]'" + "transformers library not installed. " + "Install with: pip install 'semantica[models-huggingface]'" ) try: @@ -1302,13 +1547,16 @@ class HuggingFaceModelLoader: model=model_name, device=self.device if torch.cuda.is_available() else -1, aggregation_strategy=agg_strategy, - tokenizer=kwargs.get("tokenizer") # Allow custom tokenizer + tokenizer=kwargs.get("tokenizer"), # Allow custom tokenizer ) self._cache[cache_key] = nlp return nlp except OSError as e: self.logger.error(f"Failed to load NER model '{model_name}': {e}") - raise ValueError(f"Could not load HuggingFace model '{model_name}'. Check if model name is correct. Error: {e}") + raise ValueError( + f"Could not load HuggingFace model '{model_name}'. " + f"Check if model name is correct. Error: {e}" + ) except Exception as e: self.logger.error(f"Failed to load NER model {model_name}: {e}") raise @@ -1317,16 +1565,17 @@ class HuggingFaceModelLoader: """Load relation extraction model.""" # Import torch at method level to ensure it's available import torch - + cache_key = f"{model_name}_relation" if cache_key in self._cache: return self._cache[cache_key] try: from transformers import pipeline, AutoTokenizer - except ImportError: + except (ImportError, OSError): raise ImportError( - "transformers library not installed. Install with: pip install 'semantica[models-huggingface]'" + "transformers library not installed. " + "Install with: pip install 'semantica[models-huggingface]'" ) try: @@ -1347,7 +1596,10 @@ class HuggingFaceModelLoader: return nlp except OSError as e: self.logger.error(f"Failed to load relation model '{model_name}': {e}") - raise ValueError(f"Could not load HuggingFace model '{model_name}'. Check if model name is correct. Error: {e}") + raise ValueError( + f"Could not load HuggingFace model '{model_name}'. " + f"Check if model name is correct. Error: {e}" + ) except Exception as e: self.logger.error(f"Failed to load relation model {model_name}: {e}") raise @@ -1359,10 +1611,11 @@ class HuggingFaceModelLoader: return self._cache[cache_key] try: - from transformers import AutoModelForSeq2SeqLM, AutoTokenizer, pipeline - except ImportError: + from transformers import AutoModelForSeq2SeqLM, AutoTokenizer + except (ImportError, OSError): raise ImportError( - "transformers library not installed. Install with: pip install 'semantica[models-huggingface]'" + "transformers library not installed. " + "Install with: pip install 'semantica[models-huggingface]'" ) try: @@ -1371,7 +1624,7 @@ class HuggingFaceModelLoader: if not tokenizer: tokenizer_name = kwargs.get("tokenizer_name", model_name) tokenizer = AutoTokenizer.from_pretrained(tokenizer_name) - + model = AutoModelForSeq2SeqLM.from_pretrained(model_name) model.to(self.device) @@ -1380,7 +1633,10 @@ class HuggingFaceModelLoader: return nlp except OSError as e: self.logger.error(f"Failed to load triplet model '{model_name}': {e}") - raise ValueError(f"Could not load HuggingFace model '{model_name}'. Check if model name is correct. Error: {e}") + raise ValueError( + f"Could not load HuggingFace model '{model_name}'. " + f"Check if model name is correct. Error: {e}" + ) except Exception as e: self.logger.error(f"Failed to load triplet model {model_name}: {e}") raise @@ -1389,83 +1645,103 @@ class HuggingFaceModelLoader: """Extract entities using loaded model.""" return model(text) - def extract_relations(self, model, text: str, entities: List, **kwargs) -> List[Dict]: + def extract_relations( + self, model, text: str, entities: List, **kwargs + ) -> List[Dict]: """ Extract relations using loaded model. Iterates through entity pairs and classifies the relationship. """ results = [] - + # Sort entities by position sorted_entities = sorted(entities, key=lambda e: e.start_char) - + # Marker configuration subj_start = kwargs.get("subj_start_marker", "") subj_end = kwargs.get("subj_end_marker", "") obj_start = kwargs.get("obj_start_marker", "") obj_end = kwargs.get("obj_end_marker", "") - + # Iterate through all pairs - import itertools for i, e1 in enumerate(sorted_entities): for e2 in sorted_entities: if e1 == e2: continue - + # Check distance (optional optimization) # if abs(e1.start_char - e2.start_char) > 200: continue - + # Format text with markers # Strategy: [CLS] text with ... and ... [SEP] # We need to insert markers into the original text - + # Create a copy of text with markers inserted - # We need to handle offsets correctly. + # We need to handle offsets correctly. # Simplest way: reconstruct string pieces - + p1_start, p1_end = e1.start_char, e1.end_char p2_start, p2_end = e2.start_char, e2.end_char - + if p1_start < p2_start: formatted_text = ( - text[:p1_start] + - f"{subj_start} " + text[p1_start:p1_end] + f" {subj_end}" + - text[p1_end:p2_start] + - f"{obj_start} " + text[p2_start:p2_end] + f" {obj_end}" + - text[p2_end:] + text[:p1_start] + + f"{subj_start} " + + text[p1_start:p1_end] + + f" {subj_end}" + + text[p1_end:p2_start] + + f"{obj_start} " + + text[p2_start:p2_end] + + f" {obj_end}" + + text[p2_end:] ) else: - formatted_text = ( - text[:p2_start] + - f"{obj_start} " + text[p2_start:p2_end] + f" {obj_end}" + - text[p2_end:p1_start] + - f"{subj_start} " + text[p1_start:p1_end] + f" {subj_end}" + - text[p1_end:] + formatted_text = ( + text[:p2_start] + + f"{obj_start} " + + text[p2_start:p2_end] + + f" {obj_end}" + + text[p2_end:p1_start] + + f"{subj_start} " + + text[p1_start:p1_end] + + f" {subj_end}" + + text[p1_end:] ) - + # Predict try: # Pipeline returns [{'label': 'LABEL', 'score': 0.99}] prediction = model(formatted_text, top_k=1) - + if prediction: - res = prediction[0] if isinstance(prediction, list) else prediction - if isinstance(res, list): res = res[0] # top_k=1 returns list of dicts - + res = ( + prediction[0] + if isinstance(prediction, list) + else prediction + ) + if isinstance(res, list): + res = res[0] # top_k=1 returns list of dicts + label = res.get("label") score = res.get("score") - + # Filter "no_relation" or low confidence - if label != "no_relation" and score > kwargs.get("threshold", 0.5): - results.append({ - "subject": e1, - "object": e2, - "relation": label, - "score": score - }) + if label != "no_relation" and score > kwargs.get( + "threshold", 0.5 + ): + results.append( + { + "subject": e1, + "object": e2, + "relation": label, + "score": score, + } + ) except Exception as e: - self.logger.warning(f"Relation prediction failed for pair {e1.text}-{e2.text}: {e}") - + self.logger.warning( + f"Relation prediction failed for pair {e1.text}-{e2.text}: {e}" + ) + return results def extract_triplets(self, model, text: str, **kwargs) -> List[Dict]: @@ -1477,21 +1753,28 @@ class HuggingFaceModelLoader: # Use kwargs for max_length, default to 512 for input and 128 for output if not specified max_input_length = kwargs.get("max_input_length", 512) max_length = kwargs.get("max_length", 128) - + generate_kwargs = {"max_length": max_length} if "max_new_tokens" in kwargs: generate_kwargs["max_new_tokens"] = kwargs["max_new_tokens"] - + # Pass other generation args including beams and penalties - for param in ["num_beams", "temperature", "top_p", "top_k", "do_sample", - "length_penalty", "repetition_penalty"]: + for param in [ + "num_beams", + "temperature", + "top_p", + "top_k", + "do_sample", + "length_penalty", + "repetition_penalty", + ]: if param in kwargs: generate_kwargs[param] = kwargs[param] inputs = tokenizer( text, return_tensors="pt", truncation=True, max_length=max_input_length ).to(device) - + outputs = model_obj.generate(**inputs, **generate_kwargs) # Allow controlling skip_special_tokens (important for REBEL which uses special tokens for delimiters) skip_special_tokens = kwargs.get("skip_special_tokens", True) @@ -1502,7 +1785,7 @@ class HuggingFaceModelLoader: class ProviderPool: """Pool for reusing provider instances.""" - + def __init__(self): self._providers: Dict[str, BaseProvider] = {} self.logger = get_logger("provider_pool") @@ -1512,7 +1795,7 @@ class ProviderPool: # Create a cache key from name and kwargs # Filter out non-hashable items or volatile args if any # For now, we assume kwargs are configuration options that should match - + # Helper to make dict hashable def make_hashable(value): if isinstance(value, dict): @@ -1523,20 +1806,20 @@ class ProviderPool: key_parts = [name] for k, v in sorted(kwargs.items()): - # Skip some keys if they shouldn't affect pooling? + # Skip some keys if they shouldn't affect pooling? # For now, all init args matter for the instance identity. key_parts.append((k, make_hashable(v))) - + key = str(tuple(key_parts)) - + if key in self._providers: return self._providers[key] - + self.logger.debug(f"Creating new provider instance for {name}") provider = self._create_provider(name, **kwargs) self._providers[key] = provider return provider - + def _create_provider(self, name: str, **kwargs) -> BaseProvider: """Internal creation logic.""" # Check registry first @@ -1553,7 +1836,7 @@ class ProviderPool: "ollama": OllamaProvider, "huggingface_llm": HuggingFaceLLMProvider, "deepseek": DeepSeekProvider, - "novita": NovitaProvider, + "novita": NovitaProvider, } provider_class = builtin.get(name.lower()) @@ -1576,7 +1859,7 @@ _provider_pool = ProviderPool() def create_provider(name: str, use_pool: bool = True, **kwargs) -> BaseProvider: """ Create provider - checks registry for custom providers. - + Args: name: Provider name use_pool: Whether to use the provider pool (default: True) @@ -1584,5 +1867,5 @@ def create_provider(name: str, use_pool: bool = True, **kwargs) -> BaseProvider: """ if use_pool: return _provider_pool.get(name, **kwargs) - + return _provider_pool._create_provider(name, **kwargs) diff --git a/semantica/utils/helpers.py b/semantica/utils/helpers.py index 48065855..feb3400c 100644 --- a/semantica/utils/helpers.py +++ b/semantica/utils/helpers.py @@ -38,15 +38,15 @@ Example Usage: >>> from semantica.utils import clean_text, normalize_entities >>> cleaned = clean_text(" Hello World ") >>> entities = normalize_entities([{"id": "e1", "text": "John", "type": "PERSON"}]) - >>> + >>> >>> from semantica.utils import hash_data, safe_filename >>> data_hash = hash_data({"key": "value"}) >>> safe_name = safe_filename("my file.txt") - >>> + >>> >>> from semantica.utils import merge_dicts, get_nested_value >>> merged = merge_dicts({"a": 1}, {"b": 2}, deep=True) >>> value = get_nested_value(config, "database.host", default="localhost") - >>> + >>> >>> from semantica.utils import retry_on_error >>> @retry_on_error(max_retries=3, delay=1.0) ... def fetch_data(): @@ -457,7 +457,9 @@ def chunk_list(items: List[Any], chunk_size: int) -> List[List[Any]]: Returns: List of chunks """ - return [items[i : i + chunk_size] for i in range(0, len(items), chunk_size)] + return [items[i : i + chunk_size] for i in range(0, len(items), chunk_size)] + + def flatten_dict( d: Dict[str, Any], parent_key: str = "", sep: str = "." ) -> Dict[str, Any]: @@ -556,27 +558,27 @@ def safe_import( ) -> Tuple[Any, bool]: """ Safely import an optional module, handling both ImportError and OSError. - + This is useful for optional dependencies that may fail to import due to: - Missing package (ImportError) - DLL loading failures on Windows, e.g., PyTorch (OSError) - + Args: module_name: Name of the module to import (e.g., "spacy", "docling.document_converter") package: Optional package name for relative imports default: Default value to return if import fails error_message: Optional custom error message for logging - + Returns: Tuple of (module_or_default, success_flag): - If import succeeds: (imported_module, True) - If import fails: (default, False) - + Example: >>> spacy, available = safe_import("spacy") >>> if available: ... doc = spacy.load("en_core_web_sm") - >>> + >>> >>> converter, available = safe_import("docling.document_converter", default=None) >>> if available: ... converter = converter() @@ -587,11 +589,13 @@ def safe_import( else: module = importlib.import_module(module_name) return module, True - except (ImportError, ModuleNotFoundError, OSError) as e: + except (ImportError, OSError) as e: if error_message: import sys + if "logging" in sys.modules: from .logging import get_logger + logger = get_logger("utils.helpers") logger.debug(f"{error_message}: {e}") return default, False @@ -807,9 +811,13 @@ def _is_record(value: Any) -> bool: exporters rather than a ``ValidationError`` at the boundary where the problem is visible. """ - return isinstance(value, Mapping) or is_dataclass(value) or ( - hasattr(value, "__dict__") - and not isinstance(value, (types.ModuleType, type)) + return ( + isinstance(value, Mapping) + or is_dataclass(value) + or ( + hasattr(value, "__dict__") + and not isinstance(value, (types.ModuleType, type)) + ) ) diff --git a/semantica/visualization/embedding_visualizer.py b/semantica/visualization/embedding_visualizer.py index 648c9515..ba26ecea 100644 --- a/semantica/visualization/embedding_visualizer.py +++ b/semantica/visualization/embedding_visualizer.py @@ -1,9 +1,10 @@ """ Embedding Visualizer Module -This module provides comprehensive visualization capabilities for vector embeddings in the -Semantica framework, including 2D/3D dimensionality reduction projections, similarity heatmaps, -clustering visualizations, multi-modal comparisons, and quality metrics analysis. +This module provides comprehensive visualization capabilities for vector +embeddings in the Semantica framework, including 2D/3D dimensionality +reduction projections, similarity heatmaps, clustering visualizations, +multi-modal comparisons, and quality metrics analysis. Key Features: - 2D and 3D dimensionality reduction (UMAP, t-SNE, PCA) @@ -31,7 +32,7 @@ License: MIT """ from pathlib import Path -from typing import Any, Dict, List, Optional, Tuple, Union +from typing import Any, Dict, List, Optional, Union import numpy as np @@ -158,10 +159,12 @@ class EmbeddingVisualizer: try: self.logger.info(f"Visualizing 2D projection using {method}") - + # Step 2: Data Analysis n_samples, n_features = embeddings.shape - self.logger.info(f"Embedding Analysis: {n_samples} samples, {n_features} dimensions") + self.logger.info( + f"Embedding Analysis: {n_samples} samples, {n_features} dimensions" + ) if embeddings.shape[1] <= 2: # Already 2D or less, use directly @@ -183,20 +186,22 @@ class EmbeddingVisualizer: tracking_id, message="Generating visualization..." ) result = self._visualize_2d_plotly( - projected, - labels, - output, - file_path, + projected, + labels, + output, + file_path, color_by=color_by, size_by=size_by, hover_data=hover_data, - **options + **options, ) self.progress_tracker.stop_tracking( tracking_id, status="completed", - message=f"2D projection visualization generated: {len(projected)} points", + message=( + f"2D projection visualization generated: {len(projected)} points" + ), ) return result except Exception as e: @@ -263,7 +268,9 @@ class EmbeddingVisualizer: self.progress_tracker.stop_tracking( tracking_id, status="completed", - message=f"3D projection visualization generated: {len(projected)} points", + message=( + f"3D projection visualization generated: {len(projected)} points" + ), ) return result except Exception as e: @@ -354,7 +361,10 @@ class EmbeddingVisualizer: self.progress_tracker.stop_tracking( tracking_id, status="completed", - message=f"Similarity heatmap generated: {len(embeddings)}x{len(embeddings)} matrix", + message=( + f"Similarity heatmap generated: " + f"{len(embeddings)}x{len(embeddings)} matrix" + ), ) return fig elif file_path: @@ -459,7 +469,10 @@ class EmbeddingVisualizer: self.progress_tracker.stop_tracking( tracking_id, status="completed", - message=f"Clustering visualization generated: {num_clusters} clusters, {len(embeddings)} points", + message=( + f"Clustering visualization generated: " + f"{num_clusters} clusters, {len(embeddings)} points" + ), ) return fig elif file_path: @@ -558,7 +571,10 @@ class EmbeddingVisualizer: dim_options = dict(options) n_comp = dim_options.pop("n_components", 2) projected = self._reduce_dimensions( - combined_embeddings, method=method, n_components=n_comp, **dim_options + combined_embeddings, + method=method, + n_components=n_comp, + **dim_options, ) # Color by type @@ -595,7 +611,10 @@ class EmbeddingVisualizer: self.progress_tracker.stop_tracking( tracking_id, status="completed", - message=f"Multi-modal comparison generated: {len(combined_embeddings)} embeddings", + message=( + f"Multi-modal comparison generated: " + f"{len(combined_embeddings)} embeddings" + ), ) return fig elif file_path: @@ -614,8 +633,6 @@ class EmbeddingVisualizer: ) raise - - def _reduce_dimensions( self, embeddings: np.ndarray, diff --git a/tests/ingest/test_optional_imports.py b/tests/ingest/test_optional_imports.py index 6c70efb8..9a9a6169 100644 --- a/tests/ingest/test_optional_imports.py +++ b/tests/ingest/test_optional_imports.py @@ -141,3 +141,134 @@ else: assert "ConfigurationError" in result.stdout assert "Parquet ingestion" in result.stdout assert "pyarrow" in result.stdout + + +def test_repo_ingestor_probe_fails_without_gitpython() -> None: + result = _run_python_with_blocked_modules( + """ +try: + from semantica.ingest import RepoIngestor + has_git = True +except ImportError: + has_git = False + +assert not has_git, "Expected RepoIngestor import to fail without GitPython" +print("RepoIngestor probe passed") +""", + ("git",), + ) + + assert result.returncode == 0, result.stderr + assert "RepoIngestor probe passed" in result.stdout + + +def test_xml_ingestor_probe_fails_without_lxml() -> None: + result = _run_python_with_blocked_modules( + """ +try: + from semantica.ingest import XMLIngestor + has_lxml = True +except ImportError: + has_lxml = False + +assert not has_lxml, "Expected XMLIngestor import to fail without lxml" +print("XMLIngestor probe passed") +""", + ("lxml",), + ) + + assert result.returncode == 0, result.stderr + assert "XMLIngestor probe passed" in result.stdout + + +def test_xml_ingestion_reports_missing_lxml_when_used() -> None: + result = _run_python_with_blocked_modules( + """ +from semantica.ingest import ingest_xml + +try: + ingest_xml("catalog.xml") +except Exception as exc: + print(type(exc).__name__, exc) +else: + raise SystemExit("expected XML ingestion to fail without lxml") +""", + ("lxml",), + ) + + assert result.returncode == 0, result.stderr + assert "ConfigurationError" in result.stdout + assert "XML ingestion" in result.stdout + assert "lxml" in result.stdout + + +def test_sibling_imports_succeed_without_optional_backends() -> None: + result = _run_python_with_blocked_modules( + """ +from semantica.ingest import ( + CodeExtractor, + CodeFile, + CommitInfo, + GitAnalyzer, + XMLIngestionData, + SalesforceData, +) +print( + CodeExtractor.__name__, + CodeFile.__name__, + CommitInfo.__name__, + GitAnalyzer.__name__, + XMLIngestionData.__name__, + SalesforceData.__name__, +) +""", + ("git", "lxml", "simple_salesforce"), + ) + + assert result.returncode == 0, result.stderr + assert ( + "CodeExtractor CodeFile CommitInfo GitAnalyzer XMLIngestionData SalesforceData" + in result.stdout + ) + + +def test_salesforce_ingestor_probe_fails_without_simple_salesforce() -> None: + result = _run_python_with_blocked_modules( + """ +try: + from semantica.ingest import SalesforceIngestor + has_salesforce = True +except ImportError: + has_salesforce = False + +assert not has_salesforce, ( + "Expected SalesforceIngestor import to fail without simple-salesforce" +) +print("SalesforceIngestor probe passed") +""", + ("simple_salesforce",), + ) + + assert result.returncode == 0, result.stderr + assert "SalesforceIngestor probe passed" in result.stdout + + +def test_salesforce_ingestion_reports_missing_dep_when_used() -> None: + result = _run_python_with_blocked_modules( + """ +from semantica.ingest import ingest_salesforce + +try: + ingest_salesforce() +except Exception as exc: + print(type(exc).__name__, exc) +else: + raise SystemExit("expected Salesforce ingestion to fail without simple-salesforce") +""", + ("simple_salesforce",), + ) + + assert result.returncode == 0, result.stderr + assert "ConfigurationError" in result.stdout + assert "Salesforce ingestion" in result.stdout + assert "simple-salesforce" in result.stdout diff --git a/tests/semantic_extract/test_temporal_extraction.py b/tests/semantic_extract/test_temporal_extraction.py index 9aa7d46a..0dc2bc55 100644 --- a/tests/semantic_extract/test_temporal_extraction.py +++ b/tests/semantic_extract/test_temporal_extraction.py @@ -18,7 +18,14 @@ from datetime import datetime, timezone from unittest.mock import MagicMock, patch # ── Mock optional heavyweight dependencies before any semantica import ────── -_MOCKED_MODULES = ["spacy", "instructor", "openai", "groq", "sentence_transformers", "transformers", "torch"] +_MOCKED_MODULES = [ + "spacy", + "instructor", + "openai", + "groq", + "sentence_transformers", + "transformers", +] _original_modules = {k: sys.modules.get(k) for k in _MOCKED_MODULES} for k in _MOCKED_MODULES: @@ -26,14 +33,7 @@ for k in _MOCKED_MODULES: sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), "../.."))) -from semantica.semantic_extract.methods import extract_relations_llm -from semantica.semantic_extract.ner_extractor import Entity -from semantica.semantic_extract.schemas import ( - RelationsResponse, - RelationsWithTemporalResponse, -) -from semantica.kg.temporal_normalizer import TemporalNormalizer -from semantica.utils.exceptions import TemporalAmbiguityWarning +from semantica.semantic_extract.methods import extract_relations_llm # noqa: E402 for _key, _original in _original_modules.items(): if _original is None: @@ -41,9 +41,17 @@ for _key, _original in _original_modules.items(): else: sys.modules[_key] = _original +from semantica.semantic_extract.ner_extractor import Entity # noqa: E402 +from semantica.semantic_extract.schemas import ( # noqa: E402 + RelationsResponse, + RelationsWithTemporalResponse, +) +from semantica.kg.temporal_normalizer import TemporalNormalizer # noqa: E402 +from semantica.utils.exceptions import TemporalAmbiguityWarning # noqa: E402 # ── Helpers ───────────────────────────────────────────────────────────────── + def _make_entities(): return [ Entity(text="Apple", label="ORG", start_char=0, end_char=5), @@ -59,15 +67,17 @@ def _ref_date(): # Part 1 – extract_relations_llm() temporal flag # ============================================================================ + class TestTemporalExtractionFlag(unittest.TestCase): def setUp(self): from semantica.semantic_extract.methods import _result_cache + _result_cache.clear() @patch("semantica.semantic_extract.methods.create_provider") def test_extract_temporal_bounds_true_adds_four_fields(self, mock_create): - """With extract_temporal_bounds=True all four temporal keys appear in metadata.""" + """With extract_temporal_bounds=True all four temporal keys appear.""" mock_prov = MagicMock() mock_prov.is_available.return_value = True mock_prov.generate_typed.return_value = RelationsWithTemporalResponse( @@ -135,7 +145,9 @@ class TestTemporalExtractionFlag(unittest.TestCase): self.assertNotIn("temporal_source_text", meta) @patch("semantica.semantic_extract.methods.create_provider") - def test_no_temporal_signal_returns_zero_confidence_and_null_dates(self, mock_create): + def test_no_temporal_signal_returns_zero_confidence_and_null_dates( + self, mock_create + ): """When LLM returns no temporal signal, confidence=0.0 and dates are null.""" mock_prov = MagicMock() mock_prov.is_available.return_value = True @@ -200,10 +212,12 @@ class TestTemporalExtractionFlag(unittest.TestCase): @patch("semantica.semantic_extract.methods.create_provider") def test_correct_schema_used_when_temporal_true(self, mock_create): - """generate_typed is called with RelationsWithTemporalResponse when flag=True.""" + """generate_typed is called with RelationsWithTemporalResponse.""" mock_prov = MagicMock() mock_prov.is_available.return_value = True - mock_prov.generate_typed.return_value = RelationsWithTemporalResponse(relations=[]) + mock_prov.generate_typed.return_value = RelationsWithTemporalResponse( + relations=[] + ) mock_create.return_value = mock_prov extract_relations_llm( @@ -238,6 +252,7 @@ class TestTemporalExtractionFlag(unittest.TestCase): # Part 2 – TemporalNormalizer: relative dates # ============================================================================ + class TestTemporalNormalizerRelativeDates(unittest.TestCase): def setUp(self): @@ -316,10 +331,13 @@ class TestTemporalNormalizerRelativeDates(unittest.TestCase): # Part 3 – TemporalNormalizer: partial / structured dates # ============================================================================ + class TestTemporalNormalizerPartialDates(unittest.TestCase): def setUp(self): - self.tn = TemporalNormalizer(reference_date=datetime(2025, 3, 25, tzinfo=timezone.utc)) + self.tn = TemporalNormalizer( + reference_date=datetime(2025, 3, 25, tzinfo=timezone.utc) + ) def test_year_only(self): result = self.tn.normalize("2021") @@ -399,10 +417,13 @@ class TestTemporalNormalizerPartialDates(unittest.TestCase): # Part 4 – TemporalNormalizer: ambiguous formats # ============================================================================ + class TestTemporalNormalizerAmbiguity(unittest.TestCase): def setUp(self): - self.tn = TemporalNormalizer(reference_date=datetime(2025, 3, 25, tzinfo=timezone.utc)) + self.tn = TemporalNormalizer( + reference_date=datetime(2025, 3, 25, tzinfo=timezone.utc) + ) def test_ambiguous_slash_date_raises_warning_and_returns_none(self): with warnings.catch_warnings(record=True) as w: @@ -435,14 +456,19 @@ class TestTemporalNormalizerAmbiguity(unittest.TestCase): # Part 5 – TemporalNormalizer: domain phrase map # ============================================================================ + class TestTemporalNormalizerDomainPhrases(unittest.TestCase): def setUp(self): - self.tn = TemporalNormalizer(reference_date=datetime(2025, 3, 25, tzinfo=timezone.utc)) + self.tn = TemporalNormalizer( + reference_date=datetime(2025, 3, 25, tzinfo=timezone.utc) + ) def _assert_recognized(self, phrase): result = self.tn.normalize_phrase(phrase) - self.assertIsNotNone(result, f"Expected phrase {phrase!r} to be recognized but got None") + self.assertIsNotNone( + result, f"Expected phrase {phrase!r} to be recognized but got None" + ) return result # General / Policy @@ -525,6 +551,7 @@ class TestTemporalNormalizerDomainPhrases(unittest.TestCase): # Part 6 – TemporalNormalizer: custom phrase map # ============================================================================ + class TestTemporalNormalizerCustomPhraseMap(unittest.TestCase): def setUp(self): @@ -568,10 +595,12 @@ class TestTemporalNormalizerCustomPhraseMap(unittest.TestCase): # Part 7 – Full pipeline: extract → normalize → BiTemporalFact # ============================================================================ + class TestFullPipelineTemporalToBiTemporal(unittest.TestCase): def setUp(self): from semantica.semantic_extract.methods import _result_cache + _result_cache.clear() @patch("semantica.semantic_extract.methods.create_provider") @@ -623,10 +652,12 @@ class TestFullPipelineTemporalToBiTemporal(unittest.TestCase): self.assertEqual(vf[0].day, 1) # Feed into BiTemporalFact - fact = BiTemporalFact.from_relationship({ - "valid_from": "2014-05-01T00:00:00Z", - "valid_until": None, - }) + fact = BiTemporalFact.from_relationship( + { + "valid_from": "2014-05-01T00:00:00Z", + "valid_until": None, + } + ) self.assertIsNotNone(fact.valid_from) self.assertEqual(fact.valid_from.year, 2014) self.assertEqual(fact.valid_from.month, 5) @@ -663,7 +694,9 @@ class TestFullPipelineTemporalToBiTemporal(unittest.TestCase): extract_temporal_bounds=True, ) meta = rels[0].metadata - tn = TemporalNormalizer(reference_date=datetime(2025, 3, 25, tzinfo=timezone.utc)) + tn = TemporalNormalizer( + reference_date=datetime(2025, 3, 25, tzinfo=timezone.utc) + ) vf = tn.normalize(meta["valid_from"]) vu = tn.normalize(meta["valid_until"]) diff --git a/tests/test_issue_1513_slim_core.py b/tests/test_issue_1513_slim_core.py index 039bccd9..f4de58a3 100644 --- a/tests/test_issue_1513_slim_core.py +++ b/tests/test_issue_1513_slim_core.py @@ -14,13 +14,16 @@ def _load_toml(file_path: Path) -> dict: content = file_path.read_text(encoding="utf-8") try: import tomllib # Python 3.11+ standard library + return tomllib.loads(content) except ImportError: try: import tomli # Fast PEP 680 compatible parser for Python < 3.11 + return tomli.loads(content) except ImportError: import toml # Fallback toml parser + return toml.loads(content) @@ -34,10 +37,28 @@ def test_core_dependencies_count(): for d in deps } expected_22 = { - "numpy", "pandas", "scipy", "scikit-learn", "rdflib", "networkx", - "requests", "chardet", "protobuf", "grpcio", "pillow", "pydantic", - "click", "rich", "tqdm", "pyyaml", "toml", "python-dotenv", - "loguru", "structlog", "httpx", "pyarrow" + "numpy", + "pandas", + "scipy", + "scikit-learn", + "rdflib", + "networkx", + "requests", + "chardet", + "protobuf", + "grpcio", + "pillow", + "pydantic", + "click", + "rich", + "tqdm", + "pyyaml", + "toml", + "python-dotenv", + "loguru", + "structlog", + "httpx", + "pyarrow", } assert normalized_names == expected_22 assert len(normalized_names) == 22 @@ -49,14 +70,27 @@ def test_optional_extras_defined(): data = _load_toml(repo_root / "pyproject.toml") extras = data["project"]["optional-dependencies"] for extra in [ - "documents", "ingest-git", "embeddings-local", "nlp-spacy", - "viz", "media", "vectorstore-faiss", "graph-embeddings", "all" + "documents", + "ingest-git", + "embeddings-local", + "nlp-spacy", + "viz", + "media", + "vectorstore-faiss", + "graph-embeddings", + "all", ]: assert extra in extras, f"Missing extra {extra}" all_extra_str = str(extras["all"]) for expected_ref in [ - "documents", "ingest-git", "embeddings-local", "nlp-spacy", - "viz", "media", "graph-embeddings", "vectorstore-all" + "documents", + "ingest-git", + "embeddings-local", + "nlp-spacy", + "viz", + "media", + "graph-embeddings", + "vectorstore-all", ]: assert expected_ref in all_extra_str, f"Missing {expected_ref} in all" # And vectorstore-faiss is in vectorstore-all @@ -81,6 +115,7 @@ def test_core_modules_importable(): import semantica.visualization import semantica.semantic_extract import semantica.pipeline + assert semantica.__version__ is not None @@ -129,20 +164,74 @@ def test_xml_parser_lxml_explicit_requires_documents_extra(): def test_xml_ingestor_missing_hint(): with patch("semantica.ingest.xml_ingestor.etree", None): from semantica.ingest.xml_ingestor import XMLIngestor - with pytest.raises(ProcessingError, match=r"semantica\[documents\]"): + + with pytest.raises(ImportError, match=r"semantica\[documents\]"): XMLIngestor() +def test_xml_ingestor_package_import_missing_hint(): + import semantica.ingest as ingest_mod + + ingest_mod.__dict__.pop("XMLIngestor", None) + with patch("semantica.ingest.xml_ingestor.etree", None): + with pytest.raises(ImportError, match=r"semantica\[documents\]"): + _ = ingest_mod.XMLIngestor + + def test_repo_ingestor_missing_hint(): with patch("semantica.ingest.repo_ingestor.git", None): from semantica.ingest.repo_ingestor import RepoIngestor + with pytest.raises(ImportError, match=r"semantica\[ingest-git\]"): RepoIngestor() +def test_repo_ingestor_package_import_missing_hint(): + import semantica.ingest as ingest_mod + + ingest_mod.__dict__.pop("RepoIngestor", None) + with patch("semantica.ingest.repo_ingestor.git", None): + with pytest.raises(ImportError, match=r"semantica\[ingest-git\]"): + _ = ingest_mod.RepoIngestor + + +def test_git_analyzer_package_import_succeeds_without_git(): + import semantica.ingest as ingest_mod + + ingest_mod.__dict__.pop("GitAnalyzer", None) + with patch("semantica.ingest.repo_ingestor.git", None): + analyzer_cls = ingest_mod.GitAnalyzer + assert analyzer_cls is not None + analyzer = analyzer_cls() + assert analyzer is not None + + +def test_salesforce_ingestor_package_import_missing_hint(): + import semantica.ingest as ingest_mod + + ingest_mod.__dict__.pop("SalesforceIngestor", None) + with patch("semantica.ingest.salesforce_ingestor.SALESFORCE_AVAILABLE", False): + with pytest.raises(ImportError, match=r"semantica\[db-salesforce\]"): + _ = ingest_mod.SalesforceIngestor + + +def test_parse_methods_dynamic_default_resolution(): + from semantica.parse.methods import ( + get_parse_method, + list_available_methods, + parse_document, + ) + + assert get_parse_method("document", "default") == parse_document + methods = list_available_methods() + assert "default" in methods.get("document", []) + assert "default" in methods.get("structured", []) + + def test_node_embedder_gensim_missing_hint(): with patch("semantica.kg.node_embeddings.GENSIM_AVAILABLE", False): from semantica.kg.node_embeddings import NodeEmbedder + with pytest.raises(ImportError, match=r"semantica\[graph-embeddings\]"): NodeEmbedder() @@ -150,6 +239,7 @@ def test_node_embedder_gensim_missing_hint(): def test_faiss_store_missing_hint(): with patch("semantica.vector_store.faiss_store.FAISS_AVAILABLE", False): from semantica.vector_store.faiss_store import FAISSIndexBuilder, FAISSStore + builder = FAISSIndexBuilder(128) with pytest.raises(ProcessingError, match=r"semantica\[vectorstore-faiss\]"): builder.build_index("flat") @@ -165,12 +255,16 @@ def test_visualization_missing_hint(): # Plotly is checked via px and go in _check_dependencies with patch("semantica.visualization.embedding_visualizer.px", None): visualizer = EmbeddingVisualizer() - with pytest.raises(ProcessingError, match=r"Plotly is required.*semantica\[viz\]"): + with pytest.raises( + ProcessingError, match=r"Plotly is required.*semantica\[viz\]" + ): visualizer.visualize_2d_projection(np.array([[0.1, 0.2], [0.3, 0.4]])) with patch("semantica.visualization.embedding_visualizer.go", None): visualizer = EmbeddingVisualizer() - with pytest.raises(ProcessingError, match=r"Plotly is required.*semantica\[viz\]"): + with pytest.raises( + ProcessingError, match=r"Plotly is required.*semantica\[viz\]" + ): visualizer.visualize_2d_projection(np.array([[0.1, 0.2], [0.3, 0.4]])) @@ -180,18 +274,25 @@ def test_visualization_umap_missing_hint(): from semantica.visualization.embedding_visualizer import EmbeddingVisualizer # Stand in for Plotly so we reach dimensionality reduction - with patch("semantica.visualization.embedding_visualizer.px", MagicMock()), \ - patch("semantica.visualization.embedding_visualizer.go", MagicMock()), \ - patch("semantica.visualization.embedding_visualizer.umap", None): + with patch("semantica.visualization.embedding_visualizer.px", MagicMock()), patch( + "semantica.visualization.embedding_visualizer.go", MagicMock() + ), patch("semantica.visualization.embedding_visualizer.umap", None): visualizer = EmbeddingVisualizer() - # High-dimensional embeddings (>2D) trigger dimensionality reduction with method="umap" + # High-dimensional embeddings (>2D) trigger dimensionality reduction + # with method="umap" embeddings = np.array([[0.1, 0.2, 0.3], [0.4, 0.5, 0.6], [0.7, 0.8, 0.9]]) - with pytest.raises(ProcessingError, match=r"UMAP is required.*semantica\[viz\]"): + with pytest.raises( + ProcessingError, match=r"UMAP is required.*semantica\[viz\]" + ): visualizer.visualize_2d_projection(embeddings, method="umap") # Also verify 3D projection triggers the same actionable error on >3D embeddings - embeddings_4d = np.array([[0.1, 0.2, 0.3, 0.4], [0.5, 0.6, 0.7, 0.8], [0.9, 1.0, 1.1, 1.2]]) - with pytest.raises(ProcessingError, match=r"UMAP is required.*semantica\[viz\]"): + embeddings_4d = np.array( + [[0.1, 0.2, 0.3, 0.4], [0.5, 0.6, 0.7, 0.8], [0.9, 1.0, 1.1, 1.2]] + ) + with pytest.raises( + ProcessingError, match=r"UMAP is required.*semantica\[viz\]" + ): visualizer.visualize_3d_projection(embeddings_4d, method="umap") @@ -201,8 +302,9 @@ def test_visualization_sklearn_missing_hint(): from semantica.visualization.embedding_visualizer import EmbeddingVisualizer # Stand in for Plotly so we reach dimensionality reduction - with patch("semantica.visualization.embedding_visualizer.px", MagicMock()), \ - patch("semantica.visualization.embedding_visualizer.go", MagicMock()): + with patch("semantica.visualization.embedding_visualizer.px", MagicMock()), patch( + "semantica.visualization.embedding_visualizer.go", MagicMock() + ): visualizer = EmbeddingVisualizer() embeddings = np.array([[0.1, 0.2, 0.3], [0.4, 0.5, 0.6], [0.7, 0.8, 0.9]]) @@ -221,7 +323,7 @@ def test_visualization_sklearn_missing_hint(): def test_visualization_options_collision_free(): - """Options such as n_components, perplexity, n_neighbors must not cause keyword collisions.""" + """Options like n_components, perplexity must not cause keyword collisions.""" import numpy as np from unittest.mock import MagicMock from semantica.visualization.embedding_visualizer import EmbeddingVisualizer @@ -232,26 +334,121 @@ def test_visualization_options_collision_free(): mock_umap_module = MagicMock() mock_umap_module.UMAP = mock_umap_cls - with patch("semantica.visualization.embedding_visualizer.PCA", mock_pca), \ - patch("semantica.visualization.embedding_visualizer.TSNE", mock_tsne), \ - patch("semantica.visualization.embedding_visualizer.umap", mock_umap_module), \ - patch("semantica.visualization.embedding_visualizer.px", MagicMock()), \ - patch("semantica.visualization.embedding_visualizer.go", MagicMock()): + with patch("semantica.visualization.embedding_visualizer.PCA", mock_pca), patch( + "semantica.visualization.embedding_visualizer.TSNE", mock_tsne + ), patch( + "semantica.visualization.embedding_visualizer.umap", mock_umap_module + ), patch( + "semantica.visualization.embedding_visualizer.px", MagicMock() + ), patch( + "semantica.visualization.embedding_visualizer.go", MagicMock() + ): visualizer = EmbeddingVisualizer() embeddings = np.array([[0.1, 0.2, 0.3], [0.4, 0.5, 0.6], [0.7, 0.8, 0.9]]) # PCA with n_components visualizer.visualize_2d_projection(embeddings, method="pca", n_components=2) # TSNE with perplexity and random_state - visualizer.visualize_2d_projection(embeddings, method="tsne", perplexity=1, random_state=42) + visualizer.visualize_2d_projection( + embeddings, method="tsne", perplexity=1, random_state=42 + ) # UMAP with n_neighbors and min_dist - visualizer.visualize_2d_projection(embeddings, method="umap", n_neighbors=2, min_dist=0.1) + visualizer.visualize_2d_projection( + embeddings, method="umap", n_neighbors=2, min_dist=0.1 + ) # 3D with n_components visualizer.visualize_3d_projection(embeddings, method="pca", n_components=3) def test_spacy_load_missing_hint(): from semantica.semantic_extract.methods import load_spacy_model + with patch("semantica.semantic_extract.methods.spacy", None): with pytest.raises(ImportError, match=r"semantica\[nlp-spacy\]"): load_spacy_model("en_core_web_sm") + + +def test_xml_parser_handles_comments(): + xml_content = ( + "Value" + "" + ) + # lxml engine + p_lxml = XMLParser(engine="lxml") + res_lxml = p_lxml.parse(xml_content) + assert res_lxml.root.tag == "root" + assert len(res_lxml.root.children) == 1 + assert res_lxml.root.children[0].tag == "item" + assert res_lxml.root.children[0].text == "Value" + + # etree engine + p_etree = XMLParser(engine="etree") + res_etree = p_etree.parse(xml_content) + assert res_etree.root.tag == "root" + assert len(res_etree.root.children) == 1 + assert res_etree.root.children[0].tag == "item" + assert res_etree.root.children[0].text == "Value" + + +def test_public_api_ingestor_handles_xml_comments(): + from semantica.ingest.public_api_ingestor import PublicAPIIngestor + + xml_content = "Value" + ingestor = PublicAPIIngestor(rate_limit_delay=0) + + # 1. Default (defusedxml if available) + parsed = ingestor._parse_xml(xml_content) + assert parsed["tag"] == "root" + assert len(parsed["children"]) == 1 + assert parsed["children"][0]["tag"] == "item" + assert parsed["children"][0]["text"] == "Value" + + # 2. lxml fallback + with patch("semantica.ingest.public_api_ingestor.safe_xml_etree", None): + parsed_lxml = ingestor._parse_xml(xml_content) + assert parsed_lxml["tag"] == "root" + assert len(parsed_lxml["children"]) == 1 + assert parsed_lxml["children"][0]["tag"] == "item" + assert parsed_lxml["children"][0]["text"] == "Value" + + +def test_huggingface_model_loader_catches_oserror(): + import builtins + from unittest.mock import MagicMock + from semantica.semantic_extract.providers import HuggingFaceModelLoader + + mock_torch = MagicMock() + mock_torch.Tensor = type("Tensor", (), {}) + with patch.dict("sys.modules", {"torch": mock_torch}): + loader = HuggingFaceModelLoader() + # 1. Test ModuleNotFoundError / ImportError + with patch.dict("sys.modules", {"transformers": None}): + with pytest.raises(ImportError, match=r"semantica\[models-huggingface\]"): + loader.load_ner_model("bert-base-cased") + + with pytest.raises(ImportError, match=r"semantica\[models-huggingface\]"): + loader.load_relation_model("bert-base-cased") + + with pytest.raises(ImportError, match=r"semantica\[models-huggingface\]"): + loader.load_triplet_model("t5-base") + + # 2. Test OSError (e.g. corrupt DLL / missing shared library) + real_import = builtins.__import__ + + def fake_import(name, *args, **kwargs): + if name == "transformers": + raise OSError("DLL load failed") + return real_import(name, *args, **kwargs) + + try: + builtins.__import__ = fake_import + with pytest.raises(ImportError, match=r"semantica\[models-huggingface\]"): + loader.load_ner_model("bert-base-cased-oserror") + + with pytest.raises(ImportError, match=r"semantica\[models-huggingface\]"): + loader.load_relation_model("bert-base-cased-oserror") + + with pytest.raises(ImportError, match=r"semantica\[models-huggingface\]"): + loader.load_triplet_model("t5-base-oserror") + finally: + builtins.__import__ = real_import From 7be15827864a213e2b85dda7bb628bf60aec74e3 Mon Sep 17 00:00:00 2001 From: Sameer Kadam Date: Tue, 8 Sep 2026 02:12:20 +0530 Subject: [PATCH 11/14] fix: correct vector store installation extras (#1529) Co-authored-by: Sameer Kadam --- docs/reference/vector_store.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/reference/vector_store.md b/docs/reference/vector_store.md index a76043e4..2ca4b455 100644 --- a/docs/reference/vector_store.md +++ b/docs/reference/vector_store.md @@ -160,7 +160,7 @@ No installation or API key required. FAISS requires `pip install faiss-cpu`. ```bash -pip install "semantica[pinecone]" +pip install "semantica[vectorstore-pinecone]" ``` ```python @@ -178,7 +178,7 @@ store = VectorStore( ```bash -pip install "semantica[weaviate]" +pip install "semantica[vectorstore-weaviate]" ``` ```python @@ -194,7 +194,7 @@ store = VectorStore( ```bash -pip install "semantica[qdrant]" +pip install "semantica[vectorstore-qdrant]" ``` ```python @@ -210,7 +210,7 @@ store = VectorStore( ```bash -pip install "semantica[pgvector]" +pip install "semantica[vectorstore-pgvector]" ``` ```python From c449209168f69e8f352becda2270b95a36f0ae81 Mon Sep 17 00:00:00 2001 From: BingEdward <1042653432@qq.com> Date: Tue, 8 Sep 2026 05:40:53 +0800 Subject: [PATCH 12/14] fix(cli): dispatch mcp call through semantica_mcp.mcp.server (#1368) Route `semantica mcp call` and `semantica mcp list-tools` through the canonical `semantica_mcp.mcp.server` packaged module instead of the nonexistent `MCPSession` import. Previously, `semantica mcp call` imported `MCPSession` from `semantica_mcp.mcp.session`, which never defined it, causing every call to fail with "MCP module not available". Meanwhile, `semantica mcp list-tools` inspected `semantica_mcp.mcp.tools.__all__`, which evaluated to `["TOOL_DEFINITIONS"]` and printed a single tool named "TOOL_DEFINITIONS". Key changes: - Implement `semantica_mcp.mcp.server.call_tool(name, arguments)` as the shared in-process entry point used by both the CLI and the JSON-RPC `tools/call` handler, ensuring both surfaces expose identical tools. - Add `UnknownToolError` to distinguish missing tools (JSON-RPC -32601) from handler-level `KeyError` exceptions (JSON-RPC -32603). - Update `semantica mcp list-tools` to source tool names directly from `TOOL_DEFINITIONS` in `semantica_mcp.mcp.tools`. - Validate `--args` payloads and reject non-object JSON inputs (arrays, primitives, null) with a clean `ClickException`. - Update `tests/test_mcp_stdio_roundtrip.py` to spawn `semantica_mcp.mcp` instead of the pre-relocation `mcp` module, restoring clean stdio framing tests. Fixes #1355 --- semantica/cli.py | 26 ++++++------ semantica_mcp/mcp/server.py | 29 ++++++++++--- tests/test_cli_commands.py | 49 +++++++++++++++++----- tests/test_mcp_package_call_tool.py | 64 +++++++++++++++++++++++++++++ tests/test_mcp_stdio_roundtrip.py | 4 +- 5 files changed, 141 insertions(+), 31 deletions(-) create mode 100644 tests/test_mcp_package_call_tool.py diff --git a/semantica/cli.py b/semantica/cli.py index dd8c09b5..ade8ddd9 100644 --- a/semantica/cli.py +++ b/semantica/cli.py @@ -4764,15 +4764,10 @@ def mcp_list_tools(cli_ctx: CLIContext, local_json: bool) -> None: cli_ctx = _require_ctx(cli_ctx) def _action() -> None: - try: - from semantica_mcp.mcp.tools import __all__ as tools - except ImportError: - tools = [ - "extract_entities", "extract_relations", "build_graph", - "query_graph", "get_graph_analytics", "run_reasoning", - "record_decision", "get_decisions", "export_graph", - "validate_shacl", "get_provenance", "embed_and_search", - ] + # Same catalog the server exposes via tools/list, so `list-tools` + # and `mcp start` can't drift (issue #1355). + from semantica_mcp.mcp.tools import TOOL_DEFINITIONS + tools = [t["name"] for t in TOOL_DEFINITIONS] if _is_json(cli_ctx, local_json): _jecho({"tools": list(tools)}) else: @@ -4805,12 +4800,15 @@ def mcp_call(cli_ctx: CLIContext, tool_name: str, args: str, local_json: bool) - tool_args = json.loads(args) except json.JSONDecodeError as exc: raise click.ClickException(f"Invalid JSON in --args: {exc}") from exc + if not isinstance(tool_args, dict): + raise click.ClickException("--args must be a JSON object") + # Dispatch through the same server `mcp start` spawns; its session + # module never defined MCPSession (issue #1355). + from semantica_mcp.mcp.server import UnknownToolError, call_tool try: - from semantica_mcp.mcp.session import MCPSession - session = MCPSession(config=cli_ctx.config.to_dict()) - result = session.call_tool(tool_name, **tool_args) - except ImportError as exc: - raise click.ClickException(f"MCP module not available: {exc}") from exc + result = call_tool(tool_name, tool_args) + except UnknownToolError as exc: + raise click.ClickException(str(exc)) from exc if _is_json(cli_ctx, local_json): _jecho(result if isinstance(result, (dict, list)) else {"result": str(result)}) else: diff --git a/semantica_mcp/mcp/server.py b/semantica_mcp/mcp/server.py index d9484df2..cd657da5 100644 --- a/semantica_mcp/mcp/server.py +++ b/semantica_mcp/mcp/server.py @@ -51,6 +51,27 @@ _INTERNAL_ERROR = -32603 _TOOL_INDEX: dict[str, dict] = {t["name"]: t for t in TOOL_DEFINITIONS} +class UnknownToolError(Exception): + """Raised by :func:`call_tool` when the tool name is not in the catalog. + + A dedicated type (rather than ``KeyError``) so callers can distinguish + a bad tool name from a ``KeyError`` raised inside a handler indexing a + required argument (e.g. ``args["category"]``). + """ + + +def call_tool(name: str, arguments: dict) -> dict: + """Invoke a tool in-process by name and return its raw result dict. + + Shared by the JSON-RPC ``tools/call`` handler and ``semantica mcp call`` + (issue #1355), so both expose exactly the same tool set. + """ + tool = _TOOL_INDEX.get(name) + if tool is None: + raise UnknownToolError(f"Unknown tool: {name}") + return tool["_handler"](arguments) + + # --------------------------------------------------------------------------- # Request handlers # --------------------------------------------------------------------------- @@ -85,12 +106,10 @@ def _handle_tools_call(req_id: Any, params: dict) -> dict: name = params.get("name", "") args = params.get("arguments", {}) or {} - tool = _TOOL_INDEX.get(name) - if tool is None: - return _err(req_id, _METHOD_NOT_FOUND, f"Unknown tool: {name}") - try: - result = tool["_handler"](args) + result = call_tool(name, args) + except UnknownToolError as exc: + return _err(req_id, _METHOD_NOT_FOUND, str(exc)) except Exception as exc: log.exception("Tool %s raised an exception", name) # The exception's class name (e.g. "ValidationError", "TimeoutError") diff --git a/tests/test_cli_commands.py b/tests/test_cli_commands.py index c2b5f870..0f6cc1e8 100644 --- a/tests/test_cli_commands.py +++ b/tests/test_cli_commands.py @@ -2090,12 +2090,16 @@ class TestMCP: # Table renders correctly — at minimum the column header is present assert "Tool" in result.output or "tool" in result.output.lower() - def test_list_tools_with_mock_shows_known_tools(self, runner, monkeypatch): - fake_tools = _fake_module(__all__=["extract_entities", "query_graph"]) - monkeypatch.setitem(__import__("sys").modules, "semantica_mcp.mcp.tools", fake_tools) + def test_list_tools_reads_server_catalog(self, runner, monkeypatch): + """list-tools must read TOOL_DEFINITIONS (what the server serves via + tools/list), not the module's ``__all__`` (issue #1355).""" + import semantica_mcp.mcp.tools as tools_mod + fake = [{"name": "fake_tool_from_catalog", "description": "", "inputSchema": {}, + "_handler": lambda a: {}}] + monkeypatch.setattr(tools_mod, "TOOL_DEFINITIONS", fake) result = runner.invoke(cli_module.main, ["mcp", "list-tools"]) _ok(result) - assert "extract_entities" in result.output + assert "fake_tool_from_catalog" in result.output def test_list_tools_json(self, runner): result = runner.invoke(cli_module.main, ["mcp", "list-tools", "--json"]) @@ -2138,14 +2142,39 @@ class TestMCP: err = json.loads(result.stderr) assert err["error"].startswith("Invalid JSON in --args") - def test_call_import_error_is_clean(self, runner): - with patch("builtins.__import__", side_effect=lambda n, *a, **k: ( - (_ for _ in ()).throw(ImportError(n)) - if n.startswith("mcp") else __import__(n, *a, **k) - )): - result = runner.invoke(cli_module.main, ["mcp", "call", "extract_entities"]) + def test_call_dispatches_through_packaged_server(self, runner): + """Regression for issue #1355: ``mcp call`` dispatches in-process through + ``semantica_mcp.mcp.server`` (the server ``mcp start`` spawns) instead + of importing the nonexistent ``MCPSession``.""" + result = runner.invoke( + cli_module.main, ["--json", "mcp", "call", "extract_entities"] + ) + _ok(result) + # Empty args short-circuit before heavy imports; reaching the + # handler's own validation proves the dispatch path works. + assert "text is required" in result.output + + def test_call_unknown_tool_fails_cleanly(self, runner): + result = runner.invoke(cli_module.main, ["mcp", "call", "no_such_tool"]) assert result.exit_code != 0 assert "Traceback" not in result.output + assert "Unknown tool" in result.output + + def test_call_non_object_args_rejected(self, runner): + result = runner.invoke( + cli_module.main, ["mcp", "call", "extract_entities", "--args", "[1, 2]"] + ) + assert result.exit_code != 0 + assert "Traceback" not in result.output + assert "--args must be a JSON object" in result.output + + def test_list_tools_json_matches_server_catalog(self, runner): + """The CLI catalog and the MCP server catalog must be the same list.""" + from semantica_mcp.mcp.tools import TOOL_DEFINITIONS + result = runner.invoke(cli_module.main, ["mcp", "list-tools", "--json"]) + _ok(result) + data = _json_output(result) + assert data["tools"] == [t["name"] for t in TOOL_DEFINITIONS] # ─── services group (backward-compat wrapper) ───────────────────────────────── diff --git a/tests/test_mcp_package_call_tool.py b/tests/test_mcp_package_call_tool.py new file mode 100644 index 00000000..58587911 --- /dev/null +++ b/tests/test_mcp_package_call_tool.py @@ -0,0 +1,64 @@ +"""Tests for the shared in-process tool entry point (issue #1355). + +``semantica_mcp.mcp.server.call_tool`` is the dispatch used by both the +JSON-RPC ``tools/call`` handler and the ``semantica mcp call`` CLI command, +so the two surfaces cannot expose different tool sets. +""" + +import os +import sys +import unittest +from unittest.mock import patch + +sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), ".."))) + +from semantica_mcp.mcp import server +from semantica_mcp.mcp.server import UnknownToolError, _handle_tools_call, call_tool + + +class TestCallTool(unittest.TestCase): + + def test_known_tool_dispatches_to_handler(self): + # Empty args hit extract_entities' own validation before any heavy + # imports, which is enough to prove dispatch reached the handler. + result = call_tool("extract_entities", {}) + self.assertEqual(result["error"], "text is required") + + def test_unknown_tool_raises_unknown_tool_error(self): + with self.assertRaises(UnknownToolError): + call_tool("no_such_tool", {}) + + def test_unknown_tool_error_is_not_a_key_error(self): + """A handler's own KeyError (missing required arg) must remain + distinguishable from an unknown tool name.""" + self.assertFalse(issubclass(UnknownToolError, KeyError)) + + +class TestToolsCallDispatch(unittest.TestCase): + + @staticmethod + def _tools_call(name, arguments): + return _handle_tools_call(1, {"name": name, "arguments": arguments}) + + def test_unknown_tool_returns_method_not_found(self): + response = self._tools_call("no_such_tool", {}) + self.assertEqual(response["error"]["code"], -32601) + self.assertEqual(response["error"]["message"], "Unknown tool: no_such_tool") + + def test_handler_key_error_is_internal_error_not_unknown_tool(self): + def _boom(args): + raise KeyError("category") + + fake = {"name": "boom", "description": "", "inputSchema": {}, "_handler": _boom} + with patch.dict(server._TOOL_INDEX, {"boom": fake}): + response = self._tools_call("boom", {}) + self.assertEqual(response["error"]["code"], -32603) + + def test_known_tool_returns_result_content(self): + response = self._tools_call("extract_entities", {}) + self.assertIn("content", response["result"]) + self.assertTrue(response["result"]["isError"]) + + +if __name__ == "__main__": + unittest.main() diff --git a/tests/test_mcp_stdio_roundtrip.py b/tests/test_mcp_stdio_roundtrip.py index acf2bd9c..90cd3191 100644 --- a/tests/test_mcp_stdio_roundtrip.py +++ b/tests/test_mcp_stdio_roundtrip.py @@ -91,7 +91,7 @@ _INIT_REQUEST = _jsonrpc("initialize", 1, { # --------------------------------------------------------------------------- class TestMCPStdioFramingContract(unittest.TestCase): - """Run 'python -m mcp' exactly as an MCP client would, over a real pipe. + """Run 'python -m semantica_mcp.mcp' exactly as an MCP client would, over a real pipe. Each test sends a complete JSON-RPC session through stdin and asserts that every byte on stdout is valid JSON — catching the exact failure mode from @@ -102,7 +102,7 @@ class TestMCPStdioFramingContract(unittest.TestCase): def _run(self, *requests: bytes) -> subprocess.CompletedProcess: return subprocess.run( - [sys.executable, "-m", "mcp"], + [sys.executable, "-m", "semantica_mcp.mcp"], input=b"".join(requests), stdout=subprocess.PIPE, stderr=subprocess.PIPE, From b6538740e93803c3fd9c331f9ce6a91df3e5faec Mon Sep 17 00:00:00 2001 From: KaifAhmad1 Date: Tue, 8 Sep 2026 12:47:26 +0530 Subject: [PATCH 13/14] fix(tests): guard lxml-specific assertions in slim-core comment tests test_xml_parser_handles_comments and test_public_api_ingestor_handles_xml_comments called XMLParser(engine="lxml") / forced the lxml fallback path unconditionally, but the core-only CI step installs from base-deps.txt, which no longer bundles lxml or defusedxml under this PR's slim dependency layout. Skip the lxml-only assertions when lxml/defusedxml aren't installed, while still exercising the always-available etree path. Co-Authored-By: Claude Sonnet 5 --- tests/test_issue_1513_slim_core.py | 35 ++++++++++++++++++++---------- 1 file changed, 24 insertions(+), 11 deletions(-) diff --git a/tests/test_issue_1513_slim_core.py b/tests/test_issue_1513_slim_core.py index f4de58a3..e617ac06 100644 --- a/tests/test_issue_1513_slim_core.py +++ b/tests/test_issue_1513_slim_core.py @@ -369,19 +369,13 @@ def test_spacy_load_missing_hint(): def test_xml_parser_handles_comments(): + from semantica.parse.xml_parser import etree as real_lxml_etree + xml_content = ( "Value" "" ) - # lxml engine - p_lxml = XMLParser(engine="lxml") - res_lxml = p_lxml.parse(xml_content) - assert res_lxml.root.tag == "root" - assert len(res_lxml.root.children) == 1 - assert res_lxml.root.children[0].tag == "item" - assert res_lxml.root.children[0].text == "Value" - - # etree engine + # etree engine (always available in a core-only install) p_etree = XMLParser(engine="etree") res_etree = p_etree.parse(xml_content) assert res_etree.root.tag == "root" @@ -389,9 +383,26 @@ def test_xml_parser_handles_comments(): assert res_etree.root.children[0].tag == "item" assert res_etree.root.children[0].text == "Value" + # lxml engine (only meaningful when the 'documents' extra is installed) + if real_lxml_etree is None: + pytest.skip("lxml not installed (requires semantica[documents])") + p_lxml = XMLParser(engine="lxml") + res_lxml = p_lxml.parse(xml_content) + assert res_lxml.root.tag == "root" + assert len(res_lxml.root.children) == 1 + assert res_lxml.root.children[0].tag == "item" + assert res_lxml.root.children[0].text == "Value" + def test_public_api_ingestor_handles_xml_comments(): - from semantica.ingest.public_api_ingestor import PublicAPIIngestor + from semantica.ingest.public_api_ingestor import ( + PublicAPIIngestor, + lxml_etree as real_lxml_etree, + safe_xml_etree as real_safe_xml_etree, + ) + + if real_lxml_etree is None and real_safe_xml_etree is None: + pytest.skip("neither defusedxml nor lxml installed (requires semantica[documents]/[explorer])") xml_content = "Value" ingestor = PublicAPIIngestor(rate_limit_delay=0) @@ -403,7 +414,9 @@ def test_public_api_ingestor_handles_xml_comments(): assert parsed["children"][0]["tag"] == "item" assert parsed["children"][0]["text"] == "Value" - # 2. lxml fallback + # 2. lxml fallback (only meaningful when lxml is actually installed) + if real_lxml_etree is None: + pytest.skip("lxml not installed (requires semantica[documents])") with patch("semantica.ingest.public_api_ingestor.safe_xml_etree", None): parsed_lxml = ingestor._parse_xml(xml_content) assert parsed_lxml["tag"] == "root" From 5a0d6ea431dacab085df203c1640bde1e2003bdf Mon Sep 17 00:00:00 2001 From: yanyushuai <2486857908@qq.com> Date: Tue, 8 Sep 2026 18:17:05 +0800 Subject: [PATCH 14/14] Fix/parse and qdrant vector store (#1508) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix(parse): stop infinite recursion in default method dispatch parse_document and its five sibling dispatchers (parse_web_content, parse_structured_data, parse_email, parse_code, parse_media) were registered in the method registry under their own task's "default" name. Every dispatcher begins with method_registry.get(, method), so calling e.g. parse_document(file, method="default") found itself in the registry and re-entered infinitely until RecursionError -- `semantica parse ` crashed before any parsing ran. Drop the six self-registrations. "default" remains the built-in code path; users can still register their own "default" (or any other name) to override it, and the existing "docling" registration is unaffected. Verified: `semantica parse demo.pdf` now parses successfully (was RecursionError). No repo code or tests consume get_parse_method("document", "default"), so removing the entries changes no behavior besides fixing the crash. Co-Authored-By: Claude Code * fix(deps): make resolution satisfiable on Python 3.9 and add parse-pdf extra Dependency fixes so `uv lock` / `pip install semantica[all]` resolves across the supported matrix (3.9-3.12): - requires-python >=3.8 was unsatisfiable (numpy>=2.0.2 needs >=3.9) and 3.9.0/3.9.1 can never resolve (every cryptography release excludes them) -> bump to >=3.9.2 and drop the 3.8 classifier. - Split recently-raised floors that dropped 3.9 into marker pairs (3.9-capped / 3.10-unconstrained), following the pattern already used for scikit-learn/requests/etc.: pyarrow extras (>=24 needs 3.10), pre-commit 4.6, snowflake-connector 4.6, fastapi 0.129 + starlette 0.53 (older fastapi caps starlette<0.53). - Gate docling, litellm (its only 3.9 release pins python-dotenv==1.0.1, conflicting with the >=1.2.1 core floor), and crewai (no un-yanked 3.9 release) to >=3.10. Also add a parse-pdf extra: the default PDFParser requires pdfplumber, but no extra installed it, so `semantica parse file.pdf` failed on a default install. Follows the parse-docling convention. Co-Authored-By: Claude Code * fix(vector-store): make the qdrant backend usable through VectorStore The qdrant backend could not be used at all through the VectorStore facade in 0.6.8 - every path raised: 1. store_vectors() only dispatched to backend add/add_vectors methods; QdrantStore exposes insert_vectors, so vs.store() raised NotImplementedError. Add an insert_vectors branch (uuid-generated ids, metadata -> payloads). 2. QdrantStore required an explicit create_collection() before any read or write, unlike FAISSStore's automatic index creation. Lazily attach the configured collection (config key "collection", default "semantica_default") on first insert/search, reusing an existing one. 3. search_points() called client.search(), removed from qdrant-client in favor of query_points() - use it when available, fall back otherwise. 4. store() silently dropped plain-string documents (it only extracted doc.metadata), so payloads lost the source text; keep them under payload "document". Verified end-to-end against a Qdrant 5 server (docker): embed -> store -> semantic search returns correctly ranked results whose payloads carry the original documents. Co-Authored-By: Claude Code * fix(vector-store): address Qodo review findings on the qdrant write path Four findings from the Qodo review of #1508: 1. store_vectors() returned QdrantStore.insert_vectors()' upsert status dict although the facade promises the stored vector IDs (decision storage indexes the result at position 0). Return the generated or caller-supplied IDs after a successful insert instead. 2. insert_vectors() pairs points with zip(vectors, ids), so a shorter non-empty id list silently dropped the unpaired vectors while the completion message still reported the full batch as inserted. Reject the mismatch with ValidationError before any write. 3. _ensure_default_collection() looked up the legacy "collection" config key, so the documented collection_name=... option was ignored and lazy init always fell back to semantica_default. Prefer collection_name, keep "collection" as an alias. 4. The new parse-pdf extra was missing from both aggregate "all" bundles, so semantica[all] still shipped without pdfplumber and the default PDFParser raised ProcessingError on first use. Also removes the now-stale strict xfail for qdrant's write dispatch in test_backend_facade_contract.py — that marker exists precisely to fail once the wiring lands. Co-Authored-By: Claude Code * test(vector-store): migrate qdrant mocks to the query_points API The qdrant search path now prefers client.query_points() (qdrant-client removed client.search), but these tests still mocked the legacy call. A MagicMock exposes query_points too, so the code took the modern path, read .points off an unconfigured mock, and all three tests failed on the branch. Return the hits in response.points as the real client does. Co-Authored-By: Claude Code * fix(ci): regenerate requirements-ci.txt for the parse-pdf extra The CI lockfile check re-resolves pyproject.toml --extra all and diffs the pinned versions against requirements-ci.txt. The parse-pdf extra added pdfplumber (+pdfminer-six) to the 'all' bundle without refreshing the lockfile, so the diff failed and the build job exited 1. Regenerated with the command from the file header. Only the two new pins and their 'via' comments changed - every other version is identical. Verified locally with the CI's own check command (diff of pkg==ver lines exits clean). Co-Authored-By: Claude Code * fix(tests): update stale default-method-registration assertion test_parse_methods_dynamic_default_resolution asserted that "default" resolves through the registry to parse_document, which was true only because of the self-registration this PR removes (it's what caused the infinite recursion in the first place). Update the assertion to match the intended post-fix state: "default" is not registered at all, and falls through to the built-in dispatch path unconditionally. Co-Authored-By: Claude Sonnet 5 --------- Co-authored-by: yanyu Co-authored-by: Claude Code Co-authored-by: Mohd Kaif <98801504+KaifAhmad1@users.noreply.github.com> Co-authored-by: KaifAhmad1 --- pyproject.toml | 65 +++++++-- requirements-ci.txt | 18 ++- semantica/parse/methods.py | 13 +- semantica/vector_store/qdrant_store.py | 46 +++++-- semantica/vector_store/vector_store.py | 17 ++- tests/test_issue_1513_slim_core.py | 19 +-- tests/test_pyproject_extras.py | 36 +++++ .../test_backend_facade_contract.py | 9 +- .../vector_store/test_qdrant_facade_writes.py | 126 ++++++++++++++++++ .../vector_store/test_search_result_schema.py | 8 +- .../test_vector_store_deepdive.py | 4 +- 11 files changed, 310 insertions(+), 51 deletions(-) create mode 100644 tests/test_pyproject_extras.py create mode 100644 tests/vector_store/test_qdrant_facade_writes.py diff --git a/pyproject.toml b/pyproject.toml index 9a2f9481..95abee0e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -12,7 +12,11 @@ license = { text = "MIT" } authors = [{ name = "Semantica", email = "kaif@getsemantica.ai" }] maintainers = [{ name = "Semantica", email = "kaif@getsemantica.ai" }] -requires-python = ">=3.8" +# 3.8 is already unsatisfiable in practice (numpy>=2.0.2 requires >=3.9) and is +# not exercised by the Install Matrix (3.9-3.12). The floor is 3.9.2 rather +# than 3.9.0 because cryptography (db-snowflake) excludes 3.9.0/3.9.1 from +# every release's requires-python, so those patch levels can never resolve. +requires-python = ">=3.9.2" classifiers = [ "Development Status :: 5 - Production/Stable", @@ -22,7 +26,6 @@ classifiers = [ "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", @@ -111,7 +114,10 @@ llm-anthropic = ["anthropic>=0.122.0"] llm-ollama = ["ollama>=0.1.0"] llm-deepseek = ["openai>=1.0.0"] llm-novita = ["openai>=1.0.0"] -llm-litellm = ["litellm>=1.83.9"] +# litellm>=1.83.10 requires Python>=3.10, and the last 3.9-compatible release +# (1.83.9) pins python-dotenv==1.0.1, which conflicts with our >=1.2.1 core +# floor — so no litellm satisfies 3.9 at all. Gate it to 3.10+. +llm-litellm = ["litellm>=1.83.9; python_version >= '3.10'"] llm-instructor = ["instructor>=1.15.3"] llm-all = [ @@ -125,18 +131,41 @@ documents = [ "lxml>=6.1.1", "beautifulsoup4>=4.15.0" ] -parse-docling = ["docling>=2.107.0"] +# every docling release requires Python>=3.10 (no 3.9-compatible version +# exists to cap to), so gate it like google-adk below rather than split it. +parse-docling = ["docling>=2.107.0; python_version >= '3.10'"] +# pdfplumber powers the default PDFParser; not pulled in by any other extra. +parse-pdf = ["pdfplumber>=0.10.0"] # ---- SHACL Validation ---- shacl = ["pyshacl>=0.25.0"] # ---- Database Connectors ---- -db-snowflake = ["snowflake-connector-python>=4.6.0", "cryptography>=49.0.0"] +# snowflake-connector-python dropped Python 3.9 support at 4.6.0 +# (requires_python >=3.10), so an unqualified >=4.6.0 floor is unsatisfiable +# on 3.9. Cap 3.9 below it; 3.10+ keeps the newer floor. +db-snowflake = [ + "snowflake-connector-python>=4.6.0; python_version >= '3.10'", + "snowflake-connector-python>=3.13.0,<4.6.0; python_version < '3.10'", + "cryptography>=49.0.0" +] db-databricks = ["databricks-sdk>=0.60.0", "databricks-sql-connector>=4.0.0"] -db-arrow = ["pyarrow>=24.0.0"] +# pyarrow dropped Python 3.9 support at 24.0.0 (requires_python >=3.10), so an +# unqualified >=24.0.0 floor is unsatisfiable on 3.9. Cap 3.9 below the last +# 3.9-compatible release line; 3.10+ is left unconstrained. +db-arrow = [ + "pyarrow>=24.0.0; python_version >= '3.10'", + "pyarrow>=14.0.0,<24.0.0; python_version < '3.10'" +] db-salesforce = ["simple-salesforce>=1.12.0"] -ingest-parquet = ["pyarrow>=24.0.0"] -ingest-arrow = ["pyarrow>=24.0.0"] +ingest-parquet = [ + "pyarrow>=24.0.0; python_version >= '3.10'", + "pyarrow>=14.0.0,<24.0.0; python_version < '3.10'" +] +ingest-arrow = [ + "pyarrow>=24.0.0; python_version >= '3.10'", + "pyarrow>=14.0.0,<24.0.0; python_version < '3.10'" +] ingest-sap = ["requests>=2.28.0"] ingest-git = ["GitPython>=3.1.58"] @@ -242,7 +271,9 @@ agno = ["agno>=1.0.0"] # crewai core provides BaseTool and BaseKnowledgeSource; crewai-tools is not # needed (it pulls vulnerable transitive deps like chromadb) and would only # duplicate the prebuilt tooling users can install separately. -crewai = ["crewai>=0.80.0"] +# No un-yanked crewai release supports Python 3.9 (all require >=3.10), so +# gate the extra to 3.10+. +crewai = ["crewai>=0.80.0; python_version >= '3.10'"] langchain = ["langchain-core>=0.3.0"] google-adk = ["google-adk>=1.27.0; python_version >= '3.10'"] @@ -267,15 +298,23 @@ dev = [ "isort>=6.1.0", "flake8>=4.0.0", "mypy>=0.971", - "pre-commit>=4.6.0", + # pre-commit dropped Python 3.9 support at 4.6.0 (requires_python >=3.10). + # Cap 3.9 below it; 3.10+ keeps the >=4.6.0 floor. + "pre-commit>=4.0.0,<4.6.0; python_version < '3.10'", + "pre-commit>=4.6.0; python_version >= '3.10'", "jupyter>=1.0.0", "ipykernel>=6.15.0" ] # Explorer Dashboard +# fastapi dropped Python 3.9 support at 0.129.0 (requires_python >=3.10), and +# every fastapi below that caps starlette<0.53.0 — so the 3.10+ starlette +# floor is unsatisfiable on 3.9. Cap both on 3.9; 3.10+ keeps the newer floors. explorer = [ - "fastapi>=0.109.2", - "starlette>=0.53.0", + "fastapi>=0.109.2,<0.129.0; python_version < '3.10'", + "fastapi>=0.109.2; python_version >= '3.10'", + "starlette>=0.36.3,<0.53.0; python_version < '3.10'", + "starlette>=0.53.0; python_version >= '3.10'", "uvicorn[standard]>=0.22.0", "websockets>=15.0.1", "python-multipart>=0.0.7", @@ -292,7 +331,7 @@ explorer-lite = [ # (CVE-2026-45829) with no fixed release — including it here would fail the CI # dependency-audit/security gates. Install it explicitly via ``semantica[crewai]``. all = [ - "semantica[dev,viz,media,infra,cloud,monitoring,watch,llm-all,models-huggingface,embeddings-local,nlp-spacy,documents,ingest-git,graph-embeddings,split-all,graph-all,tripletstore-oxigraph,vectorstore-all,parse-docling,ingest-parquet,ingest-arrow,shacl,explorer,agno,langchain,google-adk]" + "semantica[dev,viz,media,infra,cloud,monitoring,watch,llm-all,models-huggingface,embeddings-local,nlp-spacy,documents,ingest-git,graph-embeddings,split-all,graph-all,tripletstore-oxigraph,vectorstore-all,parse-docling,parse-pdf,ingest-parquet,ingest-arrow,shacl,explorer,agno,langchain,google-adk]" ] # ---------------- ENTRYPOINTS ---------------- diff --git a/requirements-ci.txt b/requirements-ci.txt index c90c394f..3ee108c2 100644 --- a/requirements-ci.txt +++ b/requirements-ci.txt @@ -787,7 +787,9 @@ charset-normalizer==3.5.1 \ --hash=sha256:fd0350afdc3aabd5576f60ea109228bd5538139713c7b094c5cd27c73a98bc6f \ --hash=sha256:fd0a274c0e5f9a21565cd9d3dd749b61f96b7aa1e20a93aa1ba4029518f2e5c0 \ --hash=sha256:fdb8a068947befafba9952162645dc2fecaeb400e64584829ed5e9b2fbe21a7f - # via requests + # via + # pdfminer-six + # requests click==8.5.0 \ --hash=sha256:255bc9599cf7748b4b1a446ccc735421bd08a2ae529a8b88597d3de5664ee360 \ --hash=sha256:ba0d2089de75ea0310e2dde03160e6ca10009947fb95a182f9b54021bb272e34 @@ -1098,6 +1100,7 @@ cryptography==50.0.1 \ # azure-storage-blob # google-auth # joserfc + # pdfminer-six cuda-bindings==13.3.1 \ --hash=sha256:04436a9364059c84b8f9636f359eccda1cf814341f5b670c71d80d2f79dbc708 \ --hash=sha256:120fcc53d57903df529c3486962c56528cba5b7d6c57c99537320ed9922c8b86 \ @@ -4299,6 +4302,14 @@ patsy==1.0.3 \ --hash=sha256:79ebf4c93ff4d296e58a9d5be2b2ee31bd49d737cf11d70ffbd8a44b2de42e65 \ --hash=sha256:d3dbebe8fd5f46e29912d030b63c6268647b59bf788a99e2af28a30234cf357c # via statsmodels +pdfminer-six==20260107 \ + --hash=sha256:366585ba97e80dffa8f00cebe303d2f381884d8637af4ce422f1df3ef38111a9 \ + --hash=sha256:96bfd431e3577a55a0efd25676968ca4ce8fd5b53f14565f85716ff363889602 + # via pdfplumber +pdfplumber==0.11.10 \ + --hash=sha256:7741ea81bf165b474b153e6789d10d18e06b6ddcf3ec84289c3ef2fed6802580 \ + --hash=sha256:b95b2d28c66efb0a794a83b88c6c6aea5987532a445d20a1cbcfa657022e6e57 + # via semantica (pyproject.toml) pexpect==4.9.0 \ --hash=sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523 \ --hash=sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f @@ -4407,6 +4418,7 @@ pillow==12.3.0 \ # docling-slim # fastembed # matplotlib + # pdfplumber # python-pptx # rapidocr # torchvision @@ -5294,7 +5306,9 @@ pypdfium2==5.13.0 \ --hash=sha256:d96929bde3bd64c771ab3558ca1ffd7704cc4d872ab92cd9f8f8b8a20f7f36b8 \ --hash=sha256:d96beb7f379e6c76d874ca93fcd182ac3168dd499056407070f9927fb1061b8e \ --hash=sha256:da5c7b74eebf40b5c1fbe1de01aa1edc8827a79fb1efd999616bc20dcaf77ba4 - # via docling-slim + # via + # docling-slim + # pdfplumber pypickle==2.0.2 \ --hash=sha256:d3307127314465fe3dc8f0162e11777d5e8284f3a29dc48b0f770d364a85d998 \ --hash=sha256:d577e39cf501c7c80b1387f6d7dc885cf4efeba65f213df41226d1f24881b1e8 diff --git a/semantica/parse/methods.py b/semantica/parse/methods.py index 9eb44ae7..7c18b69b 100644 --- a/semantica/parse/methods.py +++ b/semantica/parse/methods.py @@ -859,10 +859,9 @@ def list_available_methods(task: Optional[str] = None) -> Dict[str, List[str]]: return method_registry.list_all(task) -# Register default methods -method_registry.register("document", "default", parse_document) -method_registry.register("web", "default", parse_web_content) -method_registry.register("structured", "default", parse_structured_data) -method_registry.register("email", "default", parse_email) -method_registry.register("code", "default", parse_code) -method_registry.register("media", "default", parse_media) +# NOTE: the built-in dispatchers (parse_document, parse_web_content, ...) must +# NOT be registered under their own task's "default" method name. Each +# dispatcher starts with method_registry.get(, method) and would find +# itself, re-entering infinitely until RecursionError. "default" is the +# built-in code path and stays unregistered; users can still register their +# own "default" (or any other name) to override it. diff --git a/semantica/vector_store/qdrant_store.py b/semantica/vector_store/qdrant_store.py index 04083498..6e6b85b6 100644 --- a/semantica/vector_store/qdrant_store.py +++ b/semantica/vector_store/qdrant_store.py @@ -384,6 +384,27 @@ class QdrantStore: except Exception as e: raise ProcessingError(f"Failed to get collection: {str(e)}") + def _ensure_default_collection(self, dim: int = 384) -> QdrantCollection: + """Lazily attach the configured collection, creating it on first use. + + Mirrors FAISSStore's automatic index creation so the VectorStore + facade can read/write without an explicit create_collection() call. + Reuses the existing collection if a previous process created it. + """ + # ``collection_name`` is the option the VectorStore facade and the + # docs pass through; accept the legacy ``collection`` spelling too. + name = ( + self.config.get("collection_name") + or self.config.get("collection") + or "semantica_default" + ) + try: + self.create_collection(name, vector_size=dim) + except ProcessingError: + self.get_collection(name) + self.logger.info(f"Auto-initialized Qdrant collection '{name}' (dim={dim})") + return self.collection + def insert_vectors( self, vectors: List[Union[np.ndarray, List[float]]], @@ -403,6 +424,14 @@ class QdrantStore: Returns: Insert response """ + if len(ids) != len(vectors): + # Points are paired with zip(vectors, ids), so a mismatched ID + # list would silently drop the unpaired vectors while the + # completion message still reports the full batch as inserted. + raise ValidationError( + f"Number of ids ({len(ids)}) must match number of vectors ({len(vectors)})" + ) + tracking_id = self.progress_tracker.start_tracking( module="vector_store", submodule="QdrantStore", @@ -411,12 +440,10 @@ class QdrantStore: try: if self.collection is None: - self.progress_tracker.stop_tracking( - tracking_id, status="failed", message="Collection not initialized" - ) - raise ProcessingError( - "Collection not initialized. Call create_collection() or get_collection() first." - ) + # len() not truthiness: vectors may be a 2-D ndarray, whose + # truth value is ambiguous. + dim = int(len(vectors[0])) if len(vectors) else 384 + self._ensure_default_collection(dim) if not QDRANT_AVAILABLE: self.progress_tracker.stop_tracking( @@ -481,12 +508,7 @@ class QdrantStore: try: if self.search_engine is None: - self.progress_tracker.stop_tracking( - tracking_id, status="failed", message="Collection not initialized" - ) - raise ProcessingError( - "Collection not initialized. Call create_collection() or get_collection() first." - ) + self._ensure_default_collection(int(len(query_vector))) self.progress_tracker.update_tracking( tracking_id, message="Performing similarity search..." diff --git a/semantica/vector_store/vector_store.py b/semantica/vector_store/vector_store.py index e504a455..4e601443 100644 --- a/semantica/vector_store/vector_store.py +++ b/semantica/vector_store/vector_store.py @@ -68,6 +68,7 @@ License: MIT from typing import Any, Dict, List, Optional, Tuple, TypedDict, Union, cast import concurrent.futures import inspect +import uuid import numpy as np @@ -482,7 +483,11 @@ class VectorStore: doc_meta = doc.metadata elif isinstance(doc, dict): doc_meta = doc.get("metadata", {}) - + elif isinstance(doc, str): + # Plain-text documents: keep the text itself in the + # payload, otherwise it is silently dropped. + doc_meta = {"document": doc} + final_metadata[i].update(doc_meta) return self.store_vectors(vectors, metadata=final_metadata, **options) @@ -525,6 +530,16 @@ class VectorStore: if supports_metadata: return self._backend_store.add_vectors(vectors, metadata=metadata, **options) return self._backend_store.add_vectors(vectors, **options) + elif hasattr(self._backend_store, 'insert_vectors'): + # QdrantStore: insert_vectors(vectors, ids, payloads=None) + # upserts the points but returns the client's status dict, + # while this facade promises callers the stored vector IDs + # (decision storage indexes the result at position 0). + # metadata entries already carry the source document (folded + # in by store()), so they map directly to Qdrant payloads. + ids = options.pop('ids', None) or [str(uuid.uuid4()) for _ in range(len(vectors))] + self._backend_store.insert_vectors(vectors, ids, payloads=metadata, **options) + return ids else: raise NotImplementedError(f"Backend store {type(self._backend_store).__name__} does not have add or add_vectors method") diff --git a/tests/test_issue_1513_slim_core.py b/tests/test_issue_1513_slim_core.py index e617ac06..5b915c70 100644 --- a/tests/test_issue_1513_slim_core.py +++ b/tests/test_issue_1513_slim_core.py @@ -216,16 +216,19 @@ def test_salesforce_ingestor_package_import_missing_hint(): def test_parse_methods_dynamic_default_resolution(): - from semantica.parse.methods import ( - get_parse_method, - list_available_methods, - parse_document, - ) + """"default" must NOT be registered in the method registry: each built-in + dispatcher (parse_document, ...) starts with + method_registry.get(, method), so a self-registered "default" would + resolve to the dispatcher itself and recurse infinitely. "default" stays + the built-in code path, reached only by falling through an unregistered + lookup, and callers can still register their own "default" to override + it.""" + from semantica.parse.methods import get_parse_method, list_available_methods - assert get_parse_method("document", "default") == parse_document + assert get_parse_method("document", "default") is None methods = list_available_methods() - assert "default" in methods.get("document", []) - assert "default" in methods.get("structured", []) + assert "default" not in methods.get("document", []) + assert "default" not in methods.get("structured", []) def test_node_embedder_gensim_missing_hint(): diff --git a/tests/test_pyproject_extras.py b/tests/test_pyproject_extras.py new file mode 100644 index 00000000..d0b71a8d --- /dev/null +++ b/tests/test_pyproject_extras.py @@ -0,0 +1,36 @@ +"""Guard for the aggregate ``all`` extras in pyproject.toml. + +Review of #1508 caught ``parse-pdf`` missing from every ``all`` bundle: +``semantica[all]`` installed the package without pdfplumber, so the default +PDFParser raised ProcessingError on first use. tomllib is stdlib only from +Python 3.11, so the bundle block is parsed textually — the repo still +supports 3.9/3.10. +""" + +import re +from pathlib import Path + +PYPROJECT = Path(__file__).resolve().parents[1] / "pyproject.toml" + + +def _extras_in_all_bundles(): + """Collect every extra name referenced inside the ``all = [...]`` block.""" + text = PYPROJECT.read_text(encoding="utf-8") + match = re.search(r"^all = \[\n(.*?)^\]", text, re.MULTILINE | re.DOTALL) + assert match, "pyproject.toml must define an aggregate 'all' extra" + + names = set() + for bundle in re.findall(r"semantica\[([^\]]+)\]", match.group(1)): + names.update(part.strip() for part in bundle.split(",")) + assert names, "'all' bundles must reference at least one extra" + return names + + +def test_all_bundles_include_parse_pdf(): + """An all-features install must include built-in PDF parsing support.""" + assert "parse-pdf" in _extras_in_all_bundles() + + +def test_all_bundle_extraction_finds_known_extra(): + """Control: the extraction reads the right block (parse-docling is in).""" + assert "parse-docling" in _extras_in_all_bundles() diff --git a/tests/vector_store/test_backend_facade_contract.py b/tests/vector_store/test_backend_facade_contract.py index eb853581..4499baa0 100644 --- a/tests/vector_store/test_backend_facade_contract.py +++ b/tests/vector_store/test_backend_facade_contract.py @@ -50,10 +50,11 @@ CLOUD_BACKENDS = sorted(_AVAILABILITY_FLAG) # Backends that store locally and need no connection step. _LOCAL_BACKENDS = {"inmemory", "faiss", "sqlite", "pgvector"} -# The facade dispatches store_vectors() to `add` or `add_vectors`. Milvus -# exposes add_vectors so it already resolves; the other three name their write -# method differently and fall through to NotImplementedError. -_NO_WRITE_DISPATCH = {"qdrant", "pinecone", "weaviate"} +# The facade dispatches store_vectors() to `add`, `add_vectors`, or +# `insert_vectors`. Milvus exposes add_vectors and qdrant insert_vectors, so +# both resolve; the remaining two name their write method differently and fall +# through to NotImplementedError. +_NO_WRITE_DISPATCH = {"pinecone", "weaviate"} def _construct(backend): diff --git a/tests/vector_store/test_qdrant_facade_writes.py b/tests/vector_store/test_qdrant_facade_writes.py new file mode 100644 index 00000000..328988f9 --- /dev/null +++ b/tests/vector_store/test_qdrant_facade_writes.py @@ -0,0 +1,126 @@ +"""Regression tests for the Qdrant write path behind the VectorStore facade. + +Qodo review of #1508 found three bugs in the newly wired qdrant dispatch: +stored IDs were swallowed (the upsert status dict was returned instead), +mismatched ids/vectors silently truncated the write via zip(), and lazy +collection init ignored the documented ``collection_name`` option. These +tests pin all three. + +qdrant-client is not installed in this environment, so QDRANT_AVAILABLE is +patched and PointStruct is replaced with a plain stand-in, following the +pattern in test_vector_store_deepdive.py and test_qdrant_store.py. +""" + +from unittest.mock import MagicMock, patch + +import numpy as np +import pytest + +from semantica.utils.exceptions import ValidationError +from semantica.vector_store import VectorStore +from semantica.vector_store.qdrant_store import QdrantStore + +VECTORS = [np.array([1.0, 0.0, 0.0]), np.array([0.0, 1.0, 0.0])] +METADATA = [{"type": "a"}, {"type": "b"}] + + +class _Point: + """Stand-in for qdrant_client PointStruct that keeps the point id.""" + + def __init__(self, id, vector=None, payload=None): + self.id = id + self.vector = vector + self.payload = payload + + +def _qdrant_facade(**config): + """VectorStore built through the real qdrant init path, with the network + client and an attached collection replaced by mocks.""" + store = VectorStore(backend="qdrant", config={"dimension": 3, **config}) + backend = store._backend_store + backend.client = MagicMock() + backend.collection = MagicMock() + return store + + +@patch("semantica.vector_store.qdrant_store.PointStruct", _Point) +@patch("semantica.vector_store.qdrant_store.QDRANT_AVAILABLE", True) +def test_facade_returns_generated_ids_not_upsert_status(): + """store_vectors() promises callers the stored vector IDs; the qdrant + branch used to leak insert_vectors()' upsert status dict instead.""" + store = _qdrant_facade() + + ids = store.store_vectors(VECTORS, METADATA) + + assert isinstance(ids, list) + assert len(ids) == len(VECTORS) + assert all(isinstance(i, str) and i for i in ids) + upserted = store._backend_store.collection.upsert_points.call_args[0][0] + assert [p.id for p in upserted] == ids + + +@patch("semantica.vector_store.qdrant_store.PointStruct", _Point) +@patch("semantica.vector_store.qdrant_store.QDRANT_AVAILABLE", True) +def test_facade_returns_caller_supplied_ids_verbatim(): + store = _qdrant_facade() + + ids = store.store_vectors(VECTORS, METADATA, ids=["doc-a", "doc-b"]) + + assert ids == ["doc-a", "doc-b"] + + +@pytest.mark.parametrize("ids", [["doc-a"], ["doc-a", "doc-b", "doc-c"]]) +@patch("semantica.vector_store.qdrant_store.PointStruct", _Point) +@patch("semantica.vector_store.qdrant_store.QDRANT_AVAILABLE", True) +def test_facade_rejects_ids_count_mismatch(ids): + """insert_vectors() pairs points with zip(vectors, ids); a mismatched + batch must fail loudly instead of silently dropping vectors.""" + store = _qdrant_facade() + + with pytest.raises(ValidationError, match="must match number of vectors"): + store.store_vectors(VECTORS, METADATA, ids=ids) + store._backend_store.collection.upsert_points.assert_not_called() + + +@patch("semantica.vector_store.qdrant_store.PointStruct", _Point) +@patch("semantica.vector_store.qdrant_store.QDRANT_AVAILABLE", True) +def test_backend_insert_vectors_rejects_count_mismatch(): + """Direct QdrantStore callers get the same guard as facade callers.""" + store = QdrantStore() + store.client = MagicMock() + store.collection = MagicMock() + + with pytest.raises(ValidationError, match="must match number of vectors"): + store.insert_vectors(VECTORS, ["only-one"]) + store.collection.upsert_points.assert_not_called() + + +def _lazy_collection_name(store): + """Drive _ensure_default_collection and report the name it selected.""" + store.client = MagicMock() + with ( + patch.object(store, "create_collection") as create, + patch.object(store, "get_collection"), + ): + store._ensure_default_collection(3) + return create.call_args[0][0] + + +def test_lazy_collection_uses_documented_collection_name(): + """The docs and facade configure qdrant with collection_name=...; lazy + init used to look up 'collection' and always fall back to the default.""" + store = QdrantStore(collection_name="semantica") + + assert _lazy_collection_name(store) == "semantica" + + +def test_lazy_collection_accepts_legacy_collection_alias(): + store = QdrantStore(collection="legacy_name") + + assert _lazy_collection_name(store) == "legacy_name" + + +def test_lazy_collection_defaults_without_config(): + store = QdrantStore() + + assert _lazy_collection_name(store) == "semantica_default" diff --git a/tests/vector_store/test_search_result_schema.py b/tests/vector_store/test_search_result_schema.py index cdae2337..4080870e 100644 --- a/tests/vector_store/test_search_result_schema.py +++ b/tests/vector_store/test_search_result_schema.py @@ -112,7 +112,9 @@ class TestQdrantSearchSchema(unittest.TestCase): mock_hit.id = "q_1" mock_hit.score = 0.88 mock_hit.payload = {"category": "x"} - mock_client.search.return_value = [mock_hit] + # search_points prefers the modern query_points API; a MagicMock + # exposes it, so the response must carry the hits in .points. + mock_client.query_points.return_value = MagicMock(points=[mock_hit]) coll = QdrantCollection(mock_client, "test_col") results = coll.search_points(np.array([0.1, 0.2]), limit=1) @@ -132,7 +134,9 @@ class TestQdrantSearchSchema(unittest.TestCase): mock_hit_high = MagicMock(id="q_hi", score=50.0, payload={}) mock_hit_mid = MagicMock(id="q_mid", score=2.0, payload={}) mock_hit_low = MagicMock(id="q_lo", score=1.0, payload={}) - mock_client.search.return_value = [mock_hit_high, mock_hit_mid, mock_hit_low] + mock_client.query_points.return_value = MagicMock( + points=[mock_hit_high, mock_hit_mid, mock_hit_low] + ) coll = QdrantCollection(mock_client, "test_col") results = coll.search_points(np.array([0.1, 0.2]), limit=3) diff --git a/tests/vector_store/test_vector_store_deepdive.py b/tests/vector_store/test_vector_store_deepdive.py index ed31e5d3..bee512b7 100644 --- a/tests/vector_store/test_vector_store_deepdive.py +++ b/tests/vector_store/test_vector_store_deepdive.py @@ -209,12 +209,12 @@ class TestVectorStoreDeepDive(unittest.TestCase): mock_client = MagicMock() mock_qdrant_cls.return_value = mock_client - # Mock search response + # Mock search response (modern query_points API: hits in .points) mock_hit = MagicMock() mock_hit.id = "vec_1" mock_hit.score = 0.9 mock_hit.payload = {"type": "a"} - mock_client.search.return_value = [mock_hit] + mock_client.query_points.return_value = MagicMock(points=[mock_hit]) store = QdrantStore(url="http://localhost:6333")