Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-uncalled-for for 
openSUSE:Factory checked in at 2026-11-06 19:58:10
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-uncalled-for (Old)
 and      /work/SRC/openSUSE:Factory/.python-uncalled-for.new.3759290 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-uncalled-for"

Fri Nov  6 19:58:10 2026 rev:5 rq:1395825 version:0.6.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-uncalled-for/python-uncalled-for.changes  
2026-11-04 19:51:33.184692443 +0100
+++ 
/work/SRC/openSUSE:Factory/.python-uncalled-for.new.3759290/python-uncalled-for.changes
     2026-11-06 20:04:47.911396987 +0100
@@ -1,0 +2,9 @@
+Fri Nov  6 07:48:29 UTC 2026 - Martin Pluskal <[email protected]>
+
+- Update to 0.6.0:
+  * Support Annotated dependencies for providing values
+  * Add a Provided default and resolve dependencies through
+    type aliases
+  * Support Python 3.11 through 3.15, drop Python 3.10
+
+-------------------------------------------------------------------

Old:
----
  uncalled_for-0.4.2.tar.gz

New:
----
  uncalled_for-0.6.0.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-uncalled-for.spec ++++++
--- /var/tmp/diff_new_pack.3UU0ok/_old  2026-11-06 20:04:49.329456372 +0100
+++ /var/tmp/diff_new_pack.3UU0ok/_new  2026-11-06 20:04:49.334456582 +0100
@@ -17,7 +17,7 @@
 
 
 Name:           python-uncalled-for
-Version:        0.4.2
+Version:        0.6.0
 Release:        0
 Summary:        Async-friendly dependency injection for Python
 License:        MIT

++++++ uncalled_for-0.4.2.tar.gz -> uncalled_for-0.6.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/uncalled_for-0.4.2/.github/workflows/ci.yml 
new/uncalled_for-0.6.0/.github/workflows/ci.yml
--- old/uncalled_for-0.4.2/.github/workflows/ci.yml     2020-02-02 
01:00:00.000000000 +0100
+++ new/uncalled_for-0.6.0/.github/workflows/ci.yml     2020-02-02 
01:00:00.000000000 +0100
@@ -17,10 +17,8 @@
     strategy:
       fail-fast: false
       matrix:
-        python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"]
+        python-version: ["3.11", "3.12", "3.13", "3.14", "3.15"]
         include:
-          - python-version: "3.10"
-            cov-threshold: 100
           # Python 3.11 coverage reporting is unstable
           - python-version: "3.11"
             cov-threshold: 98
@@ -30,6 +28,8 @@
             cov-threshold: 100
           - python-version: "3.14"
             cov-threshold: 100
+          - python-version: "3.15"
+            cov-threshold: 100
 
     steps:
       - uses: actions/checkout@v7
@@ -78,7 +78,7 @@
       - name: Install uv and set Python version
         uses: astral-sh/setup-uv@v7
         with:
-          python-version: "3.10"
+          python-version: "3.11"
           enable-cache: true
           cache-dependency-glob: "pyproject.toml"
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/uncalled_for-0.4.2/PKG-INFO 
new/uncalled_for-0.6.0/PKG-INFO
--- old/uncalled_for-0.4.2/PKG-INFO     2020-02-02 01:00:00.000000000 +0100
+++ new/uncalled_for-0.6.0/PKG-INFO     2020-02-02 01:00:00.000000000 +0100
@@ -1,6 +1,6 @@
 Metadata-Version: 2.5
 Name: uncalled-for
-Version: 0.4.2
+Version: 0.6.0
 Summary: Async dependency injection for Python functions
 Project-URL: Repository, https://github.com/chrisguidry/uncalled-for
 Project-URL: Bug Tracker, https://github.com/chrisguidry/uncalled-for/issues
@@ -11,13 +11,13 @@
 Classifier: License :: OSI Approved :: MIT License
 Classifier: Operating System :: OS Independent
 Classifier: Programming Language :: Python :: 3
-Classifier: Programming Language :: Python :: 3.10
 Classifier: Programming Language :: Python :: 3.11
 Classifier: Programming Language :: Python :: 3.12
 Classifier: Programming Language :: Python :: 3.13
 Classifier: Programming Language :: Python :: 3.14
+Classifier: Programming Language :: Python :: 3.15
 Classifier: Typing :: Typed
-Requires-Python: >=3.10
+Requires-Python: >=3.11
 Description-Content-Type: text/markdown
 
 # uncalled-for
@@ -50,6 +50,32 @@
 - **Caching** — each dependency resolves once per call, even if referenced 
multiple times
 - **Call arguments** — a factory can reference the arguments of the call it 
serves
 
+## Annotated dependencies
+
+`Depends`, `Shared` and `CallArgument` also work as `Annotated` metadata, so
+you can name a dependency once and reuse it:
+
+```python
+DB = Annotated[Connection, Depends(get_db)]
+
+async def handle_request(db: DB):
+    await db.execute("SELECT 1")
+```
+
+This resolves like `db: Connection = Depends(get_db)`, but to Python `db` is
+still a required parameter. A custom dependency supplies a value from metadata
+only if it subclasses `Provider`; other dependencies there wrap the call.
+
+When something else calls the function with type-checked arguments, such as a
+task queue that schedules it, default the parameter to `Provided` so those
+callers can leave it out:
+
+```python
+async def handle_request(db: DB = Provided): ...
+```
+
+A `type` alias works the same way: `type DB = Annotated[Connection, 
Depends(get_db)]`.
+
 ## Call arguments
 
 A factory sometimes needs a value from the call itself, not from another
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/uncalled_for-0.4.2/README.md 
new/uncalled_for-0.6.0/README.md
--- old/uncalled_for-0.4.2/README.md    2020-02-02 01:00:00.000000000 +0100
+++ new/uncalled_for-0.6.0/README.md    2020-02-02 01:00:00.000000000 +0100
@@ -28,6 +28,32 @@
 - **Caching** — each dependency resolves once per call, even if referenced 
multiple times
 - **Call arguments** — a factory can reference the arguments of the call it 
serves
 
+## Annotated dependencies
+
+`Depends`, `Shared` and `CallArgument` also work as `Annotated` metadata, so
+you can name a dependency once and reuse it:
+
+```python
+DB = Annotated[Connection, Depends(get_db)]
+
+async def handle_request(db: DB):
+    await db.execute("SELECT 1")
+```
+
+This resolves like `db: Connection = Depends(get_db)`, but to Python `db` is
+still a required parameter. A custom dependency supplies a value from metadata
+only if it subclasses `Provider`; other dependencies there wrap the call.
+
+When something else calls the function with type-checked arguments, such as a
+task queue that schedules it, default the parameter to `Provided` so those
+callers can leave it out:
+
+```python
+async def handle_request(db: DB = Provided): ...
+```
+
+A `type` alias works the same way: `type DB = Annotated[Connection, 
Depends(get_db)]`.
+
 ## Call arguments
 
 A factory sometimes needs a value from the call itself, not from another
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/uncalled_for-0.4.2/pyproject.toml 
new/uncalled_for-0.6.0/pyproject.toml
--- old/uncalled_for-0.4.2/pyproject.toml       2020-02-02 01:00:00.000000000 
+0100
+++ new/uncalled_for-0.6.0/pyproject.toml       2020-02-02 01:00:00.000000000 
+0100
@@ -7,18 +7,18 @@
 dynamic = ["version"]
 description = "Async dependency injection for Python functions"
 readme = { file = "README.md", content-type = "text/markdown" }
-requires-python = ">=3.10"
+requires-python = ">=3.11"
 license = "MIT"
 license-files = ["LICENSE"]
 authors = [{ name = "Chris Guidry", email = "[email protected]" }]
 classifiers = [
     "Development Status :: 3 - Alpha",
     "Programming Language :: Python :: 3",
-    "Programming Language :: Python :: 3.10",
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
     "Programming Language :: Python :: 3.13",
     "Programming Language :: Python :: 3.14",
+    "Programming Language :: Python :: 3.15",
     "License :: OSI Approved :: MIT License",
     "Operating System :: OS Independent",
     "Typing :: Typed",
@@ -51,7 +51,12 @@
 packages = ["src/uncalled_for"]
 
 [tool.ruff]
-target-version = "py310"
+target-version = "py311"
+
+[tool.ruff.per-file-target-version]
+# conftest.py skips this module on Python 3.11, which cannot parse its
+# ``type`` statements.
+"tests/test_annotated_type_aliases.py" = "py312"
 
 [tool.pytest.ini_options]
 addopts = [
@@ -73,6 +78,12 @@
 
 [tool.pyright]
 include = ["src", "tests"]
+# conftest.py skips this module on Python 3.11, which cannot parse its
+# ``type`` statements, so pyright checks it as 3.12 whatever the interpreter.
+executionEnvironments = [
+    { root = "tests/test_annotated_type_aliases.py", pythonVersion = "3.12" },
+    { root = "." },
+]
 typeCheckingMode = "strict"
 venvPath = "."
 venv = ".venv"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/uncalled_for-0.4.2/src/uncalled_for/__init__.py 
new/uncalled_for-0.6.0/src/uncalled_for/__init__.py
--- old/uncalled_for-0.4.2/src/uncalled_for/__init__.py 2020-02-02 
01:00:00.000000000 +0100
+++ new/uncalled_for-0.6.0/src/uncalled_for/__init__.py 2020-02-02 
01:00:00.000000000 +0100
@@ -5,7 +5,7 @@
 """
 
 from .annotations import get_annotation_dependencies
-from .base import Dependency
+from .base import Dependency, Provided, Provider
 from .frames import CallArgument, CycleError, Frame, current_frame, frame_scope
 from .functional import DependencyFactory, Depends
 from .introspection import (
@@ -23,6 +23,8 @@
     "DependencyFactory",
     "Depends",
     "FailedDependency",
+    "Provided",
+    "Provider",
     "Frame",
     "Shared",
     "SharedContext",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/uncalled_for-0.4.2/src/uncalled_for/annotations.py 
new/uncalled_for-0.6.0/src/uncalled_for/annotations.py
--- old/uncalled_for-0.4.2/src/uncalled_for/annotations.py      2020-02-02 
01:00:00.000000000 +0100
+++ new/uncalled_for-0.6.0/src/uncalled_for/annotations.py      2020-02-02 
01:00:00.000000000 +0100
@@ -2,47 +2,95 @@
 
 from __future__ import annotations
 
-from typing import Annotated, Any, cast, get_args, get_origin, get_type_hints
-
+import sys
 from collections.abc import Callable
+from typing import Annotated, cast, get_args, get_origin, get_type_hints
 
-from .base import Dependency
-
-_annotation_cache: dict[Callable[..., Any], dict[str, list[Dependency[Any]]]] 
= {}
+from .base import Dependency, Provider
 
-
-def get_annotation_dependencies(
-    function: Callable[..., Any],
-) -> dict[str, list[Dependency[Any]]]:
-    """Find ``Dependency`` instances in ``Annotated`` type-hint metadata.
-
-    Bare ``Dependency`` subclasses are also accepted as a shorthand for a
-    parameterless instance: ``Annotated[T, Dep]`` is equivalent to
-    ``Annotated[T, Dep()]``.
+if sys.version_info >= (3, 12):
+    from typing import TypeAliasType
+else:  # pragma: no cover
+    # Python 3.11 has no ``type`` statement, so no hint is ever an alias.
+    class TypeAliasType:
+        __value__: object
+
+
+def _metadata(hint: object) -> tuple[object, ...]:
+    """Collect the ``Annotated`` metadata of a hint, through ``type`` aliases.
+
+    ``type DB = Annotated[Connection, Depends(get_db)]`` hides its metadata
+    behind the alias, and ``Annotated[DB, Traced()]`` does not merge the two
+    the way nested ``Annotated`` forms do, so both have to be unwrapped here.
+    The alias's metadata comes first, like the inner form of a nested
+    ``Annotated``.
     """
-    if function in _annotation_cache:
-        return _annotation_cache[function]
+    if isinstance(hint, TypeAliasType):
+        return _metadata(hint.__value__)
+    origin = get_origin(hint)
+    if isinstance(origin, TypeAliasType):
+        return _metadata(origin.__value__)
+    if origin is Annotated:
+        base, *metadata = get_args(hint)
+        return (*_metadata(base), *metadata)
+    return ()
+
+
+_metadata_cache: dict[Callable[..., object], dict[str, 
list[Dependency[object]]]] = {}
+_annotation_cache: dict[Callable[..., object], dict[str, 
list[Dependency[object]]]] = {}
+
+
+def _metadata_dependencies(
+    function: Callable[..., object],
+) -> dict[str, list[Dependency[object]]]:
+    """Find the dependencies in each parameter's ``Annotated`` metadata."""
+    if function in _metadata_cache:
+        return _metadata_cache[function]
 
-    result: dict[str, list[Dependency[Any]]] = {}
+    result: dict[str, list[Dependency[object]]] = {}
     try:
         hints = get_type_hints(function, include_extras=True)
     except Exception:
-        _annotation_cache[function] = result
+        _metadata_cache[function] = result
         return result
 
     for name, hint in hints.items():
         if name == "return":
             continue
-        if get_origin(hint) is not Annotated:
-            continue
-        dependencies: list[Dependency[Any]] = []
-        for a in get_args(hint)[1:]:
+        dependencies: list[Dependency[object]] = []
+        for a in _metadata(hint):
             if isinstance(a, Dependency):
-                dependencies.append(cast(Dependency[Any], a))
+                dependencies.append(cast(Dependency[object], a))
             elif isinstance(a, type) and issubclass(a, Dependency):
-                dependencies.append(cast(Dependency[Any], a()))
+                dependencies.append(cast(Dependency[object], a()))
         if dependencies:
             result[name] = dependencies
 
+    _metadata_cache[function] = result
+    return result
+
+
+def get_annotation_dependencies(
+    function: Callable[..., object],
+) -> dict[str, list[Dependency[object]]]:
+    """Find ``Dependency`` instances in ``Annotated`` type-hint metadata.
+
+    Bare ``Dependency`` subclasses are also accepted as a shorthand for a
+    parameterless instance: ``Annotated[T, Dep]`` is equivalent to
+    ``Annotated[T, Dep()]``.
+
+    These dependencies wrap the call but do not supply the parameter's value.
+    ``Provider`` metadata, such as ``Depends(...)``, does supply the value, so
+    it is reported by ``get_dependency_parameters`` instead.
+    """
+    if function in _annotation_cache:
+        return _annotation_cache[function]
+
+    result: dict[str, list[Dependency[object]]] = {}
+    for name, dependencies in _metadata_dependencies(function).items():
+        side_effects = [d for d in dependencies if not isinstance(d, Provider)]
+        if side_effects:
+            result[name] = side_effects
+
     _annotation_cache[function] = result
     return result
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/uncalled_for-0.4.2/src/uncalled_for/base.py 
new/uncalled_for-0.6.0/src/uncalled_for/base.py
--- old/uncalled_for-0.4.2/src/uncalled_for/base.py     2020-02-02 
01:00:00.000000000 +0100
+++ new/uncalled_for-0.6.0/src/uncalled_for/base.py     2020-02-02 
01:00:00.000000000 +0100
@@ -4,7 +4,7 @@
 
 import abc
 from types import TracebackType
-from typing import Any, Generic, TypeVar
+from typing import Any, Generic, Never, TypeVar, cast
 
 T = TypeVar("T", covariant=True)
 
@@ -53,3 +53,45 @@
         traceback: TracebackType | None,
     ) -> None:
         pass
+
+
+class Provider(Dependency[T]):
+    """A dependency that supplies a parameter's value wherever it is declared.
+
+    As a default, any ``Dependency`` supplies the value. As ``Annotated``
+    metadata, only a ``Provider`` does: ``Annotated[T, Depends(factory)]``
+    resolves like a ``Depends(factory)`` default. Other dependencies in
+    metadata wrap the call and receive the parameter's value through
+    ``bind_to_parameter``.
+
+    ``Depends``, ``Shared`` and ``CallArgument`` are providers. Subclass
+    ``Provider`` instead of ``Dependency`` for a custom dependency that
+    should supply the value when used as metadata.
+    """
+
+
+class _Provided:
+    """The type of ``Provided``, which has exactly one instance."""
+
+    __slots__ = ()
+
+    def __repr__(self) -> str:
+        return "Provided"
+
+    def __reduce__(self) -> str:
+        # Copies and unpickled values must still be ``Provided``, because the
+        # resolution engine checks for it by identity.
+        return "Provided"
+
+
+Provided: Never = cast(Never, _Provided())
+"""The default for a parameter whose ``Annotated`` metadata supplies its value.
+
+``db: Annotated[Connection, Depends(get_db)]`` is a required parameter, so a
+caller that type-checks against the function's signature, such as a task
+queue that schedules the function with the caller's own arguments, has to pass
+it. ``db: Annotated[Connection, Depends(get_db)] = Provided`` makes it
+optional for those callers. It is typed ``Never`` so that it fits any
+parameter's type. A parameter that defaults to ``Provided`` must have a
+``Provider`` in its metadata.
+"""
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/uncalled_for-0.4.2/src/uncalled_for/frames.py 
new/uncalled_for-0.6.0/src/uncalled_for/frames.py
--- old/uncalled_for-0.4.2/src/uncalled_for/frames.py   2020-02-02 
01:00:00.000000000 +0100
+++ new/uncalled_for-0.6.0/src/uncalled_for/frames.py   2020-02-02 
01:00:00.000000000 +0100
@@ -8,7 +8,7 @@
 from contextvars import ContextVar
 from typing import Any, cast
 
-from .base import Dependency
+from .base import Dependency, Provider
 from .introspection import get_dependency_parameters, get_signature
 
 _stack: ContextVar[AsyncExitStack] = ContextVar("uncalled_for_stack")
@@ -125,7 +125,7 @@
         _current_frame.reset(token)
 
 
-class _CallArgument(Dependency[Any]):
+class _CallArgument(Provider[Any]):
     """Dependency on one argument of the outer function."""
 
     parameter: str | None
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/uncalled_for-0.4.2/src/uncalled_for/functional.py 
new/uncalled_for-0.6.0/src/uncalled_for/functional.py
--- old/uncalled_for-0.4.2/src/uncalled_for/functional.py       2020-02-02 
01:00:00.000000000 +0100
+++ new/uncalled_for-0.6.0/src/uncalled_for/functional.py       2020-02-02 
01:00:00.000000000 +0100
@@ -12,7 +12,7 @@
 from contextvars import ContextVar
 from typing import Any, ClassVar, TypeVar, cast, overload
 
-from .base import Dependency
+from .base import Dependency, Provider
 from .frames import _CallArgument, _stack  # pyright: 
ignore[reportPrivateUsage]
 from .introspection import get_dependency_parameters
 
@@ -28,7 +28,7 @@
 )
 
 
-class _FunctionalDependency(Dependency[R]):
+class _FunctionalDependency(Provider[R]):
     """Base for dependencies that wrap a factory function."""
 
     factory: DependencyFactory[R]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/uncalled_for-0.4.2/src/uncalled_for/introspection.py 
new/uncalled_for-0.6.0/src/uncalled_for/introspection.py
--- old/uncalled_for-0.4.2/src/uncalled_for/introspection.py    2020-02-02 
01:00:00.000000000 +0100
+++ new/uncalled_for-0.6.0/src/uncalled_for/introspection.py    2020-02-02 
01:00:00.000000000 +0100
@@ -4,14 +4,14 @@
 
 import inspect
 from collections.abc import Callable
-from typing import Any
 
-from .base import Dependency
+from .annotations import _metadata_dependencies  # pyright: 
ignore[reportPrivateUsage]
+from .base import Dependency, Provided, Provider
 
-_signature_cache: dict[Callable[..., Any], inspect.Signature] = {}
+_signature_cache: dict[Callable[..., object], inspect.Signature] = {}
 
 
-def get_signature(function: Callable[..., Any]) -> inspect.Signature:
+def get_signature(function: Callable[..., object]) -> inspect.Signature:
     """Get a cached signature for a function."""
     if function in _signature_cache:
         return _signature_cache[function]
@@ -26,22 +26,46 @@
     return signature
 
 
-_parameter_cache: dict[Callable[..., Any], dict[str, Dependency[Any]]] = {}
+_parameter_cache: dict[Callable[..., object], dict[str, Dependency[object]]] = 
{}
 
 
 def get_dependency_parameters(
-    function: Callable[..., Any],
-) -> dict[str, Dependency[Any]]:
-    """Find parameters whose defaults are Dependency instances."""
+    function: Callable[..., object],
+) -> dict[str, Dependency[object]]:
+    """Find parameters whose values come from a dependency.
+
+    A parameter qualifies when its default is a ``Dependency``, or when its
+    ``Annotated`` metadata holds a ``Provider``, such as ``Depends(...)``. The 
two
+    forms are equivalent, and a parameter may use only one of them.
+    """
     if function in _parameter_cache:
         return _parameter_cache[function]
 
-    dependencies: dict[str, Dependency[Any]] = {}
+    dependencies: dict[str, Dependency[object]] = {}
     signature = get_signature(function)
+    metadata = _metadata_dependencies(function)
 
     for name, parameter in signature.parameters.items():
+        providers: list[Dependency[object]] = [
+            dependency
+            for dependency in metadata.get(name, [])
+            if isinstance(dependency, Provider)
+        ]
+        if parameter.default is Provided and not providers:
+            raise TypeError(
+                f"Parameter {name!r} of {function.__qualname__} defaults to "
+                "Provided, but its annotation has no Provider, such as "
+                "Depends(...), to supply the value"
+            )
         if isinstance(parameter.default, Dependency):
-            dependencies[name] = parameter.default  # pyright: 
ignore[reportUnknownMemberType]
+            providers.append(parameter.default)  # pyright: 
ignore[reportUnknownMemberType,reportUnknownArgumentType]
+        if len(providers) > 1:
+            raise TypeError(
+                f"Parameter {name!r} of {function.__qualname__} declares more "
+                "than one dependency for its value"
+            )
+        if providers:
+            dependencies[name] = providers[0]
 
     _parameter_cache[function] = dependencies
     return dependencies
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/uncalled_for-0.4.2/tests/conftest.py 
new/uncalled_for-0.6.0/tests/conftest.py
--- old/uncalled_for-0.4.2/tests/conftest.py    2020-02-02 01:00:00.000000000 
+0100
+++ new/uncalled_for-0.6.0/tests/conftest.py    2020-02-02 01:00:00.000000000 
+0100
@@ -1 +1,9 @@
 from __future__ import annotations
+
+import sys
+
+# A ``type`` statement is a syntax error before Python 3.12, so the module
+# that uses them cannot even be collected there.
+collect_ignore = (
+    [] if sys.version_info >= (3, 12) else ["test_annotated_type_aliases.py"]
+)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/uncalled_for-0.4.2/tests/test_annotated_depends.py 
new/uncalled_for-0.6.0/tests/test_annotated_depends.py
--- old/uncalled_for-0.4.2/tests/test_annotated_depends.py      1970-01-01 
01:00:00.000000000 +0100
+++ new/uncalled_for-0.6.0/tests/test_annotated_depends.py      2020-02-02 
01:00:00.000000000 +0100
@@ -0,0 +1,493 @@
+"""Tests for Depends, Shared and CallArgument declared as Annotated 
metadata."""
+
+import inspect
+from collections.abc import AsyncGenerator, Generator
+from contextlib import asynccontextmanager, contextmanager
+from typing import Annotated
+
+import pytest
+
+from uncalled_for import (
+    CallArgument,
+    CycleError,
+    Dependency,
+    Depends,
+    FailedDependency,
+    Provider,
+    Shared,
+    SharedContext,
+    get_annotation_dependencies,
+    get_dependency_parameters,
+    resolved_dependencies,
+    validate_dependencies,
+    without_dependencies,
+)
+
+
+def get_db() -> str:
+    return "db"
+
+
+DB = Annotated[str, Depends(get_db)]
+
+
+def test_annotated_depends_is_a_dependency_parameter() -> None:
+    async def get_user(email: str, db: DB) -> None: ...
+
+    parameters = get_dependency_parameters(get_user)
+    assert set(parameters) == {"db"}
+
+
+def test_annotated_depends_is_not_an_annotation_dependency() -> None:
+    async def get_user(email: str, db: DB) -> None: ...
+
+    assert get_annotation_dependencies(get_user) == {}
+
+
+def test_annotated_and_default_forms_are_found_together() -> None:
+    async def handler(
+        a: DB,
+        b: str = Depends(get_db),
+        c: int = 5,
+    ) -> None: ...
+
+    assert set(get_dependency_parameters(handler)) == {"a", "b"}
+
+
+async def test_annotated_depends_resolves_value() -> None:
+    async def get_user(email: str, db: DB) -> None: ...
+
+    async with resolved_dependencies(get_user, {"email": "x"}) as arguments:
+        assert arguments == {"db": "db"}
+
+
+async def test_caller_value_overrides_annotated_depends() -> None:
+    async def handler(db: DB) -> None: ...
+
+    async with resolved_dependencies(handler, {"db": "mine"}) as arguments:
+        assert arguments == {"db": "mine"}
+
+
+async def test_annotated_depends_generator_is_cleaned_up() -> None:
+    events: list[str] = []
+
+    @asynccontextmanager
+    async def session() -> AsyncGenerator[str]:
+        events.append("open")
+        yield "session"
+        events.append("close")
+
+    async def handler(db: Annotated[str, Depends(session)]) -> None: ...
+
+    async with resolved_dependencies(handler) as arguments:
+        assert arguments["db"] == "session"
+        assert events == ["open"]
+    assert events == ["open", "close"]
+
+
+async def test_annotated_depends_resolves_once_per_call() -> None:
+    calls = 0
+
+    def factory() -> str:
+        nonlocal calls
+        calls += 1
+        return "value"
+
+    async def handler(db: Annotated[str, Depends(factory)]) -> None: ...
+
+    async with resolved_dependencies(handler):
+        pass
+    assert calls == 1
+
+
+async def test_annotated_depends_in_a_factory() -> None:
+    def get_account(db: DB) -> str:
+        return f"account from {db}"
+
+    async def handler(
+        account: Annotated[str, Depends(get_account)],
+    ) -> None: ...
+
+    async with resolved_dependencies(handler) as arguments:
+        assert arguments["account"] == "account from db"
+
+
+async def test_annotated_depends_with_call_argument_binding() -> None:
+    def load_user(user_id: str) -> str:
+        return f"user {user_id}"
+
+    async def handler(
+        user_id: str,
+        user: Annotated[str, Depends(load_user, 
user_id=CallArgument("user_id"))],
+    ) -> None: ...
+
+    async with resolved_dependencies(handler, {"user_id": "7"}) as arguments:
+        assert arguments["user"] == "user 7"
+
+
+async def test_call_argument_sees_annotated_depends_value() -> None:
+    def describe(db: str = CallArgument()) -> str:
+        return f"described {db}"
+
+    async def handler(
+        db: DB,
+        description: str = Depends(describe),
+    ) -> None: ...
+
+    async with resolved_dependencies(handler) as arguments:
+        assert arguments["description"] == "described db"
+
+
+async def test_annotated_shared_resolves_once_across_calls() -> None:
+    calls = 0
+
+    async def pool() -> str:
+        nonlocal calls
+        calls += 1
+        return "pool"
+
+    async def handler(p: Annotated[str, Shared(pool)]) -> None: ...
+
+    async with SharedContext():
+        async with resolved_dependencies(handler) as first:
+            assert first["p"] == "pool"
+        async with resolved_dependencies(handler) as second:
+            assert second["p"] == "pool"
+    assert calls == 1
+
+
+async def test_side_effect_metadata_sees_annotated_depends_value() -> None:
+    bound: list[tuple[str, object]] = []
+
+    class Recorder(Dependency["Recorder"]):
+        def bind_to_parameter(self, name: str, value: object) -> "Recorder":
+            bound.append((name, value))
+            return self
+
+        async def __aenter__(self) -> "Recorder":
+            return self
+
+    async def handler(db: Annotated[str, Depends(get_db), Recorder()]) -> 
None: ...
+
+    assert set(get_dependency_parameters(handler)) == {"db"}
+    assert [type(d) for d in get_annotation_dependencies(handler)["db"]] == 
[Recorder]
+
+    async with resolved_dependencies(handler) as arguments:
+        assert arguments["db"] == "db"
+    assert bound == [("db", "db")]
+
+
+def test_two_annotated_value_dependencies_raise() -> None:
+    def other() -> str:
+        return "other"  # pragma: no cover
+
+    async def handler(db: Annotated[str, Depends(get_db), Depends(other)]) -> 
None: ...
+
+    with pytest.raises(TypeError, match="more than one dependency"):
+        get_dependency_parameters(handler)
+
+
+def test_annotated_depends_with_dependency_default_raises() -> None:
+    async def handler(db: DB = Depends(get_db)) -> None: ...
+
+    with pytest.raises(TypeError, match="more than one dependency"):
+        get_dependency_parameters(handler)
+
+
+async def test_without_dependencies_hides_annotated_depends() -> None:
+    async def get_user(email: str, db: DB) -> str:
+        return f"{email} via {db}"
+
+    wrapper = without_dependencies(get_user)
+    signature = inspect.signature(wrapper)
+
+    assert list(signature.parameters) == ["email"]
+    assert "db" not in wrapper.__annotations__
+    assert await wrapper(email="[email protected]") == "[email protected] via db"
+
+
+async def test_annotated_sync_context_manager_is_cleaned_up() -> None:
+    events: list[str] = []
+
+    @contextmanager
+    def session() -> Generator[str]:
+        events.append("open")
+        yield "session"
+        events.append("close")
+
+    async def handler(db: Annotated[str, Depends(session)]) -> None: ...
+
+    async with resolved_dependencies(handler) as arguments:
+        assert arguments["db"] == "session"
+        assert events == ["open"]
+    assert events == ["open", "close"]
+
+
+async def test_annotated_async_factory() -> None:
+    async def factory() -> str:
+        return "async"
+
+    async def handler(value: Annotated[str, Depends(factory)]) -> None: ...
+
+    async with resolved_dependencies(handler) as arguments:
+        assert arguments["value"] == "async"
+
+
+async def test_without_dependencies_with_sync_function() -> None:
+    def get_user(email: str, db: DB) -> str:
+        return f"{email} via {db}"
+
+    assert await without_dependencies(get_user)(email="a") == "a via db"
+
+
+async def test_one_cached_value_across_annotated_default_and_nested() -> None:
+    calls = 0
+
+    def counted() -> str:
+        nonlocal calls
+        calls += 1
+        return "c"
+
+    def inner(c: Annotated[str, Depends(counted)]) -> str:
+        return f"inner {c}"
+
+    async def handler(
+        a: Annotated[str, Depends(counted)],
+        i: Annotated[str, Depends(inner)],
+        b: str = Depends(counted),
+    ) -> None: ...
+
+    async with resolved_dependencies(handler) as arguments:
+        assert arguments == {"a": "c", "i": "inner c", "b": "c"}
+    assert calls == 1
+
+
+async def test_matching_bindings_share_across_forms() -> None:
+    calls = 0
+
+    def factory(key: str) -> str:
+        nonlocal calls
+        calls += 1
+        return key
+
+    async def handler(
+        p: Annotated[str, Depends(factory, key="z")],
+        q: str = Depends(factory, key="z"),
+    ) -> None: ...
+
+    async with resolved_dependencies(handler) as arguments:
+        assert arguments == {"p": "z", "q": "z"}
+    assert calls == 1
+
+
+async def test_failing_annotated_depends_becomes_failed_dependency() -> None:
+    def boom() -> str:
+        raise RuntimeError("boom")
+
+    async def handler(db: Annotated[str, Depends(boom)]) -> None: ...
+
+    async with resolved_dependencies(handler) as arguments:
+        failure = arguments["db"]
+        assert isinstance(failure, FailedDependency)
+        assert str(failure.error) == "boom"
+
+
+async def test_annotated_call_argument_cycle_is_reported() -> None:
+    def from_y(value: str = CallArgument("y")) -> str: ...
+
+    def from_x(value: str = CallArgument("x")) -> str: ...
+
+    async def handler(
+        x: Annotated[str, Depends(from_y)],
+        y: Annotated[str, Depends(from_x)],
+    ) -> None: ...
+
+    async with resolved_dependencies(handler) as arguments:
+        failure = arguments["x"]
+        assert isinstance(failure, FailedDependency)
+        assert isinstance(failure.error, CycleError)
+
+
+async def test_annotated_call_argument_in_a_factory() -> None:
+    def load_user(user_id: Annotated[str, CallArgument()]) -> str:
+        return f"user {user_id}"
+
+    async def handler(
+        user_id: str,
+        user: Annotated[str, Depends(load_user)],
+    ) -> None: ...
+
+    async with resolved_dependencies(handler, {"user_id": "7"}) as arguments:
+        assert arguments["user"] == "user 7"
+
+
+async def test_annotated_named_call_argument_in_a_factory() -> None:
+    def load_user(uid: Annotated[str, CallArgument("owner")]) -> str:
+        return f"user {uid}"
+
+    async def handler(
+        owner: str,
+        user: Annotated[str, Depends(load_user)],
+    ) -> None: ...
+
+    async with resolved_dependencies(handler, {"owner": "9"}) as arguments:
+        assert arguments["user"] == "user 9"
+
+
+def test_validate_counts_annotated_depends_once() -> None:
+    """A value dependency is reported once, not as both kinds of dependency."""
+
+    class Once(Provider[str]):
+        single = True
+
+        async def __aenter__(self) -> str: ...
+
+    async def handler(x: Annotated[str, Once()]) -> None: ...
+
+    validate_dependencies(handler)
+
+
+def test_unresolvable_hints_still_find_default_dependencies() -> None:
+    async def handler(
+        x: "UnresolvableType",  # pyright: 
ignore[reportUndefinedVariable,reportUnknownParameterType]  # noqa: F821
+        db: str = Depends(get_db),
+    ) -> None: ...
+
+    assert set(get_dependency_parameters(handler)) == {"db"}  # pyright: 
ignore[reportUnknownArgumentType]
+
+
+def test_get_dependency_parameters_caches_annotated_dependencies() -> None:
+    async def handler(db: DB) -> None: ...
+
+    assert get_dependency_parameters(handler) is 
get_dependency_parameters(handler)
+
+
+def test_bare_class_with_required_args_raises_from_dependency_parameters() -> 
None:
+    class NeedsArgs(Dependency[str]):
+        def __init__(self, required: int) -> None: ...
+
+        async def __aenter__(self) -> str: ...
+
+    async def handler(x: Annotated[int, NeedsArgs]) -> None: ...
+
+    with pytest.raises(TypeError):
+        get_dependency_parameters(handler)
+
+
+def test_annotated_shared_with_dependency_default_raises() -> None:
+    async def pool() -> str: ...
+
+    async def handler(p: Annotated[str, Shared(pool)] = Depends(get_db)) -> 
None: ...
+
+    with pytest.raises(TypeError, match="more than one dependency"):
+        get_dependency_parameters(handler)
+
+
+async def test_annotated_depends_ignores_a_plain_default() -> None:
+    async def handler(db: Annotated[str, Depends(get_db)] = "fallback") -> 
None: ...
+
+    async with resolved_dependencies(handler) as arguments:
+        assert arguments["db"] == "db"
+
+
+async def test_annotated_depends_on_a_keyword_only_parameter() -> None:
+    async def handler(email: str, *, db: DB) -> str:
+        return f"{email} via {db}"
+
+    assert await without_dependencies(handler)(email="a") == "a via db"
+
+
+async def test_annotated_depends_in_a_shared_factory() -> None:
+    async def config() -> str:
+        return "config"
+
+    async def pool(c: Annotated[str, Shared(config)]) -> str:
+        return f"pool from {c}"
+
+    async def handler(p: Annotated[str, Shared(pool)]) -> None: ...
+
+    async with SharedContext():
+        async with resolved_dependencies(handler) as arguments:
+            assert arguments["p"] == "pool from config"
+
+
+async def test_binding_replaces_an_annotated_factory_parameter() -> None:
+    def never() -> str:
+        raise AssertionError("never resolved")  # pragma: no cover
+
+    def load(key: Annotated[str, Depends(never)]) -> str:
+        return f"loaded {key}"
+
+    async def handler(value: str = Depends(load, key="bound")) -> None: ...
+
+    async with resolved_dependencies(handler) as arguments:
+        assert arguments["value"] == "loaded bound"
+
+
+async def test_annotated_optional_call_argument_yields_none() -> None:
+    def load(tenant: Annotated[str | None, CallArgument(optional=True)]) -> 
str:
+        return f"tenant {tenant}"
+
+    async def handler(value: Annotated[str, Depends(load)]) -> None: ...
+
+    async with resolved_dependencies(handler) as arguments:
+        assert arguments["value"] == "tenant None"
+
+
+async def test_caller_value_overrides_annotated_depends_in_wrapper() -> None:
+    async def get_user(email: str, db: DB) -> str:
+        return f"{email} via {db}"
+
+    wrapper = without_dependencies(get_user)
+    assert await wrapper(email="a", db="mine") == "a via mine"
+
+
+async def test_custom_provider_supplies_value_as_metadata() -> None:
+    class Current(Provider[str]):
+        async def __aenter__(self) -> str:
+            return "current"
+
+    async def handler(value: Annotated[str, Current()]) -> None: ...
+
+    assert set(get_dependency_parameters(handler)) == {"value"}
+    assert get_annotation_dependencies(handler) == {}
+
+    async with resolved_dependencies(handler) as arguments:
+        assert arguments == {"value": "current"}
+
+
+async def test_custom_dependency_wraps_the_call_as_metadata() -> None:
+    entered: list[object] = []
+
+    class Wrapper(Dependency["Wrapper"]):
+        def bind_to_parameter(self, name: str, value: object) -> "Wrapper":
+            entered.append(value)
+            return self
+
+        async def __aenter__(self) -> "Wrapper":
+            return self
+
+    async def handler(value: Annotated[int, Wrapper()]) -> None: ...
+
+    assert get_dependency_parameters(handler) == {}
+
+    async with resolved_dependencies(handler, {"value": 3}) as arguments:
+        assert arguments == {}
+    assert entered == [3]
+
+
+def test_bare_provider_class_supplies_value_as_metadata() -> None:
+    class Current(Provider[str]):
+        async def __aenter__(self) -> str: ...
+
+    async def handler(value: Annotated[str, Current]) -> None: ...
+
+    assert isinstance(get_dependency_parameters(handler)["value"], Current)
+
+
+def test_builtin_dependencies_are_providers() -> None:
+    def factory() -> str: ...
+
+    assert isinstance(Depends(factory), Provider)
+    assert isinstance(Shared(factory), Provider)
+    assert isinstance(CallArgument(), Provider)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/uncalled_for-0.4.2/tests/test_annotated_depends_postponed.py 
new/uncalled_for-0.6.0/tests/test_annotated_depends_postponed.py
--- old/uncalled_for-0.4.2/tests/test_annotated_depends_postponed.py    
1970-01-01 01:00:00.000000000 +0100
+++ new/uncalled_for-0.6.0/tests/test_annotated_depends_postponed.py    
2020-02-02 01:00:00.000000000 +0100
@@ -0,0 +1,36 @@
+"""Tests for Annotated dependencies under postponed annotation evaluation."""
+
+from __future__ import annotations
+
+from typing import Annotated
+
+from uncalled_for import (
+    Depends,
+    get_annotation_dependencies,
+    get_dependency_parameters,
+    resolved_dependencies,
+    without_dependencies,
+)
+
+
+def get_db() -> str:
+    return "db"
+
+
+DB = Annotated[str, Depends(get_db)]
+
+
+async def get_user(email: str, db: DB) -> str:
+    return f"{email} via {db}"
+
+
+def test_string_annotations_find_annotated_depends() -> None:
+    assert set(get_dependency_parameters(get_user)) == {"db"}
+    assert get_annotation_dependencies(get_user) == {}
+
+
+async def test_string_annotations_resolve_annotated_depends() -> None:
+    async with resolved_dependencies(get_user, {"email": "a"}) as arguments:
+        assert arguments == {"db": "db"}
+
+    assert await without_dependencies(get_user)(email="a") == "a via db"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/uncalled_for-0.4.2/tests/test_annotated_type_aliases.py 
new/uncalled_for-0.6.0/tests/test_annotated_type_aliases.py
--- old/uncalled_for-0.4.2/tests/test_annotated_type_aliases.py 1970-01-01 
01:00:00.000000000 +0100
+++ new/uncalled_for-0.6.0/tests/test_annotated_type_aliases.py 2020-02-02 
01:00:00.000000000 +0100
@@ -0,0 +1,70 @@
+"""Tests for dependencies declared through PEP 695 ``type`` aliases.
+
+conftest.py skips this module on Python 3.11, which cannot parse a ``type``
+statement.
+"""
+
+from typing import Annotated
+
+from uncalled_for import (
+    Dependency,
+    Depends,
+    Provided,
+    get_annotation_dependencies,
+    get_dependency_parameters,
+    resolved_dependencies,
+)
+
+
+def get_db() -> str:
+    return "db"
+
+
+type DB = Annotated[str, Depends(get_db)]
+type GenericDB[T] = Annotated[T, Depends(get_db)]
+type AliasOfDB = DB
+
+
+class Wrapper(Dependency["Wrapper"]):
+    async def __aenter__(self) -> "Wrapper": ...
+
+
+type Wrapped = Annotated[int, Wrapper()]
+
+
+async def plain_alias(db: DB = Provided) -> None: ...
+
+
+async def generic_alias(db: GenericDB[str] = Provided) -> None: ...
+
+
+async def alias_of_alias(db: AliasOfDB = Provided) -> None: ...
+
+
+async def test_plain_alias_supplies_the_value() -> None:
+    async with resolved_dependencies(plain_alias) as arguments:
+        assert arguments == {"db": "db"}
+
+
+async def test_generic_alias_supplies_the_value() -> None:
+    async with resolved_dependencies(generic_alias) as arguments:
+        assert arguments == {"db": "db"}
+
+
+async def test_alias_of_an_alias_supplies_the_value() -> None:
+    async with resolved_dependencies(alias_of_alias) as arguments:
+        assert arguments == {"db": "db"}
+
+
+def test_alias_holding_a_wrapper_wraps_the_call() -> None:
+    async def task(value: Wrapped) -> None: ...
+
+    assert get_dependency_parameters(task) == {}
+    assert [type(d) for d in get_annotation_dependencies(task)["value"]] == 
[Wrapper]
+
+
+def test_metadata_around_an_alias_adds_to_the_aliases_metadata() -> None:
+    async def task(db: Annotated[DB, Wrapper()] = Provided) -> None: ...
+
+    assert set(get_dependency_parameters(task)) == {"db"}
+    assert [type(d) for d in get_annotation_dependencies(task)["db"]] == 
[Wrapper]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/uncalled_for-0.4.2/tests/test_provided.py 
new/uncalled_for-0.6.0/tests/test_provided.py
--- old/uncalled_for-0.4.2/tests/test_provided.py       1970-01-01 
01:00:00.000000000 +0100
+++ new/uncalled_for-0.6.0/tests/test_provided.py       2020-02-02 
01:00:00.000000000 +0100
@@ -0,0 +1,98 @@
+"""Tests for the Provided default on parameters whose value comes from 
metadata."""
+
+import copy
+import inspect
+import pickle
+from collections.abc import Callable
+from typing import Annotated
+
+import pytest
+
+from uncalled_for import (
+    Dependency,
+    Depends,
+    Provided,
+    get_dependency_parameters,
+    resolved_dependencies,
+    without_dependencies,
+)
+
+
+def get_db() -> str:
+    return "db"
+
+
+DB = Annotated[str, Depends(get_db)]
+
+
+def test_provided_repr() -> None:
+    assert repr(Provided) == "Provided"
+
+
+def round_trip_through_pickle(value: object) -> object:
+    return pickle.loads(pickle.dumps(value))
+
+
[email protected](
+    "duplicate",
+    [
+        pytest.param(copy.copy, id="copy"),
+        pytest.param(copy.deepcopy, id="deepcopy"),
+        pytest.param(round_trip_through_pickle, id="pickle"),
+    ],
+)
+def test_provided_keeps_its_identity(duplicate: Callable[[object], object]) -> 
None:
+    assert duplicate(Provided) is Provided
+
+
+async def test_provided_parameter_resolves_from_its_annotation() -> None:
+    async def get_user(email: str, db: DB = Provided) -> None: ...
+
+    assert set(get_dependency_parameters(get_user)) == {"db"}
+    async with resolved_dependencies(get_user, {"email": "a"}) as arguments:
+        assert arguments == {"db": "db"}
+
+
+async def test_caller_value_overrides_provided() -> None:
+    async def get_user(db: DB = Provided) -> None: ...
+
+    async with resolved_dependencies(get_user, {"db": "mine"}) as arguments:
+        assert arguments == {"db": "mine"}
+
+
+async def test_without_dependencies_hides_a_provided_parameter() -> None:
+    async def get_user(email: str, db: DB = Provided) -> str:
+        return f"{email} via {db}"
+
+    wrapper = without_dependencies(get_user)
+
+    assert list(inspect.signature(wrapper).parameters) == ["email"]
+    assert await wrapper(email="a") == "a via db"
+
+
+class Wrapper(Dependency["Wrapper"]):
+    async def __aenter__(self) -> "Wrapper": ...
+
+
+async def no_annotation(db: str = Provided) -> None: ...
+
+
+async def no_metadata(db: Annotated[str, "not a dependency"] = Provided) -> 
None: ...
+
+
+async def only_a_wrapper(db: Annotated[str, Wrapper()] = Provided) -> None: ...
+
+
[email protected](
+    "function",
+    [
+        pytest.param(no_annotation, id="no-annotation"),
+        pytest.param(no_metadata, id="no-dependency-metadata"),
+        pytest.param(only_a_wrapper, id="dependency-that-is-not-a-provider"),
+    ],
+)
+def test_provided_without_a_provider_raises(
+    function: Callable[..., object],
+) -> None:
+    with pytest.raises(TypeError, match="'db' .* defaults to Provided"):
+        get_dependency_parameters(function)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/uncalled_for-0.4.2/uv.lock 
new/uncalled_for-0.6.0/uv.lock
--- old/uncalled_for-0.4.2/uv.lock      2020-02-02 01:00:00.000000000 +0100
+++ new/uncalled_for-0.6.0/uv.lock      2020-02-02 01:00:00.000000000 +0100
@@ -1,10 +1,9 @@
 version = 1
 revision = 5
-requires-python = ">=3.10"
+requires-python = ">=3.11"
 resolution-markers = [
     "python_full_version >= '3.15'",
-    "python_full_version >= '3.11' and python_full_version < '3.15'",
-    "python_full_version < '3.11'",
+    "python_full_version < '3.15'",
 ]
 
 [[package]]
@@ -72,15 +71,6 @@
 ]
 
 [[package]]
-name = "backports-asyncio-runner"
-version = "1.2.0"
-source = { registry = "https://pypi.org/simple"; }
-sdist = { url = 
"https://files.pythonhosted.org/packages/8e/ff/70dca7d7cb1cbc0edb2c6cc0c38b65cba36cccc491eca64cabd5fe7f8670/backports_asyncio_runner-1.2.0.tar.gz";,
 hash = 
"sha256:a5aa7b2b7d8f8bfcaa2b57313f70792df84e32a2a746f585213373f900b42162", size 
= 69893, upload-time = "2025-07-02T02:27:15.685Z" }
-wheels = [
-    { url = 
"https://files.pythonhosted.org/packages/a0/59/76ab57e3fe74484f48a53f8e337171b4a2349e506eabe136d7e01d059086/backports_asyncio_runner-1.2.0-py3-none-any.whl";,
 hash = 
"sha256:0da0a936a8aeb554eccb426dc55af3ba63bcdc69fa1a600b5bb305413a4477b5", size 
= 12313, upload-time = "2025-07-02T02:27:14.263Z" },
-]
-
-[[package]]
 name = "codespell"
 version = "2.4.3"
 source = { registry = "https://pypi.org/simple"; }
@@ -100,148 +90,8 @@
 
 [[package]]
 name = "coverage"
-version = "7.16.2"
-source = { registry = "https://pypi.org/simple"; }
-resolution-markers = [
-    "python_full_version < '3.11'",
-]
-sdist = { url = 
"https://files.pythonhosted.org/packages/2f/55/d1eaf3e73781174340a00dc1ba2aee8a65f82fadb18e2797b192b6b3925b/coverage-7.16.2.tar.gz";,
 hash = 
"sha256:ca64d9f1f384f151b9511bec01126072acd2f313439f8ed015a22d8790aab6fa", size 
= 971999, upload-time = "2026-09-27T12:29:01.118Z" }
-wheels = [
-    { url = 
"https://files.pythonhosted.org/packages/60/72/db17bf5f87568ab524413693385be2eeb03e652ab56c54ea05fa85515675/coverage-7.16.2-cp310-cp310-macosx_10_9_x86_64.whl";,
 hash = 
"sha256:23219888477edd736b6fcaec1272d47d93b926e999641ffea7e53a1738e70b2b", size 
= 223670, upload-time = "2026-09-27T12:25:34.675Z" },
-    { url = 
"https://files.pythonhosted.org/packages/d1/e1/285727a8a74d48de256e8605413ee4cf82301228253ea58e5ab4270138b0/coverage-7.16.2-cp310-cp310-macosx_11_0_arm64.whl";,
 hash = 
"sha256:40c0f00899fe6181ae7f434ceb200e51f5ee4b8ed10e3b5f0b605f0cae15da87", size 
= 224191, upload-time = "2026-09-27T12:25:36.476Z" },
-    { url = 
"https://files.pythonhosted.org/packages/50/c7/c737b73bac9bf5034f5ff45a4237b7a189d417a4e36751faf5d10c082cbe/coverage-7.16.2-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl";,
 hash = 
"sha256:a4624f80732f6b427ac58f1f59c577a0994a12e8174b5af6a027b4b58795d4c3", size 
= 250921, upload-time = "2026-09-27T12:25:37.857Z" },
-    { url = 
"https://files.pythonhosted.org/packages/29/4e/e1d38d27817d91776ca543d01276a67eace3df675a673cac32b12c167d58/coverage-7.16.2-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl";,
 hash = 
"sha256:191803c4996b499fcd78c2ad5e5f767dcc53cb4dc6de6d6a741b443a1821ef02", size 
= 252751, upload-time = "2026-09-27T12:25:39.291Z" },
-    { url = 
"https://files.pythonhosted.org/packages/0e/19/14a8e44cbb2ad36ae62aaa03c5eec4a06a7f7df220ea3776af26927acbe2/coverage-7.16.2-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl";,
 hash = 
"sha256:9fd670ac43b709c575aefc25bf52d8a598a3bc5017bddfd0a179152ab06a2deb", size 
= 254616, upload-time = "2026-09-27T12:25:40.506Z" },
-    { url = 
"https://files.pythonhosted.org/packages/f9/72/f5bcad0d9a9b450080032344fbff7ec60c1b0e3d38019f7735dee2b69645/coverage-7.16.2-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl";,
 hash = 
"sha256:705e5af11d34647efdc170c7840b6857c81cf74be96419a553f237e68e62cb72", size 
= 256541, upload-time = "2026-09-27T12:25:41.785Z" },
-    { url = 
"https://files.pythonhosted.org/packages/ae/9a/8c735234e8abb52bf5d063f98c780fa942e77c4c0225f9fcb9b33effc346/coverage-7.16.2-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl";,
 hash = 
"sha256:8afd9bf35cc6a1f22eb3634808fa8e0b91902459c5721ef2e4461dfe771d7f08", size 
= 251589, upload-time = "2026-09-27T12:25:43.269Z" },
-    { url = 
"https://files.pythonhosted.org/packages/35/6a/1bf6d32e55642d6972aa842640e0a8850e612d19ac7d05e2c32fa59dfd34/coverage-7.16.2-cp310-cp310-musllinux_1_2_aarch64.whl";,
 hash = 
"sha256:3f43bac1856ba269b905302778d4df433d6006489a192174ad77ac528e395032", size 
= 252660, upload-time = "2026-09-27T12:25:45.051Z" },
-    { url = 
"https://files.pythonhosted.org/packages/53/5b/05b1c0d0e9495cb056155a16066259adc1e935e7411a82a62779bf729975/coverage-7.16.2-cp310-cp310-musllinux_1_2_i686.whl";,
 hash = 
"sha256:f8475460aa33ee28ac896ab1156d0bb3b6c639f7f8383c2677d3359eb35f8205", size 
= 250660, upload-time = "2026-09-27T12:25:46.51Z" },
-    { url = 
"https://files.pythonhosted.org/packages/05/33/5bc3db57fc9c56b4ef055725c38c34faa818a27d17d65e251371f7f0e3a0/coverage-7.16.2-cp310-cp310-musllinux_1_2_ppc64le.whl";,
 hash = 
"sha256:d6276d78f6fca7d0ac066d5da4165c5acd07829e8305c2cb900b738fb3a75a72", size 
= 254479, upload-time = "2026-09-27T12:25:47.819Z" },
-    { url = 
"https://files.pythonhosted.org/packages/f6/0f/4a5de66daef26eb919213f63b84f45d5065ab2df94cd767fc7c1174ac5e2/coverage-7.16.2-cp310-cp310-musllinux_1_2_riscv64.whl";,
 hash = 
"sha256:736fde09ea39646d11f8e3b76bd3425c075aa4dd45f24891970bb77c14ff20f5", size 
= 250940, upload-time = "2026-09-27T12:25:49.227Z" },
-    { url = 
"https://files.pythonhosted.org/packages/57/d3/84cd6a11e707e422194739e9734d947746efa5e5b3358ff2d601f823ee45/coverage-7.16.2-cp310-cp310-musllinux_1_2_x86_64.whl";,
 hash = 
"sha256:c85d54e7e8a2ca932fe8399301af9b8d5907ea2a455ffaff6e7d1208db83b943", size 
= 251543, upload-time = "2026-09-27T12:25:50.554Z" },
-    { url = 
"https://files.pythonhosted.org/packages/ab/bc/3d84c2e2a95f38e346ce3730d9f0e53114f4e8aace72e6e51e014afb9992/coverage-7.16.2-cp310-cp310-win32.whl";,
 hash = 
"sha256:5139009b5efd2194fc168ee9362f0e191ba612ef5d29242f9269c22f9b8f80c7", size 
= 225732, upload-time = "2026-09-27T12:25:51.945Z" },
-    { url = 
"https://files.pythonhosted.org/packages/07/86/31f1f3170571a345ab9d8361a7b2f8e0c5698173fbecd1f7149b6e2089ee/coverage-7.16.2-cp310-cp310-win_amd64.whl";,
 hash = 
"sha256:c3305c38a2fa21a4254f2ace7dd9ef5fc569c9a558b66e7017650b3d637fb95e", size 
= 226357, upload-time = "2026-09-27T12:25:53.272Z" },
-    { url = 
"https://files.pythonhosted.org/packages/58/fa/ce3baf63d85b730398d92a7162f486f3a5e4e2cc3382a02488b3943725ba/coverage-7.16.2-cp311-cp311-macosx_10_9_x86_64.whl";,
 hash = 
"sha256:732d950e51f3ba4fb6209c73250f3e8924fefca42953ee04a9e65d8c02414d7d", size 
= 223797, upload-time = "2026-09-27T12:25:54.756Z" },
-    { url = 
"https://files.pythonhosted.org/packages/7a/57/9ba29c2aac7f756d479f03d45762120060f0f988788001001bf36e0e6fca/coverage-7.16.2-cp311-cp311-macosx_11_0_arm64.whl";,
 hash = 
"sha256:5dca0bb66b4c3d624ba047887bf70270030c150692d543cb501293dc38a9f4b5", size 
= 224303, upload-time = "2026-09-27T12:25:56.214Z" },
-    { url = 
"https://files.pythonhosted.org/packages/5d/7b/0d6d60906dca7d28cc1e3fce12a9861801c4fbb6cbf220ad78cd059c9467/coverage-7.16.2-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl";,
 hash = 
"sha256:af2a2a8c7c74de0559e0c368d94c8def9e16c58faaee33a0bf081057c4227e3b", size 
= 254715, upload-time = "2026-09-27T12:25:57.755Z" },
-    { url = 
"https://files.pythonhosted.org/packages/cd/b8/9198b865679379fb165c689c64f6e11105ef380f6bd1c7673e83f73d9f5c/coverage-7.16.2-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl";,
 hash = 
"sha256:db5f8394e17f877a625b257f2ba0ce8e728a499c2c1579ad66220272cd3df510", size 
= 256627, upload-time = "2026-09-27T12:25:59.131Z" },
-    { url = 
"https://files.pythonhosted.org/packages/98/79/9521462cb6072fe394701bc8974b74afd576c9c9355156c7844e1a86a42b/coverage-7.16.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl";,
 hash = 
"sha256:5b3146d2317c75f70df2509066d979dadd941f7021cdf9b5db4bcd8568258e25", size 
= 258724, upload-time = "2026-09-27T12:26:00.691Z" },
-    { url = 
"https://files.pythonhosted.org/packages/a6/76/8d7d5d633db9fe0f3182fedc731bf09f9bcf2366055735152504ad614677/coverage-7.16.2-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl";,
 hash = 
"sha256:9e1d0ced76318bab499693ff25f64faa343415187cb2e4d7befdfdd391a1cf6a", size 
= 260692, upload-time = "2026-09-27T12:26:02.083Z" },
-    { url = 
"https://files.pythonhosted.org/packages/4e/a7/76cb09c89ba46d74d37428bf93251fc14fb0bbe9e05cc2a5ef61773d318a/coverage-7.16.2-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl";,
 hash = 
"sha256:af98ad5ed9d6daaca956201e00bb429a7eb2b080426686f70a20353e0f9839f5", size 
= 254800, upload-time = "2026-09-27T12:26:03.369Z" },
-    { url = 
"https://files.pythonhosted.org/packages/72/b6/2351c1979aaeb5b4a8091a75b90ca997ad60de36e181ddba267cf61dac97/coverage-7.16.2-cp311-cp311-musllinux_1_2_aarch64.whl";,
 hash = 
"sha256:1d56e4d21c56d2046447733f8b118409597db48c01efe898ee9ac24e858ec2d6", size 
= 256423, upload-time = "2026-09-27T12:26:04.751Z" },
-    { url = 
"https://files.pythonhosted.org/packages/0f/f4/ad9a4f8b5cb2d494fa9452b546fe742ed2f9d3847cc14c05e36279a3e649/coverage-7.16.2-cp311-cp311-musllinux_1_2_i686.whl";,
 hash = 
"sha256:1d5d0e3b660506fb84f995814e3118a21efdc0c8eb80127da1be627d90093c17", size 
= 254487, upload-time = "2026-09-27T12:26:06.082Z" },
-    { url = 
"https://files.pythonhosted.org/packages/6c/1f/a520470472f3e8b01169bf42162b1470c9ba992230432f62ca36269bf3a0/coverage-7.16.2-cp311-cp311-musllinux_1_2_ppc64le.whl";,
 hash = 
"sha256:17228fbca0f22976f797be94e975dcd237799c657d49551c7de1e0654d1202e9", size 
= 258259, upload-time = "2026-09-27T12:26:07.513Z" },
-    { url = 
"https://files.pythonhosted.org/packages/09/d2/ff26d5938274745855fa61cfcba0245c88ccc10d98d2cbd96064f16cd5a7/coverage-7.16.2-cp311-cp311-musllinux_1_2_riscv64.whl";,
 hash = 
"sha256:bc0b0ac781d489304b741269857f1f8338b7a26b1b89c06c0344658001ec0035", size 
= 254216, upload-time = "2026-09-27T12:26:08.982Z" },
-    { url = 
"https://files.pythonhosted.org/packages/a4/1d/5d832d3b06785d9f53267e4f2724a9f60c312eee6ebed9063a461d0d3b45/coverage-7.16.2-cp311-cp311-musllinux_1_2_x86_64.whl";,
 hash = 
"sha256:bf1bd822ec4e387ed245bed0d71151582cf7be9e5309bc4145eefe36083d5878", size 
= 255125, upload-time = "2026-09-27T12:26:10.35Z" },
-    { url = 
"https://files.pythonhosted.org/packages/55/4d/1d33edbc2fcf7d99e384e393e712aa5a2ebbbd8409825357815982207976/coverage-7.16.2-cp311-cp311-win32.whl";,
 hash = 
"sha256:7ed238d227e23cc300c3d464babdaf9f6ddc740aa1b15a77ae96136e6a7c4516", size 
= 225898, upload-time = "2026-09-27T12:26:11.7Z" },
-    { url = 
"https://files.pythonhosted.org/packages/6f/7c/676df4882118756c4f8f560c954eddb93e166d84dda8c5f0b6a829689bde/coverage-7.16.2-cp311-cp311-win_amd64.whl";,
 hash = 
"sha256:a90700f743e29aa3d75a6ff5f01953176a889c00e526194bc4d281731b88d99d", size 
= 226369, upload-time = "2026-09-27T12:26:13.375Z" },
-    { url = 
"https://files.pythonhosted.org/packages/7a/0e/a457f4a461b3c5610d845137fdd45fa465e011a64c25af440518ab1f4e41/coverage-7.16.2-cp311-cp311-win_arm64.whl";,
 hash = 
"sha256:a336eec40e3520d369b8a6cdabb4f596e69a8b42927ca074aa1452fed943238a", size 
= 226344, upload-time = "2026-09-27T12:26:15.127Z" },
-    { url = 
"https://files.pythonhosted.org/packages/5e/2c/f8296c63c5d542f3d21aed685e56b7031a419037d155bb3382fc0940d249/coverage-7.16.2-cp312-cp312-macosx_10_13_x86_64.whl";,
 hash = 
"sha256:218d742afca2b5ad5ca759e93eddedfbcc6eadf8322f080dcefc40b7bd4e2d48", size 
= 223969, upload-time = "2026-09-27T12:26:16.753Z" },
-    { url = 
"https://files.pythonhosted.org/packages/90/23/6f3dcb1423a0d43216e402ea1746e4a7c7c44f38896b97dd573790f56a40/coverage-7.16.2-cp312-cp312-macosx_11_0_arm64.whl";,
 hash = 
"sha256:a9a638be322a8d76a41cdb17781c7f82aaee6a66493d8ffb7e2c09ee22423d99", size 
= 224328, upload-time = "2026-09-27T12:26:18.15Z" },
-    { url = 
"https://files.pythonhosted.org/packages/ac/7d/8f3b6dc920e3fc6732f7678785a2091db439f186afbec30dbf2214d9b1f7/coverage-7.16.2-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl";,
 hash = 
"sha256:724bd0f1e81856b35e59fc98cf7b4e544a3cb662e4e0864dca73d4326ee9d808", size 
= 255832, upload-time = "2026-09-27T12:26:19.799Z" },
-    { url = 
"https://files.pythonhosted.org/packages/d1/36/6c45f15be4eca4ac1062c6a55a323286494c99726a7e58951fe85967ac08/coverage-7.16.2-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl";,
 hash = 
"sha256:5375ebd99038021b35e99dc88255022912c06565d316212f4a576e4b08d30f5d", size 
= 258571, upload-time = "2026-09-27T12:26:21.199Z" },
-    { url = 
"https://files.pythonhosted.org/packages/34/fb/b54cbeba3ad89082c2e441278681859e538322cc34b84b2af7ebff00080f/coverage-7.16.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl";,
 hash = 
"sha256:7a076277ca9f5750cc230f0f578ebd2620cec60255b25707361699fef6fb465c", size 
= 259680, upload-time = "2026-09-27T12:26:22.822Z" },
-    { url = 
"https://files.pythonhosted.org/packages/6e/a2/0dc65ec3d61930e1e4c2e371763b15eb4290896eb343a12d5d3091308116/coverage-7.16.2-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl";,
 hash = 
"sha256:58d4a54c6ea672afef66d49be922a2c69826c5ae1a42a9cd94f0c9c2bacdf800", size 
= 261945, upload-time = "2026-09-27T12:26:24.336Z" },
-    { url = 
"https://files.pythonhosted.org/packages/d6/93/5fad7a61f2c14e08e98946fc31c1c7ffc1195061bf3fdc351db3be77a863/coverage-7.16.2-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl";,
 hash = 
"sha256:0dcbcfcc059117284c603ff8cb61a65872512882f84a8cf0339241f7f7c2f148", size 
= 256191, upload-time = "2026-09-27T12:26:25.89Z" },
-    { url = 
"https://files.pythonhosted.org/packages/2d/47/74e5de9227b939ece9f64e729645ddc4296bea10dbfa98721c1333c8be2e/coverage-7.16.2-cp312-cp312-musllinux_1_2_aarch64.whl";,
 hash = 
"sha256:afdf43b72ef3876c1fe66423b91466e37877c9e81e8cec70542b7e8525b9d1b7", size 
= 257610, upload-time = "2026-09-27T12:26:27.35Z" },
-    { url = 
"https://files.pythonhosted.org/packages/13/fe/2cf28d40b43645d1b72388fe3ee7f7c747533a6a9557bb8c24a7ae74fe1a/coverage-7.16.2-cp312-cp312-musllinux_1_2_i686.whl";,
 hash = 
"sha256:9acc7f7ec4a1b5f89bd929fde5b8a714f6fafdc6cc18725413d510aa082b47ad", size 
= 255757, upload-time = "2026-09-27T12:26:28.949Z" },
-    { url = 
"https://files.pythonhosted.org/packages/d7/3d/7c149fd99fc8bbc39c80db5e688d1d39fd040be2ecb78b8335a51a55b9c0/coverage-7.16.2-cp312-cp312-musllinux_1_2_ppc64le.whl";,
 hash = 
"sha256:80d3f7b48d43ee8fc5e8707a8adb43d743a5a1a85256c25a24f9d6d0e2238fa6", size 
= 259822, upload-time = "2026-09-27T12:26:30.515Z" },
-    { url = 
"https://files.pythonhosted.org/packages/e6/3f/b283fce09d5995e227bd8e513358dd7471bedc0f78abc85a925ebdb0a2f6/coverage-7.16.2-cp312-cp312-musllinux_1_2_riscv64.whl";,
 hash = 
"sha256:126d1af8804d7224421fe991ff65d3ce649081560df7a98b1a5ffff07f9923bd", size 
= 255325, upload-time = "2026-09-27T12:26:32.037Z" },
-    { url = 
"https://files.pythonhosted.org/packages/bf/91/f3325edf0c4223fb1fe1532b8dbef2a1d2f729459a9a7d1a44d073bae534/coverage-7.16.2-cp312-cp312-musllinux_1_2_x86_64.whl";,
 hash = 
"sha256:c19cd6d025c1673f22afcd22c7df8a662d779e05d8e3fa6820c22afb895b0206", size 
= 257191, upload-time = "2026-09-27T12:26:33.525Z" },
-    { url = 
"https://files.pythonhosted.org/packages/c4/89/21eb5e83ecf2eed523c4eb3d65ae513cd082c8fd1b6deb34c4cb6c332f97/coverage-7.16.2-cp312-cp312-win32.whl";,
 hash = 
"sha256:152877cdc8a07264882cfcd503ba56a3ef6cba56a70e8c70f6eb8ffd7384789a", size 
= 226034, upload-time = "2026-09-27T12:26:35.021Z" },
-    { url = 
"https://files.pythonhosted.org/packages/db/de/e3ad6d864c0833624b4f1f9b53f9e58e116c945e5e965c3f1e172c5e84cd/coverage-7.16.2-cp312-cp312-win_amd64.whl";,
 hash = 
"sha256:e6c52d3307824ff93b39efd99e4185d557db40bd841452abfb32e5d9151ca162", size 
= 226569, upload-time = "2026-09-27T12:26:36.604Z" },
-    { url = 
"https://files.pythonhosted.org/packages/3e/c1/bccc58ebe5489cc70628f635c1932fd371f5d7da850dbcf960f95f4c4afc/coverage-7.16.2-cp312-cp312-win_arm64.whl";,
 hash = 
"sha256:a678c0b6b22086ec2427359d22e37445d4a792f5fdbbc744112c7dade65cad02", size 
= 226372, upload-time = "2026-09-27T12:26:38.406Z" },
-    { url = 
"https://files.pythonhosted.org/packages/f0/f6/8eb4f220ef24f84fb27d852d4f9bf83e0c73ec1a4a08dd9a87e3f4529739/coverage-7.16.2-cp313-cp313-macosx_10_13_x86_64.whl";,
 hash = 
"sha256:1a37c6e478cf687e1aa30a593d19c92c02fad9d122b51ab73f51b8dc7a0c0fc9", size 
= 223993, upload-time = "2026-09-27T12:26:40.164Z" },
-    { url = 
"https://files.pythonhosted.org/packages/40/23/d4bbaf0c154e0b0c2b5264890dbf6ef098dcb50ec8f2469be9490d191660/coverage-7.16.2-cp313-cp313-macosx_11_0_arm64.whl";,
 hash = 
"sha256:0993d0e90858c03943d3cb152e068a20dd4707924deec84dd2230261baae3b1b", size 
= 224368, upload-time = "2026-09-27T12:26:41.762Z" },
-    { url = 
"https://files.pythonhosted.org/packages/7f/48/fc1e88fd571ec5cb38150b7f89f7696ca1bdf9920e01432febb69774cc85/coverage-7.16.2-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl";,
 hash = 
"sha256:bb2fc905bbf4e6b7f40806ea79e31515abf6349594cdf0adf27c4215f0463204", size 
= 255358, upload-time = "2026-09-27T12:26:43.442Z" },
-    { url = 
"https://files.pythonhosted.org/packages/1d/56/6785397d07c29c8e70fbb9a07e97d062b43c21ffc5f12385917847f09f63/coverage-7.16.2-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl";,
 hash = 
"sha256:4358b9c8c0125b460407f3017c6cce8156e904b32772c5630d27112f52bdbfe5", size 
= 257955, upload-time = "2026-09-27T12:26:45.725Z" },
-    { url = 
"https://files.pythonhosted.org/packages/27/3b/c8cdd07721e5f99abd81cea970d971997f99bf158c0b85f51bd284179c8b/coverage-7.16.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl";,
 hash = 
"sha256:1f15254427c9b33eedac4f198eaf9e356eb4f6214551afb43da6194a2c088ad7", size 
= 259183, upload-time = "2026-09-27T12:26:47.208Z" },
-    { url = 
"https://files.pythonhosted.org/packages/9b/11/606b192fe43d32574ec6238549d48de588fdcc18485682a5ec0a8ac357f2/coverage-7.16.2-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl";,
 hash = 
"sha256:9a75a4704ff640e46170042eec1f984385a121227c505d5a16ad8e495f452541", size 
= 261325, upload-time = "2026-09-27T12:26:49.084Z" },
-    { url = 
"https://files.pythonhosted.org/packages/67/90/eea481f8b0305ceeb33f081a5f47e298391dbd1b589de0c4b3b3aa50d3f2/coverage-7.16.2-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl";,
 hash = 
"sha256:14253fc7bb15749b849795a06f5d3b6d8bc3fb8a4b5ddc341faf7a89dce205fc", size 
= 255531, upload-time = "2026-09-27T12:26:50.509Z" },
-    { url = 
"https://files.pythonhosted.org/packages/6b/be/dedbf9aea1457b120c27ac10b8fc2a357f37fa2b54c3e7286d42980a0a2a/coverage-7.16.2-cp313-cp313-musllinux_1_2_aarch64.whl";,
 hash = 
"sha256:921415102a90637fcc2e3f169f61dad7699ecf690e8639fc21b813acbedc0967", size 
= 257329, upload-time = "2026-09-27T12:26:52.005Z" },
-    { url = 
"https://files.pythonhosted.org/packages/fa/cb/b25c19d5bb2bd0f2e4e27fe8e2ffcae80c7a91ae181c0dc749ed60e9b1a4/coverage-7.16.2-cp313-cp313-musllinux_1_2_i686.whl";,
 hash = 
"sha256:cce2bc991293f15cc4084ca116827b5900c5f34e1a54dfe83f10ab5c43162eb7", size 
= 255294, upload-time = "2026-09-27T12:26:53.634Z" },
-    { url = 
"https://files.pythonhosted.org/packages/5f/a2/892c5c5f4ad44b7b2ca009aee705191f3f268f15052244f2f9e3539b2e35/coverage-7.16.2-cp313-cp313-musllinux_1_2_ppc64le.whl";,
 hash = 
"sha256:e1fa594c887365b69745f25a416806e61085dd07b94c9eae68a6e20730629b23", size 
= 259444, upload-time = "2026-09-27T12:26:55.243Z" },
-    { url = 
"https://files.pythonhosted.org/packages/ed/99/a562537deba0a3e370182ae71c149be796c39d8087365f17a09188f27145/coverage-7.16.2-cp313-cp313-musllinux_1_2_riscv64.whl";,
 hash = 
"sha256:11e597173af1dc33d5f8a7332ada544199269a223af1ee1770ddd5e245ad0fe8", size 
= 255111, upload-time = "2026-09-27T12:26:56.851Z" },
-    { url = 
"https://files.pythonhosted.org/packages/2d/20/854ec68641a9b3362ff068a32dfa41637299761617ef253791dbade6fc76/coverage-7.16.2-cp313-cp313-musllinux_1_2_x86_64.whl";,
 hash = 
"sha256:3e7f99698ba3a7d13988bdd984b7ebf13af4dbe2166dc8502eef90d77603b0a4", size 
= 256882, upload-time = "2026-09-27T12:26:58.41Z" },
-    { url = 
"https://files.pythonhosted.org/packages/db/0d/748e4518b0ac0f9ff2687c248a6e5f8c0737306e709372632a2556f84443/coverage-7.16.2-cp313-cp313-win32.whl";,
 hash = 
"sha256:f80bd9f9633eafc73d0a913ba2645c96ba58bba1befc30590f7c0fbfde59d865", size 
= 226045, upload-time = "2026-09-27T12:26:59.983Z" },
-    { url = 
"https://files.pythonhosted.org/packages/31/fa/6e46edba66a183fe4d99d4bb52c173287e9b8dddabe0888d24cb8210e580/coverage-7.16.2-cp313-cp313-win_amd64.whl";,
 hash = 
"sha256:8be099e979fc42559328a21828281b4578304191ae46ed4e80a407048a82eee6", size 
= 226581, upload-time = "2026-09-27T12:27:01.494Z" },
-    { url = 
"https://files.pythonhosted.org/packages/1b/d9/9ef6845367600b336ff75d000444a0d32497d6972c833141bd39356abf68/coverage-7.16.2-cp313-cp313-win_arm64.whl";,
 hash = 
"sha256:28ff850182a67d117990fa2ce5ea1032836d8c9630dae867e8bdd3bff4533b79", size 
= 226409, upload-time = "2026-09-27T12:27:03.116Z" },
-    { url = 
"https://files.pythonhosted.org/packages/59/4c/577fc0803dab4155dcf808faffbdd7b159256781c0874a8586e17b81b149/coverage-7.16.2-cp314-cp314-macosx_10_15_x86_64.whl";,
 hash = 
"sha256:4ee546b9e4872ffa194bf07ac87bfa1202ebb824d0795dc1ef22f175545ca90a", size 
= 224138, upload-time = "2026-09-27T12:27:05.141Z" },
-    { url = 
"https://files.pythonhosted.org/packages/75/9e/e3785ba3ecba2bd11efc74bfe2801ca4b78c4480b15a375648d809a59da3/coverage-7.16.2-cp314-cp314-macosx_11_0_arm64.whl";,
 hash = 
"sha256:a2fac6895eb299a2e52d7bbb8fb3903502b9da8d3f5309ceb16ec40c646b58ee", size 
= 224445, upload-time = "2026-09-27T12:27:06.805Z" },
-    { url = 
"https://files.pythonhosted.org/packages/f0/d0/963ff22d3fd27117da3b8cc442f5bdc91196f783321e1a8ff0ec43476772/coverage-7.16.2-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl";,
 hash = 
"sha256:57ff3783f99d75a1e81dd56a9737eb5665e6736a5d93258ba596b6dcad8fd05b", size 
= 256112, upload-time = "2026-09-27T12:27:08.43Z" },
-    { url = 
"https://files.pythonhosted.org/packages/a8/d4/a306940c81c6ae759e82fff27d20b7fdc6896e422b821f51313cce212b6c/coverage-7.16.2-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl";,
 hash = 
"sha256:35f37886699cb9abd29958247d718628d5bc6f39e623dff66a09e546c42a7e03", size 
= 258727, upload-time = "2026-09-27T12:27:09.927Z" },
-    { url = 
"https://files.pythonhosted.org/packages/b9/a3/d3d99d93b02517087aa05bc0cf2d04d372956b849e5443e059079901429b/coverage-7.16.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl";,
 hash = 
"sha256:0fd7a86fdda7cb6d616d178654bd0ad6bc0f3f33c2e478aa598500a1a9e34eda", size 
= 259909, upload-time = "2026-09-27T12:27:11.55Z" },
-    { url = 
"https://files.pythonhosted.org/packages/08/44/39dd599181726758dd185ae4dc0c0ab3aeabf7ca70e68e145060feeaaa16/coverage-7.16.2-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl";,
 hash = 
"sha256:ac0f3b379c94acc2f7dce5f5f0b24d44fa1cc6a509717ef83dfee07450c2117c", size 
= 262481, upload-time = "2026-09-27T12:27:13.17Z" },
-    { url = 
"https://files.pythonhosted.org/packages/99/e8/91ee43f6ded411460c359d7e1aebde4d6fd8f00a2e5394182d9d212eb23c/coverage-7.16.2-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl";,
 hash = 
"sha256:7d0732c83746bc24123c581a85d9dd96b70ddb538c9076020aa1a041790361e9", size 
= 256012, upload-time = "2026-09-27T12:27:14.91Z" },
-    { url = 
"https://files.pythonhosted.org/packages/11/8c/e9499ddc33197bd7eabcb1118ca81756fc874457b324e2b479a4804b2ad2/coverage-7.16.2-cp314-cp314-musllinux_1_2_aarch64.whl";,
 hash = 
"sha256:7b451c68218c150f616bc9649783ec8de76a59792c759b43aa0c9c0466a465e4", size 
= 257898, upload-time = "2026-09-27T12:27:16.588Z" },
-    { url = 
"https://files.pythonhosted.org/packages/5f/6e/c081cb5991a0afba99f9c4ad6c74a5fce9513a38ddc64e3e6680c6fed9af/coverage-7.16.2-cp314-cp314-musllinux_1_2_i686.whl";,
 hash = 
"sha256:a56ac4fa5a75c7e182e8f62600cfb4aff43c5ed7356a034f3557659c3bec1d90", size 
= 255938, upload-time = "2026-09-27T12:27:18.19Z" },
-    { url = 
"https://files.pythonhosted.org/packages/b2/42/1c3d819e8f9b6eb01c2fe90874d67a8882adb9507e0bbb09361ed131ea89/coverage-7.16.2-cp314-cp314-musllinux_1_2_ppc64le.whl";,
 hash = 
"sha256:4cc4f73aa3fabc36e32046d6cd2971405948d8a903636508a3d3b2f9128b3a95", size 
= 260368, upload-time = "2026-09-27T12:27:19.903Z" },
-    { url = 
"https://files.pythonhosted.org/packages/19/4f/d70eac07901fd587b6ab05e659b52afe13959992aa5113bf6cce059cc572/coverage-7.16.2-cp314-cp314-musllinux_1_2_riscv64.whl";,
 hash = 
"sha256:723dcdab91357159b722935b500ee8abc0a66c8c432e1e9fabf4cc7598952de8", size 
= 255620, upload-time = "2026-09-27T12:27:21.621Z" },
-    { url = 
"https://files.pythonhosted.org/packages/34/5e/6d87af88317d3d9a9b18a9ca1bc1673eb516917f296e579d0d4a55cb3490/coverage-7.16.2-cp314-cp314-musllinux_1_2_x86_64.whl";,
 hash = 
"sha256:5397e21a90dde0e9c6896b77ded8f0be26b66f8b22b33aed41f6043ed95d55e6", size 
= 257521, upload-time = "2026-09-27T12:27:23.358Z" },
-    { url = 
"https://files.pythonhosted.org/packages/79/bb/90c2641170d2fa1a6757b3f8450ba2740197317b0ddd749e9604b914e886/coverage-7.16.2-cp314-cp314-win32.whl";,
 hash = 
"sha256:848893e1d361448c113dc2f0913503522a6f7be231d0e38333d2a22d9698a011", size 
= 226248, upload-time = "2026-09-27T12:27:25.153Z" },
-    { url = 
"https://files.pythonhosted.org/packages/30/08/d8d0478bb02c8eb0ae20a496fc80c40fcf4d3450bd184300d682ba2d28a6/coverage-7.16.2-cp314-cp314-win_amd64.whl";,
 hash = 
"sha256:5a27b731c171e43dc8b5f32b76a5051dde2ec9b9366c87028f08a7088ebc2c7b", size 
= 226732, upload-time = "2026-09-27T12:27:26.907Z" },
-    { url = 
"https://files.pythonhosted.org/packages/32/3f/0001da22155b0a8ce063ec0f7e64ecbe17b373f306e7a74435f6d6accb72/coverage-7.16.2-cp314-cp314-win_arm64.whl";,
 hash = 
"sha256:1c569a9fd25505f1cd6bea90588818f90373ce90e2632e2cacf19ddbd6e14fdb", size 
= 226645, upload-time = "2026-09-27T12:27:28.588Z" },
-    { url = 
"https://files.pythonhosted.org/packages/d7/85/6d8813aff9b8b8586691a9d33c43c5604f7227622574da7cdc3d91a86861/coverage-7.16.2-cp314-cp314t-macosx_10_15_x86_64.whl";,
 hash = 
"sha256:d93db87adb6b1c1b408dce4763314b55d76a9f589e96783a84ac9e7689e48bdf", size 
= 224871, upload-time = "2026-09-27T12:27:30.32Z" },
-    { url = 
"https://files.pythonhosted.org/packages/5c/70/444f3a4981ac2cda40fdcf4cc9b56a4e1a33c222abeb33e51ed3e3eb2a6b/coverage-7.16.2-cp314-cp314t-macosx_11_0_arm64.whl";,
 hash = 
"sha256:aa62c85046473959c13ba9edca9dc90a77d5c1095b1ba313556314d77fe5b036", size 
= 225123, upload-time = "2026-09-27T12:27:32.33Z" },
-    { url = 
"https://files.pythonhosted.org/packages/d0/c1/980681cd7b33eb66ac835044116ef0a92e11fcc7bdd866cc89d10b1130b9/coverage-7.16.2-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl";,
 hash = 
"sha256:db76506aa5416081f3e8974ae0f7965c58ada0bb0ef7339ac86099588dbb20d3", size 
= 265049, upload-time = "2026-09-27T12:27:34.085Z" },
-    { url = 
"https://files.pythonhosted.org/packages/b2/e3/87679875c33bb2191f0f05544a1cc9adcc940fe0c35443a10f2df753dde5/coverage-7.16.2-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl";,
 hash = 
"sha256:a0f2285329dac10ab08f79cb11f5692c497018e6c7c511f95e6fd63a70b8f831", size 
= 267717, upload-time = "2026-09-27T12:27:36.025Z" },
-    { url = 
"https://files.pythonhosted.org/packages/76/64/5d372776d6eb523d4e93bafba2253f96984e3b18261c4cc56a50863c6d0d/coverage-7.16.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl";,
 hash = 
"sha256:382d3346d56b0eec1b793d53a4c88799c8053f516aa3a8d7c44315696954bacf", size 
= 270047, upload-time = "2026-09-27T12:27:37.96Z" },
-    { url = 
"https://files.pythonhosted.org/packages/be/c1/44082ff0cbf9f97d0043f57970a71204097ec7ba606361a9fd2065393669/coverage-7.16.2-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl";,
 hash = 
"sha256:648352b94507179d82637292e7ae8802508d95f78e2f00a705a50b6c48011681", size 
= 271360, upload-time = "2026-09-27T12:27:39.766Z" },
-    { url = 
"https://files.pythonhosted.org/packages/b8/17/9a215efe25b5e0ecc87c89dbe525c4a87d14d87c8c0c7316ef140a5f6f3e/coverage-7.16.2-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl";,
 hash = 
"sha256:fb2bde05838fffae1a1bf75e5d411a6cac3e4e9bb97e6640fed8cd47888b33f0", size 
= 264736, upload-time = "2026-09-27T12:27:42.072Z" },
-    { url = 
"https://files.pythonhosted.org/packages/a2/da/7f0a31af8e448107d4d32844bd684757f51ea907bc0c68c8fd537b2123ff/coverage-7.16.2-cp314-cp314t-musllinux_1_2_aarch64.whl";,
 hash = 
"sha256:6a75180829efb8ae62b4aded25be6ddca1c888d138d2d82e21d93bfbd88f41cb", size 
= 267600, upload-time = "2026-09-27T12:27:43.85Z" },
-    { url = 
"https://files.pythonhosted.org/packages/dd/a4/3bfecbd3366b775bacdcb3330394d356cf384b5d8f5b2146ac4b14b252b5/coverage-7.16.2-cp314-cp314t-musllinux_1_2_i686.whl";,
 hash = 
"sha256:99704f73721e23859112072d522076e11c31744fc96b5652e5dd2018aa4359f7", size 
= 264767, upload-time = "2026-09-27T12:27:45.768Z" },
-    { url = 
"https://files.pythonhosted.org/packages/b8/3f/5d62163732d87e4a0c4710a0eab30f0fd6a2d480112abe2029f014fe8c9d/coverage-7.16.2-cp314-cp314t-musllinux_1_2_ppc64le.whl";,
 hash = 
"sha256:29309ccc86b7f33df7db12813c299f215bbbc470ed6292d0bedd63ffae1ebf64", size 
= 269026, upload-time = "2026-09-27T12:27:47.787Z" },
-    { url = 
"https://files.pythonhosted.org/packages/49/4d/8e4579f225426535085a9be371cc75e3b026d058d679b80affbdfb4c3ef0/coverage-7.16.2-cp314-cp314t-musllinux_1_2_riscv64.whl";,
 hash = 
"sha256:30c1b65d529e46569899fadca59e4a87c1faf2886923f1307ba61e654d4f3c20", size 
= 264147, upload-time = "2026-09-27T12:27:49.681Z" },
-    { url = 
"https://files.pythonhosted.org/packages/d1/36/ef1f77e2c3f7bb03c2b13b9a2006f88700fdd75535ef158d70049f425c1c/coverage-7.16.2-cp314-cp314t-musllinux_1_2_x86_64.whl";,
 hash = 
"sha256:dcf4bc2aab4e16b1c4c0c2005918f23a7dd5d7821ddae82caed9e3342dc2fcce", size 
= 266376, upload-time = "2026-09-27T12:27:51.551Z" },
-    { url = 
"https://files.pythonhosted.org/packages/be/79/0cb2bf4428830dec971c718c2c841a039c084415c99e67281f5a72841aab/coverage-7.16.2-cp314-cp314t-win32.whl";,
 hash = 
"sha256:a9cd3de0a5bfe7b0e21ee10e1a14e3d61bf52efc88217ab1d95d6ace6970bd46", size 
= 226585, upload-time = "2026-09-27T12:27:53.945Z" },
-    { url = 
"https://files.pythonhosted.org/packages/3c/f9/da17121c16667fd84998e972200ae226a41540f6ea4795776c6d99e8976f/coverage-7.16.2-cp314-cp314t-win_amd64.whl";,
 hash = 
"sha256:611a44e5229a59d7483ce830160e1a0e85f700562c7a5651c7c63fb8f4eb528c", size 
= 227378, upload-time = "2026-09-27T12:27:55.778Z" },
-    { url = 
"https://files.pythonhosted.org/packages/74/89/01179c62d1b7e6e33bd5001566b02d7f778cf33d3ec1e81e94ca170c517f/coverage-7.16.2-cp314-cp314t-win_arm64.whl";,
 hash = 
"sha256:22957cef43ce038641de78ba995de7568d2d6a37c6ddbf7fa0fd7d1ae2344d91", size 
= 227064, upload-time = "2026-09-27T12:27:57.496Z" },
-    { url = 
"https://files.pythonhosted.org/packages/4c/57/52935003c3f627ba6e5203d7179aad32448c10899663a30336aba8e81a2c/coverage-7.16.2-cp315-cp315-macosx_10_15_x86_64.whl";,
 hash = 
"sha256:414c26dfdb96aac2d570a54e03008f001e32eb2d413705365503648c6bd361d8", size 
= 224140, upload-time = "2026-09-27T12:27:59.343Z" },
-    { url = 
"https://files.pythonhosted.org/packages/31/38/df472520f3e626524d7e2fc9d6da0afe7895a2f1489d36b48af8ca40bb41/coverage-7.16.2-cp315-cp315-macosx_11_0_arm64.whl";,
 hash = 
"sha256:00d3eb96e9988c45f50cccd1f1496571ac5c1f91386ac02c4d55516eeda19a24", size 
= 224449, upload-time = "2026-09-27T12:28:01.299Z" },
-    { url = 
"https://files.pythonhosted.org/packages/0c/aa/3be084d5b82e63ccdad4ed751e4acbae294673573e30481d29f8b7402eec/coverage-7.16.2-cp315-cp315-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl";,
 hash = 
"sha256:4dbbd1155ca46e6e0b6b89d204428c56ef6a459af21333f365d135a2820e5a09", size 
= 256060, upload-time = "2026-09-27T12:28:03.185Z" },
-    { url = 
"https://files.pythonhosted.org/packages/de/29/48fca82a7ebf7ff7b2e35019cc9537e7f65e4d2aa1215cc5a8792c989251/coverage-7.16.2-cp315-cp315-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl";,
 hash = 
"sha256:8fc15cc8d0d06e873c00ef18e1372d605f9aaf3de27d8c24e50782e75bc8b843", size 
= 259106, upload-time = "2026-09-27T12:28:05.15Z" },
-    { url = 
"https://files.pythonhosted.org/packages/06/3d/b2d5986f2dd53fe201aa1be2e4ab204fa1aed5101e67c0dbbb419b850aee/coverage-7.16.2-cp315-cp315-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl";,
 hash = 
"sha256:9c6afdd69218202bc1758c9a14b86b8cf1084f37ed2ca143e567a103772b16d1", size 
= 260674, upload-time = "2026-09-27T12:28:06.868Z" },
-    { url = 
"https://files.pythonhosted.org/packages/ce/7e/b50160be3506ead12e6480d14279af7f0f17627694300a2d1fd2c42d2ff5/coverage-7.16.2-cp315-cp315-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl";,
 hash = 
"sha256:aba5c63b7afdc749cc9eae943d5b868cba2b261a176378fa1c5a30bc8bc89982", size 
= 263139, upload-time = "2026-09-27T12:28:08.771Z" },
-    { url = 
"https://files.pythonhosted.org/packages/14/5e/7c805ac9a32606de1399bd7e9bd375aa2f973dc61b12680d9e6403c2e891/coverage-7.16.2-cp315-cp315-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl";,
 hash = 
"sha256:9174f0af24e5eff248b9dbfe76ec5275a3d19d37edbc2810543f12cf97347a34", size 
= 256591, upload-time = "2026-09-27T12:28:10.842Z" },
-    { url = 
"https://files.pythonhosted.org/packages/ab/9e/76f1ed129a2daf658a3ea17122824cf2e3b91fea0460d8d3664fc5a61018/coverage-7.16.2-cp315-cp315-musllinux_1_2_aarch64.whl";,
 hash = 
"sha256:80e9fdb4c3d926b6ba721d4bf7435bdb869c3527ae7803290361d0ab73db13b6", size 
= 258708, upload-time = "2026-09-27T12:28:12.962Z" },
-    { url = 
"https://files.pythonhosted.org/packages/5a/b7/8d62e75f48b527619239a65294f842d4b7fd02a0839d43ae1de80184e2df/coverage-7.16.2-cp315-cp315-musllinux_1_2_i686.whl";,
 hash = 
"sha256:7b3bce4a0d05401d70b7d0d5ca783e686bc9d30e81dbd7d980d532609bf809e4", size 
= 256562, upload-time = "2026-09-27T12:28:14.934Z" },
-    { url = 
"https://files.pythonhosted.org/packages/b8/8d/0a15f95c3afb78e947c52644786ba4bc9de259905687dd720d5e6fae2e76/coverage-7.16.2-cp315-cp315-musllinux_1_2_ppc64le.whl";,
 hash = 
"sha256:44f21e407b278efdfc1ee5e481e00518bd1d500310a30a5fbf2bcbedfef4aaf0", size 
= 261077, upload-time = "2026-09-27T12:28:17.215Z" },
-    { url = 
"https://files.pythonhosted.org/packages/25/00/88389987305a47d732866c07c8a500000ab574df9505e3114ac69c8d027f/coverage-7.16.2-cp315-cp315-musllinux_1_2_riscv64.whl";,
 hash = 
"sha256:59c3926585e1cd1f2190f4b2ac9014de1bbeaf0d5d0587b0dc6b0aa90d17896a", size 
= 256034, upload-time = "2026-09-27T12:28:19.08Z" },
-    { url = 
"https://files.pythonhosted.org/packages/92/02/34d079d4952ad461bde037d353f9a6e037a7edc45fe0f9ee8781ff73f028/coverage-7.16.2-cp315-cp315-musllinux_1_2_x86_64.whl";,
 hash = 
"sha256:066429634299e14dd2d511e1e85f8f9cecc500781f6b41907c0dd6f1baea7e63", size 
= 258034, upload-time = "2026-09-27T12:28:21.242Z" },
-    { url = 
"https://files.pythonhosted.org/packages/f6/d8/3e59a62879285b464ec1b10fd824fbc1af9ce66e842cd39974f80a0becc4/coverage-7.16.2-cp315-cp315-win32.whl";,
 hash = 
"sha256:893ea9cf86cb8d2546812ac93d973aaf2ee1fb45110a873b014214fd23e3725e", size 
= 226252, upload-time = "2026-09-27T12:28:23.102Z" },
-    { url = 
"https://files.pythonhosted.org/packages/f4/e1/128026e1b2836e9ad6b219207ba9edf1c5e0088a7869e23088aee7fbbe7a/coverage-7.16.2-cp315-cp315-win_amd64.whl";,
 hash = 
"sha256:01c6908bc613b420c26c818fe948e1b97dfd041a53c98b01c63bd8321f5c9aae", size 
= 226728, upload-time = "2026-09-27T12:28:25.21Z" },
-    { url = 
"https://files.pythonhosted.org/packages/a8/f4/c9fa8e7cf525ca7748ac52b0ee89331d13fe09808e45c679830708782e90/coverage-7.16.2-cp315-cp315-win_arm64.whl";,
 hash = 
"sha256:967d72c835d7a8cf0af99ec813a2d06e3db6df706402f1fe85b31b437645f495", size 
= 226648, upload-time = "2026-09-27T12:28:27.136Z" },
-    { url = 
"https://files.pythonhosted.org/packages/a2/13/e96b045447a856666f36f9c653e2a80bdaa732aaaf72412b19aa2c26a473/coverage-7.16.2-cp315-cp315t-macosx_10_15_x86_64.whl";,
 hash = 
"sha256:98d9c97f51b334b0adce7b964442a9af33c1a00c6ac856984cc5dc8d18f81c75", size 
= 224858, upload-time = "2026-09-27T12:28:29.169Z" },
-    { url = 
"https://files.pythonhosted.org/packages/23/90/087f6ad1bd3df059632ca3407a4e6552ed1053ee35354de0a771acf35423/coverage-7.16.2-cp315-cp315t-macosx_11_0_arm64.whl";,
 hash = 
"sha256:3e861f1071dcc2fec1e88bef0920f6b1eaa66a143555b4f8ab79ba2b0f30ef55", size 
= 225139, upload-time = "2026-09-27T12:28:31.131Z" },
-    { url = 
"https://files.pythonhosted.org/packages/7e/8e/285dcef0184358044e7cbcd810a1bdc9566bc620f54702d605477155df4a/coverage-7.16.2-cp315-cp315t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl";,
 hash = 
"sha256:fb9d92ecfe2d5b494367c67f7446f8b75b68d8d0c8cf3bc3e6997478be25d9e2", size 
= 265090, upload-time = "2026-09-27T12:28:33.04Z" },
-    { url = 
"https://files.pythonhosted.org/packages/06/b2/cc83f3a6e5789a4e89059c69555bc641c2efcde568405a1c06fc702951ab/coverage-7.16.2-cp315-cp315t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl";,
 hash = 
"sha256:eb57acff4a74246ae513c142d4b36e18c389c3aed8661914a53f7cd0071031b2", size 
= 268254, upload-time = "2026-09-27T12:28:35.135Z" },
-    { url = 
"https://files.pythonhosted.org/packages/ac/41/f548c19530f5d66ac6e3c92bbcbc49da7261de3a458b9f3e54a3efb1a0b2/coverage-7.16.2-cp315-cp315t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl";,
 hash = 
"sha256:444889f7f66b74e4455c0a97e0e166dd41177f1dca8c0239a47cff25e05ba7e1", size 
= 270695, upload-time = "2026-09-27T12:28:36.959Z" },
-    { url = 
"https://files.pythonhosted.org/packages/94/61/4dc27cf82ef96434d2874110ad0cc10ea4621025705dc5049862bd3bd181/coverage-7.16.2-cp315-cp315t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl";,
 hash = 
"sha256:a740ea6f083c6db7b926534d159508f80ba275ab35e722522de0d18d0f56e55f", size 
= 271853, upload-time = "2026-09-27T12:28:38.821Z" },
-    { url = 
"https://files.pythonhosted.org/packages/38/29/bf8072b1b8bd5f2de8b21460a404460b1a2b97e80a9464c78ec0271f6199/coverage-7.16.2-cp315-cp315t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl";,
 hash = 
"sha256:8e209591f7c41ae4a9171335cf6156afda0b21de73b02f73f5aa95b2d5fbb08d", size 
= 265644, upload-time = "2026-09-27T12:28:40.815Z" },
-    { url = 
"https://files.pythonhosted.org/packages/7c/2f/0aecb8721be5cdeb8afd9d6d9f6b463f074e4d8d37f00f4c42442522709f/coverage-7.16.2-cp315-cp315t-musllinux_1_2_aarch64.whl";,
 hash = 
"sha256:396bb16e04ce04efbb3df91456ae4e3da918e69ecdf67fb711b0a0fdf35ccce0", size 
= 268530, upload-time = "2026-09-27T12:28:42.725Z" },
-    { url = 
"https://files.pythonhosted.org/packages/ab/0b/92b4b7628268ee711249958e68fc0328779bd3d9a7ab4715379465aedb84/coverage-7.16.2-cp315-cp315t-musllinux_1_2_i686.whl";,
 hash = 
"sha256:9cdf19874e0d247f32f03609200370343c3c7aa260b191d8c2bb251d36198283", size 
= 265154, upload-time = "2026-09-27T12:28:44.684Z" },
-    { url = 
"https://files.pythonhosted.org/packages/7b/d9/41c95c1ab29b3dcd357cd1227181d1c98185632aca41ce670ce671b23a43/coverage-7.16.2-cp315-cp315t-musllinux_1_2_ppc64le.whl";,
 hash = 
"sha256:fd3d72233eb8b48acc94fa57d44e2d32ce8e7abed02882ccb6d855ccc4ed33ec", size 
= 269799, upload-time = "2026-09-27T12:28:46.672Z" },
-    { url = 
"https://files.pythonhosted.org/packages/80/07/ebeb259aa5362b033a137b86d7274ff4b109d59be8cc9913889b783bf75a/coverage-7.16.2-cp315-cp315t-musllinux_1_2_riscv64.whl";,
 hash = 
"sha256:bb4ffe96aa663cee727659db5a2afeb38c95f8677b747d447b90d6d4874ea2c5", size 
= 265196, upload-time = "2026-09-27T12:28:48.996Z" },
-    { url = 
"https://files.pythonhosted.org/packages/b2/18/8437620f90d023680a072eee02f968055f3658bbfb7d386d0ea34cfb7f30/coverage-7.16.2-cp315-cp315t-musllinux_1_2_x86_64.whl";,
 hash = 
"sha256:dba2edfb054f6d4a08df9d1637c39a5aa3865bca6617c13c86be21e45658a59c", size 
= 267266, upload-time = "2026-09-27T12:28:51.361Z" },
-    { url = 
"https://files.pythonhosted.org/packages/28/6c/f08e8ee4293e6434035424180bef4d45e028e8ecc006c61bf9453e74405e/coverage-7.16.2-cp315-cp315t-win32.whl";,
 hash = 
"sha256:251aed777c47c77aba047096d4542889db089227655711dfc2b9c54ef0e15e35", size 
= 226583, upload-time = "2026-09-27T12:28:53.33Z" },
-    { url = 
"https://files.pythonhosted.org/packages/f7/fd/3f939c2847f4a72c20cff8b1ac33da78ea91a2d38d9b43336e60db719103/coverage-7.16.2-cp315-cp315t-win_amd64.whl";,
 hash = 
"sha256:2aca0bdfa9e91621d5b09d815357bf63def4fc0e9cb66da67bf2cf93f3b1a6f5", size 
= 227374, upload-time = "2026-09-27T12:28:55.158Z" },
-    { url = 
"https://files.pythonhosted.org/packages/5a/35/b98cdc354c952402132e675a87f2cc3227fb68f959c84aaa491fbe15933d/coverage-7.16.2-cp315-cp315t-win_arm64.whl";,
 hash = 
"sha256:b88841e654f09732804809e435b3e005a929ffd9998b872b7b213957b8759cb8", size 
= 227064, upload-time = "2026-09-27T12:28:57.075Z" },
-    { url = 
"https://files.pythonhosted.org/packages/3f/0c/7a64e1ac90541a8edf50daef0914848011fb057a5bf55284a4811e21939a/coverage-7.16.2-py3-none-any.whl";,
 hash = 
"sha256:11d28e9123a9156cb405d8d27b44256c9a58fb5decc2073a8f17862057e3aa0f", size 
= 215754, upload-time = "2026-09-27T12:28:59.075Z" },
-]
-
-[package.optional-dependencies]
-toml = [
-    { name = "tomli" },
-]
-
-[[package]]
-name = "coverage"
 version = "7.17.0"
 source = { registry = "https://pypi.org/simple"; }
-resolution-markers = [
-    "python_full_version >= '3.15'",
-    "python_full_version >= '3.11' and python_full_version < '3.15'",
-]
 sdist = { url = 
"https://files.pythonhosted.org/packages/d2/79/e78bd8f75a9b8e32233ce92d4607f0a21ce88a9156cace2884e7175a82f5/coverage-7.17.0.tar.gz";,
 hash = 
"sha256:cc010a0a7fbdd9bb8bdfd0d3f04a5151275860213cbd7e2b876b29778489c712", size 
= 991021, upload-time = "2026-10-22T16:06:50.009Z" }
 wheels = [
     { url = 
"https://files.pythonhosted.org/packages/75/25/79a66272edd250031aeee6db87d500a0bf76390d0d5f8c2f431fe354715f/coverage-7.17.0-cp311-cp311-macosx_10_9_x86_64.whl";,
 hash = 
"sha256:99a7b390cbccc6bf029ca4da3f0f607c218bb4085e9cd6b58a90d14ca12993c3", size 
= 225837, upload-time = "2026-10-22T16:03:55.622Z" },
@@ -365,18 +215,6 @@
 ]
 
 [[package]]
-name = "exceptiongroup"
-version = "1.3.1"
-source = { registry = "https://pypi.org/simple"; }
-dependencies = [
-    { name = "typing-extensions" },
-]
-sdist = { url = 
"https://files.pythonhosted.org/packages/50/79/66800aadf48771f6b62f7eb014e352e5d06856655206165d775e675a02c9/exceptiongroup-1.3.1.tar.gz";,
 hash = 
"sha256:8b412432c6055b0b7d14c310000ae93352ed6754f70fa8f7c34141f91c4e3219", size 
= 30371, upload-time = "2025-11-21T23:01:54.787Z" }
-wheels = [
-    { url = 
"https://files.pythonhosted.org/packages/8a/0e/97c33bf5009bdbac74fd2beace167cab3f978feb69cc36f1ef79360d6c4e/exceptiongroup-1.3.1-py3-none-any.whl";,
 hash = 
"sha256:a7a39a3bd276781e98394987d3a5701d0c4edffb633bb7a5144577f82c773598", size 
= 16740, upload-time = "2025-11-21T23:01:53.443Z" },
-]
-
-[[package]]
 name = "iniconfig"
 version = "2.3.1"
 source = { registry = "https://pypi.org/simple"; }
@@ -391,20 +229,6 @@
 source = { registry = "https://pypi.org/simple"; }
 sdist = { url = 
"https://files.pythonhosted.org/packages/04/f5/9dc696772d241814bacac7880bac32f2930b5a6ebc1f85317b83161a011c/librt-0.16.0.tar.gz";,
 hash = 
"sha256:ac38d6d8d66bf3d744148dbbc0b8e193e195a51e364ed55e224631f5721891fc", size 
= 219839, upload-time = "2026-09-29T00:55:32.891Z" }
 wheels = [
-    { url = 
"https://files.pythonhosted.org/packages/ec/77/900294b3c9a81415323d81b3f3f271a7f5d7ed9d01e824fc38ffa49470b6/librt-0.16.0-cp310-cp310-macosx_10_9_x86_64.whl";,
 hash = 
"sha256:96f576f2711f8519152ec76d0e599243555c1f07679fa73606ca8c8c868c0be6", size 
= 148668, upload-time = "2026-09-29T00:44:20.282Z" },
-    { url = 
"https://files.pythonhosted.org/packages/55/3b/c301e8cc47758e4518b93e926a0111080155cc79fa03651d202ac2025065/librt-0.16.0-cp310-cp310-macosx_11_0_arm64.whl";,
 hash = 
"sha256:2bec3818c7da7c96ceae0ef5915a3d16c52dd08f3ea913bf1fe8568c447c7978", size 
= 153562, upload-time = "2026-09-29T00:44:21.672Z" },
-    { url = 
"https://files.pythonhosted.org/packages/62/b1/4d5b98114a58bf17e3832cd33400e40f2582f68c2fb7ce25b4468cb1afd3/librt-0.16.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl";,
 hash = 
"sha256:64c79520414a3fdfc6aabd7593e6169afa14d5f8d9908d4b498db068868b08dd", size 
= 494337, upload-time = "2026-09-29T00:44:23.096Z" },
-    { url = 
"https://files.pythonhosted.org/packages/88/36/14223c9b0dc38982eb4f399732c8cb27b19c7e027ae0faef5ca51d08d19f/librt-0.16.0-cp310-cp310-manylinux2014_i686.manylinux_2_17_i686.manylinux_2_28_i686.whl";,
 hash = 
"sha256:f81b5b19ce748ef68d4746656b7929762eb2fe99269b266e4be07e2ee4de7144", size 
= 485440, upload-time = "2026-09-29T00:44:24.555Z" },
-    { url = 
"https://files.pythonhosted.org/packages/ec/9e/d7155e6800d0c33e297e529b217649f7361d706491ebf9d2fc0fc627309e/librt-0.16.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl";,
 hash = 
"sha256:c71d1b76210a36729fedfc5115069b50a3d8619054745f8758fe5d6f19e86671", size 
= 498363, upload-time = "2026-09-29T00:44:26.03Z" },
-    { url = 
"https://files.pythonhosted.org/packages/d3/ce/d5f1fb9f913ac0979d6fc5db9fb9c0bf28cc3470988528957922f15ed40c/librt-0.16.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl";,
 hash = 
"sha256:473eebc7866bb0a0c8849a292b5e7157c1aba5d14d0f0f610c52158d6d964262", size 
= 515453, upload-time = "2026-09-29T00:44:27.566Z" },
-    { url = 
"https://files.pythonhosted.org/packages/b4/d4/ca0fca1a27c26080d1a25b2b31f271e532078a5719878c3daca0c3d4c539/librt-0.16.0-cp310-cp310-manylinux_2_34_riscv64.manylinux_2_39_riscv64.whl";,
 hash = 
"sha256:4eb1313a19847089ee81e88742abedf285c60538816640b99742d8534b81d26a", size 
= 509537, upload-time = "2026-09-29T00:44:29.14Z" },
-    { url = 
"https://files.pythonhosted.org/packages/ee/c0/26807bf2221a53a2c66f2e23a5c4d57f1c0eaa4afed7cb81d841cf3d1903/librt-0.16.0-cp310-cp310-musllinux_1_2_aarch64.whl";,
 hash = 
"sha256:ebefd60b42e2a82b32d136bb5f7c94eadfcd29f772b547df6f3291d1ed855a1c", size 
= 532541, upload-time = "2026-09-29T00:44:30.745Z" },
-    { url = 
"https://files.pythonhosted.org/packages/0e/50/c329d509907e1bc061abeec3796f94d255d43ba25d28c3854d2138ed5ab2/librt-0.16.0-cp310-cp310-musllinux_1_2_i686.whl";,
 hash = 
"sha256:6c5da27e8056439f927ea896735da60e616c477a8293feaa3233d4e7781a6726", size 
= 537059, upload-time = "2026-09-29T00:44:32.102Z" },
-    { url = 
"https://files.pythonhosted.org/packages/84/d6/4571b9c9e65d98e5503734166dce2fd3e216f526dc3c59a3773faa8a60e3/librt-0.16.0-cp310-cp310-musllinux_1_2_ppc64le.whl";,
 hash = 
"sha256:67e718c7a43f8db325abbbf1404e2d535f12f8f7a1a82259568385cc5274b82a", size 
= 536614, upload-time = "2026-09-29T00:44:33.653Z" },
-    { url = 
"https://files.pythonhosted.org/packages/c8/d3/a2ed8a292e4ab7889792a9c3f4ad5d1caf6557afce7f6b452e77f8ed20b7/librt-0.16.0-cp310-cp310-musllinux_1_2_riscv64.whl";,
 hash = 
"sha256:314e703f0c19320dc8094e7a784b9cf29e1b67402515abf580069a6363c0b4f1", size 
= 517199, upload-time = "2026-09-29T00:44:35.115Z" },
-    { url = 
"https://files.pythonhosted.org/packages/9e/24/276e5218b4b7adb6258a42b7403cb1b7cef25616238d0c2152288a9d2f53/librt-0.16.0-cp310-cp310-musllinux_1_2_x86_64.whl";,
 hash = 
"sha256:943c6bbecbdf7fa575a4f2952fcfd848c88ef95507c3fca411e89d4ac3ff8143", size 
= 558746, upload-time = "2026-09-29T00:44:36.656Z" },
-    { url = 
"https://files.pythonhosted.org/packages/7c/5c/9156df81a1726e1efc9567379def2b8777a6d56f464d2f1b760bf951b8af/librt-0.16.0-cp310-cp310-win32.whl";,
 hash = 
"sha256:7cc365f006891afb006b52d5ee5ee74c09306ffa20e2f8705a32a4450af2f3ba", size 
= 104424, upload-time = "2026-09-29T00:44:38.123Z" },
-    { url = 
"https://files.pythonhosted.org/packages/0b/62/4fd172cb3f49ab2cf5ef17de519a93cfb935202c1270ba9d44c6a64178c3/librt-0.16.0-cp310-cp310-win_amd64.whl";,
 hash = 
"sha256:0314058469f4d2fd279ce7c62ac274ac82c3918ef7db62ef0697c4c359370155", size 
= 124267, upload-time = "2026-09-29T00:44:39.455Z" },
     { url = 
"https://files.pythonhosted.org/packages/ba/0e/b04fd2d76b6a78a02286938251b2c119fb36ddece92c76cb4886ef7d44b8/librt-0.16.0-cp311-cp311-macosx_10_9_x86_64.whl";,
 hash = 
"sha256:fe4372c52d4849096c6cc1cda2817d293ec51440c890474ed59ef38d46556f18", size 
= 148058, upload-time = "2026-09-29T00:44:40.903Z" },
     { url = 
"https://files.pythonhosted.org/packages/a3/fc/e1ed24aadb32d38603c0c07f579d739eb4d90e64e90d525b024e4a999b4d/librt-0.16.0-cp311-cp311-macosx_11_0_arm64.whl";,
 hash = 
"sha256:c72c5295a84bd249526da9bdca38f2e176d15c31c13bb0063c5053f4ca023421", size 
= 153073, upload-time = "2026-09-29T00:44:42.165Z" },
     { url = 
"https://files.pythonhosted.org/packages/be/38/133ab655409420e0c34a9a9836a7f4e5ae75fba758d7fe177099130d58ba/librt-0.16.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl";,
 hash = 
"sha256:be56ba9c884143495b517f23fe794ae367d58cd89ea0fdd6d437e3c024a87f9f", size 
= 493052, upload-time = "2026-09-29T00:44:44.043Z" },
@@ -539,17 +363,10 @@
     { name = "librt", marker = "platform_python_implementation != 'PyPy'" },
     { name = "mypy-extensions" },
     { name = "pathspec" },
-    { name = "tomli", marker = "python_full_version < '3.11'" },
     { name = "typing-extensions" },
 ]
 sdist = { url = 
"https://files.pythonhosted.org/packages/4a/3c/78ecece71ee4b5445389a4ccd11627cfb9c69e4de554d11060171f376305/mypy-2.4.1.tar.gz";,
 hash = 
"sha256:63b590965691e540a335fa74dadf31a7069142f6b72e234689bbd244edf55623", size 
= 4066728, upload-time = "2026-10-28T19:23:13.286Z" }
 wheels = [
-    { url = 
"https://files.pythonhosted.org/packages/43/73/a216580781d8de91bf4ee5865d29da862301e72badc03cb5b7781431fa04/mypy-2.4.1-cp310-cp310-macosx_11_0_arm64.whl";,
 hash = 
"sha256:2b4e0aa029ad0c1d42cc494daf86d1e0efd15dab4db7bd096ece29e8a9689c6a", size 
= 14410964, upload-time = "2026-10-28T19:22:56.488Z" },
-    { url = 
"https://files.pythonhosted.org/packages/6e/aa/1c0599d5b0e0d09d6a7b8207cffab5c921a939f019ae44e17f2298b0fb37/mypy-2.4.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl";,
 hash = 
"sha256:c535efcb91f7e66f41b9bd2b5dbd78900a7609ce88f4c020d668e4c82d082b0b", size 
= 14554488, upload-time = "2026-10-28T19:21:24.159Z" },
-    { url = 
"https://files.pythonhosted.org/packages/81/b0/678facc6c830ea6533362a08746009d2f93f38c556963d4e57817a30275f/mypy-2.4.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl";,
 hash = 
"sha256:0724cf95fabc87ca4a2d5b7f276b43f51afce8a3804bde704490b008e377e50b", size 
= 15507914, upload-time = "2026-10-28T19:22:08.243Z" },
-    { url = 
"https://files.pythonhosted.org/packages/e6/bd/d1a660f556441009b3daec4a1066e62436599e3cb3dd0c4ddbbb84f4500c/mypy-2.4.1-cp310-cp310-musllinux_1_2_x86_64.whl";,
 hash = 
"sha256:0f0a8b8f5dee799195a3f2670a5b2617ac7193d3563f52dbef42ad6770c6a9db", size 
= 15824767, upload-time = "2026-10-28T19:21:51.664Z" },
-    { url = 
"https://files.pythonhosted.org/packages/3e/05/63fc2233abe01021f57b101b8213fbf5ec2faca057d40a349413800a9ac4/mypy-2.4.1-cp310-cp310-win_amd64.whl";,
 hash = 
"sha256:d4c343b2a720741a016d720b255e75581a50e2bede61d53250484e18562a1d64", size 
= 11314324, upload-time = "2026-10-28T19:22:31.876Z" },
-    { url = 
"https://files.pythonhosted.org/packages/08/24/09fe0d2c1046508cb7cb669859fbba2ef74e4fcd13f2ddf1e9babfcfaafd/mypy-2.4.1-cp310-cp310-win_arm64.whl";,
 hash = 
"sha256:8e437811ebd26d3e6258efb562a711b385c139be597dffed5e735c801d15c77f", size 
= 10881179, upload-time = "2026-10-28T19:23:09.193Z" },
     { url = 
"https://files.pythonhosted.org/packages/4b/8b/2bc7f489528db504221ad7eff6b3f83979ee57d066103c72a85d09046a30/mypy-2.4.1-cp311-cp311-macosx_11_0_arm64.whl";,
 hash = 
"sha256:79a1e79199e980fb41f219cb3d4746d25c64b0b623840d3ed57df1cdc13a6502", size 
= 14321495, upload-time = "2026-10-28T19:21:16.612Z" },
     { url = 
"https://files.pythonhosted.org/packages/18/9a/b2f037b4982dce33645296e4394b031ade60f697f468761fa3ea8e2f8ece/mypy-2.4.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl";,
 hash = 
"sha256:4e18d0da3898b3bcd16192f15a206e7b8b8dd0f4a0b3e51aa5bd5c2afe749e2c", size 
= 14467468, upload-time = "2026-10-28T19:22:10.629Z" },
     { url = 
"https://files.pythonhosted.org/packages/c4/5a/379f9bfa18bf3f8d43668fbd9ae4f2922dd027a559c461ca9d41cde1d32e/mypy-2.4.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl";,
 hash = 
"sha256:b69a15fc2e75858d6b15e91ed3a0dcff1a533265183b64734138791fe0f49aa5", size 
= 15421496, upload-time = "2026-10-28T19:22:48.005Z" },
@@ -687,12 +504,10 @@
 source = { registry = "https://pypi.org/simple"; }
 dependencies = [
     { name = "colorama", marker = "sys_platform == 'win32'" },
-    { name = "exceptiongroup", marker = "python_full_version < '3.11'" },
     { name = "iniconfig" },
     { name = "packaging" },
     { name = "pluggy" },
     { name = "pygments" },
-    { name = "tomli", marker = "python_full_version < '3.11'" },
 ]
 sdist = { url = 
"https://files.pythonhosted.org/packages/79/42/bb4641652e58dedeac2ec51abc1f8cae4fee4ec63899a0999016229a0f2a/pytest-9.2.0.tar.gz";,
 hash = 
"sha256:97c4f3b1f3c7414aa36465e09b8220f1d03627993bd51b1282e193753c80557b", size 
= 1797555, upload-time = "2026-10-27T21:30:20.728Z" }
 wheels = [
@@ -704,7 +519,6 @@
 version = "1.4.1.post1"
 source = { registry = "https://pypi.org/simple"; }
 dependencies = [
-    { name = "backports-asyncio-runner", marker = "python_full_version < 
'3.11'" },
     { name = "pytest" },
     { name = "typing-extensions", marker = "python_full_version < '3.13'" },
 ]
@@ -718,8 +532,7 @@
 version = "7.1.0"
 source = { registry = "https://pypi.org/simple"; }
 dependencies = [
-    { name = "coverage", version = "7.16.2", source = { registry = 
"https://pypi.org/simple"; }, extra = ["toml"], marker = "python_full_version < 
'3.11'" },
-    { name = "coverage", version = "7.17.0", source = { registry = 
"https://pypi.org/simple"; }, marker = "python_full_version >= '3.11'" },
+    { name = "coverage" },
     { name = "pluggy" },
     { name = "pytest" },
 ]
@@ -778,78 +591,6 @@
 ]
 
 [[package]]
-name = "tomli"
-version = "2.5.0"
-source = { registry = "https://pypi.org/simple"; }
-sdist = { url = 
"https://files.pythonhosted.org/packages/b0/78/9ad63712633ed3ab5cc1a648d863d7e7da371e9425e209555a0fe711b695/tomli-2.5.0.tar.gz";,
 hash = 
"sha256:264507556cd8b8c8e7c6ee037cdf443a463f03f4c958e57195e3d369711b8ff6", size 
= 17662, upload-time = "2026-10-07T12:23:37.892Z" }
-wheels = [
-    { url = 
"https://files.pythonhosted.org/packages/22/a6/ab99b60ee52acd949684febabc3005d0045d0f66bebd9cdebd67372d26dd/tomli-2.5.0-cp311-cp311-macosx_10_9_x86_64.whl";,
 hash = 
"sha256:c4dc1c1781f2f716de763d1e9a7b34c6a894e167e291c7c5d16c72f7a9538545", size 
= 163901, upload-time = "2026-10-07T12:22:15.601Z" },
-    { url = 
"https://files.pythonhosted.org/packages/bc/00/ee01b7ed4579180fff07142d290257f25ba786f23f3ec6005f620933c2f5/tomli-2.5.0-cp311-cp311-macosx_11_0_arm64.whl";,
 hash = 
"sha256:eff8babca5a7999bc137acbc7482a8b7e17ffca5075ab41f5d770ab408c7bfef", size 
= 163756, upload-time = "2026-10-07T12:22:16.957Z" },
-    { url = 
"https://files.pythonhosted.org/packages/72/c2/4efebf65372f6583185f79799312109dddb61102d47e5c33dcfd1a297aca/tomli-2.5.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl";,
 hash = 
"sha256:86665cee9c4835b7a7f1e8ec2c719b5258d4dc782887aded5a8ae7352a96843b", size 
= 268038, upload-time = "2026-10-07T12:22:18.135Z" },
-    { url = 
"https://files.pythonhosted.org/packages/53/07/5850468e925d898abb36038666f9c333a94d2a223e802a8ba5b6d319d23f/tomli-2.5.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl";,
 hash = 
"sha256:d7e369fd63331746182360977b1892bfc215476a30d61612d732425311639f56", size 
= 276422, upload-time = "2026-10-07T12:22:19.567Z" },
-    { url = 
"https://files.pythonhosted.org/packages/b4/87/f293984cdcf83c054196d4fd3dad44fc68ae55b4b8c44bc76cef360c3150/tomli-2.5.0-cp311-cp311-musllinux_1_2_aarch64.whl";,
 hash = 
"sha256:7ad1ea345759240d6463efa0ed1c704402752e49aa21476620738d74d72d8aa1", size 
= 272616, upload-time = "2026-10-07T12:22:20.794Z" },
-    { url = 
"https://files.pythonhosted.org/packages/ce/ce/db582886b3c1219d3fec93ebd669332482e5aee7a91e0f7838d84f2d1759/tomli-2.5.0-cp311-cp311-musllinux_1_2_x86_64.whl";,
 hash = 
"sha256:96243987194634bd411066ce40c952e108f86af04db533ecd8ac3ff2a85b1885", size 
= 276593, upload-time = "2026-10-07T12:22:22.12Z" },
-    { url = 
"https://files.pythonhosted.org/packages/bf/72/7619b87dea4261fc27dd7b54c4461c129c1f7d9bb7ba3aec89c797a431b8/tomli-2.5.0-cp311-cp311-win32.whl";,
 hash = 
"sha256:610b27d99f28ec5f191c7064a48f3ddb179a1fe6ca73d571483ae859f57b605e", size 
= 101830, upload-time = "2026-10-07T12:22:23.651Z" },
-    { url = 
"https://files.pythonhosted.org/packages/1e/74/220106da34502304b6751a2a9b8a9fbca6c3fd47e737a2e2e3da7c61c9db/tomli-2.5.0-cp311-cp311-win_amd64.whl";,
 hash = 
"sha256:c804ae44fe7b4bab5da295e4f980a1ff04670bca9d23fe0a4e887e08ebd741a8", size 
= 112742, upload-time = "2026-10-07T12:22:24.972Z" },
-    { url = 
"https://files.pythonhosted.org/packages/27/99/7d9c8b41837a7773613e169504147375c157a290167aa59ad74a085f521f/tomli-2.5.0-cp311-cp311-win_arm64.whl";,
 hash = 
"sha256:cfac177ebd6236003846ea339981f71457cb6eb748f23381eb257e45092e3980", size 
= 109332, upload-time = "2026-10-07T12:22:26.117Z" },
-    { url = 
"https://files.pythonhosted.org/packages/52/ed/7baa86f87493646a594de388c7c1c40a39dd0461f7e9c0359cbeefc91fe8/tomli-2.5.0-cp312-cp312-macosx_10_13_x86_64.whl";,
 hash = 
"sha256:1f4a40d03fb9f63424f0979855bdeaf44dd7696b8d59501822c10ed30ba532df", size 
= 164854, upload-time = "2026-10-07T12:22:27.444Z" },
-    { url = 
"https://files.pythonhosted.org/packages/a5/b1/44c0341f2224397855723c7a8a39f718ea6fcbcc3dacc66e5aeca0f334e3/tomli-2.5.0-cp312-cp312-macosx_11_0_arm64.whl";,
 hash = 
"sha256:9ebf8d19b17bd0daeb7b7dec81a946a439b753942fd0210d6e96c532249eea6b", size 
= 164074, upload-time = "2026-10-07T12:22:28.679Z" },
-    { url = 
"https://files.pythonhosted.org/packages/23/04/e2d5b7d3fba47adedb23de616c16d428ea076c79a3d8e1d95d649ffe197e/tomli-2.5.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl";,
 hash = 
"sha256:bf0b5e8e0f68ebb494356e577c06c139161efd8d3b9050f93b39b7c26cc54ff0", size 
= 274274, upload-time = "2026-10-07T12:22:29.804Z" },
-    { url = 
"https://files.pythonhosted.org/packages/43/90/6090e706ff27a6f89f4a40578e3324b95c3cd8c4150868aabf33a8f414c3/tomli-2.5.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl";,
 hash = 
"sha256:6cf74416bdc94ae458b14e37286c1073081850ac8459a00d0c5efef5d44294c6", size 
= 286435, upload-time = "2026-10-07T12:22:31.297Z" },
-    { url = 
"https://files.pythonhosted.org/packages/0a/9e/a2c40768df16c408f22430afb0a73e9d7e5f79c950884954649d1146b74d/tomli-2.5.0-cp312-cp312-musllinux_1_2_aarch64.whl";,
 hash = 
"sha256:61ea1ebe1e55a34ea8199cc8dbff398d35027b82271c8ac4802fd3a1fd5b1bcc", size 
= 278119, upload-time = "2026-10-07T12:22:32.601Z" },
-    { url = 
"https://files.pythonhosted.org/packages/12/25/3c0cb485b98e9cfac495629b1c93c87ccf0b72fbe9d2689fd8fe62c6d5a3/tomli-2.5.0-cp312-cp312-musllinux_1_2_x86_64.whl";,
 hash = 
"sha256:ed53f7e89bb04f6d9e8e7799112360b0c4d5cbff067de0814c98c37c39b920f7", size 
= 286177, upload-time = "2026-10-07T12:22:33.745Z" },
-    { url = 
"https://files.pythonhosted.org/packages/77/8b/0144c65f0e37e51c18d04ae15c21b19431c165002d0131fe9aa8b0b8b1e8/tomli-2.5.0-cp312-cp312-win32.whl";,
 hash = 
"sha256:e7ad033e27a516a233bea839cdb77b80146facb3b4f40bf02cd0cac165cdd5c2", size 
= 102760, upload-time = "2026-10-07T12:22:34.887Z" },
-    { url = 
"https://files.pythonhosted.org/packages/de/32/5d6d8f42fc9a05fce69354e00ff256484192f5f2fc9a2165718fa0de61ec/tomli-2.5.0-cp312-cp312-win_amd64.whl";,
 hash = 
"sha256:bd05de8c1698f8413dd7d869492693a0bf2211543b787ac78cd5e7536af1a6d7", size 
= 112722, upload-time = "2026-10-07T12:22:36.162Z" },
-    { url = 
"https://files.pythonhosted.org/packages/30/65/df18032218db0fb9b769fb23c8039a051f15c811993995ea04c350273a32/tomli-2.5.0-cp312-cp312-win_arm64.whl";,
 hash = 
"sha256:069435bd5480429b98c5e5afb02ab21c219b6f0064680671c6dc0d46817346ea", size 
= 109534, upload-time = "2026-10-07T12:22:37.296Z" },
-    { url = 
"https://files.pythonhosted.org/packages/42/e5/51736d70da209350969e15aca5c5ab6e2ce1ea87a0a892a6c13aec172a86/tomli-2.5.0-cp313-cp313-macosx_10_13_x86_64.whl";,
 hash = 
"sha256:943276cf269e0071948d9ff697159c1735e623c1151d88abb09b74659ef0cbea", size 
= 163328, upload-time = "2026-10-07T12:22:38.373Z" },
-    { url = 
"https://files.pythonhosted.org/packages/ec/55/086f80dab4ab497602644274e6dea7ec5dd0b4e262e443a8ad3bb7edee2d/tomli-2.5.0-cp313-cp313-macosx_11_0_arm64.whl";,
 hash = 
"sha256:463b16086865b97facd8d0b3fb4cb7c544e3f58d2a69dc3113d6db9653fdb043", size 
= 162246, upload-time = "2026-10-07T12:22:39.673Z" },
-    { url = 
"https://files.pythonhosted.org/packages/aa/eb/3ecc94459f3635c92321f4e7bde571323fdb2267c50e19e3188a281eae3b/tomli-2.5.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl";,
 hash = 
"sha256:1245a6638fc4bb0a60af38a7d45413db34a13842027c77597c712c998c62fdf0", size 
= 272655, upload-time = "2026-10-07T12:22:41.08Z" },
-    { url = 
"https://files.pythonhosted.org/packages/c0/d7/494fd1f0c37a621f1ad9975c2efadb523e8101f144ed6edb2e7fe64738f2/tomli-2.5.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl";,
 hash = 
"sha256:5d8bac3d603c97e6854424e5b2b5b741bdbde387e09f162fb0446812b4a8362b", size 
= 283595, upload-time = "2026-10-07T12:22:42.222Z" },
-    { url = 
"https://files.pythonhosted.org/packages/70/51/bb8d62b1317e6640866f6949b2d5855e5300f2c99d46de1cd245570bba65/tomli-2.5.0-cp313-cp313-musllinux_1_2_aarch64.whl";,
 hash = 
"sha256:21e4cae4114aba25aa0d4f85cdf486d290fb35c0954d7bba536248da64d43066", size 
= 276253, upload-time = "2026-10-07T12:22:43.625Z" },
-    { url = 
"https://files.pythonhosted.org/packages/66/f4/f46bd7f0763cd47de2db697dca9257c6a4adfd1a93b018cc75c8190ed5a8/tomli-2.5.0-cp313-cp313-musllinux_1_2_x86_64.whl";,
 hash = 
"sha256:bbaefc84548d754be821bba7c4141c4787dda182f9e77f2f87b71213529efa7b", size 
= 283582, upload-time = "2026-10-07T12:22:44.983Z" },
-    { url = 
"https://files.pythonhosted.org/packages/ac/03/70f2bcb2923a6db37818d917e124270a7f4cfd38ea576f5aa753a91c0ef5/tomli-2.5.0-cp313-cp313-win32.whl";,
 hash = 
"sha256:abdbf6313b8d9efe157edeb7ab6eae4de064b1300ad31abf73755154b30abe68", size 
= 102628, upload-time = "2026-10-07T12:22:46.508Z" },
-    { url = 
"https://files.pythonhosted.org/packages/dc/98/d52024bb5b0ff68b4f0d276d867f634c84a67319a7e9f6b7708a37742333/tomli-2.5.0-cp313-cp313-win_amd64.whl";,
 hash = 
"sha256:fd4dc129784e0c5335bd4e61dfcc4487499a013419e655cf2da1d091b7e0efdc", size 
= 113301, upload-time = "2026-10-07T12:22:47.647Z" },
-    { url = 
"https://files.pythonhosted.org/packages/6f/f2/540db3a70572a8c23a28aba3e9c358ce0ffffbafc990905c1343aa265b31/tomli-2.5.0-cp313-cp313-win_arm64.whl";,
 hash = 
"sha256:69491c143d2fe063046e0301e62a810bed338fa4d1ce0fd870c27dc1e09b0d84", size 
= 109744, upload-time = "2026-10-07T12:22:48.925Z" },
-    { url = 
"https://files.pythonhosted.org/packages/e4/49/caf6b307766eb9567664a8707e9d6be5fcc0e8903f18781c6677a60d80c7/tomli-2.5.0-cp314-cp314-macosx_10_15_x86_64.whl";,
 hash = 
"sha256:d3182ee2d887e507bd67319a0a61105d1dd33facc111329559a233b772c1a105", size 
= 162899, upload-time = "2026-10-07T12:22:50.088Z" },
-    { url = 
"https://files.pythonhosted.org/packages/d3/c8/68cfce773a2733a49c74f99d627fb461bd990756860099eac25617889585/tomli-2.5.0-cp314-cp314-macosx_11_0_arm64.whl";,
 hash = 
"sha256:521345fd1f19d45b8df87657aaa38b6f2ca3800059fadf428e7ebf479a383646", size 
= 162080, upload-time = "2026-10-07T12:22:51.558Z" },
-    { url = 
"https://files.pythonhosted.org/packages/7e/b2/e5bb8651fdad593f670501a7d718b1a7f73f064d44dea15e04c04dfef45d/tomli-2.5.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl";,
 hash = 
"sha256:6e95c7614e705bfe2b04b27aa124adec59752d15813df37e2156747cab3a006b", size 
= 273380, upload-time = "2026-10-07T12:22:52.918Z" },
-    { url = 
"https://files.pythonhosted.org/packages/8d/d2/9e2d7f8b1dfe0e2b34c245986ebd55c4c553ea4ce6c47c443b332673253f/tomli-2.5.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl";,
 hash = 
"sha256:7ac2027d37c3afbdf4bdd377f2676f6f1d2122a5be1f1137b49dced590b37e75", size 
= 283228, upload-time = "2026-10-07T12:22:54.173Z" },
-    { url = 
"https://files.pythonhosted.org/packages/ba/df/ec7b876b7b1a2718bd74a3743c076fff565b04029ba33e8f61fac262739f/tomli-2.5.0-cp314-cp314-musllinux_1_2_aarch64.whl";,
 hash = 
"sha256:c414be4ed9d3cac80c42e348fa5a956117d1a48227f48026e31f59cb4a7671eb", size 
= 277189, upload-time = "2026-10-07T12:22:55.342Z" },
-    { url = 
"https://files.pythonhosted.org/packages/7d/7b/e192d9eed0b9cb80da799f4d77052297fb9a2c3cc9b19f571f56ea88add6/tomli-2.5.0-cp314-cp314-musllinux_1_2_x86_64.whl";,
 hash = 
"sha256:9b03d7dc168353b4132965bde20feceabaa470e570c6f59660dfae59b1f9eeb3", size 
= 283632, upload-time = "2026-10-07T12:22:56.735Z" },
-    { url = 
"https://files.pythonhosted.org/packages/84/50/ff94454e75461d75623e47401ed323d65c10aab8fe9033242c20cd2fdf32/tomli-2.5.0-cp314-cp314-win32.whl";,
 hash = 
"sha256:6f041843c4d3a37245c0c056fd955b186bf8b1fb85690cbe40b81230891dc34b", size 
= 103535, upload-time = "2026-10-07T12:22:58.084Z" },
-    { url = 
"https://files.pythonhosted.org/packages/54/0b/bdacf05f963bd6026ebf6eeb0beda847d1d60e03e440725c64a4e08a0afd/tomli-2.5.0-cp314-cp314-win_amd64.whl";,
 hash = 
"sha256:f4b653094e18f9031102d3a1da5c729c8f222d85225b18037dac621695e46e1a", size 
= 114621, upload-time = "2026-10-07T12:22:59.2Z" },
-    { url = 
"https://files.pythonhosted.org/packages/61/99/53f438fa6ae4f9d4ed0ddde3e7242b3bdc34b48c8f9948b72b9e9b127676/tomli-2.5.0-cp314-cp314-win_arm64.whl";,
 hash = 
"sha256:3f89d10c1ff6a38d992c27fc8a4816af71a909e08a40ec66934240b1e74347c3", size 
= 111572, upload-time = "2026-10-07T12:23:00.479Z" },
-    { url = 
"https://files.pythonhosted.org/packages/b9/20/1f88f19427d380a40e90a770e087489eaafe4aeee070ae88ed2bbec00acd/tomli-2.5.0-cp314-cp314t-macosx_10_15_x86_64.whl";,
 hash = 
"sha256:e9e15b4a6c7dd6b85b5fbab29488a73f1f70de516942308daa266bf0e0aeb0d4", size 
= 171814, upload-time = "2026-10-07T12:23:01.914Z" },
-    { url = 
"https://files.pythonhosted.org/packages/d0/56/cbe5079c9f9a54b9b3e27fc82f08f3cb36edee75561679f53d2380c801d6/tomli-2.5.0-cp314-cp314t-macosx_11_0_arm64.whl";,
 hash = 
"sha256:e12bbcd32897272fb05929110362ae9ff4c1b9bb26bd9e971e71dcd3275b4c3d", size 
= 171324, upload-time = "2026-10-07T12:23:03.18Z" },
-    { url = 
"https://files.pythonhosted.org/packages/2b/30/1d53fd3b0f1cb3ba542e345ec32c26aefdddc4e829e4f3429af8a4f27782/tomli-2.5.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl";,
 hash = 
"sha256:20aa36de8f2cf87237143bc1fa1aae8d6612c09118f4da21c6a684db5dd1f6f9", size 
= 297441, upload-time = "2026-10-07T12:23:04.345Z" },
-    { url = 
"https://files.pythonhosted.org/packages/66/d9/0800acb6a111686f764c1b91ef15cc42a20a66a46013bb42220f1d2c61c1/tomli-2.5.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl";,
 hash = 
"sha256:22185fad8a1e622f064e78008018a0dd3323550dcb479cb7a1d296888d74024f", size 
= 307476, upload-time = "2026-10-07T12:23:05.671Z" },
-    { url = 
"https://files.pythonhosted.org/packages/e8/63/30a8f3cd51b5bec37f04744bad0b0dc6160df84aad4f27b0e9283d66f221/tomli-2.5.0-cp314-cp314t-musllinux_1_2_aarch64.whl";,
 hash = 
"sha256:984012f71908165449a951de2050d52f276bfe3aa5d5f570f63ddad814370374", size 
= 296113, upload-time = "2026-10-07T12:23:07.202Z" },
-    { url = 
"https://files.pythonhosted.org/packages/ab/18/0b9ffc597e69c5a1e20a7823cb60d54b39a9f54e91edcb8574f022186758/tomli-2.5.0-cp314-cp314t-musllinux_1_2_x86_64.whl";,
 hash = 
"sha256:f79203b3965b4000e91808aaa7c040206093f2b8bf86f455982f2274c9ccf442", size 
= 307725, upload-time = "2026-10-07T12:23:08.508Z" },
-    { url = 
"https://files.pythonhosted.org/packages/ab/c7/18f8baae0b5607a60e8e19b4a7fedee43a8ff6458e3896dcbbadeeac9c22/tomli-2.5.0-cp314-cp314t-win32.whl";,
 hash = 
"sha256:91294a9fb94a75542f6e46e4a2ae709bd8d9b51134098cae5cf3bea5478b6d03", size 
= 108546, upload-time = "2026-10-07T12:23:09.956Z" },
-    { url = 
"https://files.pythonhosted.org/packages/72/34/4cca9739254130627bde87500b3f2b512154fe2f278efa7e2a5e10ad4bcb/tomli-2.5.0-cp314-cp314t-win_amd64.whl";,
 hash = 
"sha256:f15e3e0b835a6d68b10c86bf80a3149780498d6911c93c3ffd1861d19f9200f1", size 
= 117814, upload-time = "2026-10-07T12:23:11.486Z" },
-    { url = 
"https://files.pythonhosted.org/packages/7d/fb/afa530d47dd80a78fce43beac6bc6e00f84558eafcffbc6f37b21e80d056/tomli-2.5.0-cp314-cp314t-win_arm64.whl";,
 hash = 
"sha256:6664b7ae7af7294256c53960a6103077f4914cec8ff98479c352f622c6f6b2f0", size 
= 115188, upload-time = "2026-10-07T12:23:12.728Z" },
-    { url = 
"https://files.pythonhosted.org/packages/66/98/316fdc00f8c0939e6fe50461dd343c162d3ad51d1286eb25b7db54361d50/tomli-2.5.0-cp315-cp315-macosx_10_15_x86_64.whl";,
 hash = 
"sha256:a525685c2f97da40762b8695eb7aa0af4c8344ca1905c73e4e29cb04d34607dc", size 
= 162775, upload-time = "2026-10-07T12:23:13.941Z" },
-    { url = 
"https://files.pythonhosted.org/packages/c5/22/7b10fa5bb01c9539f53f69b619361b19350acc73657772ea7ac70ba309a8/tomli-2.5.0-cp315-cp315-macosx_11_0_arm64.whl";,
 hash = 
"sha256:9dbb18c1cfb2f6517942fc9314437f66aa06d94436ffb1f06102ef3572f35276", size 
= 161406, upload-time = "2026-10-07T12:23:15.215Z" },
-    { url = 
"https://files.pythonhosted.org/packages/9c/e7/1a069d86dfd20f1f84f71c63faed9f83c1d890bc06c27d82dc7d888fb573/tomli-2.5.0-cp315-cp315-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl";,
 hash = 
"sha256:752e8b1aa6a4367ef8bf6a1a1e005540f7ed055ba36d7193796812ca5404eb52", size 
= 273855, upload-time = "2026-10-07T12:23:16.471Z" },
-    { url = 
"https://files.pythonhosted.org/packages/ae/83/d1ef43d1687d092ab9c235455c76e6e709483b346b056f086095c7c263a5/tomli-2.5.0-cp315-cp315-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl";,
 hash = 
"sha256:c47300f9bf791808f77d82747691c4bb09cb14bdf3060cca99b42cdc4361d5a7", size 
= 284910, upload-time = "2026-10-07T12:23:18.166Z" },
-    { url = 
"https://files.pythonhosted.org/packages/cc/05/f4d9cf7de61822ece0c3873f30d291e324911c71a378b8bfe5ced13fd9f5/tomli-2.5.0-cp315-cp315-musllinux_1_2_aarch64.whl";,
 hash = 
"sha256:19b0dd8749f4ea2f112c5fcfb3c5248390c899d7e2e173f1d91abee1fa0ff391", size 
= 277723, upload-time = "2026-10-07T12:23:19.355Z" },
-    { url = 
"https://files.pythonhosted.org/packages/42/28/78262493141fa543151cf005760c3cb01d09fc28a11f993c05109902cb8c/tomli-2.5.0-cp315-cp315-musllinux_1_2_x86_64.whl";,
 hash = 
"sha256:57b1c3b01fab802e2899bc3d168dca320e14165e2fd9fd584760fb4ca5826859", size 
= 285115, upload-time = "2026-10-07T12:23:20.698Z" },
-    { url = 
"https://files.pythonhosted.org/packages/1a/b9/e1dab9a30bcb677b5cc5cee810609cfd64f24306a3055767dd3fda00b1e0/tomli-2.5.0-cp315-cp315-win32.whl";,
 hash = 
"sha256:667e521b37a6c5ccaa044202c235b530f90177ffe2cd4a64ecc213c7dd535feb", size 
= 103475, upload-time = "2026-10-07T12:23:21.941Z" },
-    { url = 
"https://files.pythonhosted.org/packages/4c/bd/31a3790c11d6ea95fcf5e6022ac0f8d0543c9b61120b730fc481bd43d3b4/tomli-2.5.0-cp315-cp315-win_amd64.whl";,
 hash = 
"sha256:d747252933c8a65ef6bd8da0fbb7ce28a90eb6119d8cd00772cd528aa07b68d5", size 
= 114589, upload-time = "2026-10-07T12:23:23.098Z" },
-    { url = 
"https://files.pythonhosted.org/packages/47/a2/4f6310fa699364f0e3af7ee3af88dddd9af066d33e716a0265bbe2b3ea84/tomli-2.5.0-cp315-cp315-win_arm64.whl";,
 hash = 
"sha256:75dbcde8751b0a960aa3de173aa5e894d590755c6d7758b7e774c06f1dc3cbdd", size 
= 111493, upload-time = "2026-10-07T12:23:24.233Z" },
-    { url = 
"https://files.pythonhosted.org/packages/68/14/00853f0b396d8971107ae1921bb5b322fdee1650d2f16bf06c20adb532e5/tomli-2.5.0-cp315-cp315t-macosx_10_15_x86_64.whl";,
 hash = 
"sha256:2419c2a189551987b59d80e63ec355671283336f41c6b9b89462df679c7d0c57", size 
= 171380, upload-time = "2026-10-07T12:23:25.512Z" },
-    { url = 
"https://files.pythonhosted.org/packages/89/ad/fa6949321dadee46b27363974fb197b94c911c3b0f7a5fd26d7dc18fc2a0/tomli-2.5.0-cp315-cp315t-macosx_11_0_arm64.whl";,
 hash = 
"sha256:0dc598040da8d42cf20f0be588ed7004f46db12a0ac6c32e03a59dccedaaadcd", size 
= 170553, upload-time = "2026-10-07T12:23:26.855Z" },
-    { url = 
"https://files.pythonhosted.org/packages/53/aa/3056c919eb3e084df3752b2cf5f865dcc04af0b27dba2f66d7b28af4633a/tomli-2.5.0-cp315-cp315t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl";,
 hash = 
"sha256:49096930c8d886c9bbdab62d2d0d17ce823ddeea522309a190b36245d5b49e01", size 
= 294428, upload-time = "2026-10-07T12:23:28.132Z" },
-    { url = 
"https://files.pythonhosted.org/packages/96/b2/faeeb5d8769ea3832021d73e892c8391eae7b4b4f8b55a789127bd8b18a9/tomli-2.5.0-cp315-cp315t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl";,
 hash = 
"sha256:b8ade5023067f99fe72b88accd30d0ea05a158e9e32a11f124e731ea9695313f", size 
= 304909, upload-time = "2026-10-07T12:23:29.381Z" },
-    { url = 
"https://files.pythonhosted.org/packages/f6/52/f094c09e73fb654b621716d019acb5d29bdfd1be01df80c281d552bda48d/tomli-2.5.0-cp315-cp315t-musllinux_1_2_aarch64.whl";,
 hash = 
"sha256:b69564772b5c8f22ea5f498dff08cfa825045b4d4c4400529000bdf818aa3b2a", size 
= 293220, upload-time = "2026-10-07T12:23:30.608Z" },
-    { url = 
"https://files.pythonhosted.org/packages/86/f5/0c30541078ca4b505ce3bd76ed931facbfec524dd018535d691d1af0a6d2/tomli-2.5.0-cp315-cp315t-musllinux_1_2_x86_64.whl";,
 hash = 
"sha256:8ff3a2ca028c7eee0c777f9a092038d0a594a9fa04e215f929a22c329e2cb142", size 
= 305705, upload-time = "2026-10-07T12:23:32.181Z" },
-    { url = 
"https://files.pythonhosted.org/packages/05/74/590e7d19d6a118fc5cc5704ff358e21d95b8573f6b9443b1519f29ca8825/tomli-2.5.0-cp315-cp315t-win32.whl";,
 hash = 
"sha256:62fc1bc8eb03e3a9cadfca713d65614ed8e09d974a283295ffe3a831976b4dc5", size 
= 108432, upload-time = "2026-10-07T12:23:33.496Z" },
-    { url = 
"https://files.pythonhosted.org/packages/1c/b8/63a75cfb27a17c38550e44025d3a6e7be64516fd8608a3b75703bf37d81b/tomli-2.5.0-cp315-cp315t-win_amd64.whl";,
 hash = 
"sha256:f3fcbc57b1791fa6cbe5d8434179d51de12be1a4811469529f47f6e7487a2571", size 
= 117281, upload-time = "2026-10-07T12:23:34.648Z" },
-    { url = 
"https://files.pythonhosted.org/packages/72/01/e8c1debb2173973372934c68fc8e46170ab60ef23ed4592dff4dec6e8993/tomli-2.5.0-cp315-cp315t-win_arm64.whl";,
 hash = 
"sha256:d2ba24db8a9376921b5e87b4762b9adb0f3f1deaea68f2b8b0bb2c11efb9c3e7", size 
= 115069, upload-time = "2026-10-07T12:23:35.77Z" },
-    { url = 
"https://files.pythonhosted.org/packages/60/3f/3e3f8fd0919249b0200c80fbc4f9a1e70be19f9883da71dfb7f8b9ab8aca/tomli-2.5.0-py3-none-any.whl";,
 hash = 
"sha256:32a7b79ac57a2e83670ce329ccf675798bc5a2094783a63676866b70503f2e2b", size 
= 14765, upload-time = "2026-10-07T12:23:36.875Z" },
-]
-
-[[package]]
 name = "typing-extensions"
 version = "4.16.0"
 source = { registry = "https://pypi.org/simple"; }

Reply via email to