FlashDreams
diff --git a/docs/source/models/index.md b/docs/source/models/index.md
index fb4b18607..2554d7100 100644
--- a/docs/source/models/index.md
+++ b/docs/source/models/index.md
@@ -67,7 +67,7 @@ These models enhance an existing video stream rather than generating a scene fro
Follow
[Create a model](../documentation/inferencing_api/guides/create_model.md) for
the model package, then
-[Integrate a model with a demo](../documentation/demo_api/guides/integrate_model.md)
+[Integrate model adapter for a demo](../documentation/demo_api/guides/integrate_model_adapter_for_a_demo.md)
to register a runnable application.
## Related
diff --git a/docs/source/models/wan21.md b/docs/source/models/wan21.md
index 6e46f26ab..b9b57036b 100644
--- a/docs/source/models/wan21.md
+++ b/docs/source/models/wan21.md
@@ -35,10 +35,22 @@ uv run --no-sync flashdreams-run-v2 \
```
+### Minimal T2V
+
+```bash
+uv sync --package flashdreams-wan21 --inexact
+uv run --no-sync flashdreams-run-v2 minimal-t2v-wan21 --mode native-window -- --default-prompt "A cat surfing"
+```
+
+
+
## Demo Presets
@@ -51,6 +63,14 @@ uv run --no-sync flashdreams-run-v2 \
| --- | --- |
| `t2v-wan21-t2v-1.3b-480p` | Wan 2.1 T2V 1.3B at 480p with a single bidirectional block. |
+
+
+### Minimal T2V
+
+| Preset | Description |
+| --- | --- |
+| `minimal-t2v-wan21` | [Minimal T2V app](../demos/minimal_t2v.md) with Wan 2.1 T2V 1.3B at 480p, generating one block per prompt. |
+
## Developer Details
diff --git a/docs/source/quickstart/index.md b/docs/source/quickstart/index.md
index 44e6a28f9..ac1475e67 100644
--- a/docs/source/quickstart/index.md
+++ b/docs/source/quickstart/index.md
@@ -63,6 +63,19 @@ See our [How to Run a Model](../models/index.md#running-a-model) for more inform
- See our [Omnidreams Overview](../models/omnidreams.md) for a brief Omnidreams world-model overview.
- See our [Interactive Drive Overview](../demos/interactive_drive.md) for more information on the demo.
+## Install one integration
+
+Install only the model package you need with `--package`. Add `--extra dev`
+when working on its code:
+
+```bash
+uv sync --package flashdreams-omnidreams --extra dev --inexact
+```
+
+Use the distribution name from the integration's `pyproject.toml`.
+See [Models](../models/index.md) for available integrations, requirements, and
+setup commands. See [Testing](../documentation/tools/testing.md) for test commands.
+
## Where to next
- [Model Gallery](../models/index.md): Every FlashDreams default-shipped model & how to run models!
diff --git a/docs/zensical.toml b/docs/zensical.toml
index 8fcb3c864..ba55481b6 100644
--- a/docs/zensical.toml
+++ b/docs/zensical.toml
@@ -45,9 +45,24 @@ md_in_html = {}
tables = {}
pymdownx.details = {}
pymdownx.superfences = {}
+pymdownx.snippets = { base_path = ["."], check_paths = true }
pymdownx.arithmatex.generic = true
[project.plugins.awesome-nav]
+[project.plugins.mkdocstrings.handlers.python]
+paths = ["../flashdreams"]
+
+[project.plugins.mkdocstrings.handlers.python.options]
+docstring_style = "google"
+members_order = "source"
+merge_init_into_class = true
+separate_signature = true
+show_root_full_path = true
+show_root_heading = true
+show_signature_annotations = true
+show_source = true
+signature_crossrefs = true
+
[project.extra]
generator = false
diff --git a/flashdreams/flashdreams/accelerated/__init__.py b/flashdreams/flashdreams/accelerated/__init__.py
new file mode 100644
index 000000000..52a7a9daf
--- /dev/null
+++ b/flashdreams/flashdreams/accelerated/__init__.py
@@ -0,0 +1,2 @@
+# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
+# SPDX-License-Identifier: Apache-2.0
diff --git a/flashdreams/flashdreams/accelerated/quantization/__init__.py b/flashdreams/flashdreams/accelerated/quantization/__init__.py
new file mode 100644
index 000000000..52a7a9daf
--- /dev/null
+++ b/flashdreams/flashdreams/accelerated/quantization/__init__.py
@@ -0,0 +1,2 @@
+# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
+# SPDX-License-Identifier: Apache-2.0
diff --git a/flashdreams/flashdreams/infra/__init__.py b/flashdreams/flashdreams/infra/__init__.py
new file mode 100644
index 000000000..9ef615b94
--- /dev/null
+++ b/flashdreams/flashdreams/infra/__init__.py
@@ -0,0 +1,4 @@
+# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
+# SPDX-License-Identifier: Apache-2.0
+
+"""Shared infrastructure for model integrations."""
diff --git a/flashdreams/flashdreams/infra/diffusion/__init__.py b/flashdreams/flashdreams/infra/diffusion/__init__.py
new file mode 100644
index 000000000..592a63868
--- /dev/null
+++ b/flashdreams/flashdreams/infra/diffusion/__init__.py
@@ -0,0 +1,4 @@
+# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
+# SPDX-License-Identifier: Apache-2.0
+
+"""Diffusion model, transformer, and scheduler interfaces."""
diff --git a/flashdreams/flashdreams/runtime_v2/README.md b/flashdreams/flashdreams/runtime_v2/README.md
index 064974c7c..6f2cd1398 100644
--- a/flashdreams/flashdreams/runtime_v2/README.md
+++ b/flashdreams/flashdreams/runtime_v2/README.md
@@ -218,7 +218,7 @@ then the new session receives zero remaining time and stops at its first boundar
results as they are published, not the UI loop's output, so a benchmark measures
what the model generated while the window still sees one composited frame per
tick. See [`configs/v2_model_benchmarks.json`](../../../configs/v2_model_benchmarks.json)
-and the [benchmark README](../../tools/benchmarks/README.md) for the suite.
+and the [benchmarking guide](https://nvidia.github.io/flashdreams/main/documentation/tools/benchmarking/) for the suite.
The runtime augments those model records with step wall time and
presentation-queue depth/publish-wait measurements under the reserved
`runtime_` metric prefix. UI and window timings are not folded into a later
diff --git a/integrations_v2/README.md b/integrations_v2/README.md
index 33a715db2..21ea59067 100644
--- a/integrations_v2/README.md
+++ b/integrations_v2/README.md
@@ -6,10 +6,10 @@ SPDX-License-Identifier: Apache-2.0
Applications built on the v2 API. Each directory is a standalone package that
depends on `flashdreams` and holds no framework code of its own.
-This is the guide to writing one. If the model generates video from a prompt,
-read [`apps/t2v`](../apps/t2v/README.md)
-instead, that path is a subclass and a `pyproject.toml`, and most of what
-follows is already done for you.
+For new work, follow the website's
+[Create a model](../docs/source/documentation/inferencing_api/guides/create_model.md)
+and [Integrate model adapter for a demo](../docs/source/documentation/demo_api/guides/integrate_model_adapter_for_a_demo.md)
+guides. They are the canonical authoring instructions.
## What is here
@@ -42,7 +42,6 @@ follows is already done for you.
```text
integrations_v2/
/
pyproject.toml
- README.md
__init__.py
config.py # collection of pipeline definitions for a particular ``
impl/ # implementation details of a model
@@ -51,7 +50,8 @@ integrations_v2//
/
__init__.py
adapter.py # all entry point definitions for `` (ex: `create_app`)
- README.md # launch instructions only
+
+docs/source/models/.md # canonical website article
```
The workspace glob in the root `pyproject.toml` picks up any directory here
@@ -278,5 +278,6 @@ halves for text-to-video models.
in detail.
- [Runtime](../flashdreams/flashdreams/runtime_v2/README.md) - the buffering
between those threads, and the command line that starts them.
-- [`apps/t2v`](../apps/t2v/README.md) - adding a
- text-to-video model.
+- [Create a model](../docs/source/documentation/inferencing_api/guides/create_model.md)
+ and [Integrate model adapter for a demo](../docs/source/documentation/demo_api/guides/integrate_model_adapter_for_a_demo.md)
+ cover new model and text-to-video integrations.
diff --git a/integrations_v2/wan21/apps/minimal_t2v/__init__.py b/integrations_v2/wan21/apps/minimal_t2v/__init__.py
new file mode 100644
index 000000000..52a7a9daf
--- /dev/null
+++ b/integrations_v2/wan21/apps/minimal_t2v/__init__.py
@@ -0,0 +1,2 @@
+# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
+# SPDX-License-Identifier: Apache-2.0
diff --git a/integrations_v2/wan21/apps/minimal_t2v/adapter.py b/integrations_v2/wan21/apps/minimal_t2v/adapter.py
new file mode 100644
index 000000000..236307d0d
--- /dev/null
+++ b/integrations_v2/wan21/apps/minimal_t2v/adapter.py
@@ -0,0 +1,22 @@
+# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
+# SPDX-License-Identifier: Apache-2.0
+
+"""Wan 2.1 adapter for the Minimal T2V application."""
+
+from minimal_t2v import MinimalT2VApplication
+
+from flashdreams.runtime_v2.session_desc import SessionDesc
+from wan21.config import PIPELINE_WAN21_T2V_1PT3B_480P
+
+
+def create_app() -> MinimalT2VApplication:
+ """Return Minimal T2V with Wan 2.1's single-block pipeline."""
+ return MinimalT2VApplication(
+ pipeline_config=PIPELINE_WAN21_T2V_1PT3B_480P,
+ desc=SessionDesc(
+ video_width=832,
+ video_height=480,
+ frames_per_second_for_step=16,
+ ),
+ total_blocks=1,
+ )
diff --git a/integrations_v2/wan21/pyproject.toml b/integrations_v2/wan21/pyproject.toml
index 2881c915f..d5977188c 100644
--- a/integrations_v2/wan21/pyproject.toml
+++ b/integrations_v2/wan21/pyproject.toml
@@ -16,10 +16,12 @@ dependencies = [
"mediapy>=1.1",
"opencv-python-headless>=4.5",
"flashdreams-t2v",
+ "flashdreams-minimal-t2v",
]
[tool.uv.sources]
flashdreams-t2v = { workspace = true }
+flashdreams-minimal-t2v = { workspace = true }
flashdreams = { workspace = true }
[project.optional-dependencies]
@@ -29,9 +31,10 @@ dev = [
[project.entry-points."flashdreams.applications_v2"]
"t2v-wan21-t2v-1.3b-480p" = "wan21.apps.t2v.adapter:create_app"
+"minimal-t2v-wan21" = "wan21.apps.minimal_t2v.adapter:create_app"
[tool.setuptools]
-packages = ["wan21", "wan21.apps", "wan21.apps.t2v", "wan21.impl"]
+packages = ["wan21", "wan21.apps", "wan21.apps.t2v", "wan21.apps.minimal_t2v", "wan21.impl"]
[tool.setuptools.package-dir]
wan21 = "."
diff --git a/integrations_v2/wan21/tests/test_minimal_t2v.py b/integrations_v2/wan21/tests/test_minimal_t2v.py
new file mode 100644
index 000000000..6a79ca819
--- /dev/null
+++ b/integrations_v2/wan21/tests/test_minimal_t2v.py
@@ -0,0 +1,57 @@
+# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
+# SPDX-License-Identifier: Apache-2.0
+
+"""CPU check for the separately packaged Minimal T2V adapter."""
+
+from importlib.metadata import EntryPoint
+from pathlib import Path
+from unittest.mock import Mock
+
+import pytest
+import tomli
+import torch
+from minimal_t2v import MinimalT2VApplication
+from wan21.config import PIPELINE_WAN21_T2V_1PT3B_480P
+
+from flashdreams.runtime_v2.user_input_events import UserInputEvents
+
+pytestmark = pytest.mark.ci_cpu
+
+
+def test_registered_minimal_t2v_adapter() -> None:
+ metadata = tomli.loads((Path(__file__).parents[1] / "pyproject.toml").read_text())
+ assert "wan21.apps.minimal_t2v" in metadata["tool"]["setuptools"]["packages"]
+ target = metadata["project"]["entry-points"]["flashdreams.applications_v2"][
+ "minimal-t2v-wan21"
+ ]
+ assert target == "wan21.apps.minimal_t2v.adapter:create_app"
+ app = EntryPoint(
+ name="minimal-t2v-wan21", value=target, group="flashdreams.applications_v2"
+ ).load()()
+ assert isinstance(app, MinimalT2VApplication)
+ assert app.pipeline is None
+ assert app.pipeline_config is PIPELINE_WAN21_T2V_1PT3B_480P
+ assert app.total_blocks == 1
+ desc = app.session_desc()
+ assert (desc.video_width, desc.video_height) == (832, 480)
+ assert desc.frames_per_second_for_step == 16
+
+ pipeline = Mock()
+ pipeline.to.return_value = pipeline
+ pipeline.eval.return_value = pipeline
+ pipeline.decoder.spatial_compression_ratio = 8
+ pipeline.generate.return_value = torch.zeros(1, 3, 480, 832)
+ pipeline.finalize.return_value = {}
+ app.pipeline_config = Mock()
+ app.pipeline_config.setup.return_value = pipeline
+ app.init(["--default-prompt", "A cat surfing", "--device", "cpu"])
+ session = app.create_session(desc)
+ session.init()
+ result = session.model_loop.step(0, UserInputEvents([]))[0]
+ pipeline.initialize_cache.assert_called_once_with(
+ text=["A cat surfing"], height=60, width=104
+ )
+ assert result.read_output().shape == (1, 3, 480, 832)
+ assert session.model_loop.step(1, UserInputEvents([])) == []
+ session.model_loop.close()
+ app.close()
diff --git a/pyproject.toml b/pyproject.toml
index fea735b03..c6802a8ce 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -62,6 +62,7 @@ extraPaths = [
"apps",
"apps/cam2v",
"apps/t2v",
+ "apps/minimal_t2v",
"apps/crazy_robotaxi",
"apps/interactive_drive",
"apps/omnidreams_game_engine",
@@ -98,6 +99,7 @@ extra-paths = [
"apps",
"apps/cam2v",
"apps/t2v",
+ "apps/minimal_t2v",
"apps/action2v",
"apps/crazy_robotaxi",
"apps/interactive_drive",
@@ -195,6 +197,7 @@ lint = [
# Documentation site generator.
docs = [
+ "mkdocstrings-python>=2.0.9",
"zensical==0.0.67",
]
dev = [
diff --git a/tests/README.md b/tests/README.md
index d762841c4..bcc20d235 100644
--- a/tests/README.md
+++ b/tests/README.md
@@ -25,9 +25,9 @@ Both scripts resolve paths relative to their own location and can be invoked fro
## What gets run
-When no `TEST_TARGET` is given, each script runs `pytest` from the repo
-root. See `CONTRIBUTING.md` Testing for how files and functions are
-named.
+When no `TEST_TARGET` is given, each script runs `pytest` from the repo root.
+See [Testing](https://nvidia.github.io/flashdreams/main/documentation/tools/testing/) for discovery
+and CI tier markers.
Pytest is invoked with `-m "not manual"` so any test marked `@pytest.mark.manual`
is skipped.
diff --git a/tests/test_docs_links.py b/tests/test_docs_links.py
index 21c946487..2a155215f 100644
--- a/tests/test_docs_links.py
+++ b/tests/test_docs_links.py
@@ -1,7 +1,7 @@
# SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
# SPDX-License-Identifier: Apache-2.0
-"""Check local media and script paths in the documentation sources."""
+"""Check local links and media paths in the documentation sources."""
import re
from pathlib import Path
@@ -12,6 +12,11 @@
pytestmark = pytest.mark.ci_cpu
_DOCS_SOURCE = Path(__file__).parents[1] / "docs" / "source"
+_REPO_ROOT = _DOCS_SOURCE.parents[1]
+_MARKDOWN_LINK_RE = re.compile(r"\[[^]]*\]\(([^)#]+)(?:#([a-z0-9-]+))?\)")
+_CUSTOM_ANCHOR_RE = re.compile(r']*\btype="video/'
@@ -48,3 +53,115 @@ def test_documentation_motion_media_uses_avif() -> None:
legacy.append(f"{page.relative_to(_DOCS_SOURCE)}:{line}: {match.group(0)}")
assert not legacy, "Documentation motion media must use AVIF:\n" + "\n".join(legacy)
+
+
+def _anchors(path: Path) -> set[str]:
+ source = path.read_text(encoding="utf-8")
+ anchors = set(_CUSTOM_ANCHOR_RE.findall(source))
+ for heading in _HEADING_RE.findall(source):
+ slug = re.sub(r"[^\w -]", "", heading.lower()).strip().replace(" ", "-")
+ anchors.add(slug)
+ return anchors
+
+
+def _assert_local_section_link(source: Path, target: str, fragment: str) -> None:
+ page = (source.parent / target).resolve()
+ assert page.is_relative_to(_DOCS_SOURCE), (
+ f"{source.relative_to(_REPO_ROOT)}: canonical link leaves docs/source: "
+ f"{target}#{fragment}"
+ )
+ assert page.is_file(), (
+ f"{source.relative_to(_REPO_ROOT)}: missing canonical page: {target}"
+ )
+ assert not fragment or fragment in _anchors(page), (
+ f"{source.relative_to(_REPO_ROOT)}: missing section #{fragment} in "
+ f"{page.relative_to(_REPO_ROOT)}"
+ )
+
+
+def test_contributing_stays_on_github() -> None:
+ source = (_REPO_ROOT / "CONTRIBUTING.md").read_text(encoding="utf-8")
+ headings = set(_HEADING_RE.findall(source))
+ assert {
+ "Ways to contribute",
+ "Submitting a pull request",
+ "Adding documentation",
+ } <= headings
+ assert not (_DOCS_SOURCE / "community/contributing.md").exists()
+ assert _CONTRIBUTING_URL in (_DOCS_SOURCE / "community/index.md").read_text()
+
+
+def test_repository_links_resolve_to_canonical_sections() -> None:
+ sources = [_REPO_ROOT / "README.md", _REPO_ROOT / "tests/README.md"]
+ sources.extend(sorted((_REPO_ROOT / "skills").glob("*/SKILL.md")))
+
+ found = 0
+ for source in sources:
+ for target, fragment in _MARKDOWN_LINK_RE.findall(
+ source.read_text(encoding="utf-8")
+ ):
+ if target == _CONTRIBUTING_URL:
+ assert not fragment or fragment in _anchors(
+ _REPO_ROOT / "CONTRIBUTING.md"
+ )
+ found += 1
+ continue
+ website = "https://nvidia.github.io/flashdreams/main/"
+ if target.startswith(website):
+ route = target.removeprefix(website).rstrip("/")
+ page = _DOCS_SOURCE / route
+ assert page.suffix != ".md", (
+ f"Website link must use a rendered route: {target}"
+ )
+ if page.suffix == ".html":
+ page = page.with_suffix(".md")
+ elif page.is_dir():
+ page = page / "index.md"
+ elif not page.suffix:
+ page = page.with_suffix(".md")
+ _assert_local_section_link(source, str(page), fragment)
+ found += 1
+ continue
+ if urlsplit(target).scheme:
+ continue
+ page = (source.parent / target).resolve()
+ if source.name == "README.md":
+ assert page.exists(), f"Missing README link: {target}"
+ if page.is_relative_to(_DOCS_SOURCE):
+ _assert_local_section_link(source, target, fragment)
+ found += 1
+
+ assert found, "expected canonical links from repository guidance to docs/source"
+
+
+def test_readme_reference_links_have_definitions() -> None:
+ source = (_REPO_ROOT / "README.md").read_text(encoding="utf-8")
+ references = set(re.findall(r"\[[^]]+\]\[([^]]+)\]", source))
+ definitions = set(re.findall(r"^\[([^]]+)\]:", source, re.MULTILINE))
+ assert references <= definitions, (
+ f"Undefined README links: {references - definitions}"
+ )
+
+
+def test_demo_guide_navigation_matches_pages_and_cards() -> None:
+ navigation = (_DOCS_SOURCE / ".nav.yml").read_text(encoding="utf-8")
+ overview = (_DOCS_SOURCE / "documentation/demo_api/index.md").read_text(
+ encoding="utf-8"
+ )
+ entries = re.findall(
+ r"^\s+- ([^:]+): (documentation/demo_api/guides/[^\s]+\.md)$",
+ navigation,
+ re.MULTILINE,
+ )
+ assert entries, "expected Demo API guides in the sidebar"
+ for label, target in entries:
+ page = _DOCS_SOURCE / target
+ assert page.is_file(), f"Sidebar links to missing guide: {target}"
+ title = re.search(r"^title: ['\"](.+?)['\"]$", page.read_text(), re.MULTILINE)
+ assert title and title[1] == label, f"Sidebar title differs from {target}"
+ route = f"guides/{page.stem}/"
+ assert f'href="{route}"' in overview, f"Missing guide card: {route}"
+
+ routes = re.findall(r'href="(guides/[^\"]+/)"', overview)
+ expected = {f"guides/{Path(target).stem}/" for _, target in entries}
+ assert set(routes) == expected, "Guide cards and sidebar link to different pages"
diff --git a/uv.lock b/uv.lock
index ab665c037..91b21b3e0 100644
--- a/uv.lock
+++ b/uv.lock
@@ -31,6 +31,7 @@ members = [
"flashdreams-imgui-ui-demo",
"flashdreams-interactive-drive-v2",
"flashdreams-lingbot",
+ "flashdreams-minimal-t2v",
"flashdreams-null-model",
"flashdreams-omnidreams",
"flashdreams-red-screen",
@@ -60,7 +61,10 @@ build-constraints = [{ name = "setuptools", specifier = ">=83.0.0,<84" }]
[manifest.dependency-groups]
dev = [{ name = "python-dotenv", specifier = ">=1.2.2" }]
-docs = [{ name = "zensical", specifier = "==0.0.67" }]
+docs = [
+ { name = "mkdocstrings-python", specifier = ">=2.0.9" },
+ { name = "zensical", specifier = "==0.0.67" },
+]
lint = [
{ name = "imageio-ffmpeg", specifier = ">=0.5" },
{ name = "pre-commit", specifier = ">=4.3.0" },
@@ -1303,6 +1307,17 @@ requires-dist = [
]
provides-extras = ["dev"]
+[[package]]
+name = "flashdreams-minimal-t2v"
+version = "0.1.0"
+source = { editable = "apps/minimal_t2v" }
+dependencies = [
+ { name = "flashdreams", extra = ["local-window"] },
+]
+
+[package.metadata]
+requires-dist = [{ name = "flashdreams", extras = ["local-window"], editable = "flashdreams" }]
+
[[package]]
name = "flashdreams-null-model"
version = "0.1.0"
@@ -1562,6 +1577,7 @@ version = "0.1.0"
source = { editable = "integrations_v2/wan21" }
dependencies = [
{ name = "flashdreams" },
+ { name = "flashdreams-minimal-t2v" },
{ name = "flashdreams-t2v" },
{ name = "mediapy" },
{ name = "opencv-python-headless" },
@@ -1575,6 +1591,7 @@ dev = [
[package.metadata]
requires-dist = [
{ name = "flashdreams", editable = "flashdreams" },
+ { name = "flashdreams-minimal-t2v", editable = "apps/minimal_t2v" },
{ name = "flashdreams-t2v", editable = "apps/t2v" },
{ name = "mediapy", specifier = ">=1.1" },
{ name = "opencv-python-headless", specifier = ">=4.5" },
@@ -1772,6 +1789,18 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/ab/6e/81d47999aebc1b155f81eca4477a616a70f238a2549848c38983f3c22a82/ftfy-6.3.1-py3-none-any.whl", hash = "sha256:7c70eb532015cd2f9adb53f101fb6c7945988d023a085d127d1573dc49dd0083", size = 44821, upload-time = "2024-10-26T00:50:33.425Z" },
]
+[[package]]
+name = "ghp-import"
+version = "2.1.0"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "python-dateutil" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/d9/29/d40217cbe2f6b1359e00c6c307bb3fc876ba74068cbab3dde77f03ca0dc4/ghp-import-2.1.0.tar.gz", hash = "sha256:9c535c4c61193c2df8871222567d7fd7e5014d835f97dc7b7439069e2413d343", size = 10943, upload-time = "2022-05-02T15:47:16.11Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/f7/ec/67fbef5d497f86283db54c22eec6f6140243aae73265799baaaa19cd17fb/ghp_import-2.1.0-py3-none-any.whl", hash = "sha256:8337dd7b50877f163d4c0289bc1f1c7f127550241988d568c1db512c4324a619", size = 11034, upload-time = "2022-05-02T15:47:14.552Z" },
+]
+
[[package]]
name = "google-crc32c"
version = "1.8.0"
@@ -1797,6 +1826,34 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/9c/97/7d75fe37a7a6ed171a2cf17117177e7aab7e6e0d115858741b41e9dd4254/google_crc32c-1.8.0-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:f639065ea2042d5c034bf258a9f085eaa7af0cd250667c0635a3118e8f92c69c", size = 28800, upload-time = "2025-12-16T00:40:30.322Z" },
]
+[[package]]
+name = "griffelib"
+version = "2.3.0"
+source = { registry = "https://pypi.org/simple" }
+resolution-markers = [
+ "python_full_version < '3.11' and sys_platform == 'win32'",
+ "python_full_version < '3.11' and sys_platform != 'win32'",
+]
+sdist = { url = "https://files.pythonhosted.org/packages/27/af/018c10bc9edd42b6ef6db2e96b09542050d5253f9b195e74bc910b2d13ab/griffelib-2.3.0.tar.gz", hash = "sha256:7b0952caf5bca6afa4bb5ee8c6a2d183fe3f21b62efc5f6c7243cb2b26d2d115", size = 234534, upload-time = "2026-09-04T15:08:17.472Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/41/63/e876e789525063c840ccfa8857febdabd6523bcef9ce7eb979b9305ea895/griffelib-2.3.0-py3-none-any.whl", hash = "sha256:1b8f9cd525681c26b1d6d574faa1371651e8459ca51d209684f50b8096ae06e0", size = 169423, upload-time = "2026-09-04T15:08:12.956Z" },
+]
+
+[[package]]
+name = "griffelib"
+version = "2.3.2"
+source = { registry = "https://pypi.org/simple" }
+resolution-markers = [
+ "python_full_version >= '3.12' and sys_platform == 'win32'",
+ "python_full_version >= '3.12' and sys_platform != 'win32'",
+ "python_full_version == '3.11.*' and sys_platform == 'win32'",
+ "python_full_version == '3.11.*' and sys_platform != 'win32'",
+]
+sdist = { url = "https://files.pythonhosted.org/packages/2b/27/b55f1a5278918be765fb2fd8b20966bc72bbdd3f789f031937cceea7834a/griffelib-2.3.2.tar.gz", hash = "sha256:df00c7a0dee3d86268d76788997a1859272cb1fb7b865658e043d2c0c3d52e60", size = 234729, upload-time = "2026-10-06T09:54:37.222Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/04/e5/0ae74c83c1cab2c14daadf28bd0143eb14bb81503834af987b66badc7b61/griffelib-2.3.2-py3-none-any.whl", hash = "sha256:8e710afededd5607f95bf3c8ccc175ee306e7084459faf27b9f9f44ef2a7a274", size = 169420, upload-time = "2026-10-06T09:54:32.038Z" },
+]
+
[[package]]
name = "h11"
version = "0.16.0"
@@ -2440,6 +2497,130 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/37/8c/52f0299f1675cdfa1ab39a6028a2e5adf9032ae1118c9895c84b08af162b/mediapy-1.2.6-py3-none-any.whl", hash = "sha256:0a0ea00eb0da83c3c54d588b49c49a41ba456174aa33e530ffe13e17269c9072", size = 27494, upload-time = "2026-02-03T10:29:30.245Z" },
]
+[[package]]
+name = "mergedeep"
+version = "1.3.4"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/3a/41/580bb4006e3ed0361b8151a01d324fb03f420815446c7def45d02f74c270/mergedeep-1.3.4.tar.gz", hash = "sha256:0096d52e9dad9939c3d975a774666af186eda617e6ca84df4c94dec30004f2a8", size = 4661, upload-time = "2021-02-05T18:55:30.623Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/2c/19/04f9b178c2d8a15b076c8b5140708fa6ffc5601fb6f1e975537072df5b2a/mergedeep-1.3.4-py3-none-any.whl", hash = "sha256:70775750742b25c0d8f36c55aed03d24c3384d17c951b3175d898bd778ef0307", size = 6354, upload-time = "2021-02-05T18:55:29.583Z" },
+]
+
+[[package]]
+name = "mkdocs"
+version = "1.6.1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "click" },
+ { name = "colorama", marker = "sys_platform == 'win32' or (extra == 'extra-11-flashdreams-dev' and extra == 'group-11-flashdreams-cuda12') or (extra == 'group-11-flashdreams-cuda12' and extra == 'group-11-flashdreams-cuda13')" },
+ { name = "ghp-import" },
+ { name = "jinja2" },
+ { name = "markdown", version = "3.10.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' or (extra == 'extra-11-flashdreams-dev' and extra == 'group-11-flashdreams-cuda12') or (extra == 'group-11-flashdreams-cuda12' and extra == 'group-11-flashdreams-cuda13')" },
+ { name = "markdown", version = "3.11", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' or (extra == 'extra-11-flashdreams-dev' and extra == 'group-11-flashdreams-cuda12') or (extra == 'group-11-flashdreams-cuda12' and extra == 'group-11-flashdreams-cuda13')" },
+ { name = "markupsafe" },
+ { name = "mergedeep" },
+ { name = "mkdocs-get-deps" },
+ { name = "packaging" },
+ { name = "pathspec" },
+ { name = "pyyaml" },
+ { name = "pyyaml-env-tag" },
+ { name = "watchdog" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/bc/c6/bbd4f061bd16b378247f12953ffcb04786a618ce5e904b8c5a01a0309061/mkdocs-1.6.1.tar.gz", hash = "sha256:7b432f01d928c084353ab39c57282f29f92136665bdd6abf7c1ec8d822ef86f2", size = 3889159, upload-time = "2024-08-30T12:24:06.899Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/22/5b/dbc6a8cddc9cfa9c4971d59fb12bb8d42e161b7e7f8cc89e49137c5b279c/mkdocs-1.6.1-py3-none-any.whl", hash = "sha256:db91759624d1647f3f34aa0c3f327dd2601beae39a366d6e064c03468d35c20e", size = 3864451, upload-time = "2024-08-30T12:24:05.054Z" },
+]
+
+[[package]]
+name = "mkdocs-autorefs"
+version = "1.4.4"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "markdown", version = "3.10.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' or (extra == 'extra-11-flashdreams-dev' and extra == 'group-11-flashdreams-cuda12') or (extra == 'group-11-flashdreams-cuda12' and extra == 'group-11-flashdreams-cuda13')" },
+ { name = "markdown", version = "3.11", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' or (extra == 'extra-11-flashdreams-dev' and extra == 'group-11-flashdreams-cuda12') or (extra == 'group-11-flashdreams-cuda12' and extra == 'group-11-flashdreams-cuda13')" },
+ { name = "markupsafe" },
+ { name = "mkdocs" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/52/c0/f641843de3f612a6b48253f39244165acff36657a91cc903633d456ae1ac/mkdocs_autorefs-1.4.4.tar.gz", hash = "sha256:d54a284f27a7346b9c38f1f852177940c222da508e66edc816a0fa55fc6da197", size = 56588, upload-time = "2026-02-10T15:23:55.105Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/28/de/a3e710469772c6a89595fc52816da05c1e164b4c866a89e3cb82fb1b67c5/mkdocs_autorefs-1.4.4-py3-none-any.whl", hash = "sha256:834ef5408d827071ad1bc69e0f39704fa34c7fc05bc8e1c72b227dfdc5c76089", size = 25530, upload-time = "2026-02-10T15:23:53.817Z" },
+]
+
+[[package]]
+name = "mkdocs-get-deps"
+version = "0.2.2"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "mergedeep" },
+ { name = "platformdirs" },
+ { name = "pyyaml" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/ce/25/b3cccb187655b9393572bde9b09261d267c3bf2f2cdabe347673be5976a6/mkdocs_get_deps-0.2.2.tar.gz", hash = "sha256:8ee8d5f316cdbbb2834bc1df6e69c08fe769a83e040060de26d3c19fad3599a1", size = 11047, upload-time = "2026-03-10T02:46:33.632Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/88/29/744136411e785c4b0b744d5413e56555265939ab3a104c6a4b719dad33fd/mkdocs_get_deps-0.2.2-py3-none-any.whl", hash = "sha256:e7878cbeac04860b8b5e0ca31d3abad3df9411a75a32cde82f8e44b6c16ff650", size = 9555, upload-time = "2026-03-10T02:46:32.256Z" },
+]
+
+[[package]]
+name = "mkdocstrings"
+version = "1.0.6"
+source = { registry = "https://pypi.org/simple" }
+resolution-markers = [
+ "python_full_version < '3.11' and sys_platform == 'win32'",
+ "python_full_version < '3.11' and sys_platform != 'win32'",
+]
+dependencies = [
+ { name = "jinja2", marker = "python_full_version < '3.11' or (extra == 'extra-11-flashdreams-dev' and extra == 'group-11-flashdreams-cuda12') or (extra == 'group-11-flashdreams-cuda12' and extra == 'group-11-flashdreams-cuda13')" },
+ { name = "markdown", version = "3.10.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' or (extra == 'extra-11-flashdreams-dev' and extra == 'group-11-flashdreams-cuda12') or (extra == 'group-11-flashdreams-cuda12' and extra == 'group-11-flashdreams-cuda13')" },
+ { name = "markupsafe", marker = "python_full_version < '3.11' or (extra == 'extra-11-flashdreams-dev' and extra == 'group-11-flashdreams-cuda12') or (extra == 'group-11-flashdreams-cuda12' and extra == 'group-11-flashdreams-cuda13')" },
+ { name = "mkdocs", marker = "python_full_version < '3.11' or (extra == 'extra-11-flashdreams-dev' and extra == 'group-11-flashdreams-cuda12') or (extra == 'group-11-flashdreams-cuda12' and extra == 'group-11-flashdreams-cuda13')" },
+ { name = "mkdocs-autorefs", marker = "python_full_version < '3.11' or (extra == 'extra-11-flashdreams-dev' and extra == 'group-11-flashdreams-cuda12') or (extra == 'group-11-flashdreams-cuda12' and extra == 'group-11-flashdreams-cuda13')" },
+ { name = "pymdown-extensions", marker = "python_full_version < '3.11' or (extra == 'extra-11-flashdreams-dev' and extra == 'group-11-flashdreams-cuda12') or (extra == 'group-11-flashdreams-cuda12' and extra == 'group-11-flashdreams-cuda13')" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/53/71/f85bdf13355073ae15a7375f09879375a830553552e58c1c4b7e0bbc5c8b/mkdocstrings-1.0.6.tar.gz", hash = "sha256:a0b8c2bdd29a6416c80d717aa369bbf7831946bd9f23c2a66db1b1dbe7693dbd", size = 100649, upload-time = "2026-07-11T19:38:05.732Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/5d/5b/4c1902e8bdd5c4db63284e9d101dece4038d4025d6d88850ffe0a1578980/mkdocstrings-1.0.6-py3-none-any.whl", hash = "sha256:2703708697487d1b6d6d7b412e176fa436edf120c1bf81dc9e126b12d00893c7", size = 35787, upload-time = "2026-07-11T19:38:04.417Z" },
+]
+
+[[package]]
+name = "mkdocstrings"
+version = "1.0.7"
+source = { registry = "https://pypi.org/simple" }
+resolution-markers = [
+ "python_full_version >= '3.12' and sys_platform == 'win32'",
+ "python_full_version >= '3.12' and sys_platform != 'win32'",
+ "python_full_version == '3.11.*' and sys_platform == 'win32'",
+ "python_full_version == '3.11.*' and sys_platform != 'win32'",
+]
+dependencies = [
+ { name = "jinja2", marker = "python_full_version >= '3.11' or (extra == 'extra-11-flashdreams-dev' and extra == 'group-11-flashdreams-cuda12') or (extra == 'group-11-flashdreams-cuda12' and extra == 'group-11-flashdreams-cuda13')" },
+ { name = "markdown", version = "3.11", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' or (extra == 'extra-11-flashdreams-dev' and extra == 'group-11-flashdreams-cuda12') or (extra == 'group-11-flashdreams-cuda12' and extra == 'group-11-flashdreams-cuda13')" },
+ { name = "markupsafe", marker = "python_full_version >= '3.11' or (extra == 'extra-11-flashdreams-dev' and extra == 'group-11-flashdreams-cuda12') or (extra == 'group-11-flashdreams-cuda12' and extra == 'group-11-flashdreams-cuda13')" },
+ { name = "mkdocs", marker = "python_full_version >= '3.11' or (extra == 'extra-11-flashdreams-dev' and extra == 'group-11-flashdreams-cuda12') or (extra == 'group-11-flashdreams-cuda12' and extra == 'group-11-flashdreams-cuda13')" },
+ { name = "mkdocs-autorefs", marker = "python_full_version >= '3.11' or (extra == 'extra-11-flashdreams-dev' and extra == 'group-11-flashdreams-cuda12') or (extra == 'group-11-flashdreams-cuda12' and extra == 'group-11-flashdreams-cuda13')" },
+ { name = "pymdown-extensions", marker = "python_full_version >= '3.11' or (extra == 'extra-11-flashdreams-dev' and extra == 'group-11-flashdreams-cuda12') or (extra == 'group-11-flashdreams-cuda12' and extra == 'group-11-flashdreams-cuda13')" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/f5/e8/445b19834bf9559ebbbaa76897e965665b83d2861461eed8d8de4d122057/mkdocstrings-1.0.7.tar.gz", hash = "sha256:0951b147f352118a45a3db85f0f3b660833d34cb5120a2751315b8d08dafd159", size = 103739, upload-time = "2026-10-10T13:50:59.957Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/22/c3/9062531735ff1fd27f3a79c353c4cf4d822eeffd062fd90b2c553a96f4bb/mkdocstrings-1.0.7-py3-none-any.whl", hash = "sha256:9563828667eeb35256f87a6b61fe857676ac628ec1abbce9aea9839a502c9cb1", size = 41597, upload-time = "2026-10-10T13:50:58.43Z" },
+]
+
+[[package]]
+name = "mkdocstrings-python"
+version = "2.0.9"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "griffelib", version = "2.3.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' or (extra == 'extra-11-flashdreams-dev' and extra == 'group-11-flashdreams-cuda12') or (extra == 'group-11-flashdreams-cuda12' and extra == 'group-11-flashdreams-cuda13')" },
+ { name = "griffelib", version = "2.3.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' or (extra == 'extra-11-flashdreams-dev' and extra == 'group-11-flashdreams-cuda12') or (extra == 'group-11-flashdreams-cuda12' and extra == 'group-11-flashdreams-cuda13')" },
+ { name = "mkdocs-autorefs" },
+ { name = "mkdocstrings", version = "1.0.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11' or (extra == 'extra-11-flashdreams-dev' and extra == 'group-11-flashdreams-cuda12') or (extra == 'group-11-flashdreams-cuda12' and extra == 'group-11-flashdreams-cuda13')" },
+ { name = "mkdocstrings", version = "1.0.7", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11' or (extra == 'extra-11-flashdreams-dev' and extra == 'group-11-flashdreams-cuda12') or (extra == 'group-11-flashdreams-cuda12' and extra == 'group-11-flashdreams-cuda13')" },
+ { name = "typing-extensions", marker = "python_full_version < '3.11' or (extra == 'extra-11-flashdreams-dev' and extra == 'group-11-flashdreams-cuda12') or (extra == 'group-11-flashdreams-cuda12' and extra == 'group-11-flashdreams-cuda13')" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/96/11/640067d1ad713ea99c233e53e57a4c300d9885f904a61371d7ef90dea549/mkdocstrings_python-2.0.9.tar.gz", hash = "sha256:ae945637dc0618c6beedbee169f10c0234b77f322c53db3fc9fb4c29b3013038", size = 203006, upload-time = "2026-09-22T13:43:27.712Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/62/0f/f7f926cfa06317bbdbd3cf0ff82f9e3a91767352eb01519c81499fddf575/mkdocstrings_python-2.0.9-py3-none-any.whl", hash = "sha256:c0233eff3f84d78110df50541918e7ec2bcff8e1614faddea34290a90321a416", size = 105698, upload-time = "2026-09-22T13:43:26.345Z" },
+]
+
[[package]]
name = "ml-dtypes"
version = "0.5.4"
@@ -3921,6 +4102,18 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/1a/08/67bd04656199bbb51dbed1439b7f27601dfb576fb864099c7ef0c3e55531/pyyaml-6.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:64386e5e707d03a7e172c0701abfb7e10f0fb753ee1d773128192742712a98fd", size = 140344, upload-time = "2025-09-25T21:32:22.617Z" },
]
+[[package]]
+name = "pyyaml-env-tag"
+version = "1.1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "pyyaml" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/eb/2e/79c822141bfd05a853236b504869ebc6b70159afc570e1d5a20641782eaa/pyyaml_env_tag-1.1.tar.gz", hash = "sha256:2eb38b75a2d21ee0475d6d97ec19c63287a7e140231e4214969d0eac923cd7ff", size = 5737, upload-time = "2025-05-13T15:24:01.64Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/04/11/432f32f8097b03e3cd5fe57e88efb685d964e2e5178a48ed61e841f7fdce/pyyaml_env_tag-1.1-py3-none-any.whl", hash = "sha256:17109e1a528561e32f026364712fee1264bc2ea6715120891174ed1b980d2e04", size = 4722, upload-time = "2025-05-13T15:23:59.629Z" },
+]
+
[[package]]
name = "regendoc"
version = "0.9.0"
@@ -5012,6 +5205,35 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/2c/02/3623e6169bed617ed1e2d372f7c69f92ec28d54c4dfc997055c8578ec148/virtualenv-21.5.1-py3-none-any.whl", hash = "sha256:55aa670b67bbfb991b03fda39bd3276d92c419d702376e98c5df1c9989a26783", size = 4558820, upload-time = "2026-06-16T16:23:56.963Z" },
]
+[[package]]
+name = "watchdog"
+version = "6.0.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/db/7d/7f3d619e951c88ed75c6037b246ddcf2d322812ee8ea189be89511721d54/watchdog-6.0.0.tar.gz", hash = "sha256:9ddf7c82fda3ae8e24decda1338ede66e1c99883db93711d8fb941eaa2d8c282", size = 131220, upload-time = "2024-11-01T14:07:13.037Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/0c/56/90994d789c61df619bfc5ce2ecdabd5eeff564e1eb47512bd01b5e019569/watchdog-6.0.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d1cdb490583ebd691c012b3d6dae011000fe42edb7a82ece80965b42abd61f26", size = 96390, upload-time = "2024-11-01T14:06:24.793Z" },
+ { url = "https://files.pythonhosted.org/packages/55/46/9a67ee697342ddf3c6daa97e3a587a56d6c4052f881ed926a849fcf7371c/watchdog-6.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bc64ab3bdb6a04d69d4023b29422170b74681784ffb9463ed4870cf2f3e66112", size = 88389, upload-time = "2024-11-01T14:06:27.112Z" },
+ { url = "https://files.pythonhosted.org/packages/44/65/91b0985747c52064d8701e1075eb96f8c40a79df889e59a399453adfb882/watchdog-6.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c897ac1b55c5a1461e16dae288d22bb2e412ba9807df8397a635d88f671d36c3", size = 89020, upload-time = "2024-11-01T14:06:29.876Z" },
+ { url = "https://files.pythonhosted.org/packages/e0/24/d9be5cd6642a6aa68352ded4b4b10fb0d7889cb7f45814fb92cecd35f101/watchdog-6.0.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6eb11feb5a0d452ee41f824e271ca311a09e250441c262ca2fd7ebcf2461a06c", size = 96393, upload-time = "2024-11-01T14:06:31.756Z" },
+ { url = "https://files.pythonhosted.org/packages/63/7a/6013b0d8dbc56adca7fdd4f0beed381c59f6752341b12fa0886fa7afc78b/watchdog-6.0.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ef810fbf7b781a5a593894e4f439773830bdecb885e6880d957d5b9382a960d2", size = 88392, upload-time = "2024-11-01T14:06:32.99Z" },
+ { url = "https://files.pythonhosted.org/packages/d1/40/b75381494851556de56281e053700e46bff5b37bf4c7267e858640af5a7f/watchdog-6.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:afd0fe1b2270917c5e23c2a65ce50c2a4abb63daafb0d419fde368e272a76b7c", size = 89019, upload-time = "2024-11-01T14:06:34.963Z" },
+ { url = "https://files.pythonhosted.org/packages/39/ea/3930d07dafc9e286ed356a679aa02d777c06e9bfd1164fa7c19c288a5483/watchdog-6.0.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:bdd4e6f14b8b18c334febb9c4425a878a2ac20efd1e0b231978e7b150f92a948", size = 96471, upload-time = "2024-11-01T14:06:37.745Z" },
+ { url = "https://files.pythonhosted.org/packages/12/87/48361531f70b1f87928b045df868a9fd4e253d9ae087fa4cf3f7113be363/watchdog-6.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c7c15dda13c4eb00d6fb6fc508b3c0ed88b9d5d374056b239c4ad1611125c860", size = 88449, upload-time = "2024-11-01T14:06:39.748Z" },
+ { url = "https://files.pythonhosted.org/packages/5b/7e/8f322f5e600812e6f9a31b75d242631068ca8f4ef0582dd3ae6e72daecc8/watchdog-6.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6f10cb2d5902447c7d0da897e2c6768bca89174d0c6e1e30abec5421af97a5b0", size = 89054, upload-time = "2024-11-01T14:06:41.009Z" },
+ { url = "https://files.pythonhosted.org/packages/30/ad/d17b5d42e28a8b91f8ed01cb949da092827afb9995d4559fd448d0472763/watchdog-6.0.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:c7ac31a19f4545dd92fc25d200694098f42c9a8e391bc00bdd362c5736dbf881", size = 87902, upload-time = "2024-11-01T14:06:53.119Z" },
+ { url = "https://files.pythonhosted.org/packages/5c/ca/c3649991d140ff6ab67bfc85ab42b165ead119c9e12211e08089d763ece5/watchdog-6.0.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:9513f27a1a582d9808cf21a07dae516f0fab1cf2d7683a742c498b93eedabb11", size = 88380, upload-time = "2024-11-01T14:06:55.19Z" },
+ { url = "https://files.pythonhosted.org/packages/a9/c7/ca4bf3e518cb57a686b2feb4f55a1892fd9a3dd13f470fca14e00f80ea36/watchdog-6.0.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:7607498efa04a3542ae3e05e64da8202e58159aa1fa4acddf7678d34a35d4f13", size = 79079, upload-time = "2024-11-01T14:06:59.472Z" },
+ { url = "https://files.pythonhosted.org/packages/5c/51/d46dc9332f9a647593c947b4b88e2381c8dfc0942d15b8edc0310fa4abb1/watchdog-6.0.0-py3-none-manylinux2014_armv7l.whl", hash = "sha256:9041567ee8953024c83343288ccc458fd0a2d811d6a0fd68c4c22609e3490379", size = 79078, upload-time = "2024-11-01T14:07:01.431Z" },
+ { url = "https://files.pythonhosted.org/packages/d4/57/04edbf5e169cd318d5f07b4766fee38e825d64b6913ca157ca32d1a42267/watchdog-6.0.0-py3-none-manylinux2014_i686.whl", hash = "sha256:82dc3e3143c7e38ec49d61af98d6558288c415eac98486a5c581726e0737c00e", size = 79076, upload-time = "2024-11-01T14:07:02.568Z" },
+ { url = "https://files.pythonhosted.org/packages/ab/cc/da8422b300e13cb187d2203f20b9253e91058aaf7db65b74142013478e66/watchdog-6.0.0-py3-none-manylinux2014_ppc64.whl", hash = "sha256:212ac9b8bf1161dc91bd09c048048a95ca3a4c4f5e5d4a7d1b1a7d5752a7f96f", size = 79077, upload-time = "2024-11-01T14:07:03.893Z" },
+ { url = "https://files.pythonhosted.org/packages/2c/3b/b8964e04ae1a025c44ba8e4291f86e97fac443bca31de8bd98d3263d2fcf/watchdog-6.0.0-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:e3df4cbb9a450c6d49318f6d14f4bbc80d763fa587ba46ec86f99f9e6876bb26", size = 79078, upload-time = "2024-11-01T14:07:05.189Z" },
+ { url = "https://files.pythonhosted.org/packages/62/ae/a696eb424bedff7407801c257d4b1afda455fe40821a2be430e173660e81/watchdog-6.0.0-py3-none-manylinux2014_s390x.whl", hash = "sha256:2cce7cfc2008eb51feb6aab51251fd79b85d9894e98ba847408f662b3395ca3c", size = 79077, upload-time = "2024-11-01T14:07:06.376Z" },
+ { url = "https://files.pythonhosted.org/packages/b5/e8/dbf020b4d98251a9860752a094d09a65e1b436ad181faf929983f697048f/watchdog-6.0.0-py3-none-manylinux2014_x86_64.whl", hash = "sha256:20ffe5b202af80ab4266dcd3e91aae72bf2da48c0d33bdb15c66658e685e94e2", size = 79078, upload-time = "2024-11-01T14:07:07.547Z" },
+ { url = "https://files.pythonhosted.org/packages/07/f6/d0e5b343768e8bcb4cda79f0f2f55051bf26177ecd5651f84c07567461cf/watchdog-6.0.0-py3-none-win32.whl", hash = "sha256:07df1fdd701c5d4c8e55ef6cf55b8f0120fe1aef7ef39a1c6fc6bc2e606d517a", size = 79065, upload-time = "2024-11-01T14:07:09.525Z" },
+ { url = "https://files.pythonhosted.org/packages/db/d9/c495884c6e548fce18a8f40568ff120bc3a4b7b99813081c8ac0c936fa64/watchdog-6.0.0-py3-none-win_amd64.whl", hash = "sha256:cbafb470cf848d93b5d013e2ecb245d4aa1c8fd0504e863ccefa32445359d680", size = 79070, upload-time = "2024-11-01T14:07:10.686Z" },
+ { url = "https://files.pythonhosted.org/packages/33/e8/e40370e6d74ddba47f002a32919d91310d6074130fe4e17dabcafc15cbf1/watchdog-6.0.0-py3-none-win_ia64.whl", hash = "sha256:a1914259fa9e1454315171103c6a30961236f508b9b623eae470268bbcc6a22f", size = 79067, upload-time = "2024-11-01T14:07:11.845Z" },
+]
+
[[package]]
name = "wcwidth"
version = "0.8.1"