From abb764e0c889d651c0ae093d19fc1fba393da21f Mon Sep 17 00:00:00 2001 From: ruaridhg Date: Thu, 31 Jul 2025 16:27:48 +0100 Subject: [PATCH 01/39] Add _cache.py first attempt --- src/zarr/storage/__init__.py | 1 + src/zarr/storage/_cache.py | 490 +++++++++++++++++++++++++++++++++++ 2 files changed, 491 insertions(+) create mode 100644 src/zarr/storage/_cache.py diff --git a/src/zarr/storage/__init__.py b/src/zarr/storage/__init__.py index 00df50214f..d8ccdf51c5 100644 --- a/src/zarr/storage/__init__.py +++ b/src/zarr/storage/__init__.py @@ -4,6 +4,7 @@ from typing import Any from zarr.errors import ZarrDeprecationWarning +from zarr.storage._cache import LRUStoreCache from zarr.storage._common import StoreLike, StorePath from zarr.storage._fsspec import FsspecStore from zarr.storage._local import LocalStore diff --git a/src/zarr/storage/_cache.py b/src/zarr/storage/_cache.py new file mode 100644 index 0000000000..9214bae241 --- /dev/null +++ b/src/zarr/storage/_cache.py @@ -0,0 +1,490 @@ +import asyncio +import inspect +import io +import logging +import shutil +import time +import warnings +from collections import OrderedDict +from collections.abc import AsyncIterator, Generator, Iterable +from contextlib import contextmanager +from pathlib import Path +from threading import Lock +from typing import Any, Optional, TypeAlias + +import numpy as np + +from zarr.abc.store import OffsetByteRequest, RangeByteRequest, Store, SuffixByteRequest +from zarr.core.buffer import Buffer, BufferPrototype +from zarr.core.buffer.core import default_buffer_prototype +from zarr.core.common import concurrent_map +from zarr.storage._utils import normalize_path + +ByteRequest: TypeAlias = RangeByteRequest | OffsetByteRequest | SuffixByteRequest + +def buffer_size(v) -> int: + return np.asarray(v).nbytes + +def _path_to_prefix(path: Optional[str]) -> str: + # assume path already normalized + if path: + prefix = path + "/" + else: + prefix = "" + return prefix + +def _listdir_from_keys(store: Store, path: Optional[str] = None) -> list[str]: + # assume path already normalized + prefix = _path_to_prefix(path) + children = set() + for key in list(store.keys()): + if key.startswith(prefix) and len(key) > len(prefix): + suffix = key[len(prefix) :] + child = suffix.split("/")[0] + children.add(child) + return sorted(children) + +def listdir(store: Store, path: Path = None): + """Obtain a directory listing for the given path. If `store` provides a `listdir` + method, this will be called, otherwise will fall back to implementation via the + `MutableMapping` interface.""" + path = normalize_path(path) + if hasattr(store, "listdir"): + # pass through + return store.listdir(path) + else: + # slow version, iterate through all keys + warnings.warn( + f"Store {store} has no `listdir` method. From zarr 2.9 onwards " + "may want to inherit from `Store`.", + stacklevel=2, + ) + return _listdir_from_keys(store, path) + +def _get(path: Path, prototype: BufferPrototype, byte_range: ByteRequest | None) -> Buffer: + if byte_range is None: + return prototype.buffer.from_bytes(path.read_bytes()) + with path.open("rb") as f: + size = f.seek(0, io.SEEK_END) + if isinstance(byte_range, RangeByteRequest): + f.seek(byte_range.start) + return prototype.buffer.from_bytes(f.read(byte_range.end - f.tell())) + elif isinstance(byte_range, OffsetByteRequest): + f.seek(byte_range.offset) + elif isinstance(byte_range, SuffixByteRequest): + f.seek(max(0, size - byte_range.suffix)) + else: + raise TypeError(f"Unexpected byte_range, got {byte_range}.") + return prototype.buffer.from_bytes(f.read()) + +def _put( + path: Path, + value: Buffer, + start: int | None = None, + exclusive: bool = False, +) -> int | None: + path.parent.mkdir(parents=True, exist_ok=True) + if start is not None: + with path.open("r+b") as f: + f.seek(start) + # write takes any object supporting the buffer protocol + f.write(value.as_buffer_like()) + return None + else: + view = value.as_buffer_like() + if exclusive: + mode = "xb" + else: + mode = "wb" + with path.open(mode=mode) as f: + # write takes any object supporting the buffer protocol + return f.write(view) + + + +class LRUStoreCache(Store): + """Storage class that implements a least-recently-used (LRU) cache layer over + some other store. Intended primarily for use with stores that can be slow to + access, e.g., remote stores that require network communication to store and + retrieve data. + + Parameters + ---------- + store : Store + The store containing the actual data to be cached. + max_size : int + The maximum size that the cache may grow to, in number of bytes. Provide `None` + if you would like the cache to have unlimited size. + + Examples + -------- + The example below wraps an S3 store with an LRU cache:: + + >>> import s3fs + >>> import zarr + >>> s3 = s3fs.S3FileSystem(anon=True, client_kwargs=dict(region_name='eu-west-2')) + >>> store = s3fs.S3Map(root='zarr-demo/store', s3=s3, check=False) + >>> cache = zarr.LRUStoreCache(store, max_size=2**28) + >>> root = zarr.group(store=cache) # doctest: +REMOTE_DATA + >>> z = root['foo/bar/baz'] # doctest: +REMOTE_DATA + >>> from timeit import timeit + >>> # first data access is relatively slow, retrieved from store + ... timeit('print(z[:].tobytes())', number=1, globals=globals()) # doctest: +SKIP + b'Hello from the cloud!' + 0.1081731989979744 + >>> # second data access is faster, uses cache + ... timeit('print(z[:].tobytes())', number=1, globals=globals()) # doctest: +SKIP + b'Hello from the cloud!' + 0.0009490990014455747 + + """ + + supports_writes: bool = True + supports_deletes: bool = True + supports_partial_writes: bool = True + supports_listing: bool = True + + root: Path + + def __init__(self, store: Store, max_size: int): + super().__init__(read_only=store.read_only) # Initialize parent with store's read_only state + self._store = store + self._max_size = max_size + self._current_size = 0 + self._keys_cache = None + self._contains_cache: dict[Any, Any] = {} + self._listdir_cache: dict[Path, Any] = dict() + self._values_cache: dict[Path, Any] = OrderedDict() + self._mutex = Lock() + self.hits = self.misses = 0 + # self.log_level = log_level + # self.log_handler = log_handler + # self._configure_logger(log_level, log_handler) + + def __getstate__(self): + return ( + self._store, + self._max_size, + self._current_size, + self._keys_cache, + self._contains_cache, + self._listdir_cache, + self._values_cache, + self.hits, + self.misses, + ) + + def __setstate__(self, state): + ( + self._store, + self._max_size, + self._current_size, + self._keys_cache, + self._contains_cache, + self._listdir_cache, + self._values_cache, + self.hits, + self.misses, + ) = state + self._mutex = Lock() + + def __len__(self): + return len(self._keys()) + + def __iter__(self): + return self.keys() + + def __contains__(self, key): + with self._mutex: + if key not in self._contains_cache: + self._contains_cache[key] = key in self._store + return self._contains_cache[key] + + def clear(self): + self._store.clear() + self.invalidate() + + def keys(self): + with self._mutex: + return iter(self._keys()) + + def _keys(self): + if self._keys_cache is None: + self._keys_cache = list(self._store.keys()) + return self._keys_cache + + def listdir(self, path: Path = None): + with self._mutex: + try: + return self._listdir_cache[path] + except KeyError: + listing = listdir(self._store, path) + self._listdir_cache[path] = listing + return listing + + def getsize(self, path=None) -> int: + return self._store.getsize(key=path) + + def _pop_value(self): + # remove the first value from the cache, as this will be the least recently + # used value + _, v = self._values_cache.popitem(last=False) + return v + + def _accommodate_value(self, value_size): + if self._max_size is None: + return + # ensure there is enough space in the cache for a new value + while self._current_size + value_size > self._max_size: + v = self._pop_value() + self._current_size -= buffer_size(v) + + def _cache_value(self, key: Path, value): + # cache a value + value_size = buffer_size(value) + # check size of the value against max size, as if the value itself exceeds max + # size then we are never going to cache it + if self._max_size is None or value_size <= self._max_size: + self._accommodate_value(value_size) + self._values_cache[key] = value + self._current_size += value_size + + def invalidate(self): + """Completely clear the cache.""" + with self._mutex: + self._values_cache.clear() + self._invalidate_keys() + self._current_size = 0 + + def invalidate_values(self): + """Clear the values cache.""" + with self._mutex: + self._values_cache.clear() + + def invalidate_keys(self): + """Clear the keys cache.""" + with self._mutex: + self._invalidate_keys() + + def _invalidate_keys(self): + self._keys_cache = None + self._contains_cache.clear() + self._listdir_cache.clear() + + def _invalidate_value(self, key): + if key in self._values_cache: + value = self._values_cache.pop(key) + self._current_size -= buffer_size(value) + + def __getitem__(self, key): + try: + # first try to obtain the value from the cache + with self._mutex: + value = self._values_cache[key] + # cache hit if no KeyError is raised + self.hits += 1 + # treat the end as most recently used + self._values_cache.move_to_end(key) + + except KeyError: + # cache miss, retrieve value from the store + value = self._store[key] + with self._mutex: + self.misses += 1 + # need to check if key is not in the cache, as it may have been cached + # while we were retrieving the value from the store + if key not in self._values_cache: + self._cache_value(key, value) + + return value + + def __setitem__(self, key, value): + self._store[key] = value + with self._mutex: + self._invalidate_keys() + self._invalidate_value(key) + self._cache_value(key, value) + + def __delitem__(self, key): + del self._store[key] + with self._mutex: + self._invalidate_keys() + self._invalidate_value(key) + + def __eq__(self, value: object) -> bool: + return type(self) is type(value) and self._store.__eq__(value._store) # type: ignore[attr-defined] + + async def delete(self, key: str) -> None: + """ + Remove a key from the store. + + Parameters + ---------- + key : str + + Notes + ----- + If ``key`` is a directory within this store, the entire directory + at ``store.root / key`` is deleted. + """ + # docstring inherited + self._check_writable() + path = self.root / key + if path.is_dir(): # TODO: support deleting directories? shutil.rmtree? + shutil.rmtree(path) + else: + await asyncio.to_thread(path.unlink, True) # Q: we may want to raise if path is missing + + + async def exists(self, key: str) -> bool: + # docstring inherited + path = self.root / key + return await asyncio.to_thread(path.is_file) + + async def get( + self, + key: str, + prototype: BufferPrototype | None = None, + byte_range: ByteRequest | None = None, + ) -> Buffer | None: + # docstring inherited + if prototype is None: + prototype = default_buffer_prototype() + if not self._is_open: + await self._open() + assert isinstance(key, str) + path = self.root / key + + try: + return await asyncio.to_thread(_get, path, prototype, byte_range) + except (FileNotFoundError, IsADirectoryError, NotADirectoryError): + return None + + + async def get_partial_values( + self, + prototype: BufferPrototype, + key_ranges: Iterable[tuple[str, ByteRequest | None]], + ) -> list[Buffer | None]: + # docstring inherited + args = [] + for key, byte_range in key_ranges: + assert isinstance(key, str) + path = self.root / key + args.append((_get, path, prototype, byte_range)) + return await concurrent_map(args, asyncio.to_thread, limit=None) # TODO: fix limit + + + async def list(self) -> AsyncIterator[str]: + # docstring inherited + to_strip = self.root.as_posix() + "/" + for p in list(self.root.rglob("*")): + if p.is_file(): + yield p.as_posix().replace(to_strip, "") + # This method should be async, like overridden methods in child classes. + # However, that's not straightforward: + # https://stackoverflow.com/questions/68905848 + + async def list_dir(self, prefix: str) -> AsyncIterator[str]: + # docstring inherited + base = self.root / prefix + try: + key_iter = base.iterdir() + for key in key_iter: + yield key.relative_to(base).as_posix() + except (FileNotFoundError, NotADirectoryError): + pass + # This method should be async, like overridden methods in child classes. + # However, that's not straightforward: + # https://stackoverflow.com/questions/68905848 + + async def list_prefix(self, prefix: str) -> AsyncIterator[str]: + # docstring inherited + to_strip = self.root.as_posix() + "/" + prefix = prefix.rstrip("/") + for p in (self.root / prefix).rglob("*"): + if p.is_file(): + yield p.as_posix().replace(to_strip, "") + # This method should be async, like overridden methods in child classes. + # However, that's not straightforward: + # https://stackoverflow.com/questions/68905848 + + async def set(self, key: str, value: Buffer) -> None: + # docstring inherited + return await self._set(key, value) + + async def set_partial_values( + self, key_start_values: Iterable[tuple[str, int, bytes | bytearray | memoryview]] + ) -> None: + # docstring inherited + self._check_writable() + args = [] + for key, start, value in key_start_values: + assert isinstance(key, str) + path = self.root / key + args.append((_put, path, value, start)) + await concurrent_map(args, asyncio.to_thread, limit=None) # TODO: fix limit + + # def _configure_logger( + # self, log_level: str = "DEBUG", log_handler: logging.Handler | None = None + # ) -> None: + # self.log_level = log_level + # self.logger = logging.getLogger(f"LoggingStore({self._store})") + # self.logger.setLevel(log_level) + + # if not self.logger.hasHandlers(): + # if not log_handler: + # log_handler = self._default_handler() + # # Add handler to logger + # self.logger.addHandler(log_handler) + + # def _default_handler(self) -> logging.Handler: + # """Define a default log handler""" + # handler = logging.StreamHandler(stream=sys.stdout) + # handler.setLevel(self.log_level) + # handler.setFormatter( + # logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s") + # ) + # return handler + + # @contextmanager + # def log(self, hint: Any = "") -> Generator[None, None, None]: + # """Context manager to log method calls + + # Each call to the wrapped store is logged to the configured logger and added to + # the counter dict. + # """ + # method = inspect.stack()[2].function + # op = f"{type(self._store).__name__}.{method}" + # if hint: + # op = f"{op}({hint})" + # self.logger.info(" Calling %s", op) + # start_time = time.time() + # try: + # self.counter[method] += 1 + # yield + # finally: + # end_time = time.time() + # self.logger.info("Finished %s [%.2f s]", op, end_time - start_time) + + # @property + # def supports_writes(self) -> bool: + # with self.log(): + # return self._store.supports_writes + + # @property + # def supports_deletes(self) -> bool: + # with self.log(): + # return self._store.supports_deletes + + # @property + # def supports_partial_writes(self) -> bool: + # with self.log(): + # return self._store.supports_partial_writes + + # @property + # def supports_listing(self) -> bool: + # with self.log(): + # return self._store.supports_listing + + \ No newline at end of file From d72078ffa1be026a707cc72012a6fe1f75b68fb2 Mon Sep 17 00:00:00 2001 From: ruaridhg Date: Thu, 31 Jul 2025 16:33:08 +0100 Subject: [PATCH 02/39] test.py ran without error, creating test.zarr/ --- src/zarr/storage/_cache.py | 18 ++++++++++++++++++ test.py | 6 ++++++ 2 files changed, 24 insertions(+) create mode 100644 test.py diff --git a/src/zarr/storage/_cache.py b/src/zarr/storage/_cache.py index 9214bae241..cafa80b59b 100644 --- a/src/zarr/storage/_cache.py +++ b/src/zarr/storage/_cache.py @@ -149,6 +149,7 @@ class LRUStoreCache(Store): def __init__(self, store: Store, max_size: int): super().__init__(read_only=store.read_only) # Initialize parent with store's read_only state self._store = store + self.root = getattr(store, 'root', None) # Add this line to inherit root from underlying store self._max_size = max_size self._current_size = 0 self._keys_cache = None @@ -340,6 +341,19 @@ async def exists(self, key: str) -> bool: # docstring inherited path = self.root / key return await asyncio.to_thread(path.is_file) + + async def _set(self, key: str, value: Buffer, exclusive: bool = False) -> None: + if not self._is_open: + await self._open() + self._check_writable() + assert isinstance(key, str) + if not isinstance(value, Buffer): + raise TypeError( + f"LocalStore.set(): `value` must be a Buffer instance. Got an instance of {type(value)} instead." + ) + path = self.root / key + await asyncio.to_thread(_put, path, value, start=None, exclusive=exclusive) + async def get( self, @@ -400,6 +414,10 @@ async def list_dir(self, prefix: str) -> AsyncIterator[str]: async def list_prefix(self, prefix: str) -> AsyncIterator[str]: # docstring inherited + # Delegate to the underlying store + async for key in self._store.list_prefix(prefix): + yield key + to_strip = self.root.as_posix() + "/" prefix = prefix.rstrip("/") for p in (self.root / prefix).rglob("*"): diff --git a/test.py b/test.py new file mode 100644 index 0000000000..f20aee33ef --- /dev/null +++ b/test.py @@ -0,0 +1,6 @@ +import zarr +import zarr.storage + +local_store = zarr.storage.LocalStore('test.zarr') # doctest: +SKIP +cache = zarr.storage.LRUStoreCache(local_store, max_size=2**28) +zarr_array = zarr.ones((100, 100), chunks=(10, 10), dtype='f8', store=cache, mode='w') # doctest: +REMOTE_DATA From e1266b4377bbd9ce9f4376e19d4630aa72641b23 Mon Sep 17 00:00:00 2001 From: ruaridhg Date: Mon, 4 Aug 2025 14:34:46 +0100 Subject: [PATCH 03/39] Added testing for cache.py LRUStoreCache for v3 --- pyproject.toml | 1 + src/zarr/storage/_cache.py | 444 +++++++++++++++++++++------------ tests/test_store/test_cache.py | 315 +++++++++++++++++++++++ 3 files changed, 596 insertions(+), 164 deletions(-) create mode 100644 tests/test_store/test_cache.py diff --git a/pyproject.toml b/pyproject.toml index 95528c4558..d183806ef9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -392,6 +392,7 @@ filterwarnings = [ "ignore:Unclosed client session int: - return np.asarray(v).nbytes + """Calculate the size in bytes of a value, handling Buffer objects properly.""" + if hasattr(v, '__len__') and hasattr(v, 'nbytes'): + # This is likely a Buffer object + return v.nbytes + elif hasattr(v, 'to_bytes'): + # This is a Buffer object, get its bytes representation + return len(v.to_bytes()) + elif isinstance(v, (bytes, bytearray, memoryview)): + return len(v) + else: + # Fallback to numpy + return np.asarray(v).nbytes def _path_to_prefix(path: Optional[str]) -> str: # assume path already normalized @@ -146,21 +157,76 @@ class LRUStoreCache(Store): root: Path - def __init__(self, store: Store, max_size: int): - super().__init__(read_only=store.read_only) # Initialize parent with store's read_only state + def __init__(self, store: Store, max_size: int, **kwargs): + # Extract and handle known parameters + read_only = kwargs.get('read_only', getattr(store, 'read_only', False)) + + # Call parent constructor with read_only parameter + super().__init__(read_only=read_only) + self._store = store - self.root = getattr(store, 'root', None) # Add this line to inherit root from underlying store self._max_size = max_size self._current_size = 0 self._keys_cache = None self._contains_cache: dict[Any, Any] = {} - self._listdir_cache: dict[Path, Any] = dict() - self._values_cache: dict[Path, Any] = OrderedDict() + self._listdir_cache: dict[str, Any] = {} + self._values_cache: dict[str, Any] = OrderedDict() self._mutex = Lock() self.hits = self.misses = 0 - # self.log_level = log_level - # self.log_handler = log_handler - # self._configure_logger(log_level, log_handler) + + # Handle root attribute if present in underlying store + if hasattr(store, 'root'): + self.root = store.root + else: + self.root = None + + @classmethod + async def open(cls, store: Store, max_size: int, **kwargs: Any) -> "LRUStoreCache": + """ + Create and open the LRU cache store. + + Parameters + ---------- + store : Store + The underlying store to wrap with caching. + max_size : int + The maximum size that the cache may grow to, in number of bytes. + **kwargs : Any + Additional keyword arguments passed to the store constructor. + + Returns + ------- + LRUStoreCache + The opened cache store instance. + """ + cache = cls(store, max_size, **kwargs) + await cache._open() + return cache + + def with_read_only(self, read_only: bool = False) -> "LRUStoreCache": + """ + Return a new LRUStoreCache with a new read_only setting. + + Parameters + ---------- + read_only + If True, the store will be created in read-only mode. Defaults to False. + + Returns + ------- + LRUStoreCache + A new LRUStoreCache with the specified read_only setting. + """ + # Create a new underlying store with the new read_only setting + underlying_store = self._store.with_read_only(read_only) + return LRUStoreCache(underlying_store, self._max_size, read_only=read_only) + + + def _normalize_key(self, key): + """Convert key to string if it's a Path object, otherwise return as-is""" + if isinstance(key, Path): + return str(key) + return key def __getstate__(self): return ( @@ -173,6 +239,8 @@ def __getstate__(self): self._values_cache, self.hits, self.misses, + self._read_only, + self._is_open, ) def __setstate__(self, state): @@ -186,6 +254,8 @@ def __setstate__(self, state): self._values_cache, self.hits, self.misses, + self._read_only, + self._is_open, ) = state self._mutex = Lock() @@ -201,8 +271,11 @@ def __contains__(self, key): self._contains_cache[key] = key in self._store return self._contains_cache[key] - def clear(self): - self._store.clear() + async def clear(self): + # Check if store is writable + self._check_writable() + + await self._store.clear() self.invalidate() def keys(self): @@ -214,13 +287,15 @@ def _keys(self): self._keys_cache = list(self._store.keys()) return self._keys_cache - def listdir(self, path: Path = None): + def listdir(self, path: Path | None = None): with self._mutex: + # Normalize path to string for consistent caching + path_key = self._normalize_key(path) if path is not None else None try: - return self._listdir_cache[path] + return self._listdir_cache[path_key] except KeyError: listing = listdir(self._store, path) - self._listdir_cache[path] = listing + self._listdir_cache[path_key] = listing return listing def getsize(self, path=None) -> int: @@ -240,14 +315,22 @@ def _accommodate_value(self, value_size): v = self._pop_value() self._current_size -= buffer_size(v) - def _cache_value(self, key: Path, value): + def _cache_value(self, key: str, value): # Change parameter type annotation # cache a value - value_size = buffer_size(value) + # Convert Buffer objects to bytes for storage in cache + if hasattr(value, 'to_bytes'): + cache_value = value.to_bytes() + else: + cache_value = value + + value_size = buffer_size(cache_value) # check size of the value against max size, as if the value itself exceeds max # size then we are never going to cache it if self._max_size is None or value_size <= self._max_size: self._accommodate_value(value_size) - self._values_cache[key] = value + # Ensure key is string for consistent caching + cache_key = self._normalize_key(key) + self._values_cache[cache_key] = cache_value self._current_size += value_size def invalidate(self): @@ -273,29 +356,31 @@ def _invalidate_keys(self): self._listdir_cache.clear() def _invalidate_value(self, key): - if key in self._values_cache: - value = self._values_cache.pop(key) + cache_key = self._normalize_key(key) + if cache_key in self._values_cache: + value = self._values_cache.pop(cache_key) self._current_size -= buffer_size(value) def __getitem__(self, key): + cache_key = self._normalize_key(key) try: # first try to obtain the value from the cache with self._mutex: - value = self._values_cache[key] + value = self._values_cache[cache_key] # cache hit if no KeyError is raised self.hits += 1 # treat the end as most recently used - self._values_cache.move_to_end(key) + self._values_cache.move_to_end(cache_key) except KeyError: # cache miss, retrieve value from the store - value = self._store[key] + value = self._store[key] # Use original key for store access with self._mutex: self.misses += 1 # need to check if key is not in the cache, as it may have been cached # while we were retrieving the value from the store - if key not in self._values_cache: - self._cache_value(key, value) + if cache_key not in self._values_cache: + self._cache_value(cache_key, value) return value @@ -303,14 +388,16 @@ def __setitem__(self, key, value): self._store[key] = value with self._mutex: self._invalidate_keys() - self._invalidate_value(key) - self._cache_value(key, value) + cache_key = self._normalize_key(key) + self._invalidate_value(cache_key) + self._cache_value(cache_key, value) def __delitem__(self, key): del self._store[key] with self._mutex: self._invalidate_keys() - self._invalidate_value(key) + cache_key = self._normalize_key(key) + self._invalidate_value(cache_key) def __eq__(self, value: object) -> bool: return type(self) is type(value) and self._store.__eq__(value._store) # type: ignore[attr-defined] @@ -328,31 +415,52 @@ async def delete(self, key: str) -> None: If ``key`` is a directory within this store, the entire directory at ``store.root / key`` is deleted. """ - # docstring inherited + # Check if store is writable self._check_writable() - path = self.root / key - if path.is_dir(): # TODO: support deleting directories? shutil.rmtree? - shutil.rmtree(path) + + # Delegate to the underlying store for actual deletion + if hasattr(self._store, 'delete'): + await self._store.delete(key) else: - await asyncio.to_thread(path.unlink, True) # Q: we may want to raise if path is missing + # Fallback for stores that don't have async delete + del self._store[key] + + # Invalidate cache entries + with self._mutex: + self._invalidate_keys() + cache_key = self._normalize_key(key) + self._invalidate_value(cache_key) async def exists(self, key: str) -> bool: - # docstring inherited - path = self.root / key - return await asyncio.to_thread(path.is_file) + # Delegate to the underlying store + if hasattr(self._store, 'exists'): + return await self._store.exists(key) + else: + # Fallback for stores that don't have async exists + return key in self._store async def _set(self, key: str, value: Buffer, exclusive: bool = False) -> None: - if not self._is_open: - await self._open() + # Check if store is writable self._check_writable() - assert isinstance(key, str) - if not isinstance(value, Buffer): - raise TypeError( - f"LocalStore.set(): `value` must be a Buffer instance. Got an instance of {type(value)} instead." - ) - path = self.root / key - await asyncio.to_thread(_put, path, value, start=None, exclusive=exclusive) + + # Delegate to the underlying store + if hasattr(self._store, 'set'): + await self._store.set(key, value) + else: + # Fallback for stores that don't have async set + # Convert Buffer to bytes for sync stores + if hasattr(value, 'to_bytes'): + self._store[key] = value.to_bytes() + else: + self._store[key] = value + + # Update cache + with self._mutex: + self._invalidate_keys() + cache_key = self._normalize_key(key) + self._invalidate_value(cache_key) + self._cache_value(cache_key, value) async def get( @@ -361,18 +469,84 @@ async def get( prototype: BufferPrototype | None = None, byte_range: ByteRequest | None = None, ) -> Buffer | None: - # docstring inherited - if prototype is None: - prototype = default_buffer_prototype() - if not self._is_open: - await self._open() - assert isinstance(key, str) - path = self.root / key - + # Use the cache for get operations + cache_key = self._normalize_key(key) + + # For byte_range requests, don't use cache for now (could be optimized later) + if byte_range is not None: + if hasattr(self._store, 'get') and callable(self._store.get): + # Check if it's an async Store.get method (takes prototype and byte_range) + try: + return await self._store.get(key, prototype, byte_range) + except TypeError: + # Fallback to sync get from mapping + full_value = self._store.get(key) + if full_value is None: + return None + if prototype is None: + prototype = default_buffer_prototype() + # This is a simplified implementation - a full implementation would handle byte ranges + return prototype.buffer.from_bytes(full_value) + else: + # Fallback - get full value from mapping and slice + try: + full_value = self._store[key] + if prototype is None: + prototype = default_buffer_prototype() + # This is a simplified implementation - a full implementation would handle byte ranges + return prototype.buffer.from_bytes(full_value) + except KeyError: + return None + try: - return await asyncio.to_thread(_get, path, prototype, byte_range) - except (FileNotFoundError, IsADirectoryError, NotADirectoryError): - return None + # Try cache first + with self._mutex: + value = self._values_cache[cache_key] + self.hits += 1 + self._values_cache.move_to_end(cache_key) + if prototype is None: + prototype = default_buffer_prototype() + return prototype.buffer.from_bytes(value) + except KeyError: + # Cache miss - get from store + if hasattr(self._store, 'get') and callable(self._store.get): + # Try async Store.get method first + try: + result = await self._store.get(key, prototype, byte_range) + except TypeError: + # Fallback to sync mapping get + try: + value = self._store.get(key) + if value is None: + result = None + else: + if prototype is None: + prototype = default_buffer_prototype() + result = prototype.buffer.from_bytes(value) + except KeyError: + result = None + else: + # Fallback for sync stores/mappings + try: + value = self._store[key] + if prototype is None: + prototype = default_buffer_prototype() + result = prototype.buffer.from_bytes(value) + except KeyError: + result = None + + # Cache the result if we got one + if result is not None: + with self._mutex: + self.misses += 1 + if cache_key not in self._values_cache: + self._cache_value(cache_key, result.to_bytes()) + else: + # Still count as a miss even if result is None + with self._mutex: + self.misses += 1 + + return result async def get_partial_values( @@ -380,52 +554,52 @@ async def get_partial_values( prototype: BufferPrototype, key_ranges: Iterable[tuple[str, ByteRequest | None]], ) -> list[Buffer | None]: - # docstring inherited - args = [] - for key, byte_range in key_ranges: - assert isinstance(key, str) - path = self.root / key - args.append((_get, path, prototype, byte_range)) - return await concurrent_map(args, asyncio.to_thread, limit=None) # TODO: fix limit + # Delegate to the underlying store + if hasattr(self._store, 'get_partial_values'): + return await self._store.get_partial_values(prototype, key_ranges) + else: + # Fallback - get each value individually + results = [] + for key, byte_range in key_ranges: + result = await self.get(key, prototype, byte_range) + results.append(result) + return results async def list(self) -> AsyncIterator[str]: - # docstring inherited - to_strip = self.root.as_posix() + "/" - for p in list(self.root.rglob("*")): - if p.is_file(): - yield p.as_posix().replace(to_strip, "") - # This method should be async, like overridden methods in child classes. - # However, that's not straightforward: - # https://stackoverflow.com/questions/68905848 + # Delegate to the underlying store + if hasattr(self._store, 'list'): + async for key in self._store.list(): + yield key + else: + # Fallback for stores that don't have async list + for key in list(self._store.keys()): + yield key async def list_dir(self, prefix: str) -> AsyncIterator[str]: - # docstring inherited - base = self.root / prefix - try: - key_iter = base.iterdir() - for key in key_iter: - yield key.relative_to(base).as_posix() - except (FileNotFoundError, NotADirectoryError): - pass - # This method should be async, like overridden methods in child classes. - # However, that's not straightforward: - # https://stackoverflow.com/questions/68905848 + # Delegate to the underlying store + if hasattr(self._store, 'list_dir'): + async for key in self._store.list_dir(prefix): + yield key + else: + # Fallback using listdir + try: + listing = self.listdir(prefix) + for item in listing: + yield item + except (FileNotFoundError, NotADirectoryError, KeyError): + pass async def list_prefix(self, prefix: str) -> AsyncIterator[str]: - # docstring inherited # Delegate to the underlying store - async for key in self._store.list_prefix(prefix): - yield key - - to_strip = self.root.as_posix() + "/" - prefix = prefix.rstrip("/") - for p in (self.root / prefix).rglob("*"): - if p.is_file(): - yield p.as_posix().replace(to_strip, "") - # This method should be async, like overridden methods in child classes. - # However, that's not straightforward: - # https://stackoverflow.com/questions/68905848 + if hasattr(self._store, 'list_prefix'): + async for key in self._store.list_prefix(prefix): + yield key + else: + # Fallback - filter all keys by prefix + for key in list(self._store.keys()): + if key.startswith(prefix): + yield key async def set(self, key: str, value: Buffer) -> None: # docstring inherited @@ -434,75 +608,17 @@ async def set(self, key: str, value: Buffer) -> None: async def set_partial_values( self, key_start_values: Iterable[tuple[str, int, bytes | bytearray | memoryview]] ) -> None: - # docstring inherited + # Check if store is writable self._check_writable() - args = [] - for key, start, value in key_start_values: - assert isinstance(key, str) - path = self.root / key - args.append((_put, path, value, start)) - await concurrent_map(args, asyncio.to_thread, limit=None) # TODO: fix limit - - # def _configure_logger( - # self, log_level: str = "DEBUG", log_handler: logging.Handler | None = None - # ) -> None: - # self.log_level = log_level - # self.logger = logging.getLogger(f"LoggingStore({self._store})") - # self.logger.setLevel(log_level) - - # if not self.logger.hasHandlers(): - # if not log_handler: - # log_handler = self._default_handler() - # # Add handler to logger - # self.logger.addHandler(log_handler) - - # def _default_handler(self) -> logging.Handler: - # """Define a default log handler""" - # handler = logging.StreamHandler(stream=sys.stdout) - # handler.setLevel(self.log_level) - # handler.setFormatter( - # logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s") - # ) - # return handler - - # @contextmanager - # def log(self, hint: Any = "") -> Generator[None, None, None]: - # """Context manager to log method calls - - # Each call to the wrapped store is logged to the configured logger and added to - # the counter dict. - # """ - # method = inspect.stack()[2].function - # op = f"{type(self._store).__name__}.{method}" - # if hint: - # op = f"{op}({hint})" - # self.logger.info(" Calling %s", op) - # start_time = time.time() - # try: - # self.counter[method] += 1 - # yield - # finally: - # end_time = time.time() - # self.logger.info("Finished %s [%.2f s]", op, end_time - start_time) - - # @property - # def supports_writes(self) -> bool: - # with self.log(): - # return self._store.supports_writes - - # @property - # def supports_deletes(self) -> bool: - # with self.log(): - # return self._store.supports_deletes - - # @property - # def supports_partial_writes(self) -> bool: - # with self.log(): - # return self._store.supports_partial_writes - - # @property - # def supports_listing(self) -> bool: - # with self.log(): - # return self._store.supports_listing - - \ No newline at end of file + + # Delegate to the underlying store + if hasattr(self._store, 'set_partial_values'): + await self._store.set_partial_values(key_start_values) + else: + # Fallback - this is complex to implement properly, so just invalidate cache + for key, _start, _value in key_start_values: + # For now, just invalidate the cache for these keys + with self._mutex: + self._invalidate_keys() + cache_key = self._normalize_key(key) + self._invalidate_value(cache_key) diff --git a/tests/test_store/test_cache.py b/tests/test_store/test_cache.py new file mode 100644 index 0000000000..8838f490a6 --- /dev/null +++ b/tests/test_store/test_cache.py @@ -0,0 +1,315 @@ +from __future__ import annotations + +import pytest +from collections import Counter +from typing import Any + +from zarr.core.buffer import cpu +from zarr.storage import LRUStoreCache, MemoryStore +from zarr.testing.store import StoreTests + + +class CountingDict(dict): + """A dictionary that counts operations for testing purposes.""" + + def __init__(self): + super().__init__() + self.counter = Counter() + + def __getitem__(self, key): + self.counter["__getitem__", key] += 1 + return super().__getitem__(key) + + def __setitem__(self, key, value): + self.counter["__setitem__", key] += 1 + return super().__setitem__(key, value) + + def __contains__(self, key): + self.counter["__contains__", key] += 1 + return super().__contains__(key) + + def __iter__(self): + self.counter["__iter__"] += 1 + return super().__iter__() + + def keys(self): + self.counter["keys"] += 1 + return super().keys() + + +def skip_if_nested_chunks(**kwargs): + if kwargs.get("dimension_separator") == "/": + pytest.skip("nested chunks are unsupported") + +class TestLRUStoreCache(StoreTests[LRUStoreCache, cpu.Buffer]): + store_cls = LRUStoreCache + buffer_cls = cpu.buffer_prototype.buffer + CountingClass = CountingDict + LRUStoreClass = LRUStoreCache + root = "" + + async def get(self, store: LRUStoreCache, key: str) -> cpu.Buffer: + """Get method required by StoreTests.""" + return await store.get(key, prototype=cpu.buffer_prototype) + + async def set(self, store: LRUStoreCache, key: str, value: cpu.Buffer) -> None: + """Set method required by StoreTests.""" + await store.set(key, value) + + @pytest.fixture + def store_kwargs(self): + """Provide default kwargs for store creation.""" + return {"store": MemoryStore(), "max_size": 2**27} + + @pytest.fixture + async def store(self, store_kwargs: dict[str, Any]) -> LRUStoreCache: + """Override store fixture to use constructor instead of open.""" + return self.store_cls(**store_kwargs) + + @pytest.fixture + def open_kwargs(self): + """Provide default kwargs for store.open().""" + return {"store": MemoryStore(), "max_size": 2**27} + + def create_store(self, **kwargs): + # wrapper therefore no dimension_separator argument + skip_if_nested_chunks(**kwargs) + return self.LRUStoreClass(MemoryStore(), max_size=2**27) + + def create_store_from_mapping(self, mapping, **kwargs): + # Handle creation from existing mapping + skip_if_nested_chunks(**kwargs) + # Create a MemoryStore from the mapping + underlying_store = MemoryStore() + if mapping: + # Convert mapping to store data + for k, v in mapping.items(): + underlying_store._store_dict[k] = v + return self.LRUStoreClass(underlying_store, max_size=2**27) + + def test_cache_values_no_max_size(self): + # setup store + store = self.CountingClass() + foo_key = self.root + "foo" + bar_key = self.root + "bar" + store[foo_key] = b"xxx" + store[bar_key] = b"yyy" + assert 0 == store.counter["__getitem__", foo_key] + assert 1 == store.counter["__setitem__", foo_key] + assert 0 == store.counter["__getitem__", bar_key] + assert 1 == store.counter["__setitem__", bar_key] + + # setup cache + cache = self.LRUStoreClass(store, max_size=None) + assert 0 == cache.hits + assert 0 == cache.misses + + # test first __getitem__, cache miss + assert b"xxx" == cache[foo_key] + assert 1 == store.counter["__getitem__", foo_key] + assert 1 == store.counter["__setitem__", foo_key] + assert 0 == cache.hits + assert 1 == cache.misses + + # test second __getitem__, cache hit + assert b"xxx" == cache[foo_key] + assert 1 == store.counter["__getitem__", foo_key] + assert 1 == store.counter["__setitem__", foo_key] + assert 1 == cache.hits + assert 1 == cache.misses + + # test __setitem__, __getitem__ + cache[foo_key] = b"zzz" + assert 1 == store.counter["__getitem__", foo_key] + assert 2 == store.counter["__setitem__", foo_key] + # should be a cache hit + assert b"zzz" == cache[foo_key] + assert 1 == store.counter["__getitem__", foo_key] + assert 2 == store.counter["__setitem__", foo_key] + assert 2 == cache.hits + assert 1 == cache.misses + + # manually invalidate all cached values + cache.invalidate_values() + assert b"zzz" == cache[foo_key] + assert 2 == store.counter["__getitem__", foo_key] + assert 2 == store.counter["__setitem__", foo_key] + cache.invalidate() + assert b"zzz" == cache[foo_key] + assert 3 == store.counter["__getitem__", foo_key] + assert 2 == store.counter["__setitem__", foo_key] + + # test __delitem__ + del cache[foo_key] + with pytest.raises(KeyError): + # noinspection PyStatementEffect + cache[foo_key] + with pytest.raises(KeyError): + # noinspection PyStatementEffect + store[foo_key] + + # verify other keys untouched + assert 0 == store.counter["__getitem__", bar_key] + assert 1 == store.counter["__setitem__", bar_key] + + def test_cache_values_with_max_size(self): + # setup store + store = self.CountingClass() + foo_key = self.root + "foo" + bar_key = self.root + "bar" + store[foo_key] = b"xxx" + store[bar_key] = b"yyy" + assert 0 == store.counter["__getitem__", foo_key] + assert 0 == store.counter["__getitem__", bar_key] + # setup cache - can only hold one item + cache = self.LRUStoreClass(store, max_size=5) + assert 0 == cache.hits + assert 0 == cache.misses + + # test first 'foo' __getitem__, cache miss + assert b"xxx" == cache[foo_key] + assert 1 == store.counter["__getitem__", foo_key] + assert 0 == cache.hits + assert 1 == cache.misses + + # test second 'foo' __getitem__, cache hit + assert b"xxx" == cache[foo_key] + assert 1 == store.counter["__getitem__", foo_key] + assert 1 == cache.hits + assert 1 == cache.misses + + # test first 'bar' __getitem__, cache miss + assert b"yyy" == cache[bar_key] + assert 1 == store.counter["__getitem__", bar_key] + assert 1 == cache.hits + assert 2 == cache.misses + + # test second 'bar' __getitem__, cache hit + assert b"yyy" == cache[bar_key] + assert 1 == store.counter["__getitem__", bar_key] + assert 2 == cache.hits + assert 2 == cache.misses + + # test 'foo' __getitem__, should have been evicted, cache miss + assert b"xxx" == cache[foo_key] + assert 2 == store.counter["__getitem__", foo_key] + assert 2 == cache.hits + assert 3 == cache.misses + + # test 'bar' __getitem__, should have been evicted, cache miss + assert b"yyy" == cache[bar_key] + assert 2 == store.counter["__getitem__", bar_key] + assert 2 == cache.hits + assert 4 == cache.misses + + # setup store + store = self.CountingClass() + store[foo_key] = b"xxx" + store[bar_key] = b"yyy" + assert 0 == store.counter["__getitem__", foo_key] + assert 0 == store.counter["__getitem__", bar_key] + # setup cache - can hold two items + cache = self.LRUStoreClass(store, max_size=6) + assert 0 == cache.hits + assert 0 == cache.misses + + # test first 'foo' __getitem__, cache miss + assert b"xxx" == cache[foo_key] + assert 1 == store.counter["__getitem__", foo_key] + assert 0 == cache.hits + assert 1 == cache.misses + + # test second 'foo' __getitem__, cache hit + assert b"xxx" == cache[foo_key] + assert 1 == store.counter["__getitem__", foo_key] + assert 1 == cache.hits + assert 1 == cache.misses + + # test first 'bar' __getitem__, cache miss + assert b"yyy" == cache[bar_key] + assert 1 == store.counter["__getitem__", bar_key] + assert 1 == cache.hits + assert 2 == cache.misses + + # test second 'bar' __getitem__, cache hit + assert b"yyy" == cache[bar_key] + assert 1 == store.counter["__getitem__", bar_key] + assert 2 == cache.hits + assert 2 == cache.misses + + # test 'foo' __getitem__, should still be cached + assert b"xxx" == cache[foo_key] + assert 1 == store.counter["__getitem__", foo_key] + assert 3 == cache.hits + assert 2 == cache.misses + + # test 'bar' __getitem__, should still be cached + assert b"yyy" == cache[bar_key] + assert 1 == store.counter["__getitem__", bar_key] + assert 4 == cache.hits + assert 2 == cache.misses + + def test_cache_keys(self): + # setup + store = self.CountingClass() + foo_key = self.root + "foo" + bar_key = self.root + "bar" + baz_key = self.root + "baz" + store[foo_key] = b"xxx" + store[bar_key] = b"yyy" + assert 0 == store.counter["__contains__", foo_key] + assert 0 == store.counter["__iter__"] + assert 0 == store.counter["keys"] + cache = self.LRUStoreClass(store, max_size=None) + + # keys should be cached on first call + keys = sorted(cache.keys()) + assert keys == [bar_key, foo_key] + assert 1 == store.counter["keys"] + # keys should now be cached + assert keys == sorted(cache.keys()) + assert 1 == store.counter["keys"] + assert foo_key in cache + assert 1 == store.counter["__contains__", foo_key] + # the next check for `foo_key` is cached + assert foo_key in cache + assert 1 == store.counter["__contains__", foo_key] + assert keys == sorted(cache) + assert 0 == store.counter["__iter__"] + assert 1 == store.counter["keys"] + + # cache should be cleared if store is modified - crude but simple for now + cache[baz_key] = b"zzz" + keys = sorted(cache.keys()) + assert keys == [bar_key, baz_key, foo_key] + assert 2 == store.counter["keys"] + # keys should now be cached + assert keys == sorted(cache.keys()) + assert 2 == store.counter["keys"] + + # manually invalidate keys + cache.invalidate_keys() + keys = sorted(cache.keys()) + assert keys == [bar_key, baz_key, foo_key] + assert 3 == store.counter["keys"] + assert 1 == store.counter["__contains__", foo_key] + assert 0 == store.counter["__iter__"] + cache.invalidate_keys() + keys = sorted(cache) + assert keys == [bar_key, baz_key, foo_key] + assert 4 == store.counter["keys"] + assert 1 == store.counter["__contains__", foo_key] + assert 0 == store.counter["__iter__"] + cache.invalidate_keys() + assert foo_key in cache + assert 4 == store.counter["keys"] + assert 2 == store.counter["__contains__", foo_key] + assert 0 == store.counter["__iter__"] + + # check these would get counted if called directly + assert foo_key in store + assert 3 == store.counter["__contains__", foo_key] + assert keys == sorted(store) + assert 1 == store.counter["__iter__"] + + From 40e6f46b355626ae9be21ca0528dc58af4876680 Mon Sep 17 00:00:00 2001 From: ruaridhg Date: Mon, 4 Aug 2025 14:38:03 +0100 Subject: [PATCH 04/39] Fix ruff errors --- src/zarr/storage/_cache.py | 71 +++++++++++++++------------------- tests/test_store/test_cache.py | 15 +++---- 2 files changed, 40 insertions(+), 46 deletions(-) diff --git a/src/zarr/storage/_cache.py b/src/zarr/storage/_cache.py index a43289adc4..754c880735 100644 --- a/src/zarr/storage/_cache.py +++ b/src/zarr/storage/_cache.py @@ -1,23 +1,16 @@ -import asyncio -import inspect import io -import logging -import shutil -import time import warnings from collections import OrderedDict -from collections.abc import AsyncIterator, Generator, Iterable -from contextlib import contextmanager +from collections.abc import AsyncIterator, Iterable from pathlib import Path from threading import Lock -from typing import Any, Optional, TypeAlias +from typing import Any, TypeAlias import numpy as np from zarr.abc.store import OffsetByteRequest, RangeByteRequest, Store, SuffixByteRequest from zarr.core.buffer import Buffer, BufferPrototype from zarr.core.buffer.core import default_buffer_prototype -from zarr.core.common import concurrent_map from zarr.storage._utils import normalize_path ByteRequest: TypeAlias = RangeByteRequest | OffsetByteRequest | SuffixByteRequest @@ -36,7 +29,7 @@ def buffer_size(v) -> int: # Fallback to numpy return np.asarray(v).nbytes -def _path_to_prefix(path: Optional[str]) -> str: +def _path_to_prefix(path: str | None) -> str: # assume path already normalized if path: prefix = path + "/" @@ -44,7 +37,7 @@ def _path_to_prefix(path: Optional[str]) -> str: prefix = "" return prefix -def _listdir_from_keys(store: Store, path: Optional[str] = None) -> list[str]: +def _listdir_from_keys(store: Store, path: str | None = None) -> list[str]: # assume path already normalized prefix = _path_to_prefix(path) children = set() @@ -149,21 +142,21 @@ class LRUStoreCache(Store): 0.0009490990014455747 """ - + supports_writes: bool = True supports_deletes: bool = True supports_partial_writes: bool = True supports_listing: bool = True - + root: Path def __init__(self, store: Store, max_size: int, **kwargs): # Extract and handle known parameters read_only = kwargs.get('read_only', getattr(store, 'read_only', False)) - + # Call parent constructor with read_only parameter super().__init__(read_only=read_only) - + self._store = store self._max_size = max_size self._current_size = 0 @@ -173,7 +166,7 @@ def __init__(self, store: Store, max_size: int, **kwargs): self._values_cache: dict[str, Any] = OrderedDict() self._mutex = Lock() self.hits = self.misses = 0 - + # Handle root attribute if present in underlying store if hasattr(store, 'root'): self.root = store.root @@ -274,7 +267,7 @@ def __contains__(self, key): async def clear(self): # Check if store is writable self._check_writable() - + await self._store.clear() self.invalidate() @@ -322,7 +315,7 @@ def _cache_value(self, key: str, value): # Change parameter type annotation cache_value = value.to_bytes() else: cache_value = value - + value_size = buffer_size(cache_value) # check size of the value against max size, as if the value itself exceeds max # size then we are never going to cache it @@ -398,10 +391,10 @@ def __delitem__(self, key): self._invalidate_keys() cache_key = self._normalize_key(key) self._invalidate_value(cache_key) - + def __eq__(self, value: object) -> bool: return type(self) is type(value) and self._store.__eq__(value._store) # type: ignore[attr-defined] - + async def delete(self, key: str) -> None: """ Remove a key from the store. @@ -417,21 +410,21 @@ async def delete(self, key: str) -> None: """ # Check if store is writable self._check_writable() - + # Delegate to the underlying store for actual deletion if hasattr(self._store, 'delete'): await self._store.delete(key) else: # Fallback for stores that don't have async delete del self._store[key] - + # Invalidate cache entries with self._mutex: self._invalidate_keys() cache_key = self._normalize_key(key) self._invalidate_value(cache_key) - - + + async def exists(self, key: str) -> bool: # Delegate to the underlying store if hasattr(self._store, 'exists'): @@ -439,11 +432,11 @@ async def exists(self, key: str) -> bool: else: # Fallback for stores that don't have async exists return key in self._store - + async def _set(self, key: str, value: Buffer, exclusive: bool = False) -> None: # Check if store is writable self._check_writable() - + # Delegate to the underlying store if hasattr(self._store, 'set'): await self._store.set(key, value) @@ -454,7 +447,7 @@ async def _set(self, key: str, value: Buffer, exclusive: bool = False) -> None: self._store[key] = value.to_bytes() else: self._store[key] = value - + # Update cache with self._mutex: self._invalidate_keys() @@ -462,7 +455,7 @@ async def _set(self, key: str, value: Buffer, exclusive: bool = False) -> None: self._invalidate_value(cache_key) self._cache_value(cache_key, value) - + async def get( self, key: str, @@ -471,7 +464,7 @@ async def get( ) -> Buffer | None: # Use the cache for get operations cache_key = self._normalize_key(key) - + # For byte_range requests, don't use cache for now (could be optimized later) if byte_range is not None: if hasattr(self._store, 'get') and callable(self._store.get): @@ -497,7 +490,7 @@ async def get( return prototype.buffer.from_bytes(full_value) except KeyError: return None - + try: # Try cache first with self._mutex: @@ -534,7 +527,7 @@ async def get( result = prototype.buffer.from_bytes(value) except KeyError: result = None - + # Cache the result if we got one if result is not None: with self._mutex: @@ -545,9 +538,9 @@ async def get( # Still count as a miss even if result is None with self._mutex: self.misses += 1 - + return result - + async def get_partial_values( self, @@ -565,7 +558,7 @@ async def get_partial_values( results.append(result) return results - + async def list(self) -> AsyncIterator[str]: # Delegate to the underlying store if hasattr(self._store, 'list'): @@ -575,7 +568,7 @@ async def list(self) -> AsyncIterator[str]: # Fallback for stores that don't have async list for key in list(self._store.keys()): yield key - + async def list_dir(self, prefix: str) -> AsyncIterator[str]: # Delegate to the underlying store if hasattr(self._store, 'list_dir'): @@ -589,7 +582,7 @@ async def list_dir(self, prefix: str) -> AsyncIterator[str]: yield item except (FileNotFoundError, NotADirectoryError, KeyError): pass - + async def list_prefix(self, prefix: str) -> AsyncIterator[str]: # Delegate to the underlying store if hasattr(self._store, 'list_prefix'): @@ -600,17 +593,17 @@ async def list_prefix(self, prefix: str) -> AsyncIterator[str]: for key in list(self._store.keys()): if key.startswith(prefix): yield key - + async def set(self, key: str, value: Buffer) -> None: # docstring inherited return await self._set(key, value) - + async def set_partial_values( self, key_start_values: Iterable[tuple[str, int, bytes | bytearray | memoryview]] ) -> None: # Check if store is writable self._check_writable() - + # Delegate to the underlying store if hasattr(self._store, 'set_partial_values'): await self._store.set_partial_values(key_start_values) diff --git a/tests/test_store/test_cache.py b/tests/test_store/test_cache.py index 8838f490a6..48bfe4aeb0 100644 --- a/tests/test_store/test_cache.py +++ b/tests/test_store/test_cache.py @@ -1,9 +1,10 @@ from __future__ import annotations -import pytest from collections import Counter from typing import Any +import pytest + from zarr.core.buffer import cpu from zarr.storage import LRUStoreCache, MemoryStore from zarr.testing.store import StoreTests @@ -11,27 +12,27 @@ class CountingDict(dict): """A dictionary that counts operations for testing purposes.""" - + def __init__(self): super().__init__() self.counter = Counter() - + def __getitem__(self, key): self.counter["__getitem__", key] += 1 return super().__getitem__(key) - + def __setitem__(self, key, value): self.counter["__setitem__", key] += 1 return super().__setitem__(key, value) - + def __contains__(self, key): self.counter["__contains__", key] += 1 return super().__contains__(key) - + def __iter__(self): self.counter["__iter__"] += 1 return super().__iter__() - + def keys(self): self.counter["keys"] += 1 return super().keys() From eadc7bb2a8b2e39cffb6120b5a05f90374c70fe4 Mon Sep 17 00:00:00 2001 From: ruaridhg Date: Mon, 4 Aug 2025 14:38:38 +0100 Subject: [PATCH 05/39] Add working example comparing LocalStore to LRUStoreCache --- test.py | 94 +++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 92 insertions(+), 2 deletions(-) diff --git a/test.py b/test.py index f20aee33ef..60ee85d29f 100644 --- a/test.py +++ b/test.py @@ -1,6 +1,96 @@ import zarr import zarr.storage +import time -local_store = zarr.storage.LocalStore('test.zarr') # doctest: +SKIP +# Example 1: Local store benchmark +print("=== Local Store Benchmark ===") +local_store = zarr.storage.LocalStore('test.zarr') cache = zarr.storage.LRUStoreCache(local_store, max_size=2**28) -zarr_array = zarr.ones((100, 100), chunks=(10, 10), dtype='f8', store=cache, mode='w') # doctest: +REMOTE_DATA +zarr_array = zarr.ones((100, 100), chunks=(10, 10), dtype='f8', store=cache, mode='w') + +# Read benchmark with cache +start = time.time() +for _ in range(100): + _ = zarr_array[:] +elapsed_cache = time.time() - start + +# Read benchmark without cache +zarr_array_nocache = zarr.open('test.zarr', mode='r') +start = time.time() +for _ in range(100): + _ = zarr_array_nocache[:] +elapsed_nocache = time.time() - start + +print(f"Read time with LRUStoreCache: {elapsed_cache:.4f} s") +print(f"Read time without cache: {elapsed_nocache:.4f} s") +print(f"Speedup: {elapsed_nocache/elapsed_cache:.2f}x\n") + +############################################### + +# Example 2: Remote store (with error handling) +print("=== Remote Store Benchmark ===") +import gcsfs +import zarr + +# Use Google Cloud Storage filesystem +gcs = gcsfs.GCSFileSystem(token='anon') # anonymous access +store = gcsfs.GCSMap(root='ucl-hip-ct-35a68e99feaae8932b1d44da0358940b/A186/lung-right/4.26um_VOI-3_bm18.ome.zarr/6', gcs=gcs, check = False) +cache = zarr.storage.LRUStoreCache(store, max_size=2**28) + +try: + # Open the zarr array directly since this appears to be a zarr array path + z = zarr.open(cache) + from timeit import timeit + print(f"Array info - Shape: {z.shape}, dtype: {z.dtype}") + + # Benchmark reading with cache + print("Benchmarking reads with LRUStoreCache...") + start = time.time() + for i in range(10): # Fewer iterations for remote access + _ = z[0:10, 0:10, 0:10] # Read a small chunk + elapsed_cache = time.time() - start + + # Benchmark reading without cache (direct store access) + print("Benchmarking reads without cache...") + z_nocache = zarr.open(store) # Direct store without cache + start = time.time() + for i in range(10): # Same number of iterations + _ = z_nocache[0:10, 0:10, 0:10] # Read the same small chunk + elapsed_nocache = time.time() - start + + print(f"Read time with LRUStoreCache: {elapsed_cache:.4f} s") + print(f"Read time without cache: {elapsed_nocache:.4f} s") + print(f"Speedup: {elapsed_nocache/elapsed_cache:.2f}x") + + # Test cache effectiveness with repeated access + print("\nTesting cache effectiveness...") + print("First access (from remote):") + start = time.time() + _ = z[20:30, 20:30, 20:30] + first_access = time.time() - start + + print("Second access (from cache):") + start = time.time() + _ = z[20:30, 20:30, 20:30] # Same chunk should be cached + second_access = time.time() - start + + print(f"First access time: {first_access:.4f} s") + print(f"Second access time: {second_access:.4f} s") + print(f"Cache speedup: {first_access/second_access:.2f}x") +except Exception as e: + print(f"Error accessing zarr array: {e}") + print("This might be a group - trying to list contents...") + try: + # Try opening as group without specifying mode + root = zarr.open_group(store=cache) + print(f"Available arrays/groups: {list(root.keys())}") + except Exception as e2: + print(f"Error accessing as group: {e2}") + # If still failing, try direct store access + try: + print("Trying direct store listing...") + # List keys directly from the store + keys = list(store.keys()) + print(f"Store keys: {keys[:10]}...") # Show first 10 keys + except Exception as e3: + print(f"Direct store access failed: {e3}") \ No newline at end of file From 5f90a7168de7fddd481ebfdb36b4d8917ca953d5 Mon Sep 17 00:00:00 2001 From: ruaridhg Date: Mon, 4 Aug 2025 14:39:09 +0100 Subject: [PATCH 06/39] Delete test.py to clean-up --- test.py | 96 --------------------------------------------------------- 1 file changed, 96 deletions(-) delete mode 100644 test.py diff --git a/test.py b/test.py deleted file mode 100644 index 60ee85d29f..0000000000 --- a/test.py +++ /dev/null @@ -1,96 +0,0 @@ -import zarr -import zarr.storage -import time - -# Example 1: Local store benchmark -print("=== Local Store Benchmark ===") -local_store = zarr.storage.LocalStore('test.zarr') -cache = zarr.storage.LRUStoreCache(local_store, max_size=2**28) -zarr_array = zarr.ones((100, 100), chunks=(10, 10), dtype='f8', store=cache, mode='w') - -# Read benchmark with cache -start = time.time() -for _ in range(100): - _ = zarr_array[:] -elapsed_cache = time.time() - start - -# Read benchmark without cache -zarr_array_nocache = zarr.open('test.zarr', mode='r') -start = time.time() -for _ in range(100): - _ = zarr_array_nocache[:] -elapsed_nocache = time.time() - start - -print(f"Read time with LRUStoreCache: {elapsed_cache:.4f} s") -print(f"Read time without cache: {elapsed_nocache:.4f} s") -print(f"Speedup: {elapsed_nocache/elapsed_cache:.2f}x\n") - -############################################### - -# Example 2: Remote store (with error handling) -print("=== Remote Store Benchmark ===") -import gcsfs -import zarr - -# Use Google Cloud Storage filesystem -gcs = gcsfs.GCSFileSystem(token='anon') # anonymous access -store = gcsfs.GCSMap(root='ucl-hip-ct-35a68e99feaae8932b1d44da0358940b/A186/lung-right/4.26um_VOI-3_bm18.ome.zarr/6', gcs=gcs, check = False) -cache = zarr.storage.LRUStoreCache(store, max_size=2**28) - -try: - # Open the zarr array directly since this appears to be a zarr array path - z = zarr.open(cache) - from timeit import timeit - print(f"Array info - Shape: {z.shape}, dtype: {z.dtype}") - - # Benchmark reading with cache - print("Benchmarking reads with LRUStoreCache...") - start = time.time() - for i in range(10): # Fewer iterations for remote access - _ = z[0:10, 0:10, 0:10] # Read a small chunk - elapsed_cache = time.time() - start - - # Benchmark reading without cache (direct store access) - print("Benchmarking reads without cache...") - z_nocache = zarr.open(store) # Direct store without cache - start = time.time() - for i in range(10): # Same number of iterations - _ = z_nocache[0:10, 0:10, 0:10] # Read the same small chunk - elapsed_nocache = time.time() - start - - print(f"Read time with LRUStoreCache: {elapsed_cache:.4f} s") - print(f"Read time without cache: {elapsed_nocache:.4f} s") - print(f"Speedup: {elapsed_nocache/elapsed_cache:.2f}x") - - # Test cache effectiveness with repeated access - print("\nTesting cache effectiveness...") - print("First access (from remote):") - start = time.time() - _ = z[20:30, 20:30, 20:30] - first_access = time.time() - start - - print("Second access (from cache):") - start = time.time() - _ = z[20:30, 20:30, 20:30] # Same chunk should be cached - second_access = time.time() - start - - print(f"First access time: {first_access:.4f} s") - print(f"Second access time: {second_access:.4f} s") - print(f"Cache speedup: {first_access/second_access:.2f}x") -except Exception as e: - print(f"Error accessing zarr array: {e}") - print("This might be a group - trying to list contents...") - try: - # Try opening as group without specifying mode - root = zarr.open_group(store=cache) - print(f"Available arrays/groups: {list(root.keys())}") - except Exception as e2: - print(f"Error accessing as group: {e2}") - # If still failing, try direct store access - try: - print("Trying direct store listing...") - # List keys directly from the store - keys = list(store.keys()) - print(f"Store keys: {keys[:10]}...") # Show first 10 keys - except Exception as e3: - print(f"Direct store access failed: {e3}") \ No newline at end of file From ae51d234e0becd86bf5f9b549102bc1ac1785d1a Mon Sep 17 00:00:00 2001 From: ruaridhg Date: Thu, 7 Aug 2025 14:45:28 +0100 Subject: [PATCH 07/39] Added lrustorecache to changes and user-guide docs --- changes/3357.feature.rst | 1 + docs/user-guide/lrustorecache.rst | 210 ++++++++++++++++++++++++++++++ 2 files changed, 211 insertions(+) create mode 100644 changes/3357.feature.rst create mode 100644 docs/user-guide/lrustorecache.rst diff --git a/changes/3357.feature.rst b/changes/3357.feature.rst new file mode 100644 index 0000000000..94fdedfa1a --- /dev/null +++ b/changes/3357.feature.rst @@ -0,0 +1 @@ +Add LRUStoreCache to Zarr 3.0 \ No newline at end of file diff --git a/docs/user-guide/lrustorecache.rst b/docs/user-guide/lrustorecache.rst new file mode 100644 index 0000000000..bfa0b04769 --- /dev/null +++ b/docs/user-guide/lrustorecache.rst @@ -0,0 +1,210 @@ +.. only:: doctest + + >>> import shutil + >>> shutil.rmtree('test.zarr', ignore_errors=True) + +.. _user-guide-lrustorecache: + +LRUStoreCache guide +=================== + +The :class:`zarr.storage.LRUStoreCache` provides a least-recently-used (LRU) cache layer +that can be wrapped around any Zarr store to improve performance for repeated data access. +This is particularly useful when working with remote stores (e.g., S3, HTTP) where network +latency can significantly impact data access speed. + +The LRUStoreCache implements a cache that stores frequently accessed data chunks in memory, +automatically evicting the least recently used items when the cache reaches its maximum size. + +.. note:: + The LRUStoreCache is a wrapper store that maintains compatibility with the full + :class:`zarr.abc.store.Store` API while adding transparent caching functionality. + +Basic Usage +----------- + +Creating an LRUStoreCache is straightforward - simply wrap any existing store with the cache: + + >>> import zarr + >>> import zarr.storage + >>> import numpy as np + >>> + >>> # Create a local store and wrap it with LRU cache + >>> local_store = zarr.storage.LocalStore('test.zarr') + >>> cache = zarr.storage.LRUStoreCache(local_store, max_size=2**28) # 256MB cache + >>> + >>> # Create an array using the cached store + >>> zarr_array = zarr.zeros((100, 100), chunks=(10, 10), dtype='f8', store=cache, mode='w') + >>> + >>> # Write some data to force chunk creation + >>> zarr_array[:] = np.random.random((100, 100)) + +The ``max_size`` parameter controls the maximum memory usage of the cache in bytes. Set it to +``None`` for unlimited cache size (use with caution). + +Performance Benefits +------------------- + +The LRUStoreCache provides significant performance improvements for repeated data access: + + >>> import time + >>> + >>> # Benchmark reading with cache + >>> start = time.time() + >>> for _ in range(100): + ... _ = zarr_array[:] + >>> elapsed_cache = time.time() - start + >>> + >>> # Compare with direct store access (without cache) + >>> zarr_array_nocache = zarr.open('test.zarr', mode='r') + >>> start = time.time() + >>> for _ in range(100): + ... _ = zarr_array_nocache[:] + >>> elapsed_nocache = time.time() - start + >>> + >>> print(f"Speedup: {elapsed_nocache/elapsed_cache:.2f}x") + +Cache effectiveness is particularly pronounced with repeated access to the same data chunks. + +Remote Store Caching +-------------------- + +The LRUStoreCache is most beneficial when used with remote stores where network latency +is a significant factor: + + >>> import gcsfs + >>> + >>> # Create a remote store (Google Cloud Storage example) + >>> gcs = gcsfs.GCSFileSystem(token='anon') + >>> remote_store = gcsfs.GCSMap( + ... root='your-bucket/data.zarr', + ... gcs=gcs, + ... check=False + ... ) + >>> + >>> # Wrap with LRU cache for better performance + >>> cached_store = zarr.storage.LRUStoreCache(remote_store, max_size=2**28) + >>> + >>> # Open array through cached store + >>> z = zarr.open(cached_store) + +The first access to any chunk will be slow (network retrieval), but subsequent accesses +to the same chunk will be served from the local cache, providing dramatic speedup. + +Cache Configuration +------------------ + +The LRUStoreCache can be configured with several parameters: + +**max_size**: Controls the maximum memory usage of the cache in bytes + + >>> # 256MB cache + >>> cache = zarr.storage.LRUStoreCache(store, max_size=2**28) + >>> + >>> # Unlimited cache size (use with caution) + >>> cache = zarr.storage.LRUStoreCache(store, max_size=None) + +**read_only**: Create a read-only cache + + >>> cache = zarr.storage.LRUStoreCache(store, max_size=2**28, read_only=True) + +Cache Statistics +--------------- + +The LRUStoreCache provides statistics to monitor cache performance: + + >>> # Access some data to generate cache activity + >>> data = zarr_array[0:50, 0:50] # First access - cache miss + >>> data = zarr_array[0:50, 0:50] # Second access - cache hit + >>> + >>> print(f"Cache hits: {cache.hits}") + >>> print(f"Cache misses: {cache.misses}") + >>> print(f"Cache hit ratio: {cache.hits / (cache.hits + cache.misses):.2%}") + +Cache Management +--------------- + +The cache provides methods for manual cache management: + + >>> # Clear all cached values but keep keys cache + >>> cache.invalidate_values() + >>> + >>> # Clear keys cache + >>> cache.invalidate_keys() + >>> + >>> # Clear entire cache + >>> cache.invalidate() + +Best Practices +-------------- + +1. **Size the cache appropriately**: Set ``max_size`` based on available memory and expected data access patterns +2. **Use with remote stores**: The cache provides the most benefit when wrapping slow remote stores +3. **Monitor cache statistics**: Use hit/miss ratios to tune cache size and access patterns +4. **Consider data locality**: Group related data accesses together to improve cache efficiency + +Working with Different Store Types +---------------------------------- + +The LRUStoreCache can wrap any store that implements the :class:`zarr.abc.store.Store` interface: + +Local Store Caching +~~~~~~~~~~~~~~~~~~~ + + >>> local_store = zarr.storage.LocalStore('data.zarr') + >>> cached_local = zarr.storage.LRUStoreCache(local_store, max_size=2**27) + +FsSpec Store Caching +~~~~~~~~~~~~~~~~~~~~ + + >>> from zarr.storage import FsspecStore + >>> remote_store = FsspecStore.from_url('s3://bucket/data.zarr', storage_options={'anon': True}) + >>> cached_remote = zarr.storage.LRUStoreCache(remote_store, max_size=2**28) + +Memory Store Caching +~~~~~~~~~~~~~~~~~~~~ + + >>> from zarr.storage import MemoryStore + >>> memory_store = MemoryStore() + >>> cached_memory = zarr.storage.LRUStoreCache(memory_store, max_size=2**26) + +.. note:: + While caching a MemoryStore may seem redundant, it can be useful for limiting memory usage + of large in-memory datasets. + +Examples from Real Usage +----------------------- + +Here's a complete example demonstrating cache effectiveness: + + >>> import zarr + >>> import zarr.storage + >>> import time + >>> import numpy as np + >>> + >>> # Create test data + >>> local_store = zarr.storage.LocalStore('benchmark.zarr') + >>> cache = zarr.storage.LRUStoreCache(local_store, max_size=2**28) + >>> zarr_array = zarr.zeros((100, 100), chunks=(10, 10), dtype='f8', store=cache, mode='w') + >>> zarr_array[:] = np.random.random((100, 100)) + >>> + >>> # Demonstrate cache effectiveness with repeated access + >>> print("First access (cache miss):") + >>> start = time.time() + >>> data = zarr_array[20:30, 20:30] + >>> first_access = time.time() - start + >>> + >>> print("Second access (cache hit):") + >>> start = time.time() + >>> data = zarr_array[20:30, 20:30] # Same data should be cached + >>> second_access = time.time() - start + >>> + >>> print(f"First access time: {first_access:.4f} s") + >>> print(f"Second access time: {second_access:.4f} s") + >>> print(f"Cache speedup: {first_access/second_access:.2f}x") + +This example shows how the LRUStoreCache can significantly reduce access times for repeated +data reads, particularly important when working with remote data sources. + +.. _Zip Store Specification: https://github.com/zarr-developers/zarr-specs/pull/311 +.. _fsspec: https://filesystem-spec.readthedocs.io From e58329aa8ebccaf97735d476378de2b0bff41933 Mon Sep 17 00:00:00 2001 From: ruaridhg Date: Thu, 7 Aug 2025 15:47:15 +0100 Subject: [PATCH 08/39] Fix linting issues --- docs/user-guide/lrustorecache.rst | 2 +- src/zarr/storage/_cache.py | 298 +++++++++++++++++++----------- tests/test_store/test_cache.py | 3 +- 3 files changed, 195 insertions(+), 108 deletions(-) diff --git a/docs/user-guide/lrustorecache.rst b/docs/user-guide/lrustorecache.rst index bfa0b04769..226c8e0951 100644 --- a/docs/user-guide/lrustorecache.rst +++ b/docs/user-guide/lrustorecache.rst @@ -35,7 +35,7 @@ Creating an LRUStoreCache is straightforward - simply wrap any existing store wi >>> >>> # Create an array using the cached store >>> zarr_array = zarr.zeros((100, 100), chunks=(10, 10), dtype='f8', store=cache, mode='w') - >>> + >>> >>> # Write some data to force chunk creation >>> zarr_array[:] = np.random.random((100, 100)) diff --git a/src/zarr/storage/_cache.py b/src/zarr/storage/_cache.py index 754c880735..d8ae7705e3 100644 --- a/src/zarr/storage/_cache.py +++ b/src/zarr/storage/_cache.py @@ -1,7 +1,7 @@ import io import warnings from collections import OrderedDict -from collections.abc import AsyncIterator, Iterable +from collections.abc import AsyncIterator, Iterable, Iterator from pathlib import Path from threading import Lock from typing import Any, TypeAlias @@ -15,19 +15,21 @@ ByteRequest: TypeAlias = RangeByteRequest | OffsetByteRequest | SuffixByteRequest -def buffer_size(v) -> int: + +def buffer_size(v: Any) -> int: """Calculate the size in bytes of a value, handling Buffer objects properly.""" - if hasattr(v, '__len__') and hasattr(v, 'nbytes'): + if hasattr(v, "__len__") and hasattr(v, "nbytes"): # This is likely a Buffer object - return v.nbytes - elif hasattr(v, 'to_bytes'): + return int(v.nbytes) + elif hasattr(v, "to_bytes"): # This is a Buffer object, get its bytes representation return len(v.to_bytes()) elif isinstance(v, (bytes, bytearray, memoryview)): return len(v) else: # Fallback to numpy - return np.asarray(v).nbytes + return int(np.asarray(v).nbytes) + def _path_to_prefix(path: str | None) -> str: # assume path already normalized @@ -37,25 +39,35 @@ def _path_to_prefix(path: str | None) -> str: prefix = "" return prefix + def _listdir_from_keys(store: Store, path: str | None = None) -> list[str]: # assume path already normalized prefix = _path_to_prefix(path) - children = set() - for key in list(store.keys()): + children: set[str] = set() + # Handle both Store objects and dict-like objects + if hasattr(store, "keys") and callable(store.keys): + keys = [str(k) for k in store.keys()] # Ensure keys are strings # noqa: SIM118 + else: + # For stores that don't have keys method, we can't list them + return [] + + for key in keys: if key.startswith(prefix) and len(key) > len(prefix): suffix = key[len(prefix) :] child = suffix.split("/")[0] children.add(child) return sorted(children) -def listdir(store: Store, path: Path = None): + +def listdir(store: Store, path: Path | None = None) -> list[str]: """Obtain a directory listing for the given path. If `store` provides a `listdir` method, this will be called, otherwise will fall back to implementation via the `MutableMapping` interface.""" - path = normalize_path(path) + path_str = normalize_path(path) if hasattr(store, "listdir"): # pass through - return store.listdir(path) + result = store.listdir(path_str) + return [str(item) for item in result] # Ensure all items are strings else: # slow version, iterate through all keys warnings.warn( @@ -63,7 +75,8 @@ def listdir(store: Store, path: Path = None): "may want to inherit from `Store`.", stacklevel=2, ) - return _listdir_from_keys(store, path) + return _listdir_from_keys(store, path_str) + def _get(path: Path, prototype: BufferPrototype, byte_range: ByteRequest | None) -> Buffer: if byte_range is None: @@ -81,6 +94,7 @@ def _get(path: Path, prototype: BufferPrototype, byte_range: ByteRequest | None) raise TypeError(f"Unexpected byte_range, got {byte_range}.") return prototype.buffer.from_bytes(f.read()) + def _put( path: Path, value: Buffer, @@ -105,7 +119,6 @@ def _put( return f.write(view) - class LRUStoreCache(Store): """Storage class that implements a least-recently-used (LRU) cache layer over some other store. Intended primarily for use with stores that can be slow to @@ -150,9 +163,9 @@ class LRUStoreCache(Store): root: Path - def __init__(self, store: Store, max_size: int, **kwargs): + def __init__(self, store: Store, max_size: int | None, **kwargs: Any) -> None: # Extract and handle known parameters - read_only = kwargs.get('read_only', getattr(store, 'read_only', False)) + read_only = kwargs.get("read_only", getattr(store, "read_only", False)) # Call parent constructor with read_only parameter super().__init__(read_only=read_only) @@ -160,21 +173,21 @@ def __init__(self, store: Store, max_size: int, **kwargs): self._store = store self._max_size = max_size self._current_size = 0 - self._keys_cache = None + self._keys_cache: list[str] | None = None self._contains_cache: dict[Any, Any] = {} - self._listdir_cache: dict[str, Any] = {} - self._values_cache: dict[str, Any] = OrderedDict() + self._listdir_cache: dict[str | None, list[str]] = {} + self._values_cache: OrderedDict[str, Any] = OrderedDict() self._mutex = Lock() self.hits = self.misses = 0 # Handle root attribute if present in underlying store - if hasattr(store, 'root'): + if hasattr(store, "root"): self.root = store.root else: - self.root = None + self.root = Path("/") # Default root path @classmethod - async def open(cls, store: Store, max_size: int, **kwargs: Any) -> "LRUStoreCache": + async def open(cls, store: Store, max_size: int | None, **kwargs: Any) -> "LRUStoreCache": """ Create and open the LRU cache store. @@ -182,7 +195,7 @@ async def open(cls, store: Store, max_size: int, **kwargs: Any) -> "LRUStoreCach ---------- store : Store The underlying store to wrap with caching. - max_size : int + max_size : int | None The maximum size that the cache may grow to, in number of bytes. **kwargs : Any Additional keyword arguments passed to the store constructor. @@ -214,14 +227,27 @@ def with_read_only(self, read_only: bool = False) -> "LRUStoreCache": underlying_store = self._store.with_read_only(read_only) return LRUStoreCache(underlying_store, self._max_size, read_only=read_only) - - def _normalize_key(self, key): + def _normalize_key(self, key: Any) -> str: """Convert key to string if it's a Path object, otherwise return as-is""" if isinstance(key, Path): return str(key) - return key + return str(key) - def __getstate__(self): + def __getstate__( + self, + ) -> tuple[ + Store, + int | None, + int, + list[str] | None, + dict[Any, Any], + dict[str | None, list[str]], + OrderedDict[str, Any], + int, + int, + bool, + bool, + ]: return ( self._store, self._max_size, @@ -236,7 +262,22 @@ def __getstate__(self): self._is_open, ) - def __setstate__(self, state): + def __setstate__( + self, + state: tuple[ + Store, + int | None, + int, + list[str] | None, + dict[Any, Any], + dict[str | None, list[str]], + OrderedDict[str, Any], + int, + int, + bool, + bool, + ], + ) -> None: ( self._store, self._max_size, @@ -252,35 +293,53 @@ def __setstate__(self, state): ) = state self._mutex = Lock() - def __len__(self): + def __len__(self) -> int: return len(self._keys()) - def __iter__(self): + def __iter__(self) -> Iterator[str]: return self.keys() - def __contains__(self, key): + def __contains__(self, key: Any) -> bool: with self._mutex: if key not in self._contains_cache: - self._contains_cache[key] = key in self._store - return self._contains_cache[key] + # Handle both Store objects and dict-like objects + if hasattr(self._store, "__contains__"): + result = key in self._store + self._contains_cache[key] = bool(result) + else: + # Fallback for stores without __contains__ + try: + if hasattr(self._store, "__getitem__"): + self._store[key] + self._contains_cache[key] = True + else: + self._contains_cache[key] = False + except KeyError: + self._contains_cache[key] = False + return bool(self._contains_cache[key]) - async def clear(self): + async def clear(self) -> None: # Check if store is writable self._check_writable() await self._store.clear() self.invalidate() - def keys(self): + def keys(self) -> Iterator[str]: with self._mutex: return iter(self._keys()) - def _keys(self): + def _keys(self) -> list[str]: if self._keys_cache is None: - self._keys_cache = list(self._store.keys()) + # Handle both Store objects and dict-like objects + if hasattr(self._store, "keys") and callable(self._store.keys): + self._keys_cache = [str(k) for k in self._store.keys()] # noqa: SIM118 + else: + # Fallback for stores that don't have keys method + self._keys_cache = [] return self._keys_cache - def listdir(self, path: Path | None = None): + def listdir(self, path: Path | None = None) -> list[str]: with self._mutex: # Normalize path to string for consistent caching path_key = self._normalize_key(path) if path is not None else None @@ -291,16 +350,16 @@ def listdir(self, path: Path | None = None): self._listdir_cache[path_key] = listing return listing - def getsize(self, path=None) -> int: - return self._store.getsize(key=path) + async def getsize(self, key: str) -> int: + return await self._store.getsize(key) - def _pop_value(self): + def _pop_value(self) -> Any: # remove the first value from the cache, as this will be the least recently # used value _, v = self._values_cache.popitem(last=False) return v - def _accommodate_value(self, value_size): + def _accommodate_value(self, value_size: int) -> None: if self._max_size is None: return # ensure there is enough space in the cache for a new value @@ -308,10 +367,10 @@ def _accommodate_value(self, value_size): v = self._pop_value() self._current_size -= buffer_size(v) - def _cache_value(self, key: str, value): # Change parameter type annotation + def _cache_value(self, key: str, value: Any) -> None: # cache a value # Convert Buffer objects to bytes for storage in cache - if hasattr(value, 'to_bytes'): + if hasattr(value, "to_bytes"): cache_value = value.to_bytes() else: cache_value = value @@ -326,35 +385,35 @@ def _cache_value(self, key: str, value): # Change parameter type annotation self._values_cache[cache_key] = cache_value self._current_size += value_size - def invalidate(self): + def invalidate(self) -> None: """Completely clear the cache.""" with self._mutex: self._values_cache.clear() self._invalidate_keys() self._current_size = 0 - def invalidate_values(self): + def invalidate_values(self) -> None: """Clear the values cache.""" with self._mutex: self._values_cache.clear() - def invalidate_keys(self): + def invalidate_keys(self) -> None: """Clear the keys cache.""" with self._mutex: self._invalidate_keys() - def _invalidate_keys(self): + def _invalidate_keys(self) -> None: self._keys_cache = None self._contains_cache.clear() self._listdir_cache.clear() - def _invalidate_value(self, key): + def _invalidate_value(self, key: Any) -> None: cache_key = self._normalize_key(key) if cache_key in self._values_cache: value = self._values_cache.pop(cache_key) self._current_size -= buffer_size(value) - def __getitem__(self, key): + def __getitem__(self, key: Any) -> Any: cache_key = self._normalize_key(key) try: # first try to obtain the value from the cache @@ -367,7 +426,11 @@ def __getitem__(self, key): except KeyError: # cache miss, retrieve value from the store - value = self._store[key] # Use original key for store access + if hasattr(self._store, "__getitem__"): + value = self._store[key] + else: + # Fallback for async stores + raise KeyError(f"Key {key} not found in store") from None with self._mutex: self.misses += 1 # need to check if key is not in the cache, as it may have been cached @@ -377,16 +440,24 @@ def __getitem__(self, key): return value - def __setitem__(self, key, value): - self._store[key] = value + def __setitem__(self, key: str, value: Buffer) -> None: + if hasattr(self._store, "__setitem__"): + self._store[key] = value + else: + # For async stores, we can't handle this synchronously + raise TypeError("Cannot use __setitem__ with async store") + + # Update cache and invalidate keys cache since we may have added a new key with self._mutex: self._invalidate_keys() - cache_key = self._normalize_key(key) - self._invalidate_value(cache_key) - self._cache_value(cache_key, value) + self._cache_value(self._normalize_key(key), value) - def __delitem__(self, key): - del self._store[key] + def __delitem__(self, key: Any) -> None: + if hasattr(self._store, "__delitem__"): + del self._store[key] + else: + # For async stores, this shouldn't be used - use delete() instead + raise NotImplementedError("Use async delete() method for async stores") with self._mutex: self._invalidate_keys() cache_key = self._normalize_key(key) @@ -412,11 +483,11 @@ async def delete(self, key: str) -> None: self._check_writable() # Delegate to the underlying store for actual deletion - if hasattr(self._store, 'delete'): + if hasattr(self._store, "delete"): await self._store.delete(key) else: # Fallback for stores that don't have async delete - del self._store[key] + del self._store[key] # type: ignore[attr-defined] # Invalidate cache entries with self._mutex: @@ -424,29 +495,42 @@ async def delete(self, key: str) -> None: cache_key = self._normalize_key(key) self._invalidate_value(cache_key) - async def exists(self, key: str) -> bool: # Delegate to the underlying store - if hasattr(self._store, 'exists'): + if hasattr(self._store, "exists"): return await self._store.exists(key) else: # Fallback for stores that don't have async exists - return key in self._store + if hasattr(self._store, "__contains__"): + return key in self._store + else: + # Final fallback - try to get the key + try: + if hasattr(self._store, "__getitem__"): + self._store[key] + return True + else: + return False + except KeyError: + return False async def _set(self, key: str, value: Buffer, exclusive: bool = False) -> None: # Check if store is writable self._check_writable() # Delegate to the underlying store - if hasattr(self._store, 'set'): + if hasattr(self._store, "set"): await self._store.set(key, value) else: # Fallback for stores that don't have async set - # Convert Buffer to bytes for sync stores - if hasattr(value, 'to_bytes'): - self._store[key] = value.to_bytes() + if hasattr(self._store, "__setitem__"): + # Convert Buffer to bytes for sync stores + if hasattr(value, "to_bytes"): + self._store[key] = value.to_bytes() + else: + self._store[key] = value else: - self._store[key] = value + raise TypeError("Store does not support setting values") # Update cache with self._mutex: @@ -455,7 +539,6 @@ async def _set(self, key: str, value: Buffer, exclusive: bool = False) -> None: self._invalidate_value(cache_key) self._cache_value(cache_key, value) - async def get( self, key: str, @@ -467,27 +550,27 @@ async def get( # For byte_range requests, don't use cache for now (could be optimized later) if byte_range is not None: - if hasattr(self._store, 'get') and callable(self._store.get): + if hasattr(self._store, "get") and callable(self._store.get): # Check if it's an async Store.get method (takes prototype and byte_range) try: - return await self._store.get(key, prototype, byte_range) - except TypeError: - # Fallback to sync get from mapping - full_value = self._store.get(key) - if full_value is None: - return None if prototype is None: prototype = default_buffer_prototype() - # This is a simplified implementation - a full implementation would handle byte ranges - return prototype.buffer.from_bytes(full_value) + return await self._store.get(key, prototype, byte_range) + except TypeError: + # Fallback to sync get from mapping - get full value and slice later + # For now, just return None for byte range requests on sync stores + return None else: # Fallback - get full value from mapping and slice try: - full_value = self._store[key] - if prototype is None: - prototype = default_buffer_prototype() - # This is a simplified implementation - a full implementation would handle byte ranges - return prototype.buffer.from_bytes(full_value) + if hasattr(self._store, "__getitem__"): + full_value = self._store[key] + if prototype is None: + prototype = default_buffer_prototype() + # This is a simplified implementation - a full implementation would handle byte ranges + return prototype.buffer.from_bytes(full_value) + else: + return None except KeyError: return None @@ -502,29 +585,34 @@ async def get( return prototype.buffer.from_bytes(value) except KeyError: # Cache miss - get from store - if hasattr(self._store, 'get') and callable(self._store.get): + if hasattr(self._store, "get") and callable(self._store.get): # Try async Store.get method first try: + if prototype is None: + prototype = default_buffer_prototype() result = await self._store.get(key, prototype, byte_range) except TypeError: - # Fallback to sync mapping get + # Fallback for sync stores - use __getitem__ instead try: - value = self._store.get(key) - if value is None: - result = None - else: + if hasattr(self._store, "__getitem__"): + value = self._store[key] if prototype is None: prototype = default_buffer_prototype() result = prototype.buffer.from_bytes(value) + else: + result = None except KeyError: result = None else: # Fallback for sync stores/mappings try: - value = self._store[key] - if prototype is None: - prototype = default_buffer_prototype() - result = prototype.buffer.from_bytes(value) + if hasattr(self._store, "__getitem__"): + value = self._store[key] + if prototype is None: + prototype = default_buffer_prototype() + result = prototype.buffer.from_bytes(value) + else: + result = None except KeyError: result = None @@ -541,14 +629,13 @@ async def get( return result - async def get_partial_values( self, prototype: BufferPrototype, key_ranges: Iterable[tuple[str, ByteRequest | None]], ) -> list[Buffer | None]: # Delegate to the underlying store - if hasattr(self._store, 'get_partial_values'): + if hasattr(self._store, "get_partial_values"): return await self._store.get_partial_values(prototype, key_ranges) else: # Fallback - get each value individually @@ -558,26 +645,26 @@ async def get_partial_values( results.append(result) return results - async def list(self) -> AsyncIterator[str]: # Delegate to the underlying store - if hasattr(self._store, 'list'): + if hasattr(self._store, "list"): async for key in self._store.list(): yield key else: # Fallback for stores that don't have async list - for key in list(self._store.keys()): - yield key + if hasattr(self._store, "keys") and callable(self._store.keys): + for key in list(self._store.keys()): + yield key async def list_dir(self, prefix: str) -> AsyncIterator[str]: # Delegate to the underlying store - if hasattr(self._store, 'list_dir'): + if hasattr(self._store, "list_dir"): async for key in self._store.list_dir(prefix): yield key else: # Fallback using listdir try: - listing = self.listdir(prefix) + listing = self.listdir(Path(prefix)) for item in listing: yield item except (FileNotFoundError, NotADirectoryError, KeyError): @@ -585,14 +672,15 @@ async def list_dir(self, prefix: str) -> AsyncIterator[str]: async def list_prefix(self, prefix: str) -> AsyncIterator[str]: # Delegate to the underlying store - if hasattr(self._store, 'list_prefix'): + if hasattr(self._store, "list_prefix"): async for key in self._store.list_prefix(prefix): yield key else: # Fallback - filter all keys by prefix - for key in list(self._store.keys()): - if key.startswith(prefix): - yield key + if hasattr(self._store, "keys") and callable(self._store.keys): + for key in list(self._store.keys()): + if key.startswith(prefix): + yield key async def set(self, key: str, value: Buffer) -> None: # docstring inherited @@ -605,7 +693,7 @@ async def set_partial_values( self._check_writable() # Delegate to the underlying store - if hasattr(self._store, 'set_partial_values'): + if hasattr(self._store, "set_partial_values"): await self._store.set_partial_values(key_start_values) else: # Fallback - this is complex to implement properly, so just invalidate cache diff --git a/tests/test_store/test_cache.py b/tests/test_store/test_cache.py index 48bfe4aeb0..e3c43ffeb9 100644 --- a/tests/test_store/test_cache.py +++ b/tests/test_store/test_cache.py @@ -42,6 +42,7 @@ def skip_if_nested_chunks(**kwargs): if kwargs.get("dimension_separator") == "/": pytest.skip("nested chunks are unsupported") + class TestLRUStoreCache(StoreTests[LRUStoreCache, cpu.Buffer]): store_cls = LRUStoreCache buffer_cls = cpu.buffer_prototype.buffer @@ -312,5 +313,3 @@ def test_cache_keys(self): assert 3 == store.counter["__contains__", foo_key] assert keys == sorted(store) assert 1 == store.counter["__iter__"] - - From e84ebbe4deaf033bc6772d0c521749413d2b28e9 Mon Sep 17 00:00:00 2001 From: ruaridhg Date: Thu, 28 Aug 2025 17:23:17 +0100 Subject: [PATCH 09/39] Fix doctest errors --- docs/user-guide/lrustorecache.rst | 64 +++++++++++++++++-------------- 1 file changed, 36 insertions(+), 28 deletions(-) diff --git a/docs/user-guide/lrustorecache.rst b/docs/user-guide/lrustorecache.rst index 226c8e0951..877bf9a33d 100644 --- a/docs/user-guide/lrustorecache.rst +++ b/docs/user-guide/lrustorecache.rst @@ -62,7 +62,8 @@ The LRUStoreCache provides significant performance improvements for repeated dat ... _ = zarr_array_nocache[:] >>> elapsed_nocache = time.time() - start >>> - >>> print(f"Speedup: {elapsed_nocache/elapsed_cache:.2f}x") + >>> speedup = elapsed_nocache/elapsed_cache + >>> # Speedup typically ranges from 1.5x to 5x depending on system Cache effectiveness is particularly pronounced with repeated access to the same data chunks. @@ -70,23 +71,24 @@ Remote Store Caching -------------------- The LRUStoreCache is most beneficial when used with remote stores where network latency -is a significant factor: - - >>> import gcsfs - >>> - >>> # Create a remote store (Google Cloud Storage example) - >>> gcs = gcsfs.GCSFileSystem(token='anon') - >>> remote_store = gcsfs.GCSMap( - ... root='your-bucket/data.zarr', - ... gcs=gcs, - ... check=False - ... ) - >>> - >>> # Wrap with LRU cache for better performance - >>> cached_store = zarr.storage.LRUStoreCache(remote_store, max_size=2**28) - >>> - >>> # Open array through cached store - >>> z = zarr.open(cached_store) +is a significant factor. Here's a conceptual example:: + + # Example with a remote store (requires gcsfs) + import gcsfs + + # Create a remote store (Google Cloud Storage example) + gcs = gcsfs.GCSFileSystem(token='anon') + remote_store = gcsfs.GCSMap( + root='your-bucket/data.zarr', + gcs=gcs, + check=False + ) + + # Wrap with LRU cache for better performance + cached_store = zarr.storage.LRUStoreCache(remote_store, max_size=2**28) + + # Open array through cached store + z = zarr.open(cached_store) The first access to any chunk will be slow (network retrieval), but subsequent accesses to the same chunk will be served from the local cache, providing dramatic speedup. @@ -98,6 +100,9 @@ The LRUStoreCache can be configured with several parameters: **max_size**: Controls the maximum memory usage of the cache in bytes + >>> # Create a base store for demonstration + >>> store = zarr.storage.LocalStore('config_example.zarr') + >>> >>> # 256MB cache >>> cache = zarr.storage.LRUStoreCache(store, max_size=2**28) >>> @@ -117,9 +122,11 @@ The LRUStoreCache provides statistics to monitor cache performance: >>> data = zarr_array[0:50, 0:50] # First access - cache miss >>> data = zarr_array[0:50, 0:50] # Second access - cache hit >>> - >>> print(f"Cache hits: {cache.hits}") - >>> print(f"Cache misses: {cache.misses}") - >>> print(f"Cache hit ratio: {cache.hits / (cache.hits + cache.misses):.2%}") + >>> cache_hits = cache.hits + >>> cache_misses = cache.misses + >>> total_requests = cache.hits + cache.misses + >>> cache_hit_ratio = cache.hits / total_requests if total_requests > 0 else 0 + >>> # Typical hit ratio is > 50% with repeated access patterns Cache Management --------------- @@ -157,9 +164,10 @@ Local Store Caching FsSpec Store Caching ~~~~~~~~~~~~~~~~~~~~ + >>> # Example with local file system through fsspec >>> from zarr.storage import FsspecStore - >>> remote_store = FsspecStore.from_url('s3://bucket/data.zarr', storage_options={'anon': True}) - >>> cached_remote = zarr.storage.LRUStoreCache(remote_store, max_size=2**28) + >>> local_fsspec_store = FsspecStore.from_url('file://local_data.zarr') + >>> cached_remote = zarr.storage.LRUStoreCache(local_fsspec_store, max_size=2**28) Memory Store Caching ~~~~~~~~~~~~~~~~~~~~ @@ -189,19 +197,19 @@ Here's a complete example demonstrating cache effectiveness: >>> zarr_array[:] = np.random.random((100, 100)) >>> >>> # Demonstrate cache effectiveness with repeated access - >>> print("First access (cache miss):") + >>> # First access (cache miss): >>> start = time.time() >>> data = zarr_array[20:30, 20:30] >>> first_access = time.time() - start >>> - >>> print("Second access (cache hit):") + >>> # Second access (cache hit): >>> start = time.time() >>> data = zarr_array[20:30, 20:30] # Same data should be cached >>> second_access = time.time() - start >>> - >>> print(f"First access time: {first_access:.4f} s") - >>> print(f"Second access time: {second_access:.4f} s") - >>> print(f"Cache speedup: {first_access/second_access:.2f}x") + >>> # Calculate cache performance metrics + >>> cache_speedup = first_access/second_access + >>> # Typical speedup ranges from 2x to 10x depending on storage backend This example shows how the LRUStoreCache can significantly reduce access times for repeated data reads, particularly important when working with remote data sources. From 8b22c6b74391c3d6e9084a28a0be076b0bccc477 Mon Sep 17 00:00:00 2001 From: ruaridhg <32329546+ruaridhg@users.noreply.github.com> Date: Fri, 29 Aug 2025 11:48:03 +0100 Subject: [PATCH 10/39] Update docs/user-guide/lrustorecache.rst Co-authored-by: David Stansby --- docs/user-guide/lrustorecache.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/user-guide/lrustorecache.rst b/docs/user-guide/lrustorecache.rst index 877bf9a33d..92e35aa9c9 100644 --- a/docs/user-guide/lrustorecache.rst +++ b/docs/user-guide/lrustorecache.rst @@ -31,7 +31,7 @@ Creating an LRUStoreCache is straightforward - simply wrap any existing store wi >>> >>> # Create a local store and wrap it with LRU cache >>> local_store = zarr.storage.LocalStore('test.zarr') - >>> cache = zarr.storage.LRUStoreCache(local_store, max_size=2**28) # 256MB cache + >>> cache = zarr.storage.LRUStoreCache(local_store, max_size=1024 * 1024 * 256) # 256MB cache >>> >>> # Create an array using the cached store >>> zarr_array = zarr.zeros((100, 100), chunks=(10, 10), dtype='f8', store=cache, mode='w') From 715296e720acb0822eb9246ae798ad177ce0312c Mon Sep 17 00:00:00 2001 From: ruaridhg Date: Fri, 29 Aug 2025 12:30:38 +0100 Subject: [PATCH 11/39] Update LRUStoreCache docstring and modify max_size to remove None as an option --- src/zarr/storage/_cache.py | 84 ++++++++++++++++++++++++++------------ 1 file changed, 57 insertions(+), 27 deletions(-) diff --git a/src/zarr/storage/_cache.py b/src/zarr/storage/_cache.py index d8ae7705e3..35cf7d1a8e 100644 --- a/src/zarr/storage/_cache.py +++ b/src/zarr/storage/_cache.py @@ -125,34 +125,66 @@ class LRUStoreCache(Store): access, e.g., remote stores that require network communication to store and retrieve data. + The cache stores the raw bytes returned by the underlying store, before any + decompression or array processing. This means that compressed data remains + compressed in the cache, and decompression happens each time the cached data + is accessed. This design choice keeps the cache lightweight while still + providing significant performance benefits for network-bound operations. + + This store supports both read and write operations. Write operations use a + write-through strategy where data is written to both the underlying store + and cached locally. The cache automatically invalidates entries when the + underlying data is modified to maintain consistency. + Parameters ---------- store : Store The store containing the actual data to be cached. max_size : int - The maximum size that the cache may grow to, in number of bytes. Provide `None` - if you would like the cache to have unlimited size. + The maximum size that the cache may grow to, in number of bytes. + This parameter is required to prevent unbounded memory growth. + + Recommended minimum values: + - For small metadata files: 1MB (1024 * 1024) + - For chunk caching: 10MB (1024 * 1024 * 10) + - For general use: 256MB (1024 * 1024 * 256) + - For high-performance applications: 1GB (1024 * 1024 * 1000) + + Values smaller than your typical chunk size will result in most data + being silently excluded from the cache, reducing effectiveness. Examples -------- - The example below wraps an S3 store with an LRU cache:: + The example below wraps a LocalStore with an LRU cache for demonstration:: - >>> import s3fs + >>> import tempfile >>> import zarr - >>> s3 = s3fs.S3FileSystem(anon=True, client_kwargs=dict(region_name='eu-west-2')) - >>> store = s3fs.S3Map(root='zarr-demo/store', s3=s3, check=False) - >>> cache = zarr.LRUStoreCache(store, max_size=2**28) - >>> root = zarr.group(store=cache) # doctest: +REMOTE_DATA - >>> z = root['foo/bar/baz'] # doctest: +REMOTE_DATA - >>> from timeit import timeit - >>> # first data access is relatively slow, retrieved from store - ... timeit('print(z[:].tobytes())', number=1, globals=globals()) # doctest: +SKIP - b'Hello from the cloud!' - 0.1081731989979744 - >>> # second data access is faster, uses cache - ... timeit('print(z[:].tobytes())', number=1, globals=globals()) # doctest: +SKIP - b'Hello from the cloud!' - 0.0009490990014455747 + >>> from zarr.storage import LocalStore + >>> + >>> # Create a temporary directory for the example + >>> temp_dir = tempfile.mkdtemp() + >>> store = LocalStore(temp_dir) + >>> + >>> # Create some test data first + >>> arr = zarr.create((1000, 1000), chunks=(100, 100), store=store, dtype='f4') + >>> arr[:] = 42.0 + >>> + >>> # Now wrap with cache for faster access + >>> cached_store = zarr.LRUStoreCache(store, max_size=2**28) # 256MB cache + >>> cached_arr = zarr.open(cached_store) + >>> + >>> # First access loads from disk and caches + >>> data1 = cached_arr[0:100, 0:100] # Cache miss + >>> + >>> # Second access uses cache (much faster for remote stores) + >>> data2 = cached_arr[0:100, 0:100] # Cache hit + + For remote stores where the performance benefit is more apparent:: + + >>> from zarr.storage import RemoteStore + >>> # remote_store = RemoteStore.from_url("https://example.com/data.zarr") + >>> # cached_remote = zarr.LRUStoreCache(remote_store, max_size=2**28) + """ @@ -163,7 +195,10 @@ class LRUStoreCache(Store): root: Path - def __init__(self, store: Store, max_size: int | None, **kwargs: Any) -> None: + def __init__(self, store: Store, *, max_size: int, **kwargs: Any) -> None: + if not isinstance(max_size, int) or max_size <= 0: + raise ValueError("max_size must be a positive integer (bytes)") + # Extract and handle known parameters read_only = kwargs.get("read_only", getattr(store, "read_only", False)) @@ -360,30 +395,25 @@ def _pop_value(self) -> Any: return v def _accommodate_value(self, value_size: int) -> None: - if self._max_size is None: - return - # ensure there is enough space in the cache for a new value while self._current_size + value_size > self._max_size: v = self._pop_value() self._current_size -= buffer_size(v) def _cache_value(self, key: str, value: Any) -> None: # cache a value - # Convert Buffer objects to bytes for storage in cache if hasattr(value, "to_bytes"): cache_value = value.to_bytes() else: cache_value = value value_size = buffer_size(cache_value) - # check size of the value against max size, as if the value itself exceeds max - # size then we are never going to cache it - if self._max_size is None or value_size <= self._max_size: + # Check if value exceeds max size - if so, don't cache it + if value_size <= self._max_size: self._accommodate_value(value_size) - # Ensure key is string for consistent caching cache_key = self._normalize_key(key) self._values_cache[cache_key] = cache_value self._current_size += value_size + # If value_size > max_size, we simply don't cache it (silent skip) def invalidate(self) -> None: """Completely clear the cache.""" From 34328f42174643bc0f07052b9a26cec87dbf39b0 Mon Sep 17 00:00:00 2001 From: ruaridhg Date: Fri, 29 Aug 2025 12:37:05 +0100 Subject: [PATCH 12/39] Expand changes description --- changes/3357.feature.rst | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/changes/3357.feature.rst b/changes/3357.feature.rst index 94fdedfa1a..e9217d4841 100644 --- a/changes/3357.feature.rst +++ b/changes/3357.feature.rst @@ -1 +1,3 @@ -Add LRUStoreCache to Zarr 3.0 \ No newline at end of file +Add LRUStoreCache for improved performance with remote stores + +The new ``LRUStoreCache`` provides a least-recently-used (LRU) caching layer that can be wrapped around any zarr store to significantly improve performance, especially for remote stores where network latency is a bottleneck. \ No newline at end of file From 6033416422e554e9cd4ed9da14ca9e375e8e31d2 Mon Sep 17 00:00:00 2001 From: ruaridhg Date: Fri, 29 Aug 2025 12:42:43 +0100 Subject: [PATCH 13/39] Improve wording in lrustorecache.rst --- docs/user-guide/lrustorecache.rst | 36 ++----------------------------- src/zarr/storage/_cache.py | 2 +- 2 files changed, 3 insertions(+), 35 deletions(-) diff --git a/docs/user-guide/lrustorecache.rst b/docs/user-guide/lrustorecache.rst index 92e35aa9c9..588de87866 100644 --- a/docs/user-guide/lrustorecache.rst +++ b/docs/user-guide/lrustorecache.rst @@ -63,7 +63,6 @@ The LRUStoreCache provides significant performance improvements for repeated dat >>> elapsed_nocache = time.time() - start >>> >>> speedup = elapsed_nocache/elapsed_cache - >>> # Speedup typically ranges from 1.5x to 5x depending on system Cache effectiveness is particularly pronounced with repeated access to the same data chunks. @@ -129,7 +128,7 @@ The LRUStoreCache provides statistics to monitor cache performance: >>> # Typical hit ratio is > 50% with repeated access patterns Cache Management ---------------- +---------------- The cache provides methods for manual cache management: @@ -148,37 +147,7 @@ Best Practices 1. **Size the cache appropriately**: Set ``max_size`` based on available memory and expected data access patterns 2. **Use with remote stores**: The cache provides the most benefit when wrapping slow remote stores 3. **Monitor cache statistics**: Use hit/miss ratios to tune cache size and access patterns -4. **Consider data locality**: Group related data accesses together to improve cache efficiency - -Working with Different Store Types ----------------------------------- - -The LRUStoreCache can wrap any store that implements the :class:`zarr.abc.store.Store` interface: - -Local Store Caching -~~~~~~~~~~~~~~~~~~~ - - >>> local_store = zarr.storage.LocalStore('data.zarr') - >>> cached_local = zarr.storage.LRUStoreCache(local_store, max_size=2**27) - -FsSpec Store Caching -~~~~~~~~~~~~~~~~~~~~ - - >>> # Example with local file system through fsspec - >>> from zarr.storage import FsspecStore - >>> local_fsspec_store = FsspecStore.from_url('file://local_data.zarr') - >>> cached_remote = zarr.storage.LRUStoreCache(local_fsspec_store, max_size=2**28) - -Memory Store Caching -~~~~~~~~~~~~~~~~~~~~ - - >>> from zarr.storage import MemoryStore - >>> memory_store = MemoryStore() - >>> cached_memory = zarr.storage.LRUStoreCache(memory_store, max_size=2**26) - -.. note:: - While caching a MemoryStore may seem redundant, it can be useful for limiting memory usage - of large in-memory datasets. +4. **Consider data locality**: Access data in chunks sequentially rather than jumping around randomly to maximize cache reuse Examples from Real Usage ----------------------- @@ -209,7 +178,6 @@ Here's a complete example demonstrating cache effectiveness: >>> >>> # Calculate cache performance metrics >>> cache_speedup = first_access/second_access - >>> # Typical speedup ranges from 2x to 10x depending on storage backend This example shows how the LRUStoreCache can significantly reduce access times for repeated data reads, particularly important when working with remote data sources. diff --git a/src/zarr/storage/_cache.py b/src/zarr/storage/_cache.py index 35cf7d1a8e..549a7c6d53 100644 --- a/src/zarr/storage/_cache.py +++ b/src/zarr/storage/_cache.py @@ -170,7 +170,7 @@ class LRUStoreCache(Store): >>> arr[:] = 42.0 >>> >>> # Now wrap with cache for faster access - >>> cached_store = zarr.LRUStoreCache(store, max_size=2**28) # 256MB cache + >>> cached_store = zarr.LRUStoreCache(store, max_size=1024 * 1024 * 256) # 256MB cache >>> cached_arr = zarr.open(cached_store) >>> >>> # First access loads from disk and caches From b41d9e4455730b3a601b7c0d2010ca102d6579a1 Mon Sep 17 00:00:00 2001 From: ruaridhg Date: Fri, 29 Aug 2025 13:54:26 +0100 Subject: [PATCH 14/39] Fix pre-commit errors and failing tests --- src/zarr/storage/_cache.py | 14 +++++------ tests/test_store/test_cache.py | 45 +++++++++++++++++----------------- 2 files changed, 30 insertions(+), 29 deletions(-) diff --git a/src/zarr/storage/_cache.py b/src/zarr/storage/_cache.py index 549a7c6d53..c25ab40b7f 100644 --- a/src/zarr/storage/_cache.py +++ b/src/zarr/storage/_cache.py @@ -196,7 +196,7 @@ class LRUStoreCache(Store): root: Path def __init__(self, store: Store, *, max_size: int, **kwargs: Any) -> None: - if not isinstance(max_size, int) or max_size <= 0: + if max_size <= 0: raise ValueError("max_size must be a positive integer (bytes)") # Extract and handle known parameters @@ -222,7 +222,7 @@ def __init__(self, store: Store, *, max_size: int, **kwargs: Any) -> None: self.root = Path("/") # Default root path @classmethod - async def open(cls, store: Store, max_size: int | None, **kwargs: Any) -> "LRUStoreCache": + async def open(cls, store: Store, *, max_size: int, **kwargs: Any) -> "LRUStoreCache": """ Create and open the LRU cache store. @@ -230,7 +230,7 @@ async def open(cls, store: Store, max_size: int | None, **kwargs: Any) -> "LRUSt ---------- store : Store The underlying store to wrap with caching. - max_size : int | None + max_size : int The maximum size that the cache may grow to, in number of bytes. **kwargs : Any Additional keyword arguments passed to the store constructor. @@ -240,7 +240,7 @@ async def open(cls, store: Store, max_size: int | None, **kwargs: Any) -> "LRUSt LRUStoreCache The opened cache store instance. """ - cache = cls(store, max_size, **kwargs) + cache = cls(store, max_size=max_size, **kwargs) await cache._open() return cache @@ -260,7 +260,7 @@ def with_read_only(self, read_only: bool = False) -> "LRUStoreCache": """ # Create a new underlying store with the new read_only setting underlying_store = self._store.with_read_only(read_only) - return LRUStoreCache(underlying_store, self._max_size, read_only=read_only) + return LRUStoreCache(underlying_store, max_size=self._max_size, read_only=read_only) def _normalize_key(self, key: Any) -> str: """Convert key to string if it's a Path object, otherwise return as-is""" @@ -272,7 +272,7 @@ def __getstate__( self, ) -> tuple[ Store, - int | None, + int, int, list[str] | None, dict[Any, Any], @@ -301,7 +301,7 @@ def __setstate__( self, state: tuple[ Store, - int | None, + int, int, list[str] | None, dict[Any, Any], diff --git a/tests/test_store/test_cache.py b/tests/test_store/test_cache.py index e3c43ffeb9..8be550a65f 100644 --- a/tests/test_store/test_cache.py +++ b/tests/test_store/test_cache.py @@ -6,60 +6,61 @@ import pytest from zarr.core.buffer import cpu +from zarr.core.buffer.cpu import Buffer from zarr.storage import LRUStoreCache, MemoryStore from zarr.testing.store import StoreTests -class CountingDict(dict): +class CountingDict(dict[Any, Any]): """A dictionary that counts operations for testing purposes.""" - def __init__(self): + def __init__(self) -> None: super().__init__() - self.counter = Counter() + self.counter: Counter[tuple[str, Any] | str] = Counter() - def __getitem__(self, key): + def __getitem__(self, key: Any) -> Any: self.counter["__getitem__", key] += 1 return super().__getitem__(key) - def __setitem__(self, key, value): + def __setitem__(self, key: Any, value: Any) -> None: self.counter["__setitem__", key] += 1 return super().__setitem__(key, value) - def __contains__(self, key): + def __contains__(self, key: Any) -> bool: self.counter["__contains__", key] += 1 return super().__contains__(key) - def __iter__(self): + def __iter__(self) -> Any: self.counter["__iter__"] += 1 return super().__iter__() - def keys(self): + def keys(self) -> Any: self.counter["keys"] += 1 return super().keys() -def skip_if_nested_chunks(**kwargs): +def skip_if_nested_chunks(**kwargs: Any) -> None: if kwargs.get("dimension_separator") == "/": pytest.skip("nested chunks are unsupported") -class TestLRUStoreCache(StoreTests[LRUStoreCache, cpu.Buffer]): +class TestLRUStoreCache(StoreTests[LRUStoreCache, Buffer]): # type: ignore[misc] store_cls = LRUStoreCache - buffer_cls = cpu.buffer_prototype.buffer + buffer_cls = cpu.Buffer CountingClass = CountingDict LRUStoreClass = LRUStoreCache root = "" - async def get(self, store: LRUStoreCache, key: str) -> cpu.Buffer: + async def get(self, store: LRUStoreCache, key: str) -> Buffer: """Get method required by StoreTests.""" return await store.get(key, prototype=cpu.buffer_prototype) - async def set(self, store: LRUStoreCache, key: str, value: cpu.Buffer) -> None: + async def set(self, store: LRUStoreCache, key: str, value: Buffer) -> None: """Set method required by StoreTests.""" await store.set(key, value) @pytest.fixture - def store_kwargs(self): + def store_kwargs(self) -> dict[str, Any]: """Provide default kwargs for store creation.""" return {"store": MemoryStore(), "max_size": 2**27} @@ -69,16 +70,16 @@ async def store(self, store_kwargs: dict[str, Any]) -> LRUStoreCache: return self.store_cls(**store_kwargs) @pytest.fixture - def open_kwargs(self): + def open_kwargs(self) -> dict[str, Any]: """Provide default kwargs for store.open().""" return {"store": MemoryStore(), "max_size": 2**27} - def create_store(self, **kwargs): + def create_store(self, **kwargs: Any) -> LRUStoreCache: # wrapper therefore no dimension_separator argument skip_if_nested_chunks(**kwargs) return self.LRUStoreClass(MemoryStore(), max_size=2**27) - def create_store_from_mapping(self, mapping, **kwargs): + def create_store_from_mapping(self, mapping: dict[str, Any], **kwargs: Any) -> LRUStoreCache: # Handle creation from existing mapping skip_if_nested_chunks(**kwargs) # Create a MemoryStore from the mapping @@ -89,7 +90,7 @@ def create_store_from_mapping(self, mapping, **kwargs): underlying_store._store_dict[k] = v return self.LRUStoreClass(underlying_store, max_size=2**27) - def test_cache_values_no_max_size(self): + def test_cache_values_no_max_size(self) -> None: # setup store store = self.CountingClass() foo_key = self.root + "foo" @@ -102,7 +103,7 @@ def test_cache_values_no_max_size(self): assert 1 == store.counter["__setitem__", bar_key] # setup cache - cache = self.LRUStoreClass(store, max_size=None) + cache = self.LRUStoreClass(store, max_size=1024*1024) assert 0 == cache.hits assert 0 == cache.misses @@ -154,7 +155,7 @@ def test_cache_values_no_max_size(self): assert 0 == store.counter["__getitem__", bar_key] assert 1 == store.counter["__setitem__", bar_key] - def test_cache_values_with_max_size(self): + def test_cache_values_with_max_size(self) -> None: # setup store store = self.CountingClass() foo_key = self.root + "foo" @@ -251,7 +252,7 @@ def test_cache_values_with_max_size(self): assert 4 == cache.hits assert 2 == cache.misses - def test_cache_keys(self): + def test_cache_keys(self) -> None: # setup store = self.CountingClass() foo_key = self.root + "foo" @@ -262,7 +263,7 @@ def test_cache_keys(self): assert 0 == store.counter["__contains__", foo_key] assert 0 == store.counter["__iter__"] assert 0 == store.counter["keys"] - cache = self.LRUStoreClass(store, max_size=None) + cache = self.LRUStoreClass(store, max_size=1024*1024) # keys should be cached on first call keys = sorted(cache.keys()) From 54322d2e12968775ccf83d619943056ad06fe803 Mon Sep 17 00:00:00 2001 From: ruaridhg Date: Mon, 1 Sep 2025 10:59:01 +0100 Subject: [PATCH 15/39] Remove asyncio marker from pyproject.toml --- pyproject.toml | 1 - tests/test_store/test_cache.py | 4 ++-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 623c3acf9b..52b032f771 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -392,7 +392,6 @@ filterwarnings = [ "ignore:Unclosed client session None: assert 1 == store.counter["__setitem__", bar_key] # setup cache - cache = self.LRUStoreClass(store, max_size=1024*1024) + cache = self.LRUStoreClass(store, max_size=1024 * 1024) assert 0 == cache.hits assert 0 == cache.misses @@ -263,7 +263,7 @@ def test_cache_keys(self) -> None: assert 0 == store.counter["__contains__", foo_key] assert 0 == store.counter["__iter__"] assert 0 == store.counter["keys"] - cache = self.LRUStoreClass(store, max_size=1024*1024) + cache = self.LRUStoreClass(store, max_size=1024 * 1024) # keys should be cached on first call keys = sorted(cache.keys()) From ae65b38baada78be5326a3029b859092bd990f2e Mon Sep 17 00:00:00 2001 From: ruaridhg <32329546+ruaridhg@users.noreply.github.com> Date: Mon, 1 Sep 2025 12:46:29 +0100 Subject: [PATCH 16/39] Apply suggestions from code review Co-authored-by: David Stansby --- src/zarr/storage/_cache.py | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/src/zarr/storage/_cache.py b/src/zarr/storage/_cache.py index c25ab40b7f..3d7dea3c12 100644 --- a/src/zarr/storage/_cache.py +++ b/src/zarr/storage/_cache.py @@ -60,9 +60,13 @@ def _listdir_from_keys(store: Store, path: str | None = None) -> list[str]: def listdir(store: Store, path: Path | None = None) -> list[str]: - """Obtain a directory listing for the given path. If `store` provides a `listdir` + """ + Obtain a directory listing for the given path. + + If `store` provides a `listdir` method, this will be called, otherwise will fall back to implementation via the - `MutableMapping` interface.""" + `MutableMapping` interface. + """ path_str = normalize_path(path) if hasattr(store, "listdir"): # pass through @@ -120,8 +124,11 @@ def _put( class LRUStoreCache(Store): - """Storage class that implements a least-recently-used (LRU) cache layer over - some other store. Intended primarily for use with stores that can be slow to + """ + Storage class that implements a least-recently-used (LRU) cache layer over + some other store. + + Intended primarily for use with stores that can be slow to access, e.g., remote stores that require network communication to store and retrieve data. @@ -262,7 +269,7 @@ def with_read_only(self, read_only: bool = False) -> "LRUStoreCache": underlying_store = self._store.with_read_only(read_only) return LRUStoreCache(underlying_store, max_size=self._max_size, read_only=read_only) - def _normalize_key(self, key: Any) -> str: + def _normalize_key(self, key: str | Path) -> str: """Convert key to string if it's a Path object, otherwise return as-is""" if isinstance(key, Path): return str(key) @@ -334,7 +341,7 @@ def __len__(self) -> int: def __iter__(self) -> Iterator[str]: return self.keys() - def __contains__(self, key: Any) -> bool: + def __contains__(self, key: str | Path) -> bool: with self._mutex: if key not in self._contains_cache: # Handle both Store objects and dict-like objects From 94634b3483c2bc707e6e26f4ca87c318351fe5ec Mon Sep 17 00:00:00 2001 From: ruaridhg Date: Mon, 1 Sep 2025 15:05:30 +0100 Subject: [PATCH 17/39] Fixed failing tests with some PR review comments addressed --- src/zarr/storage/__init__.py | 1 + src/zarr/storage/_cache.py | 238 +++++++++++++++++++++-------------- 2 files changed, 148 insertions(+), 91 deletions(-) diff --git a/src/zarr/storage/__init__.py b/src/zarr/storage/__init__.py index d8ccdf51c5..1c50a3acb9 100644 --- a/src/zarr/storage/__init__.py +++ b/src/zarr/storage/__init__.py @@ -17,6 +17,7 @@ __all__ = [ "FsspecStore", "GpuMemoryStore", + "LRUStoreCache", "LocalStore", "LoggingStore", "MemoryStore", diff --git a/src/zarr/storage/_cache.py b/src/zarr/storage/_cache.py index 3d7dea3c12..09d6b00341 100644 --- a/src/zarr/storage/_cache.py +++ b/src/zarr/storage/_cache.py @@ -1,3 +1,4 @@ +import asyncio import io import warnings from collections import OrderedDict @@ -8,41 +9,28 @@ import numpy as np -from zarr.abc.store import OffsetByteRequest, RangeByteRequest, Store, SuffixByteRequest +from zarr.abc.store import ( + ByteRequest, + OffsetByteRequest, + RangeByteRequest, + Store, + SuffixByteRequest, +) from zarr.core.buffer import Buffer, BufferPrototype from zarr.core.buffer.core import default_buffer_prototype from zarr.storage._utils import normalize_path -ByteRequest: TypeAlias = RangeByteRequest | OffsetByteRequest | SuffixByteRequest +def buffer_size(buffer: Buffer) -> int: + """Calculate the size in bytes of a Buffer object.""" + return buffer.nbytes -def buffer_size(v: Any) -> int: - """Calculate the size in bytes of a value, handling Buffer objects properly.""" - if hasattr(v, "__len__") and hasattr(v, "nbytes"): - # This is likely a Buffer object - return int(v.nbytes) - elif hasattr(v, "to_bytes"): - # This is a Buffer object, get its bytes representation - return len(v.to_bytes()) - elif isinstance(v, (bytes, bytearray, memoryview)): - return len(v) - else: - # Fallback to numpy - return int(np.asarray(v).nbytes) - - -def _path_to_prefix(path: str | None) -> str: - # assume path already normalized - if path: - prefix = path + "/" - else: - prefix = "" - return prefix -def _listdir_from_keys(store: Store, path: str | None = None) -> list[str]: - # assume path already normalized - prefix = _path_to_prefix(path) +def _listdir_from_keys(store: Store, path: str) -> list[str]: + """ + Extract directory listing from store keys by filtering keys that start with the given path. + """ children: set[str] = set() # Handle both Store objects and dict-like objects if hasattr(store, "keys") and callable(store.keys): @@ -52,8 +40,8 @@ def _listdir_from_keys(store: Store, path: str | None = None) -> list[str]: return [] for key in keys: - if key.startswith(prefix) and len(key) > len(prefix): - suffix = key[len(prefix) :] + if key.startswith(path) and len(key) > len(path): + suffix = key[len(path) :] child = suffix.split("/")[0] children.add(child) return sorted(children) @@ -83,6 +71,10 @@ def listdir(store: Store, path: Path | None = None) -> list[str]: def _get(path: Path, prototype: BufferPrototype, byte_range: ByteRequest | None) -> Buffer: + """ + Read data from a file path with optional byte range support + and return requested data as a Buffer object. + """ if byte_range is None: return prototype.buffer.from_bytes(path.read_bytes()) with path.open("rb") as f: @@ -105,6 +97,9 @@ def _put( start: int | None = None, exclusive: bool = False, ) -> int | None: + """ + Write buffer data to a file path with optional partial write support. + """ path.parent.mkdir(parents=True, exist_ok=True) if start is not None: with path.open("r+b") as f: @@ -127,7 +122,7 @@ class LRUStoreCache(Store): """ Storage class that implements a least-recently-used (LRU) cache layer over some other store. - + Intended primarily for use with stores that can be slow to access, e.g., remote stores that require network communication to store and retrieve data. @@ -151,12 +146,6 @@ class LRUStoreCache(Store): The maximum size that the cache may grow to, in number of bytes. This parameter is required to prevent unbounded memory growth. - Recommended minimum values: - - For small metadata files: 1MB (1024 * 1024) - - For chunk caching: 10MB (1024 * 1024 * 10) - - For general use: 256MB (1024 * 1024 * 256) - - For high-performance applications: 1GB (1024 * 1024 * 1000) - Values smaller than your typical chunk size will result in most data being silently excluded from the cache, reducing effectiveness. @@ -202,12 +191,12 @@ class LRUStoreCache(Store): root: Path - def __init__(self, store: Store, *, max_size: int, **kwargs: Any) -> None: + def __init__(self, store: Store, *, max_size: int) -> None: if max_size <= 0: raise ValueError("max_size must be a positive integer (bytes)") - # Extract and handle known parameters - read_only = kwargs.get("read_only", getattr(store, "read_only", False)) + # Always inherit read_only state from the underlying store + read_only = getattr(store, "read_only", False) # Call parent constructor with read_only parameter super().__init__(read_only=read_only) @@ -247,6 +236,11 @@ async def open(cls, store: Store, *, max_size: int, **kwargs: Any) -> "LRUStoreC LRUStoreCache The opened cache store instance. """ + # Handle read_only parameter if provided + if "read_only" in kwargs: + read_only = kwargs.pop("read_only") + store = store.with_read_only(read_only) + cache = cls(store, max_size=max_size, **kwargs) await cache._open() return cache @@ -267,7 +261,7 @@ def with_read_only(self, read_only: bool = False) -> "LRUStoreCache": """ # Create a new underlying store with the new read_only setting underlying_store = self._store.with_read_only(read_only) - return LRUStoreCache(underlying_store, max_size=self._max_size, read_only=read_only) + return LRUStoreCache(underlying_store, max_size=self._max_size) def _normalize_key(self, key: str | Path) -> str: """Convert key to string if it's a Path object, otherwise return as-is""" @@ -344,23 +338,30 @@ def __iter__(self) -> Iterator[str]: def __contains__(self, key: str | Path) -> bool: with self._mutex: if key not in self._contains_cache: - # Handle both Store objects and dict-like objects - if hasattr(self._store, "__contains__"): - result = key in self._store - self._contains_cache[key] = bool(result) - else: - # Fallback for stores without __contains__ + # Check if it's a Store object vs dict-like object + if hasattr(self._store, 'supports_listing'): + # It's a Store object - use async interface try: - if hasattr(self._store, "__getitem__"): - self._store[key] - self._contains_cache[key] = True - else: - self._contains_cache[key] = False - except KeyError: - self._contains_cache[key] = False + result = asyncio.run(self._store.exists(str(key))) + except RuntimeError: + # Already in async context + raise NotImplementedError( + "Cannot use 'in' operator in async context. Use 'await store.exists(key)' instead." + ) from None + else: + # It's a dict-like object (for tests) - use sync interface + result = key in self._store + + self._contains_cache[key] = bool(result) return bool(self._contains_cache[key]) async def clear(self) -> None: + """ + Remove all keys from the store and clear the cache. + + This operation clears both the underlying store and invalidates + all cached data to maintain consistency. + """ # Check if store is writable self._check_writable() @@ -368,20 +369,48 @@ async def clear(self) -> None: self.invalidate() def keys(self) -> Iterator[str]: + """ + Return an iterator over the keys in the store. + """ with self._mutex: return iter(self._keys()) def _keys(self) -> list[str]: if self._keys_cache is None: - # Handle both Store objects and dict-like objects - if hasattr(self._store, "keys") and callable(self._store.keys): - self._keys_cache = [str(k) for k in self._store.keys()] # noqa: SIM118 + # Check if it's a Store object vs dict-like object + if hasattr(self._store, 'supports_listing'): + # It's a Store object + if self._store.supports_listing: + try: + async def collect_keys() -> list[str]: + return [str(key) async for key in self._store.list()] + + keys = asyncio.run(collect_keys()) + self._keys_cache = keys + except RuntimeError: + # Already in async context + raise NotImplementedError( + "Cannot list keys in async context - _keys() method needs to be async" + ) from None + else: + # Store doesn't support listing + self._keys_cache = [] else: - # Fallback for stores that don't have keys method - self._keys_cache = [] + # It's a dict-like object (for tests) + if hasattr(self._store, "keys") and callable(self._store.keys): + keys = [str(k) for k in self._store.keys()] + self._keys_cache = keys + else: + self._keys_cache = [] return self._keys_cache - def listdir(self, path: Path | None = None) -> list[str]: + def listdir(self, path: Path) -> list[str]: + """ + Return a list of directory contents for the given path with caching. + + This method provides a cached version of directory listings to improve + performance for repeated directory access operations. + """ with self._mutex: # Normalize path to string for consistent caching path_key = self._normalize_key(path) if path is not None else None @@ -393,9 +422,12 @@ def listdir(self, path: Path | None = None) -> list[str]: return listing async def getsize(self, key: str) -> int: + """ + Get the size in bytes of the value stored at the given key. + """ return await self._store.getsize(key) - def _pop_value(self) -> Any: + def _pop_value(self) -> bytes: # remove the first value from the cache, as this will be the least recently # used value _, v = self._values_cache.popitem(last=False) @@ -404,53 +436,61 @@ def _pop_value(self) -> Any: def _accommodate_value(self, value_size: int) -> None: while self._current_size + value_size > self._max_size: v = self._pop_value() - self._current_size -= buffer_size(v) + self._current_size -= len(v) - def _cache_value(self, key: str, value: Any) -> None: - # cache a value - if hasattr(value, "to_bytes"): + def _cache_value(self, key: str, value: Buffer) -> None: + """Cache a value, handling both Buffer objects and bytes.""" + # Convert to bytes if needed + if isinstance(value, Buffer): cache_value = value.to_bytes() else: + # Already bytes cache_value = value - value_size = buffer_size(cache_value) + value_size = len(cache_value) + # Check if value exceeds max size - if so, don't cache it if value_size <= self._max_size: self._accommodate_value(value_size) cache_key = self._normalize_key(key) self._values_cache[cache_key] = cache_value self._current_size += value_size - # If value_size > max_size, we simply don't cache it (silent skip) def invalidate(self) -> None: """Completely clear the cache.""" with self._mutex: self._values_cache.clear() - self._invalidate_keys() self._current_size = 0 + self._invalidate_keys_unsafe() - def invalidate_values(self) -> None: - """Clear the values cache.""" - with self._mutex: - self._values_cache.clear() - + def invalidate_keys(self) -> None: - """Clear the keys cache.""" + """Clear the keys cache and all related caches.""" with self._mutex: - self._invalidate_keys() + self._keys_cache = None + self._contains_cache.clear() + self._listdir_cache.clear() - def _invalidate_keys(self) -> None: + def _invalidate_keys_unsafe(self) -> None: + """Clear the keys cache without acquiring mutex (assumes mutex already held).""" self._keys_cache = None self._contains_cache.clear() self._listdir_cache.clear() - def _invalidate_value(self, key: Any) -> None: + def _invalidate_value_unsafe(self, key: Any) -> None: + """Remove a value from the cache and update the current size.""" cache_key = self._normalize_key(key) if cache_key in self._values_cache: value = self._values_cache.pop(cache_key) - self._current_size -= buffer_size(value) + self._current_size -= len(value) + + def invalidate_values(self) -> None: + """Clear only the values cache, keeping other caches intact.""" + with self._mutex: + self._values_cache.clear() + self._current_size = 0 - def __getitem__(self, key: Any) -> Any: + def __getitem__(self, key: str) -> Any: cache_key = self._normalize_key(key) try: # first try to obtain the value from the cache @@ -463,11 +503,27 @@ def __getitem__(self, key: Any) -> Any: except KeyError: # cache miss, retrieve value from the store - if hasattr(self._store, "__getitem__"): - value = self._store[key] + # Check if it's a Store object vs dict-like object + if hasattr(self._store, 'supports_listing'): + # It's a Store object - use async interface + try: + prototype = default_buffer_prototype() + result = asyncio.run(self._store.get(str(key), prototype)) + if result is None: + raise KeyError(f"Key {key} not found in store") + value = result.to_bytes() # Convert to bytes for consistency + except RuntimeError: + # Already in async context + raise NotImplementedError( + "Cannot use [] operator in async context. Use 'await store.get(key)' instead." + ) from None else: - # Fallback for async stores - raise KeyError(f"Key {key} not found in store") from None + # It's a dict-like object (for tests) - use sync interface + try: + value = self._store[key] # This returns bytes directly + except KeyError: + raise KeyError(f"Key {key} not found in store") from None + with self._mutex: self.misses += 1 # need to check if key is not in the cache, as it may have been cached @@ -486,7 +542,7 @@ def __setitem__(self, key: str, value: Buffer) -> None: # Update cache and invalidate keys cache since we may have added a new key with self._mutex: - self._invalidate_keys() + self._invalidate_keys_unsafe() self._cache_value(self._normalize_key(key), value) def __delitem__(self, key: Any) -> None: @@ -496,9 +552,9 @@ def __delitem__(self, key: Any) -> None: # For async stores, this shouldn't be used - use delete() instead raise NotImplementedError("Use async delete() method for async stores") with self._mutex: - self._invalidate_keys() + self._invalidate_keys_unsafe() cache_key = self._normalize_key(key) - self._invalidate_value(cache_key) + self._invalidate_value_unsafe(cache_key) def __eq__(self, value: object) -> bool: return type(self) is type(value) and self._store.__eq__(value._store) # type: ignore[attr-defined] @@ -528,9 +584,9 @@ async def delete(self, key: str) -> None: # Invalidate cache entries with self._mutex: - self._invalidate_keys() + self._invalidate_keys_unsafe() cache_key = self._normalize_key(key) - self._invalidate_value(cache_key) + self._invalidate_value_unsafe(cache_key) async def exists(self, key: str) -> bool: # Delegate to the underlying store @@ -571,9 +627,9 @@ async def _set(self, key: str, value: Buffer, exclusive: bool = False) -> None: # Update cache with self._mutex: - self._invalidate_keys() + self._invalidate_keys_unsafe() cache_key = self._normalize_key(key) - self._invalidate_value(cache_key) + self._invalidate_value_unsafe(cache_key) self._cache_value(cache_key, value) async def get( @@ -737,6 +793,6 @@ async def set_partial_values( for key, _start, _value in key_start_values: # For now, just invalidate the cache for these keys with self._mutex: - self._invalidate_keys() + self._invalidate_keys_unsafe() cache_key = self._normalize_key(key) - self._invalidate_value(cache_key) + self._invalidate_value_unsafe(cache_key) From b31fd7c5fb0be31dd8bd22bfb7d5d8ae7e2f72bd Mon Sep 17 00:00:00 2001 From: ruaridhg Date: Mon, 1 Sep 2025 15:24:53 +0100 Subject: [PATCH 18/39] Modify **_item before potential deletion --- src/zarr/storage/_cache.py | 73 ++++++++++++++++---------------------- 1 file changed, 31 insertions(+), 42 deletions(-) diff --git a/src/zarr/storage/_cache.py b/src/zarr/storage/_cache.py index 09d6b00341..7673c5c5d3 100644 --- a/src/zarr/storage/_cache.py +++ b/src/zarr/storage/_cache.py @@ -534,11 +534,18 @@ def __getitem__(self, key: str) -> Any: return value def __setitem__(self, key: str, value: Buffer) -> None: - if hasattr(self._store, "__setitem__"): - self._store[key] = value + # Check if it's a Store object vs dict-like object + if hasattr(self._store, 'supports_listing'): + # It's a Store object - can't use sync __setitem__ with async store + raise NotImplementedError( + "Cannot use [] assignment with async store. Use 'await store.set(key, value)' instead." + ) else: - # For async stores, we can't handle this synchronously - raise TypeError("Cannot use __setitem__ with async store") + # It's a dict-like object (for tests) - use sync interface + if hasattr(value, "to_bytes"): + self._store[key] = value.to_bytes() + else: + self._store[key] = value # Update cache and invalidate keys cache since we may have added a new key with self._mutex: @@ -546,11 +553,20 @@ def __setitem__(self, key: str, value: Buffer) -> None: self._cache_value(self._normalize_key(key), value) def __delitem__(self, key: Any) -> None: - if hasattr(self._store, "__delitem__"): - del self._store[key] + # Check if it's a Store object vs dict-like object + if hasattr(self._store, 'supports_listing'): + # It's a Store object - can't use sync __delitem__ with async store + raise NotImplementedError( + "Cannot use 'del store[key]' with async store. Use 'await store.delete(key)' instead." + ) else: - # For async stores, this shouldn't be used - use delete() instead - raise NotImplementedError("Use async delete() method for async stores") + # It's a dict-like object (for tests) - check if it actually supports deletion + try: + del self._store[key] + except (TypeError, AttributeError): + raise NotImplementedError(f"Store {type(self._store).__name__} does not support delete operations") from None + + # Update cache - key has been deleted so invalidate caches with self._mutex: self._invalidate_keys_unsafe() cache_key = self._normalize_key(key) @@ -575,12 +591,11 @@ async def delete(self, key: str) -> None: # Check if store is writable self._check_writable() - # Delegate to the underlying store for actual deletion - if hasattr(self._store, "delete"): + # Check if the underlying store supports deletes + if self._store.supports_deletes: await self._store.delete(key) else: - # Fallback for stores that don't have async delete - del self._store[key] # type: ignore[attr-defined] + raise NotImplementedError(f"Store {type(self._store).__name__} does not support delete operations") # Invalidate cache entries with self._mutex: @@ -590,40 +605,14 @@ async def delete(self, key: str) -> None: async def exists(self, key: str) -> bool: # Delegate to the underlying store - if hasattr(self._store, "exists"): - return await self._store.exists(key) - else: - # Fallback for stores that don't have async exists - if hasattr(self._store, "__contains__"): - return key in self._store - else: - # Final fallback - try to get the key - try: - if hasattr(self._store, "__getitem__"): - self._store[key] - return True - else: - return False - except KeyError: - return False + return await self._store.exists(key) async def _set(self, key: str, value: Buffer, exclusive: bool = False) -> None: # Check if store is writable self._check_writable() # Delegate to the underlying store - if hasattr(self._store, "set"): - await self._store.set(key, value) - else: - # Fallback for stores that don't have async set - if hasattr(self._store, "__setitem__"): - # Convert Buffer to bytes for sync stores - if hasattr(value, "to_bytes"): - self._store[key] = value.to_bytes() - else: - self._store[key] = value - else: - raise TypeError("Store does not support setting values") + await self._store.set(key, value) # Update cache with self._mutex: @@ -643,7 +632,7 @@ async def get( # For byte_range requests, don't use cache for now (could be optimized later) if byte_range is not None: - if hasattr(self._store, "get") and callable(self._store.get): + if callable(self._store.get): # Check if it's an async Store.get method (takes prototype and byte_range) try: if prototype is None: @@ -678,7 +667,7 @@ async def get( return prototype.buffer.from_bytes(value) except KeyError: # Cache miss - get from store - if hasattr(self._store, "get") and callable(self._store.get): + if callable(self._store.get): # Try async Store.get method first try: if prototype is None: From f211f9a780a6b5777dfbf4f303df428ea11fae8f Mon Sep 17 00:00:00 2001 From: ruaridhg Date: Mon, 1 Sep 2025 15:44:26 +0100 Subject: [PATCH 19/39] Remove **_item methods --- src/zarr/storage/_cache.py | 110 ++++++---------------------- tests/test_store/test_cache.py | 130 ++++++++++++++------------------- 2 files changed, 75 insertions(+), 165 deletions(-) diff --git a/src/zarr/storage/_cache.py b/src/zarr/storage/_cache.py index 7673c5c5d3..6e612a2bef 100644 --- a/src/zarr/storage/_cache.py +++ b/src/zarr/storage/_cache.py @@ -490,88 +490,6 @@ def invalidate_values(self) -> None: self._values_cache.clear() self._current_size = 0 - def __getitem__(self, key: str) -> Any: - cache_key = self._normalize_key(key) - try: - # first try to obtain the value from the cache - with self._mutex: - value = self._values_cache[cache_key] - # cache hit if no KeyError is raised - self.hits += 1 - # treat the end as most recently used - self._values_cache.move_to_end(cache_key) - - except KeyError: - # cache miss, retrieve value from the store - # Check if it's a Store object vs dict-like object - if hasattr(self._store, 'supports_listing'): - # It's a Store object - use async interface - try: - prototype = default_buffer_prototype() - result = asyncio.run(self._store.get(str(key), prototype)) - if result is None: - raise KeyError(f"Key {key} not found in store") - value = result.to_bytes() # Convert to bytes for consistency - except RuntimeError: - # Already in async context - raise NotImplementedError( - "Cannot use [] operator in async context. Use 'await store.get(key)' instead." - ) from None - else: - # It's a dict-like object (for tests) - use sync interface - try: - value = self._store[key] # This returns bytes directly - except KeyError: - raise KeyError(f"Key {key} not found in store") from None - - with self._mutex: - self.misses += 1 - # need to check if key is not in the cache, as it may have been cached - # while we were retrieving the value from the store - if cache_key not in self._values_cache: - self._cache_value(cache_key, value) - - return value - - def __setitem__(self, key: str, value: Buffer) -> None: - # Check if it's a Store object vs dict-like object - if hasattr(self._store, 'supports_listing'): - # It's a Store object - can't use sync __setitem__ with async store - raise NotImplementedError( - "Cannot use [] assignment with async store. Use 'await store.set(key, value)' instead." - ) - else: - # It's a dict-like object (for tests) - use sync interface - if hasattr(value, "to_bytes"): - self._store[key] = value.to_bytes() - else: - self._store[key] = value - - # Update cache and invalidate keys cache since we may have added a new key - with self._mutex: - self._invalidate_keys_unsafe() - self._cache_value(self._normalize_key(key), value) - - def __delitem__(self, key: Any) -> None: - # Check if it's a Store object vs dict-like object - if hasattr(self._store, 'supports_listing'): - # It's a Store object - can't use sync __delitem__ with async store - raise NotImplementedError( - "Cannot use 'del store[key]' with async store. Use 'await store.delete(key)' instead." - ) - else: - # It's a dict-like object (for tests) - check if it actually supports deletion - try: - del self._store[key] - except (TypeError, AttributeError): - raise NotImplementedError(f"Store {type(self._store).__name__} does not support delete operations") from None - - # Update cache - key has been deleted so invalidate caches - with self._mutex: - self._invalidate_keys_unsafe() - cache_key = self._normalize_key(key) - self._invalidate_value_unsafe(cache_key) - def __eq__(self, value: object) -> bool: return type(self) is type(value) and self._store.__eq__(value._store) # type: ignore[attr-defined] @@ -591,11 +509,19 @@ async def delete(self, key: str) -> None: # Check if store is writable self._check_writable() - # Check if the underlying store supports deletes - if self._store.supports_deletes: - await self._store.delete(key) + # Check if it's a Store object vs dict-like object + if hasattr(self._store, 'supports_listing'): + # It's a Store object - check if it supports deletes + if self._store.supports_deletes: + await self._store.delete(key) + else: + raise NotImplementedError(f"Store {type(self._store).__name__} does not support delete operations") else: - raise NotImplementedError(f"Store {type(self._store).__name__} does not support delete operations") + # It's a dict-like object (for tests) - use sync interface + try: + del self._store[key] + except (TypeError, AttributeError): + raise NotImplementedError(f"Store {type(self._store).__name__} does not support delete operations") from None # Invalidate cache entries with self._mutex: @@ -611,8 +537,16 @@ async def _set(self, key: str, value: Buffer, exclusive: bool = False) -> None: # Check if store is writable self._check_writable() - # Delegate to the underlying store - await self._store.set(key, value) + # Check if it's a Store object vs dict-like object + if hasattr(self._store, 'supports_listing'): + # It's a Store object - use async interface + await self._store.set(key, value) + else: + # It's a dict-like object (for tests) - use sync interface + if hasattr(value, "to_bytes"): + self._store[key] = value.to_bytes() + else: + self._store[key] = value # Update cache with self._mutex: diff --git a/tests/test_store/test_cache.py b/tests/test_store/test_cache.py index 26366be26b..b598e8425a 100644 --- a/tests/test_store/test_cache.py +++ b/tests/test_store/test_cache.py @@ -90,7 +90,7 @@ def create_store_from_mapping(self, mapping: dict[str, Any], **kwargs: Any) -> L underlying_store._store_dict[k] = v return self.LRUStoreClass(underlying_store, max_size=2**27) - def test_cache_values_no_max_size(self) -> None: + async def test_cache_values_no_max_size(self) -> None: # setup store store = self.CountingClass() foo_key = self.root + "foo" @@ -107,26 +107,33 @@ def test_cache_values_no_max_size(self) -> None: assert 0 == cache.hits assert 0 == cache.misses - # test first __getitem__, cache miss - assert b"xxx" == cache[foo_key] + # test first get(), cache miss + result = await cache.get(foo_key) + assert result is not None + assert result.to_bytes() == b"xxx" assert 1 == store.counter["__getitem__", foo_key] assert 1 == store.counter["__setitem__", foo_key] assert 0 == cache.hits assert 1 == cache.misses - # test second __getitem__, cache hit - assert b"xxx" == cache[foo_key] + # test second get(), cache hit + result = await cache.get(foo_key) + assert result is not None + assert result.to_bytes() == b"xxx" assert 1 == store.counter["__getitem__", foo_key] assert 1 == store.counter["__setitem__", foo_key] assert 1 == cache.hits assert 1 == cache.misses - # test __setitem__, __getitem__ - cache[foo_key] = b"zzz" + # test set(), get() + from zarr.core.buffer.cpu import Buffer + await cache.set(foo_key, Buffer.from_bytes(b"zzz")) assert 1 == store.counter["__getitem__", foo_key] assert 2 == store.counter["__setitem__", foo_key] # should be a cache hit - assert b"zzz" == cache[foo_key] + result = await cache.get(foo_key) + assert result is not None + assert result.to_bytes() == b"zzz" assert 1 == store.counter["__getitem__", foo_key] assert 2 == store.counter["__setitem__", foo_key] assert 2 == cache.hits @@ -134,19 +141,22 @@ def test_cache_values_no_max_size(self) -> None: # manually invalidate all cached values cache.invalidate_values() - assert b"zzz" == cache[foo_key] + result = await cache.get(foo_key) + assert result is not None + assert result.to_bytes() == b"zzz" assert 2 == store.counter["__getitem__", foo_key] assert 2 == store.counter["__setitem__", foo_key] cache.invalidate() - assert b"zzz" == cache[foo_key] + result = await cache.get(foo_key) + assert result is not None + assert result.to_bytes() == b"zzz" assert 3 == store.counter["__getitem__", foo_key] assert 2 == store.counter["__setitem__", foo_key] - # test __delitem__ - del cache[foo_key] - with pytest.raises(KeyError): - # noinspection PyStatementEffect - cache[foo_key] + # test delete() + await cache.delete(foo_key) + result = await cache.get(foo_key) + assert result is None with pytest.raises(KeyError): # noinspection PyStatementEffect store[foo_key] @@ -155,7 +165,7 @@ def test_cache_values_no_max_size(self) -> None: assert 0 == store.counter["__getitem__", bar_key] assert 1 == store.counter["__setitem__", bar_key] - def test_cache_values_with_max_size(self) -> None: + async def test_cache_values_with_max_size(self) -> None: # setup store store = self.CountingClass() foo_key = self.root + "foo" @@ -169,90 +179,55 @@ def test_cache_values_with_max_size(self) -> None: assert 0 == cache.hits assert 0 == cache.misses - # test first 'foo' __getitem__, cache miss - assert b"xxx" == cache[foo_key] + # test first 'foo' get(), cache miss + result = await cache.get(foo_key) + assert result is not None + assert result.to_bytes() == b"xxx" assert 1 == store.counter["__getitem__", foo_key] assert 0 == cache.hits assert 1 == cache.misses - # test second 'foo' __getitem__, cache hit - assert b"xxx" == cache[foo_key] + # test second 'foo' get(), cache hit + result = await cache.get(foo_key) + assert result is not None + assert result.to_bytes() == b"xxx" assert 1 == store.counter["__getitem__", foo_key] assert 1 == cache.hits assert 1 == cache.misses - # test first 'bar' __getitem__, cache miss - assert b"yyy" == cache[bar_key] + # test first 'bar' get(), cache miss + result = await cache.get(bar_key) + assert result is not None + assert result.to_bytes() == b"yyy" assert 1 == store.counter["__getitem__", bar_key] assert 1 == cache.hits assert 2 == cache.misses - # test second 'bar' __getitem__, cache hit - assert b"yyy" == cache[bar_key] + # test second 'bar' get(), cache hit + result = await cache.get(bar_key) + assert result is not None + assert result.to_bytes() == b"yyy" assert 1 == store.counter["__getitem__", bar_key] assert 2 == cache.hits assert 2 == cache.misses - # test 'foo' __getitem__, should have been evicted, cache miss - assert b"xxx" == cache[foo_key] + # test 'foo' get(), should have been evicted, cache miss + result = await cache.get(foo_key) + assert result is not None + assert result.to_bytes() == b"xxx" assert 2 == store.counter["__getitem__", foo_key] assert 2 == cache.hits assert 3 == cache.misses - # test 'bar' __getitem__, should have been evicted, cache miss - assert b"yyy" == cache[bar_key] + # test 'bar' get(), should have been evicted, cache miss + result = await cache.get(bar_key) + assert result is not None + assert result.to_bytes() == b"yyy" assert 2 == store.counter["__getitem__", bar_key] assert 2 == cache.hits assert 4 == cache.misses - # setup store - store = self.CountingClass() - store[foo_key] = b"xxx" - store[bar_key] = b"yyy" - assert 0 == store.counter["__getitem__", foo_key] - assert 0 == store.counter["__getitem__", bar_key] - # setup cache - can hold two items - cache = self.LRUStoreClass(store, max_size=6) - assert 0 == cache.hits - assert 0 == cache.misses - - # test first 'foo' __getitem__, cache miss - assert b"xxx" == cache[foo_key] - assert 1 == store.counter["__getitem__", foo_key] - assert 0 == cache.hits - assert 1 == cache.misses - - # test second 'foo' __getitem__, cache hit - assert b"xxx" == cache[foo_key] - assert 1 == store.counter["__getitem__", foo_key] - assert 1 == cache.hits - assert 1 == cache.misses - - # test first 'bar' __getitem__, cache miss - assert b"yyy" == cache[bar_key] - assert 1 == store.counter["__getitem__", bar_key] - assert 1 == cache.hits - assert 2 == cache.misses - - # test second 'bar' __getitem__, cache hit - assert b"yyy" == cache[bar_key] - assert 1 == store.counter["__getitem__", bar_key] - assert 2 == cache.hits - assert 2 == cache.misses - - # test 'foo' __getitem__, should still be cached - assert b"xxx" == cache[foo_key] - assert 1 == store.counter["__getitem__", foo_key] - assert 3 == cache.hits - assert 2 == cache.misses - - # test 'bar' __getitem__, should still be cached - assert b"yyy" == cache[bar_key] - assert 1 == store.counter["__getitem__", bar_key] - assert 4 == cache.hits - assert 2 == cache.misses - - def test_cache_keys(self) -> None: + async def test_cache_keys(self) -> None: # setup store = self.CountingClass() foo_key = self.root + "foo" @@ -282,7 +257,8 @@ def test_cache_keys(self) -> None: assert 1 == store.counter["keys"] # cache should be cleared if store is modified - crude but simple for now - cache[baz_key] = b"zzz" + from zarr.core.buffer.cpu import Buffer + await cache.set(baz_key, Buffer.from_bytes(b"zzz")) keys = sorted(cache.keys()) assert keys == [bar_key, baz_key, foo_key] assert 2 == store.counter["keys"] From 5431e4126aa6d1fa3f9c1fcc0960a6cce390378b Mon Sep 17 00:00:00 2001 From: ruaridhg Date: Mon, 1 Sep 2025 15:53:02 +0100 Subject: [PATCH 20/39] Add warning for data exceeding cache and test --- src/zarr/storage/_cache.py | 9 +++++++ tests/test_store/test_cache.py | 45 ++++++++++++++++++++++++++++++++++ 2 files changed, 54 insertions(+) diff --git a/src/zarr/storage/_cache.py b/src/zarr/storage/_cache.py index 6e612a2bef..63747b14e6 100644 --- a/src/zarr/storage/_cache.py +++ b/src/zarr/storage/_cache.py @@ -455,6 +455,15 @@ def _cache_value(self, key: str, value: Buffer) -> None: cache_key = self._normalize_key(key) self._values_cache[cache_key] = cache_value self._current_size += value_size + else: + # Emit warning when value is too large to cache + warnings.warn( + f"Value for key '{key}' ({value_size:,} bytes) exceeds cache max_size " + f"({self._max_size:,} bytes) and will not be cached. Consider increasing " + f"max_size if this data is frequently accessed.", + UserWarning, + stacklevel=3 + ) def invalidate(self) -> None: """Completely clear the cache.""" diff --git a/tests/test_store/test_cache.py b/tests/test_store/test_cache.py index b598e8425a..4086e6579b 100644 --- a/tests/test_store/test_cache.py +++ b/tests/test_store/test_cache.py @@ -2,6 +2,7 @@ from collections import Counter from typing import Any +import warnings import pytest @@ -290,3 +291,47 @@ async def test_cache_keys(self) -> None: assert 3 == store.counter["__contains__", foo_key] assert keys == sorted(store) assert 1 == store.counter["__iter__"] + + async def test_cache_value_too_large_warning(self) -> None: + """Test that a warning is emitted when a value is too large to cache.""" + # setup store with small cache + store = self.CountingClass() + foo_key = self.root + "foo" + large_value = b"x" * 1000 # 1000 bytes + small_cache_size = 500 # 500 bytes max cache + + store[foo_key] = large_value + cache = self.LRUStoreClass(store, max_size=small_cache_size) + + # Test that warning is emitted when trying to cache a value that's too large + # This should trigger the warning since 1000 bytes > 500 bytes cache limit + with pytest.warns(UserWarning, match=r"Value for key.*exceeds cache max_size.*and will not be cached"): + result = await cache.get(foo_key) + assert result is not None + assert result.to_bytes() == large_value + + # Verify the value was not actually cached (cache miss on second access) + assert cache.hits == 0 # No hits yet + assert cache.misses == 1 # One miss from the first access + + # Second access should also be a miss since value wasn't cached + # And it will also emit a warning, so we need to catch that too + with warnings.catch_warnings(): + warnings.simplefilter("ignore") # Ignore warnings for this call + result2 = await cache.get(foo_key) + assert result2 is not None + assert result2.to_bytes() == large_value + assert cache.hits == 0 # Still no hits + assert cache.misses == 2 # Two misses total + + # Verify the warning message contains expected information + with warnings.catch_warnings(record=True) as w: + warnings.simplefilter("always") + await cache.get(foo_key) # Trigger warning again + + assert len(w) == 1 + warning_message = str(w[0].message) + assert f"Value for key '{foo_key}'" in warning_message + assert "1,000 bytes" in warning_message # Check formatted number + assert "500 bytes" in warning_message # Check cache size + assert "Consider increasing max_size" in warning_message \ No newline at end of file From fcab2649e04afc4316d2cd123afd6fce5f7cc524 Mon Sep 17 00:00:00 2001 From: ruaridhg Date: Wed, 3 Sep 2025 14:41:30 +0100 Subject: [PATCH 21/39] Remove unused functions --- src/zarr/storage/_cache.py | 69 +++----------------------------------- 1 file changed, 4 insertions(+), 65 deletions(-) diff --git a/src/zarr/storage/_cache.py b/src/zarr/storage/_cache.py index 63747b14e6..be16f60b34 100644 --- a/src/zarr/storage/_cache.py +++ b/src/zarr/storage/_cache.py @@ -1,32 +1,20 @@ import asyncio -import io import warnings from collections import OrderedDict from collections.abc import AsyncIterator, Iterable, Iterator from pathlib import Path from threading import Lock -from typing import Any, TypeAlias - -import numpy as np +from typing import Any from zarr.abc.store import ( ByteRequest, - OffsetByteRequest, - RangeByteRequest, Store, - SuffixByteRequest, ) from zarr.core.buffer import Buffer, BufferPrototype from zarr.core.buffer.core import default_buffer_prototype from zarr.storage._utils import normalize_path -def buffer_size(buffer: Buffer) -> int: - """Calculate the size in bytes of a Buffer object.""" - return buffer.nbytes - - - def _listdir_from_keys(store: Store, path: str) -> list[str]: """ Extract directory listing from store keys by filtering keys that start with the given path. @@ -56,10 +44,10 @@ def listdir(store: Store, path: Path | None = None) -> list[str]: `MutableMapping` interface. """ path_str = normalize_path(path) + # Check if it's a Store object vs dict-like object if hasattr(store, "listdir"): # pass through - result = store.listdir(path_str) - return [str(item) for item in result] # Ensure all items are strings + return store.listdir(path_str) else: # slow version, iterate through all keys warnings.warn( @@ -69,55 +57,6 @@ def listdir(store: Store, path: Path | None = None) -> list[str]: ) return _listdir_from_keys(store, path_str) - -def _get(path: Path, prototype: BufferPrototype, byte_range: ByteRequest | None) -> Buffer: - """ - Read data from a file path with optional byte range support - and return requested data as a Buffer object. - """ - if byte_range is None: - return prototype.buffer.from_bytes(path.read_bytes()) - with path.open("rb") as f: - size = f.seek(0, io.SEEK_END) - if isinstance(byte_range, RangeByteRequest): - f.seek(byte_range.start) - return prototype.buffer.from_bytes(f.read(byte_range.end - f.tell())) - elif isinstance(byte_range, OffsetByteRequest): - f.seek(byte_range.offset) - elif isinstance(byte_range, SuffixByteRequest): - f.seek(max(0, size - byte_range.suffix)) - else: - raise TypeError(f"Unexpected byte_range, got {byte_range}.") - return prototype.buffer.from_bytes(f.read()) - - -def _put( - path: Path, - value: Buffer, - start: int | None = None, - exclusive: bool = False, -) -> int | None: - """ - Write buffer data to a file path with optional partial write support. - """ - path.parent.mkdir(parents=True, exist_ok=True) - if start is not None: - with path.open("r+b") as f: - f.seek(start) - # write takes any object supporting the buffer protocol - f.write(value.as_buffer_like()) - return None - else: - view = value.as_buffer_like() - if exclusive: - mode = "xb" - else: - mode = "wb" - with path.open(mode=mode) as f: - # write takes any object supporting the buffer protocol - return f.write(view) - - class LRUStoreCache(Store): """ Storage class that implements a least-recently-used (LRU) cache layer over @@ -472,7 +411,7 @@ def invalidate(self) -> None: self._current_size = 0 self._invalidate_keys_unsafe() - + def invalidate_keys(self) -> None: """Clear the keys cache and all related caches.""" with self._mutex: From b27014d060dc3552286b8d4d6b9564006a74f480 Mon Sep 17 00:00:00 2001 From: ruaridhg Date: Wed, 3 Sep 2025 16:05:49 +0100 Subject: [PATCH 22/39] Fix linting --- src/zarr/storage/_cache.py | 59 +++++++++++++++++++++----------------- 1 file changed, 32 insertions(+), 27 deletions(-) diff --git a/src/zarr/storage/_cache.py b/src/zarr/storage/_cache.py index be16f60b34..ed3c89a74e 100644 --- a/src/zarr/storage/_cache.py +++ b/src/zarr/storage/_cache.py @@ -4,7 +4,7 @@ from collections.abc import AsyncIterator, Iterable, Iterator from pathlib import Path from threading import Lock -from typing import Any +from typing import Any, cast from zarr.abc.store import ( ByteRequest, @@ -38,7 +38,7 @@ def _listdir_from_keys(store: Store, path: str) -> list[str]: def listdir(store: Store, path: Path | None = None) -> list[str]: """ Obtain a directory listing for the given path. - + If `store` provides a `listdir` method, this will be called, otherwise will fall back to implementation via the `MutableMapping` interface. @@ -47,7 +47,7 @@ def listdir(store: Store, path: Path | None = None) -> list[str]: # Check if it's a Store object vs dict-like object if hasattr(store, "listdir"): # pass through - return store.listdir(path_str) + return cast(list[str], store.listdir(path_str)) else: # slow version, iterate through all keys warnings.warn( @@ -57,6 +57,7 @@ def listdir(store: Store, path: Path | None = None) -> list[str]: ) return _listdir_from_keys(store, path_str) + class LRUStoreCache(Store): """ Storage class that implements a least-recently-used (LRU) cache layer over @@ -278,7 +279,7 @@ def __contains__(self, key: str | Path) -> bool: with self._mutex: if key not in self._contains_cache: # Check if it's a Store object vs dict-like object - if hasattr(self._store, 'supports_listing'): + if hasattr(self._store, "supports_listing"): # It's a Store object - use async interface try: result = asyncio.run(self._store.exists(str(key))) @@ -289,8 +290,8 @@ def __contains__(self, key: str | Path) -> bool: ) from None else: # It's a dict-like object (for tests) - use sync interface - result = key in self._store - + result = key in cast(dict[str, Any], self._store) + self._contains_cache[key] = bool(result) return bool(self._contains_cache[key]) @@ -317,13 +318,14 @@ def keys(self) -> Iterator[str]: def _keys(self) -> list[str]: if self._keys_cache is None: # Check if it's a Store object vs dict-like object - if hasattr(self._store, 'supports_listing'): + if hasattr(self._store, "supports_listing"): # It's a Store object if self._store.supports_listing: try: + async def collect_keys() -> list[str]: return [str(key) async for key in self._store.list()] - + keys = asyncio.run(collect_keys()) self._keys_cache = keys except RuntimeError: @@ -337,7 +339,7 @@ async def collect_keys() -> list[str]: else: # It's a dict-like object (for tests) if hasattr(self._store, "keys") and callable(self._store.keys): - keys = [str(k) for k in self._store.keys()] + keys = [str(k) for k in self._store.keys()] # noqa: SIM118 self._keys_cache = keys else: self._keys_cache = [] @@ -352,7 +354,7 @@ def listdir(self, path: Path) -> list[str]: """ with self._mutex: # Normalize path to string for consistent caching - path_key = self._normalize_key(path) if path is not None else None + path_key = self._normalize_key(path) try: return self._listdir_cache[path_key] except KeyError: @@ -370,14 +372,14 @@ def _pop_value(self) -> bytes: # remove the first value from the cache, as this will be the least recently # used value _, v = self._values_cache.popitem(last=False) - return v + return cast(bytes, v) def _accommodate_value(self, value_size: int) -> None: while self._current_size + value_size > self._max_size: v = self._pop_value() self._current_size -= len(v) - def _cache_value(self, key: str, value: Buffer) -> None: + def _cache_value(self, key: str, value: Buffer | bytes) -> None: """Cache a value, handling both Buffer objects and bytes.""" # Convert to bytes if needed if isinstance(value, Buffer): @@ -401,7 +403,7 @@ def _cache_value(self, key: str, value: Buffer) -> None: f"({self._max_size:,} bytes) and will not be cached. Consider increasing " f"max_size if this data is frequently accessed.", UserWarning, - stacklevel=3 + stacklevel=3, ) def invalidate(self) -> None: @@ -411,7 +413,6 @@ def invalidate(self) -> None: self._current_size = 0 self._invalidate_keys_unsafe() - def invalidate_keys(self) -> None: """Clear the keys cache and all related caches.""" with self._mutex: @@ -458,18 +459,22 @@ async def delete(self, key: str) -> None: self._check_writable() # Check if it's a Store object vs dict-like object - if hasattr(self._store, 'supports_listing'): + if hasattr(self._store, "supports_listing"): # It's a Store object - check if it supports deletes if self._store.supports_deletes: await self._store.delete(key) else: - raise NotImplementedError(f"Store {type(self._store).__name__} does not support delete operations") + raise NotImplementedError( + f"Store {type(self._store).__name__} does not support delete operations" + ) else: # It's a dict-like object (for tests) - use sync interface try: - del self._store[key] + del cast(dict[str, Any], self._store)[key] except (TypeError, AttributeError): - raise NotImplementedError(f"Store {type(self._store).__name__} does not support delete operations") from None + raise NotImplementedError( + f"Store {type(self._store).__name__} does not support delete operations" + ) from None # Invalidate cache entries with self._mutex: @@ -486,15 +491,15 @@ async def _set(self, key: str, value: Buffer, exclusive: bool = False) -> None: self._check_writable() # Check if it's a Store object vs dict-like object - if hasattr(self._store, 'supports_listing'): + if hasattr(self._store, "supports_listing"): # It's a Store object - use async interface await self._store.set(key, value) else: # It's a dict-like object (for tests) - use sync interface if hasattr(value, "to_bytes"): - self._store[key] = value.to_bytes() + cast(dict[str, Any], self._store)[key] = value.to_bytes() else: - self._store[key] = value + cast(dict[str, Any], self._store)[key] = value # Update cache with self._mutex: @@ -514,7 +519,7 @@ async def get( # For byte_range requests, don't use cache for now (could be optimized later) if byte_range is not None: - if callable(self._store.get): + if hasattr(self._store, "get"): # Check if it's an async Store.get method (takes prototype and byte_range) try: if prototype is None: @@ -528,7 +533,7 @@ async def get( # Fallback - get full value from mapping and slice try: if hasattr(self._store, "__getitem__"): - full_value = self._store[key] + full_value = cast(dict[str, Any], self._store)[key] if prototype is None: prototype = default_buffer_prototype() # This is a simplified implementation - a full implementation would handle byte ranges @@ -549,7 +554,7 @@ async def get( return prototype.buffer.from_bytes(value) except KeyError: # Cache miss - get from store - if callable(self._store.get): + if hasattr(self._store, "get"): # Try async Store.get method first try: if prototype is None: @@ -559,7 +564,7 @@ async def get( # Fallback for sync stores - use __getitem__ instead try: if hasattr(self._store, "__getitem__"): - value = self._store[key] + value = cast(dict[str, Any], self._store)[key] if prototype is None: prototype = default_buffer_prototype() result = prototype.buffer.from_bytes(value) @@ -571,7 +576,7 @@ async def get( # Fallback for sync stores/mappings try: if hasattr(self._store, "__getitem__"): - value = self._store[key] + value = cast(dict[str, Any], self._store)[key] if prototype is None: prototype = default_buffer_prototype() result = prototype.buffer.from_bytes(value) @@ -585,7 +590,7 @@ async def get( with self._mutex: self.misses += 1 if cache_key not in self._values_cache: - self._cache_value(cache_key, result.to_bytes()) + self._cache_value(cache_key, result) else: # Still count as a miss even if result is None with self._mutex: From aa9f12e380435fbc9ff2a7edc037e38bd9dd8a0a Mon Sep 17 00:00:00 2001 From: ruaridhg Date: Wed, 3 Sep 2025 16:29:17 +0100 Subject: [PATCH 23/39] Add tests to increase code coverage --- tests/test_store/test_cache.py | 286 +++++++++++++++++++++++++++++++-- 1 file changed, 274 insertions(+), 12 deletions(-) diff --git a/tests/test_store/test_cache.py b/tests/test_store/test_cache.py index 4086e6579b..803fd35a32 100644 --- a/tests/test_store/test_cache.py +++ b/tests/test_store/test_cache.py @@ -1,17 +1,70 @@ from __future__ import annotations +import warnings from collections import Counter +from pathlib import Path from typing import Any -import warnings import pytest +from zarr.abc.store import RangeByteRequest from zarr.core.buffer import cpu -from zarr.core.buffer.cpu import Buffer +from zarr.core.buffer.cpu import Buffer, buffer_prototype from zarr.storage import LRUStoreCache, MemoryStore +from zarr.storage._cache import _listdir_from_keys from zarr.testing.store import StoreTests +class CountingStore: + def __init__(self) -> None: + self.listdir_call_count = 0 + self._directories = { + "root": ["file1.txt", "file2.txt", "subdir"], + "root/subdir": ["file3.txt", "file4.txt", "nested"], + "root/subdir/nested": ["file5.txt"], + "nonexistent": [], + } + + def listdir(self, path: str) -> list[str]: + """Implement listdir for testing purposes.""" + self.listdir_call_count += 1 + return self._directories.get(path, []) + + +class DictLikeStore: + """A simple dict-like store for testing _listdir_from_keys.""" + + def __init__(self, keys: list[str]) -> None: + self._keys = keys + + def keys(self) -> list[str]: + return self._keys + + +class StoreWithoutKeys: + """A store without a keys method for testing _listdir_from_keys.""" + + +class StoreWithNonCallableKeys: + """A store with keys attribute that is not callable for testing _listdir_from_keys.""" + + keys = "not_callable" + + +class StoreWithNonStringKeys: + """A store with mixed key types for testing _listdir_from_keys type conversion.""" + + def keys(self) -> list[Any]: + return [b"root/file1.txt", 123, "root/file2.txt"] + + +class StoreWithMixedConvertibleKeys: + """A store with string keys for testing _listdir_from_keys.""" + + def keys(self) -> list[Any]: + return ["root/file1.txt", "root/file2.txt", "123/file3.txt"] + + class CountingDict(dict[Any, Any]): """A dictionary that counts operations for testing purposes.""" @@ -49,6 +102,12 @@ class TestLRUStoreCache(StoreTests[LRUStoreCache, Buffer]): # type: ignore[misc store_cls = LRUStoreCache buffer_cls = cpu.Buffer CountingClass = CountingDict + CountingClassStore = CountingStore + DictLikeClass = DictLikeStore + StoreWithoutKeysClass = StoreWithoutKeys + StoreWithNonCallableKeysClass = StoreWithNonCallableKeys + StoreWithNonStringKeysClass = StoreWithNonStringKeys + StoreWithMixedConvertibleKeysClass = StoreWithMixedConvertibleKeys LRUStoreClass = LRUStoreCache root = "" @@ -128,6 +187,7 @@ async def test_cache_values_no_max_size(self) -> None: # test set(), get() from zarr.core.buffer.cpu import Buffer + await cache.set(foo_key, Buffer.from_bytes(b"zzz")) assert 1 == store.counter["__getitem__", foo_key] assert 2 == store.counter["__setitem__", foo_key] @@ -259,6 +319,7 @@ async def test_cache_keys(self) -> None: # cache should be cleared if store is modified - crude but simple for now from zarr.core.buffer.cpu import Buffer + await cache.set(baz_key, Buffer.from_bytes(b"zzz")) keys = sorted(cache.keys()) assert keys == [bar_key, baz_key, foo_key] @@ -291,7 +352,7 @@ async def test_cache_keys(self) -> None: assert 3 == store.counter["__contains__", foo_key] assert keys == sorted(store) assert 1 == store.counter["__iter__"] - + async def test_cache_value_too_large_warning(self) -> None: """Test that a warning is emitted when a value is too large to cache.""" # setup store with small cache @@ -299,21 +360,23 @@ async def test_cache_value_too_large_warning(self) -> None: foo_key = self.root + "foo" large_value = b"x" * 1000 # 1000 bytes small_cache_size = 500 # 500 bytes max cache - + store[foo_key] = large_value cache = self.LRUStoreClass(store, max_size=small_cache_size) - + # Test that warning is emitted when trying to cache a value that's too large # This should trigger the warning since 1000 bytes > 500 bytes cache limit - with pytest.warns(UserWarning, match=r"Value for key.*exceeds cache max_size.*and will not be cached"): + with pytest.warns( + UserWarning, match=r"Value for key.*exceeds cache max_size.*and will not be cached" + ): result = await cache.get(foo_key) assert result is not None assert result.to_bytes() == large_value - + # Verify the value was not actually cached (cache miss on second access) assert cache.hits == 0 # No hits yet assert cache.misses == 1 # One miss from the first access - + # Second access should also be a miss since value wasn't cached # And it will also emit a warning, so we need to catch that too with warnings.catch_warnings(): @@ -323,15 +386,214 @@ async def test_cache_value_too_large_warning(self) -> None: assert result2.to_bytes() == large_value assert cache.hits == 0 # Still no hits assert cache.misses == 2 # Two misses total - + # Verify the warning message contains expected information with warnings.catch_warnings(record=True) as w: warnings.simplefilter("always") await cache.get(foo_key) # Trigger warning again - + assert len(w) == 1 warning_message = str(w[0].message) assert f"Value for key '{foo_key}'" in warning_message assert "1,000 bytes" in warning_message # Check formatted number - assert "500 bytes" in warning_message # Check cache size - assert "Consider increasing max_size" in warning_message \ No newline at end of file + assert "500 bytes" in warning_message # Check cache size + assert "Consider increasing max_size" in warning_message + + async def test_get_partial_values(self) -> None: + """Test get_partial_values method.""" + + # setup store + store = MemoryStore() + foo_key = "foo" + bar_key = "bar" + foo_data = b"hello world" + bar_data = b"goodbye world" + + await store.set(foo_key, Buffer.from_bytes(foo_data)) + await store.set(bar_key, Buffer.from_bytes(bar_data)) + + cache = self.LRUStoreClass(store, max_size=1024 * 1024) + + # Test getting partial values with byte ranges + key_ranges = [ + (foo_key, RangeByteRequest(start=0, end=5)), # "hello" + (bar_key, RangeByteRequest(start=8, end=13)), # "world" + (foo_key, None), # full value + ] + + results = await cache.get_partial_values(buffer_prototype, key_ranges) + + assert len(results) == 3 + assert results[0] is not None + assert results[0].to_bytes() == b"hello" + assert results[1] is not None + assert results[1].to_bytes() == b"world" + assert results[2] is not None + assert results[2].to_bytes() == foo_data + + # Test with non-existent key + key_ranges_with_missing = [ + (foo_key, RangeByteRequest(start=0, end=5)), + ("missing_key", None), + ] + + results = await cache.get_partial_values(buffer_prototype, key_ranges_with_missing) + assert len(results) == 2 + assert results[0] is not None + assert results[0].to_bytes() == b"hello" + assert results[1] is None + + async def test_set_partial_values(self) -> None: + """Test set_partial_values method.""" + # setup store + store = MemoryStore() + cache = self.LRUStoreClass(store, max_size=1024 * 1024) + + key = "test_key" + original_data = b"hello world 123" + + # Set initial data + await cache.set(key, Buffer.from_bytes(original_data)) + + # Test partial value setting + partial_updates = [ + (key, 6, b"WORLD"), # Replace "world" with "WORLD" + (key, 12, b"456"), # Replace "123" with "456" + ] + + # Since MemoryStore doesn't implement set_partial_values, + # it should raise NotImplementedError + with pytest.raises(NotImplementedError): + await cache.set_partial_values(partial_updates) + + # The original data should still be in cache since the operation failed + result = await cache.get(key) + assert result is not None + assert result.to_bytes() == original_data + + # Since the operation failed, there should be at least one cache hit + # (from the initial set and then the get) + assert cache.hits >= 1 + + async def test_listdir(self) -> None: + """Test listdir method with caching.""" + store = self.CountingClassStore() + cache = self.LRUStoreClass(store, max_size=1024 * 1024) + + # Test listdir on root directory + root_listing = cache.listdir(Path("root")) + expected_root = ["file1.txt", "file2.txt", "subdir"] + assert sorted(root_listing) == sorted(expected_root) + assert store.listdir_call_count == 1 + + # Second call should be cached (no additional call to underlying store) + root_listing2 = cache.listdir(Path("root")) + assert sorted(root_listing2) == sorted(expected_root) + assert store.listdir_call_count == 1 # Still 1, cached + + # Test listdir on subdirectory + subdir_listing = cache.listdir(Path("root/subdir")) + expected_subdir = ["file3.txt", "file4.txt", "nested"] + assert sorted(subdir_listing) == sorted(expected_subdir) + assert store.listdir_call_count == 2 # New call + + # Test cached subdirectory listing + subdir_listing2 = cache.listdir(Path("root/subdir")) + assert sorted(subdir_listing2) == sorted(expected_subdir) + assert store.listdir_call_count == 2 # Still cached + + # Test listdir on nested directory + nested_listing = cache.listdir(Path("root/subdir/nested")) + expected_nested = ["file5.txt"] + assert sorted(nested_listing) == sorted(expected_nested) + assert store.listdir_call_count == 3 + + # Test listdir on non-existent directory + empty_listing = cache.listdir(Path("nonexistent")) + assert empty_listing == [] + assert store.listdir_call_count == 4 + + # Test cache invalidation by manually clearing cache + cache.invalidate_keys() + + # Cache should be invalidated, so this should make a new call + root_listing3 = cache.listdir(Path("root")) + assert sorted(root_listing3) == sorted(expected_root) + assert store.listdir_call_count == 5 # New call due to invalidation + + def test_listdir_from_keys(self) -> None: + """Test the _listdir_from_keys function with various scenarios.""" + + # Test basic directory structure + keys = [ + "root/file1.txt", + "root/file2.txt", + "root/subdir/file3.txt", + "root/subdir/nested/file4.txt", + "other/file5.txt", + ] + store = self.DictLikeClass(keys) + + # Test listing root directory + result = _listdir_from_keys(store, "root/") + expected = ["file1.txt", "file2.txt", "subdir"] + assert sorted(result) == sorted(expected) + + # Test listing subdirectory + result = _listdir_from_keys(store, "root/subdir/") + expected = ["file3.txt", "nested"] + assert sorted(result) == sorted(expected) + + # Test listing nested directory + result = _listdir_from_keys(store, "root/subdir/nested/") + expected = ["file4.txt"] + assert sorted(result) == sorted(expected) + + # Test listing non-existent directory + result = _listdir_from_keys(store, "nonexistent/") + assert result == [] + + # Test with empty path (should return top-level items) + result = _listdir_from_keys(store, "") + expected = ["root", "other"] + assert sorted(result) == sorted(expected) + + # Test with path that matches a file exactly (should return empty) + result = _listdir_from_keys(store, "root/file1.txt") + assert result == [] + + # Test with store that has no keys method + store_no_keys = self.StoreWithoutKeysClass() + result = _listdir_from_keys(store_no_keys, "root/") + assert result == [] + + # Test with store that has keys but it's not callable + store_non_callable = self.StoreWithNonCallableKeysClass() + result = _listdir_from_keys(store_non_callable, "root/") + assert result == [] + + # Test edge case: keys that don't start with path + keys_no_match = ["different/file1.txt", "another/file2.txt"] + store_no_match = self.DictLikeClass(keys_no_match) + result = _listdir_from_keys(store_no_match, "root/") + assert result == [] + + # Test edge case: path equals key length (should be excluded) + keys_equal_length = ["root/", "root/file.txt"] + store_equal = self.DictLikeClass(keys_equal_length) + result = _listdir_from_keys(store_equal, "root/") + expected = ["file.txt"] + assert result == expected + + # Test with non-string keys (should be converted to strings) + store_mixed = self.StoreWithNonStringKeysClass() + result = _listdir_from_keys(store_mixed, "root/") + # Should handle conversion to strings - only the actual string key will match + expected = ["file2.txt"] # Only the string key "root/file2.txt" matches + assert sorted(result) == sorted(expected) + + # Test with proper string keys to ensure bytes and int conversions don't match + store_mixed_proper = self.StoreWithMixedConvertibleKeysClass() + result = _listdir_from_keys(store_mixed_proper, "root/") + expected = ["file1.txt", "file2.txt"] + assert sorted(result) == sorted(expected) From b7f445835f9223b4aaa6208e7514a4f1842bb96b Mon Sep 17 00:00:00 2001 From: ruaridhg Date: Wed, 3 Sep 2025 17:04:34 +0100 Subject: [PATCH 24/39] Add methods for consistency with other stores --- src/zarr/storage/_cache.py | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/zarr/storage/_cache.py b/src/zarr/storage/_cache.py index ed3c89a74e..82df848e6d 100644 --- a/src/zarr/storage/_cache.py +++ b/src/zarr/storage/_cache.py @@ -442,6 +442,12 @@ def invalidate_values(self) -> None: def __eq__(self, value: object) -> bool: return type(self) is type(value) and self._store.__eq__(value._store) # type: ignore[attr-defined] + def __str__(self) -> str: + return f"cache://{self._store}" + + def __repr__(self) -> str: + return f"LRUStoreCache({self._store!r}, max_size={self._max_size})" + async def delete(self, key: str) -> None: """ Remove a key from the store. @@ -486,14 +492,14 @@ async def exists(self, key: str) -> bool: # Delegate to the underlying store return await self._store.exists(key) - async def _set(self, key: str, value: Buffer, exclusive: bool = False) -> None: + async def _set(self, key: str, value: Buffer, exclusive: bool = False, byte_range: tuple[int, int] | None = None) -> None: # Check if store is writable self._check_writable() # Check if it's a Store object vs dict-like object if hasattr(self._store, "supports_listing"): # It's a Store object - use async interface - await self._store.set(key, value) + await self._store.set(key, value, byte_range=byte_range) else: # It's a dict-like object (for tests) - use sync interface if hasattr(value, "to_bytes"): @@ -651,9 +657,9 @@ async def list_prefix(self, prefix: str) -> AsyncIterator[str]: if key.startswith(prefix): yield key - async def set(self, key: str, value: Buffer) -> None: + async def set(self, key: str, value: Buffer, byte_range: tuple[int, int] | None = None) -> None: # docstring inherited - return await self._set(key, value) + return await self._set(key, value, byte_range=byte_range) async def set_partial_values( self, key_start_values: Iterable[tuple[str, int, bytes | bytearray | memoryview]] From fde1ff7256aec2fd9c7532b32b0c122fc10d0e86 Mon Sep 17 00:00:00 2001 From: ruaridhg Date: Wed, 3 Sep 2025 17:24:34 +0100 Subject: [PATCH 25/39] Add in test for else statement in listdir --- src/zarr/storage/_cache.py | 12 ++++++++++-- tests/test_store/test_cache.py | 11 +++++++++++ 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/src/zarr/storage/_cache.py b/src/zarr/storage/_cache.py index 82df848e6d..f550bcef57 100644 --- a/src/zarr/storage/_cache.py +++ b/src/zarr/storage/_cache.py @@ -55,7 +55,9 @@ def listdir(store: Store, path: Path | None = None) -> list[str]: "may want to inherit from `Store`.", stacklevel=2, ) - return _listdir_from_keys(store, path_str) + # _listdir_from_keys expects a trailing slash for non-empty paths + listdir_path = path_str + "/" if path_str else path_str + return _listdir_from_keys(store, listdir_path) class LRUStoreCache(Store): @@ -492,7 +494,13 @@ async def exists(self, key: str) -> bool: # Delegate to the underlying store return await self._store.exists(key) - async def _set(self, key: str, value: Buffer, exclusive: bool = False, byte_range: tuple[int, int] | None = None) -> None: + async def _set( + self, + key: str, + value: Buffer, + exclusive: bool = False, + byte_range: tuple[int, int] | None = None, + ) -> None: # Check if store is writable self._check_writable() diff --git a/tests/test_store/test_cache.py b/tests/test_store/test_cache.py index 803fd35a32..e353c18ff2 100644 --- a/tests/test_store/test_cache.py +++ b/tests/test_store/test_cache.py @@ -521,6 +521,17 @@ async def test_listdir(self) -> None: assert sorted(root_listing3) == sorted(expected_root) assert store.listdir_call_count == 5 # New call due to invalidation + # Test the else branch - store without listdir method + keys = ["root/file1.txt", "root/file2.txt", "root/subdir/file3.txt", "other/file4.txt"] + dict_store = self.DictLikeClass(keys) + cache_dict = LRUStoreCache(dict_store, max_size=100) + + # This should trigger the else branch and call _listdir_from_keys + with pytest.warns(UserWarning, match="Store.*has no.*listdir.*method"): + result = cache_dict.listdir(Path("root")) + expected = ["file1.txt", "file2.txt", "subdir"] + assert sorted(result) == sorted(expected) + def test_listdir_from_keys(self) -> None: """Test the _listdir_from_keys function with various scenarios.""" From 2a2692f9c15118986878727e5e75795a0b3db412 Mon Sep 17 00:00:00 2001 From: ruaridhg Date: Thu, 4 Sep 2025 12:23:32 +0100 Subject: [PATCH 26/39] Modify listdir method for LRUStoreCache --- src/zarr/storage/_cache.py | 40 +++++++++++++++++++++------------- tests/test_store/test_cache.py | 1 + 2 files changed, 26 insertions(+), 15 deletions(-) diff --git a/src/zarr/storage/_cache.py b/src/zarr/storage/_cache.py index f550bcef57..bde7260a3e 100644 --- a/src/zarr/storage/_cache.py +++ b/src/zarr/storage/_cache.py @@ -44,20 +44,30 @@ def listdir(store: Store, path: Path | None = None) -> list[str]: `MutableMapping` interface. """ path_str = normalize_path(path) - # Check if it's a Store object vs dict-like object - if hasattr(store, "listdir"): - # pass through - return cast(list[str], store.listdir(path_str)) - else: - # slow version, iterate through all keys - warnings.warn( - f"Store {store} has no `listdir` method. From zarr 2.9 onwards " - "may want to inherit from `Store`.", - stacklevel=2, - ) - # _listdir_from_keys expects a trailing slash for non-empty paths - listdir_path = path_str + "/" if path_str else path_str - return _listdir_from_keys(store, listdir_path) + + try: + # Check if it's a Store object that supports listing + if store.supports_listing: + return cast(list[str], store.listdir(path_str)) # type: ignore[attr-defined] + except AttributeError: + pass + + try: + # Check if it has a listdir method directly (for test stores and legacy stores) + if callable(store.listdir): # type: ignore[attr-defined] + return cast(list[str], store.listdir(path_str)) # type: ignore[attr-defined] + except AttributeError: + pass + + # slow version, iterate through all keys + warnings.warn( + f"Store {store} has no `listdir` method. From zarr 2.9 onwards " + "may want to inherit from `Store`.", + stacklevel=2, + ) + # _listdir_from_keys expects a trailing slash for non-empty paths + listdir_path = path_str + "/" if path_str else path_str + return _listdir_from_keys(store, listdir_path) class LRUStoreCache(Store): @@ -507,7 +517,7 @@ async def _set( # Check if it's a Store object vs dict-like object if hasattr(self._store, "supports_listing"): # It's a Store object - use async interface - await self._store.set(key, value, byte_range=byte_range) + await self._store.set(key, value) else: # It's a dict-like object (for tests) - use sync interface if hasattr(value, "to_bytes"): diff --git a/tests/test_store/test_cache.py b/tests/test_store/test_cache.py index e353c18ff2..a20d336262 100644 --- a/tests/test_store/test_cache.py +++ b/tests/test_store/test_cache.py @@ -18,6 +18,7 @@ class CountingStore: def __init__(self) -> None: self.listdir_call_count = 0 + self.supports_listing = True # Add this line self._directories = { "root": ["file1.txt", "file2.txt", "subdir"], "root/subdir": ["file3.txt", "file4.txt", "nested"], From 7e5b83d9e5d3536aa7649022c63e156df70f9790 Mon Sep 17 00:00:00 2001 From: ruaridhg <32329546+ruaridhg@users.noreply.github.com> Date: Thu, 4 Sep 2025 16:38:30 +0100 Subject: [PATCH 27/39] Apply suggestions from code review Co-authored-by: David Stansby --- src/zarr/storage/_cache.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/zarr/storage/_cache.py b/src/zarr/storage/_cache.py index bde7260a3e..a10180d160 100644 --- a/src/zarr/storage/_cache.py +++ b/src/zarr/storage/_cache.py @@ -172,7 +172,7 @@ def __init__(self, store: Store, *, max_size: int) -> None: @classmethod async def open(cls, store: Store, *, max_size: int, **kwargs: Any) -> "LRUStoreCache": """ - Create and open the LRU cache store. + Create and open a new LRU cache store. Parameters ---------- From 5915d846fbb210dc79106bddc04f6700e1227b47 Mon Sep 17 00:00:00 2001 From: ruaridhg Date: Fri, 5 Sep 2025 08:38:01 +0100 Subject: [PATCH 28/39] Matching underline lengths for titles --- docs/user-guide/lrustorecache.rst | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/user-guide/lrustorecache.rst b/docs/user-guide/lrustorecache.rst index 588de87866..6e8f66d612 100644 --- a/docs/user-guide/lrustorecache.rst +++ b/docs/user-guide/lrustorecache.rst @@ -43,7 +43,7 @@ The ``max_size`` parameter controls the maximum memory usage of the cache in byt ``None`` for unlimited cache size (use with caution). Performance Benefits -------------------- +-------------------- The LRUStoreCache provides significant performance improvements for repeated data access: @@ -93,7 +93,7 @@ The first access to any chunk will be slow (network retrieval), but subsequent a to the same chunk will be served from the local cache, providing dramatic speedup. Cache Configuration ------------------- +------------------- The LRUStoreCache can be configured with several parameters: @@ -113,7 +113,7 @@ The LRUStoreCache can be configured with several parameters: >>> cache = zarr.storage.LRUStoreCache(store, max_size=2**28, read_only=True) Cache Statistics ---------------- +---------------- The LRUStoreCache provides statistics to monitor cache performance: @@ -150,7 +150,7 @@ Best Practices 4. **Consider data locality**: Access data in chunks sequentially rather than jumping around randomly to maximize cache reuse Examples from Real Usage ------------------------ +------------------------ Here's a complete example demonstrating cache effectiveness: From 7c1ff7459427d583230409331adbb8a6fed269e1 Mon Sep 17 00:00:00 2001 From: ruaridhg Date: Fri, 5 Sep 2025 10:05:50 +0100 Subject: [PATCH 29/39] Address latest PR comments removing redundant functions and updating tests to match --- src/zarr/storage/_cache.py | 286 ++++++++++-------------------- tests/test_store/test_cache.py | 312 ++++++--------------------------- 2 files changed, 142 insertions(+), 456 deletions(-) diff --git a/src/zarr/storage/_cache.py b/src/zarr/storage/_cache.py index a10180d160..95c95faa10 100644 --- a/src/zarr/storage/_cache.py +++ b/src/zarr/storage/_cache.py @@ -1,7 +1,7 @@ import asyncio import warnings from collections import OrderedDict -from collections.abc import AsyncIterator, Iterable, Iterator +from collections.abc import AsyncIterator, Iterable from pathlib import Path from threading import Lock from typing import Any, cast @@ -12,62 +12,6 @@ ) from zarr.core.buffer import Buffer, BufferPrototype from zarr.core.buffer.core import default_buffer_prototype -from zarr.storage._utils import normalize_path - - -def _listdir_from_keys(store: Store, path: str) -> list[str]: - """ - Extract directory listing from store keys by filtering keys that start with the given path. - """ - children: set[str] = set() - # Handle both Store objects and dict-like objects - if hasattr(store, "keys") and callable(store.keys): - keys = [str(k) for k in store.keys()] # Ensure keys are strings # noqa: SIM118 - else: - # For stores that don't have keys method, we can't list them - return [] - - for key in keys: - if key.startswith(path) and len(key) > len(path): - suffix = key[len(path) :] - child = suffix.split("/")[0] - children.add(child) - return sorted(children) - - -def listdir(store: Store, path: Path | None = None) -> list[str]: - """ - Obtain a directory listing for the given path. - - If `store` provides a `listdir` - method, this will be called, otherwise will fall back to implementation via the - `MutableMapping` interface. - """ - path_str = normalize_path(path) - - try: - # Check if it's a Store object that supports listing - if store.supports_listing: - return cast(list[str], store.listdir(path_str)) # type: ignore[attr-defined] - except AttributeError: - pass - - try: - # Check if it has a listdir method directly (for test stores and legacy stores) - if callable(store.listdir): # type: ignore[attr-defined] - return cast(list[str], store.listdir(path_str)) # type: ignore[attr-defined] - except AttributeError: - pass - - # slow version, iterate through all keys - warnings.warn( - f"Store {store} has no `listdir` method. From zarr 2.9 onwards " - "may want to inherit from `Store`.", - stacklevel=2, - ) - # _listdir_from_keys expects a trailing slash for non-empty paths - listdir_path = path_str + "/" if path_str else path_str - return _listdir_from_keys(store, listdir_path) class LRUStoreCache(Store): @@ -136,12 +80,25 @@ class LRUStoreCache(Store): """ - supports_writes: bool = True - supports_deletes: bool = True - supports_partial_writes: bool = True - supports_listing: bool = True + @property + def supports_writes(self) -> bool: + """Whether the underlying store supports write operations.""" + return self._store.supports_writes + + @property + def supports_deletes(self) -> bool: + """Whether the underlying store supports delete operations.""" + return self._store.supports_deletes - root: Path + @property + def supports_partial_writes(self) -> bool: + """Whether the underlying store supports partial write operations.""" + return self._store.supports_partial_writes + + @property + def supports_listing(self) -> bool: + """Whether the underlying store supports listing operations.""" + return self._store.supports_listing def __init__(self, store: Store, *, max_size: int) -> None: if max_size <= 0: @@ -149,8 +106,6 @@ def __init__(self, store: Store, *, max_size: int) -> None: # Always inherit read_only state from the underlying store read_only = getattr(store, "read_only", False) - - # Call parent constructor with read_only parameter super().__init__(read_only=read_only) self._store = store @@ -170,7 +125,7 @@ def __init__(self, store: Store, *, max_size: int) -> None: self.root = Path("/") # Default root path @classmethod - async def open(cls, store: Store, *, max_size: int, **kwargs: Any) -> "LRUStoreCache": + async def open(cls, store: Store, *, max_size: int, read_only: bool = False) -> "LRUStoreCache": """ Create and open a new LRU cache store. @@ -180,20 +135,17 @@ async def open(cls, store: Store, *, max_size: int, **kwargs: Any) -> "LRUStoreC The underlying store to wrap with caching. max_size : int The maximum size that the cache may grow to, in number of bytes. - **kwargs : Any - Additional keyword arguments passed to the store constructor. Returns ------- LRUStoreCache The opened cache store instance. """ - # Handle read_only parameter if provided - if "read_only" in kwargs: - read_only = kwargs.pop("read_only") - store = store.with_read_only(read_only) - cache = cls(store, max_size=max_size, **kwargs) + cache = cls(store, max_size=max_size) + + if read_only: + cache._read_only = True await cache._open() return cache @@ -215,12 +167,6 @@ def with_read_only(self, read_only: bool = False) -> "LRUStoreCache": underlying_store = self._store.with_read_only(read_only) return LRUStoreCache(underlying_store, max_size=self._max_size) - def _normalize_key(self, key: str | Path) -> str: - """Convert key to string if it's a Path object, otherwise return as-is""" - if isinstance(key, Path): - return str(key) - return str(key) - def __getstate__( self, ) -> tuple[ @@ -284,29 +230,6 @@ def __setstate__( def __len__(self) -> int: return len(self._keys()) - def __iter__(self) -> Iterator[str]: - return self.keys() - - def __contains__(self, key: str | Path) -> bool: - with self._mutex: - if key not in self._contains_cache: - # Check if it's a Store object vs dict-like object - if hasattr(self._store, "supports_listing"): - # It's a Store object - use async interface - try: - result = asyncio.run(self._store.exists(str(key))) - except RuntimeError: - # Already in async context - raise NotImplementedError( - "Cannot use 'in' operator in async context. Use 'await store.exists(key)' instead." - ) from None - else: - # It's a dict-like object (for tests) - use sync interface - result = key in cast(dict[str, Any], self._store) - - self._contains_cache[key] = bool(result) - return bool(self._contains_cache[key]) - async def clear(self) -> None: """ Remove all keys from the store and clear the cache. @@ -314,77 +237,56 @@ async def clear(self) -> None: This operation clears both the underlying store and invalidates all cached data to maintain consistency. """ - # Check if store is writable - self._check_writable() await self._store.clear() self.invalidate() - def keys(self) -> Iterator[str]: - """ - Return an iterator over the keys in the store. - """ - with self._mutex: - return iter(self._keys()) - def _keys(self) -> list[str]: if self._keys_cache is None: - # Check if it's a Store object vs dict-like object - if hasattr(self._store, "supports_listing"): - # It's a Store object - if self._store.supports_listing: - try: + if self._store.supports_listing: + try: - async def collect_keys() -> list[str]: - return [str(key) async for key in self._store.list()] - - keys = asyncio.run(collect_keys()) - self._keys_cache = keys - except RuntimeError: - # Already in async context - raise NotImplementedError( - "Cannot list keys in async context - _keys() method needs to be async" - ) from None - else: - # Store doesn't support listing - self._keys_cache = [] - else: - # It's a dict-like object (for tests) - if hasattr(self._store, "keys") and callable(self._store.keys): - keys = [str(k) for k in self._store.keys()] # noqa: SIM118 + async def collect_keys() -> list[str]: + return [str(key) async for key in self._store.list()] + + keys = asyncio.run(collect_keys()) self._keys_cache = keys - else: - self._keys_cache = [] + except RuntimeError: + # Already in async context + raise NotImplementedError( + "Cannot list keys in async context - _keys() method needs to be async" + ) from None + else: + # Store doesn't support listing + self._keys_cache = [] + return self._keys_cache - def listdir(self, path: Path) -> list[str]: + async def getsize(self, key: str) -> int: """ - Return a list of directory contents for the given path with caching. + Get the size in bytes of the value stored at the given key. - This method provides a cached version of directory listings to improve - performance for repeated directory access operations. + This method first checks the cache for the value to avoid + unnecessary calls to the underlying store. """ + cache_key = key + + # Check cache first with self._mutex: - # Normalize path to string for consistent caching - path_key = self._normalize_key(path) - try: - return self._listdir_cache[path_key] - except KeyError: - listing = listdir(self._store, path) - self._listdir_cache[path_key] = listing - return listing + if cache_key in self._values_cache: + cached_value = self._values_cache[cache_key] + # Move to end to mark as recently used + self._values_cache.move_to_end(cache_key) + return len(cached_value) - async def getsize(self, key: str) -> int: - """ - Get the size in bytes of the value stored at the given key. - """ + # Not in cache, delegate to underlying store return await self._store.getsize(key) - def _pop_value(self) -> bytes: + def _pop_value(self) -> dict[str, bytes]: # remove the first value from the cache, as this will be the least recently # used value _, v = self._values_cache.popitem(last=False) - return cast(bytes, v) + return v def _accommodate_value(self, value_size: int) -> None: while self._current_size + value_size > self._max_size: @@ -405,7 +307,7 @@ def _cache_value(self, key: str, value: Buffer | bytes) -> None: # Check if value exceeds max size - if so, don't cache it if value_size <= self._max_size: self._accommodate_value(value_size) - cache_key = self._normalize_key(key) + cache_key = key self._values_cache[cache_key] = cache_value self._current_size += value_size else: @@ -420,10 +322,11 @@ def _cache_value(self, key: str, value: Buffer | bytes) -> None: def invalidate(self) -> None: """Completely clear the cache.""" + + self.invalidate_keys() with self._mutex: self._values_cache.clear() self._current_size = 0 - self._invalidate_keys_unsafe() def invalidate_keys(self) -> None: """Clear the keys cache and all related caches.""" @@ -432,19 +335,6 @@ def invalidate_keys(self) -> None: self._contains_cache.clear() self._listdir_cache.clear() - def _invalidate_keys_unsafe(self) -> None: - """Clear the keys cache without acquiring mutex (assumes mutex already held).""" - self._keys_cache = None - self._contains_cache.clear() - self._listdir_cache.clear() - - def _invalidate_value_unsafe(self, key: Any) -> None: - """Remove a value from the cache and update the current size.""" - cache_key = self._normalize_key(key) - if cache_key in self._values_cache: - value = self._values_cache.pop(cache_key) - self._current_size -= len(value) - def invalidate_values(self) -> None: """Clear only the values cache, keeping other caches intact.""" with self._mutex: @@ -476,32 +366,35 @@ async def delete(self, key: str) -> None: # Check if store is writable self._check_writable() - # Check if it's a Store object vs dict-like object - if hasattr(self._store, "supports_listing"): - # It's a Store object - check if it supports deletes - if self._store.supports_deletes: - await self._store.delete(key) - else: - raise NotImplementedError( - f"Store {type(self._store).__name__} does not support delete operations" - ) + if self._store.supports_deletes: + await self._store.delete(key) else: - # It's a dict-like object (for tests) - use sync interface - try: - del cast(dict[str, Any], self._store)[key] - except (TypeError, AttributeError): - raise NotImplementedError( - f"Store {type(self._store).__name__} does not support delete operations" - ) from None + raise NotImplementedError( + f"Store {type(self._store).__name__} does not support delete operations" + ) # Invalidate cache entries - with self._mutex: - self._invalidate_keys_unsafe() - cache_key = self._normalize_key(key) - self._invalidate_value_unsafe(cache_key) + self.invalidate_keys() + self.invalidate_values() async def exists(self, key: str) -> bool: - # Delegate to the underlying store + """ + Check if a key exists in the store. + + This method first checks the cache for the key to avoid + unnecessary calls to the underlying store. + """ + cache_key = key + + # Check cache first + with self._mutex: + if cache_key in self._values_cache: + # Key exists in cache, so it exists in store + # Move to end to mark as recently used + self._values_cache.move_to_end(cache_key) + return True + + # Not in cache, delegate to underlying store return await self._store.exists(key) async def _set( @@ -526,11 +419,10 @@ async def _set( cast(dict[str, Any], self._store)[key] = value # Update cache - with self._mutex: - self._invalidate_keys_unsafe() - cache_key = self._normalize_key(key) - self._invalidate_value_unsafe(cache_key) - self._cache_value(cache_key, value) + self.invalidate_keys() + self.invalidate_values() + cache_key = key + self._cache_value(cache_key, value) async def get( self, @@ -539,7 +431,7 @@ async def get( byte_range: ByteRequest | None = None, ) -> Buffer | None: # Use the cache for get operations - cache_key = self._normalize_key(key) + cache_key = key # For byte_range requests, don't use cache for now (could be optimized later) if byte_range is not None: @@ -692,7 +584,5 @@ async def set_partial_values( # Fallback - this is complex to implement properly, so just invalidate cache for key, _start, _value in key_start_values: # For now, just invalidate the cache for these keys - with self._mutex: - self._invalidate_keys_unsafe() - cache_key = self._normalize_key(key) - self._invalidate_value_unsafe(cache_key) + self.invalidate_keys() + self.invalidate_values() diff --git a/tests/test_store/test_cache.py b/tests/test_store/test_cache.py index a20d336262..a575395ee8 100644 --- a/tests/test_store/test_cache.py +++ b/tests/test_store/test_cache.py @@ -1,8 +1,8 @@ from __future__ import annotations +import contextlib import warnings from collections import Counter -from pathlib import Path from typing import Any import pytest @@ -11,61 +11,9 @@ from zarr.core.buffer import cpu from zarr.core.buffer.cpu import Buffer, buffer_prototype from zarr.storage import LRUStoreCache, MemoryStore -from zarr.storage._cache import _listdir_from_keys from zarr.testing.store import StoreTests -class CountingStore: - def __init__(self) -> None: - self.listdir_call_count = 0 - self.supports_listing = True # Add this line - self._directories = { - "root": ["file1.txt", "file2.txt", "subdir"], - "root/subdir": ["file3.txt", "file4.txt", "nested"], - "root/subdir/nested": ["file5.txt"], - "nonexistent": [], - } - - def listdir(self, path: str) -> list[str]: - """Implement listdir for testing purposes.""" - self.listdir_call_count += 1 - return self._directories.get(path, []) - - -class DictLikeStore: - """A simple dict-like store for testing _listdir_from_keys.""" - - def __init__(self, keys: list[str]) -> None: - self._keys = keys - - def keys(self) -> list[str]: - return self._keys - - -class StoreWithoutKeys: - """A store without a keys method for testing _listdir_from_keys.""" - - -class StoreWithNonCallableKeys: - """A store with keys attribute that is not callable for testing _listdir_from_keys.""" - - keys = "not_callable" - - -class StoreWithNonStringKeys: - """A store with mixed key types for testing _listdir_from_keys type conversion.""" - - def keys(self) -> list[Any]: - return [b"root/file1.txt", 123, "root/file2.txt"] - - -class StoreWithMixedConvertibleKeys: - """A store with string keys for testing _listdir_from_keys.""" - - def keys(self) -> list[Any]: - return ["root/file1.txt", "root/file2.txt", "123/file3.txt"] - - class CountingDict(dict[Any, Any]): """A dictionary that counts operations for testing purposes.""" @@ -73,6 +21,12 @@ def __init__(self) -> None: super().__init__() self.counter: Counter[tuple[str, Any] | str] = Counter() + # Add Store-like attributes that LRUStoreCache expects + self.supports_writes = True + self.supports_deletes = True + self.supports_partial_writes = False + self.supports_listing = True + def __getitem__(self, key: Any) -> Any: self.counter["__getitem__", key] += 1 return super().__getitem__(key) @@ -93,6 +47,53 @@ def keys(self) -> Any: self.counter["keys"] += 1 return super().keys() + def __delitem__(self, key: Any) -> None: + """Add delete support for testing.""" + self.counter["__delitem__", key] += 1 + return super().__delitem__(key) + + async def set(self, key: str, value: Any) -> None: + """Store-like set method for async interface.""" + self.counter["set", key] += 1 + # Convert Buffer to bytes if needed + if hasattr(value, "to_bytes"): + self[key] = value.to_bytes() + else: + self[key] = value + + async def get(self, key: str, prototype: Any = None) -> Any: + """Store-like get method for async interface.""" + self.counter["get", key] += 1 + try: + data = self[key] + # Return as Buffer if prototype provided + if prototype is not None and hasattr(prototype, "buffer"): + from zarr.core.buffer.cpu import Buffer + + return Buffer.from_bytes(data) + return data # noqa: TRY300 + except KeyError: + return None + + async def delete(self, key: str) -> None: + """Store-like delete method for async interface.""" + self.counter["delete", key] += 1 + with contextlib.suppress(KeyError): + del self[key] + + async def exists(self, key: str) -> bool: + """Store-like exists method for async interface.""" + self.counter["exists", key] += 1 + return key in self + + async def getsize(self, key: str) -> int: + """Store-like getsize method for async interface.""" + self.counter["getsize", key] += 1 + try: + return len(self[key]) + except KeyError: # noqa: TRY203 + raise + def skip_if_nested_chunks(**kwargs: Any) -> None: if kwargs.get("dimension_separator") == "/": @@ -103,12 +104,6 @@ class TestLRUStoreCache(StoreTests[LRUStoreCache, Buffer]): # type: ignore[misc store_cls = LRUStoreCache buffer_cls = cpu.Buffer CountingClass = CountingDict - CountingClassStore = CountingStore - DictLikeClass = DictLikeStore - StoreWithoutKeysClass = StoreWithoutKeys - StoreWithNonCallableKeysClass = StoreWithNonCallableKeys - StoreWithNonStringKeysClass = StoreWithNonStringKeys - StoreWithMixedConvertibleKeysClass = StoreWithMixedConvertibleKeys LRUStoreClass = LRUStoreCache root = "" @@ -289,71 +284,6 @@ async def test_cache_values_with_max_size(self) -> None: assert 2 == cache.hits assert 4 == cache.misses - async def test_cache_keys(self) -> None: - # setup - store = self.CountingClass() - foo_key = self.root + "foo" - bar_key = self.root + "bar" - baz_key = self.root + "baz" - store[foo_key] = b"xxx" - store[bar_key] = b"yyy" - assert 0 == store.counter["__contains__", foo_key] - assert 0 == store.counter["__iter__"] - assert 0 == store.counter["keys"] - cache = self.LRUStoreClass(store, max_size=1024 * 1024) - - # keys should be cached on first call - keys = sorted(cache.keys()) - assert keys == [bar_key, foo_key] - assert 1 == store.counter["keys"] - # keys should now be cached - assert keys == sorted(cache.keys()) - assert 1 == store.counter["keys"] - assert foo_key in cache - assert 1 == store.counter["__contains__", foo_key] - # the next check for `foo_key` is cached - assert foo_key in cache - assert 1 == store.counter["__contains__", foo_key] - assert keys == sorted(cache) - assert 0 == store.counter["__iter__"] - assert 1 == store.counter["keys"] - - # cache should be cleared if store is modified - crude but simple for now - from zarr.core.buffer.cpu import Buffer - - await cache.set(baz_key, Buffer.from_bytes(b"zzz")) - keys = sorted(cache.keys()) - assert keys == [bar_key, baz_key, foo_key] - assert 2 == store.counter["keys"] - # keys should now be cached - assert keys == sorted(cache.keys()) - assert 2 == store.counter["keys"] - - # manually invalidate keys - cache.invalidate_keys() - keys = sorted(cache.keys()) - assert keys == [bar_key, baz_key, foo_key] - assert 3 == store.counter["keys"] - assert 1 == store.counter["__contains__", foo_key] - assert 0 == store.counter["__iter__"] - cache.invalidate_keys() - keys = sorted(cache) - assert keys == [bar_key, baz_key, foo_key] - assert 4 == store.counter["keys"] - assert 1 == store.counter["__contains__", foo_key] - assert 0 == store.counter["__iter__"] - cache.invalidate_keys() - assert foo_key in cache - assert 4 == store.counter["keys"] - assert 2 == store.counter["__contains__", foo_key] - assert 0 == store.counter["__iter__"] - - # check these would get counted if called directly - assert foo_key in store - assert 3 == store.counter["__contains__", foo_key] - assert keys == sorted(store) - assert 1 == store.counter["__iter__"] - async def test_cache_value_too_large_warning(self) -> None: """Test that a warning is emitted when a value is too large to cache.""" # setup store with small cache @@ -475,137 +405,3 @@ async def test_set_partial_values(self) -> None: # Since the operation failed, there should be at least one cache hit # (from the initial set and then the get) assert cache.hits >= 1 - - async def test_listdir(self) -> None: - """Test listdir method with caching.""" - store = self.CountingClassStore() - cache = self.LRUStoreClass(store, max_size=1024 * 1024) - - # Test listdir on root directory - root_listing = cache.listdir(Path("root")) - expected_root = ["file1.txt", "file2.txt", "subdir"] - assert sorted(root_listing) == sorted(expected_root) - assert store.listdir_call_count == 1 - - # Second call should be cached (no additional call to underlying store) - root_listing2 = cache.listdir(Path("root")) - assert sorted(root_listing2) == sorted(expected_root) - assert store.listdir_call_count == 1 # Still 1, cached - - # Test listdir on subdirectory - subdir_listing = cache.listdir(Path("root/subdir")) - expected_subdir = ["file3.txt", "file4.txt", "nested"] - assert sorted(subdir_listing) == sorted(expected_subdir) - assert store.listdir_call_count == 2 # New call - - # Test cached subdirectory listing - subdir_listing2 = cache.listdir(Path("root/subdir")) - assert sorted(subdir_listing2) == sorted(expected_subdir) - assert store.listdir_call_count == 2 # Still cached - - # Test listdir on nested directory - nested_listing = cache.listdir(Path("root/subdir/nested")) - expected_nested = ["file5.txt"] - assert sorted(nested_listing) == sorted(expected_nested) - assert store.listdir_call_count == 3 - - # Test listdir on non-existent directory - empty_listing = cache.listdir(Path("nonexistent")) - assert empty_listing == [] - assert store.listdir_call_count == 4 - - # Test cache invalidation by manually clearing cache - cache.invalidate_keys() - - # Cache should be invalidated, so this should make a new call - root_listing3 = cache.listdir(Path("root")) - assert sorted(root_listing3) == sorted(expected_root) - assert store.listdir_call_count == 5 # New call due to invalidation - - # Test the else branch - store without listdir method - keys = ["root/file1.txt", "root/file2.txt", "root/subdir/file3.txt", "other/file4.txt"] - dict_store = self.DictLikeClass(keys) - cache_dict = LRUStoreCache(dict_store, max_size=100) - - # This should trigger the else branch and call _listdir_from_keys - with pytest.warns(UserWarning, match="Store.*has no.*listdir.*method"): - result = cache_dict.listdir(Path("root")) - expected = ["file1.txt", "file2.txt", "subdir"] - assert sorted(result) == sorted(expected) - - def test_listdir_from_keys(self) -> None: - """Test the _listdir_from_keys function with various scenarios.""" - - # Test basic directory structure - keys = [ - "root/file1.txt", - "root/file2.txt", - "root/subdir/file3.txt", - "root/subdir/nested/file4.txt", - "other/file5.txt", - ] - store = self.DictLikeClass(keys) - - # Test listing root directory - result = _listdir_from_keys(store, "root/") - expected = ["file1.txt", "file2.txt", "subdir"] - assert sorted(result) == sorted(expected) - - # Test listing subdirectory - result = _listdir_from_keys(store, "root/subdir/") - expected = ["file3.txt", "nested"] - assert sorted(result) == sorted(expected) - - # Test listing nested directory - result = _listdir_from_keys(store, "root/subdir/nested/") - expected = ["file4.txt"] - assert sorted(result) == sorted(expected) - - # Test listing non-existent directory - result = _listdir_from_keys(store, "nonexistent/") - assert result == [] - - # Test with empty path (should return top-level items) - result = _listdir_from_keys(store, "") - expected = ["root", "other"] - assert sorted(result) == sorted(expected) - - # Test with path that matches a file exactly (should return empty) - result = _listdir_from_keys(store, "root/file1.txt") - assert result == [] - - # Test with store that has no keys method - store_no_keys = self.StoreWithoutKeysClass() - result = _listdir_from_keys(store_no_keys, "root/") - assert result == [] - - # Test with store that has keys but it's not callable - store_non_callable = self.StoreWithNonCallableKeysClass() - result = _listdir_from_keys(store_non_callable, "root/") - assert result == [] - - # Test edge case: keys that don't start with path - keys_no_match = ["different/file1.txt", "another/file2.txt"] - store_no_match = self.DictLikeClass(keys_no_match) - result = _listdir_from_keys(store_no_match, "root/") - assert result == [] - - # Test edge case: path equals key length (should be excluded) - keys_equal_length = ["root/", "root/file.txt"] - store_equal = self.DictLikeClass(keys_equal_length) - result = _listdir_from_keys(store_equal, "root/") - expected = ["file.txt"] - assert result == expected - - # Test with non-string keys (should be converted to strings) - store_mixed = self.StoreWithNonStringKeysClass() - result = _listdir_from_keys(store_mixed, "root/") - # Should handle conversion to strings - only the actual string key will match - expected = ["file2.txt"] # Only the string key "root/file2.txt" matches - assert sorted(result) == sorted(expected) - - # Test with proper string keys to ensure bytes and int conversions don't match - store_mixed_proper = self.StoreWithMixedConvertibleKeysClass() - result = _listdir_from_keys(store_mixed_proper, "root/") - expected = ["file1.txt", "file2.txt"] - assert sorted(result) == sorted(expected) From 8aaef7e009184a96e43f219af5cce3f3b8f12cf0 Mon Sep 17 00:00:00 2001 From: ruaridhg Date: Fri, 5 Sep 2025 10:27:32 +0100 Subject: [PATCH 30/39] Remove hasattr and dict-like object references --- src/zarr/storage/_cache.py | 85 ++++++++++------------------------ tests/test_store/test_cache.py | 2 + 2 files changed, 26 insertions(+), 61 deletions(-) diff --git a/src/zarr/storage/_cache.py b/src/zarr/storage/_cache.py index 95c95faa10..507e14ec05 100644 --- a/src/zarr/storage/_cache.py +++ b/src/zarr/storage/_cache.py @@ -105,7 +105,7 @@ def __init__(self, store: Store, *, max_size: int) -> None: raise ValueError("max_size must be a positive integer (bytes)") # Always inherit read_only state from the underlying store - read_only = getattr(store, "read_only", False) + read_only = store.read_only super().__init__(read_only=read_only) self._store = store @@ -407,16 +407,7 @@ async def _set( # Check if store is writable self._check_writable() - # Check if it's a Store object vs dict-like object - if hasattr(self._store, "supports_listing"): - # It's a Store object - use async interface - await self._store.set(key, value) - else: - # It's a dict-like object (for tests) - use sync interface - if hasattr(value, "to_bytes"): - cast(dict[str, Any], self._store)[key] = value.to_bytes() - else: - cast(dict[str, Any], self._store)[key] = value + await self._store.set(key, value) # Update cache self.invalidate_keys() @@ -435,29 +426,14 @@ async def get( # For byte_range requests, don't use cache for now (could be optimized later) if byte_range is not None: - if hasattr(self._store, "get"): - # Check if it's an async Store.get method (takes prototype and byte_range) - try: - if prototype is None: - prototype = default_buffer_prototype() - return await self._store.get(key, prototype, byte_range) - except TypeError: - # Fallback to sync get from mapping - get full value and slice later - # For now, just return None for byte range requests on sync stores - return None - else: - # Fallback - get full value from mapping and slice - try: - if hasattr(self._store, "__getitem__"): - full_value = cast(dict[str, Any], self._store)[key] - if prototype is None: - prototype = default_buffer_prototype() - # This is a simplified implementation - a full implementation would handle byte ranges - return prototype.buffer.from_bytes(full_value) - else: - return None - except KeyError: - return None + try: + if prototype is None: + prototype = default_buffer_prototype() + return await self._store.get(key, prototype, byte_range) + except TypeError: + # Fallback to sync get from mapping - get full value and slice later + # For now, just return None for byte range requests on sync stores + return None try: # Try cache first @@ -470,26 +446,13 @@ async def get( return prototype.buffer.from_bytes(value) except KeyError: # Cache miss - get from store - if hasattr(self._store, "get"): - # Try async Store.get method first - try: - if prototype is None: - prototype = default_buffer_prototype() - result = await self._store.get(key, prototype, byte_range) - except TypeError: - # Fallback for sync stores - use __getitem__ instead - try: - if hasattr(self._store, "__getitem__"): - value = cast(dict[str, Any], self._store)[key] - if prototype is None: - prototype = default_buffer_prototype() - result = prototype.buffer.from_bytes(value) - else: - result = None - except KeyError: - result = None - else: - # Fallback for sync stores/mappings + + try: + if prototype is None: + prototype = default_buffer_prototype() + result = await self._store.get(key, prototype, byte_range) + except TypeError: + # Fallback for sync stores - use __getitem__ instead try: if hasattr(self._store, "__getitem__"): value = cast(dict[str, Any], self._store)[key] @@ -520,7 +483,7 @@ async def get_partial_values( key_ranges: Iterable[tuple[str, ByteRequest | None]], ) -> list[Buffer | None]: # Delegate to the underlying store - if hasattr(self._store, "get_partial_values"): + if self._store.get_partial_values: return await self._store.get_partial_values(prototype, key_ranges) else: # Fallback - get each value individually @@ -532,18 +495,18 @@ async def get_partial_values( async def list(self) -> AsyncIterator[str]: # Delegate to the underlying store - if hasattr(self._store, "list"): + if self._store.list: async for key in self._store.list(): yield key else: # Fallback for stores that don't have async list - if hasattr(self._store, "keys") and callable(self._store.keys): + if callable(self._store.keys): for key in list(self._store.keys()): yield key async def list_dir(self, prefix: str) -> AsyncIterator[str]: # Delegate to the underlying store - if hasattr(self._store, "list_dir"): + if self._store.list_dir: async for key in self._store.list_dir(prefix): yield key else: @@ -557,12 +520,12 @@ async def list_dir(self, prefix: str) -> AsyncIterator[str]: async def list_prefix(self, prefix: str) -> AsyncIterator[str]: # Delegate to the underlying store - if hasattr(self._store, "list_prefix"): + if self._store.list_prefix: async for key in self._store.list_prefix(prefix): yield key else: # Fallback - filter all keys by prefix - if hasattr(self._store, "keys") and callable(self._store.keys): + if callable(self._store.keys): for key in list(self._store.keys()): if key.startswith(prefix): yield key @@ -578,7 +541,7 @@ async def set_partial_values( self._check_writable() # Delegate to the underlying store - if hasattr(self._store, "set_partial_values"): + if self._store.set_partial_values: await self._store.set_partial_values(key_start_values) else: # Fallback - this is complex to implement properly, so just invalidate cache diff --git a/tests/test_store/test_cache.py b/tests/test_store/test_cache.py index a575395ee8..a4080e8c04 100644 --- a/tests/test_store/test_cache.py +++ b/tests/test_store/test_cache.py @@ -20,6 +20,8 @@ class CountingDict(dict[Any, Any]): def __init__(self) -> None: super().__init__() self.counter: Counter[tuple[str, Any] | str] = Counter() + + self.read_only = False # Add Store-like attributes that LRUStoreCache expects self.supports_writes = True From 80fa2b2880f2f79576d4d9425446619a1234297a Mon Sep 17 00:00:00 2001 From: ruaridhg Date: Fri, 5 Sep 2025 14:59:52 +0100 Subject: [PATCH 31/39] Fix remaining mypy issues --- src/zarr/storage/_cache.py | 39 ++++++++++---------------------------- 1 file changed, 10 insertions(+), 29 deletions(-) diff --git a/src/zarr/storage/_cache.py b/src/zarr/storage/_cache.py index 507e14ec05..0fcf8964be 100644 --- a/src/zarr/storage/_cache.py +++ b/src/zarr/storage/_cache.py @@ -114,7 +114,7 @@ def __init__(self, store: Store, *, max_size: int) -> None: self._keys_cache: list[str] | None = None self._contains_cache: dict[Any, Any] = {} self._listdir_cache: dict[str | None, list[str]] = {} - self._values_cache: OrderedDict[str, Any] = OrderedDict() + self._values_cache: OrderedDict[str, bytes] = OrderedDict() self._mutex = Lock() self.hits = self.misses = 0 @@ -176,7 +176,7 @@ def __getstate__( list[str] | None, dict[Any, Any], dict[str | None, list[str]], - OrderedDict[str, Any], + OrderedDict[str, bytes], int, int, bool, @@ -205,7 +205,7 @@ def __setstate__( list[str] | None, dict[Any, Any], dict[str | None, list[str]], - OrderedDict[str, Any], + OrderedDict[str, bytes], int, int, bool, @@ -282,7 +282,7 @@ async def getsize(self, key: str) -> int: # Not in cache, delegate to underlying store return await self._store.getsize(key) - def _pop_value(self) -> dict[str, bytes]: + def _pop_value(self) -> bytes: # remove the first value from the cache, as this will be the least recently # used value _, v = self._values_cache.popitem(last=False) @@ -483,7 +483,7 @@ async def get_partial_values( key_ranges: Iterable[tuple[str, ByteRequest | None]], ) -> list[Buffer | None]: # Delegate to the underlying store - if self._store.get_partial_values: + if self.supports_partial_writes: return await self._store.get_partial_values(prototype, key_ranges) else: # Fallback - get each value individually @@ -495,40 +495,21 @@ async def get_partial_values( async def list(self) -> AsyncIterator[str]: # Delegate to the underlying store - if self._store.list: + if self.supports_listing: async for key in self._store.list(): yield key - else: - # Fallback for stores that don't have async list - if callable(self._store.keys): - for key in list(self._store.keys()): - yield key async def list_dir(self, prefix: str) -> AsyncIterator[str]: # Delegate to the underlying store - if self._store.list_dir: + if self.supports_listing: async for key in self._store.list_dir(prefix): yield key - else: - # Fallback using listdir - try: - listing = self.listdir(Path(prefix)) - for item in listing: - yield item - except (FileNotFoundError, NotADirectoryError, KeyError): - pass async def list_prefix(self, prefix: str) -> AsyncIterator[str]: # Delegate to the underlying store - if self._store.list_prefix: + if self.supports_listing: async for key in self._store.list_prefix(prefix): yield key - else: - # Fallback - filter all keys by prefix - if callable(self._store.keys): - for key in list(self._store.keys()): - if key.startswith(prefix): - yield key async def set(self, key: str, value: Buffer, byte_range: tuple[int, int] | None = None) -> None: # docstring inherited @@ -541,11 +522,11 @@ async def set_partial_values( self._check_writable() # Delegate to the underlying store - if self._store.set_partial_values: + if self.supports_partial_writes: await self._store.set_partial_values(key_start_values) else: # Fallback - this is complex to implement properly, so just invalidate cache - for key, _start, _value in key_start_values: + for _key, _start, _value in key_start_values: # For now, just invalidate the cache for these keys self.invalidate_keys() self.invalidate_values() From 4f4be57974e9448399e1b389af6882609f00778b Mon Sep 17 00:00:00 2001 From: ruaridhg Date: Mon, 15 Sep 2025 11:53:10 +0100 Subject: [PATCH 32/39] Updated _cache.py to remove redundant functions --- src/zarr/storage/_cache.py | 124 ++++++++++++++----------------------- 1 file changed, 46 insertions(+), 78 deletions(-) diff --git a/src/zarr/storage/_cache.py b/src/zarr/storage/_cache.py index 0fcf8964be..a470ca2a63 100644 --- a/src/zarr/storage/_cache.py +++ b/src/zarr/storage/_cache.py @@ -1,10 +1,8 @@ -import asyncio import warnings from collections import OrderedDict from collections.abc import AsyncIterator, Iterable -from pathlib import Path from threading import Lock -from typing import Any, cast +from typing import Any, Self, cast from zarr.abc.store import ( ByteRequest, @@ -111,21 +109,14 @@ def __init__(self, store: Store, *, max_size: int) -> None: self._store = store self._max_size = max_size self._current_size = 0 - self._keys_cache: list[str] | None = None self._contains_cache: dict[Any, Any] = {} self._listdir_cache: dict[str | None, list[str]] = {} self._values_cache: OrderedDict[str, bytes] = OrderedDict() self._mutex = Lock() self.hits = self.misses = 0 - # Handle root attribute if present in underlying store - if hasattr(store, "root"): - self.root = store.root - else: - self.root = Path("/") # Default root path - @classmethod - async def open(cls, store: Store, *, max_size: int, read_only: bool = False) -> "LRUStoreCache": + async def open(cls, store: Store, *, max_size: int, read_only: bool = False) -> Self: """ Create and open a new LRU cache store. @@ -173,7 +164,6 @@ def __getstate__( Store, int, int, - list[str] | None, dict[Any, Any], dict[str | None, list[str]], OrderedDict[str, bytes], @@ -186,7 +176,6 @@ def __getstate__( self._store, self._max_size, self._current_size, - self._keys_cache, self._contains_cache, self._listdir_cache, self._values_cache, @@ -202,7 +191,6 @@ def __setstate__( Store, int, int, - list[str] | None, dict[Any, Any], dict[str | None, list[str]], OrderedDict[str, bytes], @@ -216,7 +204,6 @@ def __setstate__( self._store, self._max_size, self._current_size, - self._keys_cache, self._contains_cache, self._listdir_cache, self._values_cache, @@ -228,7 +215,7 @@ def __setstate__( self._mutex = Lock() def __len__(self) -> int: - return len(self._keys()) + return len(self._values_cache) async def clear(self) -> None: """ @@ -241,28 +228,11 @@ async def clear(self) -> None: await self._store.clear() self.invalidate() - def _keys(self) -> list[str]: - if self._keys_cache is None: - if self._store.supports_listing: - try: - - async def collect_keys() -> list[str]: - return [str(key) async for key in self._store.list()] - - keys = asyncio.run(collect_keys()) - self._keys_cache = keys - except RuntimeError: - # Already in async context - raise NotImplementedError( - "Cannot list keys in async context - _keys() method needs to be async" - ) from None - else: - # Store doesn't support listing - self._keys_cache = [] - - return self._keys_cache - - async def getsize(self, key: str) -> int: + async def getsize( + self, + key: str, + prototype: BufferPrototype | None = None, + ) -> int: """ Get the size in bytes of the value stored at the given key. @@ -280,7 +250,22 @@ async def getsize(self, key: str) -> int: return len(cached_value) # Not in cache, delegate to underlying store - return await self._store.getsize(key) + size = await self._store.getsize(key) + + # Try to get and cache the value if it's reasonably small i.e. ≤10% of max cache size + if size <= self._max_size // 10: + if prototype is None: + prototype = default_buffer_prototype() + try: + value = await self._store.get(key, prototype) + if value is not None: + with self._mutex: + if cache_key not in self._values_cache: + self._cache_value(cache_key, value) + except Exception: + pass + + return size def _pop_value(self) -> bytes: # remove the first value from the cache, as this will be the least recently @@ -289,6 +274,7 @@ def _pop_value(self) -> bytes: return v def _accommodate_value(self, value_size: int) -> None: + # Remove items from the cache until there's enough room for a value while self._current_size + value_size > self._max_size: v = self._pop_value() self._current_size -= len(v) @@ -323,18 +309,10 @@ def _cache_value(self, key: str, value: Buffer | bytes) -> None: def invalidate(self) -> None: """Completely clear the cache.""" - self.invalidate_keys() with self._mutex: self._values_cache.clear() self._current_size = 0 - def invalidate_keys(self) -> None: - """Clear the keys cache and all related caches.""" - with self._mutex: - self._keys_cache = None - self._contains_cache.clear() - self._listdir_cache.clear() - def invalidate_values(self) -> None: """Clear only the values cache, keeping other caches intact.""" with self._mutex: @@ -374,7 +352,6 @@ async def delete(self, key: str) -> None: ) # Invalidate cache entries - self.invalidate_keys() self.invalidate_values() async def exists(self, key: str) -> bool: @@ -397,24 +374,6 @@ async def exists(self, key: str) -> bool: # Not in cache, delegate to underlying store return await self._store.exists(key) - async def _set( - self, - key: str, - value: Buffer, - exclusive: bool = False, - byte_range: tuple[int, int] | None = None, - ) -> None: - # Check if store is writable - self._check_writable() - - await self._store.set(key, value) - - # Update cache - self.invalidate_keys() - self.invalidate_values() - cache_key = key - self._cache_value(cache_key, value) - async def get( self, key: str, @@ -424,40 +383,35 @@ async def get( # Use the cache for get operations cache_key = key + if prototype is None: + prototype = default_buffer_prototype() + # For byte_range requests, don't use cache for now (could be optimized later) if byte_range is not None: try: - if prototype is None: - prototype = default_buffer_prototype() return await self._store.get(key, prototype, byte_range) except TypeError: # Fallback to sync get from mapping - get full value and slice later # For now, just return None for byte range requests on sync stores return None - try: + if cache_key in self._values_cache: # Try cache first with self._mutex: value = self._values_cache[cache_key] self.hits += 1 self._values_cache.move_to_end(cache_key) - if prototype is None: - prototype = default_buffer_prototype() return prototype.buffer.from_bytes(value) - except KeyError: + else: # Cache miss - get from store try: - if prototype is None: - prototype = default_buffer_prototype() result = await self._store.get(key, prototype, byte_range) except TypeError: # Fallback for sync stores - use __getitem__ instead try: if hasattr(self._store, "__getitem__"): value = cast(dict[str, Any], self._store)[key] - if prototype is None: - prototype = default_buffer_prototype() result = prototype.buffer.from_bytes(value) else: result = None @@ -513,7 +467,22 @@ async def list_prefix(self, prefix: str) -> AsyncIterator[str]: async def set(self, key: str, value: Buffer, byte_range: tuple[int, int] | None = None) -> None: # docstring inherited - return await self._set(key, value, byte_range=byte_range) + # Check if store is writable + self._check_writable() + + # Write to underlying store first + await self._store.set(key, value) + + # Update cache with the new value + cache_key = key + with self._mutex: + if cache_key in self._values_cache: + old_value = self._values_cache[cache_key] + self._current_size -= len(old_value) + del self._values_cache[cache_key] + + # Cache the new value + self._cache_value(cache_key, value) async def set_partial_values( self, key_start_values: Iterable[tuple[str, int, bytes | bytearray | memoryview]] @@ -528,5 +497,4 @@ async def set_partial_values( # Fallback - this is complex to implement properly, so just invalidate cache for _key, _start, _value in key_start_values: # For now, just invalidate the cache for these keys - self.invalidate_keys() self.invalidate_values() From b4c2aca8b1eafc88b989608e05c3564334ea7533 Mon Sep 17 00:00:00 2001 From: ruaridhg Date: Mon, 15 Sep 2025 12:11:04 +0100 Subject: [PATCH 33/39] Add tests for new getsize implementation --- src/zarr/storage/_cache.py | 6 ++- tests/test_store/test_cache.py | 84 +++++++++++++++++++++++++++++----- 2 files changed, 77 insertions(+), 13 deletions(-) diff --git a/src/zarr/storage/_cache.py b/src/zarr/storage/_cache.py index a470ca2a63..3a9a1ee41b 100644 --- a/src/zarr/storage/_cache.py +++ b/src/zarr/storage/_cache.py @@ -247,9 +247,11 @@ async def getsize( cached_value = self._values_cache[cache_key] # Move to end to mark as recently used self._values_cache.move_to_end(cache_key) + self.hits +=1 return len(cached_value) # Not in cache, delegate to underlying store + self.misses += 1 size = await self._store.getsize(key) # Try to get and cache the value if it's reasonably small i.e. ≤10% of max cache size @@ -481,8 +483,8 @@ async def set(self, key: str, value: Buffer, byte_range: tuple[int, int] | None self._current_size -= len(old_value) del self._values_cache[cache_key] - # Cache the new value - self._cache_value(cache_key, value) + # Cache the new value + self._cache_value(cache_key, value) async def set_partial_values( self, key_start_values: Iterable[tuple[str, int, bytes | bytearray | memoryview]] diff --git a/tests/test_store/test_cache.py b/tests/test_store/test_cache.py index a4080e8c04..2551b4d3e9 100644 --- a/tests/test_store/test_cache.py +++ b/tests/test_store/test_cache.py @@ -14,14 +14,14 @@ from zarr.testing.store import StoreTests -class CountingDict(dict[Any, Any]): - """A dictionary that counts operations for testing purposes.""" +class CounterStore(MemoryStore): # type: ignore[misc] + """ + A thin wrapper of MemoryStore to count different method calls for testing. + """ def __init__(self) -> None: super().__init__() self.counter: Counter[tuple[str, Any] | str] = Counter() - - self.read_only = False # Add Store-like attributes that LRUStoreCache expects self.supports_writes = True @@ -29,30 +29,35 @@ def __init__(self) -> None: self.supports_partial_writes = False self.supports_listing = True + async def clear(self) -> None: + self.counter["clear"] += 1 + # docstring inherited + self._store_dict.clear() + def __getitem__(self, key: Any) -> Any: self.counter["__getitem__", key] += 1 - return super().__getitem__(key) + return self._store_dict[key] # Access internal dict directly def __setitem__(self, key: Any, value: Any) -> None: self.counter["__setitem__", key] += 1 - return super().__setitem__(key, value) + self._store_dict[key] = value # Set in internal dict directly def __contains__(self, key: Any) -> bool: self.counter["__contains__", key] += 1 - return super().__contains__(key) + return key in self._store_dict # Check internal dict directly def __iter__(self) -> Any: self.counter["__iter__"] += 1 - return super().__iter__() + return iter(self._store_dict) # Iterate over internal dict def keys(self) -> Any: self.counter["keys"] += 1 - return super().keys() + return self._store_dict.keys() # Return keys from internal dict def __delitem__(self, key: Any) -> None: """Add delete support for testing.""" self.counter["__delitem__", key] += 1 - return super().__delitem__(key) + del self._store_dict[key] # Delete from internal dict directly async def set(self, key: str, value: Any) -> None: """Store-like set method for async interface.""" @@ -105,7 +110,7 @@ def skip_if_nested_chunks(**kwargs: Any) -> None: class TestLRUStoreCache(StoreTests[LRUStoreCache, Buffer]): # type: ignore[misc] store_cls = LRUStoreCache buffer_cls = cpu.Buffer - CountingClass = CountingDict + CountingClass = CounterStore LRUStoreClass = LRUStoreCache root = "" @@ -332,6 +337,63 @@ async def test_cache_value_too_large_warning(self) -> None: assert "500 bytes" in warning_message # Check cache size assert "Consider increasing max_size" in warning_message + async def test_getsize_proactive_caching(self) -> None: + """Test that getsize() proactively caches small values but not large ones.""" + store = self.CountingClass() + cache = self.LRUStoreClass(store, max_size=1000) # 1KB cache + + # Small value: 50 bytes < 100 bytes (10% of cache) + store["small"] = b"x" * 50 + # Large value: 200 bytes > 100 bytes (10% of cache) + store["large"] = b"y" * 200 + + # Small value should be proactively cached after getsize() + await cache.getsize("small") # miss += 1 + await cache.get("small") + assert cache.hits == 1 # Cache hit from proactive caching + assert cache.misses == 1 # Only the getsize miss + + # Large value should NOT be proactively cached + await cache.getsize("large") # miss += 1 + await cache.get("large") + assert cache.hits == 1 # No additional hits + assert cache.misses == 3 # getsize miss + get miss + + async def test_getsize_uses_cache(self) -> None: + """Test that getsize() uses cached values when available.""" + store = self.CountingClass() + cache = self.LRUStoreClass(store, max_size=1000) + + store["key"] = b"value" + + # Populate cache + await cache.get("key") + assert 1 == store.counter["__getitem__", "key"] + + # getsize() should use cached value + size = await cache.getsize("key") + assert size == 5 + assert 1 == store.counter["__getitem__", "key"] # No additional store access + assert cache.hits == 1 + + async def test_getsize_exception_handling(self) -> None: + """Test that getsize() handles get() exceptions gracefully.""" + + class FailingStore(CounterStore): + async def get(self, key: str, prototype: Any = None) -> Any: + if key == "fail": + raise RuntimeError("Simulated failure") + return await super().get(key, prototype) + + store = FailingStore() + cache = self.LRUStoreClass(store, max_size=1000) + store["fail"] = b"x" * 50 # Small value that would be cached + + # getsize() should work despite get() failing + size = await cache.getsize("fail") + assert size == 50 + assert cache.hits == 0 # No successful caching + async def test_get_partial_values(self) -> None: """Test get_partial_values method.""" From 7761c5c50c808220fe94525d3937b151fb1946e4 Mon Sep 17 00:00:00 2001 From: ruaridhg Date: Mon, 15 Sep 2025 15:14:07 +0100 Subject: [PATCH 34/39] Modify getsize --- benchmark.zarr/c/0/0 | Bin 0 -> 810 bytes benchmark.zarr/c/0/1 | Bin 0 -> 810 bytes benchmark.zarr/c/0/2 | Bin 0 -> 810 bytes benchmark.zarr/c/0/3 | Bin 0 -> 810 bytes benchmark.zarr/c/0/4 | Bin 0 -> 810 bytes benchmark.zarr/c/0/5 | Bin 0 -> 810 bytes benchmark.zarr/c/0/6 | Bin 0 -> 810 bytes benchmark.zarr/c/0/7 | Bin 0 -> 810 bytes benchmark.zarr/c/0/8 | Bin 0 -> 810 bytes benchmark.zarr/c/0/9 | Bin 0 -> 810 bytes benchmark.zarr/c/1/0 | Bin 0 -> 810 bytes benchmark.zarr/c/1/1 | Bin 0 -> 810 bytes benchmark.zarr/c/1/2 | Bin 0 -> 810 bytes benchmark.zarr/c/1/3 | Bin 0 -> 810 bytes benchmark.zarr/c/1/4 | Bin 0 -> 810 bytes benchmark.zarr/c/1/5 | Bin 0 -> 810 bytes benchmark.zarr/c/1/6 | Bin 0 -> 810 bytes benchmark.zarr/c/1/7 | Bin 0 -> 810 bytes benchmark.zarr/c/1/8 | Bin 0 -> 810 bytes benchmark.zarr/c/1/9 | Bin 0 -> 810 bytes benchmark.zarr/c/2/0 | Bin 0 -> 810 bytes benchmark.zarr/c/2/1 | Bin 0 -> 810 bytes benchmark.zarr/c/2/2 | Bin 0 -> 810 bytes benchmark.zarr/c/2/3 | Bin 0 -> 810 bytes benchmark.zarr/c/2/4 | Bin 0 -> 810 bytes benchmark.zarr/c/2/5 | Bin 0 -> 810 bytes benchmark.zarr/c/2/6 | Bin 0 -> 810 bytes benchmark.zarr/c/2/7 | Bin 0 -> 810 bytes benchmark.zarr/c/2/8 | Bin 0 -> 810 bytes benchmark.zarr/c/2/9 | Bin 0 -> 810 bytes benchmark.zarr/c/3/0 | Bin 0 -> 810 bytes benchmark.zarr/c/3/1 | Bin 0 -> 810 bytes benchmark.zarr/c/3/2 | Bin 0 -> 810 bytes benchmark.zarr/c/3/3 | Bin 0 -> 810 bytes benchmark.zarr/c/3/4 | Bin 0 -> 810 bytes benchmark.zarr/c/3/5 | Bin 0 -> 810 bytes benchmark.zarr/c/3/6 | Bin 0 -> 810 bytes benchmark.zarr/c/3/7 | Bin 0 -> 810 bytes benchmark.zarr/c/3/8 | Bin 0 -> 810 bytes benchmark.zarr/c/3/9 | Bin 0 -> 810 bytes benchmark.zarr/c/4/0 | Bin 0 -> 810 bytes benchmark.zarr/c/4/1 | Bin 0 -> 810 bytes benchmark.zarr/c/4/2 | Bin 0 -> 810 bytes benchmark.zarr/c/4/3 | Bin 0 -> 810 bytes benchmark.zarr/c/4/4 | Bin 0 -> 810 bytes benchmark.zarr/c/4/5 | Bin 0 -> 810 bytes benchmark.zarr/c/4/6 | Bin 0 -> 810 bytes benchmark.zarr/c/4/7 | Bin 0 -> 810 bytes benchmark.zarr/c/4/8 | Bin 0 -> 810 bytes benchmark.zarr/c/4/9 | Bin 0 -> 810 bytes benchmark.zarr/c/5/0 | Bin 0 -> 810 bytes benchmark.zarr/c/5/1 | Bin 0 -> 810 bytes benchmark.zarr/c/5/2 | Bin 0 -> 810 bytes benchmark.zarr/c/5/3 | Bin 0 -> 810 bytes benchmark.zarr/c/5/4 | Bin 0 -> 810 bytes benchmark.zarr/c/5/5 | Bin 0 -> 810 bytes benchmark.zarr/c/5/6 | Bin 0 -> 810 bytes benchmark.zarr/c/5/7 | Bin 0 -> 810 bytes benchmark.zarr/c/5/8 | Bin 0 -> 810 bytes benchmark.zarr/c/5/9 | Bin 0 -> 810 bytes benchmark.zarr/c/6/0 | Bin 0 -> 810 bytes benchmark.zarr/c/6/1 | Bin 0 -> 810 bytes benchmark.zarr/c/6/2 | Bin 0 -> 810 bytes benchmark.zarr/c/6/3 | Bin 0 -> 810 bytes benchmark.zarr/c/6/4 | Bin 0 -> 810 bytes benchmark.zarr/c/6/5 | Bin 0 -> 810 bytes benchmark.zarr/c/6/6 | Bin 0 -> 810 bytes benchmark.zarr/c/6/7 | Bin 0 -> 810 bytes benchmark.zarr/c/6/8 | Bin 0 -> 810 bytes benchmark.zarr/c/6/9 | Bin 0 -> 810 bytes benchmark.zarr/c/7/0 | Bin 0 -> 810 bytes benchmark.zarr/c/7/1 | Bin 0 -> 810 bytes benchmark.zarr/c/7/2 | Bin 0 -> 810 bytes benchmark.zarr/c/7/3 | Bin 0 -> 810 bytes benchmark.zarr/c/7/4 | Bin 0 -> 810 bytes benchmark.zarr/c/7/5 | Bin 0 -> 810 bytes benchmark.zarr/c/7/6 | Bin 0 -> 810 bytes benchmark.zarr/c/7/7 | Bin 0 -> 810 bytes benchmark.zarr/c/7/8 | Bin 0 -> 810 bytes benchmark.zarr/c/7/9 | Bin 0 -> 810 bytes benchmark.zarr/c/8/0 | Bin 0 -> 810 bytes benchmark.zarr/c/8/1 | Bin 0 -> 810 bytes benchmark.zarr/c/8/2 | Bin 0 -> 810 bytes benchmark.zarr/c/8/3 | Bin 0 -> 810 bytes benchmark.zarr/c/8/4 | Bin 0 -> 810 bytes benchmark.zarr/c/8/5 | Bin 0 -> 810 bytes benchmark.zarr/c/8/6 | Bin 0 -> 810 bytes benchmark.zarr/c/8/7 | Bin 0 -> 810 bytes benchmark.zarr/c/8/8 | Bin 0 -> 810 bytes benchmark.zarr/c/8/9 | Bin 0 -> 810 bytes benchmark.zarr/c/9/0 | Bin 0 -> 810 bytes benchmark.zarr/c/9/1 | Bin 0 -> 810 bytes benchmark.zarr/c/9/2 | Bin 0 -> 810 bytes benchmark.zarr/c/9/3 | Bin 0 -> 810 bytes benchmark.zarr/c/9/4 | Bin 0 -> 810 bytes benchmark.zarr/c/9/5 | Bin 0 -> 810 bytes benchmark.zarr/c/9/6 | Bin 0 -> 810 bytes benchmark.zarr/c/9/7 | Bin 0 -> 810 bytes benchmark.zarr/c/9/8 | Bin 0 -> 810 bytes benchmark.zarr/c/9/9 | Bin 0 -> 810 bytes benchmark.zarr/zarr.json | 42 + caching_store.py | 150 ++ src/zarr/storage/_cache.py | 47 +- test.zarr/c/0/0 | Bin 0 -> 810 bytes test.zarr/c/0/1 | Bin 0 -> 810 bytes test.zarr/c/0/2 | Bin 0 -> 810 bytes test.zarr/c/0/3 | Bin 0 -> 810 bytes test.zarr/c/0/4 | Bin 0 -> 810 bytes test.zarr/c/0/5 | Bin 0 -> 810 bytes test.zarr/c/0/6 | Bin 0 -> 810 bytes test.zarr/c/0/7 | Bin 0 -> 810 bytes test.zarr/c/0/8 | Bin 0 -> 810 bytes test.zarr/c/0/9 | Bin 0 -> 810 bytes test.zarr/c/1/0 | Bin 0 -> 810 bytes test.zarr/c/1/1 | Bin 0 -> 810 bytes test.zarr/c/1/2 | Bin 0 -> 810 bytes test.zarr/c/1/3 | Bin 0 -> 810 bytes test.zarr/c/1/4 | Bin 0 -> 810 bytes test.zarr/c/1/5 | Bin 0 -> 810 bytes test.zarr/c/1/6 | Bin 0 -> 810 bytes test.zarr/c/1/7 | Bin 0 -> 810 bytes test.zarr/c/1/8 | Bin 0 -> 810 bytes test.zarr/c/1/9 | Bin 0 -> 810 bytes test.zarr/c/2/0 | Bin 0 -> 810 bytes test.zarr/c/2/1 | Bin 0 -> 810 bytes test.zarr/c/2/2 | Bin 0 -> 810 bytes test.zarr/c/2/3 | Bin 0 -> 810 bytes test.zarr/c/2/4 | Bin 0 -> 810 bytes test.zarr/c/2/5 | Bin 0 -> 810 bytes test.zarr/c/2/6 | Bin 0 -> 810 bytes test.zarr/c/2/7 | Bin 0 -> 810 bytes test.zarr/c/2/8 | Bin 0 -> 810 bytes test.zarr/c/2/9 | Bin 0 -> 810 bytes test.zarr/c/3/0 | Bin 0 -> 810 bytes test.zarr/c/3/1 | Bin 0 -> 810 bytes test.zarr/c/3/2 | Bin 0 -> 810 bytes test.zarr/c/3/3 | Bin 0 -> 810 bytes test.zarr/c/3/4 | Bin 0 -> 810 bytes test.zarr/c/3/5 | Bin 0 -> 810 bytes test.zarr/c/3/6 | Bin 0 -> 810 bytes test.zarr/c/3/7 | Bin 0 -> 810 bytes test.zarr/c/3/8 | Bin 0 -> 810 bytes test.zarr/c/3/9 | Bin 0 -> 810 bytes test.zarr/c/4/0 | Bin 0 -> 810 bytes test.zarr/c/4/1 | Bin 0 -> 810 bytes test.zarr/c/4/2 | Bin 0 -> 810 bytes test.zarr/c/4/3 | Bin 0 -> 810 bytes test.zarr/c/4/4 | Bin 0 -> 810 bytes test.zarr/c/4/5 | Bin 0 -> 810 bytes test.zarr/c/4/6 | Bin 0 -> 810 bytes test.zarr/c/4/7 | Bin 0 -> 810 bytes test.zarr/c/4/8 | Bin 0 -> 810 bytes test.zarr/c/4/9 | Bin 0 -> 810 bytes test.zarr/c/5/0 | Bin 0 -> 810 bytes test.zarr/c/5/1 | Bin 0 -> 810 bytes test.zarr/c/5/2 | Bin 0 -> 810 bytes test.zarr/c/5/3 | Bin 0 -> 810 bytes test.zarr/c/5/4 | Bin 0 -> 810 bytes test.zarr/c/5/5 | Bin 0 -> 810 bytes test.zarr/c/5/6 | Bin 0 -> 810 bytes test.zarr/c/5/7 | Bin 0 -> 810 bytes test.zarr/c/5/8 | Bin 0 -> 810 bytes test.zarr/c/5/9 | Bin 0 -> 810 bytes test.zarr/c/6/0 | Bin 0 -> 810 bytes test.zarr/c/6/1 | Bin 0 -> 810 bytes test.zarr/c/6/2 | Bin 0 -> 810 bytes test.zarr/c/6/3 | Bin 0 -> 810 bytes test.zarr/c/6/4 | Bin 0 -> 810 bytes test.zarr/c/6/5 | Bin 0 -> 810 bytes test.zarr/c/6/6 | Bin 0 -> 810 bytes test.zarr/c/6/7 | Bin 0 -> 810 bytes test.zarr/c/6/8 | Bin 0 -> 810 bytes test.zarr/c/6/9 | Bin 0 -> 810 bytes test.zarr/c/7/0 | Bin 0 -> 810 bytes test.zarr/c/7/1 | Bin 0 -> 810 bytes test.zarr/c/7/2 | Bin 0 -> 810 bytes test.zarr/c/7/3 | Bin 0 -> 810 bytes test.zarr/c/7/4 | Bin 0 -> 810 bytes test.zarr/c/7/5 | Bin 0 -> 810 bytes test.zarr/c/7/6 | Bin 0 -> 810 bytes test.zarr/c/7/7 | Bin 0 -> 810 bytes test.zarr/c/7/8 | Bin 0 -> 810 bytes test.zarr/c/7/9 | Bin 0 -> 810 bytes test.zarr/c/8/0 | Bin 0 -> 810 bytes test.zarr/c/8/1 | Bin 0 -> 810 bytes test.zarr/c/8/2 | Bin 0 -> 810 bytes test.zarr/c/8/3 | Bin 0 -> 810 bytes test.zarr/c/8/4 | Bin 0 -> 810 bytes test.zarr/c/8/5 | Bin 0 -> 810 bytes test.zarr/c/8/6 | Bin 0 -> 810 bytes test.zarr/c/8/7 | Bin 0 -> 810 bytes test.zarr/c/8/8 | Bin 0 -> 810 bytes test.zarr/c/8/9 | Bin 0 -> 810 bytes test.zarr/c/9/0 | Bin 0 -> 810 bytes test.zarr/c/9/1 | Bin 0 -> 810 bytes test.zarr/c/9/2 | Bin 0 -> 810 bytes test.zarr/c/9/3 | Bin 0 -> 810 bytes test.zarr/c/9/4 | Bin 0 -> 810 bytes test.zarr/c/9/5 | Bin 0 -> 810 bytes test.zarr/c/9/6 | Bin 0 -> 810 bytes test.zarr/c/9/7 | Bin 0 -> 810 bytes test.zarr/c/9/8 | Bin 0 -> 810 bytes test.zarr/c/9/9 | Bin 0 -> 810 bytes test.zarr/zarr.json | 42 + test2.py | 28 + test3.py | 115 ++ test_max_size.py | 91 + test_org.py | 119 ++ uv.lock | 3307 ++++++++++++++++++++++++++++++++++++ 209 files changed, 3924 insertions(+), 17 deletions(-) create mode 100644 benchmark.zarr/c/0/0 create mode 100644 benchmark.zarr/c/0/1 create mode 100644 benchmark.zarr/c/0/2 create mode 100644 benchmark.zarr/c/0/3 create mode 100644 benchmark.zarr/c/0/4 create mode 100644 benchmark.zarr/c/0/5 create mode 100644 benchmark.zarr/c/0/6 create mode 100644 benchmark.zarr/c/0/7 create mode 100644 benchmark.zarr/c/0/8 create mode 100644 benchmark.zarr/c/0/9 create mode 100644 benchmark.zarr/c/1/0 create mode 100644 benchmark.zarr/c/1/1 create mode 100644 benchmark.zarr/c/1/2 create mode 100644 benchmark.zarr/c/1/3 create mode 100644 benchmark.zarr/c/1/4 create mode 100644 benchmark.zarr/c/1/5 create mode 100644 benchmark.zarr/c/1/6 create mode 100644 benchmark.zarr/c/1/7 create mode 100644 benchmark.zarr/c/1/8 create mode 100644 benchmark.zarr/c/1/9 create mode 100644 benchmark.zarr/c/2/0 create mode 100644 benchmark.zarr/c/2/1 create mode 100644 benchmark.zarr/c/2/2 create mode 100644 benchmark.zarr/c/2/3 create mode 100644 benchmark.zarr/c/2/4 create mode 100644 benchmark.zarr/c/2/5 create mode 100644 benchmark.zarr/c/2/6 create mode 100644 benchmark.zarr/c/2/7 create mode 100644 benchmark.zarr/c/2/8 create mode 100644 benchmark.zarr/c/2/9 create mode 100644 benchmark.zarr/c/3/0 create mode 100644 benchmark.zarr/c/3/1 create mode 100644 benchmark.zarr/c/3/2 create mode 100644 benchmark.zarr/c/3/3 create mode 100644 benchmark.zarr/c/3/4 create mode 100644 benchmark.zarr/c/3/5 create mode 100644 benchmark.zarr/c/3/6 create mode 100644 benchmark.zarr/c/3/7 create mode 100644 benchmark.zarr/c/3/8 create mode 100644 benchmark.zarr/c/3/9 create mode 100644 benchmark.zarr/c/4/0 create mode 100644 benchmark.zarr/c/4/1 create mode 100644 benchmark.zarr/c/4/2 create mode 100644 benchmark.zarr/c/4/3 create mode 100644 benchmark.zarr/c/4/4 create mode 100644 benchmark.zarr/c/4/5 create mode 100644 benchmark.zarr/c/4/6 create mode 100644 benchmark.zarr/c/4/7 create mode 100644 benchmark.zarr/c/4/8 create mode 100644 benchmark.zarr/c/4/9 create mode 100644 benchmark.zarr/c/5/0 create mode 100644 benchmark.zarr/c/5/1 create mode 100644 benchmark.zarr/c/5/2 create mode 100644 benchmark.zarr/c/5/3 create mode 100644 benchmark.zarr/c/5/4 create mode 100644 benchmark.zarr/c/5/5 create mode 100644 benchmark.zarr/c/5/6 create mode 100644 benchmark.zarr/c/5/7 create mode 100644 benchmark.zarr/c/5/8 create mode 100644 benchmark.zarr/c/5/9 create mode 100644 benchmark.zarr/c/6/0 create mode 100644 benchmark.zarr/c/6/1 create mode 100644 benchmark.zarr/c/6/2 create mode 100644 benchmark.zarr/c/6/3 create mode 100644 benchmark.zarr/c/6/4 create mode 100644 benchmark.zarr/c/6/5 create mode 100644 benchmark.zarr/c/6/6 create mode 100644 benchmark.zarr/c/6/7 create mode 100644 benchmark.zarr/c/6/8 create mode 100644 benchmark.zarr/c/6/9 create mode 100644 benchmark.zarr/c/7/0 create mode 100644 benchmark.zarr/c/7/1 create mode 100644 benchmark.zarr/c/7/2 create mode 100644 benchmark.zarr/c/7/3 create mode 100644 benchmark.zarr/c/7/4 create mode 100644 benchmark.zarr/c/7/5 create mode 100644 benchmark.zarr/c/7/6 create mode 100644 benchmark.zarr/c/7/7 create mode 100644 benchmark.zarr/c/7/8 create mode 100644 benchmark.zarr/c/7/9 create mode 100644 benchmark.zarr/c/8/0 create mode 100644 benchmark.zarr/c/8/1 create mode 100644 benchmark.zarr/c/8/2 create mode 100644 benchmark.zarr/c/8/3 create mode 100644 benchmark.zarr/c/8/4 create mode 100644 benchmark.zarr/c/8/5 create mode 100644 benchmark.zarr/c/8/6 create mode 100644 benchmark.zarr/c/8/7 create mode 100644 benchmark.zarr/c/8/8 create mode 100644 benchmark.zarr/c/8/9 create mode 100644 benchmark.zarr/c/9/0 create mode 100644 benchmark.zarr/c/9/1 create mode 100644 benchmark.zarr/c/9/2 create mode 100644 benchmark.zarr/c/9/3 create mode 100644 benchmark.zarr/c/9/4 create mode 100644 benchmark.zarr/c/9/5 create mode 100644 benchmark.zarr/c/9/6 create mode 100644 benchmark.zarr/c/9/7 create mode 100644 benchmark.zarr/c/9/8 create mode 100644 benchmark.zarr/c/9/9 create mode 100644 benchmark.zarr/zarr.json create mode 100644 caching_store.py create mode 100644 test.zarr/c/0/0 create mode 100644 test.zarr/c/0/1 create mode 100644 test.zarr/c/0/2 create mode 100644 test.zarr/c/0/3 create mode 100644 test.zarr/c/0/4 create mode 100644 test.zarr/c/0/5 create mode 100644 test.zarr/c/0/6 create mode 100644 test.zarr/c/0/7 create mode 100644 test.zarr/c/0/8 create mode 100644 test.zarr/c/0/9 create mode 100644 test.zarr/c/1/0 create mode 100644 test.zarr/c/1/1 create mode 100644 test.zarr/c/1/2 create mode 100644 test.zarr/c/1/3 create mode 100644 test.zarr/c/1/4 create mode 100644 test.zarr/c/1/5 create mode 100644 test.zarr/c/1/6 create mode 100644 test.zarr/c/1/7 create mode 100644 test.zarr/c/1/8 create mode 100644 test.zarr/c/1/9 create mode 100644 test.zarr/c/2/0 create mode 100644 test.zarr/c/2/1 create mode 100644 test.zarr/c/2/2 create mode 100644 test.zarr/c/2/3 create mode 100644 test.zarr/c/2/4 create mode 100644 test.zarr/c/2/5 create mode 100644 test.zarr/c/2/6 create mode 100644 test.zarr/c/2/7 create mode 100644 test.zarr/c/2/8 create mode 100644 test.zarr/c/2/9 create mode 100644 test.zarr/c/3/0 create mode 100644 test.zarr/c/3/1 create mode 100644 test.zarr/c/3/2 create mode 100644 test.zarr/c/3/3 create mode 100644 test.zarr/c/3/4 create mode 100644 test.zarr/c/3/5 create mode 100644 test.zarr/c/3/6 create mode 100644 test.zarr/c/3/7 create mode 100644 test.zarr/c/3/8 create mode 100644 test.zarr/c/3/9 create mode 100644 test.zarr/c/4/0 create mode 100644 test.zarr/c/4/1 create mode 100644 test.zarr/c/4/2 create mode 100644 test.zarr/c/4/3 create mode 100644 test.zarr/c/4/4 create mode 100644 test.zarr/c/4/5 create mode 100644 test.zarr/c/4/6 create mode 100644 test.zarr/c/4/7 create mode 100644 test.zarr/c/4/8 create mode 100644 test.zarr/c/4/9 create mode 100644 test.zarr/c/5/0 create mode 100644 test.zarr/c/5/1 create mode 100644 test.zarr/c/5/2 create mode 100644 test.zarr/c/5/3 create mode 100644 test.zarr/c/5/4 create mode 100644 test.zarr/c/5/5 create mode 100644 test.zarr/c/5/6 create mode 100644 test.zarr/c/5/7 create mode 100644 test.zarr/c/5/8 create mode 100644 test.zarr/c/5/9 create mode 100644 test.zarr/c/6/0 create mode 100644 test.zarr/c/6/1 create mode 100644 test.zarr/c/6/2 create mode 100644 test.zarr/c/6/3 create mode 100644 test.zarr/c/6/4 create mode 100644 test.zarr/c/6/5 create mode 100644 test.zarr/c/6/6 create mode 100644 test.zarr/c/6/7 create mode 100644 test.zarr/c/6/8 create mode 100644 test.zarr/c/6/9 create mode 100644 test.zarr/c/7/0 create mode 100644 test.zarr/c/7/1 create mode 100644 test.zarr/c/7/2 create mode 100644 test.zarr/c/7/3 create mode 100644 test.zarr/c/7/4 create mode 100644 test.zarr/c/7/5 create mode 100644 test.zarr/c/7/6 create mode 100644 test.zarr/c/7/7 create mode 100644 test.zarr/c/7/8 create mode 100644 test.zarr/c/7/9 create mode 100644 test.zarr/c/8/0 create mode 100644 test.zarr/c/8/1 create mode 100644 test.zarr/c/8/2 create mode 100644 test.zarr/c/8/3 create mode 100644 test.zarr/c/8/4 create mode 100644 test.zarr/c/8/5 create mode 100644 test.zarr/c/8/6 create mode 100644 test.zarr/c/8/7 create mode 100644 test.zarr/c/8/8 create mode 100644 test.zarr/c/8/9 create mode 100644 test.zarr/c/9/0 create mode 100644 test.zarr/c/9/1 create mode 100644 test.zarr/c/9/2 create mode 100644 test.zarr/c/9/3 create mode 100644 test.zarr/c/9/4 create mode 100644 test.zarr/c/9/5 create mode 100644 test.zarr/c/9/6 create mode 100644 test.zarr/c/9/7 create mode 100644 test.zarr/c/9/8 create mode 100644 test.zarr/c/9/9 create mode 100644 test.zarr/zarr.json create mode 100644 test2.py create mode 100644 test3.py create mode 100644 test_max_size.py create mode 100644 test_org.py create mode 100644 uv.lock diff --git a/benchmark.zarr/c/0/0 b/benchmark.zarr/c/0/0 new file mode 100644 index 0000000000000000000000000000000000000000..44c2c3f9d814255711fef835f826ab387cb8bdbd GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy03>|y6P8HCKNdOyoerDPKWQn?_>?E&Kf>$!<)>liKb=tA z>4?kgKgWZ1nnDxiKR9>h|2`P8KfbA0K^Z31KlsHTHNqzCKSEyiM1}w7KkD2atI& zF{4i0KS1sw>a*0`KhXbNWLPSrKZN11T=g93KQy?!v)Q}KKQgJAr(xFHKZMYAhLTa( zKORRpg(o`TKO0mxaGX)=KTPlY5LNWZKVKP1Xkd@%Kk;!r;VYrxKd)5H?9fExKR7_> z5H5wkKZZ-}C#IO)KhUvoEXZcKKYV(^Si5J$KNQ+>;ON}qKbGqN;?x=CKU3fOxIvfh zKg+rA{8!K9Kk7!h9aXB`KPIx-r*|^!KT@-X`Iz+IKP&9zHq905Kd@av`)`@6KeEx% z?~mKNupdGe4{DKf^ZH-Gkfj zKc$2_qyS0aKO~LjRleluKi;C6rCo9AKiX3w^D5%yKUXgfc?22mKXyc&L4BIyKU&$~ z8!GqQKR-1A4-W?IKfrsboVj$XKhR#Ig08jFKS#v<$HzY7KfbsTzy!kKKPr=z;dQ&$ zKV!0+B;h#eKi8(%4vKM9K!WCaE4KS4V{*|7xVKP)OAKmdZ-KY-nd+An#0KLugD zT{R=(KNM-2m^z@tKTBLu%2uT4KLC>UoZRGyKai`K`Ki*#KLD0jUdiE^Kg-C&k}1sP zKPdghJLvk^KOfuQu;%*eKc57JLxB|LKm0Bgr#(p7KPG-pv;{EHKM+l+BKczLKLch( oE9L>?Kju6FF7mzQKjjDS4O!ynKLFqq{?zd1Kg38$Cj^J(KU!X(djJ3c literal 0 HcmV?d00001 diff --git a/benchmark.zarr/c/0/1 b/benchmark.zarr/c/0/1 new file mode 100644 index 0000000000000000000000000000000000000000..cbbbea7617682dcdcde3eceaf441df553acf547e GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy0Ms7-fZXKeKP5FA)PSqwKV;!&v6#@{KLNFxrd7A@KhhPe zX9`B#KS22Mf&GixKT;kTgnY@?KX~NqSxZd6KMn;mHRpQYKUFp@iA_S|KLGRaLZ9!H zKWLd+FUqUMKTPu->H!qQKbU4Y4b;KNKXlrZ6apvKKS=kCVp;X-KNdC60YeGYKUXaL z#YLa#KhgdB>Li@Kio+y!^|V?KNxH` zEAb!2KS*lz!sU|aKUCJ>AF&$fKY-rcPZJ(;KQ1iXM#K-&KfzlL54V!xKN_a{3MfO> zKZr!0Hb)`jKYBCu4`~P9KYaNZI1^3MKd8`l*eo2-KgK?NxZEb=KWL~ycNRtIKRS|f zW9vBPKZqKKwZw_OKa_y#wbm@+Kj=Q2ianmuKk70vzOqZyKL}3$wkBWCKSb9leVd8b zKN$|h^T1)_KSb)s>-Yo6KPW8f@N&AoKSohLj(g(mKO*#Wkvl`}KTOt1+AO`oKcuaX zOao5lKM4FLBK0)iKbVi`0e$_uKYPVt*KafHKW05{2O#a*KXBi~#eVeLKN)RQ~KYC#(=C?c1KgpPD0}XWSKT~g>yc5yuKQnZeCIA2c literal 0 HcmV?d00001 diff --git a/benchmark.zarr/c/0/2 b/benchmark.zarr/c/0/2 new file mode 100644 index 0000000000000000000000000000000000000000..db1051c445ddfea06c32a23dfa8a0498722c1f1d GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy0O|yk0A6j|Ka8+r0Oxe=Kb>}&{Jx6nKM96LW1x`fKQlso z<2=vrKaQChppe1WKOJjd14CEmKfEl!q>S3=Ka$BhL~*F;KLqacs)%{UKkV=;KeIH` zKf|y};zeQNKlr-|@ri5bKZ=rtcEl6sKimUUnf>X-KL_)?5K#}{KScJo$P{A8Kft2e zm$C+)KLkT_stMZGKkU2U&BD&lKNiQGSlN2%KR76X1z>i~KRz-O!{1cWKQ@#offobh zKluI?KGfRgKUVRrfSuOnKZ>7>`Q!8HKkTjnH^r>ZKdTm>7wDDlKiz>6)*C13KTgZP z)dStvKN#bJ8UM!IKctR_1KZ=?KXfur?M#HnKN9g;O4wc7Km6r8u3;h3KbC;bJ+h?X zKcw+*SAuBWKP2d03Akg!KhuC=GCe%+Ke3pWnNKj~KLMumlfTsBKTFxeJ*d;;KjES7 zH5(=9KNdh@InT=9KfY1|b8Uy|KkV5g$Mo^qKQOOjL{U50KSCr$gL?huKUTX(_kro{ zKe#Ej*nDH}Kb+{vZ=|o^Ka0IJRlG>!KT?pXQz>@nKkk3=C*o4vKOk28dCA$)KlJy< zCNGuPKkyAFE5bLTKVCglWBdK%KS~6nr;Iq!KVbY0SyIxGKWkef0Ox`1KZxV)rbTPs zKdm@jsVL9yKZ8JFgPK<4KVygFvFwZMKmMz6@$d}NKS?y20~vSeKQMl@OqQkQKiPwn zIWs-yKe(7!FH69~KSi=AQ;zcGKM;RQ0n$ppKfJ5uW>+rkKR1rFK$*VgKL`XP$`QTB zKVS~{po)2@Kkc^Z?Po;nKOQB)nq=ADKdemuZ}L9SKQZo*N+wI}KkG(ft{Vj9KjCVw zZC{J(KM0^*oC0UNKWoa}f5{l^KkH5*O05#bTcjEKcs*g20G2zKM)!KtK)RfKXJhhF?NpSKXraPFBy#EKV&KP oSeD$!KeqhyR>D@K~ z5C34?KRA7D9B_NPKMrAcs^fm+KZ-j1TYmrRKLvR6KYAaS^aRh=KgeI)ak=QwKPqX(5s3ZUKO9uAKkB(aYLNKpKj?Uiv80;SKhhG_%xw+fKW^hS(Ayf`KLp$x2uaM$KePv}x)na| zKlu}jp3Sf7KZr5im4Q^XKb*m8SFa4mKThg@k_*@0KN6#cuWi-uKU!*r#UsGvKfKfj z10)j1KNRO-4L9`JKWWSu`|Qf-Kd_SDBgg&2KdHS}E83djKkURQ8`f&yKay6ef9Q$Q zKSCl`)Hhw&KTy#93W77?KYZ-OEG2!{Ka2#PakTl&Kdnfv;6j|?KM<6QPaBHBKl~^( za%|1WKX7U*m$v5JKgg7kC!!tYKRnxlgaO~^KWY~b8*g*lKUmj(L2mf$KhkBU#X>97 zKY$7ds8*PyKglPGarg4*KVQ6y&)+)iKf2PoMIYASKfuXA0oekcKcIh?s_>=YKYXj@ zXKh@|-Z6u%Q zKWzY=QAU2`KmR4agGB1+KmOK9jU(*eKVbB_6Gt|=Kd8A-0^HooKad>EsLK!SKQ1mI oH8-;FKL)m&1c>40KmIgN&_F%pKQl8%dfPYQKVm}y24^VUKNo?M(EtDd literal 0 HcmV?d00001 diff --git a/benchmark.zarr/c/0/4 b/benchmark.zarr/c/0/4 new file mode 100644 index 0000000000000000000000000000000000000000..3ec11a66979d2af428f562aae7081bd2d3fc41e3 GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy0Fv@iy}NqRKQM+-0dH`pKZY(-=~oQvKgjl>6uHH{KR|n~ zVUC~XKRD`#Z)Pp*KU|e~4$l9?KNP_-0CJ(;KQxyR7A6(kKgr($3s4T@KhqP8>&BSp zKhre4Est&EKeGp%Yhl~xKVWJ7IWGa!Kl+J(d0DyOKTgFv2rpvVKNhpvpBn()KX}gk z1UO%_KbB!h)%wuhKd9Ap-{rKsKb~6y_2)y>KR~`zG#?wOKj1t4GAV+(KRN>IFJLd{ zKfbYBKZh4q zBCPJ}KR}I6C>5rJKNz$5=qc{rKZO7Oi$RsoKg-0vI-dXNKbs^Yzc!QVKkj#e`+czK zKQ_nqR!(^1KN=byN12A|KL*3f+oKijKY$JZZ4&>DKdj&Eb|&D>KUkL4-z5IdKl!%N z#XT$OKWHPc{Js?BKS|;XX0|rvKg0-eL#zSKKMJiQH#k1+KXBNb)|YC>KVTEq9gt$~ zKmLk?v=GMVKk~@aIi*PHKc<`JV5&OQKi=qnJWG((KVYZj{d`-|KQu{CeJQNPKg+D+ zB-=9XKM6m)1z`o}KR^F6Q#}UgKayM2U@rFDKcX=V*v&ZRKXeu{#B}}9KNJG(T`wf; zKg2qF)(;idKh4m{t&!{KKXn)TG+`G zKNqSghZm9KKM;oVvFPpr{KQB{(;!_#tKQN-f ogzA*OKeXCE;D$KYKd5Yb%;yZ{KM?24mu&O7KVxj!P7>JTKWws*VE_OC literal 0 HcmV?d00001 diff --git a/benchmark.zarr/c/0/5 b/benchmark.zarr/c/0/5 new file mode 100644 index 0000000000000000000000000000000000000000..88edc219c1d404dce85ae81d4343f7cac4d534e1 GIT binary patch literal 810 zcmV~$3oz3G00-bn&D@n9deODXqf|q2)g=A0JLXhI4RyWU^frm2ap`nPqO91_o#+&) zq?)X5#(CjB?2*`|kF>hyiy&;9-#bem@9Lb7A*tQ(9U0?9X2+kA@yMu#kQ z+_@f^FP2u4|LO2};#QKVT8qM6diThhddL)qLnZ?{Kq4NCLLAsQnR|Udzr_m1Z*ql$ ziwuI;$y$$W1CF!?G#i5k5H_4x99_@}ZXh=!ZxGXB6 z0QprHr}lvs6;aoG9>ffwP?~r=sjC_^&H|SC1c8zyMsSEi1mn0pskqDlrzU-WthOH# zY0S_@u(x)3y2IR$5Po>dwc{C}K6JT|S)c|* zxG6h0@e^M1{_==dU+_rTQCFYZiEC#v$D%ZP%)Dq5iOasi#*Hr7v!Wg&O#l3RRX18^ zdsljTSy1-wiOfx80e48l=L@Y!n$mNwydMO8S)D-U*MgPu8S#(q41=Cb+o6gu!e?2U zw~Ox=94)^4)%iy&Xk&gvP=XbwcBNBw(K^@+jor6hYw#k^_Fb{gfH{)1{f<8>ajE6F zfi`7A@AB$$XR;FEd9&H}f7)PQ6fAEj9l+)J2THOhN5HM=p%+->ut{@!Usp@e?ipl@1XS|7TMvR!n!7C<*A64sa~jvq$QZ7a`zjb=n8_=apte+CXU?V;z~eiS8#t^UPR!~8B#Ugy?= zc@bp6=A}w-8gnyGFbNzy;~zA(L<&i2$6_}3Ej&~`Y1SG7u^z>EzG@UtGR}EXJ*41^ zHqL9m(FfA3wOy_(6LOAS^%IwWgSsuyz#Jb0iN%O%I$r{{FtmM|*LzH_3}Z|w3A|J# zXLXiZFk}?=@)nsv*+*yJ``m}c8%L^|e!hWbQc!9kBGq#8oVu`i^6pG@8 lBdZA)epXP`d6{rxDaQ17w3x7GW-0FXASL|w#Kjq-_z%l3mCyhH literal 0 HcmV?d00001 diff --git a/benchmark.zarr/c/0/6 b/benchmark.zarr/c/0/6 new file mode 100644 index 0000000000000000000000000000000000000000..174dd9f1e2df214fa108298ff1ae461ed3c43b7a GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy08m&WAXb9gKU`C1SEqWDiq zKZ%@EIzDmlKkWj@xs0*zKOQLG9MdK4KbXl#loj#rKgG$eB9J-nKfH8tvwfIKdez)v7J=YKf49mO?NBj zKisP-i<;EOKl~B;za7@+KY+xZ0%Ir9Kja#7%a|g@Kaw4e0@*CkKY}OotYnDMKjA=v zZkG4xKRj7%8G0)3KXd8nCVB1dKM&?0^sP7PKkx`EhTSc!KM48f5RJ^qKu9M{J zKMZ4~5Gd~KKQ0hvcTHC5KVToJ;9Q-*KY-=yztNO=KM({JVJfieKaU>wl9q?=KgO0% z@PNzcKUUaRr@#>4Km76LA`AEKKR@W@PxZF!KXV#(27}M!KN!NPQA8@kKlCzRdoC!@ zKWumFV4MZ(KghSC)_qpSKk(&HzupYYKb)E8jLM+rKQ9)= zKhC`0KNzu@3LW0VKl*%N@Wvd_KUt9Suj+^GKPUm3ENQT|KVbokgRej7KLj9h+4>#J zKVozI+k-LUKQyYvdQpSIKSWy8KUAbt+R*gUKlBc1Yy5`SKgx|UF5XAKWqo&g_AGVKRK*+O{`etKS&o^5-OwCKkx%)pf!W)KR1&u+FjP| zKde88HZ{QAKkUH4S8of_KcMH9uS4s>Ka^bXEtr~{k zKdzGG!s@N*KWNAbO|SIOKYXWXasUXyKdH=4x9^7LKU8-_$aGrXKQvqVE?UXiKX5W# zgzua0KWJGG_j4k+Kand`++D!oKLFs@MOt1iKVW7E62--rKMw+!7)C|!KaO1vM}(;E zKU*vEv*(NNKNPX1X&h3}Kg>1y_+G!mKM)96JX^KvKb(G7s_|6MKfqkf6os_cKSR}j z)g=SwKNxfk$~oN3KQn1&MEi~HKQ;WZE^5QzKVX5q0FdaLKhXI1wDpngKd1{eV}e(- zKaM+@$?eqGKiI)qN<`u6KRoGfY*F~qKL~@D(#`F>KLSV=lw38@KltLf7}Mv=KQdP3 zD81T_jKP}}LscstYKX?OJ{XO5!KcNP>St}jjKXK2Y9KT@b zKeTu!RKNwuKjd2T(l5WmKSe&+8iMQQKOiO3yH?G%KjTfcV60{8KN)z-Lb@yAKbX}3 z8VNq;KfwDnQ@2=_KLCt55`8jyKZwx>O16u}KdUWvV%^l|KXfT#d((~7KY)qVEoQCG zKMucCSbRd&KQPHE0W#azKg^o5J4W!@KeeTKI{hE+KlI?R46lFWKlHgJuT+!nKlor8 zW=hN5KOR**i<_O$Kk&)D#k+R8KVU3%gj(9{Klk&a*6G6GKZtBU)jHV9KkB_XGIcN4 zKY$~$d=vnrKYpNTDLi=ZKkO*cNCcMRKW47+1je1>KgA?@m7<2{KiyN|_?QRjKWv@Z osQS&@KZK>+=n4?jKitWf#wYRMKO9zgrrYf1KcEN?;|_Y6KUxu*H~;_u literal 0 HcmV?d00001 diff --git a/benchmark.zarr/c/0/8 b/benchmark.zarr/c/0/8 new file mode 100644 index 0000000000000000000000000000000000000000..5871db141beb2c9867a4ec88be2ec594d989ff35 GIT binary patch literal 810 zcmV~$3sB1e00-cCT+yA{S#e83b2BM*2t|I0yWCpcqPkrjdg+d0A*BcAwGvL2Tox7U zwCWt1&}hPO7L8U-Yg;HF_LfS(9r@HG@|+J-3Q21+TiGY!>|k zNW3t?-9q_wLq2qeQia);RlC3ay?MRexO(5N5&ZmdhV(Go#Ipgs)7`)uszU|u}su0WEy2gQy z{hw#MQ{^BX+4!_}%S}XlD+yasd>-n#KK4|R18J>!8(3-^q#XA4#S6Oe%i5_fS!IK2 zMc2GVu6D58%IfQ?NAN5w^mApi0Uej(h-9H0W4d$}adHTw|1{=8l^k;@oQl%T10YSc zxD8(w!+l12)WZ6&uyfosvbwjhIQLB^w6)r2Rh-=keSn!XT(FTR=}FHAXbo~kh~+%6&8@wOtT|2Dl$O2 z*ACfq2>;Hn0Td=Rnpvezq-H3*z84vB*Lp#jKBY$*+s9b3%M57=Bax!i!M9ml#3MWL zO7BHp`|>Ns*vmwx{fzMRbJz86big~})X~@M5h$n?F0%`?C>AZ2gub>R=J~|2CiI{(8FZxQ|j@8X*Z literal 0 HcmV?d00001 diff --git a/benchmark.zarr/c/0/9 b/benchmark.zarr/c/0/9 new file mode 100644 index 0000000000000000000000000000000000000000..32feca503e0ab9d292719103390168e4ad006747 GIT binary patch literal 810 zcmWO3{WFsR00;2t?c_AcQE5L+WzkSqRGRwY^d<^5dQ;N` zks)NtO`rQqTTsQFc{B8l8a7G?f2EFuqUuw(l`tc&!`w%38Mdpyp+T7p1%;cfTYHqiGpyTzD#(N`BPi>TH@ z6EWSilivxk*hw;_up3E~sViP1$90kGuw^O%qOiQtPuhd~J$K0CDm@bG+Z1(b69!hZ zcty+1sMTLk+&TCPtw!1^;euXhI!Bv+1t?IE{L>PkYDRC&xSemb974PI(RA@wjBd(6 zrL_?y>fL-^G70}Pq16n2Keo|l6(ogek@?g!C^(Tq#m8fO!l4NdD`(DsvCjb3Tlc>q z2`yk|vkYY}Pw}Oz#W{x62HVgyr7WryMBajA&nz8UKbPIux`TiZ+q0SBNFvYc(OFeJ z30wP`E_(a_RpZi#tT-dW`bRx(FYW-hQEiD=N+ykMm0? zjCEe=4xHBw+M-5=cb^dQtE(%Qoz~&#=0A#%;4)}AFBI#eOW}58bU0Dkf$u4qLnD$R zT1{=J#Pd8eFHHj!Ec)~g3vT)rXx@^5B?gA|7cZO$oA_QPsg m)=MH*59Wpa&fzCWP^s-n(f|K0rO(dIpOC|LV_cC^rNKYT!JVZ5 literal 0 HcmV?d00001 diff --git a/benchmark.zarr/c/1/0 b/benchmark.zarr/c/1/0 new file mode 100644 index 0000000000000000000000000000000000000000..38a708f06ed1cd6c404369de19e0ac7b2274e6a4 GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy01%oI)~98|KUiGg?+%gSKU$L&>*$j1KglHunnDrdKh#LU zQukERKXl|<^qU>fKfp5vyFkjXKX`uP0}}A%KfJhL=w+_fKlsm&Cl%+wKUCBA16>x` zKV=)vRmZjAKim_lYs$~bKc-rUmJw>)Kfqd%4yMl6KZuU5LK)-cKTs0T!bd!-KR{Lq z%DsS(Kb2g=IlnvRKU0qhiLyiOKaBO8?lIZHKcdZk&0|pJKlpe~+dt#FKVZP(_5U!L zKW=*74JCZ)KP|E9fPby-KjQSH^F+ArKOnMjnoSm*KUk$m)~%|wKiW#CAyG5uKL+Ga zsto(vKW1Fs;ehecKf%zA)=ebkKTW5lfg5|_KM+2q3w#8*KR_g3=jZ~sKh8Jl9xFrE zKL^d4!Dof&Kf{uWMo>8KKRBpTmRyF`Kk53C5CKZ+KQK^%f%b98KR_EkD%w<>Kife1 zp3-^mKd?qZ>JsU!Ka?V^dfW2nKRnXRt`BA2KO}J$T-}YtKXP(3Bty8|KUg@vs^kda zKU_ntYq@F1Kcw0%z6L$wKS$rfCu9_KYi=pD*OE5Kdk=S0|TDiKisLcqT=i3KYP=ucV!^zKiYTz0uaRO zKY&Q@gw*e*KVT*qTrqsRKTw8_@og~YKMKYxnh z7y4Q0KeR+2DqKgwolw>m%BKba6xg9X0oKlTf1z_>5lKj3R6KfMjF zKOhMV(rGoBKVs+txs(~@KXaZ{*a|)GKd4sCzgjTSKem|JEF*j0Ke#rUH_>$IKaAv4 zKhJy1KYE5@8&MAAKlNBCW${ zKLC*La@!kQKf3qL_13xQKOIT!K#FYUKjt$b0hArsKLQRptS9!?KU&DnYLn~kKYDWZ os~|_+KQC6};<6j(Ka!T~KOV@)gKP7zg351sIKj0U*tEc#>Kj;j9A6$>pKlK9%wskY)KkQoK778Q8KUb!b z$|>gQKOD4?4Q^dKN#@d2?m1hKc%>!E!UCYKO*ndhqvO@KZYS*3)6G! zKLQ~IK8I$}KM+1&s{W_HKLYCKarY_VKkfv6-j5>gKZuOS&fo#+KZ0H2yH}#)KaP%$ z%K#nSKR&*^Ojjx2Kd!nO?i{b=Kf)8;(p9+NKY6_fn_)%lKN^)_?kmmWKfSXsjux@& zKe+phMH95RHHKWA3&)q64OKLE8fUL^InKajKD){?&9KeMles*@<=KY%NCPL>;EAKj~9NU3To_ zKldU%W(be&KUTP&-^iBQKgiS3@1B0QKd{pL9pnbVKP;#U79ZQdKUxHXg5Gb`KT!bI z2MHSNKbU(fZP0(kKVXvuewKH`KP)@cw@y*bKNz^;ngvDJKX7xXy;zdrKZI5BoeeAJ zKU$fFz@%jFKX3^~bp&UjKVC}Ntt6f7KWw&uPsby`KOjx!>Zq!?KSbH&3g-{VKeES3 o7`k`pKg(zVKGFKcK1{cZ#IrKfvbvTbWOkKex1m)j0v`Ke$QQ^S-9rKRJAp3i!C^ zKV^2s{bk1OKZ>kd^#;%9KR{Ri9{@4DKi>gO(Y@X1KaBPe=jeaoKg)evm;{jIKYn0M z-h9XHKc1PCJ|#fZKlt_vtdok?KLzu(yeInYKR!@K@FY^;KS`I5g?XppKlCBq2pb9P zKjzjZcaGK3KVI2HthZIrKWV=i4B8awKUhiXx8aG?KMwhKlaNt)^$YIKhe+c$NG`% zKfoMBlJ<KPUTZ`c=8D! zKd``dff=LEKZY*?d&lDKKi~nVX1I>UKXzu#rA9C2KTI1>V(1vdKkT|n=8@{gKLwPE zpb)a)KQ!-LZ)fS~KV6E1Ai725Kh!RB=3;Q^KcJs}l^m$dKTvz4@to1@KY-+k4eO@o zKj7Ff$cD-2KXAmE(WonLwKz-3Kd`8=bv=f@ zKdE^x|Jpa@Ki0}t-7=ThKTy5s{aEGgKjq$pVZWs5KgbeK!&I8sKViXHX85D-Kkz}s oKW4h@KmMVvSLc-8KY(1AZ>W#IKhUW3UJ}8uKS1jBAKb9eg&X<(xKQP~hyCGldKb)FQ1vml2KbNI}iY&72Kgq8h(H_p= zKP*hlx4MzQKYIPZ;@AA@KT-}~N&A!BKlq9+9ahKNKcG_gIf@sfKVWy|d?jk@Kea7~ z{)xNkKL9}Ic-0VXKa8ucrBB)9Kh9~>Dcr&DKOd*74&-y>Kdd`{K)-9`Kg<+B2g5(m zKfeEoNlm8FKbWoc#l4#EKSE$_U-UrKKZjj;#euo%Kc~&3^4;9;KWdI(K02_|Kfu<@ zqKx0GKcLkR%Tt@bKSZ;!?xcI;KZIy^D0Xn;KNvthH>h0WKUnG&q6$;LKfD!-^Ba2L zKhjwi(L*oYKjd-o><>%DKj01-IC~}LKO)Tq?P#RmKSYo1F-NlKKcs;{6FfH0Kc-UH zq|v3`KOC*ROq{XoKbT}1sQTvVKg}583xvAwKd63v7LEqVKT`YxGQhd+KY1;jstBs; zKiW2z;u1dGKkHE}?m8y#KY)XMuoEwmKVRmUTUYe#KSr1_)Kh%WKaf+j=wIN=KR}{D zoag1)KMqrAb=V@^Kj`}K{mKi^KL9`8ft3T?KUCC`cb%TcKc^gV)7TX1KcaQXNrpAj zKOpR8f|kKV2CVH%Ic|Kk1qo`=OfXKTyi9&SOQwKUl-f zPC6#MKWM&Biwk(&KWH@8TU)5?Kj;yZFrBaIKNC0J_sAdaKfvR>$$neVKc435uj+^F zKMO_g7q0*0Kf_+GFio89KWK{+l1ZGoKe(@dE7IoZKXTs{tiN{NKhQ9bVyJP}Kj6tn zL@#8oKaA5XHdzATKlj6X@sZ)+KZFD-ChHvUKUDwEwwZ+6KU6dAP`5|gKU$eL8hRAm zKd)=x4u`>KZt&B0z*BsKcH?FS&p*JKj^ySaf?I3KXkkSmhfoqKOaxB z>!cguKQUXG3|qJ6Kl=F&l?DjwKLDseGd{akKQMhv$0{wkKe)Ip`7i^yKR=<(Sn`?Z zKd2guUPoofKQ2ajolH;cKQyG1Vn7h$Kh}rqBRk*dKei`e;;yvXKSYGvzt}U@Kd{}+ zKEKVYKS&|x*^id&KkC!o@GEHLKP2#Qo<0BQKbEHG$=96aKe%y_L0s?TKemUYxk;Vn zKav}FlTqOBKd?syx1wLbKUv-r7J`}NKY)B-jmmw_KOpn%*8V)9KeQdS(eFpdKRjsN zmYCPdKjY|&1Y_akKYp7jlgRJuKdsYzuWKX4Bsre_GQKT6&+VBrt%KVSi{&}`r0qKRS@uE%IvDKL7;f zf-1aUKVvlUntL(mKd_3^yW!#IKSsqp-U@8!KSrr7t5XcHmW5KjDr7#Eq}xKX`|pQvd(} literal 0 HcmV?d00001 diff --git a/benchmark.zarr/c/1/5 b/benchmark.zarr/c/1/5 new file mode 100644 index 0000000000000000000000000000000000000000..216a7352fbac021682cf1e1b036c3bcfc64c8d21 GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy0IPvg!|jFSKVUkQt^<3XKbqu0<)XsgKf2eOo9Qa!Kje>? zo=TF#Ke&Jrjjt8dKV;IvH3CZ4Kj?&Q)7Z?gKi$I3h~>)9Kj26ZI)x3FKQ+MGipHhwKbe){7dXS^Kj?uxAAk?eKW==Y_FR10KRSmF z8tB5?KLPhq1BNy1KdRL6i-NZ5KO_es3J*N*Kd$blHMz9oKWa+41IOj+Kd{h$Kl*~j zKRO9@Vv^w7KL+x#ObZy?Kic9?0c(EKKS7exKSoLzo+`-eKj3-MK&9ceKaiO5w!JULKM;ipo}FE_KZ^XM zXJSF!KdeFj;_5uKQc5m z6x$H!KLipXPr-HBKQ!7B2MmADKeX0N8KUCFKL(Ui?3IwyKboZueOe9KKQ!^ac$He$ zKj1T=2uY{WKfG}=oIv~QKcNT^gqAbxKLea}syi?2KaXCMHtg2wKd#Z$NzroEKLpsC z0I_t~KdxiA)5p8hKe%~QW)!j1KfnR^OqibTKkib$eRe(FKXUdrlr+@oKPbjjpbUDt zKirX=wg(l>SN~Ng7 znv|8&!zSuB|6z}T|x zn7_9YjMYN>RION$#P;!^YEB zZ~*y(t@)&fIb((@vI4_e(QIdR!P!0{u+3n{(WR^9KiTBn1M z=X=&XD#0o`sljcMK=aRUP4V+I$m?ht-PElF;V#Jai|7Vtv^kCJI{+@jp{|-yf%;21 zyHyX2(8(sfhc7CS|HdIYT;GKjmi=X{!-VRXLxyzvJ!s>3U*kRysHB}C1(F6qRLm%H z4^tqk*Bo$lx*qZWI_t)IjrhWp&)Ub(qQSxb5W?4DtR?l;@$Ode+RlbtDExx(^dsU> zc{{Lnt}^(~2uQX$V~OwkKwVkNYzMRPB>|+fpT%iVF7~^VQIt z^P6_Ab_Ata{F&@B6&iD2uu>-EP!3*C4lDnR4UZ;|k~>sr2;jd}Wb~k#-$h>{Q^2rX znsPe$IqZc6_39cm3afnR(qk5s>|yS`vt<~+YOh@LxvfDlCFhn`rV+HTfWi!#4!)O( mZI2i_d|VjKvt}zWKEFKcghCH4=Td4SoexjzL7{bW2>$_m=9~Bc literal 0 HcmV?d00001 diff --git a/benchmark.zarr/c/1/7 b/benchmark.zarr/c/1/7 new file mode 100644 index 0000000000000000000000000000000000000000..9599d5e94a75d54da913b9c407301529ef80fb3e GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy0NAck!kWR| zKkw*jh2gsAKjJFO3Zl~EKL$(P7X5VWKW3vdz0C;LKLlRQQtOTGKXjKpKzj+?KOic> zM&4q=Kj~SiLCpZ~Kj|>tfQCcuKgcGE(>yQOKZY619>|#CKTE%R`K(mqKYpCfYSC8c zKO|bny9jW=Kbm$*+P(YdKUHR^dJb^lKYPz*Qs%wpKg-*VV<|xFKf-?hRLg zZnB@EKh_F5;;_NkKQFjbr-54UKUio>Dvs0TKXfy7E*I+PKj1P!o30MXKftA<%sEA# zKU#C)Lc8tgKN>W>PW!agKVZ|RZZ-y|KQaE$!$f!JKL;`;cg{xaKLh5$tL}#9KgRR_ zK3>+MQ_gKiCA^r6F&+KLmj!VU>`Kk8=)sarkJKS282m-DF4KY%jy z%JSspKh$C+kdMCYKXxv@Y^Mg+KhPtO94briKY=do-5z`6KidJ-qJQb_Ki?5oKf;Ua zKN+#J@KWaOKa)U6SVAS>KLDWcUx8n5KNmN5K`8LxKh!aHF%gNwKL`{g{zRqRKOSOg zW2&LlKQbBeJP|0XSVKNJnpFkc|gKjJ!N@7b)}Kbe%Knzjq#KM033OLCLc zKQeIzcU98lKUhCZ+zVK}KX`2ltRxu0KOpyfv3Y2aKZbRThnTe3KPWd&iKf28{ z$gNc8Kd2D<|AJA%KOBFn|1=)JKR}S=-INHIKkOwYDsD>LKR4+xN~;_1KUfR#ekTU$ zKW5hZ7u3e=KfW5KV(SIsKNPb?eb_S0KMG2i)60(LKh@n(F&R7WKfZ83q_Dv0KX@Mf z|1lQ9KXjsL*TQ7UKLqSvI;yMSKT=8sjx(6$Kb2sjE{?6D4s zKO~n5Y_9a(KiINF%msYzKZN7ayWE%GKUingi`?SmKeVdL<_wz5Kd@Z7&nAq)KWLdZ zSk)iQKUQfd|MQgVKisW)BbZ6=Kifn=yvo|)Kdf3=uA<4xKe%Uzn(v|RKg+uA$v_?N zKbT$EJcxViKLFJ|L$Mf+KT4PJ9HP?NKTyJB=q29GKRY$k|AOY} zKkz?& zeFb3PKOlA4h$n~4KaLNqo2oq7KflNdTNDW6KOFr*u2*c-Ki@qg!^Ph0Kj6+3Y(0(9 zKV4R(v7=z_KWJdd81xIXKQBEOUI(t_KNOG-W2MB{KSl{g?}5qYKO_^Ur116BKX{Ze zGE;TnKT{#4Jp_5mWbeKlDb#$!9;sKO{rXf=7GJKR9U^ze`x& zKkO*UBf?$MKd?IoyO`G4KOk@(4<$>NKkdM076}&PKXewuPH`UYKS~Qts^K-zKWdSb oi4`a9KQ!*UNPwKvKdK5=+BRj`Kip^;I1IKZK9T!1%W5Kh-t{%qy_&KW@=~7RIyXKU}ZKLE*RCKTgsecxV*eKkC$`eRB@x zKg^WfQlLuCKSVt3Ez1DRKLy|)&EcErKSUT%jy>7ZKOe6$beKBrKe@QP`QR7eKMS#* z=ql>vKe%-7PLuM*KhVq~uiYxmKSr@!Mq)hdKM`*aM;^`LKY%7K^+&*{KMDh{|0v4k zKk)Y-cV+$LKg@_MJ#EV0Kg5Ng5^sRVKRkv{c=?m%KXT9WjBeZ4KcG>(g-FD@KR!f* z$&?4uKmT0%E+U485KV`?x3hm+TKZvqkW@tdbKRNg% zBQFT$Kk#&3^PX_%KLFOqT+$j*KQ^{oG4E&XKjoFuzG-9aKPD0tr@LI~Kj4>rjKvKiw;W1E_xGKOp?b0sDpBKfu@`Ea>R7KeP-?K`TAeKL2;CC9DOT8>&dOKCapaO$9);vlyW1kK6v?BGE}2N;6M2J#g;{NTTS|4rNnZT^wwVzV7nsq;??v+S@W@Ahr!mcf#s6-?P82f3X0 zGk2~Y89s#9E?y_NR-vvsu?=BHPs78_ChYf?){aZtvA3_`Oj|jDgN=b(PZdcJAr4yo zHK`vNaYx)XRDMR&N4g zefk22(0E84D8jM0+H)>6J>0Y6N`zt~NPKoM_htuHj@hMK=Mr%4PDsexXhO;PI+y+q zHTc1q+*WowtdnF5f+O{aW-QNq6D5OE>1GLOvx1cxzPP|<2IZr+nAd9u={Yw?;9QEg zk_whbV?W}VdFNi;wqrY2qK{ZOh$U&uSP@}bJhrZ=7O_kSDN0Rv${=v`LL@tCL<4hd zQsiHT7E3G7)QrUrAUlBYFSsPd`?{VW>NOk8qN0h}=mLYxin&Wzk=*ErY@2Sz*O9TE z7q$)H1p9Fg$6tyb{>w$Vv-^=x=s01~W;DCT80xtecu^lzjFuWs&0Eb(6qGN{* zeC9>TPDdA7D5PA8z6)uWXC2?T#dZJ z4e5Kd3OF6^xKAIJ;gLFTi0!6=hx~VX);tk-&fy1s-H_vGV50h6j23ig!By~VJoH5a=uS{n-P6Fw;PL5ss2&Z1if`r9b&$;)ONp zKOHa-AQ$N2KP=W4Iu;1!KQ=S<(4{BjKVX{HM@#JQKRa8dh4h*4KSpR@F_^N`KVl(9 z`&5V8Kc&d2QUl=XKhQ;NL(~nqKM+_;-YnzeKYU#ea3j^oKOhZXYh)P7KfoiFtRhmR zKhPK_nxC}FKU}mTGWdPaKWI0@;rvX~KZqFScaRX|mKa!CE#UB9B zKeV4U>9Ux?KjQ49^uy!dKj0(LS=b%#KVe8SLWMo-Kf^Zmlav$ZKS0VZP!9BqKRPJ> zzNu8#KWu39ON~y$KXM2<#*8oSKL?78SlS=qKf9UB#n<`ZKg?G&j)76sKRi{pov|0n zKY)58lyk?hKXww0%x~rIKk5+WBC0OzKaiVyfIjuSKNvqspXIL8KMdsSl2<^=Km1F0 z8{g^8KYcmq?xA?-KS8t{))JZEKipEa=0%y`KYRIE{u8|HKZR0Y=I77hKa?T=(|6I; zKLSBC3$laJKdfKzKPOw* zi%EjzKZtzdpBVAyKNqNuFa+iAKLytf0~oC7KN9#!vZmqaKbl2o(9w|HKSdIL7zLK( zKNMjF86e-xKQ{fHg5)XfKL-6JOd!tYKV`Z$_X_0hKg0)F_*MqzKd4=S`S)SNKb93z z=eY{yKQuKG>?Ru4KMM9(Ph4Ki=;bYxpbY zKjd+$5*66wKf;SbjmwPJKloaEt|~auKcgEs7RG7mKL)rwlel`{KcXBD98d!1KgPyB z{wiwRKX6ez=t4W{Kh$rLbK58GKgs7-9U$}VKZZC+IA?;~KhWwMZnvnqKLugXZ2|u1 zKU^E$MhZ*BKguaW)tU0|Kl};+gI|f>KmL)d0{KtSKgh*$W?pE+KYdV*%a04>KQNw6 z&#m6mKe75i?&^~6Kf0Vs>uEgHKe#C9W}=zyKaS7w&bRaEKLpY~(BBx;KVY#rUew^r zKjyS->Rk8eKUgm&cLUemKlIBdX7$MKKYzR{4rz?-KL9)r7|5VxKQ{POaTbQtKSBuG z7F$s5KV`ZiI8Zd^Kh;^M3F4gPKOPb^6d;b}KX8t?kG*BbKjtLM<6*JiKXf`q)KzQ6 zKd(COO7oZ zaxtaFKTwP4)kwk4KR{iw0vDm@KaiV?G_UfvKl)s9KAR2GKQl|h+ygAKY+}EV5+OEKi-#i zn_JE5KM?m^s^|%^Kk&M&4`?CfKOD7hKAB?NKj2b4YRfvfKNJJrG2+KVLU=Z1k<@ zKLpy3gL*v8Ke4+Uw-;RIKhV`HG6am*KecFl49Z>QKQzxCd%+yYKUl^&Pl4+1Kao5j zbTnDxKlJL2RbE%lKjcm9Z12h1KR}Hl947(aKhrDo5>vD2Ke|fbDWucjKOn?R82&+} zKU6e`c4PX`KjNdDUqBPaTC$(pKhg@#XjkLjKVJ8cD*ylh literal 0 HcmV?d00001 diff --git a/benchmark.zarr/c/2/4 b/benchmark.zarr/c/2/4 new file mode 100644 index 0000000000000000000000000000000000000000..e7e5b40b9ed74c177ab885ad3b0dcde6e6493a5a GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy04nW^zutu1KR>FxO|qZkKd2Q}otgC5KjyVDvRtv*KY7my z_rkNKSa2w&Ffg&KTwWibHgLc zKl!7`+{D}CKLK9=;KuagKU5J&E?_OmKUmw5q5n_JKk$kQsDZr9Kk%L4k@tezKNPPM8deVGKWz9R9>YxAKSJO;?e9F< zKY&5KTH(aEKMJt@v6#5vKQ=G^PEg|SKfDuAO3=#OKd1+lj`l*$KRW|Fm|6Rw3^B9KN4%maCte`KeW=~dD&>q zKX_m-b~>K#KY&xMcFE_>Ke+m`$F*V8KgP@JfQz!&KQy2zM4SunKPub3JCyU|KV&=| zvz~X=Kai_%HWQhtKfw7M_%PqEKdLSP*g1*YKVTE;L}iBWKQI85;OYX&KRH`dFYP(w zKVU7eY;h09Ka|ra-=PV_KLQr;oKAw$KUS6v7dx!tKk3OmaAqs$KU@3m3lHk-KOXE{ zMaUe`KL8HRYKggSGjuh9j zKbr}yEVh{HKQJSRvP*QmKax%$(pU-WKd1@{L*RP3KTg2aNE&?JKY)!x2M?v3KT{%9 z#)V_=KMXmTKp-9IKZS@6D|*u8KToVKlC|5!%efoKbebN3RjEnKbp3KOU=T>giJ0KlpOv zHS46$KY(}ZK{cs#KOFJ;slMayKi-nQy_J2@KPo%Fhn~vXKL}|A3&m@=KZ+9k7KP5% zKZtLJK^8H>KX}4u;A7>%KZ#jhha`yQKh&Q4obl%BKe`|eb-`TkKMFkeFmnCgKky-k z)b(iEKd4m+1a!vQKkj}UMo^aEKWt+Z2Dkv{Kh*VPDrzapKWI{K^|cexKaiF_v&h)K zKN&rgTb|VFKa3>fAvJ~NKf z%#wZKKLukD-fd0hKao-mhOBMqKZz90dRFS>Kjt!PN`tQ1KRUiIJwPVqKMD4sL$~(j zKk(Jj)W5T&KR~2fQO5|?Kk%#9Q=Jg1KXiNA@>wh3KfCY>B)qcZKPc}tv6pP=KX6Q* z(S;tVKeQ^1wBaejKM1rKzb9PUKV9v3tuLhDKa`mj=XKugKfo)9GN{9pKi5)z&EhlZ zKMVM}dpRNIKaF|hE4Vf6KVUB?o!pR@Kc+`pUL>aDKQ8!$@4#%-KV;$KRU>lbKcMd^ zUBox&KZr;RVa!3|KcZ85Bs!wuKk&p${T=GiKS;a+#~3@_KkftFP?#&_KXLtEc=F)l zKl1-W@EQ2rKLxP8+`}p0Kj_9fpmwFOKhT99{(y7aKL`#rMgrBxKlH#4PcugCKgU;N z#*(PxKZuEnaA4cDKV&-#HcqO^KlrEf8P>SkKcB(&vOJ{kKbdr!4c}PmKl($+pCqR2 zKR_w&m~{f)KfKRU+4pnKKb|pB@>fIYKZqz75OR*|KX|V$FjSJjKZ2BP->37~KjBN& oD|6QEKQ$-|P%07WKQ_3t+%UB1Ki$x5R+pLPKLOTOhKrf(KkSsAVE_OC literal 0 HcmV?d00001 diff --git a/benchmark.zarr/c/2/6 b/benchmark.zarr/c/2/6 new file mode 100644 index 0000000000000000000000000000000000000000..9c046c9f239d3095f55a1e3c377631b0f15effda GIT binary patch literal 810 zcmWO4i!&1d00&@3>R7e7X0%I+Hd#8m%DU*+>OvQh!__(RIE9r*vQm-DDRx4RP91K& z(?eP+J*d3Z`3Bzojzn{8{)>7gcX9E_?}A@9(Kd(p8%hCgdT<2Bwn~lx;;ET>@IHXs`I}0O8%C1J-|Fv8 z5#oL0no~ayVO@dX?-_3;wrFD`MXn~iJw~^C=`x9d`HZX=6g`BzhCMx23LH$GlMMM! z;{4@ijYMNWj5)}TW+TTS<%?5wngU&ZI{sJjC@75A?iY1BNIl#_iq{%o=Ofg*@N`J; zxb0GRS^;j2ry%#b7FE49r3<38Ad!7v79Xes*GHIntzsMvUQOPtv}fQ(Bt~>*}KTMT1CJSq_Vq$`I&u+q`~Ihx$do(|Gc6B#!07 zD@TRmA6~XI*ITjg)}+q~^%QPIVP;9Y3Pc(f+mnV+u~TZ}DtiZuKW?X|^D}WoU?pul zKMecbeA>eO60FSWb7p8paphws^Hro4ErhTUzMmQ)W|G*|T7|OeyZIFBhoESq69(d2 zQC*o;8dlQ++XTl5N2wGyx#G3H(Mr^&h?t=*GK3N~+31s7P%?Y&)3nwx0F5;ytZ^#MI)#Kdy8y(($nFKRT5gs?PQ5Kknr;BoyM- zKP+Q27`WTkKMql^n^6JmKlBKL0nDh>KLGRX=bq>9KT9wZ`)^(BKZ?_8Y}+E#Ki*&0 zt7j9^Kgcf8=X)OGKfqoaVlEtsKa_C%jdi=zKd-B7p|wlvKX{Fzk}5IKKjI?-B+kR+ zKjP8Ycf?EYKd6yl7!XR|Kf)pCC1WzwKgfoXB-JR*Kg&h(D|svLKazu`sLj*uKdyJ# zT7YcpKNNz(=n!M?Kc+KE-q>5~KcMWwq{k)3KXe1$}$DKRwaXlf)qEKU?sq z<&tRRKWL1=UKRUo1k6-%dKU{NuA9gtBKNBzN zx=88jKZGSt8Ik4LKPjgZj+koWKYWeNJa^~lKh}_1@cZlFKN)NB$IyW4KjVLtKgQ`-xvYrQKS%;A@{ZuWKP&AV z@cYT^KXf%JXb#}SKT;NBh5GU0KL&H+1ES*FKl-sygNNJKKP=sq6fE`HKZA(ewGaQ` zKY(X`Rj>V!KkEM5>LAGAKR={E2tB0eKhSv{6YHU;KR_?{#k|F)KVWZ-9BCV+KZwiM zb*B@!KhbZz`Jj|KZsmg0s+FqKm3SE-U`0iKkom|RWT*vKY%xZnpAMSKMatzqde%>Kc}&Y ogM>KXKj_#&%$<+3KWwUcFAHqkKkPR(;UN^uKM?EXf=d^=Kj@jF6951J literal 0 HcmV?d00001 diff --git a/benchmark.zarr/c/2/8 b/benchmark.zarr/c/2/8 new file mode 100644 index 0000000000000000000000000000000000000000..657f2deaef7a109f1560b75f668643f588418725 GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy0Bmlira6G+KME!|ZmJ&NKj`w%=)r*EKX6@n=bA;SKOoCc z-z^I3Kalv|>XetFKe8Uz3|0)`KQunR)4svWKinY&Zo^W|zkKWa&#f|GpL zKY%4@XsCj-KY&qlB`>DpKiRsiC)g3-KPORaIN*rmKU@)~U4ApzKZb&2SyaR7KcKsA z77teLKf3^Jig2UjKX9;ApXJo0KNE_q^veKh!z~H;T{DKTF{}%;m7?KMyeZuniRJKa>D|n3a^( zKb!Ra^LBRZKd|g-l^z|+KR{jpGUkuSKk8RiOK`;GKa$=@sY_t$Kck@Yj2!CZKPtKq zxN*(vKZpQj9@AOYKP+ps77^6MKiSFNst}~-Kgiuh*ejjWKRgw`XlC)+KTy&Bw9$&V zKbncy{2MvfKj?CqfPZ!4KWHrwAch_4KLA_|RR-XYKeu@%d872~Km1KOi`fv@Kk!6Y zgBxb(Khxkf@r1tYKNuEVdqGj-Kb`@%3PSzlKUYC-3~X%cKST`)*#)2PKVY(dL?$brM@KkCD}2T{D{KctDp%{ZFIKTOyUbS;&`Kdej^Y3l6UKfY5D z5rg^KKS)s&hNX+LKOYJqDXBy3KX0xdgz4JuKLAr6`vmTEKh*QNKUJd8KcP>oywKY0 zKhI!RNVll#KO&rI=Co_xKf;YG$a5>wKh*VI6xAfiKM3xXAsnLQKcgTQb#))&KTLp$ os6-FPKiSJ!WD`Y+9KN`&goPO-kKNLxOz#Zl0 zKOn;HG~LplKXh!pYvS79KWc!-h9GC>Ka)QSCzq_{KS+V1CLoIAKj?I%d>>usKkfoh zb!BhrKTD`7q+S8)KVX8n?+*p0KTNpo5>6r1KY}BI#u?<{KhWPtROB+sKb|guwN(4= zKVY_b;ExotKMpErc;{5vKjp6>|GS?KfqVD zs2N6wKl-O4Sn62gKg!5y4d6!ZKl&rx1PE{EKUaWx+ZOBVKfJ^S#mKTzE+fkhv(KRoUD%%4~9Kh;Ggar=+pKd2*`PJTkrKgx|=t+Q&~KaxV5 zMO}&PKj=3)K&(gLKc2k#4R871Kal6^qsLObKdx6>@RiouKhSG{oa-{cKX8znix%3T zKakl;^ni!7Ki9B5Dq9)jKLpsNIpLGxKO!c^H@r#VKR#lUAKUKLKMGLw&&FHbKY&bn zeJ0Y+KOEas(T#D`KP)n)6X&ACKOCpdEjhQ(KjUrJXL)QMG zKM1}%MtYvdKaLz`uYuj!KgrpGIx%tXKT0`IfElyvKcMEHN{wr!KjaSM)YjPNKg1z} z@7C<>KeEnOQLBm7KPqjq;eg%SKdJ4tl)$KVV~<;m`NNKZ;9g_Cht^KmHR(nCSG{KmG{Viz^!CKl1xE(!_D^KO_~_ zP(CcvKV-~5VtU`=KLL78_^^=aKV(Iu;TbvNKVWo{(m_^{KWgyH?XsrrKi7^+7!sW0 zKV~4yWdpS9KeKW&T3$ToKcOo^8@`_IKTsL0Q$BX7KTy)jTKd5tmP~X_sKfS@L oZ-#r|KM7lSf7^%cKQQ*G64|WfKYokrA{Gm zg)9|ivBic zptEj1{YjMs5!-GF$R;&TCsoEAaTvi`Tec5*r2#I5r`N8LeuR(qTD~+=3*x9T-<@9q zr{DXSoz)^lA0sW}=MwN=?Dp7YuLjJ%;I7%EIt1lghv>(ZnA5PFrsTIHJbRpD_gVp7 z=H-L;HfT|ueM7h2Qv_X}zkgYd0>V$1c+?;@5+`j-BMYCx6cRNYT5HDB6`8z()B(`X z-Ji(2qlVAVgu(a!4A{^JuO zXL0D^$WElESE{a^RY7z!`I{$2i5E1#8(|-n&~2nPEE#G?Vqguo(c?3y0z0DiT_5hT zf~%VKTv+xJ@uikwkX;PED5(c2HTr;w(~Q5;RXI$q0T0W919v#~!s((cE$+D(jiu*@ zPjJkbSY-1&u1$<0#*@!eHbQu5MC|RUdc5v^Mp^fkfCD?mtFT9d>5txY%{nE)4@Un* zo9r*x?{+z5%N+^!NWB~DhcxhV_SD+Xl%uR|p|`!e3a&+V1yMHNAWIpMcvyXfaid|p zh(RDrc_K{RX+&|sgEQwGU!kdo`qICcz@>em#pUd;SUT_5)|{(-={3`!ka^2RLpSms4zpWqx0rcjbKLCZg(U%BPghKv^;qTn}rpudV3l6 zN0DMeT4YFKXuFd&1~}Q7s$M3%gU&ZFf?!LLL8JBZRdUQ5bZrryRN;EkZhpo6K^W54 zaGb~5LE5>yKjmf}HcJ$ih`1q4a;?8JVof;i-jNvkTZpWV!%b3oAA~#f3q(idVDH+L lW@ak!%=L^hx=4jhOOBP)Dq3;1=0$}i+yp`(TsCIajsM;im1h6| literal 0 HcmV?d00001 diff --git a/benchmark.zarr/c/3/2 b/benchmark.zarr/c/3/2 new file mode 100644 index 0000000000000000000000000000000000000000..16acec1c4322708c00b1cdd0b1ca31d4dbec6931 GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy06K}SKGUM%KgEOsQflqxKPcIlaZ#k)KXwf&*GER{KOLye zsc5X{Ke%|n4-pvYKRlX)nqPP5KVF3?fH$e{KkulDmIou}KMX~HQXw&*-Kc6n`UBX=JKQglK zGQhy!Kd3Yh;}c`uKUHm)zivwFKQ>h>3KY$KcyBi|ZKcw6~4WW&~Kd;E6(+`mEKQ;!bKBD#SKd`>|*S2xiKj0S~ zhTM!LKc3;85kY9)KmXN3tG4UlKPC6gE#aKwKM58tW*|-O zKcMQW8Ks)TKT>r_r@*k%KciT3{XqHdKLCzNeTflUKMsf@1}uy3Kh4BbdSG?pKLC+g zTsr>NKbkc7CWM&YKe$o2W?+@DKfxem`ulzCKQuQCKscSkKVTTORW_ZhKioXcW7?O> zKjbC#q31K;Ke6IF^=F;rKWv+UN)CDJKOm@#jfnJ~KPWvqXS$c^KYA&Q4`tHlKW2he ze0&tzKO2+u&%(svKWkj4sR^_0KeT9cXZq#rKUwsf0gyD~KZCvzAf(0WKj^H4;0l)9 zKj^)m5WMN{KU^O(;MSwuKeqS&S9KTxL`ds!~qKS(Oh*+ZMxKS*%4-k;UAKPXEC z2UZ8&Kc_W?=M(?wKVYD(kNWhyKiJTMZFKTZazWGLF$KP=WXa`?l|KTTU0`6S`u zKVW1nuI*RQKN0%PR|XK`KeXiuFoz=1Kjw^iogshhKb`mXO>(>LKi$!;#~_vNKfg;6 ohtRt0KaT$dT&X$XKLC}`B*`VaKNMY%a*BrBKP_nJ@XNC6Kh6G@!2kdN literal 0 HcmV?d00001 diff --git a/benchmark.zarr/c/3/3 b/benchmark.zarr/c/3/3 new file mode 100644 index 0000000000000000000000000000000000000000..5a9b1c8aa74020548813c3ffdd3eb2aa3345c5df GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy06HBv`;nsNKN;YqL9=KL+KZZdsnoKa&sIVxIWwKY%X%ofSpOKS4AHF+4fsKZtBKm_Lok zKbUo~?XZXFKYtZjDb7jeKW$PE%+Yt|Kky=IIVW4EKWbn4`MihbKg54tMb~ibKetNQ z0(xcZKa#(0zdzOEKYkf}5%cQjKfp`5{h%-GKP;c?KGBWRKmMHg)pm&JKg=K@HbdIn zKPH87B#$!ZKed!Fo5^Rw1aXJqKLCFDvuE9FKXwMZNDw>WKR~6f?1dDKc`n7G>NX}Kh%lg>vh`VKb`ky&*HKh5bl{{@ocKg^EYdkbmnKlL+K*g#(7 zKS=I#*cr0wKST_9#edf6KfHdEN!YjAKRnDIT{vaeKT4?w$UHFBKTQ^g%J&uSKQPYS5Nh$iKcJyx-HVNvKO9Gn o+QEwHKLFE59xqSVKNfIU2PntbKLF1IMT5SkKdvDLywA4fKWONVn*aa+ literal 0 HcmV?d00001 diff --git a/benchmark.zarr/c/3/4 b/benchmark.zarr/c/3/4 new file mode 100644 index 0000000000000000000000000000000000000000..4e3ae9f2a419ea63a9dcd052cbe9f66443662838 GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy0JO`3RZ&64KmWh2 z8m=|$KX^r&=Ru#iKW_Ohn`CP0KZ1u&&9I^DKVVV3Z1nl7Kj7-`%fC>wKR}82)L1m5 zKg)0Eb23WoKb|&&IVtksKgQAIEynZEKloRi&bCjxKQ?@pM)gJLKM9&_SR}RWKL+=x zbr!$hKTK4QWMUBAKjyYiYD%~3KP2JlBjb3{Kd|<;g8%aDKe+n7$EK>qKgPBGsMDdAkGXKRAvs^}|K9KenbV&Y4=&Kj_#rT3_e2Kgv6v9A#76Kb{Ju`lI^gKVVmc zhtwLzKPVd0H^k)KKgdb;Wa_lhKdKfffWXPwKf05=<4uj}KhWLt2!I^0KXje@4srYL zKOD451c$olKmJ6tnYgg*KUc+#aR|WbKSYdfpIEfVKlSb9g|=$zKgY5eH6~EtKYH@! zB3Dq?KR96rq=rx2KNw=sfER4hKX3{!^2+$HKky)RY{j?AKQaq$ss|X{KWSE;dpKyY4KabG!qMujkKLCP5n*j$k_6*|FKfod!fl@lKKMJ1LG98=hKMWI1p|pDH zKQJgDbver7Kibm!DwCD%KQzcbni%rSKL8J!01gGKKm2#keBJuiKdn8$K?{rFKOEEi zV1lLVKh$Oc3-f5yKY{_6cW=SeKLA3pRf`i_KfoA5u@76bKk>0<6(Ek{Kh>zO)SJ=d zKaUj7k}bmQKUCO?L#j8*KZ>F$&YS|*Ka2=FKaNwkQ<{S4KL)evfBJmsKg^G) z;8>#KKg{&bBy&XWKL9$n<9RD>KeqZBQ0_h6Kd1%Sn-`U|Kj;GaWkCwKWgFr$c4<u^%N}v&KTN!)EYo%AKhjNZ{z-GKh~pj6lx~rKkznnE;t?SKUBnS@V2nwKM|>e?fGHqKO2EiX*#LmKkD+hWyf#V zKUXHGW7;9_KTnv17kq*4Kgi`7OpzJjKeS({@?|sWKO~cXz(^_2KWLKcTZ`B2e(}KQGzRS; zKRkMV#DKj`4TNDwK?KM?8x%}!h7Kfupf zzT0)*Kaug(0B6+eKTVE2TWb>KTt9kP{~f|KQ)Ec zmR&#TKe8S1sye^wKWAqkYKhc@Pz$j4fKOkw<@*P6PKM>}-2eCD_ zKW(CG7cs2nKY;BYzrs0)KUTMS4J%viKY)6!rzY00QKj7yeX2Ln-KLB8YRTM~9Kkje{o|!t|KfL)WcQ8oC zKVVYukw&GyKgP7XrKc*^KRg#S=kRL5KY%LR*be09KPfzgI>tnO;pKV-43XKh5-KcmLCG~hku zKTW6LBv$(EKP0q~vt!B0KNyAAPK_7KKP{$y4p!OWKaZUfyZS`qKaAVRbb}Y*KkzoC o%-cS?Kd{6@bqC(eKQu4Z=YR3$KfDAoiu5epKRkvR4HiD(KOCZxuK)l5 literal 0 HcmV?d00001 diff --git a/benchmark.zarr/c/3/6 b/benchmark.zarr/c/3/6 new file mode 100644 index 0000000000000000000000000000000000000000..5fc18c9ef040752dc04c0ed9b7e279d7fa4c5582 GIT binary patch literal 810 zcmV~$3sB1e00-cjQd4&#YzSR4%TZEto$9wDaVgZfE8=z;B800^LOMy89le(`R!SYR zMO}51QmRR6Q>;Cje_LC7R!;Ir&iBz9edd_%B-`aSy}GiRN;?yFGG5(eRLfzwm>fop z?gFDeu_&lXkE#!+LML@rxYUVDa$a;GAeK7I`y|7gCUJ0h!z5mIetTG|Qov2R?CXi+ zotO$->l_jF4hc(ta&?qWEI1fFmhPp-iA~&?Thki+YvTztm_*)SZauBkg637%q8vxG znAq4X_D)t~I4>~B+NZ+z5f^%qZ~`L|@yvXS0o=Msu^>bNb4Y&H?_4dG{NW9x1{vX> zax%KWw+j_yTDX_q2=_$4q#4Rvyw2$CvUI6nytjU_^TAOhaK461gDtT8_3y~S$X*cI z_I&m&E#k;oHSF?sIN9wPPs_E!|Jp^SUy2NcerLwy7A;6r*2ThojkVwS~EpUr5Z(Hi!4X58}o7=7v(0}t?7h-QfrhWAn zrl1|Wy_KSZX)C5Ps|+%3Kiun=k*Q=oJnuB7+iq1tdd1Q8zP}zrRl7H3J~AM{V~5p; zr^cb4jQvOF^u6l`;SsvlEz(hr zY04Nmbl)gk>YpTVKE8xah+f2^mE&m{H8z|%0fs|BL)~!=HlHp3TPpp6oG@BRFjI%- zqp52$uc%QOkL?^Gfn6<6wno*A;`Zpi#^=KXk~s4&6f66&LB#6QEl{FkZ(vjlLjgu& zymN-O1~wv2#GFEkyxCT&jAX?<#b8H7SvNF3J@zZIO-Pt}Ls#Sx;Mh1RUX2)0=;8aG zY#c}QuS;9*_L*T95%+HXxDt|#bF9k(0r=gN8|*djF>`g`CXp?bjXPRNhOvr literal 0 HcmV?d00001 diff --git a/benchmark.zarr/c/3/7 b/benchmark.zarr/c/3/7 new file mode 100644 index 0000000000000000000000000000000000000000..ab2d35710285b2eb91b8a5dda03d5ab708f67cfd GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy01u}32MLz%KZ^IR=u(r>KXWii_WR!AKVWA)aQf8YKXQc+ z#ZlkuKhB1w>#Ug7KSUO}!1UV0KkypCK^0=OKSJZzFAJUEKf|*>%On);KQd8=q-2=f zKXUkpNn2pyKPW|;RL8KU4sPhE`R=KR`FkdXa3KKWW+uN!B6ZKfXSg zzn#G1KYW~O-@5G6KhW{yw!^HVKlGCC&+5&^KV;$V1or^oKj0&70FlNKW0pkhSX-@KiYBY zUr5&IKa@2TSldG0KZx;nrQHVMKY+KsnTXD%Kk!lVIh-)aKcJBXfJV8^KVoDQdrMW} zKfq7C*A9W%KLF~OS(0DNKbpk)lOEjZKS3~AhQE>GKOo&IsH(%KKUKK~D5GBGKPxJm zgrS<~KL(5(*Q>7TKV=-9POCNNKTChh?XlD6KVEv<)TxryKlyVD-MJL+KXAD1M+W(~ zKNN`EC&t;{KVH;MJdTUfKjd&H6oeV?KOCHAdB*+dKQPL+hyrlwKg?+gx~yi(Kbt51 z$gKk6KXViOkS}lKKP)<6MPwn`KmCae$urvFKYd)Xm+@ooKY;HLxARG=KQZ7`4KOa| zKk5e7TAFm$KdcDcdzmTWKN#hW6ndYtKf>1t2>qziKmQc-M~ThtKl%>Kx$>;pKPaYU zuvognKcI?PlS0ejKXKk7-3N7C4KP*PVO|<>WKNP)Hqey_jKY(KI$clc1 zKM*~`1%oBKKX$w1C}3OCKT^3$Nrx-lKhc@rkP|E6Ke=1D)Et}OKaU!ZU9|n}KN=f# o$i~s#KcGi*E3l-&KghbbCKVX`M+##^oKjwa#Li;G-KRo0XJOwJ&KLEiCM*FMNKioL3Nn;z* zKgfRq>ccncKXtIC;Q8zAKUkve8rTWLKO_`oJ$>QnKjzysKyq~BKhW3%Xl(?&KM<++ zRyvN^KW3=rR~d5AKY9c&<=xERKfv=j`j188KL9p%#_|AJKN=n6*R5~pKRT_pKI$v& zKfL2k=56!VKYUg2PgjP-Km0UlOzSS`KhAhA4=VcLKaen4Zv-~nKY+c>8gSp3Kl13v zU?k_?KSG<)8PR{`KgwJWqWuErKVYAESqyZ^Ke$$<6yq1YKiK5E#{ALHKOh7YJ7&|- zKLkuaE}4_)KfWwxDBj57KSJAknt){7KR$+T1Ux;{KXy13pvXDwKf{U8X_95{Kd@kK z^K8(!KdN@jCn5LMKS=sWT_QZgKi}@9xgEppKQ9I=jIQ|UKW;!u4-fq8KQiQ-B3&Qu zKM=s5!|}%CKW;nQa_=M5KR}M=HuChyKfuxAU+s64KZq;s8(yg0KS?$ZVsyjjKe`)C zbimN)KcE_rwvN`zKZrWPfxrr}Ke{viR%61}KkHY1MPH5YKh9Ajo1UW6KRq~@6&SJa zKYW>V6kP$>KZe3vB^4FnKfawMBG7H&KkO*hXqRTKTuwD1620cKYr_7b?CO- zKYR|c>B^AFKeZSP$jCG3Kj?Y!y+9VxMlKfW0zam9DzKLD24Inb!bKVH@b zR^`^(KZ{B7`KV~;KWV)OYGrBdKPcd0zTmIeKZpY~0Pw@SKX8OpH0U|xKN{MVWFx5M zKMWu*Yr_-PKdENBRT8Kfv_51LNbIKi=Lt9{8@~KagqO=E(iTKkJbN z9OoJBKZBhy&pjOPKbSZp#BUKOfg{H-tRlKSp=5 z_+2F8Kj-fWYLBnzKeo-CEMf8MKf=_KA<2>0KL8QeJ!gb=KNio^DtBKU{K|`eOObKkVsD3<(tCKZLWCBw%*!Kg@`|b$Q&`KaIYN z%LSU~KW3sAWc0-DKL`$Y5jl|CKO;CczG^_@KWH}JhuMYGKXKby6E8I9KQ2^K2LTxD zKN^fph&a6KKhO05&*2tKiN0G10D_KKNp)ozi71NKgz5|77!WVKYgU>B6oG> zKg#3Sx$AS}KfvQbaqj-WKS2M|ei|IuKUph&(W7zXKj6cmD<4|xKeCsd&ekg0KX3$y o#N|T6KXj#exMO^!~g&Q literal 0 HcmV?d00001 diff --git a/benchmark.zarr/c/4/0 b/benchmark.zarr/c/4/0 new file mode 100644 index 0000000000000000000000000000000000000000..773ee0a0f33bd7b1bac035044aa43c46c7293cb8 GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy0K71n85uUVKaG%O9bew)KU`_-CLuS+KO>gejKbXQKXh-G1N2taKL+qe zqIdc1KfWYHs5e9JKR}(K@&aGzKPFQJWR}F>KMAyXd*I&dKZ(a07~4?fKg3uydu%W4 zKb5@314f+UKgS#`izYLKO`8dJwM#YKLEGPpL%SOKb-aBIw-2dKd|3%{O4e=Kcq{MFWLIZ zKOlO?#}(PtKe(9L+^Jj7KNLVg;v81TKVS&b)uTk4KT!Xs>@NbqKhQf2S@Yh*KW7o+ zJpB>kKdgp6$b%omKY0Au_E@mcKft9V7f1+?KX`1n2gN+KKeNzrA_9@^KL7x83yKVURF z!aQxmKMI~Uuv}W>KL{kS;u+<~KRz}n%SnsqKR<=_6gWreKd4YbbM4jPKXvXP#p}H7KgJBtTBS$cKWWMq^3d$&KOj>1(03@EKSZE+#|#VXKU!#Z zLv04uKcaqvl37jBKj6Iv_X{@HKTu$GWmZt^KLB-e>_3cZKQUP8O2ts?KVbjI=>u4= zKN5DQsfwcHKZIcfti|BQKMp?RKCxQrKSJIm-MKa3KZeG62~_dlKVYO|!FnFxKf$iR o;b>^>KSCQ2<>WZyKfdYjf~T(4KVUI?J9DeRKgx$n#7ubRKhcMdZU6uP literal 0 HcmV?d00001 diff --git a/benchmark.zarr/c/4/1 b/benchmark.zarr/c/4/1 new file mode 100644 index 0000000000000000000000000000000000000000..e73314a2b40dd296b11cfed98bb433f9ed78c370 GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy04!Jt$!Fi)KkQ9_O94gdKbR)v%G;aFKf;>a$frWzKMryG zqW>c0KR_0?ZFBeMKTMSC0O$O{KfoZ=7*PC~Kg;PRKskcvKWkP}pLXTtKg>INh)WRe zKd`U1&M6$fKSg8cPq_f>KUs{S-UPqrKfseD5K3T_KSG!QO)6*IKc3$O9L%%nKkOGf z^mwlCKhPz#t^CopKR|p8Y`5;~KY+{VlCuBYKQ!fK_-D!2KbI}%W;(OwKL<Kk;-YDKg6JKPQ0}$Ca7lKj4>; zIj|nbKf;F2JgmmvKcSF7LY>;}KQM=s#@N-vKTlPEz`>sGKOBkboxw}XKS;6_7;SXE zKjgyHO{`AcKPb3rkexTTKfo7Oh4sFwKVE4MyL$ZVKY--03LFY~KVV8n-CGx#KU@`B z>6$O=KbEKRCqVDkKlFcJ(me0QKU@;9KWEnAKN@$eWC4QYKUy-@T}?IYKcU||V}Kyz zKcIG9*(<89KbyfReC7}8KW)(69vlnoKb(T^6}`{lKf){4?w%OjKU}Ti9)GP_u zKa^b51xUWyKZtm8tq*(dKc7Vo9WyNEKgGxUhd>SMKj~ZuR9U^~KRhZ2DLO*eKLEI; zC85Jt@RM*Kd8b|rKK{rKcpPjmjKM>Z2JiN=y zKaeV6WKR{Jc;b2^WKiU^yVmCtOKWllMA{adCKOp_XLNhY=tT0Kj2zs8KpSIKO2fLwpTsnKV7?w2DQNCKgU7LDG*`jKb$irZ$ZH9KVXHa osJJY=KX_=5lwEeXKM*QIPzB=k(RkKYg#% zcxOrCKgOa@!7`oKKY-aYzXELEKVWPn6y%A`KX!F;zzquTKfrC$bc^$_Kj65kpwfk{ zKf~|AKZVfaKZ2YLI^(X=GRAKN<~r2~88`KaGb$KLZHm9kH?JKNiwWHzoVoKX_0a!3^uvKV%9hf4W)kKTy;L+#)QtKfYi+)(|w& zKPdE1@<2h0+?!KlTwb+=GhWKR!Pu|9gy!*E7KXARu<|K=`Kgj^u o30CgtKXiJG_AOe~KWNhV6C&c@KSDP&evZrEKj0ibl4;Y(Kj$u<*Z=?k literal 0 HcmV?d00001 diff --git a/benchmark.zarr/c/4/3 b/benchmark.zarr/c/4/3 new file mode 100644 index 0000000000000000000000000000000000000000..002e95aaa3102ec395430aaa8692b5d67d1246b5 GIT binary patch literal 810 zcmWO4i&M)100;2ZU7JR!q~vxnr%XiDysr8tLu%#GLKMp=uOlNJC3AL!lj4?F?zCRy zR7#ylYPE8WWSG^q_ONBv_FIQ5hVc0tK8(hNf4DQ9o%~3GSLgaRe$9cH;b^b$CJ@D6 z9ro>ehx1p-&&Iib=AeaEr3z!2Bmj5Qb;R>UCHnoO^+Y8o(MJ|4sR@93Ir? zPKhD4XpKRco??T{CHGiRwGjb6xhLbdnIT|*3Y0y$jLIuz0~gr_EYtWidsuJqePMiT zebq-W_wkz(tii3@sg6?}8h9_-csnbz4a%Pl*T+9=!KVL+xJ&8B^rjre zf=32e{Im1q{4Zb(-fcG3S&Hl`csbQ{4@-U7Q^;W^JP0gWl~iv>6onEr+dd3>Fr5=USr6J7&UgVu5BJ=kiHJnWN6pEuEb0{kyHbep!ZHGxosqF8dS$5O>ozcyS`=QUy=5dBL9&kB zsda9_wc^I+4!#NgQG(Un3ON)$H96Z}yu;qBh9$q`1_-Ilv-Xu;c=hrIuezlZ>2put zca65fL!FVT%l`n0d%3Q=Rg2^t7g^tI8nRq-`L$Q{~I`pv9D3f_rTuF#C)T`cWVVi?u?zxT%PRl+Et m1v#;7cu%~}6aN2H_~GHf^EM4QD`)5~%#=f1Np2Lo*zga$wvI^v literal 0 HcmV?d00001 diff --git a/benchmark.zarr/c/4/4 b/benchmark.zarr/c/4/4 new file mode 100644 index 0000000000000000000000000000000000000000..cc47ad70c6f6a2940862eb6b530bc41eb7343101 GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy0Jt~B4$XMYKUrlN4O}SVKX0MpQbjxFKeZiK-U*fOKT0=p z^$h6LKRW?49Y9{_Kaj)YV%tlgKR`r%dg{crKdC@^cE_FUKi*`08Z}$kKNg#d1=R)S zKkQv)J6oRMKcF5olbO<>LKTr}4WBs}0KVZPXOvNR% zKOK5&?Xq3zKY<$ljPOKap18s_seeKa{a~eSjR?KcJR3 z*C*xMKkyi(4S)%vKU9zG01%?fKkW3n55Bk7Ki25M?fUNRKN7&q1I$0>KM+ui(};G~ zKTF4+qQ_F_KiKb5&%LYVKh9T#S`UcaKR82l4q5uqKRP%8(WoftKO(3aG}L0;KgdiV zPi?csKQ_KheNq?KKekAR9{;CCKQw%x zoXUgAKfaNm#s2c!KVZP%RUd2AKYWFKJxu$?KRcD(KbU*#KML_BPU!*fKa8gc8iYI5 zKa!(8PaPfEKea5J6?*;bKk&ij?I|juKXKrkF%d}WKY$2&N5?V1KcQ=5BfvB7KV`^J oi?EsHKd`!Pl`7QYKcg)5aG${MKVlnSPsz&TKQKNbt8K>AKZq!p82|tP literal 0 HcmV?d00001 diff --git a/benchmark.zarr/c/4/5 b/benchmark.zarr/c/4/5 new file mode 100644 index 0000000000000000000000000000000000000000..8530b5500d8c6dc4ed09714ebcb21071a0d1381c GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy0A@U~L4%>uKU7jR^0Kf}1BOHS|RKhdTQ+j>suKY6=4WeY3j zKVi1?D^LaHKmKqIF6wUIKjAUfEY9NRKfa7(1>PdvKNk?+)>H%SKiq%^&8ObqKX7hu z+8f)Iz_MIKe$w!^Lk|4KO#4OU4Z58KZ_W+43RGH zKhR^QzFZT^Kdd^|=<^2cKdi@K_XA$!KdRw-tMQZ3Kh^QLht6B#KZH0gL$S8sKS0Yq zdG9)^KhTw5OFi_`Kb%b(bzWA;KhEu|v)qQ@Kh79FKz@7MKW!0DR0bjKKgFUPGTue% zKL@b(03Mj+KS;xYgSpnhKL|BtkoPy+KUMAA*Jl6iKWy#lY!2+(Kd1n~v$K7}KUkx{ zPv5laKT}&z77pd%KTt0kb~oyyKXgSF;Z|GSKUovieS6sLKcEVDCrt;iKWv*i9bxg& zKQPMS3n<&PKkD+i1I)7BKPnSuG~cS;Kja8xtdBt1KS(8`$=8VLKh)NIiHhvXKO{j~ o9NfsxKRJ`qxcOP;KXS4@jB%UhKjcTCDA29SKm3Sj_uL}SKea2HqW}N^ literal 0 HcmV?d00001 diff --git a/benchmark.zarr/c/4/6 b/benchmark.zarr/c/4/6 new file mode 100644 index 0000000000000000000000000000000000000000..0525d1dedde26ab153813cf1f429d78762eb56c9 GIT binary patch literal 810 zcmWO0i&F~#00-b=uALP_UO6_2L(3!VlJXlzN4SbgbeE0L$zuu0Ybb;$C23)cGgVO}MO3 z)Ko=lFs(iLx8T)B_-i|ueJ&-4J9X|$7ezR@J9ea8Z2-fdQd~N!g)TO=q-TW$PYe2M z>IdIrbZE5pVxk4j-3h`hi35xTeOonM22WOT<~flUDU*tx77*JJ(ox1T9hXCp+u|R! z!-F{5@V3D34%m3o114Tz8Tt*Bu0P>B+@kj81UsL-nKc z9Ef0~het=+k)os$mfMt&4!r3N&^q8>oVn+4%zI3EFhUyku@w^<2eQw0dvN+5i#(HM zg>Z)Z`xv4Qo$eS-@$N=ECde}vFSCNoy^(v0au)@QrjJS@_k+&jhKOByDDz5qr6e!X z{_0O1S!+l5;N3*ARu5)Vd9QV)3(1kr&o2Ts8017sx>NLcObyyVml$zloPJJdofY)5 zE?w(2FI2IevId<886m5TKARPwDzt>P1{0`d+|?Jdy||JwOxy6ui0ZKvn>A+u8&|!u zk3DR}O>yCD@g_IcO)e_qmA^!(fb#j}FEi$d_#}(WiQnt_IoA&esA8<fCJTa(1c6D)|yesM3j51VAdEHTH9*IRzYB~>^u&78br-gYxmzf~kw z54sM zKG25qYy4&!FvDHz%Wmq#sG$e*xCe}2_jV~J_RC>j{&l{^&xQupqtZt@CxUGq@tRw1 zD95qF!X2&973^wY74{+U?bf*Q!3r=Z@;p^{L>S2qGyVMk71qW7xE*Q$_e0CcE%hph zc)~V8jtj)fhNO+f&Ctl$nS6o<(w^3{T{f7CDqL@#t3m!d7$4;K3=t$( mMoFRo`zR+ehFEUU-_@=U8vX!PZ8c?5ni-tSzS_Af)%XWg)twmt literal 0 HcmV?d00001 diff --git a/benchmark.zarr/c/4/7 b/benchmark.zarr/c/4/7 new file mode 100644 index 0000000000000000000000000000000000000000..7913f89f40b910c8cf23f56354878f8171ebf041 GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy04#SMCMkr^KQ7)q5`h}tKfk&YMTe&9KgvDf)bm8pKg6jG zSGy|gKd|@tn7k_MKk)bj)>(bTKeN|K!G(kEKQ2_#Y9-awKNH8I%{ltzKXfybnXL`R zKLGhiaOHZ2Kb$mqb`YlIKVnT_B^SxtKbBtG_YzOsKM}ZH3;N{bKVz~vW1M*AKZmqj zbx*tRKN!QUT)}?FKQ&EfZ)&&TKcG{xgT>02KmEIlLn&9~KMn{NjO*aqKX-v& zKcYu%Q3@H~KYz;JbVPWZKMt###uYfAKjg)R)!^#hKimee=4E2W zKW3Ts#_t}~KjiCPS#T82Kl|Uz(ajR)KR9BufRO>TKW>lV-Xo^#KV;+aCzp!XKlZ#C zzor7xKU`06q16P{Kf2fMKj%#3KhSJgzJ@cuKY*(wO_V*jKLp|GsMkB;KO%Z1#FS3r zKWO-Gt-%q-KRlp9KMK9uKf&wS6vh|hKl+BO^EXG`KRRO7mI^r3Ka#kRxUan1KS*SK zNw;X~Ke%o#+}s`0KM$5H2f4@SKW~u$HJRk(KQJ0fk5-_gKL8QbFJ%#zKVS)QImW2% zKcZ~}42>1iKm8>-r1K!@KVA)u3-SZKPFvC(Q8)RKL|uH zJ`YaHKW^f1XCm>~KSI=E>9P&lKVay!$)$R-Ka81uQI(y`KT5eTKR<3PmQhUUKj7S$@Qo^;KWMG1j5xj0Kk{?WJg5ukKR~|l z5}Gi-Ke{b+PRM-iKj7%+{R`y4KalG78J}sjKcG=87KXM>?i!oc< zKk_^=cJD~vKZw~uO#>6#KYdT42*!2nKSsP}5#TT1KL9c}8r3YRKVT9gwaJX>KStHH o<@yubKS8pof84#~Kjv8SY*b<6KlFf@?Xn zQ!az&Ke~LB>6lsQKXfJ|ArTW zKX7Sx{SR)WKV%m38#r|DKZcYjp57bZKLD2mCrz@WKeD)_lKI>3KaT^-IUjcDKTtqY zY^)X7KLF~}Rp=m`KbXQ|$OaL?Kj0SmEG`VpKVw2Z6tJxBKYQ7Y;Lh;lKVH6z{0&Rc zKeD1NuoWKYKe~{Q#D9|LKZV4Wz62=hKVZ=YaF%ezKj1dAKxxS4KR?-h7sj{cKZuq{V*HWlKLrHzuS1gIKLsMpy)w<~KVU(46ha)XKTM^R+6^J?Kh9A;Z$+Wv zKmWil%vaFmKZr>sKsM;GKMd>-r`Pn*Kb{fM0|1llKh&N~qL|F zKZYhLnsxTjKU${&N%wN?KNJ&^x@y{uV3hKe<@=SjR2yKXcT5$azxa zKkCDtijKeSKS-H*Q{NleKai5-W=&|XKcKa=p8Nr=Kl$jU?MNx*KYwSJa^+XBbGvKNL*Q+_*T~ zKl)v}TRSh^KgVS*@Q-TjKY2uM*KZr*KR8QmyU_!`KLf}NV00DfKOjt$7vPV%KLId( ozeAtzKiCLzE>V!gKM1Wh(<-0QKd>5cBfgTOKjvN~;OOD$Kf*eRxc~qF literal 0 HcmV?d00001 diff --git a/benchmark.zarr/c/4/9 b/benchmark.zarr/c/4/9 new file mode 100644 index 0000000000000000000000000000000000000000..e8bc71280dda0af1ed2621271e51a0d9b787fd09 GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy0OISXmifHnKSpCW84h>fKla_FZM~4#KM;%MK9)DFKZGw~ zTMk*lKj#myZOf+NKfcr54(`J3ohKLLQ@N7SV1KcPy(ds-3aKbSvOgIqhoKO+tSoirrtKcL)ho9UU;Kk5L( zN*zDZKfm%N3btSAKY4>N_t4(zKj;-wJAfCrKX!j#>sd?CKQX<14)rzRKZ+5s@~v3g zKk}LmK1|ltKV!U*a6%>PKdiVJUSEdYKd7Eh(~7;!Kh@qp(`TgQKSdd@WAm`>Kf`GT zvOyE!KVXY(67meqKTs-*u(){LKM@0scZ#&+Ke?nc2jNKOKTMqJFPQ)4KLAM2JXJPD zKcrD-PGKGCKU4}cTZp3TKX4D&CidgzKQxa7z)ytYKXB`OpeV|wKWT7jObCkUKdh5o zF9iVDKm6B8ztU{WKT+}APx3|MKT^6FsR-TTKV1s29)t+wKYHqeUqqDTKVX~fAG)ug zKbfV2tD?W?KX84SZl7f0Kc~9&9ChI7Kf{CFS{jD!KW7hVVQ@F>KSMG{c;89rKb=z2 z{gV^xKVVH|+6|lAKQLZnk)@f!KbYMGwOGXIKdj-QpmwC_KMoe8^SR;ZKa}PzTzDqh zKXAVR5M^epKi_h>l9X@ZKkn|QgoLl|KO$6a+W)fFKe9&B2EuFUKQoG-D(?T{KXL;x z!#TL!Kcp2hRo0~LKddseqH4*@KWbz=Ko059KZ-*F!~zfDKLia4WNX;(KXmnO9HDFI zKa5azYl6SXKmHGZU|*csKQ!{@e|ve-KPx~IE*U!JKU{GH9Pkp-KOmn9c3z*;KWrz_ ou%MFTKhHecFQhK(KU`km^ay9tKX}O$!i&J#Kin~ap$l-qKMf9&cmMzZ literal 0 HcmV?d00001 diff --git a/benchmark.zarr/c/5/0 b/benchmark.zarr/c/5/0 new file mode 100644 index 0000000000000000000000000000000000000000..5390adb4ab8b5e2eda04a31bb158f5d5132cafab GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy0L6^D)}KP|Ka4IeQ@NPIKMPuHc!Rp;KaMW1YW$h$KM_N* z+EY5~Kda+;5ha-GKX6fHKPZyOKUE`=NaPgbKQ=>Xvqj_7KOpC~fB#68KWMEsvslHt zKYS@c{1WEFKS&k|z`FaKQ4P{)wGu3KZcjZjd94{KTZl;YTBaTKY50d znq4vLKfPl5WMA9hKRiB(pG&adKmBxS^za?(KP*g;)9p*@Kdn3N@6{CUKeW-ANRZFw zKR{rGMv|0(KP>Ae{wVLjKhi(CduTb?Kbe3H9+P70KbTX{mwMd9Kgc9=R7)__KNYnL z`kC75Ka#m4O`wD4KXtyfwlC7;Kiq9zh+nAMKTxeT(HPjjKOnhJG0u~aKTJdafsLN# zKfjI{RD!zgKbeDq3Qu<8Ki5j`3A!lgKUZ3Z@YOizKZf#f*CQzDKjo+5M?1*sKLDEx z`b~qMKfp(%yjH=* zKbYw?<~88AKQN=0VtUo3KM;aVYMa39KX7{=dE&*mKk&R$Quuc0KfeO7e9HCUKeXnP zZQw1}KVZjrj?)F+Kau^ryw@z`KdMy}DxKWlg|!)%b{Kj6l*YlgkEKVWOICRzHqKSZO?!pKj6P*Luci#KaQ+< z>?Q-%Klb^_KpQ#fKRBY!?C9djKW_F=g{@)kKY4@}ARl_}Ke}33Cg70RKdNqMdL`%I zKYjLw0rdssKZpg68S^Z#KLGTB;w|ySKO5cca!O_9KNbbJ`TEq|Klt15w)s@bKg4wl zlwjH3Kgzs3Zc6#rKSuTuH@8maKR$!XJ4v4GKdjV8@A$FPKfH=vMp9SSKTJ3fy8+9@ zKU!qS;-f;;KQ?xYxm}m+Kc7nKOxtgTmixAKg_Mn oN-S!|KSu^b2!VXyKdj;F)L#6?KgctXpR{#J2 literal 0 HcmV?d00001 diff --git a/benchmark.zarr/c/5/1 b/benchmark.zarr/c/5/1 new file mode 100644 index 0000000000000000000000000000000000000000..cfbe0fe4a6f2b577964aad125979e6592bda353b GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy0Ch==ISAD5Kkxy$s*xSfKPG<*&Ro^xKh&v}40r0$Ka}Ht zAK>59KQsQb#lOPgKU~Fa@e%mfKU{DB2uRc9KdJ!olKftO;@^c*M zKSDvnGxr73KTUU_wdKhr_5#dN^pKXk;I#xRuUKltiWRkmrk zKVS@D_FieqKky*O7*kNfKN4!R)9EkJKSKf;4f>DdKWDF>O1kmmKX^xAjtOt$KLJ@~ z>-i+>KiNdQ)mfT(KRsOl$H>3xKL!Z2$4*-2KY-OwKl`Dn zKg>lC?QKf)s;b&s^)KR9A)efHGYKLB3}K#t6YKjdy_iyxNUKPYUB z5}h{QKU^i^inN~9Kj8S!j_ro!KgkQ^@Y5&eKiNCM>PU3qKNP^!63GP9KeC&6(Ikr1 zKemVVKbRoU z-5o5`KbubL+D$9vKhZ4mo*07QKmM`q7m~p0KPbGtPNZbVKl=3u)2&P2KWi*SS4D*D zKZNFtu9qOpKbQqftK`HVuISoKZ+6%_kR`BKSG%IvnXxjKlux9T){NtKZ-~5 zxa11pKaP=q?HKIZKWb?4EJbGMKSYXleJ&K?KY*94&!@4>KNRj3$4hzWKY%7>$FK?C zKg8x>BL7vvKSCZT9(W<$KT?aX=TWKBKPl);PY`V7KaQC`8X+9%KfL&bWx9~vKfpUf z0(_>JKS*b)Wzw0*KTruoQ*O8CKTmj^eDF!^Ke~Gs3>I+RKU|g-4g=ikKPY-EL$TMj zKiD_2pjYngKeSl>F*WziKOD{H`h8c+Kg7;cW9*mSKf%Zmr2Kd2KLDtlJ!>h`Kir~p zTbCNuKOnCP3#uFMKg4{&Kv^=}KebjI9YrYOKcY*7X!)q=KQki<$6(s)KQ>++=vSrR zKfu*amghRjKjJX1f@(Kk&x+b4jA zKV5V>&&rAAKMx+gEVS$IKa3|v9nCD%KW5Y~_UEMQKX5I|Ko*YPKRSBnH9D*AKOji% zw+ip%KY9?9q~=rJKWLGw0aDt_KM6oU#H3^HKY+}hauP7mKQ6eE!2_$HLJLKU?_4fQU}uKSw7oE+6IYKa{Y` zfLuz+KdmtM^-Uk@KgH=Zh^=?wKN`aND9X>~KMVzvOFdlbKS;ajW~6YxKQ`T=>IOFA zKT_c^U4p>bKZu2?j1YXYKgROzB-0__Ka3)-=V!0lKdyq}J-lY*KWfU0+;|x4KXFh2 o@S=_3KedSypp%v2KjC3b-CZ@CiYKgxZg_Y8s5KXgt`LOqt$Kk|SKV2t|UKh zKPaGWgcnc3Ke8%l*C7?uKg`czwU0&7KM+qomwKr0KVa!r3>GxCKSn72e{rANKd3aC z2`yXiKX6h9^;F=fKgQ=v%AQc{KR`>HF;IuIKaVv4v#J~9KbUCUc)M=zKLiH>Y#BJn zKeTgE$In*HKX4<(#A+qwKVW0VonQRXKeWL_$OnhPKkz4LHj#a|KMz9%YfzHuKenB@ zbnb-bKYYvWUAjQYKNxZ+7yJ?BKN$O~>?r5ZKe%zV8Y?y9Kj#0u_(VwPKd{UJZp#9@ zKT6US#u@t4KUqO9N1ck|KfFHO+1WJJKLCaplRHhEKW+g}_mjBWKi~{Cc~=|LKf2jj z1yU&6KUh?GcvjWXKVYvr=y~FlKex8h(kcoDtvYKj_{C zI)whUKR~NaqD0)*KR?R87;=c`KWID{?}z%dKd?GsRdaLUKmV5?{7FsZKhP1nr1KHj zKlx4N2jG_BKU|aG%jFr=KVHuAB!7qNKW6*W*$o}iKg9NDXgOBPKXG4P6wYz(KmC@B oBvbX~Kbac7*pP(dKah|oRFPk{KX5J(*w6mAKL%(yFGL#VKRN-D82|tP literal 0 HcmV?d00001 diff --git a/benchmark.zarr/c/5/4 b/benchmark.zarr/c/5/4 new file mode 100644 index 0000000000000000000000000000000000000000..7e16157bd7a28141899b9a91d3838223f5b1b0a4 GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy0Fc1pQP;-QKWZow&JljoKbjBl=F79uKk9fEN!7^ZKgXhd zuOMFRKR)@gF}N+!KUS>5nJmNTKiML?3MMz|Kc36cr|O90KTL4B`kZF!KN$ZczvI%i zKQ@YQ@)_pVKT0d`&O5>7KRzs`RU8@OKQ?zHsnDm=KlQfK3F`pkKRGgv@0_*jKh8Ig z!UHweKU}Oo>L;S_KaO9uMsU>9Kg3%hu9Q2@KY;QU(X5`*Ke|UT7q0^AKe)*pgpDb& zKT;K9Y)J>?KR~Sg#?eQtKXK@*t-(v+KVQb2Y7qJFKQ=&gF25G&KfLvj@1X6?KX^7d zY1KF9Kg^#qS$;>!KL9^K0d&Z8Kf|3$8B=`fKd=v>5e25|Kfp;27i;gnKTJ*m%$3jLxKhRBV==Oo;Km6Rxi+d8uKYlwKXk|r#sSsV zKNNd%j7A>iKNwK@$EugWKgReoybqw%KcR!BZkdeZKP5m=5z`InKcE_V&jV-6KR$%4 zz?mE4KRNvwW{)ZAKjoM`{nfDMKk#dEu5mNfKh{c#Y_NCMKf)L?*gE^)KSA8?!3zEB zKPTw=1ceggKfu0*l4LWGKd*SzmN^XVKPvT7v<-*Y zKj*JBmfP*)KU1kiMhC^}KYt41twe3?KV~O{j_}6PKY%m2UA%OuKgSa)S!mwlKg{NK z%*k5NKg_h`Wcs+>KSGKQIGzn4Xo;KNu?q$>Js2KNu2=7M%OZKfBPxJ>34_ zKLW+<&_;mkKTf4B4n4-&KcI9eQe(foKi-W4JW90HKT%yYR(dDwKO8ObYj@AyKRA^X o^_B?hKgB}ND*-IxKkihlTRwQ(Kb9d&STO1CKSg6XYHIQ7KYBu%d;kCd literal 0 HcmV?d00001 diff --git a/benchmark.zarr/c/5/5 b/benchmark.zarr/c/5/5 new file mode 100644 index 0000000000000000000000000000000000000000..936750d67db31d2c21744d86f9213e8d75a31ec5 GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy04%=DsZMe4KOOEax+3-MKj5VfIVzo)KNzgXK$NevKjzAr zT$iuWKjv!)V0RbYKgU)|6MrY-KX_efh=kF(Kj5N(W`x0KYt)9*)rYcKfsdNDN8DeKO<(VaX3ToKhrthj%nHAKfU;k zXhNstKh3^F#j+yqKlSsiqFh1iKMOO=^4wzWKTpoj^OXneKS|RPOb1ipKVxSb-d70X zKLCi7h8cA*KgE3~F^|OQKLr8CC^Y-yKLDoQKKdbuKdi6MM7<=yKT5i<*b?s0KiG0T zp@U7Ki*MM8J>&hKMkSK8mO`8KbR9n zb8;5yKT6$WI4gYEKibLy`G9xgKVbt;fD$0;KM_Vzi76Z5KlmXscx6iIKRVs^T&}C> zKOlSeR7;eXKaXWi(q_$q_KRuJH#z{)$KVY;jF+wB4KQRWr o=s3gcKfPy&A2YS=KQ(UVU21^uKc=56OS1>nKg8vj;HvJ%Kio2ym;e9( literal 0 HcmV?d00001 diff --git a/benchmark.zarr/c/5/6 b/benchmark.zarr/c/5/6 new file mode 100644 index 0000000000000000000000000000000000000000..a2e3cb746364aacdb954d313408a24ec2aca379f GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy0QTgMT(JJKX2Bw;YSkgKfwKttM_*AKLDwY?wZfWKTO8{bKhUw@;>-l% zKR_L0ugm(TKLT<#H<)tnKQQ^u2do0#KZ(g&t?}LOKNDg_BGv!rKUl0RnhTW7KhcUR zF9S#DKMUNj)6@X#Klg59wmbdcKTJaHnQZsbKjnJ*hO)roKS-yv9ome)KjO79$~yq& zKZ^r+#5LsPKe1eVCO`n}KOo~NBjzfyKZUFZXRhhzKiI=%_tQt{Klt}>ftd>1KeXG} zU@aEoKQ6PmW5(0pKNL0l%!I1mKgjn=P+(ZkKWIry2KX5Ks zTlc!lKY+i!V`^NGKc=px%n8WXKRkYZxV@h4KVMfj92vjhKfpKQId+u1KMF-so~xwV zKO~2ZndO_oKcK==G8F2fKd7YTPU4%;KQ3{zh}OmAKf?+sbKOtmKcu6=$kk`)KTZ*a zwFUX*Kexzl^k+ZkKhVUoJ45K>Ke>4_6vdwAKbTtU0C@wuKM-VzpMg8yKMvGQf8x#2 zKPX67DmoUkKXIx&)#=;dKRANTofXREKL;m{k{&JWKPtm?x7#o3KQiB6+@_1-Kh%!? oS;Y6tKddOQi0}x=KOiJev*ur|KaMA`#LbfDKY|3rkFzc0KZ_EjxBvhE literal 0 HcmV?d00001 diff --git a/benchmark.zarr/c/5/7 b/benchmark.zarr/c/5/7 new file mode 100644 index 0000000000000000000000000000000000000000..fee41ed0224e4ff46313fee992b64176790726fa GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy0G^%{E_I6UKVZu6?CVFIKMDG6I>q4P-Kdf%2`aiYK zKjZ9mkwv=TKQcMHi#asVKLB-aR@%u&Kc0f7U~+%$KO!_JP{73RKNr-D*vrrDKX}*{ zKREEzKVvJGlcCn@KUhrSfC=HhKg<&^C;h(0KM=Kgbt>?Ja$6XKdi)U5k2eEKQj)5A+qi0KS**&v#aarKdQ&i=c5eNKdwR+v>pWNKgOJN zt-p8MKW03jk3s_OKO8*EQyCc4KNxKEf?H_dKN1aq(r(|>KY+h;(BP$$KX6L9L~%KV&ayBJ<KYS8F4l4ZIKPqY^T~7GyKO^Ops%=)|KiJh)s4q&gKhPNiUh(#2yKRKh2Hd=7+Kg7+8vCymIKR-o!%LUf% zKU(oR%Y0DYKQ5_S87}?TKZ9M&Q(`&hKbd%5Js}qCKcp773p(Mz5KcXSA$U!F8KSyb+hLDluKVS%7<3nVgKY(;QuvD{u zKWwu*IXvOiKhVH>>0QvKKXPmFoNOT5Kejs_v*+dNKYDSC>Sz4YKYc2uBJ5h`KgpZI z8~R4(KY&@*DvRr#KTwP{z`v-cKQbM>c)tAWKXw}?fyCI}KMyPX z1A@oyKkKxV)q(otKg?1t@`Q=PKLilWm#viIKeC|fTp$Y9KTPpr77U`nKfK&?rH%#B zKk!JdO{U_~KYh~}Bg_NrKSsPWe3v)qKSemX;HkppKb9Cm?3StSKX?NHI{_8bKcbV5 z5r?qoKLF`d+!+*pKmBUpXZ$+nKWcY%mlreLKjZ$*L*@?SKRMrN?Kcu*(ggB4gKXEEJ*BA8SKfx&073ul!KVt)u(;z43 zKlShKPuVh>Lw`GKYQiPdB`*8Kc#D^ z?5suSKm1QTGpyj-Kc+vx1PVyqKQv5Br_v?gKj4xv#nA1#KPEpgqsva{KPba3ZiQXG zKi>^RJrX+aKcy|GqSr$2KipKZwJgTNKQKx*UQTqXKWuZsZ)Z%{2KQLR!isD(Z zKX~z?i&uQUKTHI*Z`%ahKX7_~9vfTkKf0d>sI#RKMLFsPKWp3KTGu1BZ!deKfpE=*Ztt!KUkarF^fgUKL$=CgmlQ( zKXNDg$~M^KKV-~mU2Jj4KYA4Brngz`Kd0K8VBo#yKQh1S5Gj%9Kfpm%yWFX&Kd|9a z$0z%@Kj?jw5Oo8wKg0=JJ-DO9KkFbJA&~*#KVaUlcNa06KWpk(gpsc8Kfvk26fnZ) zKcLH^xS&KmLeeIA6rm zKd|Z9B%qJ7KbUqJ1CnF3KOX-Nk&@5eKXqBVLrJRbKQrvznx{hIKiSWNgN;V#KMqMV z(U82=Kg?8;V+}OJKcGQEO#?oqKjQme&5KS9v9l;iv1Kd=m!IM9CIKk!x=fM&O`KLYRNIC^5ozfCi`KgJ??pksO0KjV>yT|V>RKL{!LIF=gYKZ-fjeKX@OegE+s! zKTb)K?uf3{KNvkAjB|R=Kf(g@Lsj48KY5#80LgpiKkh$oVXCI;KUTX|>MY&VKafpP z8kxf7Kcaa)0kYoLKL`|fc|hjgKNjPr3Lld1KL7ysq{NKMKd_L5R~gsRKd~*)U_El{ zKQ^D%|3|~%Kd`{92Gx$FKN#2hMZ<*SKLEosmaA2CKPR#z5wu?IKmG&$Ox)DqKTc5l z9jQa*Kj#((mSI)tKTaDTUi>ECKO~6wRi7uwKP}M?=UwFNKhl!R30w}|Kfyx5l9K-J zKN>a^mWs9AKXA$jf?|rGKU(_}2UBh2KZXN4@Lt&5KYi0)3cKg%bX5KGVGKUiGh1UHw*KRP_ZS5wyIKRjo$RGUTB zKR%Y4L7_m>Kf1g|f=9OBKUtBjE+6gTKc7_N|HL%yKfOX#x0G-1KO#;|)bA|nKQXC7 zC&?e>Kg#S3rgyRHKPr&vgHk8!Klb0lM)KU`AS7bLUVKQRXZV)!cMKTLsbyyz&&KMb<7j5>zpKipbXkc55g zKLGFnW!IG1KO;%ca2rJ9KR2CCmtS_}KR;JZ24UUcKNG&%K^4vFKR7O>t$gq5Kgf4G z8WcvhKcrUSzL&_>KYnsOeoCs>Kk<<%=>co(Kgy~_2nMw8KRzYot0&ynKOCHGpNRqM zKjy9&BX9uSKLk(RRlgM3KOT7?7wU<;MKWAX*Yww1_j}KPykGLCPKFKVUB8=%Y8jKM+bK39);{KZf}6`%LlVKY`6} z$?zECKU{wCp4!dNKTfk&$KWT{KZDhIKN=hFKWv2pFLlYuKcO>?2gQWvKTY@@xZHK) zKY+3J$+hFcKYY^_Wd+s6KSSWMjAp#+KQSb3dYbv-KU^ElCcow6KM zW*UXlKd{G*9;F+mKhbrJ?9+Ke@+e9>N>oKlDs+W4HU| zKf8~XCz7q>KUyBS>bM@`KZgCguH}Q&KV>j-)hs*UKlZvUv5ar%KP9f!W{pJdKiTd7gKkVniWZ`D#Kg6TeMEhRW zKYq@R&gG%*KflSr>znD#KLD=*jF`fAKPW9L-uNWXKW@04G5`Po literal 0 HcmV?d00001 diff --git a/benchmark.zarr/c/6/3 b/benchmark.zarr/c/6/3 new file mode 100644 index 0000000000000000000000000000000000000000..b7ffe407a230e87106a71fcc43b3d3cec7239823 GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy0Ic-K){xKjbV4 z;KEh!KdNF-Z}-yGKd{}S)q`=YKda$DKP?pKKgbl4Zb+imKZUKU3(8%rVU9KcL2qyLArLKU{2w z@!8+$Ki>l~B2aFJ-c(lLKm1UWY-g_TKf=ug0fNffKg&yWKoB78KRD-={!z%^ zKh~jx4PVXCKgpJsXGMKZ)<+Px3(IKR}t7n=B33KU;UIIk;W!KYH&( zIc6N;KRCAd!gq|`KM>(;wuJZMKYJ0B(tJJPKg=OD+w4)sKWFhqM73DsKYZDRSm4*@ zKlU*3e0N^&KSP@vP2R@tKMr0g=vMF2KjQS1>KFvmKQQtE%?|q7KkN#mk^;o+KgbV; zh0BJ;KPjBJO?%AXKja+Snh(w1KjPIN>nu>A5Kg1jOmMRd@KmXzEG>Jg$ zKU^kA!92mzKP3>MW6QbVKR^c3Uz)bGKldjR1nW8CKV4n%ev!TCKX5M+E4k6hKlsb@ znr$??KaQOgZ&*;?Kj)Qu)M7a2KWK;zXn%pWKOhBUukyvxKMv>e^skZSKldB(xClJ$ zKlXLr>?5?|KOn_L@!<>SKVX(=JU3tGKR6l%9&WADKhm@&vJWoXKeyt=74nI)b#ViKQJw8$J-L* zKa?wY{lP@rKlCh(A!YB(Kb}`0El+#yKhS&r2_;0YKai|)O{Fd0KR^t1T`huxKU8C9 o-AF6LKX7o|wrb$lKcvYc%)%4cKm2FD>KHK6KM<;@{e`RSKcDoV?f?J) literal 0 HcmV?d00001 diff --git a/benchmark.zarr/c/6/4 b/benchmark.zarr/c/6/4 new file mode 100644 index 0000000000000000000000000000000000000000..15adfe907c81d7ecb14db21b3fdb4fd36530afa2 GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy0PyTp2>dpnKO|^~w4hGQKYt)IkIN$NKYFgZT81#vKlZXb zKW}m5KPdQhO$7YmKe$az@8t*BKRPy{y{gLVKZ#6B9)h&(KPc^YG;O=;KREGONzRkl zKc5v^TI5XNKaQoDM!$v9KXV8-D;bRKKNL6M^^Xm~Kir&0?q=}VKl(&rk^yAXKeQjM zuYsDxKhnG(n_|$@KQm)RBW2s}Ki1AHJ#zW&KaSb{C-FSvKX~d*>#gzRKiu$A7-1&P zKfoqTISoGIKgo@P;4vcNKXtk8DbhaUKVr$maTi+SKX_k*vA}ZFKd`AVbXV=jKa``- zR5rKRKirQhMU#-%KhJ|XBWpJAKQFkvHx)MIKbSclE(mkKKL^h#{fH0ZKTgOrA-QVS zKY->Q?*}HMKXrC>CNpR6KLj;#T)R5QKO#-c)=z}sKLmgt1BPhdKWaQUQ6BENIb_Kj0_8(EswaKY(evqtHk0KdoZ`v`NhEKN0~vvFP;E zKW=!z--4g+KR_%@3?&2RKkFQE44Hc9KlHPYz2^AtKi!sj!7z~JKX`ivB1h!bKWM&T oL^u}8Kcr|&zG1<|KLJ3|!)cM|KYrX3hxwf3KcKyS%^OLgKT;czkN^Mx literal 0 HcmV?d00001 diff --git a/benchmark.zarr/c/6/5 b/benchmark.zarr/c/6/5 new file mode 100644 index 0000000000000000000000000000000000000000..2ab89792c356bbf5b4e70691a42f6c166d4e416e GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy02YO}0`CIgKT=h7Nj5a+Ke0=o@L?KjabaKs*%HKiD>z-Y7rkKQ4;~@hqg(KW3q~ZioHVKUahG{~$Z* zKSa1iW++q9Kf3=KkZfrHS*!$KZH{#eN4vD zKY(H0lEzNNKeNo`yk!09KbQd%eUaF+KWwD$DIhJwKO7xuh*b^6KQykxjKKdES>b~7C3Kb_O)58ssJKi~SRK~BctKXl}3 zY2C5rKLDjoA9c%yKSK-3%dP3>KO)~e_cQzAKVFarxT}NRKVFA+{CsWKKdF!WrE1Ua zKlC2sSIn#7KR~QtSQ8VYKkr6e*}sV4KMIBozwhPVKbYS>|DWp0KO}?_8w|P0KQ!9A zy`vMsKlIgt16(@BKLD>S*QU~PKVN_)5)^jeKaRLVEE*5qKkpgS^1g)SKTQx8ITgp| zKaSuZolQB^KV%w#juN5JKW++3CFkbjKc177(+%_NKb|1nWUO+~Kj{BF0TM&EKN1C6 z&G(+vKf{q!82Gg8KMbf6PEV}NKW{FmS`n-3KLnt5p3!aYKUf-3{mq-#KfqW@8VL@| zKk{OxOd+k~KY;wVJm%%yKj49L9Re8WKPucEemZ#7KbIe4A5f0xKd=@nwWF?~Kdt`s o>yXLoKPH98yB`wgKYRdijg?u)KN^jrJa%H~KO4VOx65MgKgckXZ~y=R literal 0 HcmV?d00001 diff --git a/benchmark.zarr/c/6/6 b/benchmark.zarr/c/6/6 new file mode 100644 index 0000000000000000000000000000000000000000..26ecac0269cd23f34c5df12098d4ca7a092ab161 GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy0Nj4}1Ih}@KNKfjM6vPJKN(=fN3T=oKc2>*{_RNVKZE^W zVwwBrKZrDQCWG?0KVXu&A0tn&KS0ny?-q-`KND5Y_dQJSKcIT&G@>%WKO{p7^e}A5 zKkgz_u6k6}KXd9a_8)fXKe+is-hw{mKcTu-1ttdXKZs!urcqMTKjpFc((*3mKcEY- z!~e4FKL8Z%>FqbNKO{ygfr1U#Kg9+txI*yiKNx-UHgJEkKY6Q#?{5L^KSW9)Tq$7O zKVVmvHQGhzKW);=zACNZKkAezP6*W2Kgf&aWe;7dv#5$KhQZVZ&ZcFKfs&>d=E3ZKNsKH1#hC~KWfEC_|-q; zKjaw7nRbHUKLEz~Tj8>SKS~W_z|z##KXP=S)dOAHKU!+7jN{?vKcMdBJe0ApKm5+8 zB=1k}KOm+nbFh7(KVbca!gvd{KME{m<~ZNyKV-Y7CN@{yKhO3$n)0XWKQvO1e)!Yd zKhR{KQ%V5cKPWcopDeoHKMrFjC>Sc&Kd=N(e>*zZKP4hzYU7yUKm3QAaYP5fKR#q6 z?9Fo1Kal4T32gSiKkKg85rd*}brKMg%Q!aoS?KRC2VPYKr1Ki_|arT_QjKd|amm}lIfKge15*_TSx zKQXW5;s-Y7Kd>EWUp!fKcNTF`4W@uKUhV+SrSUkKX+M{F8}}l literal 0 HcmV?d00001 diff --git a/benchmark.zarr/c/6/7 b/benchmark.zarr/c/6/7 new file mode 100644 index 0000000000000000000000000000000000000000..bb7ecc1a86eff2bea0df293b622f76b7aeb8c167 GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy04Q;NoAfX3KN4@_bojIzevKT0k?QXg{bKVl}=@_IhnKVe$h zHvmlUKi0?Y|8h~)KbZ4+uQ_ntKh4d>)SFl0KmI}}rBDgfKd_5od5V+jKeRGEqg*=f zKh%57=n2o~KhVDKPW=2ku7PuKfM!= zbcI_v=KMV~$tt*c2Kjb0T oV*B>YKg6*JJbh&CKR_@AZnqr0KTynVLfsJNKR#9D^5j_UKdMTXGynhq literal 0 HcmV?d00001 diff --git a/benchmark.zarr/c/6/8 b/benchmark.zarr/c/6/8 new file mode 100644 index 0000000000000000000000000000000000000000..658072aa092efe8e853353624c957dfd7084d49a GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy0JL5s!+0FqKgc@o<_uo$KU-I*GQd>qKXL?RM-^}6Kk4*# z-Ah*KKTwr34xqicKjsQKFb?45KRENfu`*}kKeQgij zKWMoEWgkr8KYs;V0;b&RKOlKKQvW-cKTxTQY;E4+KQt`XMT@V& zKT`+btngUjKbEZWGCp(XKR`&Kz7|HrKh+k)cB=#8Kd6KYKljlJ8T;MjKTD1QhEOT%KTIZ+UqPwrKfpS|ffo4OKb7p5TmS$7 literal 0 HcmV?d00001 diff --git a/benchmark.zarr/c/6/9 b/benchmark.zarr/c/6/9 new file mode 100644 index 0000000000000000000000000000000000000000..a4ee80410d78030a36cda1b08d1829a4073ce042 GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy03ZN+SP87^KaPIfJ}2noKeoT~8oFfDKLTuCVb9psKYb*4 z;ROoeKcF38yXFh;KY_(u-fnp8KL{Jm7EO=mKk&4O^rWn!KR!dBz2blAKZ9?bIgvo% zKcMIT(?lwoKZsjPg=r?-KOwD6$p}H^KmU?tMP(1?KR{Eb0^rq(Kj5eqJ$FmmKlF~F zCHXhrKXb~;A>JJ8KVbMyJ>4dlKM?6rXG=A)Kfv^2q3|=@KRN@FT_S1gKOA(-(VfH8 zKb#|_|EFQaKUB1S4bFwiKYT#$zOeD;Kc1BQrvnz}KXx3Ls-IBnKcE$IYUl&tKe+c8 zgYx6=Kb>QFVrh8hKUBMKD)n>AKde(CoH(V(KR|z*tqZ@qKXeb6$w!6JKSA2~>*@gE zKRZv9|Jr5aKQ8tbO)7)wKVZ*!NPnxkKhTbf8dqAuKcHGu0#U}CKM0=65Yf@jKZaQC z+LmD1KXpUnn>zOHKSHbCzRw}wKm8WJE>A<^KmN|vnA{iNKi*Z7LC&1)KZqZ~KeLvy zKk22suJ*FzKO<4!@~_?LKhUa)d9>ujKg6jYBvOdYKltO_q8hHTKfyy^Hp=KXO(^G1V~VKYX-6H>lh0KdpJ3^-(SFKNx5mO4l6A zKi-<6s+#2MKlX*&)F)`|KNQ%RAHgu?Kav5Wb(iJSKYq2Q8>PtXKj4jDndNNmKiY{R z9OjeXKdSeZW8_TaKS=7t4y<!YDKk#qf*ypC8KOizw)oriWKj14920kR2KhK2EpROnC zKU#a$wdEk_KR~p0p%|vDKLiG)vO1x}Kj_;@+Fs$bKQf?fYKR@;KhrQzk%}YkKTJ|x z87+rabAKR_Vxif=!HKV;~qOA?Oc zKg2xQFy)THKakbMf4&y#Kd{xQkxi__KcHM62;K4FKO53NlO}EGKfqlIhpfSqKln>X z=M;LjKS&|I>Wd_|Kkhj)S2AhgKM)7}a=W^zKXfboI_@LDKOjCg)@~;1KWVBEch+|0 zKSH(AAJvlJKgdiAdaO$7KeI!(nd4#YKd_BNIo!<9KPeFTvt_65KQLAx>UGb_KR{NH z{pAakKP0}NLePWVKeZF(CwXq|Ka8WaELU{NKLE_AVkq*cKiISzT2m~!KNbPFoT^>m zKd^TG%4_|-Kj2}yhGY++Ki7?xqI*Z?KZA)}jmOgFKUMH*8*KOFKatkEI=`#nKN*pO zMq5JUKm6YO6C=CKKRoHO;FxCAKW$#sMooY0Kfu*oId)RpKh-9xcr)tkKNe~P6RLL6 zKYp`dxl+CBKPHjV$874?KVE>k=F?*4KLz%m1)DwRKc7^C#16LWKN^ICz#ydGKQ1r* zt^A(gKR_9f3eoSNKa9xrv=MIZKLE0eb{!C)KLS}64inDaKS(iyXBm;lKSCRtryt+o zKfw0L&LSL;Ki!|XaUCe&Kg5PC58^}4KPo-Gn{Q^^Kcq3VezEVKl<@TQwtE*KQQ8QvJ%O>KYpbT4ZOkQKdwJub89}-KO{Q1xAM!) zKQ6n9MaqopKYVb{|FaP3KN#ODRN&XoKdQ^~Fa1C4KjiYHOxv07KeMael>pA{KQHlc o8((biKYV=LI7LXoKe$0M?++C1KgqwRj8b^)Kh`u>A{8j$KijC30ssI2 literal 0 HcmV?d00001 diff --git a/benchmark.zarr/c/7/1 b/benchmark.zarr/c/7/1 new file mode 100644 index 0000000000000000000000000000000000000000..50849bc0c0e06943243b6bfa3ce61597eff1c2fe GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy0P%{gpiAfOKQ4#&IP06-KajjJpL!a zKVT&6@G(xdKMHIGvgGB{KZiVVa2;vtKOmafydW*7KX_9J_gIqdKSl_71GB-_Ke~Wv z*-qBnKUQQV0!-xVKYF*+M%23GKP+g{Fw2(AKLHucGlrV!KWqo%4pPq9KWsCqiR1Lu zKf)>K>rKYhKWImZ$GJq*KYr&M1A7YAKhT3NG;pZ3Kax(HMYww2Ka?FNZL2BeKcHjJ zB)%rIKUxvoS{Yu_KLBf2>Y~KZKh&%}GK{9{Kb|+66v^o5KbU=LimB(iKL8i;M{Qum zKR{|61f)L0KcL7kAQ=0nKU5h#3W>zdKaz(@Y&z)bKkL|WLI4WwKkCo-`TJ(zKlS(f zYizscKV)P>9k}t}KeRT4t74YLKjfT`R=3vWKg81(R({^kKh$km3NF*ZKXkAB5*S+N zKQx07-xsUcKL))nMMNImKS^52d9u#uKS%)MwopdeKg>X@ASd?NKO|95wyl)TKfDJN zoSXKeg@OKhM#idZak+Kj7^93kK}IKX4A%bNlGPKWN`? zoY5)ZKakO{*gP`hKX~O&K3nCbOKd|NragKjJ47zkD3vKTz!D{k$*TKemnqr)(SGKk#|woFZhiKa>l%v9Vj(KN#7# z;7fh6KU&rqAN-Q#KQy37OG13mKmTi>zi*G_KU6!Y9G7?BKS15WF?M$EKQ5217&2tk zKaj1bm9#L^KisLbTh$ooKN7Dv&{OZ)KeLwJDtck-KUu?HO#~3_KbfqLBnYhHKRq+G o8-cd%Kd{rIJ+Q90Ke}?^8glsWKeQUs_gQ4)Kh9MnM%nx9KPBCqUjP6A literal 0 HcmV?d00001 diff --git a/benchmark.zarr/c/7/2 b/benchmark.zarr/c/7/2 new file mode 100644 index 0000000000000000000000000000000000000000..1c1e3981573b662c2b3325c5f7a46f3e8e45e22b GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy0CWI$kXDN3Ke&c*`d5j=Ki`Qd0SUP4Kd4)%7IEd)KjILu z;?I2FKO17f2}i}_Ka1H0*i2^ZKk5Ur)w7`4KVw^k83!)lKNc{omjCtBKU9|!7?L8^ zKgfjHA93;3KRT{k@3ouLKM=i1$%b2}Ke_TH4fgcyKOk)B8`ONeKkBKG8~EViKd0tv zb$&PCKk2*?9LIF#KU!I1flt@qKai2S4x6m7KN&raNO~*kKL)Ru%oo+^Kd{h0uPa#1 zKU}2cI;%m`KSaS}$5(vdKl@ruuaj%yKZc%~$aKL7_xcgdpf zKTc**3B1JQKe9)#=AgOkKZ_&iQ@!KjKX~V$q=ksFKY)=7r0T$uKTi5&P@n+jKd6jV zI!|cEKN|p@BS`SzKVWh9p5Gn5Kg@T&j#0hkKfCeo5A@pOKL9rmI|D)OKj^Gi!e!aU zKlWZOHL5n^KLE<6czs=hKYm%5U7E7&Kg^AG;Wg;ZKR08ojY>S>KL8Tkl;--hKPIDy zeN8y(KPUiGY@O}rKM$k<&!NieKhpCbTK6gKKWYrnUv2chKhWCDG%wNCKQy)3nd@ciKhH5?eIOd?KOb8S o$yRIRKeB$eYPQbOKWF1$JXhxAKM?QYNbt4oKlEn)I9u<PUB`$m=R?hh-@& z$&ThU#AeId*2`M0tn6xQm9|})B<=V<4>wd~GGI4;NjrzoDlAtv<>}OH?9wroRqOQ(2%-sMPaA zb(l)YT}cymLlWLepJq3p>Ml8)%+!IDmas|^(t!%$u`x2e2N^WI>EUk!Dsn4JKG$_& z^&Pv{zInsAQ})xtizCJtKhZLWa1gCaq*rC^8l+LBUk?Om;WM61W;uCuk| zM+Rrx!X-F&V{0v+HG~LKWEgX}8REHq+iq5A;CVT8)=tJZ?4WJ@!3rCKU4AlSac(cD zu>mpF-LD~V{_ynzYXm_`W!})P5op@x&i~_SfPWq@QEpP;qC$BoHm3nzyHc}Vt;4uw zX9kM0z9D$Dx@qwY3mEJ92cvmLII-B?bv1b)C-iysN-cOz>!kAebE3!{>4!X zGi-2X_*gj$49LH&Q!V@P1*GfS8(Not!l$gHw*|>1=xz7rg(PY)$!}UP)vv|259MpU zlMEpCu=$j~Mi5KgrH(m9oF)-A7U^UlB>(2NWq(9gof~_@j23X5u9}$&F*cthL{kcy zam6=z{R{3edX=TFZ;or>I~GY#b2CCH=phCP`q22KE^6%TAQVNV?^cz`AzQc8!?0U| z(0eM)tGz~Kol8jP-dBOu*gUHx!-!T)H(iTVL+ugB-4mn+Ew!A~w!#K^rSFO0%@zUW(w&e5Ud0MFbr^)@a3J~+FPS?Z@U@hfkX69Bs{sVjun|A;J literal 0 HcmV?d00001 diff --git a/benchmark.zarr/c/7/4 b/benchmark.zarr/c/7/4 new file mode 100644 index 0000000000000000000000000000000000000000..c51602cee1b43398ad150b00177ecea825260d00 GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy04(jj>y|IUKXCTA65m{@Kk&=JlzF$mKm62LG-*fFKPbEV z7&kS=KRTK)kqxTZKLBVR+GDejKTy9dfn1QLKQjeG5--K=KRSOhswj2bKfFbV>ut!v zKWH`fIm@x!KXC1N_I^_5KSZL{eR`HyKoD`KUb8{#Y+zDKWO&FA!C@?Kbqsg z%(l+kKft{=qzzcbKRg(Agp*k5KWK}*cpdWXKlr*;QTxH}KMT{q#)QA*KlsOOFouE0 zKj2pwaFP|cKd^i9lyXMyKSqgol&9g~Kd;0g2VI@+KZPUqi=R;CKlsT;SP$sLKd5=G zG0DEtKN~X^+!OBXKbbTz^XOphKY*<_R@`!UKSgEZjeZE?KfnVhjpF8wKY&8LD>qPt zKLHy|(Fb|zKV<3?+;%$BKNfu!h7YsmKZpW>>*l4uKiu^LuCl1hKbUP%=a*Z)KldaM z^P-vJKY+4`_eh(JKPsS>sh?!+Km9BxUe#yoKYOgQgW-lRCRFgKX$NyU6sPnKdse4SPWg@KN{GoD2Wg3KfsNI_2vk#KVxhz zf^4GeKQr?xe$L9^KSmLh0lu*9KfD9^2}wZRKa-1b_JcO=Kac=A*}j#eKLDgxFXK{?KV%Vz>j-7QKYIo`QmjAe zKMbgk^XCcAKa`BK)U3?QKWrZQEDkKT>csF&ozFKg9Xsmv1!TKbXDc5Mx)*Km4GA z^VG@PKg`(KhD7UB^xKzKal$w9&4@ZKb)zj zqX&WGKLqwR`EbY9KU6DUy58NyKcZ9pN`$!CKM+Ka;;-EHxqKKb9h4HyQxf zKU+CJT6%};KLOU}1NDC7KXL;dvJSQ4KbG42876e(KNGIZWOL)^KTQwByz3C>KiP7O zXyTveKW}v@tw*KX#yZ z(kfu-Kk7AFC1CdKKdR=ngKyH>Ka6KZIW}s420+KWLW((KtxSKOwb7s&8EHKU%6JkxD4rKfk~ue^9dTKi)EDe+kUo zKV-sVerh?|Kd?TfM5g1=Kd_@gL->u+KS5Wirg^>QKZ?l6bhn7zKjunnIJO(oKTAY2 z`h1`4KV*pOa4BBiKTGYmUTP@oKj1SwjS7S4KS_l>G(S7;KX*?_F9G7^KTz_ibq?5} zKYd5$CZHzcKST(cEJ;MhKVWNXAHz+)Kkd)}_Es|GKk=n9y0Px!Klp!@ZvbJ;KaOa~ ooq6-_KY*t0P=KzuKQ1c~Y@clDKWh3tJKN!bEeXR_)KY;S9 zY{nUeKkkBSk6CiuKhQRbu$R}%KZr;++UcUhKcq{0>@pS1KR7)WPTKUBrvsn$2g zKc`DW1(0*^KWv(HRK_;VKdF0KkOUOrKQKmW+vjboKXk{x`^^&6Kju~zy?levKTxh( zWz{L6KlJrDLe7xoKOPTdEpJNXKU(T!)sbV}Kh%2Z9G1JsKdfbrqesf(KVUPfG?tFZ zKZp!;4OrsqKhBB)v`#AGKSawG^*hYWKg|+DE7E1ywKY*a)dIzR(KYhQE*Z=?k literal 0 HcmV?d00001 diff --git a/benchmark.zarr/c/7/7 b/benchmark.zarr/c/7/7 new file mode 100644 index 0000000000000000000000000000000000000000..a1038f337c58e7095a0ad55ed33bfa610045bfa1 GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy0IZpqyXXz=KfTQc8}en~Ka3FqHW0+aKZ2@>AFEXEKb&#~ zr!3FmKQoMB+3mjNKY(6_6`V8UKRL@;`G7&f#KQ2$SN8NznKbfT%RI+Q}Kaf5dJ+b2EKZLdz%3R>hKdz|mfY@&0KLOEHAiu5Q zKgJ5MKak~PU4B-%Khh=Z zqD;)=Ki>LO3C6PGKg&e55aPz@KXppjO;&a5KfJOT3pJw$Kfv)-sahU}KN?D#s}O3@KOW+7l6s{KVS<_weJPfKX+}Y%iePCKiQ^()}A`;KPFe9Zyli7KWdmbJ-YSVKQJ6D z2+6O`KUM2j%@T6%KO|LL`G!!#KM?n#qAyg~ zKgeT(RNFh|KcE4FZh3p9KS0YSa9(}qKkE7g;4E~~KZ{AqI-Y*%KggxZYN?UCKX{^s zy)Pu|KU$CXip;0rKUv~~*P1fuKirutm_3okKl<^ll@wUjKb#H|P!^HkKa-GhlN(d+ zKSn^dH4UcFKZ_LK`kYSaKX7j9=xS=sKV4M09l-hGKQ0R@Bq8nAKh652yX^KLzV-E-VM{KNu;3t_&x+Kd8dQ*7T3v zKLh*i&zMQ!KW<5WM%S|1Keu{EEHC5YKU1V_*l4!mKXlXS9p0$SKNw?IWXuZBKLEJT o%Al)XKbJ{6sYJBoKMHq)$ literal 0 HcmV?d00001 diff --git a/benchmark.zarr/c/7/9 b/benchmark.zarr/c/7/9 new file mode 100644 index 0000000000000000000000000000000000000000..7dd7b85d0a216240f4cbb3aee1e855358e5c0f41 GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy0AbzrFw0QrKiSs9PdT~hKiTi}7#z6hKilM}^aY0JKm3O3 zbifWq zKL-Na*&q?&KX8qiCSX^{KTtO!x%xooKj_7dnBe{3KUTnj%2uT7Kaxb>RqTV}Kd_f% zYilU!KY&@OrQ;~kKXu30WH+tnKfc_qy_N9oKQL6*;NH)=KLB{4tU5MQKU;WbisVA% zKhTfxtCPj#KWKx_bcjvjKSR02LJ?NuKbe}vD!*FlKk!QHT!y};Kj`WGU*tf&KWOz6 zLMzj-KW(_&uI;nwKccKjt|u1TKL)$^>Q@5dKO@q4=VyoNKNA7Bhg<~fKf}IPcv=JN zKgH99ps;%6KjmHpTiEdDKX41mk#9TKKe#08Od)8`Kco#SAy8H3KaT8Nnq*DYKe_9} zngL1gKPz1X@eqRHKO=?7!+de)KYnAUi>2t`Kd^`5inCYXKY%!BYNRxeKVIdFR|A*t zKS5mdFrEkPKbJy3m4LYGKg3vI_YNuPKTy1Ewk@66KW&wJPX5>IKPXAl8bTfKKRnAu zY*WkHKjf&igyik%KgjZ!(GE=5KaBEpZ8ERgKPIYn4@Ac8KfzwpNEj^dKgdO6&(87FKk(Lw=Bh!*KlKpo;<0q+KTZ_k%M6q2Kk#n;k~ZeJKcG^o z_9n29KbGmL8Jhm?KWjz{9Hj2yKhbXxE;~KwKlrXF!t)HuKL{OPCXUnRKj5XRPWwvN zKL9X)?S-hIKUBnLf;WQ1KMW;;G1O-7KVGV;5$C+vKj@!ozSf)GKa^H-`9b*6KbL<` zUR~elKU53yu^FG`KOF|UTKPUdfEJW?^Kfnfkv)bO^Kcp}= o$V{}!Ka?e(MjWx@KQAor60d*jKT&N(K*$E{KmXGtQ##u2KZu2>;Q#;t literal 0 HcmV?d00001 diff --git a/benchmark.zarr/c/8/0 b/benchmark.zarr/c/8/0 new file mode 100644 index 0000000000000000000000000000000000000000..4d7cbeaab58e621eaf26e98f6541f9ddb6b1c04c GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy09?)%XsXEMKS=KSsB_X(0&UKcYfDw$Q2TKe$uWy*fzSKahD= z@Q-n^KhXR?s{CxfKc}ZZy*u>oKO1z6Z9~WIKcqIWC5DaaKQ=-_6wR~RKi#b92JQOo zKO;Ed*eQKPb;zpMw+PKN>}8FD6UwKadr&JI4IpKT}V1emDi{ zKk&0^$Ir3RKW?bB-Yq%gKY*5nl6M?^KQBQ2mh_n6KM{cC^&em6Kkz>x&OM2>Klf)G zTookjKXeM;c0p9qKX7cNEGqAzKg@18fmWvDKTt7#c6v*#KYVO2rShlDKi|mqJb3fv zKinPl7CcGaKVU)eOIh>YKOjiwW+7#*KMcLK2xwZ(KZLv1!nLN+KMKW(K` zP2IfdKa^5UEbB7KKhPP;)z?1EKLd{(inXBZKg0}EdZBN`Ka3(H{*_|TKYeW)cX5^E zKP0ZM5KQ03Kl0;_sNz}UKUG1Z?Fee+KaPOf=kCYuKNOMpQK9JRKY$$JGM7ZmKU=v< zP(Ux|KXJzZomvazKkC>>;3g;HKj)%_bk0cVKVK+FV=u+yKir`$g*A1+KOFOygG6A! zKXjQ)j+&y*Kg0Kw(XJQjKcEzxy|G!xKc-I*;#lU=Kku%qm{OJIKXhyJld7!eKR>Y% oMvSKCKVo)1k3K!(KQ19b-4%KZt#D>Z>5* zKY4qnmrwcOKfGbJzjTemKcM6E;tX7wKfwDq&4^^%KR_@3ytMz5KY;n3L;pO?KQ`rW zr9E-iKj2$`;$jx)KT~V?npbAxKRjuN4#`XDKai|RgIP!GKW*-KX`0yYw>;K zKQy9Wme;PwKP8`;G1*q?KUfd;s2)1PKVamb{P(=BKOORXM+j5lKbq9T*bdCmKdu6b zH)_G)KdF=N<$}ZEKS}~iW=p8hKaLa6&aHs!KX^OrPWpG~KO0v+_0j(2Kj6};EzuX& zKO{LShBZvhKa!?6EO4vgKStZCJijyLn_KiBzDT4^HWKk9Y#s7yH0KM*|Bmnwy_KP;Adm~|fB zKLlDM?`rwSKWGNdCEvraKUL1Voc@UIKlnBT+F>@dKO$TPZX!m}Khl8__K#5DKWZxo zMDU63KSbrlZ_aq_KhN+^n}}%aKMw!Rz$r7}KR>XfuZYm&KU_|G$DFz9Ki;7M2$+D= zKV&uLDnQ!hKTaQ3#7%XKS_i224+g)Kf_~YI8dbMKla4clva`1 zKgj+i3wPbxKL7(HBkF^QKbSk}a3uKLjRBYK9@?KY(tV(}TvAKRdn2YL#r@ zKd(HU1n$q}KX3_$SE9_bKgxuQ+kaf@KgRamN&LCfKe*7okTv(yKhTbnTwzL}KN1;J zN~@aCKOZ0laX|#-Kiv0NLmOPYvTIcKTsU=Pk^rDKbd`8mocR6KSDB%h0>+fKU7Yg6=LkfKiCLU9y%(vN-9KU$%u<3L30KeSS# o#{uc=Kll_2kI+rHKiiNIbE*^OKVGT%Dxmk%KL|;LxvF^OKSvjrIRF3v literal 0 HcmV?d00001 diff --git a/benchmark.zarr/c/8/3 b/benchmark.zarr/c/8/3 new file mode 100644 index 0000000000000000000000000000000000000000..265de240b31b9f7babfe80d62df3b344bd0b1316 GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy08zGs#G$S0KRVX%Xg|5qKLqUZAD`^+KTvcnOkf7PKl$w# z_|hEUKMx$L0 zKQ5`ttFOkogq-7*KS^kFu8lP0KRKNiUG0}MOoKl6Lcw@YsCKe+9x*oSuRKaZzp<6xTPKTw{` z96bH%KkpwPS@k&LKNyc#18m6CKNtqXbAh(IKb#Wb1&x;DKhd5ChUp~YKf(bLEi$&y zKU8^KD5ihiKOejYf-ooPKYyJkvQzHiKUbF;)=MknKNe+N6gh_GKX#;P+F8EoKY3bb o(7W^GKlG@CvO3q(KN6}B>YU8oKVVT)Fr?q)Kay_@Qp{fBKUO80ivR!s literal 0 HcmV?d00001 diff --git a/benchmark.zarr/c/8/4 b/benchmark.zarr/c/8/4 new file mode 100644 index 0000000000000000000000000000000000000000..a62210c6a22d9310b0002a4072d9b6ade2b99065 GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy00BUtI~b4VKksl42!_w;KfM&}g!v%hKU$IQ>if{zKd|FQ zjFLU-KbU{hKk{~#Ot;Y zkql_vKQYR#UX%aiKPXtffC6^uKfvGtOnS(WKWsROQ}y=4KcFBz(u&`hKYgTaPqk(4 zKWBn@x}MtUKLBu%0`TRZKedsy%b2<2KS*Q_KlL@$Kb9@z!befwKUjZmUSia>KUwGK z{lc{AKWJbU8i$k3KmRjK;V|9dKYnj=K#Jn$KhPHZVzKe*6XtTs~RKTZW!IEDe(KPWrlI7fTyKQMqHzw<@FKfFDUhMca$Kg91yZ1w-r zKR9vZ0xALJKYEOKg-;OMKfJ4!3#Q=KKd@&ko!jZ^KW@3T*yw4{Ki2kZr~;SJKip7{ zKpkJpKN^O!fAKKk#;;aWY7^KQI~tRBYU$ zKbU;Jo9+bfKe3m8rYQmIKb)Re&W=FFKiS`(_epf(KlZ>q@Fq3kKj2%{&=<;-KeXQo zoPf*DKgg%k6GSTKKYGHxpr~@$KYBovPj1%HKQMmZ00qv|KTs5bzIRdMKTIO{XnkVj zKXk#oh1b&AKRolb0wl@KKVTCuAfxo=KW*_A@NtUiKcG?vfsVh+KiEyF7UnY4KMO}9>t za)pXedMrKWQH%7zXzR)KTm9Cy)*5lt$m8=Te1g<#r&H)IGyEuxLh8>VGl}}zMO#C; z4iHHlO#^WS*zLwQp2-<26Iti0-j1NZ)Zr5lbIaBIt9 zZ_PS8)PYmUfwWN=I-?S~0ah$y$mdqL>k#VBUl6M^LtvGQLt6>xD%g*0LL0pDoU-Z9 zjYz7#u-bQ)9m-&5k%BRV`v=R#;U`U4te`U~dI##_VP^VuK-Rb~K-KaNFX=foDVr{% zrqIWJk?|gB(b>DUzat@5N$P8^%Mp>UZc92jj$zi9wiPKO;PqwvFfz>0rYF>$eQSjG z#{7`P?+*AMUi-4Wbp*1zQYD%57G>^p3w`-E5M2rR%a0Bq^fS zlLp$bil@d4P}@OGa-D~i)g2BnHo zM2MK*)~HCZRvL=q|9_PS_uOd7aDYA@nIY;kLc(=<{YGPkj4v3U*r~;$$Gz-{=RJsM zTX;UEorEy_Tma`+7h0p7X*a`0;QxEncfLW7%4)XAn>B=kjMEWH?hvx->UpW6R}eo7 m5CIHre_!gd=}+VKy4WRu1K literal 0 HcmV?d00001 diff --git a/benchmark.zarr/c/8/6 b/benchmark.zarr/c/8/6 new file mode 100644 index 0000000000000000000000000000000000000000..d7fbea4a109103110491b83647ef7d3866de5a48 GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy0LU1bX6~-MKdEnct#}mTKe#?HEFtZ;KdWK9?!5KoKN!JM zqzq2hKTKWt{AvcsKQPJ3nU$NT@-`oKWb{3&bjj0KhR{{amxqnKlEyYuGgaCKVXZ@ zlV8WiKYNYV)jp5nKQYoIW`;K7KOb{^_AuY$KL%Cy)McgIKm2gG_NLJ9KiKk+%C;ui zKg(w6iNX_Kd?T#hUoFsKfdRjea1uXKgxDU zi%x6aKi64a#6D;0KSJTqzc^9vKV;u>4*`1UKd>8q3nV_$Kj5E`Io!LtKVBNsWdott zKTw%MD5IvrKLPem{~Ji*Kk2C#X=Xj_Kd2*jG}{-$KV)AD)B4oOKSeT7HqzJOKX!I( zf&Q%3KiYM9sMK=oKQIm6utmz`KM>IWEn}q6KLCj98eQYpKfp)||K4T0KQyBO$>KlnY8wkS2^KN#*$<&~+?KQI!B z_Yyg^KLDlu@mt56KVSq7WRS_oKLjSnI?5BoKcr0QEK~o~Ka_eUUm{=3KjcxJ28v6{ zKh~|1E0LY7Z@lKTuC= zO&&4CKm5}dV-RWPKby}-!9Zu}KTSN$&dxvPKVqmZeyt`KTa+>jtY?OKRvuC;S0FqKY%xS^L@OD zKbKH!G-BW4KfzqDoy}3tKL~07xtlf6KZy3%Ex%UZKbTKf=P7CF zKZ~)kLpjvxKU#xUK|e#|KRAYHv~^3$KU=K_^Zg#=KPA_8Kalyhdi}KFKcF9oK8UZ%KMbuYUrr;%Kcw<$P@4MZKM+htxKhgB zKLG#2ZD^O0KN$l2KbUMED#dHFKOKx44J0RKdEY2Lir-*wKei9g zConwQKk%>cXiPhxKjoHsfm}P{KadkyxJGNKKR#Ui4ju>OKVY~V;^OkpKdDKZOW6D6 zKa5Rw+ibbjKd6cfbj$zEKi~j<4cy13KYoL22@&$$KPrDm0AE(`KNgcLmvp(-KeI_f zTA0AD2`12Kk7GoMO^FJKUS7(eWCNyKl3-!1V7{HKX~$KS(B;eKfqF1oCo*sKU^bh zqd5GKNnznE`qb~ zKU;Xmq~=)VKc4W;DaFC&Kip@&?4LZ%KZLp_KVfjNyH`5vKfw0XCsGHAKU3&~=Q2g$KLCSu8VsMyKO=v2d(U*?KPtGM;0j&c zKNgB2d=`?|KhW9+SIN`bKOj|}h3P)WKU8dLvVHv1KP+?uIWE1&KU!bC!Oh0zKTwRP zh;0MMKhn;~7=_O7KS4*Cp{V!dKQdfIiq&l8KRin^&E!nmKd}B_BY5GmKR`H3_gv@X zKUAZqvwFnFKaP;eol!mSKTI*Hl9?ylKcSa3FZtKW$!hrb-CzKl}qbIt;bZKc<^v0A4xmKa?3x+8#ye zKS3wI{Gk}>KS*Fn#G5tSKTITHYKoHIKUm6tzp<3OKUiUYoc%VzKm305YM%APKj2Ru ou>@nGKh>fE0R9){KP+_0=l0XUKOh5Rgu>R4KkRfRxh=}vKMLfQeE?6SKQwmXYjFX_KR^~5 z!2_<9Kimixi%dAwKZ34f3)aopKR_H-RZLUaKL}}dVWxV_Kg1)p^wizYKXNznbGm=h zKVfz&YVAJdKP1vB>;jO%Kh_8w`*vySKkfF&zG;o%KhSk35$((FKOtzqpJV0eKMAa} z5J2DRKf~XOy|}gOKaj%089ec9z5>8KUHzy$@CHIKL8X!bBu7gKd7d1vQIC{KTypTEaCO*Kd>)T zOo1k^Ke#&qUy?@TKTM-n>>_8uKiDee_;(H1KPL3M%cZ*1KRYGb%s6l4Kb)s(>Z{1b zKaS$Vr`I?KeoW_lHYmQKctBs zs?_DiKQ>i2qxJ0UKa3(_U$oEOKUl1M6+SbvKgb^+2k03s_ zKRQB)|f!zKcF0hrAkt$KbEeJCyp59KlEQL zNKI1dKLXe;G2}7nKfosLOoT@5Ke8hghqzkhKd72ks&DAgKbd=~T@NztKZGx!t5l%i zKhSQZx+= zKOHS_;RNIBKl~{hEQS&6KcKijL(Mv=KOrO};-t&tKfhT^P#y5(KctZae?xukKNTqO oP)tteKj@J-1ckoPKLB@fG56lHKRH-Xs#po?KhWk6$OZQ5KVxKMW|^Y;TauKbeIIJxCGiKSkOB+va%eKlDD1FksW) zKXG=KD1;T@Kc6j%AO-sDKf~v{JSvanKhn!I>x{4CKLB5Y29Mp>Kj1MJuU8t7KgVMa zhh<*vKb_uj?9UkIKcgh2+#fgWKkt=OT@uOVKNk(}xA@iSKh((JH+PKhDW@TU$=mKLjl>yKN%Z zKa!4{Poq=bKc7lmJG)QlKUSgNnpQW{KU+_+)%+dfKR{)`WRk??KjvRnFOVncKTy8+ za#-!=KQz9@hU*T_KdzF`T0D>KKbV~9LL&0cKkf=k2x>p?KUj^w>ZFRoKk3QDH#y|u zKa%|1dOgMIKh!Ix=MvrHKalbd^4J{eKU@e#M*}CrKR>(gMdE?&KTvM_ZvR8LKVm_l zo{hKOKfr)qnsyeZKY&kIDkBD^KSL#PxF$H_KP)F_y9Z3{KZ`wjOGA3+KV$=B2EXFy zKVmP0p-+Y9KL9n?B@Zd6KkQiH#RSK}Kcbp{o6r&3KPbjViI>9EKMFD@o0|9LKQ-8xi~s-t literal 0 HcmV?d00001 diff --git a/benchmark.zarr/c/9/1 b/benchmark.zarr/c/9/1 new file mode 100644 index 0000000000000000000000000000000000000000..693c57af111e83ec3504fdffbe5f00869a69205f GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy0DhksraKh&L|ezcL_ zKLiJdj(6PFKd5&ll^|>AKb?d(EF8GyKeBRDO^?mcKPoa&=(J$&KhTY89*h0QKjZ^2 zc+EY|-2yM|KNc7zSQz)}KaOC= zyl;5hKP=eN#W8xoKUPfK|3>58Ke~pNFw?Q@KgzZibHgg(KM4Hg2ZpxMKa9S)@HD;G zKcLmCOe%@eKV0p`yo@y8KfbdPCKPe%KS**7S{>`jKUDA-K-Kidt4xLRi9KlmSK3G$feKMa5+_0jbu018;KgMwJbvlKWr46;sH0w zKbPx0UGRe8Kg=qBZ6wRWKVtG#RXl;%KY2o07}p)|KR#%KXT8AeKL!LoJJI~@Ke*r! zRvt0GKQP}IoYaQwKR_Plk_pPWKL{ajT2WHuKM3!LV6uSKKe}OqLtn_?KjrJ!#G&fp zKMXV2Cdc~aKi4h<{;`4XKS*|s1)s6lKeK&HKedJCKYkmV0FBq#KNvxTS$1gMKbSSe oGx@_PZh1Kke2cWV1-`KgZ+JpD@qnKM$sq(f|Me literal 0 HcmV?d00001 diff --git a/benchmark.zarr/c/9/2 b/benchmark.zarr/c/9/2 new file mode 100644 index 0000000000000000000000000000000000000000..91ad43f1958c3fc7ea09f4137efa425d4d13cdf9 GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy05mq@1BWQhKfy(yWr?xpKQ^71A{)WjKl4DL(-bx3KVazl zBDpBBKaibVwDkL-KWwL-6vxurm(dA&bKgxqcRju>UKUBoUXH-|oKMV&? z%OfuDKZpee8RDq3Kf0E50O5YzKinjN#dcflKl}lM9-a=~KQLkrJ5RW%KVhFLB9hDM zKmLe?=>Kl*Ke@G$fGpDNKMpIrEzlk2KP3MbR{^l(KbQFBZu>IrKjvj};YZlhKeS28 zDW96{KW0aG5bJr`KYT`+QI{*lKNjwMRy>X1Ka*C?P|a28KNlArJ)bb?Kfsf79BomO zKaP#@F9E#JKT=r5a2WC9KVQ#m31S)OKVa+m`47&?Kft_^|8bk$KeBtjkAgAcKh|(c z4`vD1Kd5|JMxTKPpekF%FX2KR%dXMb3HNKNt~A&b+g`Kde4_bdqSw zKay(vhMe^7KQta(4Mh6sKY(Vp-9$8;KY;Vu+&YWkKR_6{ckI8aKV)}%2I`mSKksjY zj7+cQKR^O5GjaKjKbNJ8fPbLpKV)*X3Q8u;KhEuLJFjutKO9qgmUETJKmPn%2kaNw zKfcX`I!vPEKe(QN^-G7-KNj(P&(et6KiUiXEA6iDKT7A{{>viPKVI;^#`37xKj(Nt z#-Kc@DSumAu6 literal 0 HcmV?d00001 diff --git a/benchmark.zarr/c/9/3 b/benchmark.zarr/c/9/3 new file mode 100644 index 0000000000000000000000000000000000000000..0775d97144032f9e58d168c0af863b914c721dca GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy0O;^?>~BD{KeP^{TBY66KY7bA5h7pfKe9#Aob~V2Kkbrl z>{BA+Kfb9^H1iSBKVC>^s7kNcKO!b2PQ%RUKWgPaB)-n>KX2!eH`%Y}KdApLi@2rJ zKlTh~^EbEbKOiEMlFL2cKjhU*7DvU$KcJG7PVSD8KOpd=D$a7)KhPR4spV?zKlw3; z2Q47xKb9+&Sao^cKg?Q!xHQ_xKk~2dwiu?=KcZI0tlA;yKTq}d^?*X)KLEFA7UaLc zKZtWGMN*u-KV@uw94}buKNcV!Xe0LEKg=V?f*MfkKZk-Lt~3|rKTr0q>^(N?KfJ5~ z(SH)$KUUX-3_|(dKQOCjEICf@KZn!)KbZY8#Q}`HKh=e}gcn8NKj?--AyKWn zKZ-GA+$)dKPtga!#EbzKO=%Bw!Dt#KQ2GXi3LH^Kf5a4-|@lbKk&KPx4BfkKhDCv ov2#t-KVFBU!D8d?KOGLEYtdQmKbK%p4*})wKT1SiBk&y4KRZjA`2YX_ literal 0 HcmV?d00001 diff --git a/benchmark.zarr/c/9/4 b/benchmark.zarr/c/9/4 new file mode 100644 index 0000000000000000000000000000000000000000..a5c121b1afd5f79c24e8c4cf922708acab14fe65 GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy086w9@gUOSKO_&(Qtb`IKU$w6ZFzd?KcpK>d^z9VKQMo_ zMC6^RKO}vx6syV5KN;{2B}*OQKY*a@d}Z;xKU>?k_oY+fKOhgV(FL@UKd2?|3M4|Z zKSkVDlOJv2KZ8`DyF`cNKk#gjTJFZ}KlEt`3pWbmKP-*H@r+^OKZ;qaXzHBVKOi7) zY{MAfKg@_-N-7n?Kd`cdAN(`AKXe@EKWA#>KRjPPc_d-zKPi`r$tAbzKh$_~Uvd`H zKP-KtHi1gXKmSyl?~U5#KTy;>LkNfKKWO#H%2|%+KW2$ekS>SVKUjFC21=I6Kl-*K z`-uJ3KhVO^^Lah4KYkb5ypJ5 zKl0haKOjKpg=3YfKbAP=FSOLzKN8>CRBvwTKOli!l-`Z6KjfqWUBrUNKb+xd)q=6( zKh)anL(wGOKR`HYwteTzKLErb>T+g7Kdeov!2`tCKU$dyr#bK2KWl?jZAaVhKcXzy zwO@AJKQvbopvMW*KTh#~_ev7bKahA3gAXg~KPU@T>i%@yKfwZbNsO@SKREH&92_&x zKO4jkTGPwwKY81WgbO+8KRm+ysdhowKlBX@vGhXBKX9lA?fN{nKLAf_F1r43KM$I` zYanalKfE|~;*2TeKl;p1gqQHqKT!B#)Ndi+KlQ?Mae++g)mKZTnNQ%H8_KRxf{0t4>sKZ1VhgzcW*Kjv}l;RlV_KUhE=X>fzfKUlpu oY@E}~KNeHM%Ni@+Kk{)F?o4UxKeW+(!LH=(KV(CiLV>uzKXG`NR{#J2 literal 0 HcmV?d00001 diff --git a/benchmark.zarr/c/9/5 b/benchmark.zarr/c/9/5 new file mode 100644 index 0000000000000000000000000000000000000000..d64d0c1ddef76b399ad4b2f96f631abdc99644c8 GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy0E{D3>%}STKWZ&YEQlc5Kf!khq9NnwKV77Pft3s4KOlxl z(0nE2Kje^L?cIaPKe%v-d6YlnKS9ieP@!w*KLy>A)v1c>Ka*8zv!~hZKa|1H@nvnr zKajQ4{SvaGKV`8(JWNUJKU^5d<)8e{KN(C1Hxz;EKX8Ox-$E0kKLDZ4=?~w>KL8u< zRqo?$KbvoPjo`K5Kk2{}0md-nKY-HpGxa>#KR~=6aum&%Kb$}W$dgOaKll+7wwrR$ zKLVX#G6MYIKcM)ul#D^=KdoX4;aQ*IKe8bFWA?w=KPa2xe@MXKKc#qCx3V1KKlmoU^lGcKTo&>MnPcgKX7Uq{C1qBKL}X?be~?qKY)FQOS#&`KLAb%m%nPgKVD>g zVJN5IKTs(VzxafzKcJ=*^gAS!Kf*G+?g`c5KbYdV-PZH7KM-^FvDUiLKjp(w!P}(c zKUekZqIOQ`KPbZ*n<=f?Kj>u1uoDy2KXZ>|#yEoHKR@_l#Di4hKN!ji8YiK;Km6f? zRctcOKRiEZa8BdxKlqF}`j~9bKOMx#5Vv*ZKmJYuEdj38KZr{9jU~|RKX?p?_3eJS zKQBZ4ZCjt_KhWFPzPv=JKV;Fx>9-riKPYbEQA%31KdvM?fi`C3KVXbMUhO@yKe`T& z-h-RqKj!bSZJK!1KSbMv2Ggw8KN<&3Nxi}9Kb3IlRtt#hKX|tP5hje=KbYA0EQ|QW zKLj#85&9$LKT=m!55TV3Kbgk)&5^O@KUf<6D@2^aKhqp-6>l8iKk5PB@K*@yKVUt? zzM?wHKT!Q4or7)7KX38HW>5C!KMKa_`Zjv)KhWTBb|F;eKY)%m3#})#KVTM@;CKnD zKjuI4l{m@mKjIQN%Y9qWKj`$5NNNh)Kftqg_dY(?KR_i~O^J4dKe4lIDb?ENKTedc olce(5KNdH%_lFSMKQwf3j@P%@KOP4_Dvqq+KjEFa{DVE^KMAgu2><{9 literal 0 HcmV?d00001 diff --git a/benchmark.zarr/c/9/6 b/benchmark.zarr/c/9/6 new file mode 100644 index 0000000000000000000000000000000000000000..75989b7bf648b3eed0c239c7c7f98f1bef605583 GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy06@ugdlt3sKZ-}PT3~nGKW8333>a?VKLOb)f9mb)Ka$a9 zKY9M@KR`va!{vwGKkwsANF|oyKMcONhJPx~KgKeLKt}iBKm5mRVPb{CKaP#Pa3%}g zKhJ4GxQQI%Kb3uC%(KVLgF7HCZ3KO}|x*Ll;U+KcH3KfIOnA|7PeKVDg-DY>TPKepqvRgjhLKU4XKG81m+KUkU3q#T1KLGY?8Kge|0+|X~~KPaONyso_0KZJiT!WE_3 zKeh$VpfASfKkAokNA>jTKkC9txm~K}KhO#IMmH^~KS8#r%D_J9KP(O^v24WPKVR<7 zh-BpGKm8x=z)b1oKiJ06HeRX5KTqL#omnd5Km4pK+o=ZAKQc!e4Tc5WKTtLo%KSWqa>9ml_KUzv>GG`0hKNyJB*(@K>KM04U9!}JKLB6_s#8i=KRhx-+{8-L zKi?bff!X-xKZHfq@Sd#CKis8jo=Du_KVJGf(R_u_KSu3?j{L{kKdh^B($RjvKXd>^ zO6~{fKScNrUA}(mKeuvHWKW^@6Y)!-2Kd^r({QcszKlJk&fiMBxKflSD_ZU3oKgNca7XSbN literal 0 HcmV?d00001 diff --git a/benchmark.zarr/c/9/7 b/benchmark.zarr/c/9/7 new file mode 100644 index 0000000000000000000000000000000000000000..6f07f085df47ade6641ee4fde93087e54a5227f3 GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy0AIt+po383KOpNHfnNizKQN~-)PjhuKN;vFy8-s)KXVOb zi{Y8(KjtX86%c^gKQ+Nc02IpRKm73RRo!RZKl9QK6+4^dKls|~AKKR&{}Rl6+GKZ_^j;L9oKKj1A13rwHqKafEX zLU}>6KiW9V$Pkg!KTuSJN|Er>KMCYrnWGHmKL&zX;mA$vKQPW7lI```KeEN~l}*LlKS<{+B&ZX)KPu5N%SONBKj|eR z@&8cbKh&=Kagd_#E@U&KmGhPA7DD{KUn6k^eblUKh$Z_X2ogT zKhOIfteD{HKl%CKHk_~HKX^ef6-ctvKXe5O`xQ>jKZ5Eo2Kt@bKQRg0^@T(4KPQ`K z2%1{sKb)N{ke(LXKX%qv(T>sWKkV!vSH36UKlGqeu8Th0KTT^Nz8`GhKfpaa^BV}^ zKgxB_>3CG(KPogS=!y{1KNw7(`2#Y+Kj;$kYHKbl-FO7jrwKSrVH9%{tlKOnJRk+c5Y zKVT|W_M->VKj1^yG6KgE=$lm7|kKQQ6D zqpZr>KdsJzd#$7CKa43;!5TfwKY&_;aCySvKNK)aO#KNCA&Cw6x4KirvaW|Yq7KU&ZxfSr!sKX9f` o0i*t^KbzC4I^gP(THKV>I|PZ;KPY|UMjwjWKRTHqyR0GLKX_2>f1fMUKeN$p zalpgjKWCz=St5(q~OipKaSdl%4(_BKTZy#l@gTQKkx}F0mw_ZKM*bfajGH1 zKLaq)G2V#mKOhp-q~e#}Ka!0BHWEJJKZx+TZu4#GKZqyWvc@9eKR~~*=gR7pKPNxg zUr3VaKavk^r1mN2KW8_JAAAkzKY6I7hboljKPq^iO3w1`KjX~9yj241KgiVV6fOnC zKUx8>P7_zzKTsT{1WXRmKmGH`v%=fqKgvWJj#RisyOPxKQ#BJDiy%RKN)9l zI5`;MKbXj##THh*KmIfAwvC+BKlD*R(IKADKcF0qHQLCgKb{Ifmu~srKQe#$_`)LW=KOhqq9$+WyKPoG`P)Xh2W2KfH}5 z#JEYtKk9rsdt;*GKN|f~iHZT8KYv4cs3E%UKNwk5MS!vAKUe_!NZo|#aKbRr*`5&jqKfpJ=g-15wKjcaHsmYk)Ki}*4J&s}EKTBjJ z&?@ilKOkM6&*}o}Kj2>R>J^NpKj~^kQsju^KNKftL+;)bY@ zKh%Y|gO+FBKO?T9wT{N(KgjFR1}PG;KV&P-)xCJlKOB{t-=iYvKZw;R3Zt9kKWN>J znTDUuKZresaQ=9`KN&HrtbqLJKZ#560y&53KllJt8617QKL9vTKoym@Kb+@j~Y`PcH zKlpa!>r~<7KO&t@(MAr`KR`;^9jt@jKkmLlrG;tVKP0VTK&_O*KP+@U^u({xKfa-8 zj!9VBKP~$<%3#{;KLDCUBwH+xKSZeoPxVUTKd|xIo8ZgOKZCs&-8KpBKiqkMe%{31 zKk~T6KfRumAu6 literal 0 HcmV?d00001 diff --git a/benchmark.zarr/zarr.json b/benchmark.zarr/zarr.json new file mode 100644 index 0000000000..56616dc366 --- /dev/null +++ b/benchmark.zarr/zarr.json @@ -0,0 +1,42 @@ +{ + "shape": [ + 100, + 100 + ], + "data_type": "float64", + "chunk_grid": { + "name": "regular", + "configuration": { + "chunk_shape": [ + 10, + 10 + ] + } + }, + "chunk_key_encoding": { + "name": "default", + "configuration": { + "separator": "/" + } + }, + "fill_value": 0.0, + "codecs": [ + { + "name": "bytes", + "configuration": { + "endian": "little" + } + }, + { + "name": "zstd", + "configuration": { + "level": 0, + "checksum": false + } + } + ], + "attributes": {}, + "zarr_format": 3, + "node_type": "array", + "storage_transformers": [] +} \ No newline at end of file diff --git a/caching_store.py b/caching_store.py new file mode 100644 index 0000000000..c59f6960a7 --- /dev/null +++ b/caching_store.py @@ -0,0 +1,150 @@ +# /// script +# requires-python = ">=3.11" +# dependencies = [ +# "zarr @ git+https://github.com/zarr-developers/zarr-python.git@main", +# ] +# /// +# + +import time +import zarr +from typing_extensions import Literal +from zarr.abc.store import ByteRequest, Store +from zarr.core.buffer.core import Buffer, BufferPrototype +from zarr.storage._memory import MemoryStore +from zarr.storage._wrapper import WrapperStore +import logging +logging.basicConfig(level=logging.INFO) +logger = logging.getLogger(__name__) + +class CacheStore(WrapperStore[Store]): + _cache: Store + max_age_seconds: int | Literal["infinity"] + key_insert_times: dict[str, float] + cache_set_data: bool + + def __init__(self, store: Store, *, cache_store: Store, max_age_seconds: int | Literal["infinity"] = "infinity", key_insert_times: dict[str, float] | None = None, cache_set_data: bool = True) -> None: + super().__init__(store) + self._cache = cache_store + self.max_age_seconds = max_age_seconds + if key_insert_times is None: + key_insert_times = {} + else: + self.key_insert_times = key_insert_times + self.cache_set_data = cache_set_data + + def _is_key_fresh(self, key: str) -> bool: + if self.max_age_seconds == "infinity": + return True + else: + now = time.monotonic() + elapsed = now - self.key_insert_times.get(key, 0) + return elapsed < self.max_age_seconds + + async def _get_try_cache(self, key: str, prototype: BufferPrototype, byte_range: ByteRequest | None = None) -> Buffer | None: + maybe_cached_result = await self._cache.get(key, prototype, byte_range) + if maybe_cached_result is not None: + logger.info('_get_try_cache: key %s found in cache', key) + return maybe_cached_result + else: + logger.info('_get_try_cache: key %s not found in cache, fetching from store', key) + maybe_fresh_result = await super().get(key, prototype, byte_range) + if maybe_fresh_result is None: + await self._cache.delete(key) + else: + await self._cache.set(key, maybe_fresh_result) + return maybe_fresh_result + + async def _get_no_cache(self, key: str, prototype: BufferPrototype, byte_range: ByteRequest | None = None) -> Buffer | None: + maybe_fresh_result = await super().get(key, prototype, byte_range) + if maybe_fresh_result is None: + logger.info('_get_no_cache: key %s not found in store, deleting from cache', key) + await self._cache.delete(key) + self.key_insert_times.pop(key, None) + else: + logger.info('_get_no_cache: key %s found in store, setting in cache', key) + await self._cache.set(key, maybe_fresh_result) + self.key_insert_times[key] = time.monotonic() + return maybe_fresh_result + + async def get(self, key: str, prototype: BufferPrototype, byte_range: ByteRequest | None = None) -> Buffer | None: + if self._is_key_fresh(key): + logger.info('get: key %s is not fresh, fetching from store', key) + return await self._get_no_cache(key, prototype, byte_range) + else: + logger.info('get: key %s is fresh, trying cache', key) + return await self._get_try_cache(key, prototype, byte_range) + + async def set(self, key: str, value: Buffer) -> None: + logger.info('set: setting key %s in store', key) + await super().set(key, value) + if self.cache_set_data: + logger.info('set: setting key %s in cache', key) + await self._cache.set(key, value) + self.key_insert_times[key] = time.monotonic() + else: + logger.info('set: deleting key %s from cache', key) + await self._cache.delete(key) + self.key_insert_times.pop(key, None) + + + async def delete(self, key: str) -> None: + logger.info('delete: deleting key %s from store', key) + await super().delete(key) + logger.info('delete: deleting key %s from cache', key) + await self._cache.delete(key) + self.key_insert_times.pop(key, None) + +store_a = MemoryStore({}) +store_b = MemoryStore({}) + +cached_store = CacheStore(store=store_a, cache_store=store_b, max_age_seconds=10, key_insert_times={}) + +z = zarr.create_array(cached_store, shape=(8,), dtype='float32', chunks=(4,)) + +print('filling array with values') +z[:] = 10 + +print('fetching value from first chunk') +z[0] + +print('fetching value from first chunk again') +z[0] + +print('erasing arrays values') +z[:] = z.fill_value + +print('fetching value from first chunk') +z[0] + +print('fetching value from first chunk again') +z[0] + +""" +INFO:__main__:get: key zarr.json is stale, fetching from store +INFO:__main__:_get_no_cache: key zarr.json not found in store, deleting from cache +INFO:__main__:set: setting key zarr.json in store +INFO:__main__:set: setting key zarr.json in cache +filling array with values +INFO:__main__:set: setting key c/0 in store +INFO:__main__:set: setting key c/0 in cache +INFO:__main__:set: setting key c/1 in store +INFO:__main__:set: setting key c/1 in cache +fetching value from first chunk +INFO:__main__:get: key c/0 is fresh, trying cache +INFO:__main__:_get_try_cache: key c/0 found in cache +fetching value from first chunk again +INFO:__main__:get: key c/0 is fresh, trying cache +INFO:__main__:_get_try_cache: key c/0 found in cache +erasing arrays values +INFO:__main__:delete: deleting key c/0 from store +INFO:__main__:delete: deleting key c/0 from cache +INFO:__main__:delete: deleting key c/1 from store +INFO:__main__:delete: deleting key c/1 from cache +fetching value from first chunk +INFO:__main__:get: key c/0 is stale, fetching from store +INFO:__main__:_get_no_cache: key c/0 not found in store, deleting from cache +fetching value from first chunk again +INFO:__main__:get: key c/0 is stale, fetching from store +INFO:__main__:_get_no_cache: key c/0 not found in store, deleting from cache +""" \ No newline at end of file diff --git a/src/zarr/storage/_cache.py b/src/zarr/storage/_cache.py index 3a9a1ee41b..a5a999d41d 100644 --- a/src/zarr/storage/_cache.py +++ b/src/zarr/storage/_cache.py @@ -236,8 +236,10 @@ async def getsize( """ Get the size in bytes of the value stored at the given key. - This method first checks the cache for the value to avoid - unnecessary calls to the underlying store. + For remote stores, this method attempts to get and cache the value + since network latency typically dominates the cost of both getsize() + and get() operations, making it more efficient to retrieve the full + value during size queries. """ cache_key = key @@ -252,22 +254,33 @@ async def getsize( # Not in cache, delegate to underlying store self.misses += 1 - size = await self._store.getsize(key) - # Try to get and cache the value if it's reasonably small i.e. ≤10% of max cache size - if size <= self._max_size // 10: - if prototype is None: - prototype = default_buffer_prototype() - try: - value = await self._store.get(key, prototype) - if value is not None: - with self._mutex: - if cache_key not in self._values_cache: - self._cache_value(cache_key, value) - except Exception: - pass - - return size + if prototype is None: + prototype = default_buffer_prototype() + + # Try to get the full value first (better for remote stores) + try: + value = await self._store.get(key, prototype) + if value is not None: + # Successfully got the value, cache it and return size + with self._mutex: + if cache_key not in self._values_cache: + self._cache_value(cache_key, value) + + # Return size based on the actual value we retrieved + return len(value) + except (KeyError, FileNotFoundError): + pass + except NotImplementedError: + pass + except (ConnectionError, TimeoutError): + pass + except Exception: + # Re-raise unexpected exceptions rather than silently falling back + raise + + # Fallback to underlying store's getsize() method + return await self._store.getsize(key) def _pop_value(self) -> bytes: # remove the first value from the cache, as this will be the least recently diff --git a/test.zarr/c/0/0 b/test.zarr/c/0/0 new file mode 100644 index 0000000000000000000000000000000000000000..5666e3c9cf63757e96c4b8b7449ddeef37bb692a GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy0KlH*0hVOoKP+ukRMv{pKZ0m_ELr8=Kl$aSq^M%%KQLzV zlzOtdKRf3mPGiyJKOqYI@xYbrKVU^>z_qBvKl~ckjN+@vKXlMy^@ml)Kb}j~$Kks;X2{QTPKRpaeq%n-;Kcrvc z4l+L1KLCGrcMl_PKTekGN9&p8KlNJ|(QyUiKZi4F)+LnUKX@>i@qek}Kgb+!TR^CKWI^(fkyM{KU!EV zMY{v#KhO;K1Mn~7KNc>WuQ$BgKkMk?*@&6oKk9A&4?1SvKV&g=#!uAPKf+KuoE_fm zKLu$wH`{gRKW27vF^SLQKM*tNWIgZCKfss4rr8>>KeC_T5O)pbKR6>79x~e0Kc{pI zx+x0hKeUrHASb*KQR~60tc_+KMEG~UQQC@Kf)oL_$sy2KY@+? z1MEHRKRnSm2k2McKY%01zW61qKLj>+4EK%hKdQH^YM-0ZKafe?O7|YNKd!4g#N6NN zKPbax#lX?mKaGhF62c+qKf)2gWNKeWB?sonkJKmC8-|GeApKL|fsMfB0XSqZ1+KcAPw zKXEmvhDciFKN`sW;*Xc+Kh%Q$5pt%?KPvjqsiY9$KaLkXwC45FKOC)-W;JEZKMY^W zk=z}{KfO93gfai>KeRG_>?v!>KcG1W%rsfGKlQ*}xadpdKW|S2*et~!1KV0|r9B(|=KUgr`H+ewmKPo*A_VCQmKd>z( z%X7}tKj1&BA$*>xKh#bO#vAd;KNhZRE=rmKmLx`L9&+BKlcB$KROKUXIG o8Cw_PKO`zXBQg@~Kk`T6(&LQoKP59yKj==vb(JQ;KOkRQdZ-4~ zKZ-*FLp*ivKk@Z4YOU$$KN#*!%DK|lKX^YEgmeZKO=i? zO+EtTKUgRKde1`XKmPg^-gJ7_KalVOnl`_vKfZ$m4B{^AKcXrP>cD2$KbDwPL`^c` zKT;L2cb%ZtKfpe#76o#=KP>FvCdbvoKMuRTdBB0$KTdg}r)+N6KcwKP@7jjXKcww; z*>d67KlrsSORA!`KagmSw5~L|2WfKgN{v z!PDyBKfv}26)7^DKZfR~w_ps^KNc4sht-tQKcE~v1_NG^KThJ0r}d)HKSb`I)=EOs zKeS-%=RLL7KhOQs89j37Kf(s>fi8L7Kh}e@S9QGaKh%1}?xV=SKaXKMwHs~ZKgfu7 zo-%IIKSJtq^?Iq~KR(XYhNWBPKS&REV)pjFKcH$jb(V~pKRQx+L6_IxKj4Z2_;?|~ zKhkW#Kk4k)Kl9IXB9xKrKc|n9SgW+?KlpMCR3K+Kfo>XBk4KMKe!clT<1#TKY16K2mk;8 literal 0 HcmV?d00001 diff --git a/test.zarr/c/0/3 b/test.zarr/c/0/3 new file mode 100644 index 0000000000000000000000000000000000000000..b5cff87630c93ec151cc6625aea2b32ea38de80c GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy03UjrpcG%{KWK5D)1rpmKcI&P(z9!>KkTl$G&i@;Kj>;r zGa5nLKcF$y3>-elKZcd9F(Q}PKN+8GWeh*zKRt%P{w4wAKdkk+viar9KX|?G?Kr32 zKk{H?31oTeKdpG3D)ENrKi#`t?E(qlKM`RJONaFCKcE!Fgt>*1KW0XRsh)Z5KLjci z$RtwjKUmO?L-E?}KUn%U$jjhKWHOJ+JW@eKUN^B9eX+NKSVrd#Rn7JKU6(*&AHUT zKYF7aDl~r6Kf=g2ce#_(KS@dF!V0D3Kco}Z%0>j!KkKnqTtq(aKT0RlI*sDyKNxd} z&8Eh)KM?523`dacKN$jnpKXogKd(hBE`9^KVeZ@Y%f#q zKc!lKSXRgV+JC~KOWrNb)B~0KesnU zRgcl+Kcw{rvNg2MKkCFb;#KO?KT#Bj!s&VLKe(wB}>`2nlKibNOehN3(KPXK&Scw_K zKR9{$uxtdkKj_qY(}U{mKfRIk&ZHsXKec3@sK=M=Kina4;YCBjKa3+;8&}5RKNxjr z*`y!7KR@TGI_qrbKSzp}3q!~1KR`n?J+)7|KR{T*!;JrqKZWl&g|e^iKPF#FRW<15 zKij!Z9Umj=Kh9O&Y9h$fKlFF?=Io)}KbrZab6m^kKkBhJ;jAKly){bqeL}KU%=W?N&C{KM($G7>-2lKMYlck{CS1KiJye@b^l{ zKP7oBJTpw^KX5~7jhztaKR+L^-9fePKPfCO`tY9YKmGr)dHdGjKSFBemv5=lKc-MH zbFTN-Kg{3pkl}*RKM)<-Qmsd>Ke(h!@>np#Ki9a~Ac#`pKh4XGcl~?pKOKYB=QeaLIa^KOhvj?O8UNKQyM~ns7npKSaBS#kV8GKO{Zfm#b9HKNK)1 zmok&qKN?o0BEHe>KWoKX`Vl_xqURKeV32Bn<1)KZ?Qcoh1h2KLmpC=SFel zKdaM<;$i0OKlXAR%zDw^KY+(~8th@!KRBe80t$o6KRfj0hwhK#KSC$?j(@}6KUxF# zGZTv7Kej_WkFs0UKO@ZziDUikKaqqigjW{gKe8$LtW$>HKccX)X$MB$KNA><2!4?3 zKiHHC_h2L1KZ0@{5kKPEKW>{Ill9u`KM{J+CGX+mKYJ8G&=suaKTatY;Lfk=KloDR ze-f^{KUFJ>WOT*vKR182&Iz9AKY-S)g4-IzKW|ROn6Q!TKg|~4Wr8K+Ka3MJ$v?c{ zKM**Wlwxk#KiIId_NS)gKMH#)*vQKUM&!(a3J$Kb>UP>loNuS0KLD1o z%o-kuKUm0y#o>s^KRBm5hEQd)KQuVZ{>rG&KhgY3ML(77KjvlqV#S`^KSn8j&CxL4 zKSAVT(tZHpKTRmi@)2m^KbSAzJM+!MKVp+;p<3CwR-@KMv&Weagz>KX?T$uC!>}KbCqgCZKdG|}TN{AvKQ?_- zNagwIKj6{?j0=^9`fKbGN3g=-<#KQK&k^7Ze}KSm1XdX0?hKah+y=vm{oKd?&%-agy7KNwdM zm5|W5Kan@5Vac)UKmD^c2EMN8Kc?fY6$J^@KZ)~+gQlV2KS19W7%VNLKN#jY0i$%m zKSxA-^n>c?KV&aLq5JvIKU|1g+?*4@Kgdj%ijLa5KZ*8!tQ5uRKZ1bhS5ao!Kiaf3 z;oJ7xKlF-QfSW|*xgd=KLi9W6d8!r zKUM<=&TnbvKLD715+qsMKct7)`I_k4KX7?y$_?tfKP^G#v9i?VKZpWRCoW>vKVS=z zf%NsIKj@tVyp<~1KPr$`uGBQrKlFKP*zZTpKcoSu4CVI7KgFKYLsO67Kkg?`a5k9f zKicNZj`iu?KiGeiCaMAIKZ46Zkq3KY)Jnr1z}fKhPyyNHQ(VKjU_rCERQ4Kc(cKivR!s literal 0 HcmV?d00001 diff --git a/test.zarr/c/0/6 b/test.zarr/c/0/6 new file mode 100644 index 0000000000000000000000000000000000000000..8e7efbc4fbf766c063d529d853fc2d4dddb459ad GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy06Ap<`k=kwKkVYei3eTPKaP@ z)pei3KQMxdV0ZNGKTeNS(R3)=KL7<~Ot31OKZV2X!wIS3KTOEc!O>^fKQf89NOd;d zKU^^(_XKmtKXnAgp@*&HKiCRBxCe>DKg=BQO~&xeKNF@8fU861KgllbNLJ12KLo?U ztOu*rKNzu&8nHpnKTqg*PCo(WKU}YE(2QNuKa(^`UKYx7NhZ`>DKP2ioui2T} zKZug0Kg%8sJc+pAKMpaVuFxInKLY(aTeM2hKY%$5IUoXxKd_7YJ7%-mKiAQ_ z8f^gTKd>xv5dv|uKV0knq2%P@KO%X2))>pvKYD=^#>o%qKcTh{`XTe^Kcc`k%ASYW zKdu=?NukZvKh9HrCF8=}KmHOuQKXO1KSa=_1Ku;wKU5Klu`2V-KT^Kpw&-cqKcMy? zF{fapKdy#InqBnaKZ&a4VJO$>Kd28}F)h8(KcZVxkljMjKU9bi8uV)8KVOt*24kh+ zKV0sK&dIINKZ;yQc5%h$Kj81j*;O9NKY(UHSgz^YKj7VEfikKL{|T!EPJGKlt<73r6U>KM*(}BKzr}Kfnbzdpz%iKXWlcEwftdKikBQ zdfM{hKf)8YW+8KL9eba1ILGKQV}x&j0`b literal 0 HcmV?d00001 diff --git a/test.zarr/c/0/7 b/test.zarr/c/0/7 new file mode 100644 index 0000000000000000000000000000000000000000..f32a75bddd1d2444d43b1438eec894b7bd7586e4 GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy0D}_g!xhr%KklHhTFzJGKO{aGTv6xGKZtO3#qPh|KRB#h zI){9|KXD6B0k&7_KVWGzz|3i;KVZZhq(TX_KkzIUmDsJaKdxLIDefZFKU~*_bdtZ% zKO*laCOLl5KiCp9&hxtBKg5X#(lfopKP&23ylY72KL91e3;wX;KQxw|&O-$0Keu%p z=ZU}WKl32F^$202fqXCKcGfRiTNJAKbRS^4PVRLKm2~qsje06KhPqk^{;Hc zKPqOH%a?4|KXe^Mfy=?pKjsN_!;SvjKUgdh(HgkPKY&3wu;YP_KT;6Qx?14dKZ*(I zv5(i@KR1J(9La&`KXn&n=I!C-KZ}+E=>@yxKOYE2+Y(UgKNHT7+3>dIKYhXWXew3Y zKZy6SYPV?DKP$1>?9K({KV2JZ{l0nTKQK#!=|IuWKTw0n4moPKKft;=BN$ANKLswh z$oYNcKaz5%ipMePKiIY|=vpqtKVm2#_Bns+KhTf4=RsB3Kl#Nvsp1yoKX9c-~1KTe1Y<)n4#KXzSM6JKWY)WOwR<`KLCQB%D;KNu=C z`d3oCKbCMl75A0qKf1h2YV!EsKa^rBL$Z(LKUhsiZyW~cKgq!A9_vl-KM2QS^Z&xa zKQTR(WxUShKY+?eE!DBXKVm*aXKiIfLN}UDEKZtQdw%rifKb!|q@xdDJ zKZN^iB#w~VKQDJ91aAZ5KTNz}iF4TAKRSSK4OryRKh$Sz;5z~0KPj@}L?0;Kdh%^))7+TKL8b(Z2$lO literal 0 HcmV?d00001 diff --git a/test.zarr/c/0/8 b/test.zarr/c/0/8 new file mode 100644 index 0000000000000000000000000000000000000000..5bbc31b315ec48f0695a4c1c8fea00d78e16251d GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy0On>m2J12AKQ0$Me<&K`KXkmZ5C)R%Kd1)cjUjumKfD(v zWv_ANKOjH!VgFj^KmW&&-hLMDKbWeW;hu=XKX&l|FF9t=KW$C($Dq&XKeR8yCT4lm zKUX;mwrpqYKeu%^zoCxqKY)0{#nKMj`no~mKeR=YDyakNKfJh+ z{AStBKRW<{f#VtKKd5pvibo@}KM#&y+Wge#KcY1Hn>z;6KSu^wtDFt!KRiB`h{3Pb zKY+`ljSoWCKV4xfI+8KuKX743N(bM{KhWkMuRm(RKXul^q2`C;KgjcUX6U1^Klr5+ zUwwhOKg`^M1=A7RKY)Pry3z^YKfsgQ`a0FYKd?^8ZbJ9gKlo``B`S)uKdF57gNO9( zKU{cQ%oR=TKb&g`^ax7cKVYvlz~|KMa5X+)K~YKQLI6cu~}^KLrYL zwD?2eKhn_^*Zf}GKe%A<%4x8%KZyJUY!wT|KY3L%&BEa6KU)Kdnj+%qKa8wao9DOG zKNd?vTbCizKRC@6HGNXtKcqj12jH8^Ke-NcowDNUKQPXh=kILJKYhT=l}c*jKaEYr zm0%a{zPoKSy;8jFbiH zKLAP#u{sifKZ%jX^NeodKbRtfhc&y$KjvEbrdYVyKY;syXoqv7Ki5H`Ic~+{KQx~q ow2QCXKmNzB0E`pYKi~dywZkjvKX!T=R@$89KN#};RqY|@Kcljp1ONa4 literal 0 HcmV?d00001 diff --git a/test.zarr/c/0/9 b/test.zarr/c/0/9 new file mode 100644 index 0000000000000000000000000000000000000000..3893e881c8889eed2a5741f9ee781f0fba002b97 GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy0M)0tcIeLSKVtnG7--(*KXfykNex@XKS2v!t=R|SKPpPF zxIS9dKgK_3cWuGZKdkmt!JOmTKg6J{eB|ZXKO^G&_ytGmKXAmuOTuK}KThrh(AZMKLA?7WOcxbKjy04HP$!NKW+H)Uf`$hKkO#h-Vxf}KdkHd4n)wvKRTZi z45aGpKYEKM-`TMQnl9KT+llP`~WtKTu(2DbJX#KVaoVl4ld{KVa_P`C5~k zKNfJJsyxr$KhVkK`u@+?Ke9B(w>f?7KYEM=qU(*|KOE;hB{ebJKMBTQ-L6CIKeGoC z3HUSVKh=Qah_d14KMq)Il>m&{Kago8d>2>7KTeoj*^ji|KeMQyj6PECKfDCcVL zKVaT`qLKgcwiW09h{KWL?^gso(>KT}j^(a%fZKkO6vykpJjKP$c?YD+KRKcHk! zSR`N9KjbO1f3D`{KMKs&lDV?65G4aKY&3etzjl#4U#KajaH@V8{KKcH9tS@gJ)KP(`ay#N3J literal 0 HcmV?d00001 diff --git a/test.zarr/c/1/0 b/test.zarr/c/1/0 new file mode 100644 index 0000000000000000000000000000000000000000..be8041c39f41c5e18b7c933f4c3e8f4377660987 GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy0MJ$X7H_hkKg{wMTNKRAKkE|JnzXC#KY922dlg6NKX8?3 zl0y#bKfo&YX9bX_KhR45S;{5SKMIwwgQ`%|KmMxojt~*sKieg0rK-^BKXj72S^weD zKU6%T7yeS&KlWHJYo|uiKL$@<$vRfjKgvb?Ro=VnKcFS`S)gv~KO~#h!uF@-KS)yZ z47Y{TKM`C@5>fx?KSC#Cc*Hp7KTLDerg5arKfUv8mU8gwKT!I9`L(<6KYSr4HkwP` zKbVv6z*PL*KkhVI^f$=TKMX@WU|ZSjKhnq!o)$ISKh{lZD%~0GKY$(~i1dS#KcJqO zn>ePQKiCiCF$`VIKeNKi=b~8YKcH!THdQX>Kce>=xARTlKL8}zcR6a8KLq-DuzrH* zKRtSeV7p-GKl5Q>1@(6AKSXNJEECq{KTxCe>V%BDKWEW&W4N>8KiKBk82FjDKf?M6 z=Rcz2Kl>6k0uu}4Kfbz)X!XO=KhP3`tC%UlKafEJIzWZSKPAIUG;ML^KVXHyI(oH| zKV~(MtQo`aKk)a_(m2JVKVM6tD2p%SKd`RLb>m5+KPw+xg=%@|KR0O=;QFrbKgth6 zbJv&dKhpmawxIUuKa3laR7Tp_KbPP&RL8~UKMKc=j54_3KQcO+aVqoVKTI7SZWo-> zKSujA7hChvKP2zQAq?=>KUfuO3LqfWKguy%Dp}mqKWb-YoI?!eKf3yf;&rRzKRops zLAL4TKQj6!)7O&dKWrVD2DC)VKaA$((A%oWKUUgKG7@aKQL23XkYZiKVa@q@d_E~ zKfroC{6?Y6KN|f+y>pA+KTJXt7jP%xKL9@TU-l8CKbBg>5R!P?KgiX^V<&^jKLD!X o);5B%KbjUw>bK0&Kfu5w*n5|xKM>AU-oJ~jKX$~RyA_e_KRhFxwg3PC literal 0 HcmV?d00001 diff --git a/test.zarr/c/1/1 b/test.zarr/c/1/1 new file mode 100644 index 0000000000000000000000000000000000000000..6d555979c30d69955b17ba23cc5568f5b1df6ddf GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy05Eb;T>;^*Kd#x_GNa$`Kg?s9_R4D5KQ!rzY%SdEKc-eo z&7@-KKU&K}QWUY;KNfLsrKjmdN?_ELRKR^Q=jEO^(KcJ(2 ziE2l%KWvTL4Dn3mKk(!j^2|o#KjX2MAp`~OKhPBw+X#%dKb!_Qc3VQmKfy+M+?#0Z zKWvi8f6)2wKcs+~4e_k!KTH<*+>-PKjDxObIE({Kb3WB-T5fsKXh))IVKT2Z% znpI5QKNP*B$8+e=KjJ>s1NR#1KY%LN{HW;fKS2A!>g$u0Kcm$?vmQ|BKeX}l%*SBb zKY$00tBJC&KUN`>t|E%oKZ4qy=>zcSKfacPD!NbZKNwd69l&kcKP5^1xqOxGKS0S+ zKawfdKU?5u(H9WlKOzlCXz#Y+Kg)aezsC>bKd@4@_253YKjT}4LLKU%nQ*?scUKOZ(S55K|SKfpy%3zxyqKeBkwT+K$~KdQkP o3gk%aKWe|bXo)%AKTyg-CSTaGKcu4C{YVnZKjuM9u*{a{KL$LY$N&HU literal 0 HcmV?d00001 diff --git a/test.zarr/c/1/2 b/test.zarr/c/1/2 new file mode 100644 index 0000000000000000000000000000000000000000..364d65a7b8082efc3539d58727d1b6ea20840b81 GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy06av5xh4hUKbJ^mbG2pQKY+TIkM}^9KVP3L!Hi7lKllM! zG@9??KX%w^ZwL|MKcsr>)A5MlKUk5i-_TXZKX}AJZ)^72KVGiRt^QrxKZ4C;oCg%) zKk!o0v^EgLKW0b$l<^JUKV^x9sQfbFKS<0093lYDKUZZY@)%j`Kf}^n<7(*YKP2{L z$tBOjKX_(9@ftC|KLmb}?>YL}Kd<}EuDuGM1zv#KN#76 zZ7dwZKfNUIPDEVbKRn56+F~-mKg6}uC+pPFKX5dF?^99RKT=0uc7FTOKan$Mzy0dy zKgcL^*O?sPKS>npPZwe3KP+*uoKW7*KLcck*#z0^KWM)QyD)d_Kf+~)!DE)vKj7xU zb|%~BKX$p>!j-)0KlF)y%BD8bKS=dQ4T`|FKNt%Xks4aEKPu+R$3If;KOhf$@;QjW zKY;is;Y1~mKe88Hxt?m$KPubvpJor~Kfq>w5n1t(KV(*udyI9*KWn>>jZ1LhKhE7< zGYih-KbcEinfN*2Kb#D}?{quGKU#FKZquFCKOioLOC$O2KcENt^l)+0KS=E|#%`#v zKc(#!1qux4Kj^iw#+F;_KQ5(Anbwx>Km2zC)Ko>~KN|8S8@18sKj1DaDK9$FKaiU8 zvKdytKc8#(A;kvfKYQc|nH_NCKVFZKdig`yKY&a8@Sug4KjBJ*!x)d|KgF`#@y=xB zKX#JVB-}vLKV&`JqUKV-KW7D=oi~Q$KZHQoF)_s9Ka{$-<(@grKg`memaRP7KO_Gf o6o7N-KYzW)p`j$|KQDA+J=sp;KhOgpUO)bi_@% literal 0 HcmV?d00001 diff --git a/test.zarr/c/1/3 b/test.zarr/c/1/3 new file mode 100644 index 0000000000000000000000000000000000000000..45a8acccd61786414e234358f303426c1c5b6b3f GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy0E_)j&tIKkl6D((^XsKWMbt`t~NwKiJwhfGzXMKX4jqAw#ONKWyn=iZNH@ zKVZ@CF;G@Kl{c5EyMorKXi&1Uw#SPKM_#`+%NUvKU$E` zPC297KTxqfON@TEKm9XZKv5y)KM-BWRi>@gKXiOAB(g&7KMuAapi8IQKis5(rMnc( zKcHB^>p2_KKMRJ?BDK8YKQ47Cfk|}fKXTDBK?l*}KTolWEMouKRRzx z# zKc-=~uQf&IKeipUstKj;Kfu-WsFMtxKQV+;F~IBNKhW=SOT;X*KR}j7o~nMKKOT7M z*fOr$Ki2oyDjDkRKeNpT$a4noKS(4+e1KBvKN5|PY`g*LKS*Ya8(NUjKfpf9NNMKbToXW~j^WKWycI=v=JlKOb(m z$g&0QKT1!8glD?aKe))8BpAuJKke^|=^;hwKOBBjr}9VUKS)ULhD7AQKceGyS1&x= zKf*nA*sB@tKb5m@)b1JKKOfm;(l(^vKO*F1{cOb3KjaIs&(V42KaLzZ5B2WfKVU$7 z*qJn*KWu@Q0{H#xKcyPwrwPjEKbsJpsYsCNKe>f9AL#n$KL>*C3Y@X+KYisG%6u{9 zKMZ$1#Xpq7KSJp+w7g^HKfAoieNNEsKkyy^>$dKtKMlL=P?s?6KhnoZnX3uvKeD?z oHO%bnKhD+1$WRg7KOE|*mBZW6KbSdh-g@}cKlUYx$K?yyKXm<_5&!@I literal 0 HcmV?d00001 diff --git a/test.zarr/c/1/4 b/test.zarr/c/1/4 new file mode 100644 index 0000000000000000000000000000000000000000..7fb4fb8bf32b8a11975ee71546062628823f4c20 GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy0QjdUghC~|KUm2ypA(n3KcNaq6o$O)KTEJhsu(csKgZ+x z%vuWIKS-w-+10tpKLAgXz`OH_KZy<%Evkv)KW3nvu!6VmKNZ>vA6-u4KY#b3Nz~Th zKMGrgE0|oiKWM`HkX-n|KZkkBpzwX?KLpZIS$o65Kg{i>_y14D zKRI!n60t7mKiq|)09b6@Kiw>f!5@0=KeX2 zKcMn!Y5=>gKj^KQM`PS>MFbKR}ShRl*C$KWH!;f_2NsKf!myq6}f_KV<0C zo6>61KRIZ$X@-mCKY-~~Nk(g~Kd_H{tR#)CKPMr;>CD3IKmCkM83sn@KeIeFF%IzJ zKWMI?(;L{jKhhKjQDC_}&lKKai)G{x=}XiKR|1hm`vTa zKaJTM7Kc{g4a5QY^KSEW37x9MP zKUm8(o-=gVKSUX8opdtKKVR%l(z|T$KeQ?8McUTMKkDLJoM=SUKi2HD_2d21Kd^>0 z`iA)CKOn$xZZ)N;KPbg5UH*2KX9$+k?DuF zKaUr6W#cL3Kjs6Z3?wA&KX5Se^7c{9KN#dl(EX?1KZ5U~(s?uCKj5Mp_Vb{UKT^k! oJYtF5KO)J!e}t{qKiK29;)$B>KU}~?z2|+&KQO>FDKh!jKkL_@7ytkO literal 0 HcmV?d00001 diff --git a/test.zarr/c/1/5 b/test.zarr/c/1/5 new file mode 100644 index 0000000000000000000000000000000000000000..84911de15cb007ae314b04794ba6a5163d7b4126 GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy0DwyYoJdT0KjWkf6|#WnKejhOx!9HKKY&@QO-$eFKd=zU ziSjn5KL}uDmxfI4KX=9o-)(5%KcL*j_{0OfKQIa=!u)dTKZx2pB-(7gKTR>cNcDK^ zKe#n{|5N3-KT>`z+up$MKkTO^j1Tk8Kd9o;NlGTPKgJeic8mw&Kf<*}&rwt6KMZ9M z&?)l4KWcCxJ5ce_KX_onNe3FqKQy1qQtCUzKN5BbO{41FKi{wu0KR+YKd#S}lMB!9 zKZ(4=7;GTxKSZ>>>HKNSKZtjhXBEQQKfE0P636o6KNRP}11rGnKT@!Hz-njiKbUKy zX?yzGKT$yFSPhQsKd-R+t1G|dKL88VgJ`~eKm2o4zMO~9Km0@HmQzRFKZbVT$g&*d zKPyy1gLxwFKZyRs#ff#^KRmc4I|Px^KggVPQaez@KTL@ilMKL{3{^;0CVKcvV* zbS+fLKVHEjP3^bmKOjvr*A8a1KMGO?g!muRKRa?@UjjzuKaisCS3JeIKe`|yXc*?$ zKlzNBXYP69KNtakzu?ovKR{x|^|JiQKRD+-<95yEKil6x*@UI;KY(dGS6V2c{@c(=5Kayo5 ztTe09KiFFpT1-aJKWLcfEdDjVKeoM}q*?s#KkOIW8#Ru_Kd9G`WCvUBKO~=2-u_qa zKLgE_TtrmiKbT%b-9YBGKZY*@CC$3*KiWFkTW0FgKP+qUx0M>vKkV`i7gL$qKX8pm o2n2)FKMthPi(IDcKeI{%2B8n&KgfNU`_?tXKb*TDrm9!YKct*t}tNkKis_x z#EyyNKVVwYdC?KWKbxxW(?s0jKU#~W3j)pPKUCMBpS60>KQGnO8-r`_KX1tJ^@a`R zKdf@G;pEl8Kb^gO=Tzt7KYFTVt3NZ=KWp@vsq#$fKd>dGP8rqLKj89wIJ67LKRRsk zw4#;XKadSWU(U?LKU2|jSY|-rKbY5u9i{ZwKLDbiS_tm6KL7yOeW)a}DR(KP;d%rV!G@KNT4>TIc-jKZyoj zMZ47MKk!M2iE856KLA4IbNf16KM0egKS0R!re40U?fTF6W3KR7C5JxiJKXX@w-HJEkKY$eD32e8mKaoc*6TnsLKfUzpUG?MY zKQkW9A_AK0Kf2>Q`3Sr2KZIjrh*;_1KcJPP;T=xxKdl*K8N{dJKTytI>}9IiKO&5_ zP$UW0KL-u4Ir3HNKXhG0=7;ppKel>ANzBC4KTw+`S7Xt{KT}QAtDP0)KRw0DxLP3L zKNRV}Lwe=zKW{z{yYznLKV~xy$&SA7KZNQ+rxb|EKis^drJ+~uKRli?%~NaMKNC)2 o^E)Q!KZ?L10DFSyKkXyMBU$?8KUgm4bhb_DKccQx%4N&bKOFs@S^xk5 literal 0 HcmV?d00001 diff --git a/test.zarr/c/1/7 b/test.zarr/c/1/7 new file mode 100644 index 0000000000000000000000000000000000000000..955633989e798ce9c3b7ef94e976bfa018066639 GIT binary patch literal 810 zcmWN|dr->(00;0Nj?K!E$CVOJYef(9nAg#lat<{yt)iTXuEh|_tI1;W$~!LH>4~V; z!|Ha(b}N3jS=O;EQnU8cYBZr-nHrz}KmIjyhXgZ6j+jbF&eNlOjatOg&aVurx1h{F zioJwR!C$=~^GqR$X3J@rB$I-;j=}j``VlO$FJ`W#6MHp|O#?|*5Yp<%kX3f*Rh1ju z$~qt+ZL!~m?&9}lZs>5Y4PhZKA~D+rk=ruo)Q~r5x#e4$ms1I;VWj#uT@7|JK~;Gw zupy{g=#|<5A~3AI!7~^WldyOd9&|wqDfOs!vF}ceGNAd)Z+Egnh^9KJ^mucWq znowAgZbk)eY&Z8W3^1BJQs}aPW@?O~#n=E{PJNg#Jm2FKLB6DOL_g@KOG6f zKgDpNuxjq?KLF(nnm#R>KPvFts{q^EKfG#zl-az?KWM5qUe+ewKi;o;*n8;PKO7TR zuZX8KU|3d3gd0V zKcvEE;nlj~Kl{Ybb|OdVKl~{9t$WSDKVTL8qzNm(KX9EHGbOgnKLzu24qdM3KTMc~ za^^R;KU3{chWE_xKPp&oKp)oQKY$nO=25NTKfJChoU75u zKPWDV=kKbsKhmb?$dVi9KRxeCFeew~KeT0FsPo0oKgu?s05%}&KY+6GgF(9FKMMi! zMM=%-KmKoSS^=lvKi;psnlD`2KY$0HOCq3mKc6mETJ=rgKXeIT!&fcKKkx)03{iHb zKNDD7-bZrlKW9c^CIQCgKZI5AYsL8KKS--r3UKS+KgjKEr!gO5C;$Ke literal 0 HcmV?d00001 diff --git a/test.zarr/c/1/9 b/test.zarr/c/1/9 new file mode 100644 index 0000000000000000000000000000000000000000..a50244df0cf0ade9f9580008bf44153044bd4dc0 GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy0QAR7Z)?rxKL8Op3I?j%KQO@l0G;8$KU(Pq1rMa|Kd|Ar z(bHz#Kgv44@JW5sKMuFFSh)V&KWI8N$?*(RKNKQp8$ zkhFc@KlZ*Co2*alKlgz%Bc+z>KLm<+Z_LBcKPiA}Q0E!uKgo?QqFIgaKlmQ3%%!}= zKkDxAlhKKiIQ|m~ywhQKW4U%DRzD9KPv^|MY&7vKQ~+m7)j{qKPK#8xSn;= zKQetM7)^83KlTKAqbX_AKQPCs?op!dKLLh&xMwu#KNz^S_6nNNKZuQ%kCZvQKa2wj z*ul2oKfoZRnAwTLKXP%E;k{<$Kcp&2T!H7>KL8``-jjuzKiuDomZ5IMKgRWDdWW{} zKj3>_3hAKRKkspxfp%W*KYVK7$jYAEKdSg~en4X6KSu_{`;kxPKh%vn7 zKUg0bsX(~aKY)*R+3>-XKVZ+}Kc^eAhhqokKThsep2^eDKQ!0k z{n69kKek9UJiklWKaRy5-i{E_KVyMEwh|faKQb@#lh_g5KPJ^MTSj>1KgoNFq5;+K zKRjft&3?1aKj_wX{iM~kKfEyCFd~4)KP<0a6`fG#KSuPbvvASjKPHh&6dZHrKNy4S zL%F`hKe#`W+8cGgKRee;W)W29KYStNWSM2(Kaj28TZTp8KV(8Ot%cFeKe$IkccT}? zKU`3^Z2YmyKY2YpDJe1OKMI_=7gZP5KR}lYzdg33KR6ICU=YjKKYzFj8;kMjKcIZQ o%_E4SKR?^2HsBBHKT_5}N(bcVKSFMfY!dq1KQYYM^^4%)KWUJbkN^Mx literal 0 HcmV?d00001 diff --git a/test.zarr/c/2/0 b/test.zarr/c/2/0 new file mode 100644 index 0000000000000000000000000000000000000000..b4d4560e25759ea718ee56f79d9bb105d858fb48 GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy0Jbg36~<)bKguQypv=e8KNGdR66?0+KhvALmk)jHKUmy@ zdrFSlKedQwAs7|pKfJKdl%Jf+Kk$mFY6A?zKf^1z>9?ccKNZDBT^4ieKlYaWkOpAi zKj$8p3IlrVKLEyuhgphIKRzXS=ONM7Kf0`B=l_N4KPuMO&A^x6Ken9~!28tIKTX&R zug|69Kcf1+L<&LaKhDM9Jf9ZkKNzM3W3~U#Kdxu^Za!AhKZL5}R?zCtKjX=o1RKk;tm!PfTXKiG`jIEl5_ zKMMZa$KA^2Kj80Hae1MlKVY4s%eL3XKM47_pVKf1#- zqw-|zKX;27HEFZvKViaVA6#bQKP)xq=|L{(KO?UM8~U{1KN_%|+)!1~KOjI+Qt-gE zKLGi;N6;78KY(tGXhqhVKcXBk4)3DwKlm5}^k3}ZKaiDEnv=_`KMGlThlP9TKV&~8 zR!pDOKSx_mN*&ANKkUCeJ3P7HKd{Mq`z4sUKlc0??hlpFKZ>%LqvjCmKhCinpK)jD zKOqxi?4`c#KfvpvHTuGWKY(Kyp_*=mKfL(2SSjztKkb&Gw5n_FKRDSX&E(?hKk)Fv zSpzP?Kgj=bb$`XRKUDIQ@P;?mKULg1M6FNiKfp1^RfdAvKY((`I;GLqKT1WEkiFFE zKN9ZlcH|H4Kf@b|z#)3zKYEYwC2ODOKhUx7EeYApKXx<`!qH#RKO8X=rbEijKY%f+ zt>9mjKSZk{jOAMBKegNG8hJwNKj4NOk7*~aKgHZ;-r)4$KR7BU#sVqsKR8u6^f3k4 zKdm7$%B3@SY#KiaL$k(4>OuKZ;nUu%;B> zKbXXNyAo>0KlmZb;ng9yKiCqDDK@gcKOo_9H(SlIKP2RFYj*O$KVV?t_V5XLX#KiSP4+T}avKLnXX#Rn+JKkQZ#an_5+KXq+wj5RKUR|alj#H0KT0W`E^T(#Ka54qQfJA)KRwu-P36JlKa6Qs zAlXUdKhVZ+;Jm=JKUdGrzEjueKQOOa9YC<5Ki;O4RwsngKa@4BI*WweKVuwSfGcL= zKl6S)4;!oKKS225Bw`AWKM?OVE$~*dKflL4?<%?OKXcAa_-pInKYVT`3;938KjsCl z3DDNrKjv|fsX~b4KSX-H!Q*V>KaixwBi4$_KV}FQbm4gKKVvk&--@Q~Kf-|67)wUj zKX=nk5z3_MKLLQurRDYDKbT4BtC67TKVr_;((gRsKcthk+|a+&KY;4A=k!{MKimx$ oXz8WwKggPhC`Z-OKeCknZKXiwKM2aELR8SqKdc7!UY4!dKkVqDBLDyZ literal 0 HcmV?d00001 diff --git a/test.zarr/c/2/2 b/test.zarr/c/2/2 new file mode 100644 index 0000000000000000000000000000000000000000..dcb067879597587f240e3e22e2642fff19349234 GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy0Jyg)njMeMKl@1p^B`H^KWzC-ZbU`OKXInN+Eu~tKV!Gu zsJ+JKKj7JY|7kGVKW;Cdb_>hnKeT%52D`@YKbRe*Pn!GJKRj>lS5!3PKc6~R7w_8d zKTIvj#LyefKUy$-UKb;lh zA%TSCKS9tS_i*3sKPK{8Km!TsKUg+Zg*TM8KbjU;D{ZstKZvrl@A47EKa8YG9}S<% zKk}KU`&P2&KN2?(@tUaDKdw8BFjyn+Kbw5#zA8!TKUl)pmgt(cKb>W1rV&l&KZ-+_ za?#7=KT}(3`Is8$Kl}?Msccx`Ki;_!pkSr!KXEIHFRKpcKhUCLeH}K^KUmNw?f)Uh zKPYMqKW84hKjw9?ooO@MKj4G|mo1&rKlV;wGyX@=KR}FFpW_zoKN0T`>N)}CKOlG1 zL_RdjKe!|}PHkA%KRQ>$u{*`rKUuZNM7cQXKmO+5QrZCGKY*EHMAO1}KN$Q|d3UwV zKO|-UZ{H^DKV%-n4RM3kKU*tR`LHhNKQOKsy6$$tKSYT)KV19UKZitfOVkDKKfr68 zy}uNwKjKAsb>@^D zKNu**&JO~;KVU#uF%Z_|KSsAmXOUtX`&Kb#X8 zNm51UKf|ucDZP#7 zKgo&svjVf_KhBFUp2NECKlpgSjrKyzKWOG1C?Lh>KS&H(H|rkmKR1(DawVhcKh)KmTmS$7 literal 0 HcmV?d00001 diff --git a/test.zarr/c/2/3 b/test.zarr/c/2/3 new file mode 100644 index 0000000000000000000000000000000000000000..1dd66b1facaa0136b19b3f3d268f899087c07762 GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy0P53z4EpTqKRP6y&UT~MKggHz+*n8qmTKY72T+Spj>KVUZgp@^BG zKdcKb77(!8KU!41w6Am1KeX??gdWk*KfHbLP*)x7Keo4{^SPbWKM4s0{HM6#KX9gM zYl&psKS2?ZCL_n`Kb0FR6K^u>Kf#*y8Ae>~Kl;ba$Q7F1KLDw>ad#x#KUD2JX`Vdk zKN#8_SZpoaKYJf|A@{)SKkD+9mE3>hKfFJ}^WGiUKe#6U!%9uUKieyU)G96DKXia( zup|V}KMS-B)z}s8KeAzyKXXaNKc8*}Vp;v*KhRLYj{l0R zKOUOkfupnOKiQJ^a<^FKKeIYfGOz6GKcK2Ho;6FWKXS+1u%OP~KT6#)|Ja)9KfR5| zxb|)7KcK}}>Hqw=KiVZWbKU_+X9jAWnKMZcXg4zb@KTmlB-S)laKlYkAg$}9X zKPrT8!aBR*Kk~@T(1q>jKVTkwvz~{TKLC`yd#}FNKZPNId<(naKb0_OB*gmfKXajZ z%hL1hKSD?BX@Q&UKiC&->HYW2KVnX(LsZ@GKdc4yc*D}*KMfo>di7T1KSI1)B^@~4 zKV8~tg*5u^KV2TXm*>FlKho1O#`aX}Kcy}?Z{eclKVZI%2?=NEKhR!*8ceX^KRMFL zd`JB1KUxu%V7RKPiKv|ETxiKjJ9YJTX7eKUY%Do71l6Kiw!wQf=|+ zKVFf?c448}Ka4rNIhLmCKTJwUDE}xH>KXH$=&GC5U zKWBr{|4u^YKeTirZ@kUdKVv3r+S!`wKZuTT+`t6cKi7ZV1@=$nKXUD0li{D#HVv*+PKk}i*s9`PNKQaW> z#u{qaKl8>7`3Z38KVv}cU?^(qKS1%+U)codKb~`N4JK*ZKTA>u3j*`wKj1q)mpbn1 zKN=Y#1j)hKKe}@<*>UUWKT;hR03}?~Klu9ePl~eLKL)McXDZ$5KMk}uITfkuKd$9o zaj*i^Kdcg5=A%E&KO_Td7yj_nKR%p6fH5TPKOf!OfU5uGKai=Tp7wscKYTNMjN3Kn zKY+j>5z;^HKZH_ydv`9*KL8c1HAUxZKTvT-wsh<4KX|76szO1sKb$0}L)y^RKW~~M zHL-N_~KO*lzl4$_iKX@nhYD+NEKYqKoBTMYuKO3|^ze&>M zKQjK1UXXFoKW+urbU538D3*$}KiSlN!M@|;Kdw_F3Y@jlKc@20IP-4lKR^R@ zm0woZKh}NCN(AuMKSKOaPzcr2KNYq@?HWh!KNM@nS1?l9Kj1}`PIVN&KbLKHt0QXZ zKTx+95!3dyKb&$r*Ja1(KlB2~%VomNKOm<}lwIA>KP-swN<^OMKk%-A*Dn#lKZZ8a z4Y~l@Kcst}?BAK$KVC3BjzdP%KRDPm!I|N+Ke5&P0Ryk$KT4s!`CkaqKd=hvO?qeN zKlg$CN~CV%Kkk{Wt}hhqKS2ywFkKNz54mnc`rKV%ZYa>uFFKk&#bXw{qRKNP;i$jcezKV-^5NqqO` zKX%zKEOwaPKd@tAY)AW|KW5|O!;gLJKhCOMxnue5KX7#o9Ae1gKVaqW&foIJKdCvY ozNl{MKZrZ};R4O*Kh1u)`%PTnKd3YUS?nUaKY&c|*@$$HKe}9%fB*mh literal 0 HcmV?d00001 diff --git a/test.zarr/c/2/5 b/test.zarr/c/2/5 new file mode 100644 index 0000000000000000000000000000000000000000..fe065ef073833a16f74254116a16ba84ffd2c838 GIT binary patch literal 810 zcmWN}dr->(00;0D^U67IHUCVZ=8?{$=&rshF(e)8E?1UU^EkUOqst@YJVrvTm1l@~ zWwu-+dN|Qqo3(yhByDT`+Iu6j3mN|Z+$Ze$ygylVf4?9~NI=a7c0msYLM+=pxj%q5 zWw&?VYyw>w42Sl}TYRPUJsU#31=SYy90^+s+bRdjpukK1~K$kN4N8maw`r=a?`N^G-(u>MnJNqzkzc6d< zhmW98iq0+YV`3ninp=OS4ym=tHAa~g7Cw2o;9(n%kt4gGRFWu8u@`F}HK8cl7m_Jz z1Mfjo9($n)e;J|UGZ`jqf`(8;Sm0?NBslwYU~O#LKSJz;C@MTiYS6%~aE9{~E~Hbx zv`pXQ0zDnVf$d_b&pf5|cPe443$C1bQU~V34m~yT6}W{ePRlPnyvsIUstz+jHc3Y% z?#t0as3(>!RpXHD&c=MU5yGFjzY?<>VG>alp1BS%uNKENme<1aAYKzQzXOXx2ep&b z4%9^~sTsDKfJ|wZSa+yUa5`%FU3n9{g6%?mpbHVteXkQ1w1WOOMxJrF3}&4{EF9;; zkhkKsDc3E?SYX@bt_2-e9JL4@^olqf@!{T>*EK8(C^zek< zl@Z-oymE5Y0lpr$Wn#qZCqQzj#yI4SC zmA`z4l~01Qh!N`j#=*l;_r#P?5;>l^CAP5=Os`bKb3TrK*2KOKL~(0&&!U|Kh}d=h3x9wKR7Z^$SDcvKT|HMvv?Nb zKOF!LRo^A}? zKN4cgXZ4oUKZETvuFT%+KToZ!?yVQ?Kd3uOZWgraKULIMGJr4aKV-Slik}wTKWpX( z7kO{(KM-7@M9Au*KOll+8$)EqKQHn0azn4|KL|NE*YgR`KUV5;Av=`RKe(YE^*A5k zKXfjenH%ZnKX{VF>i5voKkS3jgVaIAKe7GXh&hVuKm1WaX8>~0KgdbifX2JSKcKa% zWs08TKO_Mi9ANCwKcemOl0Em~KZI4<0QLUUKU`MGQse{YKWRiz96kZ(Kbpmg4;-fB zKaZwo9?lBpKj3t%=#om?KhoKzj7L%DKVU;V$_)V2Ke$l}7- zKi`6AEew3+KWNg$>g%iAKbfU!!UiwzKbz-sd)j^JKj-!oyl)5NKa?3Eddel$Kfs!` zSL7zxKPeLul?~A7KX}y3VJ~6lKV)SR=9X;hKjbNzYqs#qKSYHp;7|4AKQd1OrH6*r zKlQ1M)I5jdKPd5QB!=MAKU#|e#0PKUKN(!Lk0z_)KL;?N{tF@OKcLa1{6tdkKLOZL oR83ayKS&Y>B>9HMKZqdIhzLU3KlJee0F02_KcE=Me6rfkKU(3Oga7~l literal 0 HcmV?d00001 diff --git a/test.zarr/c/2/7 b/test.zarr/c/2/7 new file mode 100644 index 0000000000000000000000000000000000000000..0ac02e928c7f17394ed94b364212e2cd8ad5cd2b GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy0CaKXHx)+YKLkOo2y+hGKc<$<)*qzQKM!eMs8ZSGKL-q= zgb8KjKZqDo5z8IuKOPMXUTeAFKMzXHoxk1gKM9+XX@rUFKRw_IB<+mmKOj`4et9&( zKl0kya8e@RKT;glt*<%XKb?NwXW$#=Kk)UyOF){eKbV^Vf<-jiKiJLeMB>xAKNMX1 z_-3rlKa7>M_Q1}=KLsZtUYzjmKMR5nUF+KBKS2KDxOd97KcE$TMVKSDKS5z8S@=om zKk!Q@#mqnHKYk^}i+3E;KMAQ|=t*hlKVY<#o+dl7KftJ5LrSfNKOk6Y5U~HTKgut5 z3Yc;1Kez~lx0C|xKZVIxk(S%-Kj%@Fo^b!}Kk7}(2Kenu2`05wdKm4%cF8B4wKR@1r@MEy&22 zKS0IJ$)@vxKO%hiI(L=gKd5GUnjtREKZ@k%Hx26EKSa$=*q$%zKNyYv+$0?9KM=2a ze!pVBKRhg-@{9)AKLr_Kn?ADbKQMlSqV?IeKWM}B;kzQ=KQo!GX1C(+KNGI(^G3Jk zKUgcLnvkU7Kd=^!R~JszKk2+hoVGaNKWb$9ZfxAwKkI+#8DlH%KOvb+;LJnlKe*%D oM9y*HKaUQzPs2UwKk&5?$PM1MKUz`!L9xZ(KekUO>wtmeKf;QjumAu6 literal 0 HcmV?d00001 diff --git a/test.zarr/c/2/8 b/test.zarr/c/2/8 new file mode 100644 index 0000000000000000000000000000000000000000..d84fb8f7d6e97ebba82134920cb176f32f683b43 GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy0OF8I7J{$kKg1x_P7)O2KidWqJ8?SiKNU{q&Vd2oKW@-eA$wTuKmG=PT0lhNKZco~ zGj`+MKmJgdKyF6eKd>V{JJnFKKcLdJIQzEUKQK?+heqq9Kd}1)@L({nKTs)4_7tqs zKOiA#xQmDGKN2A)NaNe$Kd8D>wzO-|Kk#@*BE*-sKX5^P6Fm&bKSrs?BGWVGKWS4m ze9D{WKfEuulB*rIF2~KSB&Y0E*4oKWgiu zc@BT#KQi5(2)g;%Kc6VyLR)m>Kl!sEe#0s6Kgc+>i~NMeKar%ytuy20KdXZ)jQmIF zKWrq|&7zRPKYTqip0lXKKVXb5wJw?BKlvg7N|lS~KPz>teL;=nKa?2r8I`}}KYAIt zZA0GXKf}YPK0@E(KO}X89|DfVKbTMuZwplHKZxP!?4ygvKdjo;`mK@VKU>Ie$8a*` zKhv$pVAdJwKi)^5Pq169KWL`X#Cz|PAnwz4| zKVD;hKQElqKgg7`6ar=3Ke&QUQzFyIKNQqoa{yY^KOQ_wJtyz%KWe`<{z?bvKTs*b zFz-|1KSW;y#|Wm%Keb>rr!x%WKdkn&XG|vEKQoIeiK4pZKlb0ZXrZm^KekWtC?V?A zKV4%?RkUc~Kf;lAGSQ3cKS1#vA55ybKlR^c%IMqUKk79Q2 zrDzDxKOz4Hs%N9^KRjObTpX_LKYbP)3B|7AKjZ0FF_$9dKb*BnjizVsKXjn&>Qp7j zKfvt^N)TG6KfukUByaNCKkUVCJyqk#KkQrRn}0*yKiqb#%hbfeKm79Wzb-AnKkr0C o-cz*eKZtNSB(s zR$NLsYfQ8sXMk;lTXVD7ivHzixr>WG;<)paEa-d}7}uDQ+D-+sZG=EX`v7TO zf;K0~0+-CsT4DJJ@)r8!P!ftUta!d_vUU)KsXM)_4TDIRcsutV(&AfzF|Il1Xkp?G3RITbr3F7k>=lihQei%TN3pErn{eI zU1rFk+o6{&H_MUhw=J}BjRlmg0o~tXRG^;E@On;BpmO3{6n}gI(>fEqsG}Ei3kov# zl$t>~)0!e|`Ttw8;a5eB1sPSk=wR^>(sSk8{YnYsbgU>Z{`v-t3hVy376)9M_ei0E zrQp2SLigKfL}*cnZLfU<31Y{YOdy7-+A&%B+MIH|H z8qS4B3T$8#*0Q@>>L6pUCHt;1K$9dCMwb>YDZ-k(N@w+9iFlKB6kT`wR6I8`XxC-$8pwlSDVGkubDE(gyHi|g4lqmTwQQ~$#1CnA-AWnM zC$BC_E0rS8FfG-~o3VOr(x0-LPjF49+gVpTQJZqdXSPxUqvD#R!(_wD-QLD>#wg;_ z94ER;2<(qnT<*W30ns+EdhC-4)Zd%cGxk2rxua3suj<2tr-%5nxjN)OZ1NiDwIfVt z&K0#<@I=>8CU#ds-k2Q0d8miAfV942ogT%W9zjH0C;n1jNo5mu1Po8Sohq}SC`gch lT0aVZ>Nx9*R)egFgW(sWtVrBo9FE;LgsJIp_K_n4_y-DXq>lgq literal 0 HcmV?d00001 diff --git a/test.zarr/c/3/1 b/test.zarr/c/3/1 new file mode 100644 index 0000000000000000000000000000000000000000..d60d3f7141b3cb99ab75cfdeccf9e70a3852751f GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy0QXMmVZSltKlo1fuwx9(Ki`Eb)Kj;@;;Yab@KN@Z> zFh&;VKR&0Dv7g!FKVj6i7{(OoKkfmxWlH+*KO*f8*VujIKSY(`>RhYHKUx&y)ufH! zKdYT-F9jFjKL8KDN-1rWKl*&lWMhcgKa-T+J=){tKi>9%8q+A*KYYnON}}k`KTnn^ z(~QvRKWF;{)kewXKfFWTpicM7KX^tlRg><$KZH(B;N;)UKcHru^P>CRKg|D5e^jx= zKM*={>dxu2KODQowWbEzKR9R)e=KObKglCm(Y6}uKkhq^r@PG7Ka>{2@uUaNKd77n zTC;}cKcFRjKWEz3KX#8#6($bgKYXhb-yv}2KLe#Zs-yPrKSy1o-Z5k3KeV5Zo6gn3 zKTx+&?z5rcKLGzz6TL^OKSwp^KQ_MhFfN$vKb{4^!mx4eKZpT!jCKez)-iLPne zKm3G=KC|M@KN#6B$ke0TKUsUl9v{-`KgHU(F)!=kKM)>{?}sebKirTY+cS~MKk(eY og25u;KN@S!%9P02KQzcZmzNgmKZHc5$?D+CKQ#~%v?)s9KdFzL&;S4c literal 0 HcmV?d00001 diff --git a/test.zarr/c/3/2 b/test.zarr/c/3/2 new file mode 100644 index 0000000000000000000000000000000000000000..c3c86f3b11da67c99c7cce21a3d38549b0619fb7 GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy0AxJLj5@dDKR`EDQmUe=KjGT4_6)q@KW9^wRkBs-Ka#6P z;j-b@KOM8WIuai1KVc(n$j%4qKZo@)B-EDeKfIVIWYR9_Kd$6Em-*$~KOlpvUSwP8 zKhQ>`xRh<#KYN;zC`7{SKg6<)Vrmn~KbWrnTd@|(KVnWj3iz(Kc!GhJkGu3Kcw0hZ!Rp>Kk<;oRKhOhKW|1d z&zzzQVbKZrk@12%fnKSsv4lbOWqKlH4dpKM4C1-oLfuKXpH+J)tD-KQN|4 z1ntJoKSDM?k(1rrKR~=wtZ_%6KeUs_-W93VKNet~wR&RKKVu8kg{dvQKccS@h|F%+KNloKFe>}$KSTv< zhC!6kKae9BFc+}bKRlD~NhI;vKOyw})JU1PmJLDJKa6-i@5;RDKgS7XSrs7TKQs{+ oK~H+xKl@)Mfx-vtKOZ2uR^d(JKcXZ5U9vjwKfoBsjmjRuKb2IOmjD0& literal 0 HcmV?d00001 diff --git a/test.zarr/c/3/3 b/test.zarr/c/3/3 new file mode 100644 index 0000000000000000000000000000000000000000..9f9da8653fed8779a675bcd9e06c7127d9b19eae GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy0KB{}BzsNSKfX>)?CzuGKa}4C4`T<+Ke}U1 zKlEDeKR86;%0P|QKMR;eyLdz3KY&w`QuJ8KKfKNUw2J}fKa%$6xQr;|KUiy^u*dVv zKXz(MIN}S|Kjz~gUpPh6KO{7VQZn-CKfrBYgpBOvKTx`^x5AOJKR5uHKg0~?Kevt- zYQ4VfKiDSrWmpKcKi0MwV%aI}KQv*pO* zKdgo2Wq%>dKfo9J>J5}KTK0UOB~73KP9rA2tP*RKTM?)e3J(5 zKR6o}MBIJlKM0#npczWKKL8m%_pDWQKk^h^m;~Y9KS3p7=IkZxKe8z?8VHB&KlGFK zjmW|1Kj*1!=x1c?Ki;vOqIcEoKh{eC_S1aSKlY<&=PI|+KhOjGb!YKPI-%$2H;8KRW-IU_d9=Kd#_P7IO06 zKM=W_y92VOKlRWi@@E|5Kd{A4{r-KVKVU+d>@VckKP+4~@E8KbKirspL14nuKLkCf okB&UVKR{SBxZU%iKWj2D#^aaeKcbePhRU4KKQAH{x*5dfKNh8ye*gdg literal 0 HcmV?d00001 diff --git a/test.zarr/c/3/4 b/test.zarr/c/3/4 new file mode 100644 index 0000000000000000000000000000000000000000..cfca9f83edc23d8ab2ff0924ef67ea0c49cc513f GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy06Hh;9192NKW~YdfHo%SKUIjy%5K8xKNsN(HTaC-KRmX& zQeK7VKkoNmE%&$EKgRuMAa!HbKkh9VWv!0qKQy2)L~zH)KjI?`-2N%#Keh#634pfU zKU8^)<>tb{KX$8rE&8+2KWkf{V4Qg7KLm%)jIl)NKicI>KQ^@4KQJ>kt5E98Kj!}n ziqfF&KS1Ubttd*HKLLPz<=&^~Ke1~mMZ-bwKej>A_bU(VKa;=cBZjKyKmOjuV@YMw zKe1gS-^?iBKd8GI&oZXxKOFmLEDC?qKWTDCTi%P|Kc1G!)j3MhKfCe7$kLVVKMJM2 zXZ#K5Kg#$xH>u$7KYmB3@Dw`aKR`csva*EeKL*2*DnwuBKTb97b_M;{KPJ;Cuo?g0 zKhP@=PbR*pKc>=kK1yomKSI1AX_tHIKU1(2sosF-KWf_n%lTH@KUj5Gr&22HKTQOc zk_?FBKTK<;Ux7WuKX2XbVJ=+nKNMj+s}oDmKb=HMgJO{BKfe8ZaLaqqKg(XN82UZn zKZH+gsd>fiKYpLpz%@zeKZUqZdV!DaKLGTUxEHKSVg6$8Lb;KhS%Zsv5`UKh#t#Akus0KcH%ZRCOcF zKkqzHG77luKc1@@&+WhIKlGx!lnwppKb?Moog9YjKj~!(uZS@1KQ08?XY&`@Ka6|k z_<}9mKj7hTUrubjKZu94DJ9~|KVZ1zGOg#MKaCMCp}CObKRjvoqjJ#QKOm1Yq4dDq zKZFrh!?pX}KfuSoXlufxKb`kHN^+m)KQ!KMf{DbyKLq@T+=kP{Kb}*O`6xT;KZKNE z+0D7_KLGJbKf2iG5=GkH zKl;ATNTdbiKV)OXjimk8KOa5Ne3{eeKMI6893KemKd+12=8NF!KTukBwwc?bKbT44 o*L;<^Keh`qzg~asKOnaYvx(l*Ka#?zoE>M>Km6Q=g@_%>KQ{KAJpcdz literal 0 HcmV?d00001 diff --git a/test.zarr/c/3/5 b/test.zarr/c/3/5 new file mode 100644 index 0000000000000000000000000000000000000000..9e1753b0f456038316424c2e7a721ca4da06d7c2 GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy08lo>9Sv#`oKc{T}OYVd1KY}mKlCewEKlYm~ah`$QKX&yG6aoF!KmOIWC-(^A zKThTKiKZaQN`&lRDKOiL(vpHs& zKLEhj*%C*@KhQwC7|MmwKOE@63H&?bKZ2H!jvL(WKXT3_-X5gnKU{2Re@8RTKRCwA zMoDtlKi2R7C7NOFKbzuN@b0PLKP;d_Z1?!vKMYmwYt%r~Kfsvm9LT?%KWu{}4Fp}? zKg{&CF`co>KLHne7=2CcKN?>_NOmLQKPGx|BdwCsKY-qV*NM!cKYs(0=>_rcKhTGv zv=R^4KS17;S}p11KZ;7BbJfM=KZGYvKG_7qKi-p4-Hu_|KR53*fKkz?(=)TO)KLE(@-_3;AKWs+W7v8__KWra= zbIr-nKaz$~z1n2yKLRNoz1&*iKco_vG)CKOmdx$V_Lc9#W3p zKj1osFNEysKN?dIl`-GaKYE?UN^&0JKckf~{#04$Kc=;5jxK%JKPuznJ^8%mKX8H1 zW6NydKY-H8>Sf=jKg04mP+zm)KbmKKTyTrufA94Kb+EU z*3KrwKQXPzXKQ!nKbA@-p(?r1Kj4?v_rPt@Kk)Gn$V)%sKcKsRN&jWgKbn_?{_d6S zKl*E%XfFlWKZ>jhw=Q4hKRD)Fe`sgSKZY0uVpKgJ#^2K92?Kd{Ey!8%v&KQoH2ZBDf7Kl7WojJcQTKey{ts?g2rKg}YtUO2Jf zKWdC+p+M5&KR}dRfVs$#KY(bHGnIOTKgu^$KftE*?tq`4Kht-u?+20PKV-={ zEJm8%Ki}TMU5k(HKVYSCbvv`CKR&BqDhxK{KddAM&yfw|KWbY>L_oIeKQ@-~;2D|h zKO>H+BUAD2Kcca&mr$zKKQ5Mg-Kg1_3KLnI*piSH5KX^AI;yd@ZKN!*y z47^6XKer991IJVDKcHWoF5Mo=KQEeZV9Mv>KZO}RB@6}QKg#4ypX0~sKRI@5*`5jL zKUhAEU?4WOKUtt)_8aWsKilEbQ(1rFKX5l)Bj;+aKeIRYmg6t!Ke|Q`?SBU5KfuC) o343DYKL7=rhD(!_KLE+n&ttvQKL`|>o+-@DKMFypvCC)HKdvs5dH?_b literal 0 HcmV?d00001 diff --git a/test.zarr/c/3/7 b/test.zarr/c/3/7 new file mode 100644 index 0000000000000000000000000000000000000000..e5bafeec8125aa16df6ea2f9fcbe25490c36b2cb GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy02F9cR2GWLKj6{cMi|JHKQ{In9JJ!%KiVWx5rC@LKgQ4o z9=5aFKfto9Vw>cbKaub|(dygnKlIgsS>C8Lu zKQGC&z|!jAKcr+@W#-)8KSmRAi%wzVKdy)xbRID5KkEiIShaHFKS-7`md%9IKTGbQ zetCcGKL8#nLDeDYKLquA7vKTaKdjAQW?WL*KlOMlKSuNDKb0Y1QCJJ?KVYkc1mRhy zKPtEg{sqYGKg=M)yNM{uKMZdqfnrt8KPVUww{6eNKMo2?9Kf{l%^0`OnKUhVY)tE8nKd`eSWbme@KVIzRiRz-`KcKDcO7vmLKNz=7 z2Z+tHKYNIlustN^KZ`SXY1HHCKfuDPt&F*zKjc^tF5!~dKU`W!y4x|+KM|K$8ajC7 zKXjb9fpAUNKi;;~ZBfqFKeA=qA~JQ-KhOvyW%m5SKPY;@M1RZfKia8{$4eROKSY!L zk-dWLKb`W3$4Lj{KSOig)Xl%-KPE{vThWf?KZdAF=A(JhKgH%t?7h_KKh_iWsa6@| zKLCn5%0>p@KUj$I+Ka#9KR#BYnfZR#KM*{t+!#{VKl@~0-264|KT!ALXfW-vKl#`) zu^9g1KXkv&PXuPgKbD_}44Td0KUf=)_fk~EKhO<7R&xcZKhTzzOkJO-KZ%Q{`eEMd zKfiMmo^?0tKU9$4M4E-qKLl$)5w>ICKS^oS5A)OEKN?4EJTUvvKWwC*_a+qAKbLm@ orHdZtKX8}eeEAHiKZ=Y*)GmSVKRY*sAEPtlKSm1)?lFtjKW3bpCjbBd literal 0 HcmV?d00001 diff --git a/test.zarr/c/3/8 b/test.zarr/c/3/8 new file mode 100644 index 0000000000000000000000000000000000000000..60ae68a5f6776bfd609bbc5adb66a28728392fd0 GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy05p%ic|GsXKlSUNU}&!HKT>zW!-RX`KOh7dDv{FGKjE8I zX%`mfKS1|9W3IA`KXB>csEAUdKeJU8BL#KYwf!?ZLYhzKZuHGniNRVKfF+;mrz5&KT!Fu<<{t=Kk3X_g8Vh%Kd2!SwpKP>b~oO{B@KO|dl-_LQyKMqbv{_|JbKcI(1Gie&FKOKWH7zK&t zKU~WkD4#LhKhp7kT3>VFKZXcs!(|WTKliLN;>X75KMdaJixd3jKd7M6^CY{{KWzPR zSno^iKe&wqYN!{^KZ2Z$<9zScKNxzt3@l&LKM~XnF32_IKRnH0#@6-gKR_Yf3Z3$U zKW1FO?7*kvKV0-9qQeB@KXNB=OF!D$KR}nt7}>7cKW$mRa368tKi4sj745C;KklUj zRKb+dKVWI^t)9fQKZrd-wEKeRKe6VJs{Li_KWxo5?Xh6%KQ``be`Vq5KTPC4l1NO- zKRl(tLG2*ZKLE16#MyVgKM&@O2Ieo~KlF+9_fU7?Ki;T9Sf|k8Kg2;NE6+67Kl)`G zhWb3yKhN{&25zG5KiE#cr*E{=Kk1=({x{3#Kas6P4v>lCKdBqi*@05*Kagj>RMTwN zKOXC`&us42KQx9tv`_ENKk$f@AA4KQKNx}1Ta^LJKPulNVV_avKXNoMV53&tKVH|> ok%)}kKX9tYvh~8fKd$3k1KeudKO!W7vg8r!Kf38tWhQ6iKRlAB3IG5A literal 0 HcmV?d00001 diff --git a/test.zarr/c/3/9 b/test.zarr/c/3/9 new file mode 100644 index 0000000000000000000000000000000000000000..959e2c1a76f2fa52c7e3e61c3feef4d6709cd40f GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy05o8U`$swFKQ_1daX6dpKN(59j(`K;Kd}q$j=*>4KmS_A ztIrDRKMr^9ty@OeKe#=lOO&$aKU(AO0GD2iC+8f zKTP}d!13VAKM+VbM93)4KPFaw{@bJFKX`eo*oqeJKSe9A88+JGKPY)?dRKeWKk&fo zJ_8-^Kesn*Gzcf;KV?CY%#E<&KTV(k&sgQ)Kh%O3-F#x;Kfp4Bq&GLBKgh2Nd=mr5 zKX&~A5DG-sKeFrbN=VMrKU^KTk}Mn4KW=7y;hdT3KNf)_7dDORKLPR~^icxlKN?Bi zEDd4YKNPUAt&1?>KWdUCkWb4KS6RQYLDdZ zKTyPk?w(P;KQo}4alOspKR=9HTZ?Y$Kd`3JZwtlQKb2^-q|u%0KQs)53qg?9KY}Nf z@ed2uKNzVwSL{E)KXl)B@b!t!KWRnG2zq4hKcZc$GA)KYn1w>dtb}Ke+8luna=%KN?qYvw2wKKU|YC*Ssd>KddDJT6{OeKf$8H z<0lH|KQIyqEKA&|Kar37bTt0yKmM5~glYEMKiC0SOk$14KhO~wq7+V}KbWmhVJ+J0 zKS|cntrX zKO{<_iI8K{KVV-|MCn+#Kd4icGmNd&Kf-Kps!|2rKRB~-$H-mTKkyy^^KvZQKhX7Q oZ~p_*KkdD@r#G?aKjEzK(FVWjKZEKIqKj|fKfvzFf>SEKKTrRYuK)l5 literal 0 HcmV?d00001 diff --git a/test.zarr/c/4/0 b/test.zarr/c/4/0 new file mode 100644 index 0000000000000000000000000000000000000000..7c18753701deb923dc2ca75a707f496fdc0f694a GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy0LDGqAYz;0KSLAJC;@8jKU^1jUN3syKdlWxaQIR0Ki*m> zY%e|BKWmPL4d`3#KM_jXua#WxKaP?FJa&BOKaCU`_%8G7Kid{d%4mh=2{gKT>?O0?TRNKk|pcq;H7CKlGew z!N^L&KTTiuJ3}4rKVpSd6&up(KTRMPVe}T`KmYxK!FI6ZKh{2~^%X$nKY%jOl-uvmja5|KWL7jIiAGBKLqrSJR4-?KRz_D_|?kR zKl&Cdb5jG|KN#9CZWO@6KbBIl@_N_SKa_N{ha_~?Kj3lY74uTlKVW6%v}@;}Kkx#1 z0-$`nKOjW?z2ZQ^Kkt^iVI`CAKOXs@T!^XHKjglhY}(G+KL8I5&Uj?YKd^B)HVfO) zKOM1OM10TXKjvdux2b&AKMY6>JEV=@KgPAne*@>-KjCtwTsQ9PKj;8p@RsYwKQ>8f oP^w|=KUlEPGc1nHKcE4}6_qZZKdqiefY##eKL$rB(jA)aKWwv_v;Y7A literal 0 HcmV?d00001 diff --git a/test.zarr/c/4/1 b/test.zarr/c/4/1 new file mode 100644 index 0000000000000000000000000000000000000000..b6dde466e2eac05c19f70bd79e58a99befd4dbaf GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy0AC;OBh&QiKSCNSg}E})Kl@?Mv==exKb$QU>|l7}KP=O2 z`Gj%gKhWGE3izwjKk>)T32zZ zKa|P2ZPb3oKmDqFFl|ZeKL%gX+CfUwKeX_ACakQ-KdYu=SBCQIKc{i{M0ox0KSXc} zt=I6vKf_8!SngWwKOh4Lu+iMRKX(c3HWk_LKP-gc3(KJ6KR9ZsoKxhxKdhZV`w(Q* zKPGGRk%w*CKiEp50Zg#&KUSSn2?cfIKN!_}AOIcLKluBxk7#PYKlTdF1r&VmKWdCb zik8mZKLBRUfAmb;KcGzc59h6@KLu3k*Dh@0Ki%@sV(UEMKlDMOKfq+uKh+~sBKN0qqS|LN_KWT4*AQ+SD zKP~C6vzcz=KftJMhSWu_Kbkv?BVT;#KimPcaKal^$lp^`PKek86c2~mhKeFYI zSI;}xKfVmMsy`&tKkafB6;=b~KisAV4B)HkKe{@@XEV;>KO7;26gtDmKZ;+2T;S60 zKeHwe-djB4KLm3M@uPvsKhOtmB|QqdKcvJtSMWo~KSm-j9P!%QKLdD38wYFYKQ0VW zdH2WdKdR6Z1=5??KkQ;>Z8TWeKfW6P*5^UwKk}xF`5V~iKaLurWu<7@Ki9Uu0BaZK zKj`uD3Q()qKN>-tEuea#7vuKN6wpMu>ROKmV{s%OrE|Kjf7ecKMIY zKUa``nPEoZKeDNjs7N5?KctV=_i!@qKR|k3@e(?hKlD_xi6H0JKgkt~SoD?QKi&Wq zr5zFAKgD+~(e@$cKjd{scTD5qKMrKg(3=)>5qJKQ#BW+E~Qc zKdBiK*2swCKLkmi>BKft?)2&;&WKbTo7%-PJuKcrcEm5}o7 zKW!R~hLpbSKc)p~(3yDNKNgLw*ck5GKS&vKU4BcGZKajA6 oNN)zYKMXO@%BQC1KVB_u)Rvm&Kd|k*C@tyCKW&2O4~Tu_KYU-882|tP literal 0 HcmV?d00001 diff --git a/test.zarr/c/4/3 b/test.zarr/c/4/3 new file mode 100644 index 0000000000000000000000000000000000000000..066045214ced1d0a7a7c2f3abc2f0c35c35cf76c GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy0NARjkli4{KP>G1gEN55lKimTEj&@?iKSFd`GjVg`KRK-p zuZSk@KQ?AXHUNgwKb{U3#5%O?KR}u#^CS+zKfscQ5(xjeKX?T}DipWtKQIjg4wzo3 zKac>ip)%{_Ka8oo$H@KNKNRF;oWn%eKbXlCqGl+}KbecleS6RDKOi0SJ+`FgKY*Ub zA_N`VKbxoDwY_WTKSb`fo*&TNKbSMuR*5^fKcJF++KNRhGb;Ts@KL&dO28rJ0KOPeZ1&RUYKlFIEoRp=^Ka9%97+>S; zKb5cw=Z`w;KVwcDAP;orKWqWVJhYF{KUnM#JtpVLKQ3zdnxZ4sKSZg!iE&5DKO9>V zoGIVeKVIyiu)qbdZKP)WU1g81KKUVx?IP_l8KbU5hTm*LG zKhriSdMgp-KN0E=t~asgKMOw39k0aWKY@l_RE&w`KPf@2ZOR+%Kax1tusK-LKM~xS zW-OiOKLq&1(?xd1KSgI9r)Q?*KWX2zwsO1YKTxa?&jnzyKa8&v1AUOwKbfsrR>#ud zKSzJgf~6+xKS?@^RIJ10KfnNfGln^qKewex;S5RBKkK-Gl|LEjKPyz{#^!tCKm1XA ol=8mQKM9NS=KqoEKYUj&hxv%jKOwJOXPm6=KbjtnGfDjFKdu;#qW}N^ literal 0 HcmV?d00001 diff --git a/test.zarr/c/4/4 b/test.zarr/c/4/4 new file mode 100644 index 0000000000000000000000000000000000000000..5fdced2c97395b62a6feef13c92e827ff6631ec1 GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy05F=ls`caRKf>iLu%(sfM86?KgOsMGdl^{KUu&bLSM+{KV5R-nu5dUKM=}Dy3b~+ zKbi`IXJc^cKh7Yww#*CLKP+4M6b1^@Ke1J4hG%l+KhS*V4djd1Kh&1S&fgEuKbUWl zLCxLjKSUE)xsw&iKc4zs1E#&^KP?f1)(AoGKjBq#KB({KKVUjWktDR+KY(t;E2^*5 zKOm?%SyMKdKQ3qIYj}6kKScdQ*GQP*KV(c~fT9}VKWeb5e&N&DKMXGn%;7V@KZJz^ z6 zKZmamH1V9}KQYOjdjt~ZKasT!E*}f)KRm-K14f_BKcqgujZm!bKfO8Q@wGnUKUi3~ z+7)!^KOkB1T(f7cKkDVJ!HaO-KP)Eu5dvGnKP208&+B63KS+pp5wQKYKW5k$%oxby zKP9Ff9?|&bKhyU>v-TU{KMWuikmuXRKPTvCisr51Kiopk`ZWjBKlpugfSelOKiJ!) z?mg4YKOC#{ZS@fEKbTBTo@?yMKk`KQj1UWM@t1KQ_H--#={UKVEO12GzyZKPVGGCp&%FKam!^ z4PPwjKg)G)c`7R9KgRluD?*6dKS0@SOyw)zKmVRz6{KZ2zLN&KndKM*_AcGbDWKfIvToc$~6KO|%uylVl@ zKSW8VrqE63KRl#9(S5wwKedd}aP8gaKVW@(>Y;hyKVD5%z60$igKcH>P oAMjP|KS-mhGzKNrKVlx~(%*gWKf&0y$m@vhKbIdQ)_zRwKmSpgXaE2J literal 0 HcmV?d00001 diff --git a/test.zarr/c/4/5 b/test.zarr/c/4/5 new file mode 100644 index 0000000000000000000000000000000000000000..5495a226b08deb2567e50e99668e89ebef7331a8 GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy04TmQzgmf~KN5Yb832~zKV!NV1AhPHKV(F}jbE(ZKXTux zi1e=GKY&MxbbXeKKcpR@@gw)!KWw%%X~yTnKY{XsCJ^4~Kbo5B>B|G}KgGtyzqEJg zKSK6qy*?KS-`I%OeokKR}vI z@~-^gKLsw~;&3+RKfurjLW=v0KajpXF5djtKR6zGDK2l!KY-Px82<~@KUQ4Hv49`v zKY}Lr%P;`vKfo{m83UP!Kj2)L=OQSVKX7SpYZHj=Kg}C*tI}ZPKSYyJ>9?HhKZ_W6 zZ@fY7KLGm6)DafvKU|Cl2@yWhKcvxd*-l;RKRD3|Hq~v-KlsXEj6X@uKeWPbuii=7 zKYVHO7ZV2IKeTT6V+>yGKXS)!-|Fz{KWS*`Xvi??KP!<>u)J{OKQh;z0PS$*KRDkC zivuImKRA`dsx?`@KjdYCUe96RKeW;SkQYSjKOT372iH{6Kc6r|z%T*rKRnisl!8U+ zKX&f!iLW&3KN8cxTyOp9Kha%w?x=XL zKZaEuM^5nLKOECwgMIqpKUVz^8E(|nKZ<1TVWSx7KWr5N)Wwk9KVSr(wm$HjKi0^C oJ9^USKb`=bWkE>mKkf;B?i+K{KRdy#C*(`&Kb(82gwHJ9KX?S1+5i9m literal 0 HcmV?d00001 diff --git a/test.zarr/c/4/6 b/test.zarr/c/4/6 new file mode 100644 index 0000000000000000000000000000000000000000..3436c30c7333dc30907d65611e9d3b34067731c3 GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy06tN3;z$tEKe)N1a+`ANKO|mBR5}UdKW3X%bN}hnKd!2u zy{Tg4Kj4)vUfY?*KP!zug{KPZKY@MI^Db`hKah9(QTd(jKV;2nm&JJPKkc>U2eX3V zKXnbLrJ=RxKODc|<~}s+KkWdIBxc0zKX1!ENS;CJKUeI<3VZkGKLp6wtFtrgKcrM$ zM?_G}KeD{LTBx_~Klo0ea~{vgKT3x+#sYuqKU5{4Ri$~$KlRIeY1s%CKRW*tGQy$MKfp$( z#wcx2)LMKj`5+ zHa3~;KNve>YC)8?KZEcguUHV_KhA^3x?bqvKf-qJg}iC(KdIsJ((}gZKRRZyAY{eb zKM-c^Y=*+kKTzCUUu$#6KkY3{dr-{lKX$~H3|X)3KNugC?9g7nKk{QKW41mZs1tnKbV(#1V3BrKl2ThCO+BkKZF*>Vp(R|KkSp;g(br6KiV9dID}Q^ zKVb%E;(M#;KMGp9PwF)9KR#nKVo8+WKP>f6ta=mfKf)R~ysKg@6BOc!avKO+R3OaK4? literal 0 HcmV?d00001 diff --git a/test.zarr/c/4/7 b/test.zarr/c/4/7 new file mode 100644 index 0000000000000000000000000000000000000000..e8ae00cdc2a670c777f95794e937c66ced553e26 GIT binary patch literal 810 zcmV~$3s8#z00;079TV#+QF&bBQn^UZ;XMCFL|#LVg*c_xCa+w{Fr7TENTl;fddRD3 zwn}uJ9$Q_mt;bfaRa@C3v#l@LJZf5gKfm&&W5;O|CwLOXzL?_!RECGx?>U=sDC%&r2fqfyXoXv!Gz)*GxrH#*B=VLlKephQ2uc+vlA<)=2vgI< zNazMFC?>G6%81)_3F$KuOt_?B$u+}+c$*nN|FG^m9Lk;ej2mJQvW&UiCrG#-iKZ%Z zb-4E>p``b?7UpGhvo=bGfF`jmeXALC??s%I#RKqoP77z)M7SY-6+XCO0ETM~8@^HX zXn#{HJjzwT@k+sy;ZYf^bna)L6e*loDQ%twT?n;DmR{H_0q16BR0En(5;5;;@xl&t zts5(JI@N$ejnLi~tHY>@FuI;MfaUwoYxgrP^5~yxtOupA=63R=u`TdkKlmXiX$Z5b zsMQL-9z`~fQu+!KjV>3d4$cPp$EhaIT_638+WqnfA+^xm&_rHR`RIVZ-$ z!s$fDW@^zbt^utapK%sn30m1M%Wbg&)aQcKEo47_M6c=(JJA5bmbN&1W)H@OKfDp; z=%CTwT>NCB0?F6A1%(q7NaA^A3&!*ake0>QCo9mYpE}8%Yr>ScS36JEX+ha737UUJ ziIA3mD&yHU{5T*vu&1LAm+f@7foKzcX7SY#bP|94Q@=Dfb%Na^=ZKt1jKt;%YxjS} zi*cFb_3iZ_SaqM&PgO_{&fn`A+y$aGK+g*=h1Ewp@>ooQpp>$4S`I&sZ;z!+02RCY zHN#@Utm?l0Iq$T1^gb~yWoJ7Kx7gFyR@A^+_B4zcMk49EZye#MgRIE2_dE35&8kcVftl<2LzoQ2Cd|oWWPYCBV0w=e-X8Z?kDxQA; literal 0 HcmV?d00001 diff --git a/test.zarr/c/4/8 b/test.zarr/c/4/8 new file mode 100644 index 0000000000000000000000000000000000000000..704c702ec1c61a539a653d9c3375dbaa32cd9604 GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy0KibO{v832KbW%l5>N`bKe0Y2?{OvTKX;Tr3?P)_KijNJ z$e-otKbU0l;2h-NKeofvXxs+lKWq|s#o6f7Kad0m@s3o#KSF;tn^|S!KV3KiwJEvj zKQPDZ1+lo%KWJ-cORQzSKVYFJ7~UD{KVV6!=YulaKV*U%@r~KmKe|cu3+1qKRcp(fqQh~KYYJa-!)CeKP>!glsk;=KWKD+;sC?BKa<#`X}eqDKNXxB zLo2fHKk|9Xo5BI^KX`cIh%BYXKQ8mMpokytKT0?Vf9mz!KW#MJnDkBOKa|mefDY}` zKM383gQ-#AKg`n?$1fMwKZrd?MrAA8KNJVGDF6z`KTxHJ=d7^oKNBAZ!y{_yKU4^f z?>=MFKTB(^84>g1KLX%1L#KV}KYHX^uu6&AKSKOyhtyaw>&KX{G<(^1yPKVkvyQIy%_KXl37hRa~sKm4N*)eeQn zKi|jD=(#)PKUn)FF~z5eIRKfH=78L^MaKUpCx&|GKdKYEOcB#>KY-KCws9`AKf8R$Q`(>F zKZdOJ`u~E^KiG@`p$o;#KM4Ewn4H4TKcsVBksT4=KbxQhENf}wKL+maiYyG)KM=qM zu@EcjKM2j60l3?|KS*N{bym*WKc*_(WIPh!Kid5?uUXsBKcE@Eg~I2TKUXON*hxI? zKbqVTj$VA`KhttFuHS;@KU6VQ-rG0WKgW&27OH6EKWf@n(yb8KKe1}$=ljO$Kfr$0 z2OUI`KaF&*wIR9aKXY;qXKbd|;tmj1TKN&}IMPnQ6KWb$^=>{U`KcxGMYUgRlKRS;h2Nh`8KkB~>ei!D^ zKjRy4jV|ioKagg_8T0bwKiIO=vn&tRKN?S$7}IOiKfenctx@gaKX=f0Ptv^SKLBa1 ziT$g#KhPH_^3KS4EFqB}e6Kin&;jp@A2KVC!7@JzGL>CjVKj2}PQu;oYKU1V#2AG!MKUfh{ o#ov#zKiCyMU3zBTKLPqU?UpCyKTm)J_K3IdKgdvG!kSRhKRAn*?E!_dED)rQ|wZ@A@tDA>L`z0G%iU-%gCheaN<_z zQcg!w#IC7MlT2n?b=j=7TDIS|RyM14CjNoXXKmvK51ZyS&7U-pNGm=3Ne4Y+!)2wc z3beL|`<5`QNIg2s)0|-k@6cV7?M)A)^BWB7{d%z`TS-$pEr<;F+yB?t4a!*S)pIkg z=oJ5Qhn93>j=PF;mTW;z{=xHM70u9j1(s&=tswkQuD$lw2EvYCoQnBTxk zNWhK`Apz33 z**rR22upvCLpMmEBq(R&J=tSSG3g_7jbns+b?3RJ z0txU8Q zPWE3BH-Lqk=6&WS+2I_EV9Lo~Kx%g-hvwEIuaI$Pjkg?G;-3Y(GYt@o%-D0}MJK{Z z+?oX!6{wAEn*N$^L)xPQ!5V`d!?dSeyxtKkaoh=~)9pywT69~}(~A!YtLp<6oA7q* mc^QtI;Ihd~sT<9(e#={R>4Xwr%ALYihY2y0pF5^asqqgIw4?d} literal 0 HcmV?d00001 diff --git a/test.zarr/c/5/1 b/test.zarr/c/5/1 new file mode 100644 index 0000000000000000000000000000000000000000..47c1db8a104cf442b79aae281e41b987046396e8 GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy0BD}CM4XG*KTrg6>i{zEKTxcZpuk4TKhh&;{3kooKk&>* zw@TgEKg`5oCG}$9KL+6eHa0KqKisXEg+fKIZrKfTd&$?}flKP;i~@hrdHKXfJ8 zrFEFbKLplNI<&9SKR$rwmk*}cKk67^E!`jLKh$VmU&08;KPF?`VIsEVKM|J{t#WJQ zKPwUxS3gPWKZFjY+cV9?KWIYGCOTBSKe#bmiuaM%KP<($<#86&Kjj0mUSMeLKk>Fh zdORHCKbT38UB&0&KUg%*CJp?yKUP~AL@{mcKS)E0_X)nhKPv1~jr*+OKY%*bqQ3Zr zKge*O9nzt|Km2bg6Bwb~KcJ-FF8YD(KXj`(Q=SIrKm3LVk?)(_KUm7gpD**(KN@;5 zvO(Y0KLw4X?q_S@Kb)&#l^zP@KXf%U@+w`}Klos^ELGs|KY&BeBG9L+KYS)kmPEb9 zKlrJYWUJlYKeDI(aU|sLKTYUMd0TnlKk&z)Bp4d#Kjn?)z31fUKiU|laJI(aKcgkI zfyfE&Kduqq#gDe_Ke_o*c8Aa6Kk((mlE%ZJKajwYvgHl$Kg{M9h5h90KQ^}(AxAjc zKVXsKGHbo6KmIox%Q*eoKS)9s;^PgxKg@w&VkW=MKd9YWLqu7*KUUc#H;6sqKVF^n zy(;nJKXB)Z3aetdKLDVfJes9yf!? zKOH(iG88l5Km6{ubb@`vKX|r4x*gcOKMUegf20NGKbPFuv_cT;Kc!}Rl`D$vKUNc< o(mN>WKk2bNA~oaTKV+~&3?minKcjLY?0nYdKXQ#6I)hKtKlnnL7XSbN literal 0 HcmV?d00001 diff --git a/test.zarr/c/5/2 b/test.zarr/c/5/2 new file mode 100644 index 0000000000000000000000000000000000000000..1f36d4dfc4f491b7e041757b21f48b4dd39a77d7 GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy0H0skD;5CiKM3t2Cx92*KM;qQOfA{NKMsMkUNlwgKk~&+ zppx_6Kk|E}Sas*zKYR{*A`%wrKTI6B1`74fKfs>Dx8oP*Kk7uX*sX!*KQz2`?jFw7 zKWMhbvMx8*KQpj!QX_}xKh}AWHm+No0KebW#m_fAd zKSrE^p2v3XKlDS^4cgq|KZ(&SG4%B0Kj@{KRy82eKO|vs@y*S}KTu{FYL+_bKXFN+ zfUIofKfKl|bsLc9Kf0mvt?)zQKhobOo|Hq}KeQ&1f|nE5KMKMeBn-eXGOKc1rA zaxEg~Ke?Dg9}8RPKXcCF>>TLgKfeD~=9He)Kf+P$zfpqRKkp@Ph~gRPKk>B8P&#tz zKQc~py0ydHKZq?Q=i5@jKiqA))3PzzKM-=srv;O*KWVs%ec6)kKVV!iX&%3}KUCZR zRnmvYKd$VvDFt=cKe+NiV$gQgKR^`PU=n(qKX92}pnKN3KMG6rKx?ztKU&2QqnUNl zKOCQtT*9c@Kci`@?|Sp?KR)4-KLDWT6Z+YaKS>gUh>>;a zKg4i8^+J-(KMgmWI-#KDKd#{e8KrgNKWx_CrdYq&KY(Jj=J4O-KRA&M7XTT!KdsEN zc6_1bKls6#Xx};BKLVzQT1{x#Kl0|BXC({dKgx1sa*zJ%KeVuNj5Sy8Kc(yGBvdfy zKQ7LvkRJcvKV)j?y`n4PKgCxbNEx``Ka7;3H)Wv7KT6W8_zZFEKaf6Uvu8rQKVXB4 zd%UH~KP}9sFHQ&LKY=C<5~#fBKf7=;{aA?RKZex8AI?SHKghmBEwCf(KmLUq`r5qK zKftxg`K+vlKltObR*Ub`KTI(}{*ySvKMjf*%8!fSKR9ZlamhZqKO(!8YDt^zKVDpy zhyJ(VKYBC~2RxM0KL8FrZajr^Kjh0CB4;zhKjZ@r(a5jqKm6xm7PX`AKmN$}loYAs zKiGswpTd~sKca6;^;KkSo7Q>JRnKbT@=kgzhsKctKGY%+ktKfIEsFSaS@KL`vNqct+e zKa?I{uSqq~Ki$YNEI7yPKjNQtztrIGKOoh!{WBupKb`3GLVYvlKR|7DlWabQKS-;w zc7<5TKb*mhp>6u%KaS-=>UTijKOh5~kHUW6KR6{(-rkP0KXnI7HTf9nKXe}{8jh#h zKYodgAg9OTKaCT9K{D9lKREt56H~0qKeT_jE5}gBKWN%P(%D1aKNtsKOmNyKuFx$KfUZ7!nAPeKll*CenX|tKbt}> z2@KhyLpqfo@+KTCdm zHJtq7KPbhk3w~qRKcL;rvwD%BKNvBT>YUo@KlJJxGfd9uKQ1O$W3#~2KgduC9Kwa@ zKk(8*Zv3j&KPvoktM=*EKOj+{O-(bVKc2G&rJyjTKheA5t$*y|KUZsEc|zgu zKiV(ZQ>RJnKaGPJ%S9{ZKh}GPv_nnSKMQQy5!d1AKaz3_Ge!F5Kl=N5rE2WmKl+#J z*;p6hKSu#AKOhh|W)-~LKhVss3QjMmKLBw{*V5FuKb2-1?`!twKcH(12Xbbo zKQy%XOW$hCKj6a^ObHXLKfEK<9CUucKl>(u!)D2 zKit?Rk~Li2KW0-^v_>N3KQJ962tHEIKibTi2*Ts$KR?8k-2d(FKY*q&skJewKlYcz zX1@sPKd4DNwU)HGKY5M0VOrVdKOk!WhGDADKX`kV%AD@ZKe&?`20ZTKPE3T>eW8&KZbZuz>eJLKe8G11|3}EKggmh98VbJKjs=_4)o#RKbrUH z4I#$iKl$&Ix#P&_Kd=oRLs)v#KRzATlI&69KP)4KMf#oNKl#J!p!fB;KS;6FqWdo7KXAo` ob(_V#KMEpT+d;S9KY#_1py{j1KXRMHTk7%EKU7gdP4ueGKfxQL1poj5 literal 0 HcmV?d00001 diff --git a/test.zarr/c/5/5 b/test.zarr/c/5/5 new file mode 100644 index 0000000000000000000000000000000000000000..daa3a24da835297aa6800f3de4b9a0a30ad0805a GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy0NBHbI|weqKf>&Hg(#xsKeVgaN2`w4KS2D`EHb&jKajWo z9rL8EKL{=&00-L6Kj24msTH=qKQqSdPjZgyKZyRf6K9sYKS{(71Ki=~KM-#^_bA%K zKgtZ6c`d}_KLgY>9|F$dKRD`m*3o~vKaNhr|5h{9KdsQsH6qIEKUN9iLOb+Kc_4e-TN`(KRAb3s7fiqKg3(i^DE2a zKPx$)R|(qYKl)MS8lFGWKMXYh7edX~KN&dzxE6xtKZ+4RPDJg}Kbk`X8XA|ab7ZKh&*6Ql2`{Kd{b~coVarKd0Jf5Lx5oKdfMPjc35+Kcuwksze~c zKN_Z@X7{!4KLF5VB&nUjKVi?F830J`Kj%pJp<3SUKUOQAHUgvUKU{ah4!8g8KTbw_ zF0hjBKeq3%%;k>jKL8-st2O*NKVKMtA>FO&KkP7*e}L%iKfr43r5=8yKfc3zdUVL? zKmYA+;Tn?UKM1eK4E5K?KLA*oA-3CJKLCJaSbgG$KSza_nH-DiKaF2v-SZLYKVVK| zXvl-kKNRT>D- zkGguoKSVA(`DbO$KMtUvbk&0HKNiisldMzaKghu**ybC(KS+%Rg|LUYKM28w^UHy@ zKOVg3o(wtZKiV<23ZaG9KYAV1DChU-KT&ylHR&?sKbRJ5J_O3VKfqElQEkEBKOhql oKSD9yKdl;b#A`s}KiN>P*EI{|KkP#%hmhIiKclnDAl!iDKg|f1@Bjb+ literal 0 HcmV?d00001 diff --git a/test.zarr/c/5/6 b/test.zarr/c/5/6 new file mode 100644 index 0000000000000000000000000000000000000000..38816901d9d164a332ef9c7f911be4d59f1ebda7 GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy04VJm{0eikKi=2Ltp_{PKRi6<<5w)rKXlD`bUa(?Khccs z5@37jKWgvRkaa%nKZ`(NyG*$1KcI&C7KUHtKiL1<;ajuOKY+)HuYyg1Kk%MoTbEO` zKiR2vQQNQUKc1ij=Oke6KO?2RJ&I}LKXeFhbWEVjKh*na@|bbfKc0PcE;v=@Ki=_! z2Q&H7Ki!O!Y*RAkKdSwXH>fqxKX8|4K&?6KKXc7$JfUglKSGjJ2zG<)KPgh?_!iRZ zKS{5mkgN~kKhQ%@jDO|CKeS$Si9=+|Kb{A_+=R^TKYW9@-WWQ_KLA8~-Go~7KWLEs+GqFZKMjR%V)X;zKdcUSQw!hcKlF-jRm^?W zKSM!<0}f#6KY~&qs~1}BKd8{j=V;32Kj4+F)|K0*KXAH?T;>$!KP-)Df%j#~KZsis zi55`IKVDxGs`LWxKkYHwY zXt|f$KeP+?ivvOCKallrUlPvZKM*GGk-I~_KOopVOxpmZKU*K!zi)HpKZ;ru+W~~w zKfD+SDc^+OKja#Nf{VuHKjhlv8&){#KOX8QnrHjhKV~3SZY?9{KL{8nIpHbfKOwEJ z>P4vMKL|BAKc-~22rSC%KOh*+M3xw|KekS!A`dLy zKg*7(7H6pGKX9Jq!OK0PKTJ86sDVE0Kd@ZJ1>V%$Kcsm|qZEtdKbk<|ZS#WbKPJm0 oZkS5tKLa`!&x*R^KYk*cK4f0mKTPv43g7kUKWcY~h4C-gKPtSEP5=M^ literal 0 HcmV?d00001 diff --git a/test.zarr/c/5/7 b/test.zarr/c/5/7 new file mode 100644 index 0000000000000000000000000000000000000000..88d04e21111af323b5cae5379d16b3ec6837b9c8 GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy07H;KEPn#yKV7B;XKVGMzAZEAkKds@89U7MI zKM>$NvuYxvKlbod>nHE#KL+c7NXo6^KLBO-mPUi?KQ5ZaI?Y$-KLC)uIpH_rKM=;r z3XbxqKichJ?$2xOKY~4au2c^0KhWV|Nbu+0KRAB6cdu^s8_KY`3?Vr@U+KNySmB|YlcKfo|NtHK-UKPC>&I0HKAKj*wQ z6>L)CKafeQIkW86KRE|W^ZYL7KjO-_^;*8vKj(&i6D4KgKeFV{v?VOnKTV#4c^L}k zKjOdnp|WV+KTzb#R>K~qKOEB-ts6PvKlaeEtQ`c}KURPK_z&shKj=Jg```)VKNbW! zyMzMhKdw1pf&{OKiZk;k_#ByKj}-Monc7rKdGc>Mz=xlKV-PlItr=GKa_O!mRtD8Kb5;a oYra?KKWV4e4D0ddKjfJaNznGyKaw|f8hIz@Kd4GNwu{uaKOPvL#Q*>R literal 0 HcmV?d00001 diff --git a/test.zarr/c/5/8 b/test.zarr/c/5/8 new file mode 100644 index 0000000000000000000000000000000000000000..8e73e81b55610767201bd6df52e5d777a352bc34 GIT binary patch literal 810 zcmV~$3osJ^00!V$s~y+!=qXNGxK+Bzb)|=Xq+EKON+q3aU8T4kJ&qpNTBReBU2b{o zNX#P+T?ywF(-OAKu#J(~CfjUmwbq?VSKmi_NB_(4B|3Q$I5hRIn0O9K(_@GmZfY^o zbZmhVZh`9>*7wLL9Zn5&%LV)?gn5_sQd{$o6BMevq%k4vWZ}(Ci-nj-T8LyMm_cf0 z`TRJn!@T&>+rH=_6r>)a>@C!TPuCGESUPlPlJ&EpI#geoZ$Ii`1U(~p>)ik|+;gtP zW%b*Tx;gOGmOLXe_Zyx)^)TQvgI(-YF2<@1LS0s~1)Eq^;;x@I*d!;Ob;{;IJHi@2 zf4miU1|>B&xO&7q{3V?V8OOOqm$I*aY#>Z;PN*=Z!)mX+_I8gEE4F3XFA;jc9?mq) zMj7Fl@cEF|ri7AAmhDW{LS&G==cP>HIWI6=TmKaf-vhUL4tzqBh1xG@)FCFR)xVV` zKwC#C(_P(*?4&i~KZj(<3F)9u4hEy>dtKDHYg{1^sbkGs^JtOhKgz zA*9%ZH~UoZeG$Ao)};xbmnjA%r=|F$G$mdoDshkW;J$U#g5DGH6$9s{K`WLNWl%)8 z;E?(WtYb)<*L3kew188)G)`9X8UxH0*ai(y6!7vy)L}SAK3W2!E%13>*AQDhj==)&{BVv>|fo6Wm$gFU%IUbzAN`~gqa{!Y-bh; zjR@s$o7s`7gPqNzB)?PO$#wtVh3-m(tl)5#M@dk{&8&CLx50aXKhE`=L{Px>>ec%S}Vpgmkft@7h mNDV{ymVNR?Nog&Xn)536uARXI^?lc^3=7IVGz*H0{rC^Et(F1+ literal 0 HcmV?d00001 diff --git a/test.zarr/c/5/9 b/test.zarr/c/5/9 new file mode 100644 index 0000000000000000000000000000000000000000..9c74483630bd9e10ce563c376a1b91d1392dd3ef GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy06I_Cp1>pFKeT2j+caV3KLGt}JK3;~Kii95W`u|6KZxf{ z+U!fuKkJ7>P5qbdKU7p8!n5PkKQyvE8~Q85KhQE0tepnNKXeu^$#HnYKUB)3k>Z=- zKdr)ZkPy@FKgub@CSx|_Kc@tjr(%EMKLBL9%?q)|KdLIN2&Td5KThp3Z-LR)KVqL6 zI=ME~KcK90xc@5DKj`N%b1I$RKZyE^JSA$sKlphP%Cd{sKc%2|w@>NoKN#XFJ6s;S zKS>LhN~6W?KZ2F?>q8suKa^j~SRO>mKg7hxW1lJ7KND#!F_!Y`KgB{91=`>5KXeY7 zH@dyzKhXSwkKLcN$23@P^ zKevYZS8F%tKdi|Hu{v1eKQ(cZF|f?47`c!Kj7;~ZfL*LKfp&GQ#i)cKf%S6`T~07Kh(&@>A8U2KSn@YIsWkH zKll*{44j*^Kj!vY&rapxKh1K?hF3S{KloR9LEO3HKV*cCGQGISKbXo|J%_R8KY!Of zf1~E+KTEDc+~85>KR|xLZtBKUVr4Fz`6l zKU|wJ$FMWZKiFW1PIFS}Kjv*F53tm?D`KL7z^Z#Lk-Kj_2OaQ#KdKjA%?99fL*Kj5rLD(|z9KQoH# ziX}bbKVbj=4D8$5Kf{uf_w?%QKjtru9&t?EKiuXYv77AcKi%~<>ch(KKZ1%BW&{i0 zKZG5tv2wWKKMz}NBm6z;KiU=Zn5#J1Kd8_io8pDsKlxx22Z+kyKh}%5Hd)5iKU|4` oB<>^RKL7zL6k=QEKXVY5E1G2EKeQm$>ahjXKT`z&E{wh6KO^*`X#fBK literal 0 HcmV?d00001 diff --git a/test.zarr/c/6/0 b/test.zarr/c/6/0 new file mode 100644 index 0000000000000000000000000000000000000000..465bb7f5879deed31b869c7e52bf5fcd231674bb GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy0P%q!+4e-`KLoK>VqVVYKe&p@M{)hjKL$b=g{(U5KlC5@ z0I*HiKcJQgp9c8fKg3}I&S%!&Kgb4w%mOCWKP)=^?h{$-KfGmUmS%y#KiYe|`l)&C zKZ2!3Y@Su)KgE@c^LY2@KU6b}O7wx*KPbktObLL%KRQ74S;gYiKN9>_cYt~CKj5z4 zhZI}dKY-US(KS4%81kjsKTKsfnj6vIKLD~htbA=|KR__U{nTXHKijd0wI@jL zKR6~_^Mr5CKlDft;!pkDKM)1RT;M0VKg=ZicBVMqKd8H=-lS^2KRHLN0G|iyKZ*^Y zO#p}IKTzUAU8^_SKh7Zc2S<$KKcjQm_YZgHKZXjkN`W%yKd5*dtTjdEKZfpK-Elqc zKaDd!eY$$&Kf!Vm-$s?NwFgKL87&R|G7vKM;dz@k-^RKT-q*6QMiSKS<<9 on<3D&Kj^l`^7H`fKST$3pixJ_KNwWGC3w@-KY+OP`BP%IKXT)qga7~l literal 0 HcmV?d00001 diff --git a/test.zarr/c/6/1 b/test.zarr/c/6/1 new file mode 100644 index 0000000000000000000000000000000000000000..f5ec39b41d001795b24a7b730f2c63026801a39c GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy0MPkstpuaFKi-%c%^(BUKR*13r`Aa7KOBmzT~XHQKLlxR zkS$8%KM&A$IU>R7KLASI)~}PxKaMuW6oRqoKZI#yDdpJfKY+u6!Y6RQKd00eSL3|l zKN>QZVW1`6Kc{aNz80$LKWER$lviu)KZbAITC?}jKNwAu%*+npKek9BjGj5zKRvVQ zPn?wLKk#1zoQs#ZKg3PtbCMq8KMxn969uE;KQZ_i#?1okKd|%}c`cvjKWNkke6>ru zKiB8MmZqcSKke%xd$gMFKXBkQG!;JCKW2%OgBMELKc8>Wsu2S2KfKhTh6C`}Kh_4$ zXtq4yKdRqPGfqI!KcK0B;i&esKNqsn*<{)4Kfq4B5wIVnKTumD?bc?_KXmax!MD@p zKO5N7EouejKhORv63U?LKMYa3TPrExKV#){mh;%@KX9u{Ben0tKgyyMJOBmkKj1kF zqi^=AKPk_OYfL`uKUmB083e@1KM;!?g1IQaKTOMcadRE#KPH46hSI+1KgO`0J`ynKZGJK z*J|<1KYxR=K`&kIKd4GF)x^WLKm1w|>*6TmKLni&@1R%KKWL)%6r-@yKR_AY!71;8 zKcYnrSi2Y3KW(L1NWdQHKVxE5Pb|vb#KRm2Uya8mxKf@GZ zNb%L{KN3@021Fy}KMb>W5Y?K%KctqEROQFdKVTe?{i1EXKQw-ngn;hbKg7s2+&O92 zKbOIW5_rDsKkdj&QLvWoKfoPm>c?5yKQMP35e^K(KiD85yy|VfKelLcP*jTPKYqZi oDi3GkKZuAT7=+I1KVY&--XIo|Kkn-%3}js9Ka2wl-6=H5Kd2j#ApigX literal 0 HcmV?d00001 diff --git a/test.zarr/c/6/2 b/test.zarr/c/6/2 new file mode 100644 index 0000000000000000000000000000000000000000..46894176e9f14cf2c48140845ad2d27851aebaab GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy0EEHsg1R`;KkFYDmzAXGKjxZcH^S@IKjLS>8h$U?KMMPz z!(heIKY7Zh!>kpE=4 zKd68kQ9NMCKLZLISNvJzy^KX@R0>mau7KLCBT`AX@ZKUUo?>E(3eKW8^U zHkFFwKjx9=Qz-!DKlXs`8*5=rE?Kld(_#V_CI zKPmZCA#1AbKVGFZZnjwGKY%0eKm2|xOywcVKTFOTMkJu?KhOh^ zawU`9KaBbz;)eUwKN#|N$es4dKR6rp;C*-MKPSkKY(a-WvKVDMU*vF63KQ^7F=ZuonKO#L! o?)4?(Kg{gg#nx%*Ke7V+^Ci~oKOJB&ly%AJKa1BN&EhZaKWFfdqyPW_ literal 0 HcmV?d00001 diff --git a/test.zarr/c/6/3 b/test.zarr/c/6/3 new file mode 100644 index 0000000000000000000000000000000000000000..df6f768aaf358cd0a0255a4c928c950d628e6bf6 GIT binary patch literal 810 zcmWO2i!;*!00;1u)e$P8(Bsy%(|Xc*r02J%mRv+n)ta&$XQ{R>J-Fsj4slLbrYmY8 zS5h=LS`Wl!v~b3+*ZQr!+h&q#-9r9^&xaui7-iEYPx7VMJvW^Z-&A6d>p0*2|FP@dh}{@cn=tRyBLR$ zktmpv+8S8?0T1%>*B;p2hK3u5nBjF6@J?OH^T<}>E-OjqW3$0u$=yTaYVn$5s}qe% zFl%L5g6|U&r)uWENKCdOx?fam52ytDQPN_UMm<`FVx_nK7?Ctouh)+2VVz<-8z3@+ zxRf%thoi+PU03AhYDCWJHJjoeyhUinJHN3+1IR74$q92Lpm(i5?XGAAzdkW#1;v2R zDb1Yqk9uIqwk#EgX>d7Y`RxN0284AwZ%AK6z-tPP_b;;r*SoCK=%V*ncf+W?9ixV& zbZ*7QKcDgXS5b-VycqU18EL7?L1ZrUc~N$sgjKbFd+u5d1i#FzfMFeEQB~Y?M|6%2B=g}YIF(uhy^yJY9_J2EX|%cgGT+fDF) z<8AMsctkx7WkWgr?1P^Bb(jgRPAYjVl3g>$d7)^cm1G)8`;Q#;t literal 0 HcmV?d00001 diff --git a/test.zarr/c/6/4 b/test.zarr/c/6/4 new file mode 100644 index 0000000000000000000000000000000000000000..d4067b52f8ea11964dd638e98276f2e68a134f33 GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy07R}4G%=9MKbW*+sa1ZoKPc&Cj(YyYKN!xwm9+o0KYaJJ zl(>`TKT?dA7z-rhKj_NgA&r#OKUg`P+?zJ*KWkM|H|k*PKcvZ+LuVq~Ka@YS6As4T zKMhgkRshK0KO`EKDK5;zKS^A(7=MrGKeUsF3$TXLKaQ_adHYGxKS)zoEIt&`KY%!M zZ9CMVKZ39^Fa4C#KP*)*NhBS@KPQ>*c58~`KV)?8wNz#7KM<<(NWtRZKMIR!mKXcb zKU-(8Ch5uJKg52@*d^5LKZ-Fu^3h?~KQdt^PCawiKWt<66kW>YKMvDgZL6f&KM1Ko z$2zjUKR%JOHRnR#Kemk6>ZttIKM>f0TtNJ%KS59b)k>x7KXe7u-VDgbKLGe&_=%Hq zKPVf&)U!V0KcE4JE$6V%KTst43BsDUKTzOvwb*giKlJAA&*O~lKNfPi{jU_%KbbWM z(Ye0qKkfQQ7j9?dKY*UD=tnocKcGiMPlmdyKbW72keLg}KVw9Id)nFNKZ09KL-0}yf>fWKUuvgJqXz6KbXrD zQv8L+KX8IM>{&d@KSIn}tfSrFKkGEmN4xasKg7Kc84ykGKb};IwBD`nKYb=&G)I8o zKkDQ5)bFHKTdpE{xZwzKY-KNRQmJ06_kKWiF-1r+z{Kb>cI#rOm0KM=&Nnq6YKOnFC!DTkyKMF5w`(khFKfssJxlA#JKk0xlvHHR5KmHt>zW@LL literal 0 HcmV?d00001 diff --git a/test.zarr/c/6/5 b/test.zarr/c/6/5 new file mode 100644 index 0000000000000000000000000000000000000000..7d1c77c44eec39bdcff856883379758c24aed3bd GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy0CbX?3in*VKbcPew<&<_KS)4ZXBDfoKV&&idk#C%Ki5av z`2T?IKf-=3Vln{WKbXmn)i7DXKR`v=hi1%;Ka>kP$0!BSKb&T`ZvM{8Kj1`2GO}jX zKP1Gy;=^(8Kkn46{Wp!{Kcp4zg`dajKSgwXr^bWsKl1@4sD6j+KWv~StP8g4Kb(uK z?&*HRKW3F=LcvGrKTrj398==AKlDFCRIGu;KjTPu<0UQVKeGBG34%}FKZsr5Q8iw% zKX#)thM`l@KajhzG{()ZKLqS&_!_wEKM>C*6Z|>UKlsC%#XzIvKi=Uxk^lVMKX~LW zesGV(KftADSA|&TKd}4?-K1v3KMJ#cS3;oPKM?U?jT6D6Ka5m~fXS=DKcJI3JXq4) zKc=%)E$&y@KZxp!Hz)|hKRROL6Wti&Kcsg{%QBwoKeCJpY!4sPKd-@xmMxv-Kb0N1 zBLe#AKf1Jo1v41zKlHDn>yrq=KhW(8>f7tjKadZqF!VC8Ke!ns^X?nwKj!aEyRFvQ zKmO4Lt(W88KU&j|hyhyAKlSGQw7=KkKVR2*jt@=XKUufwLLJTTKYUK=Jr11HKh$Bp z>Vf*+Kh8?XPQfbcKa!SNd?0e$KiYNSM~PA7KQG(i>X}*TKMqZZkDII5KRyTmdD!&d zKWqzfo5VlcKe$|fB2t^OKU@Xce(3+kKd2jk`lukjKcw;E5X2YNKaAQ>5Td2qKfo?f zDlUS+KeD@&{+{94KhO;R9ZWpcKR%Z0dr&;%KSd<~>8)SyKN&r{+Cn$vKZaS)A=g~! zKQP0LJDgYDKls5F?pH>?KlCCj@ZL}EKTwk-f-v#XKL9NRw7g=SKb33f`d=63KmESe zG&IcXKV}(yKjH)IKhT<*eIFvyKLknm?Zt-4KNZP%PBPx}u68R`X5MzRCH552ATONVhenNq+#XaOxH*l=f`8MZWE6*qkh^;>(C zabgelGLC+@8|Z^MZjo&D)&}rd)J&1I5&pymXDZ!}?T7yc^a)-F>%`=A-Wa-D{Vf{# z7-*;4P1*iF^r}zZ7g)4labF8rLM@a6Reo-#2PtK@sYQ`3Fr3@>ENPmvn<^s*N>v~o zj?Jd**J51z>r7RL2fD~3j}%-bzK8FKYPn_vVKO&UoOn7u_NQaODXrf7u1Kd#A|f@IDRymmpIxF;(n9y@q8yz`Kq(g zW-C&2UIh8tMp5C7kK9mg$E~mC7j&}+WrDe!FoqLMkuhYd#*62Fax0sMKg0cDZF$0p zPbg&HcxV~vL~Rp4xJqq9K7~Ug8s#WyEp|WH_!WvG@3N_B&vho+#Ht)CCRtyKMrv%( zu8$^>_PDV#aZA*0X*brjU2e+K*ud+{FbIAaz~+%w2~KG+XY>5JsUQ!0jNVs7mJ^&a zr{-B*avVSQ-tf~mj&ecu({@E3Vp#f)7^)G)!g#Q+jN@Op>c=Ls6%ux7nzBv?l7zFM zWabb&&e^XDLM?BM7eAvfzu#CO3|CEJz?*# zf+UyOXSgw0KOC{RR*jOSCw32JDdDG6s#ODCyfLXa(;L;e*Tv-XroRAWT6a9y!LrjDODy59mM*G{{RcJt&s>E}5Dg_zyKGp+x`y literal 0 HcmV?d00001 diff --git a/test.zarr/c/6/7 b/test.zarr/c/6/7 new file mode 100644 index 0000000000000000000000000000000000000000..75146571960ea7edfb5058f153288c71b56f5a5f GIT binary patch literal 810 zcmWO1i!;*!00;0muR2F1j!ve=<+`F=k@NVb+Y!B7bdjsv5!xzsiO!W29qYB^XwehV zLugE6%@jt5*<>Yc>$iv5Z2SF9sq59&`{68K^SNA77o~w2=m>)LnPJUN<++9w^$9bmKSKaX)3%{U7nT;)F>i3 zUc|Hr1Y_6nwYe`)WbhJ1JH7{zpIo?I#0Gpa!tKJ;;4)Ojk4;(xd(s$p>vUkJTYfYj z>cOFl;R{YSlkm8}nrY}7!t{}SqRPa6tmyau=Kny6?1t1zd7=(3QDz_2GbOI4r(81& zW#COvTv|)}P-A6b5gDw2L&eb;$2bCFg-u+>Rt>5*2EX7#&1Tiskc}MM2?G zaGcWz=6NPeR9A8DOiMAGl|w(k=|{wZP55OtiMccN3AUb}F&|C)eWZtkL?-x2ZxW(y zqlYwUof3}}PdoNza$xs-hDlH1V9_S$oM^omL~V;z=%@twDaU197;b) z_ez+&XZWeYA&i(mEh&_ZgIZNwzBAN-+cyJO=94Cv3xvK+YmAT|?CEst?nFEHY4s1= zDZKJ$t5_A2I3GE-RuV7@-`rIXAJmg*Y_WfM5Iva=_y=)pE7OeVJJz_%{>gKawGioa<`sCszL z6@6)(ZO1Q*FURh^HiAZ!*fU#(K{{Ddm<1+$3ZlradaDq!qFGq>T??nL)nDgY4REz( z(mdGhIGhxy*Nzh~i`U0WtxSjtW_9u04cLBa{B6BRgAS^pQ4vvy#gVQ~`aMQ8GHy@9DJZKezK@K4L!PKcb_|Ugmq`KN_8UGthk1KOE}PY9@ux zKi)7HKA4f|KWMjBbD%WEKdMGKf0`fLKa|CR*}7ZCKLAF}__2xMKagzHNUIO9KR9qC zM|;rDKQOd?YM%DKKf3z}D|2k@KLX3yzwVdZKj7QDMJ$xUKYgI5l)h>2KWNW?dH~JN zKbXel?>;)~KbQh({o}5(KkQEhDVqY-KVFug;--PnKi#_GlSvWiKeYMB-)(i%KZ^n3 zOsX^OKlxQ7qPtk-KL$(4RydR8KcrJ_0D#NoKfXX;n~x~dKcE&*Bp?yWKigS%P8a&^ zKcN*Bv|JSJKk)P#D@8KhT65Idav+KY*bmBd}3}Kg-}zqfF1@KThB-@%A(AKRaZSxHS#nKim(pQ9Dr9 zKREQ>bF#<6Kj0)jj^A3vKbZZs3Vqk#KeHmL+J67#KX@5w9p3ZRKbdD2gZ9nfKXOCx zzStk=KRa>w-LV_(KQKq5;%nyRKV~O`&)1KRfAS3K$*YKZ$G|@zagwKLhQvq%iC4Kfv9*dcO9mKjS@A z-7)6oKP&-L=>ad`KeE94ID=B!KTzvha6pCIKaJ~yCM0a+Kd{gx4__DUKa$XVFrw|| zKMYqTsj-g6KWN#RRZ^eiKXGqt+zWN)KN8t`P0F9&KWL57*E~SNKe1e|ZB$U}Kbk!> ot#E46KZF1m%zKPE&4B!hD1KPxf^Y(iM&KVpageyeflKakj+>i_@% literal 0 HcmV?d00001 diff --git a/test.zarr/c/6/9 b/test.zarr/c/6/9 new file mode 100644 index 0000000000000000000000000000000000000000..f91d73cefcaa499edd73001a42da6b7d956da69c GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy0E&W5<5!s5KU^?N$t)k~KXO{^4e4CgKY~9?G4NN^Kd^~m zfPr1!KTwFHK1lnjKLD>pCk9}BKN13(0zo|6KT9lZ*$sv6KYYX!SF7jeKg8ov$Jgw^ zKTI3qp&sSIKb+M5kxT}}Kk_P{|4824Kjfcq+BsY5KQ4oa)LusGKlle#jH~j-KQ7bl z>lZB1Kej|2$9;9vKY9QR;-7@)KQQC(_xWJ$KSs_{T9`Z5KN^j=khMzFKVmT$7JpIF zKiIL9Ko*VOKLP+BL^%uRKVv+G*QaUbKNXma_^B7+Kj^$n_c02`KkaTF%BdXdKe!XE zy;2G7KOAKWLmxxPKOq=&sbXp9KSbP53V=J*KcKY?#zEwwKgKPZL54rpKexN$L+4uJ zKTK50{Mzc-KeVi8!CH*WKMHntUAZKU&Lw1cs^7KRKc;vCh)& zKVXA|7Ug-RKftVd3ROARKOiOoN<=)OKNDtN3HLtkKLF@*2lsbKKWKwX1Os@tKTJ8$ ziwyD7KL-}D50^sbKbUw2@8X8)Kh&1#pM*BgKOu)%34~c{%h zKX^Hu6g!{6KbA$G_O>SJKL^>*ISC`u zUJ*9!KiJ~L2a6iuKgyc4=gNWFKOL4PH9tk`KN|s=!j_!nKO%}(cq~}wKYRls;io{| zKOxj~>0_zmKYT@+$5F?`Kdx2B7s1Z!Kfm*E+03!#Kfs{?U#J4dKSS|{{3mqlKTI}F o{X`wiKhDf6Y#+zdKh(4?J{Yv-Kgf?Vo%Fi4KLc1ypETU>Kj1@&{{R30 literal 0 HcmV?d00001 diff --git a/test.zarr/c/7/0 b/test.zarr/c/7/0 new file mode 100644 index 0000000000000000000000000000000000000000..524bc77121259d3ecfea41c31922bc5a5a0acb1a GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy0G%Qip?|pNKZt^H$Jz9@KX8jwf}qCJKZFI^fVc`*KlMd0t+8U~KcHH){hL+i zKYZcV4O_9#KZG86{G3J3Kce}>=alx*KM2@uLo1QnKhUjMbAmV0Kk#9!{D(%tKS1KP zG#sX>bPX>KVV;NnTE9QKln{x;pSb#KS&9T zXp_;oKa#UqZ!+iTKM*SNWI>tHKV+^zZ4D08KeBl1!m`-lKMAaHL-bMSKbF4}dfndS zKgkBAIHBO@KL}f+A)Y|#KM;Gt?B}53KXkhcX2-$MKVLrpY6HaVKc$5DRH}~RKX3&W z%ZjksKbTBoczImOKVOa@;c+nGKjx645*(J{KkS@Ak)MIhKbi>F0H4_BKm5>fRN-yi zKi0cQ9`Ty!Kh5&Jq0ZpsKa}0h>Z}*kKaio*VVF(8Ke+>*Ta&2aKR5Pfcx` zKU_F!F~950KVXDv&Q5QTKZ59879X3?KfZo2Aj6;LKL}~q)``XFKj3ha5_{ymKeh3l onG=`iKS19{Y`c5MKMF6#gQ}X?KX|#=FQ?1LKOhQ$?a#8)Ka`B4<^TWy literal 0 HcmV?d00001 diff --git a/test.zarr/c/7/1 b/test.zarr/c/7/1 new file mode 100644 index 0000000000000000000000000000000000000000..07d83f99ef6bc06c30f6ceb5218ba36dc5b367a3 GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy0Bnyg#)kjRKQmQJw0F|%KRF@GxTJpIKjHLp0r-pQKQuU6 zJ87@(KOhNQ%3X%aKNuuPm`;${KYkPacdF^=KXLNa?Pa3vKV%XN=?$#QKRDpqYBPt| zKeMTIo^XNbKQzf#6ujTZKYNAnl#_w%KgT3zPiWZcKNQkyf?#UJKX6F&T4cGkKbXE# z+jjA=KiGwfp%&`TKNvS@lXdUmKL;5sA#SznKj@B4vDDYPKh9EKRSsX=KbC+4S4%eH zKl2Pbh+wthKg(dwS<@o!KP1fJiN}fBKj8A@K|vLGtKSYM|gW`hBKMcvE?l*&rKg5VST#ePq)-tKeY6K zM}Ys?KVmwK2P2%?KS-Vlt|h?1KcWpp>o=R!Kc~@qUsw*|KRAx@Zh%khKNQ#4hxLum zKL9M?QPxvTKh$Iv-rv{TKXN)3d?^&)KL@V~s>6`$KXm>J6;EKUU;J zbc1QOl0}KahW&xANT8Kk!#JfnIUoKiClIwKQ@xUl(u-|KjXd@)Lek+KVa~iQ|orJKWQ9l zjVMX%KcB7wLSWwEKcE9cKO6y8gDi*BKL9+H?$?{$KNv!T zl|Ze&KiZTFxCxx@KZB;ZY;DfwKiqAqDHbTd-kKMY}* z+Q;YEKaiixmMZzfKMZcEVD`k;KXMsU5Gn@lKd>H!HIf#lKdc&N1tL+*KZ($I#j*eF zKgslnK$sQdKhTA@V$iF+Ki95pR~K{UKMvj3#l3RsKV|;G0=-}5KLqp%_iqH!KLQ5C zcma~yKXohEFz1}@KM(4eTIKXf-(!p(WiKcGXQO3C@FKRMD3 zgC(xvKcI$fIytrKM*AwmP=ZsKguaI!c8ygKR`_iZ3$+-KVQQ-y4zjjKblAvnbS$!KhqyL zle1ChKO(+=)AC`~KZYH}!A3^nKdj>~yvBy*Kfspd6CQTaKWH1|4hyrkKghBH!4reB zKe)lNmj=b$Kf!trAr;o*KZK%+$Qs-2KfMUIEyj@GKWMWdR-O^cKU}i)3T^VhKh(F< ow){}kKh1qv-)4E@KUk!~URjCYKXeyzS5Ud`KTlJ7fOdoFKW|NzO#lD@ literal 0 HcmV?d00001 diff --git a/test.zarr/c/7/3 b/test.zarr/c/7/3 new file mode 100644 index 0000000000000000000000000000000000000000..48ebf41718aa6dfc8a5769edc852134a4906d46b GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy0KobXwVVOBKSgG6GZ7!w7dYG>4Kf}R!mOd!#KS2(p@bsPKKWft% zaHGT4KR-0Q?~G^ZKh%e5;vT`mKaA$OzEGjqKS1u4==KE~KTRVLfy=k(KhUTQKZ7v^^w9d` zKR`f6*ahL$KZ!Qu8q(V0KfaivAF{>mKcPb;$=7e`KQYpk2R-NRKg@@)3AWzKKUSrl z;pPI;KScjT+gzjEKXAHF%*naXKZMI$Z7TJ}KhTDiYx|4YKfAr`Yl*?*KW&-SXrHa<>KVDAmjqnfeKddS5yKfuFR()THU^Klo&R#dc%mKLhGpa?GaWKg!lW z`12XpKa^j_o;PUNKXsJNi}p3@Kbn4aP+HCEKPF(EjXWLRKL8tgN($ol)KiP}9`&qf?KdAcyK9Kg!KZL3+ zHVZ_;KRcho?p=iBKh7*Nm-I2$KQ3q((hbb)KZieO3+~|KKLL3{>?*e6KZbQtL9Q;) zKlpIZywSz(Kc8Z`Q5VJMKOQBLMfWG)KX6vKj%)CRzR!ZKk#I^&sTriKRc-SpQl*n zKh}rE=JA2sKjwhVlr&P+Kb=BveSiz?d#UKi(O~xVq-)KODsAn~9t1KW>t-yEu*5 zKk=c*jwJTvKMT8zj_JtaKkXot#yHjHKUDB^5GcaRKXjBc{$!%gKO&q7hl9V?KWx`! zh@XKj11w)#z2_KmX~^$GcYGKRh=r=IiRp zKa&QR&93C(KNNwNe6umuKVZ*C_cvP5KX5h&i(=TbKfV5w)X#0=KjUIBs8MX~KU<*| ooQ==!KXjJ{Y8CCrKV)O~OU7x*KPF*&3?ob7KPa8LkLvHrKg^t+pa1{> literal 0 HcmV?d00001 diff --git a/test.zarr/c/7/5 b/test.zarr/c/7/5 new file mode 100644 index 0000000000000000000000000000000000000000..51e84d7dd198ed7b9060824a59b22436d2e6555c GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy0B=JXNA|1cKk{(SYvqvJKeWkia6c;0KWJ7w$+XqUKVBy8 zR~cjPKf{t;;g}laKQ;BhW$N1NKO$Y0_r&(*KSBxIMaU}cKP>4`Apfb!KMvduRK`Bg zKR}dsk!?h%Km5}pAVFQ%KWzK;LsgsWKTg^?v!Yq(KfwLxp_1|JKRAg%TR_+CKMd&M ze#aN&KQj&x=l{&*KjaqZ+;`v2Kd{$ZdjJWtKloaob|_K4KdN@(VqDeXKa@u3F<_Fy zKg5pDz04x#KivO94=T&KPmsu8L$uPKVb2g$Tx4SKlq{vb>jraKcF@u1~V+?KfbPzT4?>~KeS;W zwKLJtKPPgj025f?KcPowj_Ty?KT;4h!DI#HKLujBJzIe5KjWKg8{*99Kb0r5p3`sc zKZm)yE@M^dKT4brGCn_Khjw%#X!^PKPU!lY>qt5KgbTVD}emC zKSLQ7>QevgKQO)UE9~IWKML=jbV0J{Ke`S>SQ)b0Kh#|oTNK9AKYvasTyx0pKRVw# zv0O#nKUT5Mf(|X>KPIH`5ryF2KX85SJ#r|+Ke}xIi4j89KY#__Wc>l7KV8#eWm|~n zKg1f>2VFM6KUxdab2>`cKiRR9!izfRKlu!)Aqbb@KP=nH3*wT{KVU+A0Gd$DKaAMk ojEwirKhw1kl{QA@KfGb_iG1VFKTxSXj;asKKQvCw2-h&&KRmge1poj5 literal 0 HcmV?d00001 diff --git a/test.zarr/c/7/6 b/test.zarr/c/7/6 new file mode 100644 index 0000000000000000000000000000000000000000..3a52676e74c64b57e11a8690df21b1b6af518e49 GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy00?VF?8FkxKbt_l=eT9*KS(e#uzvQyKcFEMi}|doKe|EH zN(AucKa4w&{Y4ziKj#Rb%mxbMKWI38wBA6=KQ1LPCG=wIKg?QKmJ)Mkg(_FKjM-_7k9YZKR75LuOs%hKj3Nx3V`D?>KY;EYN@f3hKQF1I;h1sn zKZL`fRKQJO4 z6zZ0xKM9F>8;02GKkPCg(I_w2KcE~Mt(jK6KXYfnt+koxKSD)&SgLC7KMt?iI?oH( zKZH!g#O%oFKfb20<M;0RNKM?k6eu+}jKN4#` zudq$uKSs?XJMfk1KmIDA8SUlOKR8rWDRWrXKOe7A2zpiIKfop|b(&VkKXRKEQ&d~h zKjb%#9NGiPKcG9*_S2%gKOTyt@`(-VKZz9waMH5vKQsZzaSqtpKc~P{7z-liKd3(= zFfhH+KY2)~gFEcwKXpoZ&9ANQKQ3DbPNKlyKO%myz7*@*Kl$;E@RVlnKT4f>d|DvW zKSjRM?ELEHKkx|UjHQ#+KPrW4PNt*aKYe_G)6!I72KZS1}5=@WeKLsPU zEjFj)Gm=f^ zKT!X)<)c)`KO-=Cy1Y5&KWGsd`vSPkKY3-TQJ1RWKaAt!k4g37KX@qkPJ)o{Kj4N! zN`ainKXMMCu^eyZKfq}`>b)AWKMXBRNY_j1KZaK&veBd4KR`DL6j9^dKbD@nSO~n? zKOkX40Y)39KaWv*!ogGFKY#{(g50poKVl_}xgnP8KZabrg+LkaKfa}#g7C`VKUCn= o>@832KN0zu-%k(hKb|3%G1RQmKQ3PYz$iZLKZbN_?w6m^KNLrk;Q#;t literal 0 HcmV?d00001 diff --git a/test.zarr/c/7/7 b/test.zarr/c/7/7 new file mode 100644 index 0000000000000000000000000000000000000000..fc8d615fa6127d40d01c94d127a726fe5104bf7c GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy0AcKjNHtI3KZ#aF$n(|hKT3O%%B4lzKLXxzz;&wbKe}|e zOGYK*KLAX>hCy=cKfo$unNHS`KgjD0Y$=khKiqFYtWLPhKgg<#X__z5KQU>` z#3i@tKeV}W*BDIiKM)qPKX!xTKN4KP0C8~8Kgj0Bx>nNcKZHVPc>*iWKZ4Ym!Ym@) zKV6FpKg&wvKiN160amE!KSXlH9-evNKSYr;l3=IBKR!GK3CY>qKeWxEzXi7AKPV6; z@N$sYKL+&*0xa<0KOjb4#39J-KQQ_5hINR>Kkg}*DixLFKRC?;Wx_1BKlmqAky?M?KW?nN z@aiJfKUgQ~X-ka9KgSPDl9(dtKP$#ILP}iVKf(b~uXTUZKR`#*mokW{KVdmnG@{+% zKjdt=Ye`J&KfljeNxKT?KN#!`Tk&n~KW@GAS=*cBKZkbi3M@V2Kae%(q>|FEKZp!$ zf7jvVKh2i)8K{lxKZ=JaUIV4&KWyErs8~wOKPEsiYKS;5xfg8c?KODV06x_(r zKlE3sm02yvKQ0{BP+fu6KWet1`-AS{Kc~20|I2CNKPp-)8c$8)KSb4mrASf4Kc=k| zpx-3zKgYIH4IDD(KP0Zo0vqkcKNuhRM`1?GKi|}wEZa@&KdK~a(}nrkKL$$d6U)Wx zKjltu(QGy9KSZgL#gxFoKQz5)(GH!>KgcwAF(7NpKj$m1EHxtOKNuh|KO8o^KafL$ z3ii07KbV~EA}(yZKQubT0v4_0KRyYcYglX9KYVBcm)7RvKQMTw$jvIDKS&Nh4dlGs zKZNQPO9d0mKNm|z7rc37PKVk#UZ;uS&Kem`rTs0olKk8WQ o54CC9Ke~^BaaXF}KTJyA7>TaTKWQr0UGF;WKM@bgeEAycKk7V;SO5S3 literal 0 HcmV?d00001 diff --git a/test.zarr/c/7/8 b/test.zarr/c/7/8 new file mode 100644 index 0000000000000000000000000000000000000000..b3a0f934e8c9b36df031cd01148c2d3d90552272 GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy0D=u`5t60cKLY;DI_WF#KmV7;?!q$QKcW(MnAUsJKhiX} zVh8ouKa^siH>736KiJf8$LxT-KLH|w(5z14Kc26*mWE{MKUB6QX%L6aKZRqT*{Vh2 zKWK>-7zL`rKb5+!t`pSaKM;lLczd(6Kf&eCZSEuIKbYf{{7f|GKhS8V!D}PEKeQb# z$w|xMKV`j@pHzG6KP@lNPKRmjKYX zuy>E`KR(s|YxVKcf>6=XcQSKUYG349^SeKebmEIy1EFKR~)zjnr0#KLSc&R4!!EKeY-m?zQpd zKes7~^bip5KO%<^(tu^=KR_Mpv9D*eKfpT!;qT6F@)LPKkPB_Rz>{iKdM@v^%xoBKL;PR1k;7+Kc#Av zUHCHSKOiFz7#oSTKgZm~9K;^xKkVZ7B6s@MKXhK5zDh{wKZekzI$8DJKa5evcFe=; zKbA8pm(lCvKkBsln|HL>KdcHqfZZA6KP*e08mDW{KRYr`g){u;KL9c9o&ug~KX7KE zD@i!#KLGS|lsi;vKi-H-luabqKStUXrq$N(KQbJ1Hda~DKd^N{Xu1BrKU|XSE5EVX zKZwJFPh*a_KhwfQ+8to+KlIYomf2C(KSG;U82~WZKLFG(n@KcHKY*0LwM}c-KVaj^ o&>C*6Ka4~+scx(6KLBp7)Lg3u&KiGa@7ovdKg|E42XbTPKR~`5{u&s;Ke+IKsll@ypKXKeD zJeS_-KgLw7k{~SVKPKhZjif^CKOmw2Md2EtKWr?#Z+tG~KkeEW8~;7&KjV&~H-Vh# zKdVr`Q-p8qKY$paTjxlXKNdCis0_yMKL{3w-Yg8jKW-g1-}|xBKiiR#y%CD$KMmO9 z)BT_4KO~FS5Tw4|Ki`>=@asA0KdcMlXDn~cKX}<`@)ryhgmF zKZks7GLtsuKMWwicO3)lKUTi|hGc5gKaBM0dl&L$rxXR_Ej_QP7yG%EAI$bJ`9van@ zy0-Q5IFH>%o@+7k+GtJF#U6yQN8T#x`*uiu7GlYcOGpmZe5GjjH7g>-uKu&qPH6rl zoZ^l5Vv3RUDv0qBt<83?Jf05UoMpd8y(M@WETj=Vx}@XAn-ZS_!AP6Xdwu%}umscom*^)B7n<9~Y1=b2CGo>Jyi^ ztR6F(NG5q}HypAW1-V!Cn7ep(qH9kRRtw7BFHnt;cXp}#j%ndms!ic%wqSqtZ8|B? zhDG_hr~#G%u`vtMnW~rgEZW2}Wf`!jy|eK^@c`;L8C$PR4k1l8Msc4oV29%O8Bc*4 zD#Fs1&{`8RL#ynPbPb9Ogu)X-J?z2l`@SlA;NVMLlbquY-!3Z6TUU;Z*~`?!VOm7g z9reh%Yrwvq4P-w>392WhZF$$5uyb!EJBVk*t(t#_#4F55&a06Gr3^yPW5`y&eGLs= zANlz40Ak{AIgT#NfpG_Y!(`3OhxKpD<;z`avG+LSYME;l0E+luX3Y|M@_q2UCV(B9h*7p{!U>?;P9Jf&o0^g~_Pwts%F5x!hY zLV24UbE!AdzE_&y(O5jKiXFte>4%N#p%2*YzdTgnG>90sXVj6oZp`m`@MW{c0=cGd z`*>Xi4z&|&c*&no?WAkTJJkl?6;J0s_gS!k5)%BkN(1(Ricdbt-3SqL{BqC%1wH=n lBfcK7ihBXKGm4OVFg0m**a}C!sC2Y>7^_5=j`!^{<3HDto*w`J literal 0 HcmV?d00001 diff --git a/test.zarr/c/8/1 b/test.zarr/c/8/1 new file mode 100644 index 0000000000000000000000000000000000000000..8d33ce674efb802a1aec08caeb2db1831333baf5 GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy02|xt6F(5{KMn17U+RwQKfnrQ6^sPKl}qMUjf_JKV)(m zK*1NmKR_%>>^}N}KM?E;?iiHRKf4g7u~2v7KP>U97mFX@Kajv=Z6Q3YKbXXp8K-~7 zKf>1vs0Cx=Ka$(h5{9bgKXB3OW)5@cKl?03Io+t?KL97ZTd;0rKdk1t8bYDvKlXMo zlNKw`KOUw_C1AecKdFT)#+N_rKe<@eC02ImKTTl?K`H3#KLoWA5~>BvKUgnEn34V8 zKkR#~D5e+QKk$CIz^n)9KWU$ud`u_rKRC7GD1{v8KRVHm`B{S3KM?Tf=#9h4KZjj+ z+Fo_yKU`B=-)bStKYIs4iKcLZW&s|QQKiZtOO^So=Kj*lbcN5&?KgKSp0}&?Gw8KPhWr?*`@MKQI(;z`YmR zKTvLJ;yNG1KL_1HFR$U^KSxgv}KR}f6*pJZQKie+DIR+@{KO}*n$24HpKk_QJ z=|Si2KmCvZ6<0CjKQ6tu0U}$`Kfj*7rPp8LKd`Aea0pwfKUmLjyDtRQKX5h79P}98 zKggAS%$Ri5KaykA>MHxwKZLP{VjR}dKPNbxj~JNlKlal@f}Y{hKgMVnw%BarKVf8x z43RA1KX`g6)mf*-Kk_}Ax~luuKh1%;Q7ts%Kay6*p#4_ZKN(BE+wEZFKkOzT$q9?W zKcqnGd&}L>Ke*fD8)1gYKU5gzC?Km4L?UH13MKX3nH zUwzZ)KeK#z#P59QKM?ZqBI#PEKdc~n(C_BlKL$l!#McGtKZN9&f;vv!KXD5Yxmbqe zKj16ePO$&sKQj%T6CRD=KUfp_`b!1nKis~3BdOW!KY%z-J;Z6_GKQlNRWua&9KQs_X z!MWVPKj5`MW$%-}KXCoR#HrAyKaR?C7*BN8Kl${VL-e`fKN!^G_XjDrKTJp-SgRi5 zKLA6PnbQ7rKYqCDW_o7PKY7~urQby4KSm;$82?k_KM^cKGws*xKLDoN{McmAKOm)8 zAD51zKiu;i+Uv&6KRQTdU%toMKLjw3O!m~_Kj^%vMdVn$KW>ps(F--_KOjy!r817R zKbq%QWe4w4n_KM>4}6D{h%Kk$U4Z9-+nKh$sg@x#mSKQ63U%9Hi&KNNhv7o@VwKTdJr zxOSk>KTw?ga|geuKe&83I>1caKQ=K~QM~x-Kk^&L&I>ErKMYjVe?s-eKTtbxYNV#$ zKUj^jgVW5oKc`$AA3u=gKV9J=(crJ(KeljHSdJ~!KUeCX27NQ`KO8!b9XyxOKXf74 z!fYkyKS%^<6owt&KUSwGsD9$$Kj-v`HZTL}KiDNv9WTw)KQ>rpFH$4#KR`U~6Z18~ zKLjG~cqe$xKLmQ?h55zgKYab_smJTWKT9)}m?d@SKLlE>A_dyZKM-FM@_rKMk}n{;UD*KW{vn@c;k- literal 0 HcmV?d00001 diff --git a/test.zarr/c/8/3 b/test.zarr/c/8/3 new file mode 100644 index 0000000000000000000000000000000000000000..bda3afab35469c7ce771c10c051411fddbb85ea2 GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy0Ilv*Uf@3JKX{e(611w+4 zx(TZ8KkeC^!XcL9Kde^>A}n6QKlHyqFD^FVKgi&)&k!TfKjt=j2-bAeKg>i|#`kIN zKMD38DtZFsKX9z!eQ0*5KT(hImI>44Kd+gBj;vhhKfqJ~S_~i4KOPhk-tsoD3 zfq(bwKOP6jXiI0>KmE43;gV|OKMT%mE`T=SKLBqn%FI>EKN+U3%BiN{KUVx)aR@`| zKd{uq{`#54Ki|r7$JE2_KU8Y4(S0(*KbY?C>0zYQKb)A}xu*5yKUGkgKUmKSptEUX`EeKSJaWvuSeYKUKVIIFrTZKVU#(ZGT3)Kftco zqU5u)KfqKhB(77XKX6QmhCXqsKalkiJMG1*Kak`%#=j}27XN|k zKl{sMACwp6KV~skl#MjzKc-fE=5%K1KWLwbU4k*RKjn5!)#^duKYS{)c&Hc2KX9<0 zQu4Z@KZ9Cu7^f=iKW3zPXSkE^Kf4B{k9G#{KahsD#|_<~KadXUh&}$(KOn0Ky!sX3 zKfFjE{)u?nKe@ymYp5jSKPv&tC3jZhKV?zi=SxcKKLjEVEko|YKR2JWB8-aZKlP_G zz2oHLKX+kLP~(i}KhmTiBHL5sKO6F1ndwRFKfb*;H!`E%Kct_@`jtZLKTgPe=26k; zKLF)bLccoZKQurLZiybqKekG~=VFl2KOxMPST#G~KkE9ie_#{qKRrLj5(RYNKfqtx z4By$gKiV1*Fp@9jKUO6RLFNMFKl%oHs{FszKOZfVhXGIOKl`scv#-SLKc-Vy&y^V0 zKODYMEDBlXKiK*+=#_!nKW=rkkOxN9KZH$vis~icKLmQ^!!35vKMDCBSK_bZKQdL= oU_QOyKOal!s;}$eKQfb#nty}iKcgBC{J$dNKLC;~XgXmecjl!cWeNjcd34$5F zt{<*ul->ClI@9?XQAYz3uEw`Qo!R&N>wO!{_jPKc7lp~eQ?&RqR`{BUn>K$v9LE|K zvO{`7MoawY$p*|Y_Q-ttb?_6bvko;G@R7=G?h5P&Z(#HKFST{xh8&BzxBCe)5`*av z3O+zGP-(A^HKF%!h$!v(AQUdVAh=gyZH>tLFlPvCYOjAzr5vmtVO6sH6Xs1@fB(Bh zA}P%!wxF6siYaqtd!!a?N}_9)C^T4gd4qlV0yFpr7Aae#@8CRNuumUIf_J7`D0w0W zo#oE7&wj(W-lGXSj95Bxvn|U*1rgJUXIl6b-+k=20|X?zl@Y{Pz8sNLT+=eqFmg8P zq#;@DV1|x#2;GdhGEs5-?u}t^`Z`~Q-LYYu>#(+P(=)WG6J8DGnQ)!$*(gw(P+KpU zdg*3{{DffHB~3S0^fAhPqCO#YUM`=`Re<2@>IQ<8I8Rf=CBN09LtpOsC1watmn~dN%CfM0gR`?y09-sOe!4ol8{#eg5aDMc+$9b5Y0Zu!ws{Ez@+i@d8j(}qE2lG5$c2;!s74>$ZYBI;erQgXzA*=yxQ lL|!ipM@iom#jnAgmKG*dsKBY+8J<@59>Q~B1?@Bn{{e>coe%&3 literal 0 HcmV?d00001 diff --git a/test.zarr/c/8/5 b/test.zarr/c/8/5 new file mode 100644 index 0000000000000000000000000000000000000000..b93e3453d0eaaa94c2d5c21805d35a1841c8cfd3 GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy0D^TkRbrXsKMG4S+DMJ#KgjklAc}_BKR$38ejpyuKQyEK zlhHcOKSeM)4eTxFKXg|*@98AzKRjbxhM-)~KlsY}G$6OfKTZ;Vng!e8KS>JksxT?+ zKmUk0wovZiKVWwBEBJB6KNk|A3c^FA%;KR|)7*h_iC zKX5a%u$KiPBP^|oc=X zH`xg2Kd}6fHz&2?KbtJZ_TRDVKeW2%;zvorKcqvRkiuZYKfJg8l|bI=>KYgE$ zbVF(DKcEenf6MB1JKU!+I*^80aKON84eAndZ zKW7K~oqKgh8WVZyV?KcGrEV388tKb$kiJcE1cKjy&lr4Jt2KSNpMTzO&YKPMdM zB)Wv+KLJ}(L&2HnKR^b!qpvIIKd2}xvT)eiKWLx=aL0GOKbkii)hTn@KR(H1&Qag! zKOhObWCX3vKbW{~#8-^6Ki0f=9j1cZKX(1j?+$?7KbubmK>H}aFKc;Bt zPjb`UKZ9Dj-&3&QKb`jvC)LH|KP*#Z&YyDUKO4i<$BuXFKN!`sj>;I(Kjhf}V)5qD zKTv$X1m|zmKM1UE#FzN*Kgd{UCQs_xKd|SI`TVN7KS<2&KirFMOwKFpKf{m7oiOO=KST?4-nqEVKi+|?y7GbSKjsB?t62r+KNOkS zUbxrhKWv2dMGEHbKfrmg(3~8YKhCET@M}2lKMbb=Y5!F1KRm~e1&5*MKYT>OVRz5m zKc-QJutwA2Kj3#nV9;5$KLi6uKn=ClKV3j7TO^+BKNPbR1WO(5KP#1ONZEYnKME~( zzwk2QKZ;hD1a+*|KS)Ge?EBZ}KT3+j+)QHNKc&xf8dMqPKPrN-E87*>KWk{_-nUlk zKWEcf<6))dKMBu+{`)QCKRI<9Wjea)KNuyKcu^$ZwM>jKSJB2hI_{6KS3f0J*wI1KghOfwCab=KeZ63pGUjz zKOj#TeZkM^KcF2OEIlKsKcJ)sj{sA{KUBy63_{b`Kd*X)$+n#CKcMw02^^NcKf;<* zN^CdZKf3n)x=2ITKZBWbtD_O+Kfca}!C`IUKRHM;B8Us?KilK*?A(mtKT{NYlE$d! zKjDo{=zm(_Khr8dLY%JaKghO`Y9wdpKe(#T!9(4+KQ6_d316$~KLCB%<(X%}KPp+~ z+=0;5Kax^m`-`XAKl)&s#d*2zKlIh?K|}B0KU7d^SR1e6KZ;37#(TiqKM2vQVOxpS zKh!Z|gtRZgKk~?m1%LkFKmLMF*aPp{KZbyFWabpsKdejF3-18aKi;Dc?fHe-Kd(gL otJ)0VKOt7UO)FRGKT=+<1K!NgKYezRV`h}-Kjm7!#%Y}CKfTMJO8@`> literal 0 HcmV?d00001 diff --git a/test.zarr/c/8/7 b/test.zarr/c/8/7 new file mode 100644 index 0000000000000000000000000000000000000000..aa4e8bbe85de038d7180e933535bfcc1e9816c3d GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy06b%7NqXbuKPZPB-&29gKdhbAtz1mXKbJbrpad=EKNUr; zk)yHiKZ4n9OS?wmKN|6jF!epqKS&$S6}f`qKMN?~WC0-PKb{{m84{M$KQzZUW+IR5 zKTr>pBhH(kKOz-N3J3({KcPR|bUEecKX?ST@7yoQKbTS1BBX`ZKce7+j0&3NKa3q_ z3oO{>KWl}kg4t*5KbqxvV6_zDKe3*;-MD4pKauQ+km=d(Kd3fR63oWKKPb*^wOL;6 zKjhy4;rlx4KLEkm48&rsKiK_@U6}XNKQX$jk(;vSKZqEAM;~?WKXV@G0@-@!Kagkp zRn^4nKVZ<^s}v}pKhc#5I80FPKg&b`o`($OKQvKhyB((-}?eKh!&Q)`rl@KdhhIHq1WRKX`VaHEa3FKh$*_%Hz=7KTv>1 zviLW@KLEHpX`OmdKNuO~$$p^PKf=VaTdN?^KP(rsgQpt7Ki*ab3MjDbKkiwf-8<3U zKhUfD6()x7KTI+25(JaaKS1n!C-m~;Kb+?a{g-6OKOn=M`FX*~KN<~xN3(v^KOS6p zvZ74bKho6VrNklOKYSU}qftWbKWL2y%OFL$KY+PuYRDYlKLDSjC1b8>KaJ}5D>576 zKb)T6N?_a0KaNuNd3RmoKVS+m;@*nhKYI#fqxq}sKkC&|w~tiTKMKw)->3-hKU87u z-FYzEKY$lQioy}mKeD;jujhV{UX8W63F3x!^eSDq|&!=a3E9D<2d=@FxBbs-RDc$}FieIa` zC{1sX_%|uz(XQ)%|F{!B zW72kZ+HGJy7%r$98^j*pQ)S!$E&Pj^NxeA@P}JXg9ca z70HD%{1t}Q=Lw9sxWdHYu6IEu&8I~xCcscF%S>)|f}j0p|BH?fuxQWpB!o0U&>K%* z$+ki8TQ2tH%0U#0Rt^odVtF9RO*?Kytk?G+aV>gKKAd<3_878nldH)W)X+6Ox#|nU}<6C*epHE|`m||D?`pk6R z9NIN``yIl(uBc9=*s$h(SjMx;HhAPjTDHxR!dNO}7Y#V@g~T)s=2$@*^AA73cfyjg zIn{HK1L8E{0&jx`#mOCyImZS-PwVx`l+1iWA3l>csm9*dq1Hot2#9MU84@oSNal5S lwjOkV9&$gnj5&@7+gfJFz&P^s4;NCm5wPDsyTL)|@gKijkz@b> literal 0 HcmV?d00001 diff --git a/test.zarr/c/8/9 b/test.zarr/c/8/9 new file mode 100644 index 0000000000000000000000000000000000000000..10a2d76747928899706d2e369d8c652364f74742 GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy045=JcG~RWKTQlnL9*@WKV3BQe0R#|KSU$JytzZ?KfqzW znO`W)KTv561PPm?KlrOAFbRXiKa42nUK=jaKU80dILJKWKWsd*PdK9QKk8roYM{H{ zKQMC>kZ*O~KX9-jFx>vsKQFz3e@B4pKj>P~TRi;0KgNn_Z?84!KX0E2qbfz|KV;{p za%ze0KVXx%+dbjkKOob5+!`)KLlp2c@8DYKLFxCpKSzaKX{1hz9AR8Kj8U>c{^~hKSahP zb-*mZKjg?5qrUdcKY;c`arDR5KY6w__P43$Kc*`GKXA*?jP?bnKmMUu)q0ZW zKX%lLkTdq!KjS0Li7h|kKO_KpmbKKh81#jnlvGKeNzrA`ZjvKO|io;OB+kKgYR8;&s03KQP(7$#^H- zKa8Q=c~f1*KmEQ;P`@+kKWsrEIYXJzKM)k$HBJ(*KN#3Ue7X1UKd$N!#&6uzKSs5~ zY>L0wKOSIsbnKPUKgM|txIqW(KeDvo{h7DcKQff*XP-UkKX}GX;xQoJKg~c%7YN1T zKLEpThQqJAKVYqbi%x2sKY)0V?W)hGKVYmrUKdrXKiJ|sXrM8)KS2xtzBP5_KN@_~ z2h3R7Kd^^CbCxd0KZ@1oq%M-+KNwSlHJ*#eKljY6w0-92KTw<3EZYaiKee{ZUi;{Kfrr1Kr=k*KVSQjRKkL(0Z{9rWKk(I@u=+I2KSO7XRj$_J zKd8^BKh{&$Ki_Ww8%z)EKQ<8Y8Hr}oKPY>=xS|%&Kb*&?LPS~3KVZvhc3C>wKVbA| zlH_RLKSa;MQk#&_KX4D(N(lv|KVX;s-!`htKdr($y%=KdKPZ(IKvTNbKe*Q4V6kZB zKkzutcfiG~KS0X*N;nd(KhpD+&h97VKX&pH1oZ3aKPK^7F_rh>KP3xQ_AavEKOL(> zE+Aj)KaL>FUIp#uKN{>>$#g~PKhWe;a9JI!KLNHD0JSpjKf<0Wtm@tGKk8}mKO>UecRFg~KXTEch&oQ>KgikPRK0e*KM=wJy>~L9 zKh)8gZN*LKKiW!7jhVsRKQls_w&4xzKZ?~_`s~c?KYW-Zbg2Q>Kj4g3B3W$EKTtjd zdS_tEKbYIyGwSNgKVWnAYd@5cKaOaSkrgTKMD;nDgespKR}mwFY;vEKUUcxq+GM) zKT?a38pZGCKmM&gbBzhuKNPZ`UM{=oKdc%R;0pxdKhCuJ0kp2+KivOOq{^1fKNRBF z>$?NPKeOA;E+vcXKb0B~fvafdKLBd+q3yTlKSpn^ct3saKjTxndAMccKXP_}`Z;sg zKk&pbBx9@9KW|bxkt`46KWO*_+O8hdKRoRJYI)%4KQO_y3wBeYKa}PiPbtalKLlj7 o=RKgPKbUM3H!>NpKLSGuTs~XvKd2SdTbcLNKe8*6Q~&?~ literal 0 HcmV?d00001 diff --git a/test.zarr/c/9/1 b/test.zarr/c/9/1 new file mode 100644 index 0000000000000000000000000000000000000000..e9a0a6aa0e3cc95d047ee39319e4d2922150233c GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy0G!@hdhM3ZKcwKDKKTpKfw(54$oibKSV*}&i~8JKhfMw^%q&~ zKNu#@0lBNiKQL#XH+g;OKXAo!j=XuhKN{Qq@mUV-Kge$C6bSX{Kdi>}yEqf+Kd8?~ z+ZDF4KY~Luj}A!QKcG*tdP_*OKi_V4ED`GLKktsefPjMGKRG-doyCjpKXywDefE9n zKlX4;>tn{#KV-S^7KXRmKZHt=Di>$(KR9#)*Bv$FKL?Rs90RfGKfHb*uZy+7KMXG^ z@iGt3KPbV(d6fR|Kg#|c;06%vKSDd401W!nKlY>=Q8mTuKd@DWz?DqzKONb;wPfJy zKPS?UFf~@;KYkw}6w;v8Kk8k#;&sWIr=I0RSKN2wlTScMoKbqO0 zr~bUtKXkqm?`ompKR_}H29Z;WKk(AWE+?hJKkPQ?N98ENKgbRQ6Pw1J|X|oKcGD8q=muJKL+*z zER=2QKZF%8UR{UgKX@{q1Um+~KW^pE4B-{gKhoT`YrRb1KY&VSzU0cuKO=Ru oMg;QfKP^?v$v-{oKR`#NL0V9aKQ9U)v9Vs|KgngzlTPmIKLD$bs{jB1 literal 0 HcmV?d00001 diff --git a/test.zarr/c/9/2 b/test.zarr/c/9/2 new file mode 100644 index 0000000000000000000000000000000000000000..2d4dbb15f7d4ef6194882d67e6815fc1e0851353 GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy0L1Nfc_iB7KeiE(vG<+WKc_D%3C_goKL)PF*tR~~KZ~As zvoaCqKOYZ&!&KGnKak!u@9@E~KMEI?VPRC$KN%t>?8AKIKaQHVIqXW)KWTvI4LMoh zKVnE=9%-D^KUnWs{w06wKa#?dK5&udKY-`O>1Di$KZLQN_%U_vKPW>QCn~kPKS zKjED~jS0-}KMYS>rA7PNKQI6iM^C3KCl zKQO7~H}%l6KlDHBB!oWMKd_Yz+{S(BKkxt>uCAoCKj;-KYZj)-Kj=Zi>fUkJKR%E& z=JEm1KUt=3cj`ytKUd#E=jJBmKgiS;a4NvgKW@qS@?aO#KkH=YdA!8zKZxL3Y|Cc5 zKN}iAkCWEqKTaQuIUFSFKfs%{S)V7$KlIV-`}9HIKafn}QbjnmKX}a>9Scy;KhkqY z+nQI?y=KZv%Fh^&C&KQ?;i z(A--+{KQ$u66oPQzKjhiee>_jo zKemlH*#^JWKW8^qvQu8qKS}dPJsS$|KSrsrSR~`z zKhjcfbW2;+Kd^Wq1qm1KKgqsj{Oe8NKl4X+*Fz2KKWrNN<%%uHKed=6T?$&{KRB~T o6z8q!d(jMKkD41C#1jDKSa>Q5rf>wKky(1DSjHhKXQVxn5u2j zKSTv!GHx%=KQNq+4kAv1TlKY*2!YKdAm(crLrv3}y@Kd`}2UG*uxKfn!sQuuVEKhO4T?|vWVKhTNgZ&W4OKVB=v^=y>mKjc~= z?_1x>Kg!a6BCI#)KaCKUkl*PfG&mKSRcty`3=XKLBYS`ON~T zKOh-cQTV>*KSHqFDRRElKO*~_k$N-eKS*kz>GQ1CKadx8fRO&NKiV%tY9X5AKS^xV z^eq?SKc;SR<;KZsKd=u>s-Kk4RsdGB55Kej=OHai32KLBG~LF9kPKhVUF zx(Yy}KgiMJCGP&@KPGxQ#`h}gKlANQpo53wKTK#_9u&ULKm7?iqf_zdKY;Z0C6?DyKR72**tUz-KTKaefxG6`KdvOh7Z*(0Kj%%B3jhEB literal 0 HcmV?d00001 diff --git a/test.zarr/c/9/4 b/test.zarr/c/9/4 new file mode 100644 index 0000000000000000000000000000000000000000..d371be23fb1feddd8e1028ba45090468dba69309 GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy0HBduy0!bMKUCPuY$7K+jAKh|Ui;IBy5Kf2X~jKIp;KPtlj+*8@zKOCXZ5bDP0KM*OPG*S$|KPEkW ztLDMtKlr9u6m(a*KQ^z{mFC~(Ke^dEvQO^pKTDPu@#CH9Ke694~KPA9t9Tr&RKQdgsepk8BKMF0ee`EU7KVa^rX(i#s zKQ}4SWNdNcKQDo0Vx~v!KRnR|tNWSNKZs}HLS?GVKd!H^esSZ{Kj;Cl!pB(8KNR0* z8$jsqKfFjF9pVG+KXfej;(mYDKY3Pe+x?R0KYaZG-Fv(0Kk^2E6GeF8KfdSmU44Jm zKcKj}rp{EEKZ2I{u!cU>KLoNQ-17X^Ka_&-GQJznKX@Hg{59^$KgiokfLvhiKYZKKh(2DMt^MSKg()O$tQo{KNl&>EgVhdKO%iT z*fv(=KZ&y6U{~+sKd=H06`47-KYuU!)8xnHKXVsbB!R`_Kk74KgSV&%1Za|KLAv3 zTK|{eKc?9L^D%JlKa$Qtr|UQ4KWyuzYKR2GKUFK3Qi(jJ1Ki&{~@S||l zKL}EqlqV>~KjZ58uENddKY|^t5V_0UKUncJyG4=2Kgu}1c`S_NKTziPF{~G{KcJd~ z*HU!VKcJsXMKV6uKjl9d`SXYCKS(tZ68U|xKeb4vZSuU}KLFpRK6Hd*Kck&>RJJDR zKOEp^tk?(XKj67DymlXxKV-pO1Mu|AKNlhezuwj3Kfn)ed+xEtKTxtD`=ti&KmB4& zfB!k>KhwyR8xLveKL8x6tSPa+KZ;f6GTZ;`KkOk+*JKL#+!kdxQgKagkG6$%&E zKV#V4q4&(OIisKl0th zWg{l$KVEIkv~WM@KTr}{hIQZmQKj5Fqsd1K`KRkjaTPGmxKOh%>HWXpVKZVnyk5V-2KSF~v zQ3I~pKU^iaO%kigKiGP%jaj$0KMxGqZME9tKd8`_{Pn=lKg^SLp>o32KM3?Sc|Y&n zKUcBvPP{(qKj5oD@xX7lKTP+hwKne7KlGrCN|lzzKc}SubHKOlKlfBCio-+bKf&+_ zW;cxLKg&b`a2NgVKf;8#VzL+4KR9`DUKdWmKbB3GR?JA!Kf`cnA&s%^KOoRB6p0KYUCrdS#x_KUjiLtC;8PKUqL~X-MGVKddm9@{k?wKZH&Ny&f0KKUg36 o!+5gPKLIh+TBv;KKN*u!G}wIaKdimmSQkd!KOK@o*FR?BKNvHZ3jhEB literal 0 HcmV?d00001 diff --git a/test.zarr/c/9/6 b/test.zarr/c/9/6 new file mode 100644 index 0000000000000000000000000000000000000000..f558b56f4a5948c5debf9f52849196bdc48c1042 GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy0Ei(``dSyaKe&;tgJsg|Khpk1M0GRTKR!J*GU!<7KP+t@ z9$5y$KTsm{r5DP#KM3!v)p6z3KjkR$>e#X9Kb`LaY}th7KltbIfDSXYKPZfo%HuY= zKO6<{d-jLyKM*{QBcYV4KWzlZN-2oqKghadn&||*KcK#<`wI-WKXj0Z;rYkmKeF#2 z>#pk8Kafo(Wf*d}KUF%4ox_slKZDlAhiO~xKWL84jt!pVKNy-2nJ_ryKceSj%;X;1 zKRjnd`3mmpKVvO3EJdv8KY&OzfeB@wKjaW$xMS_@KiwLuuNBh`|HgKX}f@))X?{KMR#JU}^*DKO=9I zHSHMXKPqmHl996RKei;II4F4MKiAG#ja(MyKc-=$olWE0KLG3*{3d&}KeRRtp(mTi zKh^`Im6$x}Kb|FL?|i@NKiBusZOVq^Kh`FbwCXD3Klc2bXv7ulKlBcfe#(TnhgKYv%P3ZQ=CKW4N9gU>bCKOIzSu`rA6 zKi0pd2GsE8KR|vu^Az&HKTJ!kvbpBoKh1DdRXCdNKL!HsCS}v%KQlZE$E=*-KmFH4 zJI{9EKWs?tCcJCYKbSRri3b<$KdS zXE%n>KNBsZ{q-#3KVEuOb7e2-KY(fJj2iQnKM+mL*7SAMKOuSz1K}v(KMVy9kS=58KL?b81UC!oKO4o)2xpb+KLR%z oSTO$QKa7)hlpZ?6KakD)>wW0pKP;rRRMWTWKbEY%qEzJBKZXdGEdT%j literal 0 HcmV?d00001 diff --git a/test.zarr/c/9/7 b/test.zarr/c/9/7 new file mode 100644 index 0000000000000000000000000000000000000000..18a1a0ece3d34340f9c156342fb404ac3bf62a93 GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy0EBvE#)4DKKeqowi1papKWN&1ulJkVKU9j{J8!w~KdVMq z(NR_8KdkWJDwrY1KiDuDI~+XWKaPDF2^v@5KM=^-y;#2HKd_+0Pih#bKM+0ysMkxe zKRGIaB$@T+KN+!8bMCm|KYSrwKPciqp&zpBKOg?suoR5#KPauDTGRUHKc?6s zLNdGWKgO6$iobc~KfoU*shVcfKe~P%(NqoAKlrKR9rY zH-5&>KU975T>Bx-KO@ksD`CLlKLlB;>MU^2KO8R~fYRLQKh!O_ZWr9sKl61bBR(kT zKf`#CsaF>6KV;|+aVWaeKR`8>l(wt4Kfq1Xs#Lm&KLGk0v3cx$KNicvltX9SKls)f o$9wR$Ke}$B5w^G3KY%29J~BzsKgI=aWhv&|Kcc7li)Os*KSwQ+Z~y=R literal 0 HcmV?d00001 diff --git a/test.zarr/c/9/8 b/test.zarr/c/9/8 new file mode 100644 index 0000000000000000000000000000000000000000..f62afe36cfe63b9a51f2a767138be5a8a3f6fb91 GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy05FjMgE^9-KX;l$caDDVKVFRp&m{KfKUfnf5`{InKk)iV zG!rwXKSsrYm>){kKOPRTOUBdRKcwAoj&-cVKeV^ap-W@gKcp{R<6}YYKg1EBp5oEW zKU=d=(oUV{KM<(aiRmYdD*KW)ti$CymzKS1_y&%u-FKTrD*L(<6UKfGNxMc|p*Ki}-T{$?5CKPV6A z&dRXeKdx2orI>WvKSiocl>Xn~KO5tr$}92VKLGr<kCkKg5mBi721i zKc+!|R1+rGKR_8zj2tY1KlX8|%*t@qKWN=AKCz$PKkx42+eKIBKWv7A-Vuq!KWRgK z?X5uKKj`h+u2y2vKSNleh38%8Km4H^xjo_UKYBVm0Prl@Kjfk}+?EjKKa#vm1BNc& zKjA}I<&5LzKeHn2e#J=cKMbUxuwIhkKd7&oELykaKd*@fH5dKuKa8e_c3t`AKaDZ? zxF37(Kfz9ot6j_GKfsR@qfY^VKWR1~71-D0Kd_Nte4%XLKe#B3FZ9^4Kgmu!pSJPBKZmb#Vz?FHKYUK#L90*fKMaXuJM8SjKM?iV zz{)MQKR8;Z7fLY6KNJ#+5N*75f1KX??SasU7T literal 0 HcmV?d00001 diff --git a/test.zarr/c/9/9 b/test.zarr/c/9/9 new file mode 100644 index 0000000000000000000000000000000000000000..e4d28de0c9f2ccb86df84ec4f62c31f18ed41ad8 GIT binary patch literal 810 zcmV+_1J(Q}wJ-f(AOZmy0EkQiA}5QnKa_EU)1R>DKOf7lNA$nvKd9G$q@q2^Kg2_y z4U}TvKXQ%u`8t{0KUR2twoqB!Kai_XYyWZ0KQl(451=yTKXe2e#)#I+KNyGYJst+Y zKLFDSjU9V(KaeL*yENd`Kd5NjgT@xPKRbhd%@k+jKXkcMENzJ8KV~VknT-3~KZu{E z$gj5EKS#KP2C{NWN+6Kfn$12Lfe*KVGyK63?OLKMcHjJq%0DKR{pU;a@|q zKW*(X48A_^Kd?o9b2RwZKMuRCKVHSP!A%j~KY$S@M46D}KP=4xAg?{eKRgimyRXgbKR!s) z9sx(yKRIjnv0=vQKLuYS^+jy!KfJnA0ZZ-3KQB5KDKahRKXM0C^wQwfKXvDgyP$*Q zKXAEXWD0JmKjf^KeCHYBKj1F?sYHOAKcd}o$BaSmKj64(|2+@dKVAnDI0~BVKYW&e z^0s*9Kd1i^Cf@$#KN+u>ny%U6Kk^f`pMwhTKS0Bwtd}ggKiIxu7`wRBKRmilo@W=< zKX8SIvJQ8&KY*k+9fF^bKiInV$P^VxKZT`g7UAjRKN-+d);VC} zKcFC;L2579KMU2pKTq$Ug#Z8m literal 0 HcmV?d00001 diff --git a/test.zarr/zarr.json b/test.zarr/zarr.json new file mode 100644 index 0000000000..56616dc366 --- /dev/null +++ b/test.zarr/zarr.json @@ -0,0 +1,42 @@ +{ + "shape": [ + 100, + 100 + ], + "data_type": "float64", + "chunk_grid": { + "name": "regular", + "configuration": { + "chunk_shape": [ + 10, + 10 + ] + } + }, + "chunk_key_encoding": { + "name": "default", + "configuration": { + "separator": "/" + } + }, + "fill_value": 0.0, + "codecs": [ + { + "name": "bytes", + "configuration": { + "endian": "little" + } + }, + { + "name": "zstd", + "configuration": { + "level": 0, + "checksum": false + } + } + ], + "attributes": {}, + "zarr_format": 3, + "node_type": "array", + "storage_transformers": [] +} \ No newline at end of file diff --git a/test2.py b/test2.py new file mode 100644 index 0000000000..ec17fa403d --- /dev/null +++ b/test2.py @@ -0,0 +1,28 @@ +import zarr +from zarr.storage._caching_store import CacheStore +from zarr.storage._memory import MemoryStore + +store_a = MemoryStore({}) +store_b = MemoryStore({}) + +cached_store = CacheStore(store=store_a, cache_store=store_b, max_age_seconds=10, key_insert_times={}) + +z = zarr.create_array(cached_store, shape=(8,), dtype='float32', chunks=(4,)) + +print('filling array with values') +z[:] = 10 + +print('fetching value from first chunk') +z[0] + +print('fetching value from first chunk again') +z[0] + +print('erasing arrays values') +z[:] = z.fill_value + +print('fetching value from first chunk') +z[0] + +print('fetching value from first chunk again') +z[0] \ No newline at end of file diff --git a/test3.py b/test3.py new file mode 100644 index 0000000000..cd8565e21c --- /dev/null +++ b/test3.py @@ -0,0 +1,115 @@ +import zarr +import time +import numpy as np +import os +from zarr.storage._caching_store import CacheStore +from zarr.storage import MemoryStore, LocalStore + +print("=== CacheStore Performance Test ===") + +# Set up stores like test2.py +store_a = LocalStore('test3.zarr') # Use LocalStore instead of MemoryStore for persistence +store_b = MemoryStore({}) # Cache backend + +# Create cached store with the same pattern as test2.py +cached_store = CacheStore(store=store_a, cache_store=store_b, max_age_seconds=10, key_insert_times={}) + +# Create array using the cached store +print('Creating zarr array with cached store...') +z_cached = zarr.create_array(cached_store, shape=(100, 100), dtype='float32', chunks=(10, 10), mode='w') + +print('Filling array with values...') +z_cached[:] = np.random.random((100, 100)) # Fill with random data like test.py + +# Ensure the data is written to disk +print(f"Chunks created in test3.zarr: {os.listdir('test3.zarr') if os.path.exists('test3.zarr') else 'Directory not found'}") +if os.path.exists('test3.zarr') and 'c' in os.listdir('test3.zarr'): + chunk_files = os.listdir('test3.zarr/c') + print(f"Number of chunk files: {len(chunk_files)}") + +# Performance comparison like test.py +print("\n=== Performance Benchmarks ===") + +# Benchmark 1: Multiple reads with cache +print("Benchmarking reads with CacheStore...") +start = time.time() +for i in range(50): + print(f'Reading iteration {i+1}/50 with cache...') + _ = z_cached[:] # Read entire array +elapsed_cache = time.time() - start + +# Benchmark 2: Same reads without cache (direct store) +print("\nBenchmarking reads without cache...") +z_nocache = zarr.open('test3.zarr', mode='r') # Direct access without cache +start = time.time() +for i in range(50): + print(f'Reading iteration {i+1}/50 without cache...') + _ = z_nocache[:] # Read entire array +elapsed_nocache = time.time() - start + +print(f"\n=== Results ===") +print(f"Read time with CacheStore: {elapsed_cache:.4f} s") +print(f"Read time without cache: {elapsed_nocache:.4f} s") +if elapsed_cache > 0: + print(f"Speedup: {elapsed_nocache/elapsed_cache:.2f}x") + +# Test cache effectiveness with specific chunks (like test2.py pattern) +print("\n=== Cache Effectiveness Test ===") +print('Testing first chunk access pattern...') + +print('First access to chunk [0:10, 0:10] (should cache)') +start = time.time() +result1 = z_cached[0:10, 0:10] +first_access = time.time() - start + +print('Second access to same chunk [0:10, 0:10] (should hit cache)') +start = time.time() +result2 = z_cached[0:10, 0:10] +second_access = time.time() - start + +print('Third access to same chunk [0:10, 0:10] (should hit cache again)') +start = time.time() +result3 = z_cached[0:10, 0:10] +third_access = time.time() - start + +print(f"\nChunk access timing:") +print(f"First access time: {first_access:.6f} s") +print(f"Second access time: {second_access:.6f} s") +print(f"Third access time: {third_access:.6f} s") + +if second_access > 0: + print(f"Cache speedup (1st vs 2nd): {first_access/second_access:.2f}x") +if third_access > 0: + print(f"Cache speedup (1st vs 3rd): {first_access/third_access:.2f}x") + +# Verify data consistency +print(f"\nData consistency check:") +print(f"All three reads identical: {np.array_equal(result1, result2) and np.array_equal(result2, result3)}") + +# Test cache behavior with different chunks +print("\n=== Different Chunk Access Test ===") +print('Accessing different chunk [20:30, 20:30] (new cache entry)') +start = time.time() +result4 = z_cached[20:30, 20:30] +new_chunk_first = time.time() - start + +print('Second access to new chunk [20:30, 20:30] (should hit cache)') +start = time.time() +result5 = z_cached[20:30, 20:30] +new_chunk_second = time.time() - start + +print(f"New chunk first access: {new_chunk_first:.6f} s") +print(f"New chunk second access: {new_chunk_second:.6f} s") +if new_chunk_second > 0: + print(f"New chunk cache speedup: {new_chunk_first/new_chunk_second:.2f}x") + +print(f"Different chunk data identical: {np.array_equal(result4, result5)}") + +# Test cache expiration simulation +print("\n=== Cache Behavior Summary ===") +print(f"Total operations completed successfully") +print(f"Cache store type: {type(cached_store._cache).__name__}") +print(f"Source store type: {type(cached_store._store).__name__}") +print(f"Max age setting: {cached_store.max_age_seconds} seconds") + +print(f"\n=== Test Complete ===") diff --git a/test_max_size.py b/test_max_size.py new file mode 100644 index 0000000000..83e4a6bb73 --- /dev/null +++ b/test_max_size.py @@ -0,0 +1,91 @@ +""" +Test the max_size functionality of CacheStore +""" +import zarr +import numpy as np +from zarr.storage._caching_store import CacheStore +from zarr.storage import MemoryStore, LocalStore + +print("=== Testing CacheStore max_size functionality ===") + +# Create stores +source_store = MemoryStore() +cache_store = MemoryStore() + +# Create a CacheStore with a small max_size (1KB) +cached_store = CacheStore( + source_store, + cache_store=cache_store, + max_size=1024, # 1KB limit + key_insert_times={} +) + +print(f"Initial cache info: {cached_store.cache_info()}") + +# Create some test data that will exceed the cache size +print("\nCreating test arrays...") +z1 = zarr.zeros((50, 50), chunks=(50, 50), dtype='f4', store=cached_store, path='array1') +z2 = zarr.zeros((50, 50), chunks=(50, 50), dtype='f4', store=cached_store, path='array2') +z3 = zarr.zeros((50, 50), chunks=(50, 50), dtype='f4', store=cached_store, path='array3') + +# Fill arrays with data (each chunk is 50*50*4 = 10KB, larger than our 1KB cache) +print("Filling arrays with data...") +z1[:] = np.random.random((50, 50)) +z2[:] = np.random.random((50, 50)) + 1 +z3[:] = np.random.random((50, 50)) + 2 + +print(f"After creating arrays: {cached_store.cache_info()}") + +# Read data - this should trigger cache eviction due to size limits +print("\nReading array1 (should cache and potentially evict due to size)...") +data1 = z1[:] +print(f"After reading array1: {cached_store.cache_info()}") + +print("\nReading array2 (should cache and potentially evict array1)...") +data2 = z2[:] +print(f"After reading array2: {cached_store.cache_info()}") + +print("\nReading array3 (should cache and potentially evict array2)...") +data3 = z3[:] +print(f"After reading array3: {cached_store.cache_info()}") + +# Test without max_size for comparison +print("\n=== Testing without max_size limit ===") +unlimited_cached_store = CacheStore( + source_store, + cache_store=MemoryStore(), # Fresh cache store + max_size=None, # No size limit + key_insert_times={} +) + +print(f"Unlimited cache initial info: {unlimited_cached_store.cache_info()}") + +# Create arrays with unlimited cache +z1_unlimited = zarr.open(unlimited_cached_store, path='array1') +z2_unlimited = zarr.open(unlimited_cached_store, path='array2') +z3_unlimited = zarr.open(unlimited_cached_store, path='array3') + +print("Reading all arrays with unlimited cache...") +data1_unlimited = z1_unlimited[:] +print(f"After reading array1: {unlimited_cached_store.cache_info()}") + +data2_unlimited = z2_unlimited[:] +print(f"After reading array2: {unlimited_cached_store.cache_info()}") + +data3_unlimited = z3_unlimited[:] +print(f"After reading array3: {unlimited_cached_store.cache_info()}") + +print("\n=== Comparison ===") +print(f"Limited cache (1KB): {cached_store.cache_info()}") +print(f"Unlimited cache: {unlimited_cached_store.cache_info()}") + +print("\n=== Data consistency check ===") +print(f"Array1 data matches: {np.array_equal(data1, data1_unlimited)}") +print(f"Array2 data matches: {np.array_equal(data2, data2_unlimited)}") +print(f"Array3 data matches: {np.array_equal(data3, data3_unlimited)}") + +print("\n=== Test clearing cache ===") +print("Note: clear_cache is async, so we'll skip this test in the sync script") +print(f"Current cache info: {unlimited_cached_store.cache_info()}") + +print("\n=== Test complete ===") diff --git a/test_org.py b/test_org.py new file mode 100644 index 0000000000..362f3223c4 --- /dev/null +++ b/test_org.py @@ -0,0 +1,119 @@ +import zarr +import zarr.storage +import time +import numpy as np +import os +from zarr.storage._caching_store import CacheStore +from zarr.storage import MemoryStore, FsspecStore + +# Example 1: Local store benchmark +print("=== Local Store Benchmark ===") +local_store = zarr.storage.LocalStore('test.zarr') +# Use MemoryStore as cache backend with CacheStore +cache_backend = MemoryStore() +cache = CacheStore(local_store, cache_store=cache_backend) + +# Create array with zeros (fill_value=0), then write non-zero data to force chunk creation +zarr_array = zarr.zeros((100, 100), chunks=(10, 10), dtype='f8', store=cache, mode='w') + +# Force the data to be written by writing non-fill-value data to all chunks +print("Writing random data to all chunks...") +zarr_array[:] = np.random.random((100, 100)) # This forces all chunks to be materialized and written + +print(f"Chunks created in test.zarr: {os.listdir('test.zarr')}") +if 'c' in os.listdir('test.zarr'): + chunk_files = os.listdir('test.zarr/c') + print(f"Number of chunk files: {len(chunk_files)}") + print(f"Sample chunk files: {chunk_files[:5]}") # Show first 5 + +# Read benchmark with cache +start = time.time() +for _ in range(100): + _ = zarr_array[:] +elapsed_cache = time.time() - start + +# Read benchmark without cache +zarr_array_nocache = zarr.open('test.zarr', mode='r') +start = time.time() +for _ in range(100): + _ = zarr_array_nocache[:] +elapsed_nocache = time.time() - start + +print(f"Read time with CacheStore: {elapsed_cache:.4f} s") +print(f"Read time without cache: {elapsed_nocache:.4f} s") +print(f"Speedup: {elapsed_nocache/elapsed_cache:.2f}x\n") + +############################################### + +# Example 2: Remote store (with error handling) +print("=== Remote Store Benchmark ===") +import gcsfs +import zarr + +# Use Google Cloud Storage filesystem +gcs = gcsfs.GCSFileSystem(token='anon', asynchronous=True) # anonymous access with async support +gcs_path = 'ucl-hip-ct-35a68e99feaae8932b1d44da0358940b/A186/lung-right/4.26um_VOI-3_bm18.ome.zarr/6' + +# Wrap with zarr's FsspecStore to make it v3 compatible +store = FsspecStore(gcs, path=gcs_path) + +# Use MemoryStore as cache backend with CacheStore +remote_cache_backend = MemoryStore() +cache = CacheStore(store, cache_store=remote_cache_backend) + +try: + # Open the zarr array directly since this appears to be a zarr array path + z = zarr.open(cache) + print(f"Array info - Shape: {z.shape}, dtype: {z.dtype}") + + # Benchmark reading with cache + print("Benchmarking reads with CacheStore...") + start = time.time() + for _ in range(10): # Fewer iterations for remote access + _ = z[0:10, 0:10, 0:10] # Read a small chunk + elapsed_cache = time.time() - start + + # Benchmark reading without cache (direct store access) + print("Benchmarking reads without cache...") + z_nocache = zarr.open(store) # Direct store without cache + start = time.time() + for _ in range(10): # Same number of iterations + _ = z_nocache[0:10, 0:10, 0:10] # Read the same small chunk + elapsed_nocache = time.time() - start + + print(f"Read time with CacheStore: {elapsed_cache:.4f} s") + print(f"Read time without cache: {elapsed_nocache:.4f} s") + print(f"Speedup: {elapsed_nocache/elapsed_cache:.2f}x") + + # Test cache effectiveness with repeated access + print("\nTesting cache effectiveness...") + print("First access (from remote):") + start = time.time() + _ = z[20:30, 20:30, 20:30] + first_access = time.time() - start + + print("Second access (from cache):") + start = time.time() + _ = z[20:30, 20:30, 20:30] # Same chunk should be cached + second_access = time.time() - start + + print(f"First access time: {first_access:.4f} s") + print(f"Second access time: {second_access:.4f} s") + print(f"Cache speedup: {first_access/second_access:.2f}x") +except Exception as e: + print(f"Error accessing zarr array: {e}") + print("This might be a group - trying to list contents...") + try: + # Try opening as group without specifying mode + root = zarr.open_group(store=cache) + print(f"Available arrays/groups: {list(root.keys())}") + except Exception as e2: + print(f"Error accessing as group: {e2}") + # If still failing, try direct store access + try: + print("Trying direct store listing...") + # List keys directly from the store + keys = list(store.keys()) + print(f"Store keys: {keys[:10]}...") # Show first 10 keys + except Exception as e3: + print(f"Direct store access failed: {e3}") diff --git a/uv.lock b/uv.lock new file mode 100644 index 0000000000..3616161807 --- /dev/null +++ b/uv.lock @@ -0,0 +1,3307 @@ +version = 1 +revision = 2 +requires-python = ">=3.11" +resolution-markers = [ + "python_full_version >= '3.12'", + "python_full_version < '3.12'", +] + +[[package]] +name = "accessible-pygments" +version = "0.0.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pygments" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/bc/c1/bbac6a50d02774f91572938964c582fff4270eee73ab822a4aeea4d8b11b/accessible_pygments-0.0.5.tar.gz", hash = "sha256:40918d3e6a2b619ad424cb91e556bd3bd8865443d9f22f1dcdf79e33c8046872", size = 1377899, upload-time = "2024-05-10T11:23:10.216Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8d/3f/95338030883d8c8b91223b4e21744b04d11b161a3ef117295d8241f50ab4/accessible_pygments-0.0.5-py3-none-any.whl", hash = "sha256:88ae3211e68a1d0b011504b2ffc1691feafce124b845bd072ab6f9f66f34d4b7", size = 1395903, upload-time = "2024-05-10T11:23:08.421Z" }, +] + +[[package]] +name = "aiobotocore" +version = "2.23.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "aiohttp" }, + { name = "aioitertools" }, + { name = "botocore" }, + { name = "jmespath" }, + { name = "multidict" }, + { name = "python-dateutil" }, + { name = "wrapt" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/1d/ae/523d48504902a6f17f6ec94311899f217f1bf64b9ca394c89c690c37434c/aiobotocore-2.23.2.tar.gz", hash = "sha256:9c2cbd6e813bb6c60b7f20fc11897976a583c57b0093a87bebfe80a9b08746b2", size = 115881, upload-time = "2025-07-24T17:48:15.957Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c9/2e/55780065672a69ab3d16062368d358ace7eac196b246e6b15b07301f8fbf/aiobotocore-2.23.2-py3-none-any.whl", hash = "sha256:5ca24feb49be73bd6cd92e82e95aefb0647c07bb85ca57000a0361b9554503d8", size = 84301, upload-time = "2025-07-24T17:48:14.494Z" }, +] + +[[package]] +name = "aiohappyeyeballs" +version = "2.6.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/26/30/f84a107a9c4331c14b2b586036f40965c128aa4fee4dda5d3d51cb14ad54/aiohappyeyeballs-2.6.1.tar.gz", hash = "sha256:c3f9d0113123803ccadfdf3f0faa505bc78e6a72d1cc4806cbd719826e943558", size = 22760, upload-time = "2025-03-12T01:42:48.764Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0f/15/5bf3b99495fb160b63f95972b81750f18f7f4e02ad051373b669d17d44f2/aiohappyeyeballs-2.6.1-py3-none-any.whl", hash = "sha256:f349ba8f4b75cb25c99c5c2d84e997e485204d2902a9597802b0371f09331fb8", size = 15265, upload-time = "2025-03-12T01:42:47.083Z" }, +] + +[[package]] +name = "aiohttp" +version = "3.12.15" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "aiohappyeyeballs" }, + { name = "aiosignal" }, + { name = "attrs" }, + { name = "frozenlist" }, + { name = "multidict" }, + { name = "propcache" }, + { name = "yarl" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9b/e7/d92a237d8802ca88483906c388f7c201bbe96cd80a165ffd0ac2f6a8d59f/aiohttp-3.12.15.tar.gz", hash = "sha256:4fc61385e9c98d72fcdf47e6dd81833f47b2f77c114c29cd64a361be57a763a2", size = 7823716, upload-time = "2025-07-29T05:52:32.215Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/20/19/9e86722ec8e835959bd97ce8c1efa78cf361fa4531fca372551abcc9cdd6/aiohttp-3.12.15-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:d3ce17ce0220383a0f9ea07175eeaa6aa13ae5a41f30bc61d84df17f0e9b1117", size = 711246, upload-time = "2025-07-29T05:50:15.937Z" }, + { url = "https://files.pythonhosted.org/packages/71/f9/0a31fcb1a7d4629ac9d8f01f1cb9242e2f9943f47f5d03215af91c3c1a26/aiohttp-3.12.15-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:010cc9bbd06db80fe234d9003f67e97a10fe003bfbedb40da7d71c1008eda0fe", size = 483515, upload-time = "2025-07-29T05:50:17.442Z" }, + { url = "https://files.pythonhosted.org/packages/62/6c/94846f576f1d11df0c2e41d3001000527c0fdf63fce7e69b3927a731325d/aiohttp-3.12.15-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3f9d7c55b41ed687b9d7165b17672340187f87a773c98236c987f08c858145a9", size = 471776, upload-time = "2025-07-29T05:50:19.568Z" }, + { url = "https://files.pythonhosted.org/packages/f8/6c/f766d0aaafcee0447fad0328da780d344489c042e25cd58fde566bf40aed/aiohttp-3.12.15-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bc4fbc61bb3548d3b482f9ac7ddd0f18c67e4225aaa4e8552b9f1ac7e6bda9e5", size = 1741977, upload-time = "2025-07-29T05:50:21.665Z" }, + { url = "https://files.pythonhosted.org/packages/17/e5/fb779a05ba6ff44d7bc1e9d24c644e876bfff5abe5454f7b854cace1b9cc/aiohttp-3.12.15-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:7fbc8a7c410bb3ad5d595bb7118147dfbb6449d862cc1125cf8867cb337e8728", size = 1690645, upload-time = "2025-07-29T05:50:23.333Z" }, + { url = "https://files.pythonhosted.org/packages/37/4e/a22e799c2035f5d6a4ad2cf8e7c1d1bd0923192871dd6e367dafb158b14c/aiohttp-3.12.15-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:74dad41b3458dbb0511e760fb355bb0b6689e0630de8a22b1b62a98777136e16", size = 1789437, upload-time = "2025-07-29T05:50:25.007Z" }, + { url = "https://files.pythonhosted.org/packages/28/e5/55a33b991f6433569babb56018b2fb8fb9146424f8b3a0c8ecca80556762/aiohttp-3.12.15-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3b6f0af863cf17e6222b1735a756d664159e58855da99cfe965134a3ff63b0b0", size = 1828482, upload-time = "2025-07-29T05:50:26.693Z" }, + { url = "https://files.pythonhosted.org/packages/c6/82/1ddf0ea4f2f3afe79dffed5e8a246737cff6cbe781887a6a170299e33204/aiohttp-3.12.15-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b5b7fe4972d48a4da367043b8e023fb70a04d1490aa7d68800e465d1b97e493b", size = 1730944, upload-time = "2025-07-29T05:50:28.382Z" }, + { url = "https://files.pythonhosted.org/packages/1b/96/784c785674117b4cb3877522a177ba1b5e4db9ce0fd519430b5de76eec90/aiohttp-3.12.15-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6443cca89553b7a5485331bc9bedb2342b08d073fa10b8c7d1c60579c4a7b9bd", size = 1668020, upload-time = "2025-07-29T05:50:30.032Z" }, + { url = "https://files.pythonhosted.org/packages/12/8a/8b75f203ea7e5c21c0920d84dd24a5c0e971fe1e9b9ebbf29ae7e8e39790/aiohttp-3.12.15-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6c5f40ec615e5264f44b4282ee27628cea221fcad52f27405b80abb346d9f3f8", size = 1716292, upload-time = "2025-07-29T05:50:31.983Z" }, + { url = "https://files.pythonhosted.org/packages/47/0b/a1451543475bb6b86a5cfc27861e52b14085ae232896a2654ff1231c0992/aiohttp-3.12.15-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:2abbb216a1d3a2fe86dbd2edce20cdc5e9ad0be6378455b05ec7f77361b3ab50", size = 1711451, upload-time = "2025-07-29T05:50:33.989Z" }, + { url = "https://files.pythonhosted.org/packages/55/fd/793a23a197cc2f0d29188805cfc93aa613407f07e5f9da5cd1366afd9d7c/aiohttp-3.12.15-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:db71ce547012a5420a39c1b744d485cfb823564d01d5d20805977f5ea1345676", size = 1691634, upload-time = "2025-07-29T05:50:35.846Z" }, + { url = "https://files.pythonhosted.org/packages/ca/bf/23a335a6670b5f5dfc6d268328e55a22651b440fca341a64fccf1eada0c6/aiohttp-3.12.15-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:ced339d7c9b5030abad5854aa5413a77565e5b6e6248ff927d3e174baf3badf7", size = 1785238, upload-time = "2025-07-29T05:50:37.597Z" }, + { url = "https://files.pythonhosted.org/packages/57/4f/ed60a591839a9d85d40694aba5cef86dde9ee51ce6cca0bb30d6eb1581e7/aiohttp-3.12.15-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:7c7dd29c7b5bda137464dc9bfc738d7ceea46ff70309859ffde8c022e9b08ba7", size = 1805701, upload-time = "2025-07-29T05:50:39.591Z" }, + { url = "https://files.pythonhosted.org/packages/85/e0/444747a9455c5de188c0f4a0173ee701e2e325d4b2550e9af84abb20cdba/aiohttp-3.12.15-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:421da6fd326460517873274875c6c5a18ff225b40da2616083c5a34a7570b685", size = 1718758, upload-time = "2025-07-29T05:50:41.292Z" }, + { url = "https://files.pythonhosted.org/packages/36/ab/1006278d1ffd13a698e5dd4bfa01e5878f6bddefc296c8b62649753ff249/aiohttp-3.12.15-cp311-cp311-win32.whl", hash = "sha256:4420cf9d179ec8dfe4be10e7d0fe47d6d606485512ea2265b0d8c5113372771b", size = 428868, upload-time = "2025-07-29T05:50:43.063Z" }, + { url = "https://files.pythonhosted.org/packages/10/97/ad2b18700708452400278039272032170246a1bf8ec5d832772372c71f1a/aiohttp-3.12.15-cp311-cp311-win_amd64.whl", hash = "sha256:edd533a07da85baa4b423ee8839e3e91681c7bfa19b04260a469ee94b778bf6d", size = 453273, upload-time = "2025-07-29T05:50:44.613Z" }, + { url = "https://files.pythonhosted.org/packages/63/97/77cb2450d9b35f517d6cf506256bf4f5bda3f93a66b4ad64ba7fc917899c/aiohttp-3.12.15-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:802d3868f5776e28f7bf69d349c26fc0efadb81676d0afa88ed00d98a26340b7", size = 702333, upload-time = "2025-07-29T05:50:46.507Z" }, + { url = "https://files.pythonhosted.org/packages/83/6d/0544e6b08b748682c30b9f65640d006e51f90763b41d7c546693bc22900d/aiohttp-3.12.15-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:f2800614cd560287be05e33a679638e586a2d7401f4ddf99e304d98878c29444", size = 476948, upload-time = "2025-07-29T05:50:48.067Z" }, + { url = "https://files.pythonhosted.org/packages/3a/1d/c8c40e611e5094330284b1aea8a4b02ca0858f8458614fa35754cab42b9c/aiohttp-3.12.15-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8466151554b593909d30a0a125d638b4e5f3836e5aecde85b66b80ded1cb5b0d", size = 469787, upload-time = "2025-07-29T05:50:49.669Z" }, + { url = "https://files.pythonhosted.org/packages/38/7d/b76438e70319796bfff717f325d97ce2e9310f752a267bfdf5192ac6082b/aiohttp-3.12.15-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2e5a495cb1be69dae4b08f35a6c4579c539e9b5706f606632102c0f855bcba7c", size = 1716590, upload-time = "2025-07-29T05:50:51.368Z" }, + { url = "https://files.pythonhosted.org/packages/79/b1/60370d70cdf8b269ee1444b390cbd72ce514f0d1cd1a715821c784d272c9/aiohttp-3.12.15-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:6404dfc8cdde35c69aaa489bb3542fb86ef215fc70277c892be8af540e5e21c0", size = 1699241, upload-time = "2025-07-29T05:50:53.628Z" }, + { url = "https://files.pythonhosted.org/packages/a3/2b/4968a7b8792437ebc12186db31523f541943e99bda8f30335c482bea6879/aiohttp-3.12.15-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3ead1c00f8521a5c9070fcb88f02967b1d8a0544e6d85c253f6968b785e1a2ab", size = 1754335, upload-time = "2025-07-29T05:50:55.394Z" }, + { url = "https://files.pythonhosted.org/packages/fb/c1/49524ed553f9a0bec1a11fac09e790f49ff669bcd14164f9fab608831c4d/aiohttp-3.12.15-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6990ef617f14450bc6b34941dba4f12d5613cbf4e33805932f853fbd1cf18bfb", size = 1800491, upload-time = "2025-07-29T05:50:57.202Z" }, + { url = "https://files.pythonhosted.org/packages/de/5e/3bf5acea47a96a28c121b167f5ef659cf71208b19e52a88cdfa5c37f1fcc/aiohttp-3.12.15-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd736ed420f4db2b8148b52b46b88ed038d0354255f9a73196b7bbce3ea97545", size = 1719929, upload-time = "2025-07-29T05:50:59.192Z" }, + { url = "https://files.pythonhosted.org/packages/39/94/8ae30b806835bcd1cba799ba35347dee6961a11bd507db634516210e91d8/aiohttp-3.12.15-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3c5092ce14361a73086b90c6efb3948ffa5be2f5b6fbcf52e8d8c8b8848bb97c", size = 1635733, upload-time = "2025-07-29T05:51:01.394Z" }, + { url = "https://files.pythonhosted.org/packages/7a/46/06cdef71dd03acd9da7f51ab3a9107318aee12ad38d273f654e4f981583a/aiohttp-3.12.15-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:aaa2234bb60c4dbf82893e934d8ee8dea30446f0647e024074237a56a08c01bd", size = 1696790, upload-time = "2025-07-29T05:51:03.657Z" }, + { url = "https://files.pythonhosted.org/packages/02/90/6b4cfaaf92ed98d0ec4d173e78b99b4b1a7551250be8937d9d67ecb356b4/aiohttp-3.12.15-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:6d86a2fbdd14192e2f234a92d3b494dd4457e683ba07e5905a0b3ee25389ac9f", size = 1718245, upload-time = "2025-07-29T05:51:05.911Z" }, + { url = "https://files.pythonhosted.org/packages/2e/e6/2593751670fa06f080a846f37f112cbe6f873ba510d070136a6ed46117c6/aiohttp-3.12.15-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:a041e7e2612041a6ddf1c6a33b883be6a421247c7afd47e885969ee4cc58bd8d", size = 1658899, upload-time = "2025-07-29T05:51:07.753Z" }, + { url = "https://files.pythonhosted.org/packages/8f/28/c15bacbdb8b8eb5bf39b10680d129ea7410b859e379b03190f02fa104ffd/aiohttp-3.12.15-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:5015082477abeafad7203757ae44299a610e89ee82a1503e3d4184e6bafdd519", size = 1738459, upload-time = "2025-07-29T05:51:09.56Z" }, + { url = "https://files.pythonhosted.org/packages/00/de/c269cbc4faa01fb10f143b1670633a8ddd5b2e1ffd0548f7aa49cb5c70e2/aiohttp-3.12.15-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:56822ff5ddfd1b745534e658faba944012346184fbfe732e0d6134b744516eea", size = 1766434, upload-time = "2025-07-29T05:51:11.423Z" }, + { url = "https://files.pythonhosted.org/packages/52/b0/4ff3abd81aa7d929b27d2e1403722a65fc87b763e3a97b3a2a494bfc63bc/aiohttp-3.12.15-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b2acbbfff69019d9014508c4ba0401822e8bae5a5fdc3b6814285b71231b60f3", size = 1726045, upload-time = "2025-07-29T05:51:13.689Z" }, + { url = "https://files.pythonhosted.org/packages/71/16/949225a6a2dd6efcbd855fbd90cf476052e648fb011aa538e3b15b89a57a/aiohttp-3.12.15-cp312-cp312-win32.whl", hash = "sha256:d849b0901b50f2185874b9a232f38e26b9b3d4810095a7572eacea939132d4e1", size = 423591, upload-time = "2025-07-29T05:51:15.452Z" }, + { url = "https://files.pythonhosted.org/packages/2b/d8/fa65d2a349fe938b76d309db1a56a75c4fb8cc7b17a398b698488a939903/aiohttp-3.12.15-cp312-cp312-win_amd64.whl", hash = "sha256:b390ef5f62bb508a9d67cb3bba9b8356e23b3996da7062f1a57ce1a79d2b3d34", size = 450266, upload-time = "2025-07-29T05:51:17.239Z" }, + { url = "https://files.pythonhosted.org/packages/f2/33/918091abcf102e39d15aba2476ad9e7bd35ddb190dcdd43a854000d3da0d/aiohttp-3.12.15-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:9f922ffd05034d439dde1c77a20461cf4a1b0831e6caa26151fe7aa8aaebc315", size = 696741, upload-time = "2025-07-29T05:51:19.021Z" }, + { url = "https://files.pythonhosted.org/packages/b5/2a/7495a81e39a998e400f3ecdd44a62107254803d1681d9189be5c2e4530cd/aiohttp-3.12.15-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:2ee8a8ac39ce45f3e55663891d4b1d15598c157b4d494a4613e704c8b43112cd", size = 474407, upload-time = "2025-07-29T05:51:21.165Z" }, + { url = "https://files.pythonhosted.org/packages/49/fc/a9576ab4be2dcbd0f73ee8675d16c707cfc12d5ee80ccf4015ba543480c9/aiohttp-3.12.15-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3eae49032c29d356b94eee45a3f39fdf4b0814b397638c2f718e96cfadf4c4e4", size = 466703, upload-time = "2025-07-29T05:51:22.948Z" }, + { url = "https://files.pythonhosted.org/packages/09/2f/d4bcc8448cf536b2b54eed48f19682031ad182faa3a3fee54ebe5b156387/aiohttp-3.12.15-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b97752ff12cc12f46a9b20327104448042fce5c33a624f88c18f66f9368091c7", size = 1705532, upload-time = "2025-07-29T05:51:25.211Z" }, + { url = "https://files.pythonhosted.org/packages/f1/f3/59406396083f8b489261e3c011aa8aee9df360a96ac8fa5c2e7e1b8f0466/aiohttp-3.12.15-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:894261472691d6fe76ebb7fcf2e5870a2ac284c7406ddc95823c8598a1390f0d", size = 1686794, upload-time = "2025-07-29T05:51:27.145Z" }, + { url = "https://files.pythonhosted.org/packages/dc/71/164d194993a8d114ee5656c3b7ae9c12ceee7040d076bf7b32fb98a8c5c6/aiohttp-3.12.15-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5fa5d9eb82ce98959fc1031c28198b431b4d9396894f385cb63f1e2f3f20ca6b", size = 1738865, upload-time = "2025-07-29T05:51:29.366Z" }, + { url = "https://files.pythonhosted.org/packages/1c/00/d198461b699188a93ead39cb458554d9f0f69879b95078dce416d3209b54/aiohttp-3.12.15-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f0fa751efb11a541f57db59c1dd821bec09031e01452b2b6217319b3a1f34f3d", size = 1788238, upload-time = "2025-07-29T05:51:31.285Z" }, + { url = "https://files.pythonhosted.org/packages/85/b8/9e7175e1fa0ac8e56baa83bf3c214823ce250d0028955dfb23f43d5e61fd/aiohttp-3.12.15-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5346b93e62ab51ee2a9d68e8f73c7cf96ffb73568a23e683f931e52450e4148d", size = 1710566, upload-time = "2025-07-29T05:51:33.219Z" }, + { url = "https://files.pythonhosted.org/packages/59/e4/16a8eac9df39b48ae102ec030fa9f726d3570732e46ba0c592aeeb507b93/aiohttp-3.12.15-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:049ec0360f939cd164ecbfd2873eaa432613d5e77d6b04535e3d1fbae5a9e645", size = 1624270, upload-time = "2025-07-29T05:51:35.195Z" }, + { url = "https://files.pythonhosted.org/packages/1f/f8/cd84dee7b6ace0740908fd0af170f9fab50c2a41ccbc3806aabcb1050141/aiohttp-3.12.15-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:b52dcf013b57464b6d1e51b627adfd69a8053e84b7103a7cd49c030f9ca44461", size = 1677294, upload-time = "2025-07-29T05:51:37.215Z" }, + { url = "https://files.pythonhosted.org/packages/ce/42/d0f1f85e50d401eccd12bf85c46ba84f947a84839c8a1c2c5f6e8ab1eb50/aiohttp-3.12.15-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:9b2af240143dd2765e0fb661fd0361a1b469cab235039ea57663cda087250ea9", size = 1708958, upload-time = "2025-07-29T05:51:39.328Z" }, + { url = "https://files.pythonhosted.org/packages/d5/6b/f6fa6c5790fb602538483aa5a1b86fcbad66244997e5230d88f9412ef24c/aiohttp-3.12.15-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ac77f709a2cde2cc71257ab2d8c74dd157c67a0558a0d2799d5d571b4c63d44d", size = 1651553, upload-time = "2025-07-29T05:51:41.356Z" }, + { url = "https://files.pythonhosted.org/packages/04/36/a6d36ad545fa12e61d11d1932eef273928b0495e6a576eb2af04297fdd3c/aiohttp-3.12.15-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:47f6b962246f0a774fbd3b6b7be25d59b06fdb2f164cf2513097998fc6a29693", size = 1727688, upload-time = "2025-07-29T05:51:43.452Z" }, + { url = "https://files.pythonhosted.org/packages/aa/c8/f195e5e06608a97a4e52c5d41c7927301bf757a8e8bb5bbf8cef6c314961/aiohttp-3.12.15-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:760fb7db442f284996e39cf9915a94492e1896baac44f06ae551974907922b64", size = 1761157, upload-time = "2025-07-29T05:51:45.643Z" }, + { url = "https://files.pythonhosted.org/packages/05/6a/ea199e61b67f25ba688d3ce93f63b49b0a4e3b3d380f03971b4646412fc6/aiohttp-3.12.15-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ad702e57dc385cae679c39d318def49aef754455f237499d5b99bea4ef582e51", size = 1710050, upload-time = "2025-07-29T05:51:48.203Z" }, + { url = "https://files.pythonhosted.org/packages/b4/2e/ffeb7f6256b33635c29dbed29a22a723ff2dd7401fff42ea60cf2060abfb/aiohttp-3.12.15-cp313-cp313-win32.whl", hash = "sha256:f813c3e9032331024de2eb2e32a88d86afb69291fbc37a3a3ae81cc9917fb3d0", size = 422647, upload-time = "2025-07-29T05:51:50.718Z" }, + { url = "https://files.pythonhosted.org/packages/1b/8e/78ee35774201f38d5e1ba079c9958f7629b1fd079459aea9467441dbfbf5/aiohttp-3.12.15-cp313-cp313-win_amd64.whl", hash = "sha256:1a649001580bdb37c6fdb1bebbd7e3bc688e8ec2b5c6f52edbb664662b17dc84", size = 449067, upload-time = "2025-07-29T05:51:52.549Z" }, +] + +[[package]] +name = "aioitertools" +version = "0.12.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/06/de/38491a84ab323b47c7f86e94d2830e748780525f7a10c8600b67ead7e9ea/aioitertools-0.12.0.tar.gz", hash = "sha256:c2a9055b4fbb7705f561b9d86053e8af5d10cc845d22c32008c43490b2d8dd6b", size = 19369, upload-time = "2024-09-02T03:33:40.349Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/85/13/58b70a580de00893223d61de8fea167877a3aed97d4a5e1405c9159ef925/aioitertools-0.12.0-py3-none-any.whl", hash = "sha256:fc1f5fac3d737354de8831cbba3eb04f79dd649d8f3afb4c5b114925e662a796", size = 24345, upload-time = "2024-09-02T03:34:59.454Z" }, +] + +[[package]] +name = "aiosignal" +version = "1.4.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "frozenlist" }, + { name = "typing-extensions", marker = "python_full_version < '3.13'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/61/62/06741b579156360248d1ec624842ad0edf697050bbaf7c3e46394e106ad1/aiosignal-1.4.0.tar.gz", hash = "sha256:f47eecd9468083c2029cc99945502cb7708b082c232f9aca65da147157b251c7", size = 25007, upload-time = "2025-07-03T22:54:43.528Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fb/76/641ae371508676492379f16e2fa48f4e2c11741bd63c48be4b12a6b09cba/aiosignal-1.4.0-py3-none-any.whl", hash = "sha256:053243f8b92b990551949e63930a839ff0cf0b0ebbe0597b0f3fb19e1a0fe82e", size = 7490, upload-time = "2025-07-03T22:54:42.156Z" }, +] + +[[package]] +name = "alabaster" +version = "1.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a6/f8/d9c74d0daf3f742840fd818d69cfae176fa332022fd44e3469487d5a9420/alabaster-1.0.0.tar.gz", hash = "sha256:c00dca57bca26fa62a6d7d0a9fcce65f3e026e9bfe33e9c538fd3fbb2144fd9e", size = 24210, upload-time = "2024-07-26T18:15:03.762Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7e/b3/6b4067be973ae96ba0d615946e314c5ae35f9f993eca561b356540bb0c2b/alabaster-1.0.0-py3-none-any.whl", hash = "sha256:fc6786402dc3fcb2de3cabd5fe455a2db534b371124f1f21de8731783dec828b", size = 13929, upload-time = "2024-07-26T18:15:02.05Z" }, +] + +[[package]] +name = "annotated-types" +version = "0.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ee/67/531ea369ba64dcff5ec9c3402f9f51bf748cec26dde048a2f973a4eea7f5/annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89", size = 16081, upload-time = "2024-05-20T21:33:25.928Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53", size = 13643, upload-time = "2024-05-20T21:33:24.1Z" }, +] + +[[package]] +name = "antlr4-python3-runtime" +version = "4.13.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/33/5f/2cdf6f7aca3b20d3f316e9f505292e1f256a32089bd702034c29ebde6242/antlr4_python3_runtime-4.13.2.tar.gz", hash = "sha256:909b647e1d2fc2b70180ac586df3933e38919c85f98ccc656a96cd3f25ef3916", size = 117467, upload-time = "2024-08-03T19:00:12.757Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/89/03/a851e84fcbb85214dc637b6378121ef9a0dd61b4c65264675d8a5c9b1ae7/antlr4_python3_runtime-4.13.2-py3-none-any.whl", hash = "sha256:fe3835eb8d33daece0e799090eda89719dbccee7aa39ef94eed3818cafa5a7e8", size = 144462, upload-time = "2024-08-03T19:00:11.134Z" }, +] + +[[package]] +name = "anyio" +version = "4.10.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "idna" }, + { name = "sniffio" }, + { name = "typing-extensions", marker = "python_full_version < '3.13'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f1/b4/636b3b65173d3ce9a38ef5f0522789614e590dab6a8d505340a4efe4c567/anyio-4.10.0.tar.gz", hash = "sha256:3f3fae35c96039744587aa5b8371e7e8e603c0702999535961dd336026973ba6", size = 213252, upload-time = "2025-08-04T08:54:26.451Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6f/12/e5e0282d673bb9746bacfb6e2dba8719989d3660cdb2ea79aee9a9651afb/anyio-4.10.0-py3-none-any.whl", hash = "sha256:60e474ac86736bbfd6f210f7a61218939c318f43f9972497381f1c5e930ed3d1", size = 107213, upload-time = "2025-08-04T08:54:24.882Z" }, +] + +[[package]] +name = "appnope" +version = "0.1.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/35/5d/752690df9ef5b76e169e68d6a129fa6d08a7100ca7f754c89495db3c6019/appnope-0.1.4.tar.gz", hash = "sha256:1de3860566df9caf38f01f86f65e0e13e379af54f9e4bee1e66b48f2efffd1ee", size = 4170, upload-time = "2024-02-06T09:43:11.258Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/81/29/5ecc3a15d5a33e31b26c11426c45c501e439cb865d0bff96315d86443b78/appnope-0.1.4-py2.py3-none-any.whl", hash = "sha256:502575ee11cd7a28c0205f379b525beefebab9d161b7c964670864014ed7213c", size = 4321, upload-time = "2024-02-06T09:43:09.663Z" }, +] + +[[package]] +name = "astroid" +version = "3.3.11" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/18/74/dfb75f9ccd592bbedb175d4a32fc643cf569d7c218508bfbd6ea7ef9c091/astroid-3.3.11.tar.gz", hash = "sha256:1e5a5011af2920c7c67a53f65d536d65bfa7116feeaf2354d8b94f29573bb0ce", size = 400439, upload-time = "2025-07-13T18:04:23.177Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/af/0f/3b8fdc946b4d9cc8cc1e8af42c4e409468c84441b933d037e101b3d72d86/astroid-3.3.11-py3-none-any.whl", hash = "sha256:54c760ae8322ece1abd213057c4b5bba7c49818853fc901ef09719a60dbf9dec", size = 275612, upload-time = "2025-07-13T18:04:21.07Z" }, +] + +[[package]] +name = "asttokens" +version = "3.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/4a/e7/82da0a03e7ba5141f05cce0d302e6eed121ae055e0456ca228bf693984bc/asttokens-3.0.0.tar.gz", hash = "sha256:0dcd8baa8d62b0c1d118b399b2ddba3c4aff271d0d7a9e0d4c1681c79035bbc7", size = 61978, upload-time = "2024-11-30T04:30:14.439Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/25/8a/c46dcc25341b5bce5472c718902eb3d38600a903b14fa6aeecef3f21a46f/asttokens-3.0.0-py3-none-any.whl", hash = "sha256:e3078351a059199dd5138cb1c706e6430c05eff2ff136af5eb4790f9d28932e2", size = 26918, upload-time = "2024-11-30T04:30:10.946Z" }, +] + +[[package]] +name = "attrs" +version = "25.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/5a/b0/1367933a8532ee6ff8d63537de4f1177af4bff9f3e829baf7331f595bb24/attrs-25.3.0.tar.gz", hash = "sha256:75d7cefc7fb576747b2c81b4442d4d4a1ce0900973527c011d1030fd3bf4af1b", size = 812032, upload-time = "2025-03-13T11:10:22.779Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/77/06/bb80f5f86020c4551da315d78b3ab75e8228f89f0162f2c3a819e407941a/attrs-25.3.0-py3-none-any.whl", hash = "sha256:427318ce031701fea540783410126f03899a97ffc6f61596ad581ac2e40e3bc3", size = 63815, upload-time = "2025-03-13T11:10:21.14Z" }, +] + +[[package]] +name = "aws-sam-translator" +version = "1.99.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "boto3" }, + { name = "jsonschema" }, + { name = "pydantic" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ef/78/ac6761ff3f37a1e989ddb62c9a58c4d289ad2ca2bdb3bed1319f4ae49e16/aws_sam_translator-1.99.0.tar.gz", hash = "sha256:be326054a7ee2f535fcd914db85e5d50bdf4054313c14888af69b6de3187cdf8", size = 330448, upload-time = "2025-06-19T19:33:56.944Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0e/d8/6df2f172f878db9a9f307dd752986fd84075b7ef6f823477191edafb46a8/aws_sam_translator-1.99.0-py3-none-any.whl", hash = "sha256:b1997e09da876342655eb568e66098280ffd137213009f0136b57f4e7694c98c", size = 388649, upload-time = "2025-06-19T19:33:55.241Z" }, +] + +[[package]] +name = "aws-xray-sdk" +version = "2.14.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "botocore" }, + { name = "wrapt" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e0/6c/8e7fb2a45f20afc5c19d52807b560793fb48b0feca1de7de116b62a7893e/aws_xray_sdk-2.14.0.tar.gz", hash = "sha256:aab843c331af9ab9ba5cefb3a303832a19db186140894a523edafc024cc0493c", size = 93976, upload-time = "2024-06-04T22:11:38.124Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/41/69/b417833a8926fa5491e5346d7c233bf7d8a9b12ba1f4ef41ccea2494000c/aws_xray_sdk-2.14.0-py2.py3-none-any.whl", hash = "sha256:cfbe6feea3d26613a2a869d14c9246a844285c97087ad8f296f901633554ad94", size = 101922, upload-time = "2024-06-04T22:12:25.729Z" }, +] + +[[package]] +name = "babel" +version = "2.17.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7d/6b/d52e42361e1aa00709585ecc30b3f9684b3ab62530771402248b1b1d6240/babel-2.17.0.tar.gz", hash = "sha256:0c54cffb19f690cdcc52a3b50bcbf71e07a808d1c80d549f2459b9d2cf0afb9d", size = 9951852, upload-time = "2025-02-01T15:17:41.026Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b7/b8/3fe70c75fe32afc4bb507f75563d39bc5642255d1d94f1f23604725780bf/babel-2.17.0-py3-none-any.whl", hash = "sha256:4d0b53093fdfb4b21c92b5213dba5a1b23885afa8383709427046b21c366e5f2", size = 10182537, upload-time = "2025-02-01T15:17:37.39Z" }, +] + +[[package]] +name = "beautifulsoup4" +version = "4.13.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "soupsieve" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/d8/e4/0c4c39e18fd76d6a628d4dd8da40543d136ce2d1752bd6eeeab0791f4d6b/beautifulsoup4-4.13.4.tar.gz", hash = "sha256:dbb3c4e1ceae6aefebdaf2423247260cd062430a410e38c66f2baa50a8437195", size = 621067, upload-time = "2025-04-15T17:05:13.836Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/50/cd/30110dc0ffcf3b131156077b90e9f60ed75711223f306da4db08eff8403b/beautifulsoup4-4.13.4-py3-none-any.whl", hash = "sha256:9bbbb14bfde9d79f38b8cd5f8c7c85f4b8f2523190ebed90e950a8dea4cb1c4b", size = 187285, upload-time = "2025-04-15T17:05:12.221Z" }, +] + +[[package]] +name = "blinker" +version = "1.9.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/21/28/9b3f50ce0e048515135495f198351908d99540d69bfdc8c1d15b73dc55ce/blinker-1.9.0.tar.gz", hash = "sha256:b4ce2265a7abece45e7cc896e98dbebe6cead56bcf805a3d23136d145f5445bf", size = 22460, upload-time = "2024-11-08T17:25:47.436Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/10/cb/f2ad4230dc2eb1a74edf38f1a38b9b52277f75bef262d8908e60d957e13c/blinker-1.9.0-py3-none-any.whl", hash = "sha256:ba0efaa9080b619ff2f3459d1d500c57bddea4a6b424b60a91141db6fd2f08bc", size = 8458, upload-time = "2024-11-08T17:25:46.184Z" }, +] + +[[package]] +name = "boto3" +version = "1.39.8" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "botocore" }, + { name = "jmespath" }, + { name = "s3transfer" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/d1/ef/f8dbe6482bdf9eb0230f2639483cdd40ef5aaa89c2fb651f2edeee9c248a/boto3-1.39.8.tar.gz", hash = "sha256:456ea6baef037eb6205d64e012259d14f0c9300c9b30603890746c1a0882fa01", size = 111829, upload-time = "2025-07-17T19:19:14.828Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3c/f0/f3701472b2e6192e62d80e703186ae9c789b3d607ba22943702c500897d2/boto3-1.39.8-py3-none-any.whl", hash = "sha256:dcea5270ccced0b4b962eb5874cb71b6232ccfc6203e05bf834a314442e4a79c", size = 139886, upload-time = "2025-07-17T19:19:12.634Z" }, +] + +[[package]] +name = "botocore" +version = "1.39.8" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "jmespath" }, + { name = "python-dateutil" }, + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/32/57/16d3d21963975b9be180e96695abfb146695ae7db57f9a2d47e92d33ce9d/botocore-1.39.8.tar.gz", hash = "sha256:3848bd9057ea8dbc059e7764eda63bda575727ad1101dbd03636ab4a6f283fa5", size = 14205898, upload-time = "2025-07-17T19:19:03.832Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/11/ac/51462dd35fc60d11cdce93ba82ccf1635a161ceadc646d89f67d666fff31/botocore-1.39.8-py3-none-any.whl", hash = "sha256:ab43f79c6893271934faba7ae1987a313d59576361c544c70a5391ade560891d", size = 13866818, upload-time = "2025-07-17T19:18:58.521Z" }, +] + +[[package]] +name = "certifi" +version = "2025.8.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/dc/67/960ebe6bf230a96cda2e0abcf73af550ec4f090005363542f0765df162e0/certifi-2025.8.3.tar.gz", hash = "sha256:e564105f78ded564e3ae7c923924435e1daa7463faeab5bb932bc53ffae63407", size = 162386, upload-time = "2025-08-03T03:07:47.08Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e5/48/1549795ba7742c948d2ad169c1c8cdbae65bc450d6cd753d124b17c8cd32/certifi-2025.8.3-py3-none-any.whl", hash = "sha256:f6c12493cfb1b06ba2ff328595af9350c65d6644968e5d3a2ffd78699af217a5", size = 161216, upload-time = "2025-08-03T03:07:45.777Z" }, +] + +[[package]] +name = "cffi" +version = "1.17.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pycparser" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/fc/97/c783634659c2920c3fc70419e3af40972dbaf758daa229a7d6ea6135c90d/cffi-1.17.1.tar.gz", hash = "sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824", size = 516621, upload-time = "2024-09-04T20:45:21.852Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6b/f4/927e3a8899e52a27fa57a48607ff7dc91a9ebe97399b357b85a0c7892e00/cffi-1.17.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a45e3c6913c5b87b3ff120dcdc03f6131fa0065027d0ed7ee6190736a74cd401", size = 182264, upload-time = "2024-09-04T20:43:51.124Z" }, + { url = "https://files.pythonhosted.org/packages/6c/f5/6c3a8efe5f503175aaddcbea6ad0d2c96dad6f5abb205750d1b3df44ef29/cffi-1.17.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:30c5e0cb5ae493c04c8b42916e52ca38079f1b235c2f8ae5f4527b963c401caf", size = 178651, upload-time = "2024-09-04T20:43:52.872Z" }, + { url = "https://files.pythonhosted.org/packages/94/dd/a3f0118e688d1b1a57553da23b16bdade96d2f9bcda4d32e7d2838047ff7/cffi-1.17.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f75c7ab1f9e4aca5414ed4d8e5c0e303a34f4421f8a0d47a4d019ceff0ab6af4", size = 445259, upload-time = "2024-09-04T20:43:56.123Z" }, + { url = "https://files.pythonhosted.org/packages/2e/ea/70ce63780f096e16ce8588efe039d3c4f91deb1dc01e9c73a287939c79a6/cffi-1.17.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a1ed2dd2972641495a3ec98445e09766f077aee98a1c896dcb4ad0d303628e41", size = 469200, upload-time = "2024-09-04T20:43:57.891Z" }, + { url = "https://files.pythonhosted.org/packages/1c/a0/a4fa9f4f781bda074c3ddd57a572b060fa0df7655d2a4247bbe277200146/cffi-1.17.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:46bf43160c1a35f7ec506d254e5c890f3c03648a4dbac12d624e4490a7046cd1", size = 477235, upload-time = "2024-09-04T20:44:00.18Z" }, + { url = "https://files.pythonhosted.org/packages/62/12/ce8710b5b8affbcdd5c6e367217c242524ad17a02fe5beec3ee339f69f85/cffi-1.17.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a24ed04c8ffd54b0729c07cee15a81d964e6fee0e3d4d342a27b020d22959dc6", size = 459721, upload-time = "2024-09-04T20:44:01.585Z" }, + { url = "https://files.pythonhosted.org/packages/ff/6b/d45873c5e0242196f042d555526f92aa9e0c32355a1be1ff8c27f077fd37/cffi-1.17.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:610faea79c43e44c71e1ec53a554553fa22321b65fae24889706c0a84d4ad86d", size = 467242, upload-time = "2024-09-04T20:44:03.467Z" }, + { url = "https://files.pythonhosted.org/packages/1a/52/d9a0e523a572fbccf2955f5abe883cfa8bcc570d7faeee06336fbd50c9fc/cffi-1.17.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:a9b15d491f3ad5d692e11f6b71f7857e7835eb677955c00cc0aefcd0669adaf6", size = 477999, upload-time = "2024-09-04T20:44:05.023Z" }, + { url = "https://files.pythonhosted.org/packages/44/74/f2a2460684a1a2d00ca799ad880d54652841a780c4c97b87754f660c7603/cffi-1.17.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:de2ea4b5833625383e464549fec1bc395c1bdeeb5f25c4a3a82b5a8c756ec22f", size = 454242, upload-time = "2024-09-04T20:44:06.444Z" }, + { url = "https://files.pythonhosted.org/packages/f8/4a/34599cac7dfcd888ff54e801afe06a19c17787dfd94495ab0c8d35fe99fb/cffi-1.17.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:fc48c783f9c87e60831201f2cce7f3b2e4846bf4d8728eabe54d60700b318a0b", size = 478604, upload-time = "2024-09-04T20:44:08.206Z" }, + { url = "https://files.pythonhosted.org/packages/34/33/e1b8a1ba29025adbdcda5fb3a36f94c03d771c1b7b12f726ff7fef2ebe36/cffi-1.17.1-cp311-cp311-win32.whl", hash = "sha256:85a950a4ac9c359340d5963966e3e0a94a676bd6245a4b55bc43949eee26a655", size = 171727, upload-time = "2024-09-04T20:44:09.481Z" }, + { url = "https://files.pythonhosted.org/packages/3d/97/50228be003bb2802627d28ec0627837ac0bf35c90cf769812056f235b2d1/cffi-1.17.1-cp311-cp311-win_amd64.whl", hash = "sha256:caaf0640ef5f5517f49bc275eca1406b0ffa6aa184892812030f04c2abf589a0", size = 181400, upload-time = "2024-09-04T20:44:10.873Z" }, + { url = "https://files.pythonhosted.org/packages/5a/84/e94227139ee5fb4d600a7a4927f322e1d4aea6fdc50bd3fca8493caba23f/cffi-1.17.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:805b4371bf7197c329fcb3ead37e710d1bca9da5d583f5073b799d5c5bd1eee4", size = 183178, upload-time = "2024-09-04T20:44:12.232Z" }, + { url = "https://files.pythonhosted.org/packages/da/ee/fb72c2b48656111c4ef27f0f91da355e130a923473bf5ee75c5643d00cca/cffi-1.17.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:733e99bc2df47476e3848417c5a4540522f234dfd4ef3ab7fafdf555b082ec0c", size = 178840, upload-time = "2024-09-04T20:44:13.739Z" }, + { url = "https://files.pythonhosted.org/packages/cc/b6/db007700f67d151abadf508cbfd6a1884f57eab90b1bb985c4c8c02b0f28/cffi-1.17.1-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1257bdabf294dceb59f5e70c64a3e2f462c30c7ad68092d01bbbfb1c16b1ba36", size = 454803, upload-time = "2024-09-04T20:44:15.231Z" }, + { url = "https://files.pythonhosted.org/packages/1a/df/f8d151540d8c200eb1c6fba8cd0dfd40904f1b0682ea705c36e6c2e97ab3/cffi-1.17.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da95af8214998d77a98cc14e3a3bd00aa191526343078b530ceb0bd710fb48a5", size = 478850, upload-time = "2024-09-04T20:44:17.188Z" }, + { url = "https://files.pythonhosted.org/packages/28/c0/b31116332a547fd2677ae5b78a2ef662dfc8023d67f41b2a83f7c2aa78b1/cffi-1.17.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d63afe322132c194cf832bfec0dc69a99fb9bb6bbd550f161a49e9e855cc78ff", size = 485729, upload-time = "2024-09-04T20:44:18.688Z" }, + { url = "https://files.pythonhosted.org/packages/91/2b/9a1ddfa5c7f13cab007a2c9cc295b70fbbda7cb10a286aa6810338e60ea1/cffi-1.17.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f79fc4fc25f1c8698ff97788206bb3c2598949bfe0fef03d299eb1b5356ada99", size = 471256, upload-time = "2024-09-04T20:44:20.248Z" }, + { url = "https://files.pythonhosted.org/packages/b2/d5/da47df7004cb17e4955df6a43d14b3b4ae77737dff8bf7f8f333196717bf/cffi-1.17.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b62ce867176a75d03a665bad002af8e6d54644fad99a3c70905c543130e39d93", size = 479424, upload-time = "2024-09-04T20:44:21.673Z" }, + { url = "https://files.pythonhosted.org/packages/0b/ac/2a28bcf513e93a219c8a4e8e125534f4f6db03e3179ba1c45e949b76212c/cffi-1.17.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:386c8bf53c502fff58903061338ce4f4950cbdcb23e2902d86c0f722b786bbe3", size = 484568, upload-time = "2024-09-04T20:44:23.245Z" }, + { url = "https://files.pythonhosted.org/packages/d4/38/ca8a4f639065f14ae0f1d9751e70447a261f1a30fa7547a828ae08142465/cffi-1.17.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4ceb10419a9adf4460ea14cfd6bc43d08701f0835e979bf821052f1805850fe8", size = 488736, upload-time = "2024-09-04T20:44:24.757Z" }, + { url = "https://files.pythonhosted.org/packages/86/c5/28b2d6f799ec0bdecf44dced2ec5ed43e0eb63097b0f58c293583b406582/cffi-1.17.1-cp312-cp312-win32.whl", hash = "sha256:a08d7e755f8ed21095a310a693525137cfe756ce62d066e53f502a83dc550f65", size = 172448, upload-time = "2024-09-04T20:44:26.208Z" }, + { url = "https://files.pythonhosted.org/packages/50/b9/db34c4755a7bd1cb2d1603ac3863f22bcecbd1ba29e5ee841a4bc510b294/cffi-1.17.1-cp312-cp312-win_amd64.whl", hash = "sha256:51392eae71afec0d0c8fb1a53b204dbb3bcabcb3c9b807eedf3e1e6ccf2de903", size = 181976, upload-time = "2024-09-04T20:44:27.578Z" }, + { url = "https://files.pythonhosted.org/packages/8d/f8/dd6c246b148639254dad4d6803eb6a54e8c85c6e11ec9df2cffa87571dbe/cffi-1.17.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f3a2b4222ce6b60e2e8b337bb9596923045681d71e5a082783484d845390938e", size = 182989, upload-time = "2024-09-04T20:44:28.956Z" }, + { url = "https://files.pythonhosted.org/packages/8b/f1/672d303ddf17c24fc83afd712316fda78dc6fce1cd53011b839483e1ecc8/cffi-1.17.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0984a4925a435b1da406122d4d7968dd861c1385afe3b45ba82b750f229811e2", size = 178802, upload-time = "2024-09-04T20:44:30.289Z" }, + { url = "https://files.pythonhosted.org/packages/0e/2d/eab2e858a91fdff70533cab61dcff4a1f55ec60425832ddfdc9cd36bc8af/cffi-1.17.1-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d01b12eeeb4427d3110de311e1774046ad344f5b1a7403101878976ecd7a10f3", size = 454792, upload-time = "2024-09-04T20:44:32.01Z" }, + { url = "https://files.pythonhosted.org/packages/75/b2/fbaec7c4455c604e29388d55599b99ebcc250a60050610fadde58932b7ee/cffi-1.17.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:706510fe141c86a69c8ddc029c7910003a17353970cff3b904ff0686a5927683", size = 478893, upload-time = "2024-09-04T20:44:33.606Z" }, + { url = "https://files.pythonhosted.org/packages/4f/b7/6e4a2162178bf1935c336d4da8a9352cccab4d3a5d7914065490f08c0690/cffi-1.17.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de55b766c7aa2e2a3092c51e0483d700341182f08e67c63630d5b6f200bb28e5", size = 485810, upload-time = "2024-09-04T20:44:35.191Z" }, + { url = "https://files.pythonhosted.org/packages/c7/8a/1d0e4a9c26e54746dc08c2c6c037889124d4f59dffd853a659fa545f1b40/cffi-1.17.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c59d6e989d07460165cc5ad3c61f9fd8f1b4796eacbd81cee78957842b834af4", size = 471200, upload-time = "2024-09-04T20:44:36.743Z" }, + { url = "https://files.pythonhosted.org/packages/26/9f/1aab65a6c0db35f43c4d1b4f580e8df53914310afc10ae0397d29d697af4/cffi-1.17.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd398dbc6773384a17fe0d3e7eeb8d1a21c2200473ee6806bb5e6a8e62bb73dd", size = 479447, upload-time = "2024-09-04T20:44:38.492Z" }, + { url = "https://files.pythonhosted.org/packages/5f/e4/fb8b3dd8dc0e98edf1135ff067ae070bb32ef9d509d6cb0f538cd6f7483f/cffi-1.17.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:3edc8d958eb099c634dace3c7e16560ae474aa3803a5df240542b305d14e14ed", size = 484358, upload-time = "2024-09-04T20:44:40.046Z" }, + { url = "https://files.pythonhosted.org/packages/f1/47/d7145bf2dc04684935d57d67dff9d6d795b2ba2796806bb109864be3a151/cffi-1.17.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:72e72408cad3d5419375fc87d289076ee319835bdfa2caad331e377589aebba9", size = 488469, upload-time = "2024-09-04T20:44:41.616Z" }, + { url = "https://files.pythonhosted.org/packages/bf/ee/f94057fa6426481d663b88637a9a10e859e492c73d0384514a17d78ee205/cffi-1.17.1-cp313-cp313-win32.whl", hash = "sha256:e03eab0a8677fa80d646b5ddece1cbeaf556c313dcfac435ba11f107ba117b5d", size = 172475, upload-time = "2024-09-04T20:44:43.733Z" }, + { url = "https://files.pythonhosted.org/packages/7c/fc/6a8cb64e5f0324877d503c854da15d76c1e50eb722e320b15345c4d0c6de/cffi-1.17.1-cp313-cp313-win_amd64.whl", hash = "sha256:f6a16c31041f09ead72d69f583767292f750d24913dadacf5756b966aacb3f1a", size = 182009, upload-time = "2024-09-04T20:44:45.309Z" }, +] + +[[package]] +name = "cfn-lint" +version = "1.38.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "aws-sam-translator" }, + { name = "jsonpatch" }, + { name = "networkx" }, + { name = "pyyaml" }, + { name = "regex" }, + { name = "sympy" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ee/af/bc4446ffa5344e23012b6c9a8048def3afb25eb4b63d371e5f9f0bdec7ef/cfn_lint-1.38.1.tar.gz", hash = "sha256:cda697ee6a34a50646dcf9dc8beb1f39492ca24824d7f3481925643851312fe3", size = 3448936, upload-time = "2025-07-30T21:28:09.56Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5d/e9/57eb5492e1e9f441641755f9842a0bd7fa1797c41dd7299436f04f6e746e/cfn_lint-1.38.1-py3-none-any.whl", hash = "sha256:20ccd4e69b20c16126a55a0b7a17d4027129a24c7f2068ac56f2888f191786ed", size = 5762742, upload-time = "2025-07-30T21:28:07.168Z" }, +] + +[[package]] +name = "charset-normalizer" +version = "3.4.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e4/33/89c2ced2b67d1c2a61c19c6751aa8902d46ce3dacb23600a283619f5a12d/charset_normalizer-3.4.2.tar.gz", hash = "sha256:5baececa9ecba31eff645232d59845c07aa030f0c81ee70184a90d35099a0e63", size = 126367, upload-time = "2025-05-02T08:34:42.01Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/05/85/4c40d00dcc6284a1c1ad5de5e0996b06f39d8232f1031cd23c2f5c07ee86/charset_normalizer-3.4.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:be1e352acbe3c78727a16a455126d9ff83ea2dfdcbc83148d2982305a04714c2", size = 198794, upload-time = "2025-05-02T08:32:11.945Z" }, + { url = "https://files.pythonhosted.org/packages/41/d9/7a6c0b9db952598e97e93cbdfcb91bacd89b9b88c7c983250a77c008703c/charset_normalizer-3.4.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aa88ca0b1932e93f2d961bf3addbb2db902198dca337d88c89e1559e066e7645", size = 142846, upload-time = "2025-05-02T08:32:13.946Z" }, + { url = "https://files.pythonhosted.org/packages/66/82/a37989cda2ace7e37f36c1a8ed16c58cf48965a79c2142713244bf945c89/charset_normalizer-3.4.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d524ba3f1581b35c03cb42beebab4a13e6cdad7b36246bd22541fa585a56cccd", size = 153350, upload-time = "2025-05-02T08:32:15.873Z" }, + { url = "https://files.pythonhosted.org/packages/df/68/a576b31b694d07b53807269d05ec3f6f1093e9545e8607121995ba7a8313/charset_normalizer-3.4.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28a1005facc94196e1fb3e82a3d442a9d9110b8434fc1ded7a24a2983c9888d8", size = 145657, upload-time = "2025-05-02T08:32:17.283Z" }, + { url = "https://files.pythonhosted.org/packages/92/9b/ad67f03d74554bed3aefd56fe836e1623a50780f7c998d00ca128924a499/charset_normalizer-3.4.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fdb20a30fe1175ecabed17cbf7812f7b804b8a315a25f24678bcdf120a90077f", size = 147260, upload-time = "2025-05-02T08:32:18.807Z" }, + { url = "https://files.pythonhosted.org/packages/a6/e6/8aebae25e328160b20e31a7e9929b1578bbdc7f42e66f46595a432f8539e/charset_normalizer-3.4.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0f5d9ed7f254402c9e7d35d2f5972c9bbea9040e99cd2861bd77dc68263277c7", size = 149164, upload-time = "2025-05-02T08:32:20.333Z" }, + { url = "https://files.pythonhosted.org/packages/8b/f2/b3c2f07dbcc248805f10e67a0262c93308cfa149a4cd3d1fe01f593e5fd2/charset_normalizer-3.4.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:efd387a49825780ff861998cd959767800d54f8308936b21025326de4b5a42b9", size = 144571, upload-time = "2025-05-02T08:32:21.86Z" }, + { url = "https://files.pythonhosted.org/packages/60/5b/c3f3a94bc345bc211622ea59b4bed9ae63c00920e2e8f11824aa5708e8b7/charset_normalizer-3.4.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:f0aa37f3c979cf2546b73e8222bbfa3dc07a641585340179d768068e3455e544", size = 151952, upload-time = "2025-05-02T08:32:23.434Z" }, + { url = "https://files.pythonhosted.org/packages/e2/4d/ff460c8b474122334c2fa394a3f99a04cf11c646da895f81402ae54f5c42/charset_normalizer-3.4.2-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:e70e990b2137b29dc5564715de1e12701815dacc1d056308e2b17e9095372a82", size = 155959, upload-time = "2025-05-02T08:32:24.993Z" }, + { url = "https://files.pythonhosted.org/packages/a2/2b/b964c6a2fda88611a1fe3d4c400d39c66a42d6c169c924818c848f922415/charset_normalizer-3.4.2-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:0c8c57f84ccfc871a48a47321cfa49ae1df56cd1d965a09abe84066f6853b9c0", size = 153030, upload-time = "2025-05-02T08:32:26.435Z" }, + { url = "https://files.pythonhosted.org/packages/59/2e/d3b9811db26a5ebf444bc0fa4f4be5aa6d76fc6e1c0fd537b16c14e849b6/charset_normalizer-3.4.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:6b66f92b17849b85cad91259efc341dce9c1af48e2173bf38a85c6329f1033e5", size = 148015, upload-time = "2025-05-02T08:32:28.376Z" }, + { url = "https://files.pythonhosted.org/packages/90/07/c5fd7c11eafd561bb51220d600a788f1c8d77c5eef37ee49454cc5c35575/charset_normalizer-3.4.2-cp311-cp311-win32.whl", hash = "sha256:daac4765328a919a805fa5e2720f3e94767abd632ae410a9062dff5412bae65a", size = 98106, upload-time = "2025-05-02T08:32:30.281Z" }, + { url = "https://files.pythonhosted.org/packages/a8/05/5e33dbef7e2f773d672b6d79f10ec633d4a71cd96db6673625838a4fd532/charset_normalizer-3.4.2-cp311-cp311-win_amd64.whl", hash = "sha256:e53efc7c7cee4c1e70661e2e112ca46a575f90ed9ae3fef200f2a25e954f4b28", size = 105402, upload-time = "2025-05-02T08:32:32.191Z" }, + { url = "https://files.pythonhosted.org/packages/d7/a4/37f4d6035c89cac7930395a35cc0f1b872e652eaafb76a6075943754f095/charset_normalizer-3.4.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:0c29de6a1a95f24b9a1aa7aefd27d2487263f00dfd55a77719b530788f75cff7", size = 199936, upload-time = "2025-05-02T08:32:33.712Z" }, + { url = "https://files.pythonhosted.org/packages/ee/8a/1a5e33b73e0d9287274f899d967907cd0bf9c343e651755d9307e0dbf2b3/charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cddf7bd982eaa998934a91f69d182aec997c6c468898efe6679af88283b498d3", size = 143790, upload-time = "2025-05-02T08:32:35.768Z" }, + { url = "https://files.pythonhosted.org/packages/66/52/59521f1d8e6ab1482164fa21409c5ef44da3e9f653c13ba71becdd98dec3/charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fcbe676a55d7445b22c10967bceaaf0ee69407fbe0ece4d032b6eb8d4565982a", size = 153924, upload-time = "2025-05-02T08:32:37.284Z" }, + { url = "https://files.pythonhosted.org/packages/86/2d/fb55fdf41964ec782febbf33cb64be480a6b8f16ded2dbe8db27a405c09f/charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d41c4d287cfc69060fa91cae9683eacffad989f1a10811995fa309df656ec214", size = 146626, upload-time = "2025-05-02T08:32:38.803Z" }, + { url = "https://files.pythonhosted.org/packages/8c/73/6ede2ec59bce19b3edf4209d70004253ec5f4e319f9a2e3f2f15601ed5f7/charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4e594135de17ab3866138f496755f302b72157d115086d100c3f19370839dd3a", size = 148567, upload-time = "2025-05-02T08:32:40.251Z" }, + { url = "https://files.pythonhosted.org/packages/09/14/957d03c6dc343c04904530b6bef4e5efae5ec7d7990a7cbb868e4595ee30/charset_normalizer-3.4.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cf713fe9a71ef6fd5adf7a79670135081cd4431c2943864757f0fa3a65b1fafd", size = 150957, upload-time = "2025-05-02T08:32:41.705Z" }, + { url = "https://files.pythonhosted.org/packages/0d/c8/8174d0e5c10ccebdcb1b53cc959591c4c722a3ad92461a273e86b9f5a302/charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a370b3e078e418187da8c3674eddb9d983ec09445c99a3a263c2011993522981", size = 145408, upload-time = "2025-05-02T08:32:43.709Z" }, + { url = "https://files.pythonhosted.org/packages/58/aa/8904b84bc8084ac19dc52feb4f5952c6df03ffb460a887b42615ee1382e8/charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:a955b438e62efdf7e0b7b52a64dc5c3396e2634baa62471768a64bc2adb73d5c", size = 153399, upload-time = "2025-05-02T08:32:46.197Z" }, + { url = "https://files.pythonhosted.org/packages/c2/26/89ee1f0e264d201cb65cf054aca6038c03b1a0c6b4ae998070392a3ce605/charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:7222ffd5e4de8e57e03ce2cef95a4c43c98fcb72ad86909abdfc2c17d227fc1b", size = 156815, upload-time = "2025-05-02T08:32:48.105Z" }, + { url = "https://files.pythonhosted.org/packages/fd/07/68e95b4b345bad3dbbd3a8681737b4338ff2c9df29856a6d6d23ac4c73cb/charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:bee093bf902e1d8fc0ac143c88902c3dfc8941f7ea1d6a8dd2bcb786d33db03d", size = 154537, upload-time = "2025-05-02T08:32:49.719Z" }, + { url = "https://files.pythonhosted.org/packages/77/1a/5eefc0ce04affb98af07bc05f3bac9094513c0e23b0562d64af46a06aae4/charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:dedb8adb91d11846ee08bec4c8236c8549ac721c245678282dcb06b221aab59f", size = 149565, upload-time = "2025-05-02T08:32:51.404Z" }, + { url = "https://files.pythonhosted.org/packages/37/a0/2410e5e6032a174c95e0806b1a6585eb21e12f445ebe239fac441995226a/charset_normalizer-3.4.2-cp312-cp312-win32.whl", hash = "sha256:db4c7bf0e07fc3b7d89ac2a5880a6a8062056801b83ff56d8464b70f65482b6c", size = 98357, upload-time = "2025-05-02T08:32:53.079Z" }, + { url = "https://files.pythonhosted.org/packages/6c/4f/c02d5c493967af3eda9c771ad4d2bbc8df6f99ddbeb37ceea6e8716a32bc/charset_normalizer-3.4.2-cp312-cp312-win_amd64.whl", hash = "sha256:5a9979887252a82fefd3d3ed2a8e3b937a7a809f65dcb1e068b090e165bbe99e", size = 105776, upload-time = "2025-05-02T08:32:54.573Z" }, + { url = "https://files.pythonhosted.org/packages/ea/12/a93df3366ed32db1d907d7593a94f1fe6293903e3e92967bebd6950ed12c/charset_normalizer-3.4.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:926ca93accd5d36ccdabd803392ddc3e03e6d4cd1cf17deff3b989ab8e9dbcf0", size = 199622, upload-time = "2025-05-02T08:32:56.363Z" }, + { url = "https://files.pythonhosted.org/packages/04/93/bf204e6f344c39d9937d3c13c8cd5bbfc266472e51fc8c07cb7f64fcd2de/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eba9904b0f38a143592d9fc0e19e2df0fa2e41c3c3745554761c5f6447eedabf", size = 143435, upload-time = "2025-05-02T08:32:58.551Z" }, + { url = "https://files.pythonhosted.org/packages/22/2a/ea8a2095b0bafa6c5b5a55ffdc2f924455233ee7b91c69b7edfcc9e02284/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3fddb7e2c84ac87ac3a947cb4e66d143ca5863ef48e4a5ecb83bd48619e4634e", size = 153653, upload-time = "2025-05-02T08:33:00.342Z" }, + { url = "https://files.pythonhosted.org/packages/b6/57/1b090ff183d13cef485dfbe272e2fe57622a76694061353c59da52c9a659/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:98f862da73774290f251b9df8d11161b6cf25b599a66baf087c1ffe340e9bfd1", size = 146231, upload-time = "2025-05-02T08:33:02.081Z" }, + { url = "https://files.pythonhosted.org/packages/e2/28/ffc026b26f441fc67bd21ab7f03b313ab3fe46714a14b516f931abe1a2d8/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c9379d65defcab82d07b2a9dfbfc2e95bc8fe0ebb1b176a3190230a3ef0e07c", size = 148243, upload-time = "2025-05-02T08:33:04.063Z" }, + { url = "https://files.pythonhosted.org/packages/c0/0f/9abe9bd191629c33e69e47c6ef45ef99773320e9ad8e9cb08b8ab4a8d4cb/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e635b87f01ebc977342e2697d05b56632f5f879a4f15955dfe8cef2448b51691", size = 150442, upload-time = "2025-05-02T08:33:06.418Z" }, + { url = "https://files.pythonhosted.org/packages/67/7c/a123bbcedca91d5916c056407f89a7f5e8fdfce12ba825d7d6b9954a1a3c/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:1c95a1e2902a8b722868587c0e1184ad5c55631de5afc0eb96bc4b0d738092c0", size = 145147, upload-time = "2025-05-02T08:33:08.183Z" }, + { url = "https://files.pythonhosted.org/packages/ec/fe/1ac556fa4899d967b83e9893788e86b6af4d83e4726511eaaad035e36595/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ef8de666d6179b009dce7bcb2ad4c4a779f113f12caf8dc77f0162c29d20490b", size = 153057, upload-time = "2025-05-02T08:33:09.986Z" }, + { url = "https://files.pythonhosted.org/packages/2b/ff/acfc0b0a70b19e3e54febdd5301a98b72fa07635e56f24f60502e954c461/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:32fc0341d72e0f73f80acb0a2c94216bd704f4f0bce10aedea38f30502b271ff", size = 156454, upload-time = "2025-05-02T08:33:11.814Z" }, + { url = "https://files.pythonhosted.org/packages/92/08/95b458ce9c740d0645feb0e96cea1f5ec946ea9c580a94adfe0b617f3573/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:289200a18fa698949d2b39c671c2cc7a24d44096784e76614899a7ccf2574b7b", size = 154174, upload-time = "2025-05-02T08:33:13.707Z" }, + { url = "https://files.pythonhosted.org/packages/78/be/8392efc43487ac051eee6c36d5fbd63032d78f7728cb37aebcc98191f1ff/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4a476b06fbcf359ad25d34a057b7219281286ae2477cc5ff5e3f70a246971148", size = 149166, upload-time = "2025-05-02T08:33:15.458Z" }, + { url = "https://files.pythonhosted.org/packages/44/96/392abd49b094d30b91d9fbda6a69519e95802250b777841cf3bda8fe136c/charset_normalizer-3.4.2-cp313-cp313-win32.whl", hash = "sha256:aaeeb6a479c7667fbe1099af9617c83aaca22182d6cf8c53966491a0f1b7ffb7", size = 98064, upload-time = "2025-05-02T08:33:17.06Z" }, + { url = "https://files.pythonhosted.org/packages/e9/b0/0200da600134e001d91851ddc797809e2fe0ea72de90e09bec5a2fbdaccb/charset_normalizer-3.4.2-cp313-cp313-win_amd64.whl", hash = "sha256:aa6af9e7d59f9c12b33ae4e9450619cf2488e2bbe9b44030905877f0b2324980", size = 105641, upload-time = "2025-05-02T08:33:18.753Z" }, + { url = "https://files.pythonhosted.org/packages/20/94/c5790835a017658cbfabd07f3bfb549140c3ac458cfc196323996b10095a/charset_normalizer-3.4.2-py3-none-any.whl", hash = "sha256:7f56930ab0abd1c45cd15be65cc741c28b1c9a34876ce8c17a2fa107810c0af0", size = 52626, upload-time = "2025-05-02T08:34:40.053Z" }, +] + +[[package]] +name = "click" +version = "8.2.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/60/6c/8ca2efa64cf75a977a0d7fac081354553ebe483345c734fb6b6515d96bbc/click-8.2.1.tar.gz", hash = "sha256:27c491cc05d968d271d5a1db13e3b5a184636d9d930f148c50b038f0d0646202", size = 286342, upload-time = "2025-05-20T23:19:49.832Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/85/32/10bb5764d90a8eee674e9dc6f4db6a0ab47c8c4d0d83c27f7c39ac415a4d/click-8.2.1-py3-none-any.whl", hash = "sha256:61a3265b914e850b85317d0b3109c7f8cd35a670f963866005d6ef1d5175a12b", size = 102215, upload-time = "2025-05-20T23:19:47.796Z" }, +] + +[[package]] +name = "colorama" +version = "0.4.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697, upload-time = "2022-10-25T02:36:22.414Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" }, +] + +[[package]] +name = "comm" +version = "0.2.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/4c/13/7d740c5849255756bc17888787313b61fd38a0a8304fc4f073dfc46122aa/comm-0.2.3.tar.gz", hash = "sha256:2dc8048c10962d55d7ad693be1e7045d891b7ce8d999c97963a5e3e99c055971", size = 6319, upload-time = "2025-07-25T14:02:04.452Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/60/97/891a0971e1e4a8c5d2b20bbe0e524dc04548d2307fee33cdeba148fd4fc7/comm-0.2.3-py3-none-any.whl", hash = "sha256:c615d91d75f7f04f095b30d1c1711babd43bdc6419c1be9886a85f2f4e489417", size = 7294, upload-time = "2025-07-25T14:02:02.896Z" }, +] + +[[package]] +name = "coverage" +version = "7.10.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ee/76/17780846fc7aade1e66712e1e27dd28faa0a5d987a1f433610974959eaa8/coverage-7.10.2.tar.gz", hash = "sha256:5d6e6d84e6dd31a8ded64759626627247d676a23c1b892e1326f7c55c8d61055", size = 820754, upload-time = "2025-08-04T00:35:17.511Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6e/53/0125a6fc0af4f2687b4e08b0fb332cd0d5e60f3ca849e7456f995d022656/coverage-7.10.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2c3b210d79925a476dfc8d74c7d53224888421edebf3a611f3adae923e212b27", size = 215119, upload-time = "2025-08-04T00:33:19.101Z" }, + { url = "https://files.pythonhosted.org/packages/0e/2e/960d9871de9152dbc9ff950913c6a6e9cf2eb4cc80d5bc8f93029f9f2f9f/coverage-7.10.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:bf67d1787cd317c3f8b2e4c6ed1ae93497be7e30605a0d32237ac37a37a8a322", size = 215511, upload-time = "2025-08-04T00:33:20.32Z" }, + { url = "https://files.pythonhosted.org/packages/3f/34/68509e44995b9cad806d81b76c22bc5181f3535bca7cd9c15791bfd8951e/coverage-7.10.2-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:069b779d03d458602bc0e27189876e7d8bdf6b24ac0f12900de22dd2154e6ad7", size = 245513, upload-time = "2025-08-04T00:33:21.896Z" }, + { url = "https://files.pythonhosted.org/packages/ef/d4/9b12f357413248ce40804b0f58030b55a25b28a5c02db95fb0aa50c5d62c/coverage-7.10.2-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:4c2de4cb80b9990e71c62c2d3e9f3ec71b804b1f9ca4784ec7e74127e0f42468", size = 247350, upload-time = "2025-08-04T00:33:23.917Z" }, + { url = "https://files.pythonhosted.org/packages/b6/40/257945eda1f72098e4a3c350b1d68fdc5d7d032684a0aeb6c2391153ecf4/coverage-7.10.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:75bf7ab2374a7eb107602f1e07310cda164016cd60968abf817b7a0b5703e288", size = 249516, upload-time = "2025-08-04T00:33:25.5Z" }, + { url = "https://files.pythonhosted.org/packages/ff/55/8987f852ece378cecbf39a367f3f7ec53351e39a9151b130af3a3045b83f/coverage-7.10.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:3f37516458ec1550815134937f73d6d15b434059cd10f64678a2068f65c62406", size = 247241, upload-time = "2025-08-04T00:33:26.767Z" }, + { url = "https://files.pythonhosted.org/packages/df/ae/da397de7a42a18cea6062ed9c3b72c50b39e0b9e7b2893d7172d3333a9a1/coverage-7.10.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:de3c6271c482c250d3303fb5c6bdb8ca025fff20a67245e1425df04dc990ece9", size = 245274, upload-time = "2025-08-04T00:33:28.494Z" }, + { url = "https://files.pythonhosted.org/packages/4e/64/7baa895eb55ec0e1ec35b988687ecd5d4475ababb0d7ae5ca3874dd90ee7/coverage-7.10.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:98a838101321ac3089c9bb1d4bfa967e8afed58021fda72d7880dc1997f20ae1", size = 245882, upload-time = "2025-08-04T00:33:30.048Z" }, + { url = "https://files.pythonhosted.org/packages/24/6c/1fd76a0bd09ae75220ae9775a8290416d726f0e5ba26ea72346747161240/coverage-7.10.2-cp311-cp311-win32.whl", hash = "sha256:f2a79145a531a0e42df32d37be5af069b4a914845b6f686590739b786f2f7bce", size = 217541, upload-time = "2025-08-04T00:33:31.376Z" }, + { url = "https://files.pythonhosted.org/packages/5f/2d/8c18fb7a6e74c79fd4661e82535bc8c68aee12f46c204eabf910b097ccc9/coverage-7.10.2-cp311-cp311-win_amd64.whl", hash = "sha256:e4f5f1320f8ee0d7cfa421ceb257bef9d39fd614dd3ddcfcacd284d4824ed2c2", size = 218426, upload-time = "2025-08-04T00:33:32.976Z" }, + { url = "https://files.pythonhosted.org/packages/da/40/425bb35e4ff7c7af177edf5dffd4154bc2a677b27696afe6526d75c77fec/coverage-7.10.2-cp311-cp311-win_arm64.whl", hash = "sha256:d8f2d83118f25328552c728b8e91babf93217db259ca5c2cd4dd4220b8926293", size = 217116, upload-time = "2025-08-04T00:33:34.302Z" }, + { url = "https://files.pythonhosted.org/packages/4e/1e/2c752bdbbf6f1199c59b1a10557fbb6fb3dc96b3c0077b30bd41a5922c1f/coverage-7.10.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:890ad3a26da9ec7bf69255b9371800e2a8da9bc223ae5d86daeb940b42247c83", size = 215311, upload-time = "2025-08-04T00:33:35.524Z" }, + { url = "https://files.pythonhosted.org/packages/68/6a/84277d73a2cafb96e24be81b7169372ba7ff28768ebbf98e55c85a491b0f/coverage-7.10.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:38fd1ccfca7838c031d7a7874d4353e2f1b98eb5d2a80a2fe5732d542ae25e9c", size = 215550, upload-time = "2025-08-04T00:33:37.109Z" }, + { url = "https://files.pythonhosted.org/packages/b5/e7/5358b73b46ac76f56cc2de921eeabd44fabd0b7ff82ea4f6b8c159c4d5dc/coverage-7.10.2-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:76c1ffaaf4f6f0f6e8e9ca06f24bb6454a7a5d4ced97a1bc466f0d6baf4bd518", size = 246564, upload-time = "2025-08-04T00:33:38.33Z" }, + { url = "https://files.pythonhosted.org/packages/7c/0e/b0c901dd411cb7fc0cfcb28ef0dc6f3049030f616bfe9fc4143aecd95901/coverage-7.10.2-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:86da8a3a84b79ead5c7d0e960c34f580bc3b231bb546627773a3f53c532c2f21", size = 248993, upload-time = "2025-08-04T00:33:39.555Z" }, + { url = "https://files.pythonhosted.org/packages/0e/4e/a876db272072a9e0df93f311e187ccdd5f39a190c6d1c1f0b6e255a0d08e/coverage-7.10.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:99cef9731c8a39801830a604cc53c93c9e57ea8b44953d26589499eded9576e0", size = 250454, upload-time = "2025-08-04T00:33:41.023Z" }, + { url = "https://files.pythonhosted.org/packages/64/d6/1222dc69f8dd1be208d55708a9f4a450ad582bf4fa05320617fea1eaa6d8/coverage-7.10.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:ea58b112f2966a8b91eb13f5d3b1f8bb43c180d624cd3283fb33b1cedcc2dd75", size = 248365, upload-time = "2025-08-04T00:33:42.376Z" }, + { url = "https://files.pythonhosted.org/packages/62/e3/40fd71151064fc315c922dd9a35e15b30616f00146db1d6a0b590553a75a/coverage-7.10.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:20f405188d28da9522b7232e51154e1b884fc18d0b3a10f382d54784715bbe01", size = 246562, upload-time = "2025-08-04T00:33:43.663Z" }, + { url = "https://files.pythonhosted.org/packages/fc/14/8aa93ddcd6623ddaef5d8966268ac9545b145bce4fe7b1738fd1c3f0d957/coverage-7.10.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:64586ce42bbe0da4d9f76f97235c545d1abb9b25985a8791857690f96e23dc3b", size = 247772, upload-time = "2025-08-04T00:33:45.068Z" }, + { url = "https://files.pythonhosted.org/packages/07/4e/dcb1c01490623c61e2f2ea85cb185fa6a524265bb70eeb897d3c193efeb9/coverage-7.10.2-cp312-cp312-win32.whl", hash = "sha256:bc2e69b795d97ee6d126e7e22e78a509438b46be6ff44f4dccbb5230f550d340", size = 217710, upload-time = "2025-08-04T00:33:46.378Z" }, + { url = "https://files.pythonhosted.org/packages/79/16/e8aab4162b5f80ad2e5e1f54b1826e2053aa2f4db508b864af647f00c239/coverage-7.10.2-cp312-cp312-win_amd64.whl", hash = "sha256:adda2268b8cf0d11f160fad3743b4dfe9813cd6ecf02c1d6397eceaa5b45b388", size = 218499, upload-time = "2025-08-04T00:33:48.048Z" }, + { url = "https://files.pythonhosted.org/packages/06/7f/c112ec766e8f1131ce8ce26254be028772757b2d1e63e4f6a4b0ad9a526c/coverage-7.10.2-cp312-cp312-win_arm64.whl", hash = "sha256:164429decd0d6b39a0582eaa30c67bf482612c0330572343042d0ed9e7f15c20", size = 217154, upload-time = "2025-08-04T00:33:49.299Z" }, + { url = "https://files.pythonhosted.org/packages/8d/04/9b7a741557f93c0ed791b854d27aa8d9fe0b0ce7bb7c52ca1b0f2619cb74/coverage-7.10.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:aca7b5645afa688de6d4f8e89d30c577f62956fefb1bad021490d63173874186", size = 215337, upload-time = "2025-08-04T00:33:50.61Z" }, + { url = "https://files.pythonhosted.org/packages/02/a4/8d1088cd644750c94bc305d3cf56082b4cdf7fb854a25abb23359e74892f/coverage-7.10.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:96e5921342574a14303dfdb73de0019e1ac041c863743c8fe1aa6c2b4a257226", size = 215596, upload-time = "2025-08-04T00:33:52.33Z" }, + { url = "https://files.pythonhosted.org/packages/01/2f/643a8d73343f70e162d8177a3972b76e306b96239026bc0c12cfde4f7c7a/coverage-7.10.2-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:11333094c1bff621aa811b67ed794865cbcaa99984dedea4bd9cf780ad64ecba", size = 246145, upload-time = "2025-08-04T00:33:53.641Z" }, + { url = "https://files.pythonhosted.org/packages/1f/4a/722098d1848db4072cda71b69ede1e55730d9063bf868375264d0d302bc9/coverage-7.10.2-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:6eb586fa7d2aee8d65d5ae1dd71414020b2f447435c57ee8de8abea0a77d5074", size = 248492, upload-time = "2025-08-04T00:33:55.366Z" }, + { url = "https://files.pythonhosted.org/packages/3f/b0/8a6d7f326f6e3e6ed398cde27f9055e860a1e858317001835c521673fb60/coverage-7.10.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2d358f259d8019d4ef25d8c5b78aca4c7af25e28bd4231312911c22a0e824a57", size = 249927, upload-time = "2025-08-04T00:33:57.042Z" }, + { url = "https://files.pythonhosted.org/packages/bb/21/1aaadd3197b54d1e61794475379ecd0f68d8fc5c2ebd352964dc6f698a3d/coverage-7.10.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5250bda76e30382e0a2dcd68d961afcab92c3a7613606e6269855c6979a1b0bb", size = 248138, upload-time = "2025-08-04T00:33:58.329Z" }, + { url = "https://files.pythonhosted.org/packages/48/65/be75bafb2bdd22fd8bf9bf63cd5873b91bb26ec0d68f02d4b8b09c02decb/coverage-7.10.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:a91e027d66eff214d88d9afbe528e21c9ef1ecdf4956c46e366c50f3094696d0", size = 246111, upload-time = "2025-08-04T00:33:59.899Z" }, + { url = "https://files.pythonhosted.org/packages/5e/30/a4f0c5e249c3cc60e6c6f30d8368e372f2d380eda40e0434c192ac27ccf5/coverage-7.10.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:228946da741558904e2c03ce870ba5efd9cd6e48cbc004d9a27abee08100a15a", size = 247493, upload-time = "2025-08-04T00:34:01.619Z" }, + { url = "https://files.pythonhosted.org/packages/85/99/f09b9493e44a75cf99ca834394c12f8cb70da6c1711ee296534f97b52729/coverage-7.10.2-cp313-cp313-win32.whl", hash = "sha256:95e23987b52d02e7c413bf2d6dc6288bd5721beb518052109a13bfdc62c8033b", size = 217756, upload-time = "2025-08-04T00:34:03.277Z" }, + { url = "https://files.pythonhosted.org/packages/2d/bb/cbcb09103be330c7d26ff0ab05c4a8861dd2e254656fdbd3eb7600af4336/coverage-7.10.2-cp313-cp313-win_amd64.whl", hash = "sha256:f35481d42c6d146d48ec92d4e239c23f97b53a3f1fbd2302e7c64336f28641fe", size = 218526, upload-time = "2025-08-04T00:34:04.635Z" }, + { url = "https://files.pythonhosted.org/packages/37/8f/8bfb4e0bca52c00ab680767c0dd8cfd928a2a72d69897d9b2d5d8b5f63f5/coverage-7.10.2-cp313-cp313-win_arm64.whl", hash = "sha256:65b451949cb789c346f9f9002441fc934d8ccedcc9ec09daabc2139ad13853f7", size = 217176, upload-time = "2025-08-04T00:34:05.973Z" }, + { url = "https://files.pythonhosted.org/packages/1e/25/d458ba0bf16a8204a88d74dbb7ec5520f29937ffcbbc12371f931c11efd2/coverage-7.10.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:e8415918856a3e7d57a4e0ad94651b761317de459eb74d34cc1bb51aad80f07e", size = 216058, upload-time = "2025-08-04T00:34:07.368Z" }, + { url = "https://files.pythonhosted.org/packages/0b/1c/af4dfd2d7244dc7610fed6d59d57a23ea165681cd764445dc58d71ed01a6/coverage-7.10.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:f287a25a8ca53901c613498e4a40885b19361a2fe8fbfdbb7f8ef2cad2a23f03", size = 216273, upload-time = "2025-08-04T00:34:09.073Z" }, + { url = "https://files.pythonhosted.org/packages/8e/67/ec5095d4035c6e16368226fa9cb15f77f891194c7e3725aeefd08e7a3e5a/coverage-7.10.2-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:75cc1a3f8c88c69bf16a871dab1fe5a7303fdb1e9f285f204b60f1ee539b8fc0", size = 257513, upload-time = "2025-08-04T00:34:10.403Z" }, + { url = "https://files.pythonhosted.org/packages/1c/47/be5550b57a3a8ba797de4236b0fd31031f88397b2afc84ab3c2d4cf265f6/coverage-7.10.2-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:ca07fa78cc9d26bc8c4740de1abd3489cf9c47cc06d9a8ab3d552ff5101af4c0", size = 259377, upload-time = "2025-08-04T00:34:12.138Z" }, + { url = "https://files.pythonhosted.org/packages/37/50/b12a4da1382e672305c2d17cd3029dc16b8a0470de2191dbf26b91431378/coverage-7.10.2-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c2e117e64c26300032755d4520cd769f2623cde1a1d1c3515b05a3b8add0ade1", size = 261516, upload-time = "2025-08-04T00:34:13.608Z" }, + { url = "https://files.pythonhosted.org/packages/db/41/4d3296dbd33dd8da178171540ca3391af7c0184c0870fd4d4574ac290290/coverage-7.10.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:daaf98009977f577b71f8800208f4d40d4dcf5c2db53d4d822787cdc198d76e1", size = 259110, upload-time = "2025-08-04T00:34:15.089Z" }, + { url = "https://files.pythonhosted.org/packages/ea/f1/b409959ecbc0cec0e61e65683b22bacaa4a3b11512f834e16dd8ffbc37db/coverage-7.10.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:ea8d8fe546c528535c761ba424410bbeb36ba8a0f24be653e94b70c93fd8a8ca", size = 257248, upload-time = "2025-08-04T00:34:16.501Z" }, + { url = "https://files.pythonhosted.org/packages/48/ab/7076dc1c240412e9267d36ec93e9e299d7659f6a5c1e958f87e998b0fb6d/coverage-7.10.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:fe024d40ac31eb8d5aae70215b41dafa264676caa4404ae155f77d2fa95c37bb", size = 258063, upload-time = "2025-08-04T00:34:18.338Z" }, + { url = "https://files.pythonhosted.org/packages/1e/77/f6b51a0288f8f5f7dcc7c89abdd22cf514f3bc5151284f5cd628917f8e10/coverage-7.10.2-cp313-cp313t-win32.whl", hash = "sha256:8f34b09f68bdadec122ffad312154eda965ade433559cc1eadd96cca3de5c824", size = 218433, upload-time = "2025-08-04T00:34:19.71Z" }, + { url = "https://files.pythonhosted.org/packages/7b/6d/547a86493e25270ce8481543e77f3a0aa3aa872c1374246b7b76273d66eb/coverage-7.10.2-cp313-cp313t-win_amd64.whl", hash = "sha256:71d40b3ac0f26fa9ffa6ee16219a714fed5c6ec197cdcd2018904ab5e75bcfa3", size = 219523, upload-time = "2025-08-04T00:34:21.171Z" }, + { url = "https://files.pythonhosted.org/packages/ff/d5/3c711e38eaf9ab587edc9bed232c0298aed84e751a9f54aaa556ceaf7da6/coverage-7.10.2-cp313-cp313t-win_arm64.whl", hash = "sha256:abb57fdd38bf6f7dcc66b38dafb7af7c5fdc31ac6029ce373a6f7f5331d6f60f", size = 217739, upload-time = "2025-08-04T00:34:22.514Z" }, + { url = "https://files.pythonhosted.org/packages/71/53/83bafa669bb9d06d4c8c6a055d8d05677216f9480c4698fb183ba7ec5e47/coverage-7.10.2-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:a3e853cc04987c85ec410905667eed4bf08b1d84d80dfab2684bb250ac8da4f6", size = 215328, upload-time = "2025-08-04T00:34:23.991Z" }, + { url = "https://files.pythonhosted.org/packages/1d/6c/30827a9c5a48a813e865fbaf91e2db25cce990bd223a022650ef2293fe11/coverage-7.10.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:0100b19f230df72c90fdb36db59d3f39232391e8d89616a7de30f677da4f532b", size = 215608, upload-time = "2025-08-04T00:34:25.437Z" }, + { url = "https://files.pythonhosted.org/packages/bb/a0/c92d85948056ddc397b72a3d79d36d9579c53cb25393ed3c40db7d33b193/coverage-7.10.2-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:9c1cd71483ea78331bdfadb8dcec4f4edfb73c7002c1206d8e0af6797853f5be", size = 246111, upload-time = "2025-08-04T00:34:26.857Z" }, + { url = "https://files.pythonhosted.org/packages/c2/cf/d695cf86b2559aadd072c91720a7844be4fb82cb4a3b642a2c6ce075692d/coverage-7.10.2-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:9f75dbf4899e29a37d74f48342f29279391668ef625fdac6d2f67363518056a1", size = 248419, upload-time = "2025-08-04T00:34:28.726Z" }, + { url = "https://files.pythonhosted.org/packages/ce/0a/03206aec4a05986e039418c038470d874045f6e00426b0c3879adc1f9251/coverage-7.10.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a7df481e7508de1c38b9b8043da48d94931aefa3e32b47dd20277e4978ed5b95", size = 250038, upload-time = "2025-08-04T00:34:30.061Z" }, + { url = "https://files.pythonhosted.org/packages/ab/9b/b3bd6bd52118c12bc4cf319f5baba65009c9beea84e665b6b9f03fa3f180/coverage-7.10.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:835f39e618099325e7612b3406f57af30ab0a0af350490eff6421e2e5f608e46", size = 248066, upload-time = "2025-08-04T00:34:31.53Z" }, + { url = "https://files.pythonhosted.org/packages/80/cc/bfa92e261d3e055c851a073e87ba6a3bff12a1f7134233e48a8f7d855875/coverage-7.10.2-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:12e52b5aa00aa720097d6947d2eb9e404e7c1101ad775f9661ba165ed0a28303", size = 245909, upload-time = "2025-08-04T00:34:32.943Z" }, + { url = "https://files.pythonhosted.org/packages/12/80/c8df15db4847710c72084164f615ae900af1ec380dce7f74a5678ccdf5e1/coverage-7.10.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:718044729bf1fe3e9eb9f31b52e44ddae07e434ec050c8c628bf5adc56fe4bdd", size = 247329, upload-time = "2025-08-04T00:34:34.388Z" }, + { url = "https://files.pythonhosted.org/packages/04/6f/cb66e1f7124d5dd9ced69f889f02931419cb448125e44a89a13f4e036124/coverage-7.10.2-cp314-cp314-win32.whl", hash = "sha256:f256173b48cc68486299d510a3e729a96e62c889703807482dbf56946befb5c8", size = 218007, upload-time = "2025-08-04T00:34:35.846Z" }, + { url = "https://files.pythonhosted.org/packages/8c/e1/3d4be307278ce32c1b9d95cc02ee60d54ddab784036101d053ec9e4fe7f5/coverage-7.10.2-cp314-cp314-win_amd64.whl", hash = "sha256:2e980e4179f33d9b65ac4acb86c9c0dde904098853f27f289766657ed16e07b3", size = 218802, upload-time = "2025-08-04T00:34:37.35Z" }, + { url = "https://files.pythonhosted.org/packages/ec/66/1e43bbeb66c55a5a5efec70f1c153cf90cfc7f1662ab4ebe2d844de9122c/coverage-7.10.2-cp314-cp314-win_arm64.whl", hash = "sha256:14fb5b6641ab5b3c4161572579f0f2ea8834f9d3af2f7dd8fbaecd58ef9175cc", size = 217397, upload-time = "2025-08-04T00:34:39.15Z" }, + { url = "https://files.pythonhosted.org/packages/81/01/ae29c129217f6110dc694a217475b8aecbb1b075d8073401f868c825fa99/coverage-7.10.2-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:e96649ac34a3d0e6491e82a2af71098e43be2874b619547c3282fc11d3840a4b", size = 216068, upload-time = "2025-08-04T00:34:40.648Z" }, + { url = "https://files.pythonhosted.org/packages/a2/50/6e9221d4139f357258f36dfa1d8cac4ec56d9d5acf5fdcc909bb016954d7/coverage-7.10.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:1a2e934e9da26341d342d30bfe91422bbfdb3f1f069ec87f19b2909d10d8dcc4", size = 216285, upload-time = "2025-08-04T00:34:42.441Z" }, + { url = "https://files.pythonhosted.org/packages/eb/ec/89d1d0c0ece0d296b4588e0ef4df185200456d42a47f1141335f482c2fc5/coverage-7.10.2-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:651015dcd5fd9b5a51ca79ece60d353cacc5beaf304db750407b29c89f72fe2b", size = 257603, upload-time = "2025-08-04T00:34:43.899Z" }, + { url = "https://files.pythonhosted.org/packages/82/06/c830af66734671c778fc49d35b58339e8f0687fbd2ae285c3f96c94da092/coverage-7.10.2-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:81bf6a32212f9f66da03d63ecb9cd9bd48e662050a937db7199dbf47d19831de", size = 259568, upload-time = "2025-08-04T00:34:45.519Z" }, + { url = "https://files.pythonhosted.org/packages/60/57/f280dd6f1c556ecc744fbf39e835c33d3ae987d040d64d61c6f821e87829/coverage-7.10.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d800705f6951f75a905ea6feb03fff8f3ea3468b81e7563373ddc29aa3e5d1ca", size = 261691, upload-time = "2025-08-04T00:34:47.019Z" }, + { url = "https://files.pythonhosted.org/packages/54/2b/c63a0acbd19d99ec32326164c23df3a4e18984fb86e902afdd66ff7b3d83/coverage-7.10.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:248b5394718e10d067354448dc406d651709c6765669679311170da18e0e9af8", size = 259166, upload-time = "2025-08-04T00:34:48.792Z" }, + { url = "https://files.pythonhosted.org/packages/fd/c5/cd2997dcfcbf0683634da9df52d3967bc1f1741c1475dd0e4722012ba9ef/coverage-7.10.2-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:5c61675a922b569137cf943770d7ad3edd0202d992ce53ac328c5ff68213ccf4", size = 257241, upload-time = "2025-08-04T00:34:51.038Z" }, + { url = "https://files.pythonhosted.org/packages/16/26/c9e30f82fdad8d47aee90af4978b18c88fa74369ae0f0ba0dbf08cee3a80/coverage-7.10.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:52d708b5fd65589461381fa442d9905f5903d76c086c6a4108e8e9efdca7a7ed", size = 258139, upload-time = "2025-08-04T00:34:52.533Z" }, + { url = "https://files.pythonhosted.org/packages/c9/99/bdb7bd00bebcd3dedfb895fa9af8e46b91422993e4a37ac634a5f1113790/coverage-7.10.2-cp314-cp314t-win32.whl", hash = "sha256:916369b3b914186b2c5e5ad2f7264b02cff5df96cdd7cdad65dccd39aa5fd9f0", size = 218809, upload-time = "2025-08-04T00:34:54.075Z" }, + { url = "https://files.pythonhosted.org/packages/eb/5e/56a7852e38a04d1520dda4dfbfbf74a3d6dec932c20526968f7444763567/coverage-7.10.2-cp314-cp314t-win_amd64.whl", hash = "sha256:5b9d538e8e04916a5df63052d698b30c74eb0174f2ca9cd942c981f274a18eaf", size = 219926, upload-time = "2025-08-04T00:34:55.643Z" }, + { url = "https://files.pythonhosted.org/packages/e0/12/7fbe6b9c52bb9d627e9556f9f2edfdbe88b315e084cdecc9afead0c3b36a/coverage-7.10.2-cp314-cp314t-win_arm64.whl", hash = "sha256:04c74f9ef1f925456a9fd23a7eef1103126186d0500ef9a0acb0bd2514bdc7cc", size = 217925, upload-time = "2025-08-04T00:34:57.564Z" }, + { url = "https://files.pythonhosted.org/packages/18/d8/9b768ac73a8ac2d10c080af23937212434a958c8d2a1c84e89b450237942/coverage-7.10.2-py3-none-any.whl", hash = "sha256:95db3750dd2e6e93d99fa2498f3a1580581e49c494bddccc6f85c5c21604921f", size = 206973, upload-time = "2025-08-04T00:35:15.918Z" }, +] + +[package.optional-dependencies] +toml = [ + { name = "tomli", marker = "python_full_version <= '3.11'" }, +] + +[[package]] +name = "crc32c" +version = "2.7.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7f/4c/4e40cc26347ac8254d3f25b9f94710b8e8df24ee4dddc1ba41907a88a94d/crc32c-2.7.1.tar.gz", hash = "sha256:f91b144a21eef834d64178e01982bb9179c354b3e9e5f4c803b0e5096384968c", size = 45712, upload-time = "2024-09-24T06:20:17.553Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/45/8e/2f37f46368bbfd50edfc11b96f0aa135699034b1b020966c70ebaff3463b/crc32c-2.7.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:19e03a50545a3ef400bd41667d5525f71030488629c57d819e2dd45064f16192", size = 49672, upload-time = "2024-09-24T06:18:18.032Z" }, + { url = "https://files.pythonhosted.org/packages/ed/b8/e52f7c4b045b871c2984d70f37c31d4861b533a8082912dfd107a96cf7c1/crc32c-2.7.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8c03286b1e5ce9bed7090084f206aacd87c5146b4b10de56fe9e86cbbbf851cf", size = 37155, upload-time = "2024-09-24T06:18:19.373Z" }, + { url = "https://files.pythonhosted.org/packages/25/ee/0cfa82a68736697f3c7e435ba658c2ef8c997f42b89f6ab4545efe1b2649/crc32c-2.7.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:80ebbf144a1a56a532b353e81fa0f3edca4f4baa1bf92b1dde2c663a32bb6a15", size = 35372, upload-time = "2024-09-24T06:18:20.983Z" }, + { url = "https://files.pythonhosted.org/packages/aa/92/c878aaba81c431fcd93a059e9f6c90db397c585742793f0bf6e0c531cc67/crc32c-2.7.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:96b794fd11945298fdd5eb1290a812efb497c14bc42592c5c992ca077458eeba", size = 54879, upload-time = "2024-09-24T06:18:23.085Z" }, + { url = "https://files.pythonhosted.org/packages/5b/f5/ab828ab3907095e06b18918408748950a9f726ee2b37be1b0839fb925ee1/crc32c-2.7.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9df7194dd3c0efb5a21f5d70595b7a8b4fd9921fbbd597d6d8e7a11eca3e2d27", size = 52588, upload-time = "2024-09-24T06:18:24.463Z" }, + { url = "https://files.pythonhosted.org/packages/6a/2b/9e29e9ac4c4213d60491db09487125db358cd9263490fbadbd55e48fbe03/crc32c-2.7.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d698eec444b18e296a104d0b9bb6c596c38bdcb79d24eba49604636e9d747305", size = 53674, upload-time = "2024-09-24T06:18:25.624Z" }, + { url = "https://files.pythonhosted.org/packages/79/ed/df3c4c14bf1b29f5c9b52d51fb6793e39efcffd80b2941d994e8f7f5f688/crc32c-2.7.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:e07cf10ef852d219d179333fd706d1c415626f1f05e60bd75acf0143a4d8b225", size = 54691, upload-time = "2024-09-24T06:18:26.578Z" }, + { url = "https://files.pythonhosted.org/packages/0c/47/4917af3c9c1df2fff28bbfa6492673c9adeae5599dcc207bbe209847489c/crc32c-2.7.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:d2a051f296e6e92e13efee3b41db388931cdb4a2800656cd1ed1d9fe4f13a086", size = 52896, upload-time = "2024-09-24T06:18:28.174Z" }, + { url = "https://files.pythonhosted.org/packages/1b/6f/26fc3dda5835cda8f6cd9d856afe62bdeae428de4c34fea200b0888e8835/crc32c-2.7.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a1738259802978cdf428f74156175da6a5fdfb7256f647fdc0c9de1bc6cd7173", size = 53554, upload-time = "2024-09-24T06:18:29.104Z" }, + { url = "https://files.pythonhosted.org/packages/56/3e/6f39127f7027c75d130c0ba348d86a6150dff23761fbc6a5f71659f4521e/crc32c-2.7.1-cp311-cp311-win32.whl", hash = "sha256:f7786d219a1a1bf27d0aa1869821d11a6f8e90415cfffc1e37791690d4a848a1", size = 38370, upload-time = "2024-09-24T06:18:30.013Z" }, + { url = "https://files.pythonhosted.org/packages/c9/fb/1587c2705a3a47a3d0067eecf9a6fec510761c96dec45c7b038fb5c8ff46/crc32c-2.7.1-cp311-cp311-win_amd64.whl", hash = "sha256:887f6844bb3ad35f0778cd10793ad217f7123a5422e40041231b8c4c7329649d", size = 39795, upload-time = "2024-09-24T06:18:31.324Z" }, + { url = "https://files.pythonhosted.org/packages/1d/02/998dc21333413ce63fe4c1ca70eafe61ca26afc7eb353f20cecdb77d614e/crc32c-2.7.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:f7d1c4e761fe42bf856130daf8b2658df33fe0ced3c43dadafdfeaa42b57b950", size = 49568, upload-time = "2024-09-24T06:18:32.425Z" }, + { url = "https://files.pythonhosted.org/packages/9c/3e/e3656bfa76e50ef87b7136fef2dbf3c46e225629432fc9184fdd7fd187ff/crc32c-2.7.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:73361c79a6e4605204457f19fda18b042a94508a52e53d10a4239da5fb0f6a34", size = 37019, upload-time = "2024-09-24T06:18:34.097Z" }, + { url = "https://files.pythonhosted.org/packages/0b/7d/5ff9904046ad15a08772515db19df43107bf5e3901a89c36a577b5f40ba0/crc32c-2.7.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:afd778fc8ac0ed2ffbfb122a9aa6a0e409a8019b894a1799cda12c01534493e0", size = 35373, upload-time = "2024-09-24T06:18:35.02Z" }, + { url = "https://files.pythonhosted.org/packages/4d/41/4aedc961893f26858ab89fc772d0eaba91f9870f19eaa933999dcacb94ec/crc32c-2.7.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:56ef661b34e9f25991fface7f9ad85e81bbc1b3fe3b916fd58c893eabe2fa0b8", size = 54675, upload-time = "2024-09-24T06:18:35.954Z" }, + { url = "https://files.pythonhosted.org/packages/d6/63/8cabf09b7e39b9fec8f7010646c8b33057fc8d67e6093b3cc15563d23533/crc32c-2.7.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:571aa4429444b5d7f588e4377663592145d2d25eb1635abb530f1281794fc7c9", size = 52386, upload-time = "2024-09-24T06:18:36.896Z" }, + { url = "https://files.pythonhosted.org/packages/79/13/13576941bf7cf95026abae43d8427c812c0054408212bf8ed490eda846b0/crc32c-2.7.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c02a3bd67dea95cdb25844aaf44ca2e1b0c1fd70b287ad08c874a95ef4bb38db", size = 53495, upload-time = "2024-09-24T06:18:38.099Z" }, + { url = "https://files.pythonhosted.org/packages/3d/b6/55ffb26d0517d2d6c6f430ce2ad36ae7647c995c5bfd7abce7f32bb2bad1/crc32c-2.7.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:99d17637c4867672cb8adeea007294e3c3df9d43964369516cfe2c1f47ce500a", size = 54456, upload-time = "2024-09-24T06:18:39.051Z" }, + { url = "https://files.pythonhosted.org/packages/c2/1a/5562e54cb629ecc5543d3604dba86ddfc7c7b7bf31d64005b38a00d31d31/crc32c-2.7.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:f4a400ac3c69a32e180d8753fd7ec7bccb80ade7ab0812855dce8a208e72495f", size = 52647, upload-time = "2024-09-24T06:18:40.021Z" }, + { url = "https://files.pythonhosted.org/packages/48/ec/ce4138eaf356cd9aae60bbe931755e5e0151b3eca5f491fce6c01b97fd59/crc32c-2.7.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:588587772e55624dd9c7a906ec9e8773ae0b6ac5e270fc0bc84ee2758eba90d5", size = 53332, upload-time = "2024-09-24T06:18:40.925Z" }, + { url = "https://files.pythonhosted.org/packages/5e/b5/144b42cd838a901175a916078781cb2c3c9f977151c9ba085aebd6d15b22/crc32c-2.7.1-cp312-cp312-win32.whl", hash = "sha256:9f14b60e5a14206e8173dd617fa0c4df35e098a305594082f930dae5488da428", size = 38371, upload-time = "2024-09-24T06:18:42.711Z" }, + { url = "https://files.pythonhosted.org/packages/ae/c4/7929dcd5d9b57db0cce4fe6f6c191049380fc6d8c9b9f5581967f4ec018e/crc32c-2.7.1-cp312-cp312-win_amd64.whl", hash = "sha256:7c810a246660a24dc818047dc5f89c7ce7b2814e1e08a8e99993f4103f7219e8", size = 39805, upload-time = "2024-09-24T06:18:43.6Z" }, + { url = "https://files.pythonhosted.org/packages/bf/98/1a6d60d5b3b5edc8382777b64100343cb4aa6a7e172fae4a6cfcb8ebbbd9/crc32c-2.7.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:24949bffb06fc411cc18188d33357923cb935273642164d0bb37a5f375654169", size = 49567, upload-time = "2024-09-24T06:18:44.485Z" }, + { url = "https://files.pythonhosted.org/packages/4f/56/0dd652d4e950e6348bbf16b964b3325e4ad8220470774128fc0b0dd069cb/crc32c-2.7.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:2d5d326e7e118d4fa60187770d86b66af2fdfc63ce9eeb265f0d3e7d49bebe0b", size = 37018, upload-time = "2024-09-24T06:18:45.434Z" }, + { url = "https://files.pythonhosted.org/packages/47/02/2bd65fdef10139b6a802d83a7f966b7750fe5ffb1042f7cbe5dbb6403869/crc32c-2.7.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:ba110df60c64c8e2d77a9425b982a520ccdb7abe42f06604f4d98a45bb1fff62", size = 35374, upload-time = "2024-09-24T06:18:46.304Z" }, + { url = "https://files.pythonhosted.org/packages/a9/0d/3e797d1ed92d357a6a4c5b41cea15a538b27a8fdf18c7863747eb50b73ad/crc32c-2.7.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c277f9d16a3283e064d54854af0976b72abaa89824955579b2b3f37444f89aae", size = 54641, upload-time = "2024-09-24T06:18:47.207Z" }, + { url = "https://files.pythonhosted.org/packages/a7/d3/4ddeef755caaa75680c559562b6c71f5910fee4c4f3a2eb5ea8b57f0e48c/crc32c-2.7.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:881af0478a01331244e27197356929edbdeaef6a9f81b5c6bacfea18d2139289", size = 52338, upload-time = "2024-09-24T06:18:49.31Z" }, + { url = "https://files.pythonhosted.org/packages/01/cf/32f019be5de9f6e180926a50ee5f08648e686c7d9a59f2c5d0806a77b1c7/crc32c-2.7.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:724d5ff4d29ff093a983ae656be3307093706d850ea2a233bf29fcacc335d945", size = 53447, upload-time = "2024-09-24T06:18:50.296Z" }, + { url = "https://files.pythonhosted.org/packages/b2/8b/92f3f62f3bafe8f7ab4af7bfb7246dc683fd11ec0d6dfb73f91e09079f69/crc32c-2.7.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:b2416c4d88696ac322632555c0f81ab35e15f154bc96055da6cf110d642dbc10", size = 54484, upload-time = "2024-09-24T06:18:51.311Z" }, + { url = "https://files.pythonhosted.org/packages/98/b2/113a50f8781f76af5ac65ffdb907e72bddbe974de8e02247f0d58bc48040/crc32c-2.7.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:60254251b88ec9b9795215f0f9ec015a6b5eef8b2c5fba1267c672d83c78fc02", size = 52703, upload-time = "2024-09-24T06:18:52.488Z" }, + { url = "https://files.pythonhosted.org/packages/b4/6c/309229e9acda8cf36a8ff4061d70b54d905f79b7037e16883ce6590a24ab/crc32c-2.7.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:edefc0e46f3c37372183f70338e5bdee42f6789b62fcd36ec53aa933e9dfbeaf", size = 53367, upload-time = "2024-09-24T06:18:53.49Z" }, + { url = "https://files.pythonhosted.org/packages/b5/2a/6c6324d920396e1bd9f3efbe8753da071be0ca52bd22d6c82d446b8d6975/crc32c-2.7.1-cp313-cp313-win32.whl", hash = "sha256:813af8111218970fe2adb833c5e5239f091b9c9e76f03b4dd91aaba86e99b499", size = 38377, upload-time = "2024-09-24T06:18:54.487Z" }, + { url = "https://files.pythonhosted.org/packages/db/a0/f01ccfab538db07ef3f6b4ede46357ff147a81dd4f3c59ca6a34c791a549/crc32c-2.7.1-cp313-cp313-win_amd64.whl", hash = "sha256:7d9ede7be8e4ec1c9e90aaf6884decbeef10e3473e6ddac032706d710cab5888", size = 39803, upload-time = "2024-09-24T06:18:55.419Z" }, + { url = "https://files.pythonhosted.org/packages/1b/80/61dcae7568b33acfde70c9d651c7d891c0c578c39cc049107c1cf61f1367/crc32c-2.7.1-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:db9ac92294284b22521356715784b91cc9094eee42a5282ab281b872510d1831", size = 49386, upload-time = "2024-09-24T06:18:56.813Z" }, + { url = "https://files.pythonhosted.org/packages/1e/f1/80f17c089799ab2b4c247443bdd101d6ceda30c46d7f193e16b5ca29c5a0/crc32c-2.7.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:8fcd7f2f29a30dc92af64a9ee3d38bde0c82bd20ad939999427aac94bbd87373", size = 36937, upload-time = "2024-09-24T06:18:57.77Z" }, + { url = "https://files.pythonhosted.org/packages/63/42/5fcfc71a3de493d920fd2590843762a2749981ea56b802b380e5df82309d/crc32c-2.7.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:5c056ef043393085523e149276a7ce0cb534b872e04f3e20d74d9a94a75c0ad7", size = 35292, upload-time = "2024-09-24T06:18:58.676Z" }, + { url = "https://files.pythonhosted.org/packages/03/de/fef962e898a953558fe1c55141644553e84ef4190693a31244c59a0856c7/crc32c-2.7.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:03a92551a343702629af91f78d205801219692b6909f8fa126b830e332bfb0e0", size = 54223, upload-time = "2024-09-24T06:18:59.675Z" }, + { url = "https://files.pythonhosted.org/packages/21/14/fceca1a6f45c0a1814fe8602a65657b75c27425162445925ba87438cad6b/crc32c-2.7.1-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fb9424ec1a8ca54763155a703e763bcede82e6569fe94762614bb2de1412d4e1", size = 51588, upload-time = "2024-09-24T06:19:00.938Z" }, + { url = "https://files.pythonhosted.org/packages/13/3b/13d40a7dfbf9ef05c84a0da45544ee72080dca4ce090679e5105689984bd/crc32c-2.7.1-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:88732070f6175530db04e0bb36880ac45c33d49f8ac43fa0e50cfb1830049d23", size = 52678, upload-time = "2024-09-24T06:19:02.661Z" }, + { url = "https://files.pythonhosted.org/packages/36/09/65ffc4fb9fa60ff6714eeb50a92284a4525e5943f0b040b572c0c76368c1/crc32c-2.7.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:57a20dfc27995f568f64775eea2bbb58ae269f1a1144561df5e4a4955f79db32", size = 53847, upload-time = "2024-09-24T06:19:03.705Z" }, + { url = "https://files.pythonhosted.org/packages/24/71/938e926085b7288da052db7c84416f3ce25e71baf7ab5b63824c7bcb6f22/crc32c-2.7.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:f7186d098bfd2cff25eac6880b7c7ad80431b90610036131c1c7dd0eab42a332", size = 51860, upload-time = "2024-09-24T06:19:04.726Z" }, + { url = "https://files.pythonhosted.org/packages/3c/d8/4526d5380189d6f2fa27256c204100f30214fe402f47cf6e9fb9a91ab890/crc32c-2.7.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:55a77e29a265418fa34bef15bd0f2c60afae5348988aaf35ed163b4bbf93cf37", size = 52508, upload-time = "2024-09-24T06:19:05.731Z" }, + { url = "https://files.pythonhosted.org/packages/19/30/15f7e35176488b77e5b88751947d321d603fccac273099ace27c7b2d50a6/crc32c-2.7.1-cp313-cp313t-win32.whl", hash = "sha256:ae38a4b6aa361595d81cab441405fbee905c72273e80a1c010fb878ae77ac769", size = 38319, upload-time = "2024-09-24T06:19:07.233Z" }, + { url = "https://files.pythonhosted.org/packages/19/c4/0b3eee04dac195f4730d102d7a9fbea894ae7a32ce075f84336df96a385d/crc32c-2.7.1-cp313-cp313t-win_amd64.whl", hash = "sha256:eee2a43b663feb6c79a6c1c6e5eae339c2b72cfac31ee54ec0209fa736cf7ee5", size = 39781, upload-time = "2024-09-24T06:19:08.182Z" }, +] + +[[package]] +name = "cryptography" +version = "45.0.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cffi", marker = "platform_python_implementation != 'PyPy'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/95/1e/49527ac611af559665f71cbb8f92b332b5ec9c6fbc4e88b0f8e92f5e85df/cryptography-45.0.5.tar.gz", hash = "sha256:72e76caa004ab63accdf26023fccd1d087f6d90ec6048ff33ad0445abf7f605a", size = 744903, upload-time = "2025-07-02T13:06:25.941Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f0/fb/09e28bc0c46d2c547085e60897fea96310574c70fb21cd58a730a45f3403/cryptography-45.0.5-cp311-abi3-macosx_10_9_universal2.whl", hash = "sha256:101ee65078f6dd3e5a028d4f19c07ffa4dd22cce6a20eaa160f8b5219911e7d8", size = 7043092, upload-time = "2025-07-02T13:05:01.514Z" }, + { url = "https://files.pythonhosted.org/packages/b1/05/2194432935e29b91fb649f6149c1a4f9e6d3d9fc880919f4ad1bcc22641e/cryptography-45.0.5-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:3a264aae5f7fbb089dbc01e0242d3b67dffe3e6292e1f5182122bdf58e65215d", size = 4205926, upload-time = "2025-07-02T13:05:04.741Z" }, + { url = "https://files.pythonhosted.org/packages/07/8b/9ef5da82350175e32de245646b1884fc01124f53eb31164c77f95a08d682/cryptography-45.0.5-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:e74d30ec9c7cb2f404af331d5b4099a9b322a8a6b25c4632755c8757345baac5", size = 4429235, upload-time = "2025-07-02T13:05:07.084Z" }, + { url = "https://files.pythonhosted.org/packages/7c/e1/c809f398adde1994ee53438912192d92a1d0fc0f2d7582659d9ef4c28b0c/cryptography-45.0.5-cp311-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:3af26738f2db354aafe492fb3869e955b12b2ef2e16908c8b9cb928128d42c57", size = 4209785, upload-time = "2025-07-02T13:05:09.321Z" }, + { url = "https://files.pythonhosted.org/packages/d0/8b/07eb6bd5acff58406c5e806eff34a124936f41a4fb52909ffa4d00815f8c/cryptography-45.0.5-cp311-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:e6c00130ed423201c5bc5544c23359141660b07999ad82e34e7bb8f882bb78e0", size = 3893050, upload-time = "2025-07-02T13:05:11.069Z" }, + { url = "https://files.pythonhosted.org/packages/ec/ef/3333295ed58d900a13c92806b67e62f27876845a9a908c939f040887cca9/cryptography-45.0.5-cp311-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:dd420e577921c8c2d31289536c386aaa30140b473835e97f83bc71ea9d2baf2d", size = 4457379, upload-time = "2025-07-02T13:05:13.32Z" }, + { url = "https://files.pythonhosted.org/packages/d9/9d/44080674dee514dbb82b21d6fa5d1055368f208304e2ab1828d85c9de8f4/cryptography-45.0.5-cp311-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:d05a38884db2ba215218745f0781775806bde4f32e07b135348355fe8e4991d9", size = 4209355, upload-time = "2025-07-02T13:05:15.017Z" }, + { url = "https://files.pythonhosted.org/packages/c9/d8/0749f7d39f53f8258e5c18a93131919ac465ee1f9dccaf1b3f420235e0b5/cryptography-45.0.5-cp311-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:ad0caded895a00261a5b4aa9af828baede54638754b51955a0ac75576b831b27", size = 4456087, upload-time = "2025-07-02T13:05:16.945Z" }, + { url = "https://files.pythonhosted.org/packages/09/d7/92acac187387bf08902b0bf0699816f08553927bdd6ba3654da0010289b4/cryptography-45.0.5-cp311-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:9024beb59aca9d31d36fcdc1604dd9bbeed0a55bface9f1908df19178e2f116e", size = 4332873, upload-time = "2025-07-02T13:05:18.743Z" }, + { url = "https://files.pythonhosted.org/packages/03/c2/840e0710da5106a7c3d4153c7215b2736151bba60bf4491bdb421df5056d/cryptography-45.0.5-cp311-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:91098f02ca81579c85f66df8a588c78f331ca19089763d733e34ad359f474174", size = 4564651, upload-time = "2025-07-02T13:05:21.382Z" }, + { url = "https://files.pythonhosted.org/packages/2e/92/cc723dd6d71e9747a887b94eb3827825c6c24b9e6ce2bb33b847d31d5eaa/cryptography-45.0.5-cp311-abi3-win32.whl", hash = "sha256:926c3ea71a6043921050eaa639137e13dbe7b4ab25800932a8498364fc1abec9", size = 2929050, upload-time = "2025-07-02T13:05:23.39Z" }, + { url = "https://files.pythonhosted.org/packages/1f/10/197da38a5911a48dd5389c043de4aec4b3c94cb836299b01253940788d78/cryptography-45.0.5-cp311-abi3-win_amd64.whl", hash = "sha256:b85980d1e345fe769cfc57c57db2b59cff5464ee0c045d52c0df087e926fbe63", size = 3403224, upload-time = "2025-07-02T13:05:25.202Z" }, + { url = "https://files.pythonhosted.org/packages/fe/2b/160ce8c2765e7a481ce57d55eba1546148583e7b6f85514472b1d151711d/cryptography-45.0.5-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:f3562c2f23c612f2e4a6964a61d942f891d29ee320edb62ff48ffb99f3de9ae8", size = 7017143, upload-time = "2025-07-02T13:05:27.229Z" }, + { url = "https://files.pythonhosted.org/packages/c2/e7/2187be2f871c0221a81f55ee3105d3cf3e273c0a0853651d7011eada0d7e/cryptography-45.0.5-cp37-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:3fcfbefc4a7f332dece7272a88e410f611e79458fab97b5efe14e54fe476f4fd", size = 4197780, upload-time = "2025-07-02T13:05:29.299Z" }, + { url = "https://files.pythonhosted.org/packages/b9/cf/84210c447c06104e6be9122661159ad4ce7a8190011669afceeaea150524/cryptography-45.0.5-cp37-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:460f8c39ba66af7db0545a8c6f2eabcbc5a5528fc1cf6c3fa9a1e44cec33385e", size = 4420091, upload-time = "2025-07-02T13:05:31.221Z" }, + { url = "https://files.pythonhosted.org/packages/3e/6a/cb8b5c8bb82fafffa23aeff8d3a39822593cee6e2f16c5ca5c2ecca344f7/cryptography-45.0.5-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:9b4cf6318915dccfe218e69bbec417fdd7c7185aa7aab139a2c0beb7468c89f0", size = 4198711, upload-time = "2025-07-02T13:05:33.062Z" }, + { url = "https://files.pythonhosted.org/packages/04/f7/36d2d69df69c94cbb2473871926daf0f01ad8e00fe3986ac3c1e8c4ca4b3/cryptography-45.0.5-cp37-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:2089cc8f70a6e454601525e5bf2779e665d7865af002a5dec8d14e561002e135", size = 3883299, upload-time = "2025-07-02T13:05:34.94Z" }, + { url = "https://files.pythonhosted.org/packages/82/c7/f0ea40f016de72f81288e9fe8d1f6748036cb5ba6118774317a3ffc6022d/cryptography-45.0.5-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:0027d566d65a38497bc37e0dd7c2f8ceda73597d2ac9ba93810204f56f52ebc7", size = 4450558, upload-time = "2025-07-02T13:05:37.288Z" }, + { url = "https://files.pythonhosted.org/packages/06/ae/94b504dc1a3cdf642d710407c62e86296f7da9e66f27ab12a1ee6fdf005b/cryptography-45.0.5-cp37-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:be97d3a19c16a9be00edf79dca949c8fa7eff621763666a145f9f9535a5d7f42", size = 4198020, upload-time = "2025-07-02T13:05:39.102Z" }, + { url = "https://files.pythonhosted.org/packages/05/2b/aaf0adb845d5dabb43480f18f7ca72e94f92c280aa983ddbd0bcd6ecd037/cryptography-45.0.5-cp37-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:7760c1c2e1a7084153a0f68fab76e754083b126a47d0117c9ed15e69e2103492", size = 4449759, upload-time = "2025-07-02T13:05:41.398Z" }, + { url = "https://files.pythonhosted.org/packages/91/e4/f17e02066de63e0100a3a01b56f8f1016973a1d67551beaf585157a86b3f/cryptography-45.0.5-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:6ff8728d8d890b3dda5765276d1bc6fb099252915a2cd3aff960c4c195745dd0", size = 4319991, upload-time = "2025-07-02T13:05:43.64Z" }, + { url = "https://files.pythonhosted.org/packages/f2/2e/e2dbd629481b499b14516eed933f3276eb3239f7cee2dcfa4ee6b44d4711/cryptography-45.0.5-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:7259038202a47fdecee7e62e0fd0b0738b6daa335354396c6ddebdbe1206af2a", size = 4554189, upload-time = "2025-07-02T13:05:46.045Z" }, + { url = "https://files.pythonhosted.org/packages/f8/ea/a78a0c38f4c8736287b71c2ea3799d173d5ce778c7d6e3c163a95a05ad2a/cryptography-45.0.5-cp37-abi3-win32.whl", hash = "sha256:1e1da5accc0c750056c556a93c3e9cb828970206c68867712ca5805e46dc806f", size = 2911769, upload-time = "2025-07-02T13:05:48.329Z" }, + { url = "https://files.pythonhosted.org/packages/79/b3/28ac139109d9005ad3f6b6f8976ffede6706a6478e21c889ce36c840918e/cryptography-45.0.5-cp37-abi3-win_amd64.whl", hash = "sha256:90cb0a7bb35959f37e23303b7eed0a32280510030daba3f7fdfbb65defde6a97", size = 3390016, upload-time = "2025-07-02T13:05:50.811Z" }, + { url = "https://files.pythonhosted.org/packages/c0/71/9bdbcfd58d6ff5084687fe722c58ac718ebedbc98b9f8f93781354e6d286/cryptography-45.0.5-pp311-pypy311_pp73-macosx_10_9_x86_64.whl", hash = "sha256:8c4a6ff8a30e9e3d38ac0539e9a9e02540ab3f827a3394f8852432f6b0ea152e", size = 3587878, upload-time = "2025-07-02T13:06:06.339Z" }, + { url = "https://files.pythonhosted.org/packages/f0/63/83516cfb87f4a8756eaa4203f93b283fda23d210fc14e1e594bd5f20edb6/cryptography-45.0.5-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:bd4c45986472694e5121084c6ebbd112aa919a25e783b87eb95953c9573906d6", size = 4152447, upload-time = "2025-07-02T13:06:08.345Z" }, + { url = "https://files.pythonhosted.org/packages/22/11/d2823d2a5a0bd5802b3565437add16f5c8ce1f0778bf3822f89ad2740a38/cryptography-45.0.5-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:982518cd64c54fcada9d7e5cf28eabd3ee76bd03ab18e08a48cad7e8b6f31b18", size = 4386778, upload-time = "2025-07-02T13:06:10.263Z" }, + { url = "https://files.pythonhosted.org/packages/5f/38/6bf177ca6bce4fe14704ab3e93627c5b0ca05242261a2e43ef3168472540/cryptography-45.0.5-pp311-pypy311_pp73-manylinux_2_34_aarch64.whl", hash = "sha256:12e55281d993a793b0e883066f590c1ae1e802e3acb67f8b442e721e475e6463", size = 4151627, upload-time = "2025-07-02T13:06:13.097Z" }, + { url = "https://files.pythonhosted.org/packages/38/6a/69fc67e5266bff68a91bcb81dff8fb0aba4d79a78521a08812048913e16f/cryptography-45.0.5-pp311-pypy311_pp73-manylinux_2_34_x86_64.whl", hash = "sha256:5aa1e32983d4443e310f726ee4b071ab7569f58eedfdd65e9675484a4eb67bd1", size = 4385593, upload-time = "2025-07-02T13:06:15.689Z" }, + { url = "https://files.pythonhosted.org/packages/f6/34/31a1604c9a9ade0fdab61eb48570e09a796f4d9836121266447b0eaf7feb/cryptography-45.0.5-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:e357286c1b76403dd384d938f93c46b2b058ed4dfcdce64a770f0537ed3feb6f", size = 3331106, upload-time = "2025-07-02T13:06:18.058Z" }, +] + +[[package]] +name = "cupy-cuda12x" +version = "13.5.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "fastrlock" }, + { name = "numpy" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/42/52/95472c06adbb6d64c59c5caade65b0653195da1c78f39fbb0e7ac2ea6abe/cupy_cuda12x-13.5.1-cp311-cp311-manylinux2014_aarch64.whl", hash = "sha256:80d862db8b350505668fff9f5f539db35eef508776e4141984470e2bfde00dfe", size = 119311612, upload-time = "2025-07-11T04:38:16.85Z" }, + { url = "https://files.pythonhosted.org/packages/e4/1d/84140cb50b6cf417716cd58cdab86fcec743401336ad655bbae283ba52fc/cupy_cuda12x-13.5.1-cp311-cp311-manylinux2014_x86_64.whl", hash = "sha256:53ef54799fd72ea84ed152f0c862aa2b32383de1a989c0b4d047ff192b6b9a01", size = 113222422, upload-time = "2025-07-11T04:38:22.093Z" }, + { url = "https://files.pythonhosted.org/packages/1c/07/6a97107d2a2cf73001c5c67cf3149f0f9ada950840c3c7018c717d685e9f/cupy_cuda12x-13.5.1-cp311-cp311-win_amd64.whl", hash = "sha256:08a32dcd805c0ce119d6fe43b0d56cfa49ec3849fbe2f35b998b18344a6f3594", size = 90081981, upload-time = "2025-07-11T04:38:27.371Z" }, + { url = "https://files.pythonhosted.org/packages/88/4a/1f5346f610c55e63c296fedea9cf3a7283ba057ac19f18b3b201038c2598/cupy_cuda12x-13.5.1-cp312-cp312-manylinux2014_aarch64.whl", hash = "sha256:d841701470e7c3da63c751d1bdf5eca0cae3ff4f485923f419e21912fc8b25b1", size = 118630886, upload-time = "2025-07-11T04:38:32.735Z" }, + { url = "https://files.pythonhosted.org/packages/3a/01/f04662dccce0f40060b9fd2fe35eb8a42666312332c01cfe7fbae97f8e81/cupy_cuda12x-13.5.1-cp312-cp312-manylinux2014_x86_64.whl", hash = "sha256:09cfccd917d9ce96c7c457b80172f939c92ad1dfc923b9135c86b519c77e81a6", size = 113069415, upload-time = "2025-07-11T04:38:38.212Z" }, + { url = "https://files.pythonhosted.org/packages/82/1b/107b485a0d4caed85b2792fc8353b1708789216b6d22b15c0ee8d22142b1/cupy_cuda12x-13.5.1-cp312-cp312-win_amd64.whl", hash = "sha256:8e71d51782dc071118909872e069724479cdb0286e93a7b4ddf2acd21c892dd3", size = 89981695, upload-time = "2025-07-11T04:38:42.907Z" }, + { url = "https://files.pythonhosted.org/packages/99/96/d3d2f5473f55ebba17ec4bdf2c6e4e41ca231688ef8a531a952e8a471b35/cupy_cuda12x-13.5.1-cp313-cp313-manylinux2014_aarch64.whl", hash = "sha256:717f6f0886db432fdc7a1f5784e79d7de53bb89c0832bccd4653cd8dac82b273", size = 118204570, upload-time = "2025-07-11T04:38:47.78Z" }, + { url = "https://files.pythonhosted.org/packages/1e/7e/1e8dac49804a4b79b04f0e6966b417d570abf745d14c3e5b7a4c1cc047da/cupy_cuda12x-13.5.1-cp313-cp313-manylinux2014_x86_64.whl", hash = "sha256:a826d38cf2af66e182daaa8abf530f6c5523a297c7162d0fb6346a72005ed028", size = 112842113, upload-time = "2025-07-11T04:38:53.373Z" }, + { url = "https://files.pythonhosted.org/packages/ce/e6/0b2351cfb1ec731febceecb1196646951e0fca65a85bfd44fe2c1a4542f5/cupy_cuda12x-13.5.1-cp313-cp313-win_amd64.whl", hash = "sha256:c7ec943fc89450b2cca573990bf2f44d68476f44b2d20720aa0b421b245381a6", size = 89946916, upload-time = "2025-07-11T04:39:06.022Z" }, +] + +[[package]] +name = "debugpy" +version = "1.8.15" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/8c/8b/3a9a28ddb750a76eaec445c7f4d3147ea2c579a97dbd9e25d39001b92b21/debugpy-1.8.15.tar.gz", hash = "sha256:58d7a20b7773ab5ee6bdfb2e6cf622fdf1e40c9d5aef2857d85391526719ac00", size = 1643279, upload-time = "2025-07-15T16:43:29.135Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d2/b3/1c44a2ed311199ab11c2299c9474a6c7cd80d19278defd333aeb7c287995/debugpy-1.8.15-cp311-cp311-macosx_14_0_universal2.whl", hash = "sha256:babc4fb1962dd6a37e94d611280e3d0d11a1f5e6c72ac9b3d87a08212c4b6dd3", size = 2183442, upload-time = "2025-07-15T16:43:36.733Z" }, + { url = "https://files.pythonhosted.org/packages/f6/69/e2dcb721491e1c294d348681227c9b44fb95218f379aa88e12a19d85528d/debugpy-1.8.15-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f778e68f2986a58479d0ac4f643e0b8c82fdd97c2e200d4d61e7c2d13838eb53", size = 3134215, upload-time = "2025-07-15T16:43:38.116Z" }, + { url = "https://files.pythonhosted.org/packages/17/76/4ce63b95d8294dcf2fd1820860b300a420d077df4e93afcaa25a984c2ca7/debugpy-1.8.15-cp311-cp311-win32.whl", hash = "sha256:f9d1b5abd75cd965e2deabb1a06b0e93a1546f31f9f621d2705e78104377c702", size = 5154037, upload-time = "2025-07-15T16:43:39.471Z" }, + { url = "https://files.pythonhosted.org/packages/c2/a7/e5a7c784465eb9c976d84408873d597dc7ce74a0fc69ed009548a1a94813/debugpy-1.8.15-cp311-cp311-win_amd64.whl", hash = "sha256:62954fb904bec463e2b5a415777f6d1926c97febb08ef1694da0e5d1463c5c3b", size = 5178133, upload-time = "2025-07-15T16:43:40.969Z" }, + { url = "https://files.pythonhosted.org/packages/ab/4a/4508d256e52897f5cdfee6a6d7580974811e911c6d01321df3264508a5ac/debugpy-1.8.15-cp312-cp312-macosx_14_0_universal2.whl", hash = "sha256:3dcc7225cb317469721ab5136cda9ff9c8b6e6fb43e87c9e15d5b108b99d01ba", size = 2511197, upload-time = "2025-07-15T16:43:42.343Z" }, + { url = "https://files.pythonhosted.org/packages/99/8d/7f6ef1097e7fecf26b4ef72338d08e41644a41b7ee958a19f494ffcffc29/debugpy-1.8.15-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:047a493ca93c85ccede1dbbaf4e66816794bdc214213dde41a9a61e42d27f8fc", size = 4229517, upload-time = "2025-07-15T16:43:44.14Z" }, + { url = "https://files.pythonhosted.org/packages/3f/e8/e8c6a9aa33a9c9c6dacbf31747384f6ed2adde4de2e9693c766bdf323aa3/debugpy-1.8.15-cp312-cp312-win32.whl", hash = "sha256:b08e9b0bc260cf324c890626961dad4ffd973f7568fbf57feb3c3a65ab6b6327", size = 5276132, upload-time = "2025-07-15T16:43:45.529Z" }, + { url = "https://files.pythonhosted.org/packages/e9/ad/231050c6177b3476b85fcea01e565dac83607b5233d003ff067e2ee44d8f/debugpy-1.8.15-cp312-cp312-win_amd64.whl", hash = "sha256:e2a4fe357c92334272eb2845fcfcdbec3ef9f22c16cf613c388ac0887aed15fa", size = 5317645, upload-time = "2025-07-15T16:43:46.968Z" }, + { url = "https://files.pythonhosted.org/packages/28/70/2928aad2310726d5920b18ed9f54b9f06df5aa4c10cf9b45fa18ff0ab7e8/debugpy-1.8.15-cp313-cp313-macosx_14_0_universal2.whl", hash = "sha256:f5e01291ad7d6649aed5773256c5bba7a1a556196300232de1474c3c372592bf", size = 2495538, upload-time = "2025-07-15T16:43:48.927Z" }, + { url = "https://files.pythonhosted.org/packages/9e/c6/9b8ffb4ca91fac8b2877eef63c9cc0e87dd2570b1120054c272815ec4cd0/debugpy-1.8.15-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94dc0f0d00e528d915e0ce1c78e771475b2335b376c49afcc7382ee0b146bab6", size = 4221874, upload-time = "2025-07-15T16:43:50.282Z" }, + { url = "https://files.pythonhosted.org/packages/55/8a/9b8d59674b4bf489318c7c46a1aab58e606e583651438084b7e029bf3c43/debugpy-1.8.15-cp313-cp313-win32.whl", hash = "sha256:fcf0748d4f6e25f89dc5e013d1129ca6f26ad4da405e0723a4f704583896a709", size = 5275949, upload-time = "2025-07-15T16:43:52.079Z" }, + { url = "https://files.pythonhosted.org/packages/72/83/9e58e6fdfa8710a5e6ec06c2401241b9ad48b71c0a7eb99570a1f1edb1d3/debugpy-1.8.15-cp313-cp313-win_amd64.whl", hash = "sha256:73c943776cb83e36baf95e8f7f8da765896fd94b05991e7bc162456d25500683", size = 5317720, upload-time = "2025-07-15T16:43:53.703Z" }, + { url = "https://files.pythonhosted.org/packages/07/d5/98748d9860e767a1248b5e31ffa7ce8cb7006e97bf8abbf3d891d0a8ba4e/debugpy-1.8.15-py2.py3-none-any.whl", hash = "sha256:bce2e6c5ff4f2e00b98d45e7e01a49c7b489ff6df5f12d881c67d2f1ac635f3d", size = 5282697, upload-time = "2025-07-15T16:44:07.996Z" }, +] + +[[package]] +name = "decorator" +version = "5.2.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/43/fa/6d96a0978d19e17b68d634497769987b16c8f4cd0a7a05048bec693caa6b/decorator-5.2.1.tar.gz", hash = "sha256:65f266143752f734b0a7cc83c46f4618af75b8c5911b00ccb61d0ac9b6da0360", size = 56711, upload-time = "2025-02-24T04:41:34.073Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4e/8c/f3147f5c4b73e7550fe5f9352eaa956ae838d5c51eb58e7a25b9f3e2643b/decorator-5.2.1-py3-none-any.whl", hash = "sha256:d316bb415a2d9e2d2b3abcc4084c6502fc09240e292cd76a76afc106a1c8e04a", size = 9190, upload-time = "2025-02-24T04:41:32.565Z" }, +] + +[[package]] +name = "docker" +version = "7.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pywin32", marker = "sys_platform == 'win32'" }, + { name = "requests" }, + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/91/9b/4a2ea29aeba62471211598dac5d96825bb49348fa07e906ea930394a83ce/docker-7.1.0.tar.gz", hash = "sha256:ad8c70e6e3f8926cb8a92619b832b4ea5299e2831c14284663184e200546fa6c", size = 117834, upload-time = "2024-05-23T11:13:57.216Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e3/26/57c6fb270950d476074c087527a558ccb6f4436657314bfb6cdf484114c4/docker-7.1.0-py3-none-any.whl", hash = "sha256:c96b93b7f0a746f9e77d325bcfb87422a3d8bd4f03136ae8a85b37f1898d5fc0", size = 147774, upload-time = "2024-05-23T11:13:55.01Z" }, +] + +[[package]] +name = "docutils" +version = "0.21.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ae/ed/aefcc8cd0ba62a0560c3c18c33925362d46c6075480bfa4df87b28e169a9/docutils-0.21.2.tar.gz", hash = "sha256:3a6b18732edf182daa3cd12775bbb338cf5691468f91eeeb109deff6ebfa986f", size = 2204444, upload-time = "2024-04-23T18:57:18.24Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8f/d7/9322c609343d929e75e7e5e6255e614fcc67572cfd083959cdef3b7aad79/docutils-0.21.2-py3-none-any.whl", hash = "sha256:dafca5b9e384f0e419294eb4d2ff9fa826435bf15f15b7bd45723e8ad76811b2", size = 587408, upload-time = "2024-04-23T18:57:14.835Z" }, +] + +[[package]] +name = "donfig" +version = "0.8.1.post1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pyyaml" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/25/71/80cc718ff6d7abfbabacb1f57aaa42e9c1552bfdd01e64ddd704e4a03638/donfig-0.8.1.post1.tar.gz", hash = "sha256:3bef3413a4c1c601b585e8d297256d0c1470ea012afa6e8461dc28bfb7c23f52", size = 19506, upload-time = "2024-05-23T14:14:31.513Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0c/d5/c5db1ea3394c6e1732fb3286b3bd878b59507a8f77d32a2cebda7d7b7cd4/donfig-0.8.1.post1-py3-none-any.whl", hash = "sha256:2a3175ce74a06109ff9307d90a230f81215cbac9a751f4d1c6194644b8204f9d", size = 21592, upload-time = "2024-05-23T14:13:55.283Z" }, +] + +[[package]] +name = "execnet" +version = "2.1.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/bb/ff/b4c0dc78fbe20c3e59c0c7334de0c27eb4001a2b2017999af398bf730817/execnet-2.1.1.tar.gz", hash = "sha256:5189b52c6121c24feae288166ab41b32549c7e2348652736540b9e6e7d4e72e3", size = 166524, upload-time = "2024-04-08T09:04:19.245Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/43/09/2aea36ff60d16dd8879bdb2f5b3ee0ba8d08cbbdcdfe870e695ce3784385/execnet-2.1.1-py3-none-any.whl", hash = "sha256:26dee51f1b80cebd6d0ca8e74dd8745419761d3bef34163928cbebbdc4749fdc", size = 40612, upload-time = "2024-04-08T09:04:17.414Z" }, +] + +[[package]] +name = "executing" +version = "2.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/91/50/a9d80c47ff289c611ff12e63f7c5d13942c65d68125160cefd768c73e6e4/executing-2.2.0.tar.gz", hash = "sha256:5d108c028108fe2551d1a7b2e8b713341e2cb4fc0aa7dcf966fa4327a5226755", size = 978693, upload-time = "2025-01-22T15:41:29.403Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7b/8f/c4d9bafc34ad7ad5d8dc16dd1347ee0e507a52c3adb6bfa8887e1c6a26ba/executing-2.2.0-py2.py3-none-any.whl", hash = "sha256:11387150cad388d62750327a53d3339fad4888b39a6fe233c3afbb54ecffd3aa", size = 26702, upload-time = "2025-01-22T15:41:25.929Z" }, +] + +[[package]] +name = "fastrlock" +version = "0.8.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/73/b1/1c3d635d955f2b4bf34d45abf8f35492e04dbd7804e94ce65d9f928ef3ec/fastrlock-0.8.3.tar.gz", hash = "sha256:4af6734d92eaa3ab4373e6c9a1dd0d5ad1304e172b1521733c6c3b3d73c8fa5d", size = 79327, upload-time = "2024-12-17T11:03:39.638Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/90/9e/647951c579ef74b6541493d5ca786d21a0b2d330c9514ba2c39f0b0b0046/fastrlock-0.8.3-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:f68c551cf8a34b6460a3a0eba44bd7897ebfc820854e19970c52a76bf064a59f", size = 55233, upload-time = "2024-12-17T11:02:04.795Z" }, + { url = "https://files.pythonhosted.org/packages/be/91/5f3afba7d14b8b7d60ac651375f50fff9220d6ccc3bef233d2bd74b73ec7/fastrlock-0.8.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:55d42f6286b9d867370af4c27bc70d04ce2d342fe450c4a4fcce14440514e695", size = 48911, upload-time = "2024-12-17T11:02:06.173Z" }, + { url = "https://files.pythonhosted.org/packages/d5/7a/e37bd72d7d70a8a551b3b4610d028bd73ff5d6253201d5d3cf6296468bee/fastrlock-0.8.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:bbc3bf96dcbd68392366c477f78c9d5c47e5d9290cb115feea19f20a43ef6d05", size = 50357, upload-time = "2024-12-17T11:02:07.418Z" }, + { url = "https://files.pythonhosted.org/packages/0d/ef/a13b8bab8266840bf38831d7bf5970518c02603d00a548a678763322d5bf/fastrlock-0.8.3-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:77ab8a98417a1f467dafcd2226718f7ca0cf18d4b64732f838b8c2b3e4b55cb5", size = 50222, upload-time = "2024-12-17T11:02:08.745Z" }, + { url = "https://files.pythonhosted.org/packages/01/e2/5e5515562b2e9a56d84659377176aef7345da2c3c22909a1897fe27e14dd/fastrlock-0.8.3-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:04bb5eef8f460d13b8c0084ea5a9d3aab2c0573991c880c0a34a56bb14951d30", size = 54553, upload-time = "2024-12-17T11:02:10.925Z" }, + { url = "https://files.pythonhosted.org/packages/c0/8f/65907405a8cdb2fc8beaf7d09a9a07bb58deff478ff391ca95be4f130b70/fastrlock-0.8.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:8c9d459ce344c21ff03268212a1845aa37feab634d242131bc16c2a2355d5f65", size = 53362, upload-time = "2024-12-17T11:02:12.476Z" }, + { url = "https://files.pythonhosted.org/packages/ec/b9/ae6511e52738ba4e3a6adb7c6a20158573fbc98aab448992ece25abb0b07/fastrlock-0.8.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:33e6fa4af4f3af3e9c747ec72d1eadc0b7ba2035456c2afb51c24d9e8a56f8fd", size = 52836, upload-time = "2024-12-17T11:02:13.74Z" }, + { url = "https://files.pythonhosted.org/packages/88/3e/c26f8192c93e8e43b426787cec04bb46ac36e72b1033b7fe5a9267155fdf/fastrlock-0.8.3-cp311-cp311-win_amd64.whl", hash = "sha256:5e5f1665d8e70f4c5b4a67f2db202f354abc80a321ce5a26ac1493f055e3ae2c", size = 31046, upload-time = "2024-12-17T11:02:15.033Z" }, + { url = "https://files.pythonhosted.org/packages/00/df/56270f2e10c1428855c990e7a7e5baafa9e1262b8e789200bd1d047eb501/fastrlock-0.8.3-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:8cb2cf04352ea8575d496f31b3b88c42c7976e8e58cdd7d1550dfba80ca039da", size = 55727, upload-time = "2024-12-17T11:02:17.26Z" }, + { url = "https://files.pythonhosted.org/packages/57/21/ea1511b0ef0d5457efca3bf1823effb9c5cad4fc9dca86ce08e4d65330ce/fastrlock-0.8.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:85a49a1f1e020097d087e1963e42cea6f307897d5ebe2cb6daf4af47ffdd3eed", size = 52201, upload-time = "2024-12-17T11:02:19.512Z" }, + { url = "https://files.pythonhosted.org/packages/80/07/cdecb7aa976f34328372f1c4efd6c9dc1b039b3cc8d3f38787d640009a25/fastrlock-0.8.3-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5f13ec08f1adb1aa916c384b05ecb7dbebb8df9ea81abd045f60941c6283a670", size = 53924, upload-time = "2024-12-17T11:02:20.85Z" }, + { url = "https://files.pythonhosted.org/packages/88/6d/59c497f8db9a125066dd3a7442fab6aecbe90d6fec344c54645eaf311666/fastrlock-0.8.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0ea4e53a04980d646def0f5e4b5e8bd8c7884288464acab0b37ca0c65c482bfe", size = 52140, upload-time = "2024-12-17T11:02:22.263Z" }, + { url = "https://files.pythonhosted.org/packages/62/04/9138943c2ee803d62a48a3c17b69de2f6fa27677a6896c300369e839a550/fastrlock-0.8.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:38340f6635bd4ee2a4fb02a3a725759fe921f2ca846cb9ca44531ba739cc17b4", size = 53261, upload-time = "2024-12-17T11:02:24.418Z" }, + { url = "https://files.pythonhosted.org/packages/e2/4b/db35a52589764c7745a613b6943bbd018f128d42177ab92ee7dde88444f6/fastrlock-0.8.3-cp312-cp312-win_amd64.whl", hash = "sha256:da06d43e1625e2ffddd303edcd6d2cd068e1c486f5fd0102b3f079c44eb13e2c", size = 31235, upload-time = "2024-12-17T11:02:25.708Z" }, + { url = "https://files.pythonhosted.org/packages/92/74/7b13d836c3f221cff69d6f418f46c2a30c4b1fe09a8ce7db02eecb593185/fastrlock-0.8.3-cp313-cp313-macosx_11_0_universal2.whl", hash = "sha256:5264088185ca8e6bc83181dff521eee94d078c269c7d557cc8d9ed5952b7be45", size = 54157, upload-time = "2024-12-17T11:02:29.196Z" }, + { url = "https://files.pythonhosted.org/packages/06/77/f06a907f9a07d26d0cca24a4385944cfe70d549a2c9f1c3e3217332f4f12/fastrlock-0.8.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4a98ba46b3e14927550c4baa36b752d0d2f7387b8534864a8767f83cce75c160", size = 50954, upload-time = "2024-12-17T11:02:32.12Z" }, + { url = "https://files.pythonhosted.org/packages/f9/4e/94480fb3fd93991dd6f4e658b77698edc343f57caa2870d77b38c89c2e3b/fastrlock-0.8.3-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:dbdea6deeccea1917c6017d353987231c4e46c93d5338ca3e66d6cd88fbce259", size = 52535, upload-time = "2024-12-17T11:02:33.402Z" }, + { url = "https://files.pythonhosted.org/packages/7d/a7/ee82bb55b6c0ca30286dac1e19ee9417a17d2d1de3b13bb0f20cefb86086/fastrlock-0.8.3-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:c6e5bfecbc0d72ff07e43fed81671747914d6794e0926700677ed26d894d4f4f", size = 50942, upload-time = "2024-12-17T11:02:34.688Z" }, + { url = "https://files.pythonhosted.org/packages/63/1d/d4b7782ef59e57dd9dde69468cc245adafc3674281905e42fa98aac30a79/fastrlock-0.8.3-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:2a83d558470c520ed21462d304e77a12639859b205759221c8144dd2896b958a", size = 52044, upload-time = "2024-12-17T11:02:36.613Z" }, + { url = "https://files.pythonhosted.org/packages/28/a3/2ad0a0a69662fd4cf556ab8074f0de978ee9b56bff6ddb4e656df4aa9e8e/fastrlock-0.8.3-cp313-cp313-win_amd64.whl", hash = "sha256:8d1d6a28291b4ace2a66bd7b49a9ed9c762467617febdd9ab356b867ed901af8", size = 30472, upload-time = "2024-12-17T11:02:37.983Z" }, +] + +[[package]] +name = "flask" +version = "3.1.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "blinker" }, + { name = "click" }, + { name = "itsdangerous" }, + { name = "jinja2" }, + { name = "markupsafe" }, + { name = "werkzeug" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c0/de/e47735752347f4128bcf354e0da07ef311a78244eba9e3dc1d4a5ab21a98/flask-3.1.1.tar.gz", hash = "sha256:284c7b8f2f58cb737f0cf1c30fd7eaf0ccfcde196099d24ecede3fc2005aa59e", size = 753440, upload-time = "2025-05-13T15:01:17.447Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3d/68/9d4508e893976286d2ead7f8f571314af6c2037af34853a30fd769c02e9d/flask-3.1.1-py3-none-any.whl", hash = "sha256:07aae2bb5eaf77993ef57e357491839f5fd9f4dc281593a81a9e4d79a24f295c", size = 103305, upload-time = "2025-05-13T15:01:15.591Z" }, +] + +[[package]] +name = "flask-cors" +version = "6.0.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "flask" }, + { name = "werkzeug" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/76/37/bcfa6c7d5eec777c4c7cf45ce6b27631cebe5230caf88d85eadd63edd37a/flask_cors-6.0.1.tar.gz", hash = "sha256:d81bcb31f07b0985be7f48406247e9243aced229b7747219160a0559edd678db", size = 13463, upload-time = "2025-06-11T01:32:08.518Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/17/f8/01bf35a3afd734345528f98d0353f2a978a476528ad4d7e78b70c4d149dd/flask_cors-6.0.1-py3-none-any.whl", hash = "sha256:c7b2cbfb1a31aa0d2e5341eea03a6805349f7a61647daee1a15c46bbe981494c", size = 13244, upload-time = "2025-06-11T01:32:07.352Z" }, +] + +[[package]] +name = "frozenlist" +version = "1.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/79/b1/b64018016eeb087db503b038296fd782586432b9c077fc5c7839e9cb6ef6/frozenlist-1.7.0.tar.gz", hash = "sha256:2e310d81923c2437ea8670467121cc3e9b0f76d3043cc1d2331d56c7fb7a3a8f", size = 45078, upload-time = "2025-06-09T23:02:35.538Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/34/7e/803dde33760128acd393a27eb002f2020ddb8d99d30a44bfbaab31c5f08a/frozenlist-1.7.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:aa51e147a66b2d74de1e6e2cf5921890de6b0f4820b257465101d7f37b49fb5a", size = 82251, upload-time = "2025-06-09T23:00:16.279Z" }, + { url = "https://files.pythonhosted.org/packages/75/a9/9c2c5760b6ba45eae11334db454c189d43d34a4c0b489feb2175e5e64277/frozenlist-1.7.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:9b35db7ce1cd71d36ba24f80f0c9e7cff73a28d7a74e91fe83e23d27c7828750", size = 48183, upload-time = "2025-06-09T23:00:17.698Z" }, + { url = "https://files.pythonhosted.org/packages/47/be/4038e2d869f8a2da165f35a6befb9158c259819be22eeaf9c9a8f6a87771/frozenlist-1.7.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:34a69a85e34ff37791e94542065c8416c1afbf820b68f720452f636d5fb990cd", size = 47107, upload-time = "2025-06-09T23:00:18.952Z" }, + { url = "https://files.pythonhosted.org/packages/79/26/85314b8a83187c76a37183ceed886381a5f992975786f883472fcb6dc5f2/frozenlist-1.7.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4a646531fa8d82c87fe4bb2e596f23173caec9185bfbca5d583b4ccfb95183e2", size = 237333, upload-time = "2025-06-09T23:00:20.275Z" }, + { url = "https://files.pythonhosted.org/packages/1f/fd/e5b64f7d2c92a41639ffb2ad44a6a82f347787abc0c7df5f49057cf11770/frozenlist-1.7.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:79b2ffbba483f4ed36a0f236ccb85fbb16e670c9238313709638167670ba235f", size = 231724, upload-time = "2025-06-09T23:00:21.705Z" }, + { url = "https://files.pythonhosted.org/packages/20/fb/03395c0a43a5976af4bf7534759d214405fbbb4c114683f434dfdd3128ef/frozenlist-1.7.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a26f205c9ca5829cbf82bb2a84b5c36f7184c4316617d7ef1b271a56720d6b30", size = 245842, upload-time = "2025-06-09T23:00:23.148Z" }, + { url = "https://files.pythonhosted.org/packages/d0/15/c01c8e1dffdac5d9803507d824f27aed2ba76b6ed0026fab4d9866e82f1f/frozenlist-1.7.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bcacfad3185a623fa11ea0e0634aac7b691aa925d50a440f39b458e41c561d98", size = 239767, upload-time = "2025-06-09T23:00:25.103Z" }, + { url = "https://files.pythonhosted.org/packages/14/99/3f4c6fe882c1f5514b6848aa0a69b20cb5e5d8e8f51a339d48c0e9305ed0/frozenlist-1.7.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:72c1b0fe8fe451b34f12dce46445ddf14bd2a5bcad7e324987194dc8e3a74c86", size = 224130, upload-time = "2025-06-09T23:00:27.061Z" }, + { url = "https://files.pythonhosted.org/packages/4d/83/220a374bd7b2aeba9d0725130665afe11de347d95c3620b9b82cc2fcab97/frozenlist-1.7.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:61d1a5baeaac6c0798ff6edfaeaa00e0e412d49946c53fae8d4b8e8b3566c4ae", size = 235301, upload-time = "2025-06-09T23:00:29.02Z" }, + { url = "https://files.pythonhosted.org/packages/03/3c/3e3390d75334a063181625343e8daab61b77e1b8214802cc4e8a1bb678fc/frozenlist-1.7.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:7edf5c043c062462f09b6820de9854bf28cc6cc5b6714b383149745e287181a8", size = 234606, upload-time = "2025-06-09T23:00:30.514Z" }, + { url = "https://files.pythonhosted.org/packages/23/1e/58232c19608b7a549d72d9903005e2d82488f12554a32de2d5fb59b9b1ba/frozenlist-1.7.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:d50ac7627b3a1bd2dcef6f9da89a772694ec04d9a61b66cf87f7d9446b4a0c31", size = 248372, upload-time = "2025-06-09T23:00:31.966Z" }, + { url = "https://files.pythonhosted.org/packages/c0/a4/e4a567e01702a88a74ce8a324691e62a629bf47d4f8607f24bf1c7216e7f/frozenlist-1.7.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:ce48b2fece5aeb45265bb7a58259f45027db0abff478e3077e12b05b17fb9da7", size = 229860, upload-time = "2025-06-09T23:00:33.375Z" }, + { url = "https://files.pythonhosted.org/packages/73/a6/63b3374f7d22268b41a9db73d68a8233afa30ed164c46107b33c4d18ecdd/frozenlist-1.7.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:fe2365ae915a1fafd982c146754e1de6ab3478def8a59c86e1f7242d794f97d5", size = 245893, upload-time = "2025-06-09T23:00:35.002Z" }, + { url = "https://files.pythonhosted.org/packages/6d/eb/d18b3f6e64799a79673c4ba0b45e4cfbe49c240edfd03a68be20002eaeaa/frozenlist-1.7.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:45a6f2fdbd10e074e8814eb98b05292f27bad7d1883afbe009d96abdcf3bc898", size = 246323, upload-time = "2025-06-09T23:00:36.468Z" }, + { url = "https://files.pythonhosted.org/packages/5a/f5/720f3812e3d06cd89a1d5db9ff6450088b8f5c449dae8ffb2971a44da506/frozenlist-1.7.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:21884e23cffabb157a9dd7e353779077bf5b8f9a58e9b262c6caad2ef5f80a56", size = 233149, upload-time = "2025-06-09T23:00:37.963Z" }, + { url = "https://files.pythonhosted.org/packages/69/68/03efbf545e217d5db8446acfd4c447c15b7c8cf4dbd4a58403111df9322d/frozenlist-1.7.0-cp311-cp311-win32.whl", hash = "sha256:284d233a8953d7b24f9159b8a3496fc1ddc00f4db99c324bd5fb5f22d8698ea7", size = 39565, upload-time = "2025-06-09T23:00:39.753Z" }, + { url = "https://files.pythonhosted.org/packages/58/17/fe61124c5c333ae87f09bb67186d65038834a47d974fc10a5fadb4cc5ae1/frozenlist-1.7.0-cp311-cp311-win_amd64.whl", hash = "sha256:387cbfdcde2f2353f19c2f66bbb52406d06ed77519ac7ee21be0232147c2592d", size = 44019, upload-time = "2025-06-09T23:00:40.988Z" }, + { url = "https://files.pythonhosted.org/packages/ef/a2/c8131383f1e66adad5f6ecfcce383d584ca94055a34d683bbb24ac5f2f1c/frozenlist-1.7.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:3dbf9952c4bb0e90e98aec1bd992b3318685005702656bc6f67c1a32b76787f2", size = 81424, upload-time = "2025-06-09T23:00:42.24Z" }, + { url = "https://files.pythonhosted.org/packages/4c/9d/02754159955088cb52567337d1113f945b9e444c4960771ea90eb73de8db/frozenlist-1.7.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:1f5906d3359300b8a9bb194239491122e6cf1444c2efb88865426f170c262cdb", size = 47952, upload-time = "2025-06-09T23:00:43.481Z" }, + { url = "https://files.pythonhosted.org/packages/01/7a/0046ef1bd6699b40acd2067ed6d6670b4db2f425c56980fa21c982c2a9db/frozenlist-1.7.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3dabd5a8f84573c8d10d8859a50ea2dec01eea372031929871368c09fa103478", size = 46688, upload-time = "2025-06-09T23:00:44.793Z" }, + { url = "https://files.pythonhosted.org/packages/d6/a2/a910bafe29c86997363fb4c02069df4ff0b5bc39d33c5198b4e9dd42d8f8/frozenlist-1.7.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aa57daa5917f1738064f302bf2626281a1cb01920c32f711fbc7bc36111058a8", size = 243084, upload-time = "2025-06-09T23:00:46.125Z" }, + { url = "https://files.pythonhosted.org/packages/64/3e/5036af9d5031374c64c387469bfcc3af537fc0f5b1187d83a1cf6fab1639/frozenlist-1.7.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:c193dda2b6d49f4c4398962810fa7d7c78f032bf45572b3e04dd5249dff27e08", size = 233524, upload-time = "2025-06-09T23:00:47.73Z" }, + { url = "https://files.pythonhosted.org/packages/06/39/6a17b7c107a2887e781a48ecf20ad20f1c39d94b2a548c83615b5b879f28/frozenlist-1.7.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bfe2b675cf0aaa6d61bf8fbffd3c274b3c9b7b1623beb3809df8a81399a4a9c4", size = 248493, upload-time = "2025-06-09T23:00:49.742Z" }, + { url = "https://files.pythonhosted.org/packages/be/00/711d1337c7327d88c44d91dd0f556a1c47fb99afc060ae0ef66b4d24793d/frozenlist-1.7.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8fc5d5cda37f62b262405cf9652cf0856839c4be8ee41be0afe8858f17f4c94b", size = 244116, upload-time = "2025-06-09T23:00:51.352Z" }, + { url = "https://files.pythonhosted.org/packages/24/fe/74e6ec0639c115df13d5850e75722750adabdc7de24e37e05a40527ca539/frozenlist-1.7.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b0d5ce521d1dd7d620198829b87ea002956e4319002ef0bc8d3e6d045cb4646e", size = 224557, upload-time = "2025-06-09T23:00:52.855Z" }, + { url = "https://files.pythonhosted.org/packages/8d/db/48421f62a6f77c553575201e89048e97198046b793f4a089c79a6e3268bd/frozenlist-1.7.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:488d0a7d6a0008ca0db273c542098a0fa9e7dfaa7e57f70acef43f32b3f69dca", size = 241820, upload-time = "2025-06-09T23:00:54.43Z" }, + { url = "https://files.pythonhosted.org/packages/1d/fa/cb4a76bea23047c8462976ea7b7a2bf53997a0ca171302deae9d6dd12096/frozenlist-1.7.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:15a7eaba63983d22c54d255b854e8108e7e5f3e89f647fc854bd77a237e767df", size = 236542, upload-time = "2025-06-09T23:00:56.409Z" }, + { url = "https://files.pythonhosted.org/packages/5d/32/476a4b5cfaa0ec94d3f808f193301debff2ea42288a099afe60757ef6282/frozenlist-1.7.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:1eaa7e9c6d15df825bf255649e05bd8a74b04a4d2baa1ae46d9c2d00b2ca2cb5", size = 249350, upload-time = "2025-06-09T23:00:58.468Z" }, + { url = "https://files.pythonhosted.org/packages/8d/ba/9a28042f84a6bf8ea5dbc81cfff8eaef18d78b2a1ad9d51c7bc5b029ad16/frozenlist-1.7.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:e4389e06714cfa9d47ab87f784a7c5be91d3934cd6e9a7b85beef808297cc025", size = 225093, upload-time = "2025-06-09T23:01:00.015Z" }, + { url = "https://files.pythonhosted.org/packages/bc/29/3a32959e68f9cf000b04e79ba574527c17e8842e38c91d68214a37455786/frozenlist-1.7.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:73bd45e1488c40b63fe5a7df892baf9e2a4d4bb6409a2b3b78ac1c6236178e01", size = 245482, upload-time = "2025-06-09T23:01:01.474Z" }, + { url = "https://files.pythonhosted.org/packages/80/e8/edf2f9e00da553f07f5fa165325cfc302dead715cab6ac8336a5f3d0adc2/frozenlist-1.7.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:99886d98e1643269760e5fe0df31e5ae7050788dd288947f7f007209b8c33f08", size = 249590, upload-time = "2025-06-09T23:01:02.961Z" }, + { url = "https://files.pythonhosted.org/packages/1c/80/9a0eb48b944050f94cc51ee1c413eb14a39543cc4f760ed12657a5a3c45a/frozenlist-1.7.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:290a172aae5a4c278c6da8a96222e6337744cd9c77313efe33d5670b9f65fc43", size = 237785, upload-time = "2025-06-09T23:01:05.095Z" }, + { url = "https://files.pythonhosted.org/packages/f3/74/87601e0fb0369b7a2baf404ea921769c53b7ae00dee7dcfe5162c8c6dbf0/frozenlist-1.7.0-cp312-cp312-win32.whl", hash = "sha256:426c7bc70e07cfebc178bc4c2bf2d861d720c4fff172181eeb4a4c41d4ca2ad3", size = 39487, upload-time = "2025-06-09T23:01:06.54Z" }, + { url = "https://files.pythonhosted.org/packages/0b/15/c026e9a9fc17585a9d461f65d8593d281fedf55fbf7eb53f16c6df2392f9/frozenlist-1.7.0-cp312-cp312-win_amd64.whl", hash = "sha256:563b72efe5da92e02eb68c59cb37205457c977aa7a449ed1b37e6939e5c47c6a", size = 43874, upload-time = "2025-06-09T23:01:07.752Z" }, + { url = "https://files.pythonhosted.org/packages/24/90/6b2cebdabdbd50367273c20ff6b57a3dfa89bd0762de02c3a1eb42cb6462/frozenlist-1.7.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ee80eeda5e2a4e660651370ebffd1286542b67e268aa1ac8d6dbe973120ef7ee", size = 79791, upload-time = "2025-06-09T23:01:09.368Z" }, + { url = "https://files.pythonhosted.org/packages/83/2e/5b70b6a3325363293fe5fc3ae74cdcbc3e996c2a11dde2fd9f1fb0776d19/frozenlist-1.7.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:d1a81c85417b914139e3a9b995d4a1c84559afc839a93cf2cb7f15e6e5f6ed2d", size = 47165, upload-time = "2025-06-09T23:01:10.653Z" }, + { url = "https://files.pythonhosted.org/packages/f4/25/a0895c99270ca6966110f4ad98e87e5662eab416a17e7fd53c364bf8b954/frozenlist-1.7.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:cbb65198a9132ebc334f237d7b0df163e4de83fb4f2bdfe46c1e654bdb0c5d43", size = 45881, upload-time = "2025-06-09T23:01:12.296Z" }, + { url = "https://files.pythonhosted.org/packages/19/7c/71bb0bbe0832793c601fff68cd0cf6143753d0c667f9aec93d3c323f4b55/frozenlist-1.7.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dab46c723eeb2c255a64f9dc05b8dd601fde66d6b19cdb82b2e09cc6ff8d8b5d", size = 232409, upload-time = "2025-06-09T23:01:13.641Z" }, + { url = "https://files.pythonhosted.org/packages/c0/45/ed2798718910fe6eb3ba574082aaceff4528e6323f9a8570be0f7028d8e9/frozenlist-1.7.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:6aeac207a759d0dedd2e40745575ae32ab30926ff4fa49b1635def65806fddee", size = 225132, upload-time = "2025-06-09T23:01:15.264Z" }, + { url = "https://files.pythonhosted.org/packages/ba/e2/8417ae0f8eacb1d071d4950f32f229aa6bf68ab69aab797b72a07ea68d4f/frozenlist-1.7.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bd8c4e58ad14b4fa7802b8be49d47993182fdd4023393899632c88fd8cd994eb", size = 237638, upload-time = "2025-06-09T23:01:16.752Z" }, + { url = "https://files.pythonhosted.org/packages/f8/b7/2ace5450ce85f2af05a871b8c8719b341294775a0a6c5585d5e6170f2ce7/frozenlist-1.7.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:04fb24d104f425da3540ed83cbfc31388a586a7696142004c577fa61c6298c3f", size = 233539, upload-time = "2025-06-09T23:01:18.202Z" }, + { url = "https://files.pythonhosted.org/packages/46/b9/6989292c5539553dba63f3c83dc4598186ab2888f67c0dc1d917e6887db6/frozenlist-1.7.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6a5c505156368e4ea6b53b5ac23c92d7edc864537ff911d2fb24c140bb175e60", size = 215646, upload-time = "2025-06-09T23:01:19.649Z" }, + { url = "https://files.pythonhosted.org/packages/72/31/bc8c5c99c7818293458fe745dab4fd5730ff49697ccc82b554eb69f16a24/frozenlist-1.7.0-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8bd7eb96a675f18aa5c553eb7ddc24a43c8c18f22e1f9925528128c052cdbe00", size = 232233, upload-time = "2025-06-09T23:01:21.175Z" }, + { url = "https://files.pythonhosted.org/packages/59/52/460db4d7ba0811b9ccb85af996019f5d70831f2f5f255f7cc61f86199795/frozenlist-1.7.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:05579bf020096fe05a764f1f84cd104a12f78eaab68842d036772dc6d4870b4b", size = 227996, upload-time = "2025-06-09T23:01:23.098Z" }, + { url = "https://files.pythonhosted.org/packages/ba/c9/f4b39e904c03927b7ecf891804fd3b4df3db29b9e487c6418e37988d6e9d/frozenlist-1.7.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:376b6222d114e97eeec13d46c486facd41d4f43bab626b7c3f6a8b4e81a5192c", size = 242280, upload-time = "2025-06-09T23:01:24.808Z" }, + { url = "https://files.pythonhosted.org/packages/b8/33/3f8d6ced42f162d743e3517781566b8481322be321b486d9d262adf70bfb/frozenlist-1.7.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:0aa7e176ebe115379b5b1c95b4096fb1c17cce0847402e227e712c27bdb5a949", size = 217717, upload-time = "2025-06-09T23:01:26.28Z" }, + { url = "https://files.pythonhosted.org/packages/3e/e8/ad683e75da6ccef50d0ab0c2b2324b32f84fc88ceee778ed79b8e2d2fe2e/frozenlist-1.7.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:3fbba20e662b9c2130dc771e332a99eff5da078b2b2648153a40669a6d0e36ca", size = 236644, upload-time = "2025-06-09T23:01:27.887Z" }, + { url = "https://files.pythonhosted.org/packages/b2/14/8d19ccdd3799310722195a72ac94ddc677541fb4bef4091d8e7775752360/frozenlist-1.7.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:f3f4410a0a601d349dd406b5713fec59b4cee7e71678d5b17edda7f4655a940b", size = 238879, upload-time = "2025-06-09T23:01:29.524Z" }, + { url = "https://files.pythonhosted.org/packages/ce/13/c12bf657494c2fd1079a48b2db49fa4196325909249a52d8f09bc9123fd7/frozenlist-1.7.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e2cdfaaec6a2f9327bf43c933c0319a7c429058e8537c508964a133dffee412e", size = 232502, upload-time = "2025-06-09T23:01:31.287Z" }, + { url = "https://files.pythonhosted.org/packages/d7/8b/e7f9dfde869825489382bc0d512c15e96d3964180c9499efcec72e85db7e/frozenlist-1.7.0-cp313-cp313-win32.whl", hash = "sha256:5fc4df05a6591c7768459caba1b342d9ec23fa16195e744939ba5914596ae3e1", size = 39169, upload-time = "2025-06-09T23:01:35.503Z" }, + { url = "https://files.pythonhosted.org/packages/35/89/a487a98d94205d85745080a37860ff5744b9820a2c9acbcdd9440bfddf98/frozenlist-1.7.0-cp313-cp313-win_amd64.whl", hash = "sha256:52109052b9791a3e6b5d1b65f4b909703984b770694d3eb64fad124c835d7cba", size = 43219, upload-time = "2025-06-09T23:01:36.784Z" }, + { url = "https://files.pythonhosted.org/packages/56/d5/5c4cf2319a49eddd9dd7145e66c4866bdc6f3dbc67ca3d59685149c11e0d/frozenlist-1.7.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:a6f86e4193bb0e235ef6ce3dde5cbabed887e0b11f516ce8a0f4d3b33078ec2d", size = 84345, upload-time = "2025-06-09T23:01:38.295Z" }, + { url = "https://files.pythonhosted.org/packages/a4/7d/ec2c1e1dc16b85bc9d526009961953df9cec8481b6886debb36ec9107799/frozenlist-1.7.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:82d664628865abeb32d90ae497fb93df398a69bb3434463d172b80fc25b0dd7d", size = 48880, upload-time = "2025-06-09T23:01:39.887Z" }, + { url = "https://files.pythonhosted.org/packages/69/86/f9596807b03de126e11e7d42ac91e3d0b19a6599c714a1989a4e85eeefc4/frozenlist-1.7.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:912a7e8375a1c9a68325a902f3953191b7b292aa3c3fb0d71a216221deca460b", size = 48498, upload-time = "2025-06-09T23:01:41.318Z" }, + { url = "https://files.pythonhosted.org/packages/5e/cb/df6de220f5036001005f2d726b789b2c0b65f2363b104bbc16f5be8084f8/frozenlist-1.7.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9537c2777167488d539bc5de2ad262efc44388230e5118868e172dd4a552b146", size = 292296, upload-time = "2025-06-09T23:01:42.685Z" }, + { url = "https://files.pythonhosted.org/packages/83/1f/de84c642f17c8f851a2905cee2dae401e5e0daca9b5ef121e120e19aa825/frozenlist-1.7.0-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:f34560fb1b4c3e30ba35fa9a13894ba39e5acfc5f60f57d8accde65f46cc5e74", size = 273103, upload-time = "2025-06-09T23:01:44.166Z" }, + { url = "https://files.pythonhosted.org/packages/88/3c/c840bfa474ba3fa13c772b93070893c6e9d5c0350885760376cbe3b6c1b3/frozenlist-1.7.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:acd03d224b0175f5a850edc104ac19040d35419eddad04e7cf2d5986d98427f1", size = 292869, upload-time = "2025-06-09T23:01:45.681Z" }, + { url = "https://files.pythonhosted.org/packages/a6/1c/3efa6e7d5a39a1d5ef0abeb51c48fb657765794a46cf124e5aca2c7a592c/frozenlist-1.7.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f2038310bc582f3d6a09b3816ab01737d60bf7b1ec70f5356b09e84fb7408ab1", size = 291467, upload-time = "2025-06-09T23:01:47.234Z" }, + { url = "https://files.pythonhosted.org/packages/4f/00/d5c5e09d4922c395e2f2f6b79b9a20dab4b67daaf78ab92e7729341f61f6/frozenlist-1.7.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b8c05e4c8e5f36e5e088caa1bf78a687528f83c043706640a92cb76cd6999384", size = 266028, upload-time = "2025-06-09T23:01:48.819Z" }, + { url = "https://files.pythonhosted.org/packages/4e/27/72765be905619dfde25a7f33813ac0341eb6b076abede17a2e3fbfade0cb/frozenlist-1.7.0-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:765bb588c86e47d0b68f23c1bee323d4b703218037765dcf3f25c838c6fecceb", size = 284294, upload-time = "2025-06-09T23:01:50.394Z" }, + { url = "https://files.pythonhosted.org/packages/88/67/c94103a23001b17808eb7dd1200c156bb69fb68e63fcf0693dde4cd6228c/frozenlist-1.7.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:32dc2e08c67d86d0969714dd484fd60ff08ff81d1a1e40a77dd34a387e6ebc0c", size = 281898, upload-time = "2025-06-09T23:01:52.234Z" }, + { url = "https://files.pythonhosted.org/packages/42/34/a3e2c00c00f9e2a9db5653bca3fec306349e71aff14ae45ecc6d0951dd24/frozenlist-1.7.0-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:c0303e597eb5a5321b4de9c68e9845ac8f290d2ab3f3e2c864437d3c5a30cd65", size = 290465, upload-time = "2025-06-09T23:01:53.788Z" }, + { url = "https://files.pythonhosted.org/packages/bb/73/f89b7fbce8b0b0c095d82b008afd0590f71ccb3dee6eee41791cf8cd25fd/frozenlist-1.7.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:a47f2abb4e29b3a8d0b530f7c3598badc6b134562b1a5caee867f7c62fee51e3", size = 266385, upload-time = "2025-06-09T23:01:55.769Z" }, + { url = "https://files.pythonhosted.org/packages/cd/45/e365fdb554159462ca12df54bc59bfa7a9a273ecc21e99e72e597564d1ae/frozenlist-1.7.0-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:3d688126c242a6fabbd92e02633414d40f50bb6002fa4cf995a1d18051525657", size = 288771, upload-time = "2025-06-09T23:01:57.4Z" }, + { url = "https://files.pythonhosted.org/packages/00/11/47b6117002a0e904f004d70ec5194fe9144f117c33c851e3d51c765962d0/frozenlist-1.7.0-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:4e7e9652b3d367c7bd449a727dc79d5043f48b88d0cbfd4f9f1060cf2b414104", size = 288206, upload-time = "2025-06-09T23:01:58.936Z" }, + { url = "https://files.pythonhosted.org/packages/40/37/5f9f3c3fd7f7746082ec67bcdc204db72dad081f4f83a503d33220a92973/frozenlist-1.7.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:1a85e345b4c43db8b842cab1feb41be5cc0b10a1830e6295b69d7310f99becaf", size = 282620, upload-time = "2025-06-09T23:02:00.493Z" }, + { url = "https://files.pythonhosted.org/packages/0b/31/8fbc5af2d183bff20f21aa743b4088eac4445d2bb1cdece449ae80e4e2d1/frozenlist-1.7.0-cp313-cp313t-win32.whl", hash = "sha256:3a14027124ddb70dfcee5148979998066897e79f89f64b13328595c4bdf77c81", size = 43059, upload-time = "2025-06-09T23:02:02.072Z" }, + { url = "https://files.pythonhosted.org/packages/bb/ed/41956f52105b8dbc26e457c5705340c67c8cc2b79f394b79bffc09d0e938/frozenlist-1.7.0-cp313-cp313t-win_amd64.whl", hash = "sha256:3bf8010d71d4507775f658e9823210b7427be36625b387221642725b515dcf3e", size = 47516, upload-time = "2025-06-09T23:02:03.779Z" }, + { url = "https://files.pythonhosted.org/packages/ee/45/b82e3c16be2182bff01179db177fe144d58b5dc787a7d4492c6ed8b9317f/frozenlist-1.7.0-py3-none-any.whl", hash = "sha256:9a5af342e34f7e97caf8c995864c7a396418ae2859cc6fdf1b1073020d516a7e", size = 13106, upload-time = "2025-06-09T23:02:34.204Z" }, +] + +[[package]] +name = "fsspec" +version = "2025.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/8b/02/0835e6ab9cfc03916fe3f78c0956cfcdb6ff2669ffa6651065d5ebf7fc98/fsspec-2025.7.0.tar.gz", hash = "sha256:786120687ffa54b8283d942929540d8bc5ccfa820deb555a2b5d0ed2b737bf58", size = 304432, upload-time = "2025-07-15T16:05:21.19Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2f/e0/014d5d9d7a4564cf1c40b5039bc882db69fd881111e03ab3657ac0b218e2/fsspec-2025.7.0-py3-none-any.whl", hash = "sha256:8b012e39f63c7d5f10474de957f3ab793b47b45ae7d39f2fb735f8bbe25c0e21", size = 199597, upload-time = "2025-07-15T16:05:19.529Z" }, +] + +[[package]] +name = "graphql-core" +version = "3.2.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c4/16/7574029da84834349b60ed71614d66ca3afe46e9bf9c7b9562102acb7d4f/graphql_core-3.2.6.tar.gz", hash = "sha256:c08eec22f9e40f0bd61d805907e3b3b1b9a320bc606e23dc145eebca07c8fbab", size = 505353, upload-time = "2025-01-26T16:36:27.374Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ae/4f/7297663840621022bc73c22d7d9d80dbc78b4db6297f764b545cd5dd462d/graphql_core-3.2.6-py3-none-any.whl", hash = "sha256:78b016718c161a6fb20a7d97bbf107f331cd1afe53e45566c59f776ed7f0b45f", size = 203416, upload-time = "2025-01-26T16:36:24.868Z" }, +] + +[[package]] +name = "h11" +version = "0.16.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/01/ee/02a2c011bdab74c6fb3c75474d40b3052059d95df7e73351460c8588d963/h11-0.16.0.tar.gz", hash = "sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1", size = 101250, upload-time = "2025-04-24T03:35:25.427Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl", hash = "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86", size = 37515, upload-time = "2025-04-24T03:35:24.344Z" }, +] + +[[package]] +name = "hypothesis" +version = "6.136.8" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "attrs" }, + { name = "sortedcontainers" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e1/7c/f3393509a4868b026df3460b5536a95c597ee3ac83394dc3472bc91b60e7/hypothesis-6.136.8.tar.gz", hash = "sha256:3c784eb48350f67b2aaee2af6d9d94cbae47ee00cf5e209bf778603c621652f1", size = 459283, upload-time = "2025-08-04T01:47:26.947Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ee/f5/ddd57ee3856d8d66cd2871895721c0bb12b3a6d67bca1552df6bc94a5be6/hypothesis-6.136.8-py3-none-any.whl", hash = "sha256:4fbb93248d630d05dab06c79b18af4c67726c2286ed9249d78c7ffebd013bb9f", size = 526122, upload-time = "2025-08-04T01:47:23.4Z" }, +] + +[[package]] +name = "idna" +version = "3.10" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f1/70/7703c29685631f5a7590aa73f1f1d3fa9a380e654b86af429e0934a32f7d/idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9", size = 190490, upload-time = "2024-09-15T18:07:39.745Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3", size = 70442, upload-time = "2024-09-15T18:07:37.964Z" }, +] + +[[package]] +name = "imagesize" +version = "1.4.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a7/84/62473fb57d61e31fef6e36d64a179c8781605429fd927b5dd608c997be31/imagesize-1.4.1.tar.gz", hash = "sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a", size = 1280026, upload-time = "2022-07-01T12:21:05.687Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ff/62/85c4c919272577931d407be5ba5d71c20f0b616d31a0befe0ae45bb79abd/imagesize-1.4.1-py2.py3-none-any.whl", hash = "sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b", size = 8769, upload-time = "2022-07-01T12:21:02.467Z" }, +] + +[[package]] +name = "iniconfig" +version = "2.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f2/97/ebf4da567aa6827c909642694d71c9fcf53e5b504f2d96afea02718862f3/iniconfig-2.1.0.tar.gz", hash = "sha256:3abbd2e30b36733fee78f9c7f7308f2d0050e88f0087fd25c2645f63c773e1c7", size = 4793, upload-time = "2025-03-19T20:09:59.721Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2c/e1/e6716421ea10d38022b952c159d5161ca1193197fb744506875fbb87ea7b/iniconfig-2.1.0-py3-none-any.whl", hash = "sha256:9deba5723312380e77435581c6bf4935c94cbfab9b1ed33ef8d238ea168eb760", size = 6050, upload-time = "2025-03-19T20:10:01.071Z" }, +] + +[[package]] +name = "ipykernel" +version = "6.30.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "appnope", marker = "sys_platform == 'darwin'" }, + { name = "comm" }, + { name = "debugpy" }, + { name = "ipython" }, + { name = "jupyter-client" }, + { name = "jupyter-core" }, + { name = "matplotlib-inline" }, + { name = "nest-asyncio" }, + { name = "packaging" }, + { name = "psutil" }, + { name = "pyzmq" }, + { name = "tornado" }, + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/38/27/9e6e30ed92f2ac53d29f70b09da8b2dc456e256148e289678fa0e825f46a/ipykernel-6.30.0.tar.gz", hash = "sha256:b7b808ddb2d261aae2df3a26ff3ff810046e6de3dfbc6f7de8c98ea0a6cb632c", size = 165125, upload-time = "2025-07-21T10:36:09.259Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1f/3d/00813c3d9b46e3dcd88bd4530e0a3c63c0509e5d8c9eff34723ea243ab04/ipykernel-6.30.0-py3-none-any.whl", hash = "sha256:fd2936e55c4a1c2ee8b1e5fa6a372b8eecc0ab1338750dee76f48fa5cca1301e", size = 117264, upload-time = "2025-07-21T10:36:06.854Z" }, +] + +[[package]] +name = "ipython" +version = "9.4.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "decorator" }, + { name = "ipython-pygments-lexers" }, + { name = "jedi" }, + { name = "matplotlib-inline" }, + { name = "pexpect", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "prompt-toolkit" }, + { name = "pygments" }, + { name = "stack-data" }, + { name = "traitlets" }, + { name = "typing-extensions", marker = "python_full_version < '3.12'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/54/80/406f9e3bde1c1fd9bf5a0be9d090f8ae623e401b7670d8f6fdf2ab679891/ipython-9.4.0.tar.gz", hash = "sha256:c033c6d4e7914c3d9768aabe76bbe87ba1dc66a92a05db6bfa1125d81f2ee270", size = 4385338, upload-time = "2025-07-01T11:11:30.606Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/63/f8/0031ee2b906a15a33d6bfc12dd09c3dfa966b3cb5b284ecfb7549e6ac3c4/ipython-9.4.0-py3-none-any.whl", hash = "sha256:25850f025a446d9b359e8d296ba175a36aedd32e83ca9b5060430fe16801f066", size = 611021, upload-time = "2025-07-01T11:11:27.85Z" }, +] + +[[package]] +name = "ipython-pygments-lexers" +version = "1.1.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pygments" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ef/4c/5dd1d8af08107f88c7f741ead7a40854b8ac24ddf9ae850afbcf698aa552/ipython_pygments_lexers-1.1.1.tar.gz", hash = "sha256:09c0138009e56b6854f9535736f4171d855c8c08a563a0dcd8022f78355c7e81", size = 8393, upload-time = "2025-01-17T11:24:34.505Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d9/33/1f075bf72b0b747cb3288d011319aaf64083cf2efef8354174e3ed4540e2/ipython_pygments_lexers-1.1.1-py3-none-any.whl", hash = "sha256:a9462224a505ade19a605f71f8fa63c2048833ce50abc86768a0d81d876dc81c", size = 8074, upload-time = "2025-01-17T11:24:33.271Z" }, +] + +[[package]] +name = "itsdangerous" +version = "2.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/9c/cb/8ac0172223afbccb63986cc25049b154ecfb5e85932587206f42317be31d/itsdangerous-2.2.0.tar.gz", hash = "sha256:e0050c0b7da1eea53ffaf149c0cfbb5c6e2e2b69c4bef22c81fa6eb73e5f6173", size = 54410, upload-time = "2024-04-16T21:28:15.614Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/04/96/92447566d16df59b2a776c0fb82dbc4d9e07cd95062562af01e408583fc4/itsdangerous-2.2.0-py3-none-any.whl", hash = "sha256:c6242fc49e35958c8b15141343aa660db5fc54d4f13a1db01a3f5891b98700ef", size = 16234, upload-time = "2024-04-16T21:28:14.499Z" }, +] + +[[package]] +name = "jedi" +version = "0.19.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "parso" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/72/3a/79a912fbd4d8dd6fbb02bf69afd3bb72cf0c729bb3063c6f4498603db17a/jedi-0.19.2.tar.gz", hash = "sha256:4770dc3de41bde3966b02eb84fbcf557fb33cce26ad23da12c742fb50ecb11f0", size = 1231287, upload-time = "2024-11-11T01:41:42.873Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c0/5a/9cac0c82afec3d09ccd97c8b6502d48f165f9124db81b4bcb90b4af974ee/jedi-0.19.2-py2.py3-none-any.whl", hash = "sha256:a8ef22bde8490f57fe5c7681a3c83cb58874daf72b4784de3cce5b6ef6edb5b9", size = 1572278, upload-time = "2024-11-11T01:41:40.175Z" }, +] + +[[package]] +name = "jinja2" +version = "3.1.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markupsafe" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/df/bf/f7da0350254c0ed7c72f3e33cef02e048281fec7ecec5f032d4aac52226b/jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d", size = 245115, upload-time = "2025-03-05T20:05:02.478Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67", size = 134899, upload-time = "2025-03-05T20:05:00.369Z" }, +] + +[[package]] +name = "jmespath" +version = "1.0.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/00/2a/e867e8531cf3e36b41201936b7fa7ba7b5702dbef42922193f05c8976cd6/jmespath-1.0.1.tar.gz", hash = "sha256:90261b206d6defd58fdd5e85f478bf633a2901798906be2ad389150c5c60edbe", size = 25843, upload-time = "2022-06-17T18:00:12.224Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/31/b4/b9b800c45527aadd64d5b442f9b932b00648617eb5d63d2c7a6587b7cafc/jmespath-1.0.1-py3-none-any.whl", hash = "sha256:02e2e4cc71b5bcab88332eebf907519190dd9e6e82107fa7f83b1003a6252980", size = 20256, upload-time = "2022-06-17T18:00:10.251Z" }, +] + +[[package]] +name = "joserfc" +version = "1.2.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cryptography" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/00/f2/69000edacf874ea26f331398d28b0d9f58e40f2cb24851666359abf161fb/joserfc-1.2.2.tar.gz", hash = "sha256:0d2a84feecef96168635fd9bf288363fc75b4afef3d99691f77833c8e025d200", size = 192865, upload-time = "2025-07-14T02:57:48.661Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/11/7a/95ba6c5b478dee3528007e480706b39fcf782a270949855868c07a645203/joserfc-1.2.2-py3-none-any.whl", hash = "sha256:630cc36b2f11f749980401b0cd7305fab5735ee11d830d919bc207305d011358", size = 73275, upload-time = "2025-07-14T02:57:47.538Z" }, +] + +[[package]] +name = "jsonpatch" +version = "1.33" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "jsonpointer" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/42/78/18813351fe5d63acad16aec57f94ec2b70a09e53ca98145589e185423873/jsonpatch-1.33.tar.gz", hash = "sha256:9fcd4009c41e6d12348b4a0ff2563ba56a2923a7dfee731d004e212e1ee5030c", size = 21699, upload-time = "2023-06-26T12:07:29.144Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/73/07/02e16ed01e04a374e644b575638ec7987ae846d25ad97bcc9945a3ee4b0e/jsonpatch-1.33-py2.py3-none-any.whl", hash = "sha256:0ae28c0cd062bbd8b8ecc26d7d164fbbea9652a1a3693f3b956c1eae5145dade", size = 12898, upload-time = "2023-06-16T21:01:28.466Z" }, +] + +[[package]] +name = "jsonpath-ng" +version = "1.7.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "ply" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/6d/86/08646239a313f895186ff0a4573452038eed8c86f54380b3ebac34d32fb2/jsonpath-ng-1.7.0.tar.gz", hash = "sha256:f6f5f7fd4e5ff79c785f1573b394043b39849fb2bb47bcead935d12b00beab3c", size = 37838, upload-time = "2024-10-11T15:41:42.404Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/35/5a/73ecb3d82f8615f32ccdadeb9356726d6cae3a4bbc840b437ceb95708063/jsonpath_ng-1.7.0-py3-none-any.whl", hash = "sha256:f3d7f9e848cba1b6da28c55b1c26ff915dc9e0b1ba7e752a53d6da8d5cbd00b6", size = 30105, upload-time = "2024-11-20T17:58:30.418Z" }, +] + +[[package]] +name = "jsonpointer" +version = "3.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/6a/0a/eebeb1fa92507ea94016a2a790b93c2ae41a7e18778f85471dc54475ed25/jsonpointer-3.0.0.tar.gz", hash = "sha256:2b2d729f2091522d61c3b31f82e11870f60b68f43fbc705cb76bf4b832af59ef", size = 9114, upload-time = "2024-06-10T19:24:42.462Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/71/92/5e77f98553e9e75130c78900d000368476aed74276eb8ae8796f65f00918/jsonpointer-3.0.0-py2.py3-none-any.whl", hash = "sha256:13e088adc14fca8b6aa8177c044e12701e6ad4b28ff10e65f2267a90109c9942", size = 7595, upload-time = "2024-06-10T19:24:40.698Z" }, +] + +[[package]] +name = "jsonschema" +version = "4.25.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "attrs" }, + { name = "jsonschema-specifications" }, + { name = "referencing" }, + { name = "rpds-py" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/d5/00/a297a868e9d0784450faa7365c2172a7d6110c763e30ba861867c32ae6a9/jsonschema-4.25.0.tar.gz", hash = "sha256:e63acf5c11762c0e6672ffb61482bdf57f0876684d8d249c0fe2d730d48bc55f", size = 356830, upload-time = "2025-07-18T15:39:45.11Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fe/54/c86cd8e011fe98803d7e382fd67c0df5ceab8d2b7ad8c5a81524f791551c/jsonschema-4.25.0-py3-none-any.whl", hash = "sha256:24c2e8da302de79c8b9382fee3e76b355e44d2a4364bb207159ce10b517bd716", size = 89184, upload-time = "2025-07-18T15:39:42.956Z" }, +] + +[[package]] +name = "jsonschema-path" +version = "0.3.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pathable" }, + { name = "pyyaml" }, + { name = "referencing" }, + { name = "requests" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/6e/45/41ebc679c2a4fced6a722f624c18d658dee42612b83ea24c1caf7c0eb3a8/jsonschema_path-0.3.4.tar.gz", hash = "sha256:8365356039f16cc65fddffafda5f58766e34bebab7d6d105616ab52bc4297001", size = 11159, upload-time = "2025-01-24T14:33:16.547Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cb/58/3485da8cb93d2f393bce453adeef16896751f14ba3e2024bc21dc9597646/jsonschema_path-0.3.4-py3-none-any.whl", hash = "sha256:f502191fdc2b22050f9a81c9237be9d27145b9001c55842bece5e94e382e52f8", size = 14810, upload-time = "2025-01-24T14:33:14.652Z" }, +] + +[[package]] +name = "jsonschema-specifications" +version = "2025.4.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "referencing" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/bf/ce/46fbd9c8119cfc3581ee5643ea49464d168028cfb5caff5fc0596d0cf914/jsonschema_specifications-2025.4.1.tar.gz", hash = "sha256:630159c9f4dbea161a6a2205c3011cc4f18ff381b189fff48bb39b9bf26ae608", size = 15513, upload-time = "2025-04-23T12:34:07.418Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/01/0e/b27cdbaccf30b890c40ed1da9fd4a3593a5cf94dae54fb34f8a4b74fcd3f/jsonschema_specifications-2025.4.1-py3-none-any.whl", hash = "sha256:4653bffbd6584f7de83a67e0d620ef16900b390ddc7939d56684d6c81e33f1af", size = 18437, upload-time = "2025-04-23T12:34:05.422Z" }, +] + +[[package]] +name = "jupyter-client" +version = "8.6.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "jupyter-core" }, + { name = "python-dateutil" }, + { name = "pyzmq" }, + { name = "tornado" }, + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/71/22/bf9f12fdaeae18019a468b68952a60fe6dbab5d67cd2a103cac7659b41ca/jupyter_client-8.6.3.tar.gz", hash = "sha256:35b3a0947c4a6e9d589eb97d7d4cd5e90f910ee73101611f01283732bd6d9419", size = 342019, upload-time = "2024-09-17T10:44:17.613Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/11/85/b0394e0b6fcccd2c1eeefc230978a6f8cb0c5df1e4cd3e7625735a0d7d1e/jupyter_client-8.6.3-py3-none-any.whl", hash = "sha256:e8a19cc986cc45905ac3362915f410f3af85424b4c0905e94fa5f2cb08e8f23f", size = 106105, upload-time = "2024-09-17T10:44:15.218Z" }, +] + +[[package]] +name = "jupyter-core" +version = "5.8.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "platformdirs" }, + { name = "pywin32", marker = "platform_python_implementation != 'PyPy' and sys_platform == 'win32'" }, + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/99/1b/72906d554acfeb588332eaaa6f61577705e9ec752ddb486f302dafa292d9/jupyter_core-5.8.1.tar.gz", hash = "sha256:0a5f9706f70e64786b75acba995988915ebd4601c8a52e534a40b51c95f59941", size = 88923, upload-time = "2025-05-27T07:38:16.655Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2f/57/6bffd4b20b88da3800c5d691e0337761576ee688eb01299eae865689d2df/jupyter_core-5.8.1-py3-none-any.whl", hash = "sha256:c28d268fc90fb53f1338ded2eb410704c5449a358406e8a948b75706e24863d0", size = 28880, upload-time = "2025-05-27T07:38:15.137Z" }, +] + +[[package]] +name = "lazy-object-proxy" +version = "1.11.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/57/f9/1f56571ed82fb324f293661690635cf42c41deb8a70a6c9e6edc3e9bb3c8/lazy_object_proxy-1.11.0.tar.gz", hash = "sha256:18874411864c9fbbbaa47f9fc1dd7aea754c86cfde21278ef427639d1dd78e9c", size = 44736, upload-time = "2025-04-16T16:53:48.482Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/51/f6/eb645ca1ff7408bb69e9b1fe692cce1d74394efdbb40d6207096c0cd8381/lazy_object_proxy-1.11.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:090935756cc041e191f22f4f9c7fd4fe9a454717067adf5b1bbd2ce3046b556e", size = 28047, upload-time = "2025-04-16T16:53:34.679Z" }, + { url = "https://files.pythonhosted.org/packages/13/9c/aabbe1e8b99b8b0edb846b49a517edd636355ac97364419d9ba05b8fa19f/lazy_object_proxy-1.11.0-cp311-cp311-win_amd64.whl", hash = "sha256:76ec715017f06410f57df442c1a8d66e6b5f7035077785b129817f5ae58810a4", size = 28440, upload-time = "2025-04-16T16:53:36.113Z" }, + { url = "https://files.pythonhosted.org/packages/4d/24/dae4759469e9cd318fef145f7cfac7318261b47b23a4701aa477b0c3b42c/lazy_object_proxy-1.11.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9a9f39098e93a63618a79eef2889ae3cf0605f676cd4797fdfd49fcd7ddc318b", size = 28142, upload-time = "2025-04-16T16:53:37.663Z" }, + { url = "https://files.pythonhosted.org/packages/de/0c/645a881f5f27952a02f24584d96f9f326748be06ded2cee25f8f8d1cd196/lazy_object_proxy-1.11.0-cp312-cp312-win_amd64.whl", hash = "sha256:ee13f67f4fcd044ef27bfccb1c93d39c100046fec1fad6e9a1fcdfd17492aeb3", size = 28380, upload-time = "2025-04-16T16:53:39.07Z" }, + { url = "https://files.pythonhosted.org/packages/a8/0f/6e004f928f7ff5abae2b8e1f68835a3870252f886e006267702e1efc5c7b/lazy_object_proxy-1.11.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:fd4c84eafd8dd15ea16f7d580758bc5c2ce1f752faec877bb2b1f9f827c329cd", size = 28149, upload-time = "2025-04-16T16:53:40.135Z" }, + { url = "https://files.pythonhosted.org/packages/63/cb/b8363110e32cc1fd82dc91296315f775d37a39df1c1cfa976ec1803dac89/lazy_object_proxy-1.11.0-cp313-cp313-win_amd64.whl", hash = "sha256:d2503427bda552d3aefcac92f81d9e7ca631e680a2268cbe62cd6a58de6409b7", size = 28389, upload-time = "2025-04-16T16:53:43.612Z" }, + { url = "https://files.pythonhosted.org/packages/7b/89/68c50fcfd81e11480cd8ee7f654c9bd790a9053b9a0efe9983d46106f6a9/lazy_object_proxy-1.11.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:0613116156801ab3fccb9e2b05ed83b08ea08c2517fdc6c6bc0d4697a1a376e3", size = 28777, upload-time = "2025-04-16T16:53:41.371Z" }, + { url = "https://files.pythonhosted.org/packages/39/d0/7e967689e24de8ea6368ec33295f9abc94b9f3f0cd4571bfe148dc432190/lazy_object_proxy-1.11.0-cp313-cp313t-win_amd64.whl", hash = "sha256:bb03c507d96b65f617a6337dedd604399d35face2cdf01526b913fb50c4cb6e8", size = 29598, upload-time = "2025-04-16T16:53:42.513Z" }, + { url = "https://files.pythonhosted.org/packages/e7/1e/fb441c07b6662ec1fc92b249225ba6e6e5221b05623cb0131d082f782edc/lazy_object_proxy-1.11.0-py3-none-any.whl", hash = "sha256:a56a5093d433341ff7da0e89f9b486031ccd222ec8e52ec84d0ec1cdc819674b", size = 16635, upload-time = "2025-04-16T16:53:47.198Z" }, +] + +[[package]] +name = "markdown-it-py" +version = "3.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "mdurl" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/38/71/3b932df36c1a044d397a1f92d1cf91ee0a503d91e470cbd670aa66b07ed0/markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb", size = 74596, upload-time = "2023-06-03T06:41:14.443Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/42/d7/1ec15b46af6af88f19b8e5ffea08fa375d433c998b8a7639e76935c14f1f/markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1", size = 87528, upload-time = "2023-06-03T06:41:11.019Z" }, +] + +[[package]] +name = "markupsafe" +version = "3.0.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b2/97/5d42485e71dfc078108a86d6de8fa46db44a1a9295e89c5d6d4a06e23a62/markupsafe-3.0.2.tar.gz", hash = "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0", size = 20537, upload-time = "2024-10-18T15:21:54.129Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6b/28/bbf83e3f76936960b850435576dd5e67034e200469571be53f69174a2dfd/MarkupSafe-3.0.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9025b4018f3a1314059769c7bf15441064b2207cb3f065e6ea1e7359cb46db9d", size = 14353, upload-time = "2024-10-18T15:21:02.187Z" }, + { url = "https://files.pythonhosted.org/packages/6c/30/316d194b093cde57d448a4c3209f22e3046c5bb2fb0820b118292b334be7/MarkupSafe-3.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:93335ca3812df2f366e80509ae119189886b0f3c2b81325d39efdb84a1e2ae93", size = 12392, upload-time = "2024-10-18T15:21:02.941Z" }, + { url = "https://files.pythonhosted.org/packages/f2/96/9cdafba8445d3a53cae530aaf83c38ec64c4d5427d975c974084af5bc5d2/MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2cb8438c3cbb25e220c2ab33bb226559e7afb3baec11c4f218ffa7308603c832", size = 23984, upload-time = "2024-10-18T15:21:03.953Z" }, + { url = "https://files.pythonhosted.org/packages/f1/a4/aefb044a2cd8d7334c8a47d3fb2c9f328ac48cb349468cc31c20b539305f/MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a123e330ef0853c6e822384873bef7507557d8e4a082961e1defa947aa59ba84", size = 23120, upload-time = "2024-10-18T15:21:06.495Z" }, + { url = "https://files.pythonhosted.org/packages/8d/21/5e4851379f88f3fad1de30361db501300d4f07bcad047d3cb0449fc51f8c/MarkupSafe-3.0.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e084f686b92e5b83186b07e8a17fc09e38fff551f3602b249881fec658d3eca", size = 23032, upload-time = "2024-10-18T15:21:07.295Z" }, + { url = "https://files.pythonhosted.org/packages/00/7b/e92c64e079b2d0d7ddf69899c98842f3f9a60a1ae72657c89ce2655c999d/MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d8213e09c917a951de9d09ecee036d5c7d36cb6cb7dbaece4c71a60d79fb9798", size = 24057, upload-time = "2024-10-18T15:21:08.073Z" }, + { url = "https://files.pythonhosted.org/packages/f9/ac/46f960ca323037caa0a10662ef97d0a4728e890334fc156b9f9e52bcc4ca/MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:5b02fb34468b6aaa40dfc198d813a641e3a63b98c2b05a16b9f80b7ec314185e", size = 23359, upload-time = "2024-10-18T15:21:09.318Z" }, + { url = "https://files.pythonhosted.org/packages/69/84/83439e16197337b8b14b6a5b9c2105fff81d42c2a7c5b58ac7b62ee2c3b1/MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0bff5e0ae4ef2e1ae4fdf2dfd5b76c75e5c2fa4132d05fc1b0dabcd20c7e28c4", size = 23306, upload-time = "2024-10-18T15:21:10.185Z" }, + { url = "https://files.pythonhosted.org/packages/9a/34/a15aa69f01e2181ed8d2b685c0d2f6655d5cca2c4db0ddea775e631918cd/MarkupSafe-3.0.2-cp311-cp311-win32.whl", hash = "sha256:6c89876f41da747c8d3677a2b540fb32ef5715f97b66eeb0c6b66f5e3ef6f59d", size = 15094, upload-time = "2024-10-18T15:21:11.005Z" }, + { url = "https://files.pythonhosted.org/packages/da/b8/3a3bd761922d416f3dc5d00bfbed11f66b1ab89a0c2b6e887240a30b0f6b/MarkupSafe-3.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:70a87b411535ccad5ef2f1df5136506a10775d267e197e4cf531ced10537bd6b", size = 15521, upload-time = "2024-10-18T15:21:12.911Z" }, + { url = "https://files.pythonhosted.org/packages/22/09/d1f21434c97fc42f09d290cbb6350d44eb12f09cc62c9476effdb33a18aa/MarkupSafe-3.0.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf", size = 14274, upload-time = "2024-10-18T15:21:13.777Z" }, + { url = "https://files.pythonhosted.org/packages/6b/b0/18f76bba336fa5aecf79d45dcd6c806c280ec44538b3c13671d49099fdd0/MarkupSafe-3.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225", size = 12348, upload-time = "2024-10-18T15:21:14.822Z" }, + { url = "https://files.pythonhosted.org/packages/e0/25/dd5c0f6ac1311e9b40f4af06c78efde0f3b5cbf02502f8ef9501294c425b/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028", size = 24149, upload-time = "2024-10-18T15:21:15.642Z" }, + { url = "https://files.pythonhosted.org/packages/f3/f0/89e7aadfb3749d0f52234a0c8c7867877876e0a20b60e2188e9850794c17/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8", size = 23118, upload-time = "2024-10-18T15:21:17.133Z" }, + { url = "https://files.pythonhosted.org/packages/d5/da/f2eeb64c723f5e3777bc081da884b414671982008c47dcc1873d81f625b6/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c", size = 22993, upload-time = "2024-10-18T15:21:18.064Z" }, + { url = "https://files.pythonhosted.org/packages/da/0e/1f32af846df486dce7c227fe0f2398dc7e2e51d4a370508281f3c1c5cddc/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557", size = 24178, upload-time = "2024-10-18T15:21:18.859Z" }, + { url = "https://files.pythonhosted.org/packages/c4/f6/bb3ca0532de8086cbff5f06d137064c8410d10779c4c127e0e47d17c0b71/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22", size = 23319, upload-time = "2024-10-18T15:21:19.671Z" }, + { url = "https://files.pythonhosted.org/packages/a2/82/8be4c96ffee03c5b4a034e60a31294daf481e12c7c43ab8e34a1453ee48b/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48", size = 23352, upload-time = "2024-10-18T15:21:20.971Z" }, + { url = "https://files.pythonhosted.org/packages/51/ae/97827349d3fcffee7e184bdf7f41cd6b88d9919c80f0263ba7acd1bbcb18/MarkupSafe-3.0.2-cp312-cp312-win32.whl", hash = "sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30", size = 15097, upload-time = "2024-10-18T15:21:22.646Z" }, + { url = "https://files.pythonhosted.org/packages/c1/80/a61f99dc3a936413c3ee4e1eecac96c0da5ed07ad56fd975f1a9da5bc630/MarkupSafe-3.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87", size = 15601, upload-time = "2024-10-18T15:21:23.499Z" }, + { url = "https://files.pythonhosted.org/packages/83/0e/67eb10a7ecc77a0c2bbe2b0235765b98d164d81600746914bebada795e97/MarkupSafe-3.0.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd", size = 14274, upload-time = "2024-10-18T15:21:24.577Z" }, + { url = "https://files.pythonhosted.org/packages/2b/6d/9409f3684d3335375d04e5f05744dfe7e9f120062c9857df4ab490a1031a/MarkupSafe-3.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430", size = 12352, upload-time = "2024-10-18T15:21:25.382Z" }, + { url = "https://files.pythonhosted.org/packages/d2/f5/6eadfcd3885ea85fe2a7c128315cc1bb7241e1987443d78c8fe712d03091/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094", size = 24122, upload-time = "2024-10-18T15:21:26.199Z" }, + { url = "https://files.pythonhosted.org/packages/0c/91/96cf928db8236f1bfab6ce15ad070dfdd02ed88261c2afafd4b43575e9e9/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396", size = 23085, upload-time = "2024-10-18T15:21:27.029Z" }, + { url = "https://files.pythonhosted.org/packages/c2/cf/c9d56af24d56ea04daae7ac0940232d31d5a8354f2b457c6d856b2057d69/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79", size = 22978, upload-time = "2024-10-18T15:21:27.846Z" }, + { url = "https://files.pythonhosted.org/packages/2a/9f/8619835cd6a711d6272d62abb78c033bda638fdc54c4e7f4272cf1c0962b/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a", size = 24208, upload-time = "2024-10-18T15:21:28.744Z" }, + { url = "https://files.pythonhosted.org/packages/f9/bf/176950a1792b2cd2102b8ffeb5133e1ed984547b75db47c25a67d3359f77/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca", size = 23357, upload-time = "2024-10-18T15:21:29.545Z" }, + { url = "https://files.pythonhosted.org/packages/ce/4f/9a02c1d335caabe5c4efb90e1b6e8ee944aa245c1aaaab8e8a618987d816/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c", size = 23344, upload-time = "2024-10-18T15:21:30.366Z" }, + { url = "https://files.pythonhosted.org/packages/ee/55/c271b57db36f748f0e04a759ace9f8f759ccf22b4960c270c78a394f58be/MarkupSafe-3.0.2-cp313-cp313-win32.whl", hash = "sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1", size = 15101, upload-time = "2024-10-18T15:21:31.207Z" }, + { url = "https://files.pythonhosted.org/packages/29/88/07df22d2dd4df40aba9f3e402e6dc1b8ee86297dddbad4872bd5e7b0094f/MarkupSafe-3.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f", size = 15603, upload-time = "2024-10-18T15:21:32.032Z" }, + { url = "https://files.pythonhosted.org/packages/62/6a/8b89d24db2d32d433dffcd6a8779159da109842434f1dd2f6e71f32f738c/MarkupSafe-3.0.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c", size = 14510, upload-time = "2024-10-18T15:21:33.625Z" }, + { url = "https://files.pythonhosted.org/packages/7a/06/a10f955f70a2e5a9bf78d11a161029d278eeacbd35ef806c3fd17b13060d/MarkupSafe-3.0.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb", size = 12486, upload-time = "2024-10-18T15:21:34.611Z" }, + { url = "https://files.pythonhosted.org/packages/34/cf/65d4a571869a1a9078198ca28f39fba5fbb910f952f9dbc5220afff9f5e6/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c", size = 25480, upload-time = "2024-10-18T15:21:35.398Z" }, + { url = "https://files.pythonhosted.org/packages/0c/e3/90e9651924c430b885468b56b3d597cabf6d72be4b24a0acd1fa0e12af67/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d", size = 23914, upload-time = "2024-10-18T15:21:36.231Z" }, + { url = "https://files.pythonhosted.org/packages/66/8c/6c7cf61f95d63bb866db39085150df1f2a5bd3335298f14a66b48e92659c/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe", size = 23796, upload-time = "2024-10-18T15:21:37.073Z" }, + { url = "https://files.pythonhosted.org/packages/bb/35/cbe9238ec3f47ac9a7c8b3df7a808e7cb50fe149dc7039f5f454b3fba218/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5", size = 25473, upload-time = "2024-10-18T15:21:37.932Z" }, + { url = "https://files.pythonhosted.org/packages/e6/32/7621a4382488aa283cc05e8984a9c219abad3bca087be9ec77e89939ded9/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a", size = 24114, upload-time = "2024-10-18T15:21:39.799Z" }, + { url = "https://files.pythonhosted.org/packages/0d/80/0985960e4b89922cb5a0bac0ed39c5b96cbc1a536a99f30e8c220a996ed9/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9", size = 24098, upload-time = "2024-10-18T15:21:40.813Z" }, + { url = "https://files.pythonhosted.org/packages/82/78/fedb03c7d5380df2427038ec8d973587e90561b2d90cd472ce9254cf348b/MarkupSafe-3.0.2-cp313-cp313t-win32.whl", hash = "sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6", size = 15208, upload-time = "2024-10-18T15:21:41.814Z" }, + { url = "https://files.pythonhosted.org/packages/4f/65/6079a46068dfceaeabb5dcad6d674f5f5c61a6fa5673746f42a9f4c233b3/MarkupSafe-3.0.2-cp313-cp313t-win_amd64.whl", hash = "sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f", size = 15739, upload-time = "2024-10-18T15:21:42.784Z" }, +] + +[[package]] +name = "matplotlib-inline" +version = "0.1.7" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/99/5b/a36a337438a14116b16480db471ad061c36c3694df7c2084a0da7ba538b7/matplotlib_inline-0.1.7.tar.gz", hash = "sha256:8423b23ec666be3d16e16b60bdd8ac4e86e840ebd1dd11a30b9f117f2fa0ab90", size = 8159, upload-time = "2024-04-15T13:44:44.803Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8f/8e/9ad090d3553c280a8060fbf6e24dc1c0c29704ee7d1c372f0c174aa59285/matplotlib_inline-0.1.7-py3-none-any.whl", hash = "sha256:df192d39a4ff8f21b1895d72e6a13f5fcc5099f00fa84384e0ea28c2cc0653ca", size = 9899, upload-time = "2024-04-15T13:44:43.265Z" }, +] + +[[package]] +name = "mdurl" +version = "0.1.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d6/54/cfe61301667036ec958cb99bd3efefba235e65cdeb9c84d24a8293ba1d90/mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba", size = 8729, upload-time = "2022-08-14T12:40:10.846Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979, upload-time = "2022-08-14T12:40:09.779Z" }, +] + +[[package]] +name = "moto" +version = "5.1.9" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "boto3" }, + { name = "botocore" }, + { name = "cryptography" }, + { name = "jinja2" }, + { name = "python-dateutil" }, + { name = "requests" }, + { name = "responses" }, + { name = "werkzeug" }, + { name = "xmltodict" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/33/62/767e0f65066489b50580a25182025fec19825cbed499ae2044da1e779ed6/moto-5.1.9.tar.gz", hash = "sha256:0c4f0387b06b5d24c0ce90f8f89f31a565cc05789189c5d59b5df02594f2e371", size = 7041662, upload-time = "2025-07-28T19:24:48.773Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4e/0b/fd37926e3fd597df879d7c360f1641850023d30b1d67ba6686f4e33ab1fb/moto-5.1.9-py3-none-any.whl", hash = "sha256:e9ba7e4764a6088ccc34e3cc846ae719861ca202409fa865573de40a3e805b9b", size = 5216109, upload-time = "2025-07-28T19:24:45.997Z" }, +] + +[package.optional-dependencies] +s3 = [ + { name = "py-partiql-parser" }, + { name = "pyyaml" }, +] +server = [ + { name = "antlr4-python3-runtime" }, + { name = "aws-xray-sdk" }, + { name = "cfn-lint" }, + { name = "docker" }, + { name = "flask" }, + { name = "flask-cors" }, + { name = "graphql-core" }, + { name = "joserfc" }, + { name = "jsonpath-ng" }, + { name = "openapi-spec-validator" }, + { name = "py-partiql-parser" }, + { name = "pyparsing" }, + { name = "pyyaml" }, + { name = "setuptools" }, +] + +[[package]] +name = "mpmath" +version = "1.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e0/47/dd32fa426cc72114383ac549964eecb20ecfd886d1e5ccf5340b55b02f57/mpmath-1.3.0.tar.gz", hash = "sha256:7a28eb2a9774d00c7bc92411c19a89209d5da7c4c9a9e227be8330a23a25b91f", size = 508106, upload-time = "2023-03-07T16:47:11.061Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl", hash = "sha256:a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c", size = 536198, upload-time = "2023-03-07T16:47:09.197Z" }, +] + +[[package]] +name = "msgpack" +version = "1.1.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/45/b1/ea4f68038a18c77c9467400d166d74c4ffa536f34761f7983a104357e614/msgpack-1.1.1.tar.gz", hash = "sha256:77b79ce34a2bdab2594f490c8e80dd62a02d650b91a75159a63ec413b8d104cd", size = 173555, upload-time = "2025-06-13T06:52:51.324Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7f/83/97f24bf9848af23fe2ba04380388216defc49a8af6da0c28cc636d722502/msgpack-1.1.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:71ef05c1726884e44f8b1d1773604ab5d4d17729d8491403a705e649116c9558", size = 82728, upload-time = "2025-06-13T06:51:50.68Z" }, + { url = "https://files.pythonhosted.org/packages/aa/7f/2eaa388267a78401f6e182662b08a588ef4f3de6f0eab1ec09736a7aaa2b/msgpack-1.1.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:36043272c6aede309d29d56851f8841ba907a1a3d04435e43e8a19928e243c1d", size = 79279, upload-time = "2025-06-13T06:51:51.72Z" }, + { url = "https://files.pythonhosted.org/packages/f8/46/31eb60f4452c96161e4dfd26dbca562b4ec68c72e4ad07d9566d7ea35e8a/msgpack-1.1.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a32747b1b39c3ac27d0670122b57e6e57f28eefb725e0b625618d1b59bf9d1e0", size = 423859, upload-time = "2025-06-13T06:51:52.749Z" }, + { url = "https://files.pythonhosted.org/packages/45/16/a20fa8c32825cc7ae8457fab45670c7a8996d7746ce80ce41cc51e3b2bd7/msgpack-1.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8a8b10fdb84a43e50d38057b06901ec9da52baac6983d3f709d8507f3889d43f", size = 429975, upload-time = "2025-06-13T06:51:53.97Z" }, + { url = "https://files.pythonhosted.org/packages/86/ea/6c958e07692367feeb1a1594d35e22b62f7f476f3c568b002a5ea09d443d/msgpack-1.1.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ba0c325c3f485dc54ec298d8b024e134acf07c10d494ffa24373bea729acf704", size = 413528, upload-time = "2025-06-13T06:51:55.507Z" }, + { url = "https://files.pythonhosted.org/packages/75/05/ac84063c5dae79722bda9f68b878dc31fc3059adb8633c79f1e82c2cd946/msgpack-1.1.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:88daaf7d146e48ec71212ce21109b66e06a98e5e44dca47d853cbfe171d6c8d2", size = 413338, upload-time = "2025-06-13T06:51:57.023Z" }, + { url = "https://files.pythonhosted.org/packages/69/e8/fe86b082c781d3e1c09ca0f4dacd457ede60a13119b6ce939efe2ea77b76/msgpack-1.1.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:d8b55ea20dc59b181d3f47103f113e6f28a5e1c89fd5b67b9140edb442ab67f2", size = 422658, upload-time = "2025-06-13T06:51:58.419Z" }, + { url = "https://files.pythonhosted.org/packages/3b/2b/bafc9924df52d8f3bb7c00d24e57be477f4d0f967c0a31ef5e2225e035c7/msgpack-1.1.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4a28e8072ae9779f20427af07f53bbb8b4aa81151054e882aee333b158da8752", size = 427124, upload-time = "2025-06-13T06:51:59.969Z" }, + { url = "https://files.pythonhosted.org/packages/a2/3b/1f717e17e53e0ed0b68fa59e9188f3f610c79d7151f0e52ff3cd8eb6b2dc/msgpack-1.1.1-cp311-cp311-win32.whl", hash = "sha256:7da8831f9a0fdb526621ba09a281fadc58ea12701bc709e7b8cbc362feabc295", size = 65016, upload-time = "2025-06-13T06:52:01.294Z" }, + { url = "https://files.pythonhosted.org/packages/48/45/9d1780768d3b249accecc5a38c725eb1e203d44a191f7b7ff1941f7df60c/msgpack-1.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:5fd1b58e1431008a57247d6e7cc4faa41c3607e8e7d4aaf81f7c29ea013cb458", size = 72267, upload-time = "2025-06-13T06:52:02.568Z" }, + { url = "https://files.pythonhosted.org/packages/e3/26/389b9c593eda2b8551b2e7126ad3a06af6f9b44274eb3a4f054d48ff7e47/msgpack-1.1.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:ae497b11f4c21558d95de9f64fff7053544f4d1a17731c866143ed6bb4591238", size = 82359, upload-time = "2025-06-13T06:52:03.909Z" }, + { url = "https://files.pythonhosted.org/packages/ab/65/7d1de38c8a22cf8b1551469159d4b6cf49be2126adc2482de50976084d78/msgpack-1.1.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:33be9ab121df9b6b461ff91baac6f2731f83d9b27ed948c5b9d1978ae28bf157", size = 79172, upload-time = "2025-06-13T06:52:05.246Z" }, + { url = "https://files.pythonhosted.org/packages/0f/bd/cacf208b64d9577a62c74b677e1ada005caa9b69a05a599889d6fc2ab20a/msgpack-1.1.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6f64ae8fe7ffba251fecb8408540c34ee9df1c26674c50c4544d72dbf792e5ce", size = 425013, upload-time = "2025-06-13T06:52:06.341Z" }, + { url = "https://files.pythonhosted.org/packages/4d/ec/fd869e2567cc9c01278a736cfd1697941ba0d4b81a43e0aa2e8d71dab208/msgpack-1.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a494554874691720ba5891c9b0b39474ba43ffb1aaf32a5dac874effb1619e1a", size = 426905, upload-time = "2025-06-13T06:52:07.501Z" }, + { url = "https://files.pythonhosted.org/packages/55/2a/35860f33229075bce803a5593d046d8b489d7ba2fc85701e714fc1aaf898/msgpack-1.1.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cb643284ab0ed26f6957d969fe0dd8bb17beb567beb8998140b5e38a90974f6c", size = 407336, upload-time = "2025-06-13T06:52:09.047Z" }, + { url = "https://files.pythonhosted.org/packages/8c/16/69ed8f3ada150bf92745fb4921bd621fd2cdf5a42e25eb50bcc57a5328f0/msgpack-1.1.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d275a9e3c81b1093c060c3837e580c37f47c51eca031f7b5fb76f7b8470f5f9b", size = 409485, upload-time = "2025-06-13T06:52:10.382Z" }, + { url = "https://files.pythonhosted.org/packages/c6/b6/0c398039e4c6d0b2e37c61d7e0e9d13439f91f780686deb8ee64ecf1ae71/msgpack-1.1.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:4fd6b577e4541676e0cc9ddc1709d25014d3ad9a66caa19962c4f5de30fc09ef", size = 412182, upload-time = "2025-06-13T06:52:11.644Z" }, + { url = "https://files.pythonhosted.org/packages/b8/d0/0cf4a6ecb9bc960d624c93effaeaae75cbf00b3bc4a54f35c8507273cda1/msgpack-1.1.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:bb29aaa613c0a1c40d1af111abf025f1732cab333f96f285d6a93b934738a68a", size = 419883, upload-time = "2025-06-13T06:52:12.806Z" }, + { url = "https://files.pythonhosted.org/packages/62/83/9697c211720fa71a2dfb632cad6196a8af3abea56eece220fde4674dc44b/msgpack-1.1.1-cp312-cp312-win32.whl", hash = "sha256:870b9a626280c86cff9c576ec0d9cbcc54a1e5ebda9cd26dab12baf41fee218c", size = 65406, upload-time = "2025-06-13T06:52:14.271Z" }, + { url = "https://files.pythonhosted.org/packages/c0/23/0abb886e80eab08f5e8c485d6f13924028602829f63b8f5fa25a06636628/msgpack-1.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:5692095123007180dca3e788bb4c399cc26626da51629a31d40207cb262e67f4", size = 72558, upload-time = "2025-06-13T06:52:15.252Z" }, + { url = "https://files.pythonhosted.org/packages/a1/38/561f01cf3577430b59b340b51329803d3a5bf6a45864a55f4ef308ac11e3/msgpack-1.1.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:3765afa6bd4832fc11c3749be4ba4b69a0e8d7b728f78e68120a157a4c5d41f0", size = 81677, upload-time = "2025-06-13T06:52:16.64Z" }, + { url = "https://files.pythonhosted.org/packages/09/48/54a89579ea36b6ae0ee001cba8c61f776451fad3c9306cd80f5b5c55be87/msgpack-1.1.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:8ddb2bcfd1a8b9e431c8d6f4f7db0773084e107730ecf3472f1dfe9ad583f3d9", size = 78603, upload-time = "2025-06-13T06:52:17.843Z" }, + { url = "https://files.pythonhosted.org/packages/a0/60/daba2699b308e95ae792cdc2ef092a38eb5ee422f9d2fbd4101526d8a210/msgpack-1.1.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:196a736f0526a03653d829d7d4c5500a97eea3648aebfd4b6743875f28aa2af8", size = 420504, upload-time = "2025-06-13T06:52:18.982Z" }, + { url = "https://files.pythonhosted.org/packages/20/22/2ebae7ae43cd8f2debc35c631172ddf14e2a87ffcc04cf43ff9df9fff0d3/msgpack-1.1.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d592d06e3cc2f537ceeeb23d38799c6ad83255289bb84c2e5792e5a8dea268a", size = 423749, upload-time = "2025-06-13T06:52:20.211Z" }, + { url = "https://files.pythonhosted.org/packages/40/1b/54c08dd5452427e1179a40b4b607e37e2664bca1c790c60c442c8e972e47/msgpack-1.1.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4df2311b0ce24f06ba253fda361f938dfecd7b961576f9be3f3fbd60e87130ac", size = 404458, upload-time = "2025-06-13T06:52:21.429Z" }, + { url = "https://files.pythonhosted.org/packages/2e/60/6bb17e9ffb080616a51f09928fdd5cac1353c9becc6c4a8abd4e57269a16/msgpack-1.1.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e4141c5a32b5e37905b5940aacbc59739f036930367d7acce7a64e4dec1f5e0b", size = 405976, upload-time = "2025-06-13T06:52:22.995Z" }, + { url = "https://files.pythonhosted.org/packages/ee/97/88983e266572e8707c1f4b99c8fd04f9eb97b43f2db40e3172d87d8642db/msgpack-1.1.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:b1ce7f41670c5a69e1389420436f41385b1aa2504c3b0c30620764b15dded2e7", size = 408607, upload-time = "2025-06-13T06:52:24.152Z" }, + { url = "https://files.pythonhosted.org/packages/bc/66/36c78af2efaffcc15a5a61ae0df53a1d025f2680122e2a9eb8442fed3ae4/msgpack-1.1.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4147151acabb9caed4e474c3344181e91ff7a388b888f1e19ea04f7e73dc7ad5", size = 424172, upload-time = "2025-06-13T06:52:25.704Z" }, + { url = "https://files.pythonhosted.org/packages/8c/87/a75eb622b555708fe0427fab96056d39d4c9892b0c784b3a721088c7ee37/msgpack-1.1.1-cp313-cp313-win32.whl", hash = "sha256:500e85823a27d6d9bba1d057c871b4210c1dd6fb01fbb764e37e4e8847376323", size = 65347, upload-time = "2025-06-13T06:52:26.846Z" }, + { url = "https://files.pythonhosted.org/packages/ca/91/7dc28d5e2a11a5ad804cf2b7f7a5fcb1eb5a4966d66a5d2b41aee6376543/msgpack-1.1.1-cp313-cp313-win_amd64.whl", hash = "sha256:6d489fba546295983abd142812bda76b57e33d0b9f5d5b71c09a583285506f69", size = 72341, upload-time = "2025-06-13T06:52:27.835Z" }, +] + +[[package]] +name = "multidict" +version = "6.6.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/3d/2c/5dad12e82fbdf7470f29bff2171484bf07cb3b16ada60a6589af8f376440/multidict-6.6.3.tar.gz", hash = "sha256:798a9eb12dab0a6c2e29c1de6f3468af5cb2da6053a20dfa3344907eed0937cc", size = 101006, upload-time = "2025-06-30T15:53:46.929Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/08/f0/1a39863ced51f639c81a5463fbfa9eb4df59c20d1a8769ab9ef4ca57ae04/multidict-6.6.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:18f4eba0cbac3546b8ae31e0bbc55b02c801ae3cbaf80c247fcdd89b456ff58c", size = 76445, upload-time = "2025-06-30T15:51:24.01Z" }, + { url = "https://files.pythonhosted.org/packages/c9/0e/a7cfa451c7b0365cd844e90b41e21fab32edaa1e42fc0c9f68461ce44ed7/multidict-6.6.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ef43b5dd842382329e4797c46f10748d8c2b6e0614f46b4afe4aee9ac33159df", size = 44610, upload-time = "2025-06-30T15:51:25.158Z" }, + { url = "https://files.pythonhosted.org/packages/c6/bb/a14a4efc5ee748cc1904b0748be278c31b9295ce5f4d2ef66526f410b94d/multidict-6.6.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:bf9bd1fd5eec01494e0f2e8e446a74a85d5e49afb63d75a9934e4a5423dba21d", size = 44267, upload-time = "2025-06-30T15:51:26.326Z" }, + { url = "https://files.pythonhosted.org/packages/c2/f8/410677d563c2d55e063ef74fe578f9d53fe6b0a51649597a5861f83ffa15/multidict-6.6.3-cp311-cp311-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:5bd8d6f793a787153956cd35e24f60485bf0651c238e207b9a54f7458b16d539", size = 230004, upload-time = "2025-06-30T15:51:27.491Z" }, + { url = "https://files.pythonhosted.org/packages/fd/df/2b787f80059314a98e1ec6a4cc7576244986df3e56b3c755e6fc7c99e038/multidict-6.6.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1bf99b4daf908c73856bd87ee0a2499c3c9a3d19bb04b9c6025e66af3fd07462", size = 247196, upload-time = "2025-06-30T15:51:28.762Z" }, + { url = "https://files.pythonhosted.org/packages/05/f2/f9117089151b9a8ab39f9019620d10d9718eec2ac89e7ca9d30f3ec78e96/multidict-6.6.3-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:0b9e59946b49dafaf990fd9c17ceafa62976e8471a14952163d10a7a630413a9", size = 225337, upload-time = "2025-06-30T15:51:30.025Z" }, + { url = "https://files.pythonhosted.org/packages/93/2d/7115300ec5b699faa152c56799b089a53ed69e399c3c2d528251f0aeda1a/multidict-6.6.3-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e2db616467070d0533832d204c54eea6836a5e628f2cb1e6dfd8cd6ba7277cb7", size = 257079, upload-time = "2025-06-30T15:51:31.716Z" }, + { url = "https://files.pythonhosted.org/packages/15/ea/ff4bab367623e39c20d3b07637225c7688d79e4f3cc1f3b9f89867677f9a/multidict-6.6.3-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:7394888236621f61dcdd25189b2768ae5cc280f041029a5bcf1122ac63df79f9", size = 255461, upload-time = "2025-06-30T15:51:33.029Z" }, + { url = "https://files.pythonhosted.org/packages/74/07/2c9246cda322dfe08be85f1b8739646f2c4c5113a1422d7a407763422ec4/multidict-6.6.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f114d8478733ca7388e7c7e0ab34b72547476b97009d643644ac33d4d3fe1821", size = 246611, upload-time = "2025-06-30T15:51:34.47Z" }, + { url = "https://files.pythonhosted.org/packages/a8/62/279c13d584207d5697a752a66ffc9bb19355a95f7659140cb1b3cf82180e/multidict-6.6.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:cdf22e4db76d323bcdc733514bf732e9fb349707c98d341d40ebcc6e9318ef3d", size = 243102, upload-time = "2025-06-30T15:51:36.525Z" }, + { url = "https://files.pythonhosted.org/packages/69/cc/e06636f48c6d51e724a8bc8d9e1db5f136fe1df066d7cafe37ef4000f86a/multidict-6.6.3-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:e995a34c3d44ab511bfc11aa26869b9d66c2d8c799fa0e74b28a473a692532d6", size = 238693, upload-time = "2025-06-30T15:51:38.278Z" }, + { url = "https://files.pythonhosted.org/packages/89/a4/66c9d8fb9acf3b226cdd468ed009537ac65b520aebdc1703dd6908b19d33/multidict-6.6.3-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:766a4a5996f54361d8d5a9050140aa5362fe48ce51c755a50c0bc3706460c430", size = 246582, upload-time = "2025-06-30T15:51:39.709Z" }, + { url = "https://files.pythonhosted.org/packages/cf/01/c69e0317be556e46257826d5449feb4e6aa0d18573e567a48a2c14156f1f/multidict-6.6.3-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:3893a0d7d28a7fe6ca7a1f760593bc13038d1d35daf52199d431b61d2660602b", size = 253355, upload-time = "2025-06-30T15:51:41.013Z" }, + { url = "https://files.pythonhosted.org/packages/c0/da/9cc1da0299762d20e626fe0042e71b5694f9f72d7d3f9678397cbaa71b2b/multidict-6.6.3-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:934796c81ea996e61914ba58064920d6cad5d99140ac3167901eb932150e2e56", size = 247774, upload-time = "2025-06-30T15:51:42.291Z" }, + { url = "https://files.pythonhosted.org/packages/e6/91/b22756afec99cc31105ddd4a52f95ab32b1a4a58f4d417979c570c4a922e/multidict-6.6.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9ed948328aec2072bc00f05d961ceadfd3e9bfc2966c1319aeaf7b7c21219183", size = 242275, upload-time = "2025-06-30T15:51:43.642Z" }, + { url = "https://files.pythonhosted.org/packages/be/f1/adcc185b878036a20399d5be5228f3cbe7f823d78985d101d425af35c800/multidict-6.6.3-cp311-cp311-win32.whl", hash = "sha256:9f5b28c074c76afc3e4c610c488e3493976fe0e596dd3db6c8ddfbb0134dcac5", size = 41290, upload-time = "2025-06-30T15:51:45.264Z" }, + { url = "https://files.pythonhosted.org/packages/e0/d4/27652c1c6526ea6b4f5ddd397e93f4232ff5de42bea71d339bc6a6cc497f/multidict-6.6.3-cp311-cp311-win_amd64.whl", hash = "sha256:bc7f6fbc61b1c16050a389c630da0b32fc6d4a3d191394ab78972bf5edc568c2", size = 45942, upload-time = "2025-06-30T15:51:46.377Z" }, + { url = "https://files.pythonhosted.org/packages/16/18/23f4932019804e56d3c2413e237f866444b774b0263bcb81df2fdecaf593/multidict-6.6.3-cp311-cp311-win_arm64.whl", hash = "sha256:d4e47d8faffaae822fb5cba20937c048d4f734f43572e7079298a6c39fb172cb", size = 42880, upload-time = "2025-06-30T15:51:47.561Z" }, + { url = "https://files.pythonhosted.org/packages/0e/a0/6b57988ea102da0623ea814160ed78d45a2645e4bbb499c2896d12833a70/multidict-6.6.3-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:056bebbeda16b2e38642d75e9e5310c484b7c24e3841dc0fb943206a72ec89d6", size = 76514, upload-time = "2025-06-30T15:51:48.728Z" }, + { url = "https://files.pythonhosted.org/packages/07/7a/d1e92665b0850c6c0508f101f9cf0410c1afa24973e1115fe9c6a185ebf7/multidict-6.6.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:e5f481cccb3c5c5e5de5d00b5141dc589c1047e60d07e85bbd7dea3d4580d63f", size = 45394, upload-time = "2025-06-30T15:51:49.986Z" }, + { url = "https://files.pythonhosted.org/packages/52/6f/dd104490e01be6ef8bf9573705d8572f8c2d2c561f06e3826b081d9e6591/multidict-6.6.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:10bea2ee839a759ee368b5a6e47787f399b41e70cf0c20d90dfaf4158dfb4e55", size = 43590, upload-time = "2025-06-30T15:51:51.331Z" }, + { url = "https://files.pythonhosted.org/packages/44/fe/06e0e01b1b0611e6581b7fd5a85b43dacc08b6cea3034f902f383b0873e5/multidict-6.6.3-cp312-cp312-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:2334cfb0fa9549d6ce2c21af2bfbcd3ac4ec3646b1b1581c88e3e2b1779ec92b", size = 237292, upload-time = "2025-06-30T15:51:52.584Z" }, + { url = "https://files.pythonhosted.org/packages/ce/71/4f0e558fb77696b89c233c1ee2d92f3e1d5459070a0e89153c9e9e804186/multidict-6.6.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b8fee016722550a2276ca2cb5bb624480e0ed2bd49125b2b73b7010b9090e888", size = 258385, upload-time = "2025-06-30T15:51:53.913Z" }, + { url = "https://files.pythonhosted.org/packages/e3/25/cca0e68228addad24903801ed1ab42e21307a1b4b6dd2cf63da5d3ae082a/multidict-6.6.3-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:e5511cb35f5c50a2db21047c875eb42f308c5583edf96bd8ebf7d770a9d68f6d", size = 242328, upload-time = "2025-06-30T15:51:55.672Z" }, + { url = "https://files.pythonhosted.org/packages/6e/a3/46f2d420d86bbcb8fe660b26a10a219871a0fbf4d43cb846a4031533f3e0/multidict-6.6.3-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:712b348f7f449948e0a6c4564a21c7db965af900973a67db432d724619b3c680", size = 268057, upload-time = "2025-06-30T15:51:57.037Z" }, + { url = "https://files.pythonhosted.org/packages/9e/73/1c743542fe00794a2ec7466abd3f312ccb8fad8dff9f36d42e18fb1ec33e/multidict-6.6.3-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:e4e15d2138ee2694e038e33b7c3da70e6b0ad8868b9f8094a72e1414aeda9c1a", size = 269341, upload-time = "2025-06-30T15:51:59.111Z" }, + { url = "https://files.pythonhosted.org/packages/a4/11/6ec9dcbe2264b92778eeb85407d1df18812248bf3506a5a1754bc035db0c/multidict-6.6.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8df25594989aebff8a130f7899fa03cbfcc5d2b5f4a461cf2518236fe6f15961", size = 256081, upload-time = "2025-06-30T15:52:00.533Z" }, + { url = "https://files.pythonhosted.org/packages/9b/2b/631b1e2afeb5f1696846d747d36cda075bfdc0bc7245d6ba5c319278d6c4/multidict-6.6.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:159ca68bfd284a8860f8d8112cf0521113bffd9c17568579e4d13d1f1dc76b65", size = 253581, upload-time = "2025-06-30T15:52:02.43Z" }, + { url = "https://files.pythonhosted.org/packages/bf/0e/7e3b93f79efeb6111d3bf9a1a69e555ba1d07ad1c11bceb56b7310d0d7ee/multidict-6.6.3-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:e098c17856a8c9ade81b4810888c5ad1914099657226283cab3062c0540b0643", size = 250750, upload-time = "2025-06-30T15:52:04.26Z" }, + { url = "https://files.pythonhosted.org/packages/ad/9e/086846c1d6601948e7de556ee464a2d4c85e33883e749f46b9547d7b0704/multidict-6.6.3-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:67c92ed673049dec52d7ed39f8cf9ebbadf5032c774058b4406d18c8f8fe7063", size = 251548, upload-time = "2025-06-30T15:52:06.002Z" }, + { url = "https://files.pythonhosted.org/packages/8c/7b/86ec260118e522f1a31550e87b23542294880c97cfbf6fb18cc67b044c66/multidict-6.6.3-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:bd0578596e3a835ef451784053cfd327d607fc39ea1a14812139339a18a0dbc3", size = 262718, upload-time = "2025-06-30T15:52:07.707Z" }, + { url = "https://files.pythonhosted.org/packages/8c/bd/22ce8f47abb0be04692c9fc4638508b8340987b18691aa7775d927b73f72/multidict-6.6.3-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:346055630a2df2115cd23ae271910b4cae40f4e336773550dca4889b12916e75", size = 259603, upload-time = "2025-06-30T15:52:09.58Z" }, + { url = "https://files.pythonhosted.org/packages/07/9c/91b7ac1691be95cd1f4a26e36a74b97cda6aa9820632d31aab4410f46ebd/multidict-6.6.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:555ff55a359302b79de97e0468e9ee80637b0de1fce77721639f7cd9440b3a10", size = 251351, upload-time = "2025-06-30T15:52:10.947Z" }, + { url = "https://files.pythonhosted.org/packages/6f/5c/4d7adc739884f7a9fbe00d1eac8c034023ef8bad71f2ebe12823ca2e3649/multidict-6.6.3-cp312-cp312-win32.whl", hash = "sha256:73ab034fb8d58ff85c2bcbadc470efc3fafeea8affcf8722855fb94557f14cc5", size = 41860, upload-time = "2025-06-30T15:52:12.334Z" }, + { url = "https://files.pythonhosted.org/packages/6a/a3/0fbc7afdf7cb1aa12a086b02959307848eb6bcc8f66fcb66c0cb57e2a2c1/multidict-6.6.3-cp312-cp312-win_amd64.whl", hash = "sha256:04cbcce84f63b9af41bad04a54d4cc4e60e90c35b9e6ccb130be2d75b71f8c17", size = 45982, upload-time = "2025-06-30T15:52:13.6Z" }, + { url = "https://files.pythonhosted.org/packages/b8/95/8c825bd70ff9b02462dc18d1295dd08d3e9e4eb66856d292ffa62cfe1920/multidict-6.6.3-cp312-cp312-win_arm64.whl", hash = "sha256:0f1130b896ecb52d2a1e615260f3ea2af55fa7dc3d7c3003ba0c3121a759b18b", size = 43210, upload-time = "2025-06-30T15:52:14.893Z" }, + { url = "https://files.pythonhosted.org/packages/52/1d/0bebcbbb4f000751fbd09957257903d6e002943fc668d841a4cf2fb7f872/multidict-6.6.3-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:540d3c06d48507357a7d57721e5094b4f7093399a0106c211f33540fdc374d55", size = 75843, upload-time = "2025-06-30T15:52:16.155Z" }, + { url = "https://files.pythonhosted.org/packages/07/8f/cbe241b0434cfe257f65c2b1bcf9e8d5fb52bc708c5061fb29b0fed22bdf/multidict-6.6.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:9c19cea2a690f04247d43f366d03e4eb110a0dc4cd1bbeee4d445435428ed35b", size = 45053, upload-time = "2025-06-30T15:52:17.429Z" }, + { url = "https://files.pythonhosted.org/packages/32/d2/0b3b23f9dbad5b270b22a3ac3ea73ed0a50ef2d9a390447061178ed6bdb8/multidict-6.6.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:7af039820cfd00effec86bda5d8debef711a3e86a1d3772e85bea0f243a4bd65", size = 43273, upload-time = "2025-06-30T15:52:19.346Z" }, + { url = "https://files.pythonhosted.org/packages/fd/fe/6eb68927e823999e3683bc49678eb20374ba9615097d085298fd5b386564/multidict-6.6.3-cp313-cp313-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:500b84f51654fdc3944e936f2922114349bf8fdcac77c3092b03449f0e5bc2b3", size = 237124, upload-time = "2025-06-30T15:52:20.773Z" }, + { url = "https://files.pythonhosted.org/packages/e7/ab/320d8507e7726c460cb77117848b3834ea0d59e769f36fdae495f7669929/multidict-6.6.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f3fc723ab8a5c5ed6c50418e9bfcd8e6dceba6c271cee6728a10a4ed8561520c", size = 256892, upload-time = "2025-06-30T15:52:22.242Z" }, + { url = "https://files.pythonhosted.org/packages/76/60/38ee422db515ac69834e60142a1a69111ac96026e76e8e9aa347fd2e4591/multidict-6.6.3-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:94c47ea3ade005b5976789baaed66d4de4480d0a0bf31cef6edaa41c1e7b56a6", size = 240547, upload-time = "2025-06-30T15:52:23.736Z" }, + { url = "https://files.pythonhosted.org/packages/27/fb/905224fde2dff042b030c27ad95a7ae744325cf54b890b443d30a789b80e/multidict-6.6.3-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:dbc7cf464cc6d67e83e136c9f55726da3a30176f020a36ead246eceed87f1cd8", size = 266223, upload-time = "2025-06-30T15:52:25.185Z" }, + { url = "https://files.pythonhosted.org/packages/76/35/dc38ab361051beae08d1a53965e3e1a418752fc5be4d3fb983c5582d8784/multidict-6.6.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:900eb9f9da25ada070f8ee4a23f884e0ee66fe4e1a38c3af644256a508ad81ca", size = 267262, upload-time = "2025-06-30T15:52:26.969Z" }, + { url = "https://files.pythonhosted.org/packages/1f/a3/0a485b7f36e422421b17e2bbb5a81c1af10eac1d4476f2ff92927c730479/multidict-6.6.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7c6df517cf177da5d47ab15407143a89cd1a23f8b335f3a28d57e8b0a3dbb884", size = 254345, upload-time = "2025-06-30T15:52:28.467Z" }, + { url = "https://files.pythonhosted.org/packages/b4/59/bcdd52c1dab7c0e0d75ff19cac751fbd5f850d1fc39172ce809a74aa9ea4/multidict-6.6.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4ef421045f13879e21c994b36e728d8e7d126c91a64b9185810ab51d474f27e7", size = 252248, upload-time = "2025-06-30T15:52:29.938Z" }, + { url = "https://files.pythonhosted.org/packages/bb/a4/2d96aaa6eae8067ce108d4acee6f45ced5728beda55c0f02ae1072c730d1/multidict-6.6.3-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:6c1e61bb4f80895c081790b6b09fa49e13566df8fbff817da3f85b3a8192e36b", size = 250115, upload-time = "2025-06-30T15:52:31.416Z" }, + { url = "https://files.pythonhosted.org/packages/25/d2/ed9f847fa5c7d0677d4f02ea2c163d5e48573de3f57bacf5670e43a5ffaa/multidict-6.6.3-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:e5e8523bb12d7623cd8300dbd91b9e439a46a028cd078ca695eb66ba31adee3c", size = 249649, upload-time = "2025-06-30T15:52:32.996Z" }, + { url = "https://files.pythonhosted.org/packages/1f/af/9155850372563fc550803d3f25373308aa70f59b52cff25854086ecb4a79/multidict-6.6.3-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:ef58340cc896219e4e653dade08fea5c55c6df41bcc68122e3be3e9d873d9a7b", size = 261203, upload-time = "2025-06-30T15:52:34.521Z" }, + { url = "https://files.pythonhosted.org/packages/36/2f/c6a728f699896252cf309769089568a33c6439626648843f78743660709d/multidict-6.6.3-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:fc9dc435ec8699e7b602b94fe0cd4703e69273a01cbc34409af29e7820f777f1", size = 258051, upload-time = "2025-06-30T15:52:35.999Z" }, + { url = "https://files.pythonhosted.org/packages/d0/60/689880776d6b18fa2b70f6cc74ff87dd6c6b9b47bd9cf74c16fecfaa6ad9/multidict-6.6.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9e864486ef4ab07db5e9cb997bad2b681514158d6954dd1958dfb163b83d53e6", size = 249601, upload-time = "2025-06-30T15:52:37.473Z" }, + { url = "https://files.pythonhosted.org/packages/75/5e/325b11f2222a549019cf2ef879c1f81f94a0d40ace3ef55cf529915ba6cc/multidict-6.6.3-cp313-cp313-win32.whl", hash = "sha256:5633a82fba8e841bc5c5c06b16e21529573cd654f67fd833650a215520a6210e", size = 41683, upload-time = "2025-06-30T15:52:38.927Z" }, + { url = "https://files.pythonhosted.org/packages/b1/ad/cf46e73f5d6e3c775cabd2a05976547f3f18b39bee06260369a42501f053/multidict-6.6.3-cp313-cp313-win_amd64.whl", hash = "sha256:e93089c1570a4ad54c3714a12c2cef549dc9d58e97bcded193d928649cab78e9", size = 45811, upload-time = "2025-06-30T15:52:40.207Z" }, + { url = "https://files.pythonhosted.org/packages/c5/c9/2e3fe950db28fb7c62e1a5f46e1e38759b072e2089209bc033c2798bb5ec/multidict-6.6.3-cp313-cp313-win_arm64.whl", hash = "sha256:c60b401f192e79caec61f166da9c924e9f8bc65548d4246842df91651e83d600", size = 43056, upload-time = "2025-06-30T15:52:41.575Z" }, + { url = "https://files.pythonhosted.org/packages/3a/58/aaf8114cf34966e084a8cc9517771288adb53465188843d5a19862cb6dc3/multidict-6.6.3-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:02fd8f32d403a6ff13864b0851f1f523d4c988051eea0471d4f1fd8010f11134", size = 82811, upload-time = "2025-06-30T15:52:43.281Z" }, + { url = "https://files.pythonhosted.org/packages/71/af/5402e7b58a1f5b987a07ad98f2501fdba2a4f4b4c30cf114e3ce8db64c87/multidict-6.6.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:f3aa090106b1543f3f87b2041eef3c156c8da2aed90c63a2fbed62d875c49c37", size = 48304, upload-time = "2025-06-30T15:52:45.026Z" }, + { url = "https://files.pythonhosted.org/packages/39/65/ab3c8cafe21adb45b24a50266fd747147dec7847425bc2a0f6934b3ae9ce/multidict-6.6.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:e924fb978615a5e33ff644cc42e6aa241effcf4f3322c09d4f8cebde95aff5f8", size = 46775, upload-time = "2025-06-30T15:52:46.459Z" }, + { url = "https://files.pythonhosted.org/packages/49/ba/9fcc1b332f67cc0c0c8079e263bfab6660f87fe4e28a35921771ff3eea0d/multidict-6.6.3-cp313-cp313t-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:b9fe5a0e57c6dbd0e2ce81ca66272282c32cd11d31658ee9553849d91289e1c1", size = 229773, upload-time = "2025-06-30T15:52:47.88Z" }, + { url = "https://files.pythonhosted.org/packages/a4/14/0145a251f555f7c754ce2dcbcd012939bbd1f34f066fa5d28a50e722a054/multidict-6.6.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b24576f208793ebae00280c59927c3b7c2a3b1655e443a25f753c4611bc1c373", size = 250083, upload-time = "2025-06-30T15:52:49.366Z" }, + { url = "https://files.pythonhosted.org/packages/9e/d4/d5c0bd2bbb173b586c249a151a26d2fb3ec7d53c96e42091c9fef4e1f10c/multidict-6.6.3-cp313-cp313t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:135631cb6c58eac37d7ac0df380294fecdc026b28837fa07c02e459c7fb9c54e", size = 228980, upload-time = "2025-06-30T15:52:50.903Z" }, + { url = "https://files.pythonhosted.org/packages/21/32/c9a2d8444a50ec48c4733ccc67254100c10e1c8ae8e40c7a2d2183b59b97/multidict-6.6.3-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:274d416b0df887aef98f19f21578653982cfb8a05b4e187d4a17103322eeaf8f", size = 257776, upload-time = "2025-06-30T15:52:52.764Z" }, + { url = "https://files.pythonhosted.org/packages/68/d0/14fa1699f4ef629eae08ad6201c6b476098f5efb051b296f4c26be7a9fdf/multidict-6.6.3-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:e252017a817fad7ce05cafbe5711ed40faeb580e63b16755a3a24e66fa1d87c0", size = 256882, upload-time = "2025-06-30T15:52:54.596Z" }, + { url = "https://files.pythonhosted.org/packages/da/88/84a27570fbe303c65607d517a5f147cd2fc046c2d1da02b84b17b9bdc2aa/multidict-6.6.3-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2e4cc8d848cd4fe1cdee28c13ea79ab0ed37fc2e89dd77bac86a2e7959a8c3bc", size = 247816, upload-time = "2025-06-30T15:52:56.175Z" }, + { url = "https://files.pythonhosted.org/packages/1c/60/dca352a0c999ce96a5d8b8ee0b2b9f729dcad2e0b0c195f8286269a2074c/multidict-6.6.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9e236a7094b9c4c1b7585f6b9cca34b9d833cf079f7e4c49e6a4a6ec9bfdc68f", size = 245341, upload-time = "2025-06-30T15:52:57.752Z" }, + { url = "https://files.pythonhosted.org/packages/50/ef/433fa3ed06028f03946f3993223dada70fb700f763f70c00079533c34578/multidict-6.6.3-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:e0cb0ab69915c55627c933f0b555a943d98ba71b4d1c57bc0d0a66e2567c7471", size = 235854, upload-time = "2025-06-30T15:52:59.74Z" }, + { url = "https://files.pythonhosted.org/packages/1b/1f/487612ab56fbe35715320905215a57fede20de7db40a261759690dc80471/multidict-6.6.3-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:81ef2f64593aba09c5212a3d0f8c906a0d38d710a011f2f42759704d4557d3f2", size = 243432, upload-time = "2025-06-30T15:53:01.602Z" }, + { url = "https://files.pythonhosted.org/packages/da/6f/ce8b79de16cd885c6f9052c96a3671373d00c59b3ee635ea93e6e81b8ccf/multidict-6.6.3-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:b9cbc60010de3562545fa198bfc6d3825df430ea96d2cc509c39bd71e2e7d648", size = 252731, upload-time = "2025-06-30T15:53:03.517Z" }, + { url = "https://files.pythonhosted.org/packages/bb/fe/a2514a6aba78e5abefa1624ca85ae18f542d95ac5cde2e3815a9fbf369aa/multidict-6.6.3-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:70d974eaaa37211390cd02ef93b7e938de564bbffa866f0b08d07e5e65da783d", size = 247086, upload-time = "2025-06-30T15:53:05.48Z" }, + { url = "https://files.pythonhosted.org/packages/8c/22/b788718d63bb3cce752d107a57c85fcd1a212c6c778628567c9713f9345a/multidict-6.6.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:3713303e4a6663c6d01d648a68f2848701001f3390a030edaaf3fc949c90bf7c", size = 243338, upload-time = "2025-06-30T15:53:07.522Z" }, + { url = "https://files.pythonhosted.org/packages/22/d6/fdb3d0670819f2228f3f7d9af613d5e652c15d170c83e5f1c94fbc55a25b/multidict-6.6.3-cp313-cp313t-win32.whl", hash = "sha256:639ecc9fe7cd73f2495f62c213e964843826f44505a3e5d82805aa85cac6f89e", size = 47812, upload-time = "2025-06-30T15:53:09.263Z" }, + { url = "https://files.pythonhosted.org/packages/b6/d6/a9d2c808f2c489ad199723197419207ecbfbc1776f6e155e1ecea9c883aa/multidict-6.6.3-cp313-cp313t-win_amd64.whl", hash = "sha256:9f97e181f344a0ef3881b573d31de8542cc0dbc559ec68c8f8b5ce2c2e91646d", size = 53011, upload-time = "2025-06-30T15:53:11.038Z" }, + { url = "https://files.pythonhosted.org/packages/f2/40/b68001cba8188dd267590a111f9661b6256debc327137667e832bf5d66e8/multidict-6.6.3-cp313-cp313t-win_arm64.whl", hash = "sha256:ce8b7693da41a3c4fde5871c738a81490cea5496c671d74374c8ab889e1834fb", size = 45254, upload-time = "2025-06-30T15:53:12.421Z" }, + { url = "https://files.pythonhosted.org/packages/d8/30/9aec301e9772b098c1f5c0ca0279237c9766d94b97802e9888010c64b0ed/multidict-6.6.3-py3-none-any.whl", hash = "sha256:8db10f29c7541fc5da4defd8cd697e1ca429db743fa716325f236079b96f775a", size = 12313, upload-time = "2025-06-30T15:53:45.437Z" }, +] + +[[package]] +name = "mypy" +version = "1.17.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "mypy-extensions" }, + { name = "pathspec" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/8e/22/ea637422dedf0bf36f3ef238eab4e455e2a0dcc3082b5cc067615347ab8e/mypy-1.17.1.tar.gz", hash = "sha256:25e01ec741ab5bb3eec8ba9cdb0f769230368a22c959c4937360efb89b7e9f01", size = 3352570, upload-time = "2025-07-31T07:54:19.204Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/46/cf/eadc80c4e0a70db1c08921dcc220357ba8ab2faecb4392e3cebeb10edbfa/mypy-1.17.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ad37544be07c5d7fba814eb370e006df58fed8ad1ef33ed1649cb1889ba6ff58", size = 10921009, upload-time = "2025-07-31T07:53:23.037Z" }, + { url = "https://files.pythonhosted.org/packages/5d/c1/c869d8c067829ad30d9bdae051046561552516cfb3a14f7f0347b7d973ee/mypy-1.17.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:064e2ff508e5464b4bd807a7c1625bc5047c5022b85c70f030680e18f37273a5", size = 10047482, upload-time = "2025-07-31T07:53:26.151Z" }, + { url = "https://files.pythonhosted.org/packages/98/b9/803672bab3fe03cee2e14786ca056efda4bb511ea02dadcedde6176d06d0/mypy-1.17.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:70401bbabd2fa1aa7c43bb358f54037baf0586f41e83b0ae67dd0534fc64edfd", size = 11832883, upload-time = "2025-07-31T07:53:47.948Z" }, + { url = "https://files.pythonhosted.org/packages/88/fb/fcdac695beca66800918c18697b48833a9a6701de288452b6715a98cfee1/mypy-1.17.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e92bdc656b7757c438660f775f872a669b8ff374edc4d18277d86b63edba6b8b", size = 12566215, upload-time = "2025-07-31T07:54:04.031Z" }, + { url = "https://files.pythonhosted.org/packages/7f/37/a932da3d3dace99ee8eb2043b6ab03b6768c36eb29a02f98f46c18c0da0e/mypy-1.17.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:c1fdf4abb29ed1cb091cf432979e162c208a5ac676ce35010373ff29247bcad5", size = 12751956, upload-time = "2025-07-31T07:53:36.263Z" }, + { url = "https://files.pythonhosted.org/packages/8c/cf/6438a429e0f2f5cab8bc83e53dbebfa666476f40ee322e13cac5e64b79e7/mypy-1.17.1-cp311-cp311-win_amd64.whl", hash = "sha256:ff2933428516ab63f961644bc49bc4cbe42bbffb2cd3b71cc7277c07d16b1a8b", size = 9507307, upload-time = "2025-07-31T07:53:59.734Z" }, + { url = "https://files.pythonhosted.org/packages/17/a2/7034d0d61af8098ec47902108553122baa0f438df8a713be860f7407c9e6/mypy-1.17.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:69e83ea6553a3ba79c08c6e15dbd9bfa912ec1e493bf75489ef93beb65209aeb", size = 11086295, upload-time = "2025-07-31T07:53:28.124Z" }, + { url = "https://files.pythonhosted.org/packages/14/1f/19e7e44b594d4b12f6ba8064dbe136505cec813549ca3e5191e40b1d3cc2/mypy-1.17.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1b16708a66d38abb1e6b5702f5c2c87e133289da36f6a1d15f6a5221085c6403", size = 10112355, upload-time = "2025-07-31T07:53:21.121Z" }, + { url = "https://files.pythonhosted.org/packages/5b/69/baa33927e29e6b4c55d798a9d44db5d394072eef2bdc18c3e2048c9ed1e9/mypy-1.17.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:89e972c0035e9e05823907ad5398c5a73b9f47a002b22359b177d40bdaee7056", size = 11875285, upload-time = "2025-07-31T07:53:55.293Z" }, + { url = "https://files.pythonhosted.org/packages/90/13/f3a89c76b0a41e19490b01e7069713a30949d9a6c147289ee1521bcea245/mypy-1.17.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:03b6d0ed2b188e35ee6d5c36b5580cffd6da23319991c49ab5556c023ccf1341", size = 12737895, upload-time = "2025-07-31T07:53:43.623Z" }, + { url = "https://files.pythonhosted.org/packages/23/a1/c4ee79ac484241301564072e6476c5a5be2590bc2e7bfd28220033d2ef8f/mypy-1.17.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c837b896b37cd103570d776bda106eabb8737aa6dd4f248451aecf53030cdbeb", size = 12931025, upload-time = "2025-07-31T07:54:17.125Z" }, + { url = "https://files.pythonhosted.org/packages/89/b8/7409477be7919a0608900e6320b155c72caab4fef46427c5cc75f85edadd/mypy-1.17.1-cp312-cp312-win_amd64.whl", hash = "sha256:665afab0963a4b39dff7c1fa563cc8b11ecff7910206db4b2e64dd1ba25aed19", size = 9584664, upload-time = "2025-07-31T07:54:12.842Z" }, + { url = "https://files.pythonhosted.org/packages/5b/82/aec2fc9b9b149f372850291827537a508d6c4d3664b1750a324b91f71355/mypy-1.17.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:93378d3203a5c0800c6b6d850ad2f19f7a3cdf1a3701d3416dbf128805c6a6a7", size = 11075338, upload-time = "2025-07-31T07:53:38.873Z" }, + { url = "https://files.pythonhosted.org/packages/07/ac/ee93fbde9d2242657128af8c86f5d917cd2887584cf948a8e3663d0cd737/mypy-1.17.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:15d54056f7fe7a826d897789f53dd6377ec2ea8ba6f776dc83c2902b899fee81", size = 10113066, upload-time = "2025-07-31T07:54:14.707Z" }, + { url = "https://files.pythonhosted.org/packages/5a/68/946a1e0be93f17f7caa56c45844ec691ca153ee8b62f21eddda336a2d203/mypy-1.17.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:209a58fed9987eccc20f2ca94afe7257a8f46eb5df1fb69958650973230f91e6", size = 11875473, upload-time = "2025-07-31T07:53:14.504Z" }, + { url = "https://files.pythonhosted.org/packages/9f/0f/478b4dce1cb4f43cf0f0d00fba3030b21ca04a01b74d1cd272a528cf446f/mypy-1.17.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:099b9a5da47de9e2cb5165e581f158e854d9e19d2e96b6698c0d64de911dd849", size = 12744296, upload-time = "2025-07-31T07:53:03.896Z" }, + { url = "https://files.pythonhosted.org/packages/ca/70/afa5850176379d1b303f992a828de95fc14487429a7139a4e0bdd17a8279/mypy-1.17.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fa6ffadfbe6994d724c5a1bb6123a7d27dd68fc9c059561cd33b664a79578e14", size = 12914657, upload-time = "2025-07-31T07:54:08.576Z" }, + { url = "https://files.pythonhosted.org/packages/53/f9/4a83e1c856a3d9c8f6edaa4749a4864ee98486e9b9dbfbc93842891029c2/mypy-1.17.1-cp313-cp313-win_amd64.whl", hash = "sha256:9a2b7d9180aed171f033c9f2fc6c204c1245cf60b0cb61cf2e7acc24eea78e0a", size = 9593320, upload-time = "2025-07-31T07:53:01.341Z" }, + { url = "https://files.pythonhosted.org/packages/38/56/79c2fac86da57c7d8c48622a05873eaab40b905096c33597462713f5af90/mypy-1.17.1-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:15a83369400454c41ed3a118e0cc58bd8123921a602f385cb6d6ea5df050c733", size = 11040037, upload-time = "2025-07-31T07:54:10.942Z" }, + { url = "https://files.pythonhosted.org/packages/4d/c3/adabe6ff53638e3cad19e3547268482408323b1e68bf082c9119000cd049/mypy-1.17.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:55b918670f692fc9fba55c3298d8a3beae295c5cded0a55dccdc5bbead814acd", size = 10131550, upload-time = "2025-07-31T07:53:41.307Z" }, + { url = "https://files.pythonhosted.org/packages/b8/c5/2e234c22c3bdeb23a7817af57a58865a39753bde52c74e2c661ee0cfc640/mypy-1.17.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:62761474061feef6f720149d7ba876122007ddc64adff5ba6f374fda35a018a0", size = 11872963, upload-time = "2025-07-31T07:53:16.878Z" }, + { url = "https://files.pythonhosted.org/packages/ab/26/c13c130f35ca8caa5f2ceab68a247775648fdcd6c9a18f158825f2bc2410/mypy-1.17.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c49562d3d908fd49ed0938e5423daed8d407774a479b595b143a3d7f87cdae6a", size = 12710189, upload-time = "2025-07-31T07:54:01.962Z" }, + { url = "https://files.pythonhosted.org/packages/82/df/c7d79d09f6de8383fe800521d066d877e54d30b4fb94281c262be2df84ef/mypy-1.17.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:397fba5d7616a5bc60b45c7ed204717eaddc38f826e3645402c426057ead9a91", size = 12900322, upload-time = "2025-07-31T07:53:10.551Z" }, + { url = "https://files.pythonhosted.org/packages/b8/98/3d5a48978b4f708c55ae832619addc66d677f6dc59f3ebad71bae8285ca6/mypy-1.17.1-cp314-cp314-win_amd64.whl", hash = "sha256:9d6b20b97d373f41617bd0708fd46aa656059af57f2ef72aa8c7d6a2b73b74ed", size = 9751879, upload-time = "2025-07-31T07:52:56.683Z" }, + { url = "https://files.pythonhosted.org/packages/1d/f3/8fcd2af0f5b806f6cf463efaffd3c9548a28f84220493ecd38d127b6b66d/mypy-1.17.1-py3-none-any.whl", hash = "sha256:a9f52c0351c21fe24c21d8c0eb1f62967b262d6729393397b6f443c3b773c3b9", size = 2283411, upload-time = "2025-07-31T07:53:24.664Z" }, +] + +[[package]] +name = "mypy-extensions" +version = "1.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a2/6e/371856a3fb9d31ca8dac321cda606860fa4548858c0cc45d9d1d4ca2628b/mypy_extensions-1.1.0.tar.gz", hash = "sha256:52e68efc3284861e772bbcd66823fde5ae21fd2fdb51c62a211403730b916558", size = 6343, upload-time = "2025-04-22T14:54:24.164Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/79/7b/2c79738432f5c924bef5071f933bcc9efd0473bac3b4aa584a6f7c1c8df8/mypy_extensions-1.1.0-py3-none-any.whl", hash = "sha256:1be4cccdb0f2482337c4743e60421de3a356cd97508abadd57d47403e94f5505", size = 4963, upload-time = "2025-04-22T14:54:22.983Z" }, +] + +[[package]] +name = "nest-asyncio" +version = "1.6.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/83/f8/51569ac65d696c8ecbee95938f89d4abf00f47d58d48f6fbabfe8f0baefe/nest_asyncio-1.6.0.tar.gz", hash = "sha256:6f172d5449aca15afd6c646851f4e31e02c598d553a667e38cafa997cfec55fe", size = 7418, upload-time = "2024-01-21T14:25:19.227Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a0/c4/c2971a3ba4c6103a3d10c4b0f24f461ddc027f0f09763220cf35ca1401b3/nest_asyncio-1.6.0-py3-none-any.whl", hash = "sha256:87af6efd6b5e897c81050477ef65c62e2b2f35d51703cae01aff2905b1852e1c", size = 5195, upload-time = "2024-01-21T14:25:17.223Z" }, +] + +[[package]] +name = "networkx" +version = "3.5" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/6c/4f/ccdb8ad3a38e583f214547fd2f7ff1fc160c43a75af88e6aec213404b96a/networkx-3.5.tar.gz", hash = "sha256:d4c6f9cf81f52d69230866796b82afbccdec3db7ae4fbd1b65ea750feed50037", size = 2471065, upload-time = "2025-05-29T11:35:07.804Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/eb/8d/776adee7bbf76365fdd7f2552710282c79a4ead5d2a46408c9043a2b70ba/networkx-3.5-py3-none-any.whl", hash = "sha256:0030d386a9a06dee3565298b4a734b68589749a544acbb6c412dc9e2489ec6ec", size = 2034406, upload-time = "2025-05-29T11:35:04.961Z" }, +] + +[[package]] +name = "numcodecs" +version = "0.16.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/00/35/49da850ce5371da3930d099da364a73ce9ae4fc64075e521674b48f4804d/numcodecs-0.16.1.tar.gz", hash = "sha256:c47f20d656454568c6b4697ce02081e6bbb512f198738c6a56fafe8029c97fb1", size = 6268134, upload-time = "2025-05-22T13:33:04.098Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6c/82/8d6ca1166dc9b020f383073c1c604e004f0495d243647a83e5d5fff2b7ad/numcodecs-0.16.1-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:5348a25aefbce37ea7c00c3363d36176155233c95597e5905a932e9620df960d", size = 1623980, upload-time = "2025-05-22T13:32:37.718Z" }, + { url = "https://files.pythonhosted.org/packages/aa/4e/11258b7945c6cd3579f16228c803a13291d16ef7ef46f9551008090b6763/numcodecs-0.16.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2058b0a985470809c720d2457758b61e6c9495a49d5f20dfac9b5ebabd8848eb", size = 1153826, upload-time = "2025-05-22T13:32:39.737Z" }, + { url = "https://files.pythonhosted.org/packages/a1/24/4099ccb29754fc1d2e55dbd9b540f58a24cab6e844dc996e37812c3fb79d/numcodecs-0.16.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6b216b6d7bc207b85d41fddbc25b09fd00d76e265454db6e3fb09d5da0216397", size = 8263684, upload-time = "2025-05-22T13:32:41.252Z" }, + { url = "https://files.pythonhosted.org/packages/04/e3/816a82b984dd7fb7a0afadd16842260ccfee23cc5edbda48a92649ee161b/numcodecs-0.16.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2308d56c4f84a5b942f8668b4adedd3d9cdd6a22e6e6e20768ec356c77050f38", size = 8788927, upload-time = "2025-05-22T13:32:42.905Z" }, + { url = "https://files.pythonhosted.org/packages/6f/54/dbea8b17928670412db0efb20efc087b30c2a67b84b1605fa8a136e482af/numcodecs-0.16.1-cp311-cp311-win_amd64.whl", hash = "sha256:acd8d68b4b815e62cb91e6064a53dac51ee99849350784ee16dd52cdbb4bc70f", size = 790259, upload-time = "2025-05-22T13:32:45.398Z" }, + { url = "https://files.pythonhosted.org/packages/b7/ee/e2a903c88fed347dc74c70bbd7a8dab9aa22bb0dac68c5bc6393c2e9373b/numcodecs-0.16.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:1abe0651ecb6f207656ebfc802effa55c4ae3136cf172c295a067749a2699122", size = 1663434, upload-time = "2025-05-22T13:32:47.26Z" }, + { url = "https://files.pythonhosted.org/packages/f2/f0/37819d4f6896b1ac43a164ffd3ab99d7cbf63bf63cb375fef97aedaef4f0/numcodecs-0.16.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:abb39b7102d0816c8563669cdddca40392d34d0cbf31e3e996706b244586a458", size = 1150402, upload-time = "2025-05-22T13:32:48.574Z" }, + { url = "https://files.pythonhosted.org/packages/60/3c/5059a29750305b80b7428b1e6695878dea9ea3b537d7fba57875e4bbc2c7/numcodecs-0.16.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f3359a951f8b23317f12736a7ad1e7375ec3d735465f92049c76d032ebca4c40", size = 8237455, upload-time = "2025-05-22T13:32:50.052Z" }, + { url = "https://files.pythonhosted.org/packages/1b/f5/515f98d659ab0cbe3738da153eddae22186fd38f05a808511e10f04cf679/numcodecs-0.16.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:82cc70592ec18060786b1bfa0da23afd2a7807d7975d766e626954d6628ec609", size = 8770711, upload-time = "2025-05-22T13:32:52.198Z" }, + { url = "https://files.pythonhosted.org/packages/a2/3a/9fc6104f888af11bad804ebd32dffe0bcb83337f4525b4fe5b379942fefd/numcodecs-0.16.1-cp312-cp312-win_amd64.whl", hash = "sha256:4b48ddc8a7d132b7808bc53eb2705342de5c1e39289d725f988bd143c0fd86df", size = 788701, upload-time = "2025-05-22T13:32:54.28Z" }, + { url = "https://files.pythonhosted.org/packages/5e/1e/73ffb1074f03d52cb1c4f4deaba26a2008ca45262f3622ed26dbec7a7362/numcodecs-0.16.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:2ad8ee940315f59188accfc3f2d39726a4ca0d76b49bf8d0018e121f01c49028", size = 1659453, upload-time = "2025-05-22T13:32:55.558Z" }, + { url = "https://files.pythonhosted.org/packages/42/72/5affb1ce92b7a6becee17921de7c6b521a48fa61fc3d36d9f1eea2cf83f5/numcodecs-0.16.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:179ca7bf3525a0f7379df7767d87dd495253de44597cb7e511198b28b09da633", size = 1143932, upload-time = "2025-05-22T13:32:56.908Z" }, + { url = "https://files.pythonhosted.org/packages/e3/f1/b092679d84c67c6ed62e4df5781d89bbb089f24a0df4187cbab9db51cf6b/numcodecs-0.16.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6e2babbb50bf348ae982818d5560af330eab0dcd925fb0e49509785ad57d11db", size = 8187716, upload-time = "2025-05-22T13:32:58.421Z" }, + { url = "https://files.pythonhosted.org/packages/a8/e8/86e7741adb43261aff409b53c53c8bac2797bfca055d64dd65dc731d5141/numcodecs-0.16.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a4b29d8d3284b72bfad4fb83d672a17f497ae86ee1ef8087bac7222b620d3d91", size = 8728650, upload-time = "2025-05-22T13:33:00.337Z" }, + { url = "https://files.pythonhosted.org/packages/21/03/87c5c217232aa3515d350728c6dcefca252fa582246100ef68a51fbda456/numcodecs-0.16.1-cp313-cp313-win_amd64.whl", hash = "sha256:06489635f43e1a959aea73cb830d78cf3adb07ac5f34daccb92091e4d9ac6b07", size = 785553, upload-time = "2025-05-22T13:33:02.587Z" }, +] + +[package.optional-dependencies] +crc32c = [ + { name = "crc32c" }, +] +msgpack = [ + { name = "msgpack" }, +] + +[[package]] +name = "numpy" +version = "2.3.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/37/7d/3fec4199c5ffb892bed55cff901e4f39a58c81df9c44c280499e92cad264/numpy-2.3.2.tar.gz", hash = "sha256:e0486a11ec30cdecb53f184d496d1c6a20786c81e55e41640270130056f8ee48", size = 20489306, upload-time = "2025-07-24T21:32:07.553Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/96/26/1320083986108998bd487e2931eed2aeedf914b6e8905431487543ec911d/numpy-2.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:852ae5bed3478b92f093e30f785c98e0cb62fa0a939ed057c31716e18a7a22b9", size = 21259016, upload-time = "2025-07-24T20:24:35.214Z" }, + { url = "https://files.pythonhosted.org/packages/c4/2b/792b341463fa93fc7e55abbdbe87dac316c5b8cb5e94fb7a59fb6fa0cda5/numpy-2.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7a0e27186e781a69959d0230dd9909b5e26024f8da10683bd6344baea1885168", size = 14451158, upload-time = "2025-07-24T20:24:58.397Z" }, + { url = "https://files.pythonhosted.org/packages/b7/13/e792d7209261afb0c9f4759ffef6135b35c77c6349a151f488f531d13595/numpy-2.3.2-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:f0a1a8476ad77a228e41619af2fa9505cf69df928e9aaa165746584ea17fed2b", size = 5379817, upload-time = "2025-07-24T20:25:07.746Z" }, + { url = "https://files.pythonhosted.org/packages/49/ce/055274fcba4107c022b2113a213c7287346563f48d62e8d2a5176ad93217/numpy-2.3.2-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:cbc95b3813920145032412f7e33d12080f11dc776262df1712e1638207dde9e8", size = 6913606, upload-time = "2025-07-24T20:25:18.84Z" }, + { url = "https://files.pythonhosted.org/packages/17/f2/e4d72e6bc5ff01e2ab613dc198d560714971900c03674b41947e38606502/numpy-2.3.2-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f75018be4980a7324edc5930fe39aa391d5734531b1926968605416ff58c332d", size = 14589652, upload-time = "2025-07-24T20:25:40.356Z" }, + { url = "https://files.pythonhosted.org/packages/c8/b0/fbeee3000a51ebf7222016e2939b5c5ecf8000a19555d04a18f1e02521b8/numpy-2.3.2-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:20b8200721840f5621b7bd03f8dcd78de33ec522fc40dc2641aa09537df010c3", size = 16938816, upload-time = "2025-07-24T20:26:05.721Z" }, + { url = "https://files.pythonhosted.org/packages/a9/ec/2f6c45c3484cc159621ea8fc000ac5a86f1575f090cac78ac27193ce82cd/numpy-2.3.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1f91e5c028504660d606340a084db4b216567ded1056ea2b4be4f9d10b67197f", size = 16370512, upload-time = "2025-07-24T20:26:30.545Z" }, + { url = "https://files.pythonhosted.org/packages/b5/01/dd67cf511850bd7aefd6347aaae0956ed415abea741ae107834aae7d6d4e/numpy-2.3.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:fb1752a3bb9a3ad2d6b090b88a9a0ae1cd6f004ef95f75825e2f382c183b2097", size = 18884947, upload-time = "2025-07-24T20:26:58.24Z" }, + { url = "https://files.pythonhosted.org/packages/a7/17/2cf60fd3e6a61d006778735edf67a222787a8c1a7842aed43ef96d777446/numpy-2.3.2-cp311-cp311-win32.whl", hash = "sha256:4ae6863868aaee2f57503c7a5052b3a2807cf7a3914475e637a0ecd366ced220", size = 6599494, upload-time = "2025-07-24T20:27:09.786Z" }, + { url = "https://files.pythonhosted.org/packages/d5/03/0eade211c504bda872a594f045f98ddcc6caef2b7c63610946845e304d3f/numpy-2.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:240259d6564f1c65424bcd10f435145a7644a65a6811cfc3201c4a429ba79170", size = 13087889, upload-time = "2025-07-24T20:27:29.558Z" }, + { url = "https://files.pythonhosted.org/packages/13/32/2c7979d39dafb2a25087e12310fc7f3b9d3c7d960df4f4bc97955ae0ce1d/numpy-2.3.2-cp311-cp311-win_arm64.whl", hash = "sha256:4209f874d45f921bde2cff1ffcd8a3695f545ad2ffbef6d3d3c6768162efab89", size = 10459560, upload-time = "2025-07-24T20:27:46.803Z" }, + { url = "https://files.pythonhosted.org/packages/00/6d/745dd1c1c5c284d17725e5c802ca4d45cfc6803519d777f087b71c9f4069/numpy-2.3.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:bc3186bea41fae9d8e90c2b4fb5f0a1f5a690682da79b92574d63f56b529080b", size = 20956420, upload-time = "2025-07-24T20:28:18.002Z" }, + { url = "https://files.pythonhosted.org/packages/bc/96/e7b533ea5740641dd62b07a790af5d9d8fec36000b8e2d0472bd7574105f/numpy-2.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2f4f0215edb189048a3c03bd5b19345bdfa7b45a7a6f72ae5945d2a28272727f", size = 14184660, upload-time = "2025-07-24T20:28:39.522Z" }, + { url = "https://files.pythonhosted.org/packages/2b/53/102c6122db45a62aa20d1b18c9986f67e6b97e0d6fbc1ae13e3e4c84430c/numpy-2.3.2-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:8b1224a734cd509f70816455c3cffe13a4f599b1bf7130f913ba0e2c0b2006c0", size = 5113382, upload-time = "2025-07-24T20:28:48.544Z" }, + { url = "https://files.pythonhosted.org/packages/2b/21/376257efcbf63e624250717e82b4fae93d60178f09eb03ed766dbb48ec9c/numpy-2.3.2-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:3dcf02866b977a38ba3ec10215220609ab9667378a9e2150615673f3ffd6c73b", size = 6647258, upload-time = "2025-07-24T20:28:59.104Z" }, + { url = "https://files.pythonhosted.org/packages/91/ba/f4ebf257f08affa464fe6036e13f2bf9d4642a40228781dc1235da81be9f/numpy-2.3.2-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:572d5512df5470f50ada8d1972c5f1082d9a0b7aa5944db8084077570cf98370", size = 14281409, upload-time = "2025-07-24T20:40:30.298Z" }, + { url = "https://files.pythonhosted.org/packages/59/ef/f96536f1df42c668cbacb727a8c6da7afc9c05ece6d558927fb1722693e1/numpy-2.3.2-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8145dd6d10df13c559d1e4314df29695613575183fa2e2d11fac4c208c8a1f73", size = 16641317, upload-time = "2025-07-24T20:40:56.625Z" }, + { url = "https://files.pythonhosted.org/packages/f6/a7/af813a7b4f9a42f498dde8a4c6fcbff8100eed00182cc91dbaf095645f38/numpy-2.3.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:103ea7063fa624af04a791c39f97070bf93b96d7af7eb23530cd087dc8dbe9dc", size = 16056262, upload-time = "2025-07-24T20:41:20.797Z" }, + { url = "https://files.pythonhosted.org/packages/8b/5d/41c4ef8404caaa7f05ed1cfb06afe16a25895260eacbd29b4d84dff2920b/numpy-2.3.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fc927d7f289d14f5e037be917539620603294454130b6de200091e23d27dc9be", size = 18579342, upload-time = "2025-07-24T20:41:50.753Z" }, + { url = "https://files.pythonhosted.org/packages/a1/4f/9950e44c5a11636f4a3af6e825ec23003475cc9a466edb7a759ed3ea63bd/numpy-2.3.2-cp312-cp312-win32.whl", hash = "sha256:d95f59afe7f808c103be692175008bab926b59309ade3e6d25009e9a171f7036", size = 6320610, upload-time = "2025-07-24T20:42:01.551Z" }, + { url = "https://files.pythonhosted.org/packages/7c/2f/244643a5ce54a94f0a9a2ab578189c061e4a87c002e037b0829dd77293b6/numpy-2.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:9e196ade2400c0c737d93465327d1ae7c06c7cb8a1756121ebf54b06ca183c7f", size = 12786292, upload-time = "2025-07-24T20:42:20.738Z" }, + { url = "https://files.pythonhosted.org/packages/54/cd/7b5f49d5d78db7badab22d8323c1b6ae458fbf86c4fdfa194ab3cd4eb39b/numpy-2.3.2-cp312-cp312-win_arm64.whl", hash = "sha256:ee807923782faaf60d0d7331f5e86da7d5e3079e28b291973c545476c2b00d07", size = 10194071, upload-time = "2025-07-24T20:42:36.657Z" }, + { url = "https://files.pythonhosted.org/packages/1c/c0/c6bb172c916b00700ed3bf71cb56175fd1f7dbecebf8353545d0b5519f6c/numpy-2.3.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:c8d9727f5316a256425892b043736d63e89ed15bbfe6556c5ff4d9d4448ff3b3", size = 20949074, upload-time = "2025-07-24T20:43:07.813Z" }, + { url = "https://files.pythonhosted.org/packages/20/4e/c116466d22acaf4573e58421c956c6076dc526e24a6be0903219775d862e/numpy-2.3.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:efc81393f25f14d11c9d161e46e6ee348637c0a1e8a54bf9dedc472a3fae993b", size = 14177311, upload-time = "2025-07-24T20:43:29.335Z" }, + { url = "https://files.pythonhosted.org/packages/78/45/d4698c182895af189c463fc91d70805d455a227261d950e4e0f1310c2550/numpy-2.3.2-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:dd937f088a2df683cbb79dda9a772b62a3e5a8a7e76690612c2737f38c6ef1b6", size = 5106022, upload-time = "2025-07-24T20:43:37.999Z" }, + { url = "https://files.pythonhosted.org/packages/9f/76/3e6880fef4420179309dba72a8c11f6166c431cf6dee54c577af8906f914/numpy-2.3.2-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:11e58218c0c46c80509186e460d79fbdc9ca1eb8d8aee39d8f2dc768eb781089", size = 6640135, upload-time = "2025-07-24T20:43:49.28Z" }, + { url = "https://files.pythonhosted.org/packages/34/fa/87ff7f25b3c4ce9085a62554460b7db686fef1e0207e8977795c7b7d7ba1/numpy-2.3.2-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5ad4ebcb683a1f99f4f392cc522ee20a18b2bb12a2c1c42c3d48d5a1adc9d3d2", size = 14278147, upload-time = "2025-07-24T20:44:10.328Z" }, + { url = "https://files.pythonhosted.org/packages/1d/0f/571b2c7a3833ae419fe69ff7b479a78d313581785203cc70a8db90121b9a/numpy-2.3.2-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:938065908d1d869c7d75d8ec45f735a034771c6ea07088867f713d1cd3bbbe4f", size = 16635989, upload-time = "2025-07-24T20:44:34.88Z" }, + { url = "https://files.pythonhosted.org/packages/24/5a/84ae8dca9c9a4c592fe11340b36a86ffa9fd3e40513198daf8a97839345c/numpy-2.3.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:66459dccc65d8ec98cc7df61307b64bf9e08101f9598755d42d8ae65d9a7a6ee", size = 16053052, upload-time = "2025-07-24T20:44:58.872Z" }, + { url = "https://files.pythonhosted.org/packages/57/7c/e5725d99a9133b9813fcf148d3f858df98511686e853169dbaf63aec6097/numpy-2.3.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a7af9ed2aa9ec5950daf05bb11abc4076a108bd3c7db9aa7251d5f107079b6a6", size = 18577955, upload-time = "2025-07-24T20:45:26.714Z" }, + { url = "https://files.pythonhosted.org/packages/ae/11/7c546fcf42145f29b71e4d6f429e96d8d68e5a7ba1830b2e68d7418f0bbd/numpy-2.3.2-cp313-cp313-win32.whl", hash = "sha256:906a30249315f9c8e17b085cc5f87d3f369b35fedd0051d4a84686967bdbbd0b", size = 6311843, upload-time = "2025-07-24T20:49:24.444Z" }, + { url = "https://files.pythonhosted.org/packages/aa/6f/a428fd1cb7ed39b4280d057720fed5121b0d7754fd2a9768640160f5517b/numpy-2.3.2-cp313-cp313-win_amd64.whl", hash = "sha256:c63d95dc9d67b676e9108fe0d2182987ccb0f11933c1e8959f42fa0da8d4fa56", size = 12782876, upload-time = "2025-07-24T20:49:43.227Z" }, + { url = "https://files.pythonhosted.org/packages/65/85/4ea455c9040a12595fb6c43f2c217257c7b52dd0ba332c6a6c1d28b289fe/numpy-2.3.2-cp313-cp313-win_arm64.whl", hash = "sha256:b05a89f2fb84d21235f93de47129dd4f11c16f64c87c33f5e284e6a3a54e43f2", size = 10192786, upload-time = "2025-07-24T20:49:59.443Z" }, + { url = "https://files.pythonhosted.org/packages/80/23/8278f40282d10c3f258ec3ff1b103d4994bcad78b0cba9208317f6bb73da/numpy-2.3.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:4e6ecfeddfa83b02318f4d84acf15fbdbf9ded18e46989a15a8b6995dfbf85ab", size = 21047395, upload-time = "2025-07-24T20:45:58.821Z" }, + { url = "https://files.pythonhosted.org/packages/1f/2d/624f2ce4a5df52628b4ccd16a4f9437b37c35f4f8a50d00e962aae6efd7a/numpy-2.3.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:508b0eada3eded10a3b55725b40806a4b855961040180028f52580c4729916a2", size = 14300374, upload-time = "2025-07-24T20:46:20.207Z" }, + { url = "https://files.pythonhosted.org/packages/f6/62/ff1e512cdbb829b80a6bd08318a58698867bca0ca2499d101b4af063ee97/numpy-2.3.2-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:754d6755d9a7588bdc6ac47dc4ee97867271b17cee39cb87aef079574366db0a", size = 5228864, upload-time = "2025-07-24T20:46:30.58Z" }, + { url = "https://files.pythonhosted.org/packages/7d/8e/74bc18078fff03192d4032cfa99d5a5ca937807136d6f5790ce07ca53515/numpy-2.3.2-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:a9f66e7d2b2d7712410d3bc5684149040ef5f19856f20277cd17ea83e5006286", size = 6737533, upload-time = "2025-07-24T20:46:46.111Z" }, + { url = "https://files.pythonhosted.org/packages/19/ea/0731efe2c9073ccca5698ef6a8c3667c4cf4eea53fcdcd0b50140aba03bc/numpy-2.3.2-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:de6ea4e5a65d5a90c7d286ddff2b87f3f4ad61faa3db8dabe936b34c2275b6f8", size = 14352007, upload-time = "2025-07-24T20:47:07.1Z" }, + { url = "https://files.pythonhosted.org/packages/cf/90/36be0865f16dfed20f4bc7f75235b963d5939707d4b591f086777412ff7b/numpy-2.3.2-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a3ef07ec8cbc8fc9e369c8dcd52019510c12da4de81367d8b20bc692aa07573a", size = 16701914, upload-time = "2025-07-24T20:47:32.459Z" }, + { url = "https://files.pythonhosted.org/packages/94/30/06cd055e24cb6c38e5989a9e747042b4e723535758e6153f11afea88c01b/numpy-2.3.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:27c9f90e7481275c7800dc9c24b7cc40ace3fdb970ae4d21eaff983a32f70c91", size = 16132708, upload-time = "2025-07-24T20:47:58.129Z" }, + { url = "https://files.pythonhosted.org/packages/9a/14/ecede608ea73e58267fd7cb78f42341b3b37ba576e778a1a06baffbe585c/numpy-2.3.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:07b62978075b67eee4065b166d000d457c82a1efe726cce608b9db9dd66a73a5", size = 18651678, upload-time = "2025-07-24T20:48:25.402Z" }, + { url = "https://files.pythonhosted.org/packages/40/f3/2fe6066b8d07c3685509bc24d56386534c008b462a488b7f503ba82b8923/numpy-2.3.2-cp313-cp313t-win32.whl", hash = "sha256:c771cfac34a4f2c0de8e8c97312d07d64fd8f8ed45bc9f5726a7e947270152b5", size = 6441832, upload-time = "2025-07-24T20:48:37.181Z" }, + { url = "https://files.pythonhosted.org/packages/0b/ba/0937d66d05204d8f28630c9c60bc3eda68824abde4cf756c4d6aad03b0c6/numpy-2.3.2-cp313-cp313t-win_amd64.whl", hash = "sha256:72dbebb2dcc8305c431b2836bcc66af967df91be793d63a24e3d9b741374c450", size = 12927049, upload-time = "2025-07-24T20:48:56.24Z" }, + { url = "https://files.pythonhosted.org/packages/e9/ed/13542dd59c104d5e654dfa2ac282c199ba64846a74c2c4bcdbc3a0f75df1/numpy-2.3.2-cp313-cp313t-win_arm64.whl", hash = "sha256:72c6df2267e926a6d5286b0a6d556ebe49eae261062059317837fda12ddf0c1a", size = 10262935, upload-time = "2025-07-24T20:49:13.136Z" }, + { url = "https://files.pythonhosted.org/packages/c9/7c/7659048aaf498f7611b783e000c7268fcc4dcf0ce21cd10aad7b2e8f9591/numpy-2.3.2-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:448a66d052d0cf14ce9865d159bfc403282c9bc7bb2a31b03cc18b651eca8b1a", size = 20950906, upload-time = "2025-07-24T20:50:30.346Z" }, + { url = "https://files.pythonhosted.org/packages/80/db/984bea9d4ddf7112a04cfdfb22b1050af5757864cfffe8e09e44b7f11a10/numpy-2.3.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:546aaf78e81b4081b2eba1d105c3b34064783027a06b3ab20b6eba21fb64132b", size = 14185607, upload-time = "2025-07-24T20:50:51.923Z" }, + { url = "https://files.pythonhosted.org/packages/e4/76/b3d6f414f4eca568f469ac112a3b510938d892bc5a6c190cb883af080b77/numpy-2.3.2-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:87c930d52f45df092f7578889711a0768094debf73cfcde105e2d66954358125", size = 5114110, upload-time = "2025-07-24T20:51:01.041Z" }, + { url = "https://files.pythonhosted.org/packages/9e/d2/6f5e6826abd6bca52392ed88fe44a4b52aacb60567ac3bc86c67834c3a56/numpy-2.3.2-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:8dc082ea901a62edb8f59713c6a7e28a85daddcb67454c839de57656478f5b19", size = 6642050, upload-time = "2025-07-24T20:51:11.64Z" }, + { url = "https://files.pythonhosted.org/packages/c4/43/f12b2ade99199e39c73ad182f103f9d9791f48d885c600c8e05927865baf/numpy-2.3.2-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:af58de8745f7fa9ca1c0c7c943616c6fe28e75d0c81f5c295810e3c83b5be92f", size = 14296292, upload-time = "2025-07-24T20:51:33.488Z" }, + { url = "https://files.pythonhosted.org/packages/5d/f9/77c07d94bf110a916b17210fac38680ed8734c236bfed9982fd8524a7b47/numpy-2.3.2-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fed5527c4cf10f16c6d0b6bee1f89958bccb0ad2522c8cadc2efd318bcd545f5", size = 16638913, upload-time = "2025-07-24T20:51:58.517Z" }, + { url = "https://files.pythonhosted.org/packages/9b/d1/9d9f2c8ea399cc05cfff8a7437453bd4e7d894373a93cdc46361bbb49a7d/numpy-2.3.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:095737ed986e00393ec18ec0b21b47c22889ae4b0cd2d5e88342e08b01141f58", size = 16071180, upload-time = "2025-07-24T20:52:22.827Z" }, + { url = "https://files.pythonhosted.org/packages/4c/41/82e2c68aff2a0c9bf315e47d61951099fed65d8cb2c8d9dc388cb87e947e/numpy-2.3.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:b5e40e80299607f597e1a8a247ff8d71d79c5b52baa11cc1cce30aa92d2da6e0", size = 18576809, upload-time = "2025-07-24T20:52:51.015Z" }, + { url = "https://files.pythonhosted.org/packages/14/14/4b4fd3efb0837ed252d0f583c5c35a75121038a8c4e065f2c259be06d2d8/numpy-2.3.2-cp314-cp314-win32.whl", hash = "sha256:7d6e390423cc1f76e1b8108c9b6889d20a7a1f59d9a60cac4a050fa734d6c1e2", size = 6366410, upload-time = "2025-07-24T20:56:44.949Z" }, + { url = "https://files.pythonhosted.org/packages/11/9e/b4c24a6b8467b61aced5c8dc7dcfce23621baa2e17f661edb2444a418040/numpy-2.3.2-cp314-cp314-win_amd64.whl", hash = "sha256:b9d0878b21e3918d76d2209c924ebb272340da1fb51abc00f986c258cd5e957b", size = 12918821, upload-time = "2025-07-24T20:57:06.479Z" }, + { url = "https://files.pythonhosted.org/packages/0e/0f/0dc44007c70b1007c1cef86b06986a3812dd7106d8f946c09cfa75782556/numpy-2.3.2-cp314-cp314-win_arm64.whl", hash = "sha256:2738534837c6a1d0c39340a190177d7d66fdf432894f469728da901f8f6dc910", size = 10477303, upload-time = "2025-07-24T20:57:22.879Z" }, + { url = "https://files.pythonhosted.org/packages/8b/3e/075752b79140b78ddfc9c0a1634d234cfdbc6f9bbbfa6b7504e445ad7d19/numpy-2.3.2-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:4d002ecf7c9b53240be3bb69d80f86ddbd34078bae04d87be81c1f58466f264e", size = 21047524, upload-time = "2025-07-24T20:53:22.086Z" }, + { url = "https://files.pythonhosted.org/packages/fe/6d/60e8247564a72426570d0e0ea1151b95ce5bd2f1597bb878a18d32aec855/numpy-2.3.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:293b2192c6bcce487dbc6326de5853787f870aeb6c43f8f9c6496db5b1781e45", size = 14300519, upload-time = "2025-07-24T20:53:44.053Z" }, + { url = "https://files.pythonhosted.org/packages/4d/73/d8326c442cd428d47a067070c3ac6cc3b651a6e53613a1668342a12d4479/numpy-2.3.2-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:0a4f2021a6da53a0d580d6ef5db29947025ae8b35b3250141805ea9a32bbe86b", size = 5228972, upload-time = "2025-07-24T20:53:53.81Z" }, + { url = "https://files.pythonhosted.org/packages/34/2e/e71b2d6dad075271e7079db776196829019b90ce3ece5c69639e4f6fdc44/numpy-2.3.2-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:9c144440db4bf3bb6372d2c3e49834cc0ff7bb4c24975ab33e01199e645416f2", size = 6737439, upload-time = "2025-07-24T20:54:04.742Z" }, + { url = "https://files.pythonhosted.org/packages/15/b0/d004bcd56c2c5e0500ffc65385eb6d569ffd3363cb5e593ae742749b2daa/numpy-2.3.2-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f92d6c2a8535dc4fe4419562294ff957f83a16ebdec66df0805e473ffaad8bd0", size = 14352479, upload-time = "2025-07-24T20:54:25.819Z" }, + { url = "https://files.pythonhosted.org/packages/11/e3/285142fcff8721e0c99b51686426165059874c150ea9ab898e12a492e291/numpy-2.3.2-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cefc2219baa48e468e3db7e706305fcd0c095534a192a08f31e98d83a7d45fb0", size = 16702805, upload-time = "2025-07-24T20:54:50.814Z" }, + { url = "https://files.pythonhosted.org/packages/33/c3/33b56b0e47e604af2c7cd065edca892d180f5899599b76830652875249a3/numpy-2.3.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:76c3e9501ceb50b2ff3824c3589d5d1ab4ac857b0ee3f8f49629d0de55ecf7c2", size = 16133830, upload-time = "2025-07-24T20:55:17.306Z" }, + { url = "https://files.pythonhosted.org/packages/6e/ae/7b1476a1f4d6a48bc669b8deb09939c56dd2a439db1ab03017844374fb67/numpy-2.3.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:122bf5ed9a0221b3419672493878ba4967121514b1d7d4656a7580cd11dddcbf", size = 18652665, upload-time = "2025-07-24T20:55:46.665Z" }, + { url = "https://files.pythonhosted.org/packages/14/ba/5b5c9978c4bb161034148ade2de9db44ec316fab89ce8c400db0e0c81f86/numpy-2.3.2-cp314-cp314t-win32.whl", hash = "sha256:6f1ae3dcb840edccc45af496f312528c15b1f79ac318169d094e85e4bb35fdf1", size = 6514777, upload-time = "2025-07-24T20:55:57.66Z" }, + { url = "https://files.pythonhosted.org/packages/eb/46/3dbaf0ae7c17cdc46b9f662c56da2054887b8d9e737c1476f335c83d33db/numpy-2.3.2-cp314-cp314t-win_amd64.whl", hash = "sha256:087ffc25890d89a43536f75c5fe8770922008758e8eeeef61733957041ed2f9b", size = 13111856, upload-time = "2025-07-24T20:56:17.318Z" }, + { url = "https://files.pythonhosted.org/packages/c1/9e/1652778bce745a67b5fe05adde60ed362d38eb17d919a540e813d30f6874/numpy-2.3.2-cp314-cp314t-win_arm64.whl", hash = "sha256:092aeb3449833ea9c0bf0089d70c29ae480685dd2377ec9cdbbb620257f84631", size = 10544226, upload-time = "2025-07-24T20:56:34.509Z" }, + { url = "https://files.pythonhosted.org/packages/cf/ea/50ebc91d28b275b23b7128ef25c3d08152bc4068f42742867e07a870a42a/numpy-2.3.2-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:14a91ebac98813a49bc6aa1a0dfc09513dcec1d97eaf31ca21a87221a1cdcb15", size = 21130338, upload-time = "2025-07-24T20:57:54.37Z" }, + { url = "https://files.pythonhosted.org/packages/9f/57/cdd5eac00dd5f137277355c318a955c0d8fb8aa486020c22afd305f8b88f/numpy-2.3.2-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:71669b5daae692189540cffc4c439468d35a3f84f0c88b078ecd94337f6cb0ec", size = 14375776, upload-time = "2025-07-24T20:58:16.303Z" }, + { url = "https://files.pythonhosted.org/packages/83/85/27280c7f34fcd305c2209c0cdca4d70775e4859a9eaa92f850087f8dea50/numpy-2.3.2-pp311-pypy311_pp73-macosx_14_0_arm64.whl", hash = "sha256:69779198d9caee6e547adb933941ed7520f896fd9656834c300bdf4dd8642712", size = 5304882, upload-time = "2025-07-24T20:58:26.199Z" }, + { url = "https://files.pythonhosted.org/packages/48/b4/6500b24d278e15dd796f43824e69939d00981d37d9779e32499e823aa0aa/numpy-2.3.2-pp311-pypy311_pp73-macosx_14_0_x86_64.whl", hash = "sha256:2c3271cc4097beb5a60f010bcc1cc204b300bb3eafb4399376418a83a1c6373c", size = 6818405, upload-time = "2025-07-24T20:58:37.341Z" }, + { url = "https://files.pythonhosted.org/packages/9b/c9/142c1e03f199d202da8e980c2496213509291b6024fd2735ad28ae7065c7/numpy-2.3.2-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8446acd11fe3dc1830568c941d44449fd5cb83068e5c70bd5a470d323d448296", size = 14419651, upload-time = "2025-07-24T20:58:59.048Z" }, + { url = "https://files.pythonhosted.org/packages/8b/95/8023e87cbea31a750a6c00ff9427d65ebc5fef104a136bfa69f76266d614/numpy-2.3.2-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:aa098a5ab53fa407fded5870865c6275a5cd4101cfdef8d6fafc48286a96e981", size = 16760166, upload-time = "2025-07-24T21:28:56.38Z" }, + { url = "https://files.pythonhosted.org/packages/78/e3/6690b3f85a05506733c7e90b577e4762517404ea78bab2ca3a5cb1aeb78d/numpy-2.3.2-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:6936aff90dda378c09bea075af0d9c675fe3a977a9d2402f95a87f440f59f619", size = 12977811, upload-time = "2025-07-24T21:29:18.234Z" }, +] + +[[package]] +name = "numpydoc" +version = "1.9.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "sphinx" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/2f/19/7721093e25804cc82c7c1cdab0cce6b9343451828fc2ce249cee10646db5/numpydoc-1.9.0.tar.gz", hash = "sha256:5fec64908fe041acc4b3afc2a32c49aab1540cf581876f5563d68bb129e27c5b", size = 91451, upload-time = "2025-06-24T12:22:55.283Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/26/62/5783d8924fca72529defb2c7dbe2070d49224d2dba03a85b20b37adb24d8/numpydoc-1.9.0-py3-none-any.whl", hash = "sha256:8a2983b2d62bfd0a8c470c7caa25e7e0c3d163875cdec12a8a1034020a9d1135", size = 64871, upload-time = "2025-06-24T12:22:53.701Z" }, +] + +[[package]] +name = "obstore" +version = "0.7.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions", marker = "python_full_version < '3.13'" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/44/e4/722ab931b8b2544f1d60bceceaa97d22d810f588f3a26ad64997213c2c4d/obstore-0.7.3-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:65ffe43fd63c9968172bed649fcaf6345b41a124be5d34f46adb94604e9ccef8", size = 3680639, upload-time = "2025-08-01T22:37:05.531Z" }, + { url = "https://files.pythonhosted.org/packages/f9/99/7f5efcc0110144f32152b23bd284927ee3f34b28962466b81aa98f8229fb/obstore-0.7.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2947609a1fab1f9b808235a8088e7e99814fbaf3b6000833d760fd90f68fa7cd", size = 3397505, upload-time = "2025-08-01T22:37:06.745Z" }, + { url = "https://files.pythonhosted.org/packages/15/84/0b21cb4fdeb1ca8aa256acb8cccabb7f0d450a36c03655512fcda308759e/obstore-0.7.3-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:15409f75acc4e10f924fe118f7018607d6d96a72330ac4cc1663d36b7c6847b1", size = 3554635, upload-time = "2025-08-01T22:37:08.27Z" }, + { url = "https://files.pythonhosted.org/packages/e5/eb/0e9ad4d31e49f8bed3d6f482261fcde5035667330d81348cc3ff041f6ef2/obstore-0.7.3-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5224d834bbe7a9f2592b130e4ddd86340fa172e5a3a51284e706f6515d95c036", size = 3703695, upload-time = "2025-08-01T22:37:09.51Z" }, + { url = "https://files.pythonhosted.org/packages/fa/f3/49e854c782076a2877d475089eebf3556a5658df0c0544f6182203af5eab/obstore-0.7.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7b1af6c1a33d98db9954f7ceab8eb5e543aea683a79a0ffd72b6c8d176834a9b", size = 3976486, upload-time = "2025-08-01T22:37:10.777Z" }, + { url = "https://files.pythonhosted.org/packages/38/16/518e9e47f0d486821a922e82fe7b1e382f8afb62468cd3129d06937d8403/obstore-0.7.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:708c27c4e5e85799fe7a2d2ae443fbd96c2ad36b561c815a9b01b5333ab536ad", size = 4011834, upload-time = "2025-08-01T22:37:12.136Z" }, + { url = "https://files.pythonhosted.org/packages/99/f8/585e3da7d1fc09965d78763ad68063a2fd7fe114e3953af26399db196e70/obstore-0.7.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7da327920bef8bbd02445f33947487fe4e94fcb9e084c810108e88be57d0877b", size = 3809352, upload-time = "2025-08-01T22:37:13.681Z" }, + { url = "https://files.pythonhosted.org/packages/d9/a2/4fa492ae67b0354f8415fec8b8ca928e94f4e07f8a12b4d7502a856915ce/obstore-0.7.3-cp311-cp311-manylinux_2_24_aarch64.whl", hash = "sha256:8f3b23a40ad374fe7a65fab4678a9978978ec83a597156a2a9d1dbeab433a469", size = 3579895, upload-time = "2025-08-01T22:37:15.243Z" }, + { url = "https://files.pythonhosted.org/packages/b4/35/a8034730b2f7d71268f5685fefc5b37eee589d404e5face79bc38ecd1698/obstore-0.7.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:9b3e7d0c7e85e4f67e479f7efab5dea26ceaace10897d639d38f77831ef0cdaf", size = 3742907, upload-time = "2025-08-01T22:37:16.429Z" }, + { url = "https://files.pythonhosted.org/packages/96/ca/3174ccc5d3d0f91ff1b6f0f258c795671d5a3bb64f8d72937b44733bdc78/obstore-0.7.3-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:dfee24c5e9d5b7e0f43e4bbf8cc15069e5c60bfdb86873ce97c0eb487afa5da8", size = 3778325, upload-time = "2025-08-01T22:37:17.669Z" }, + { url = "https://files.pythonhosted.org/packages/53/5c/0cba21607f2a294fc0b6fab3a4ddf5eafe94de384c0212cea6977a4bc3ee/obstore-0.7.3-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:99e187cee4a6e13605886b906b34fec7ae9902dd25b1e9aafae863a9d55c6e47", size = 3784247, upload-time = "2025-08-01T22:37:18.954Z" }, + { url = "https://files.pythonhosted.org/packages/f8/87/886402bf40643163a8042da602cdc8ce3b9355062e7c6930af8e5567f6d3/obstore-0.7.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a5de3b0859512b9ddbf57ac34db96ad41fb85fc9597e422916044d1bf550427d", size = 3983087, upload-time = "2025-08-01T22:37:20.194Z" }, + { url = "https://files.pythonhosted.org/packages/69/d5/95b9bfdbb449795d1a6e312dd6ac4469b31b3df5807d85321d6e6762f264/obstore-0.7.3-cp311-cp311-win_amd64.whl", hash = "sha256:35fdd1cd8856984de1b5a11fced83f6fd6623eb459736e57b9975400ff5baf5a", size = 4038939, upload-time = "2025-08-01T22:37:21.411Z" }, + { url = "https://files.pythonhosted.org/packages/98/29/1ba71bad5aa3cd01b6849490f4e8457b4253c60322b70014c5155bce0549/obstore-0.7.3-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:6cbe5dde68bf6ab5a88f3bb467ca8f123bcce3efc03e22fd8339688559d36199", size = 3676670, upload-time = "2025-08-01T22:37:22.904Z" }, + { url = "https://files.pythonhosted.org/packages/26/5f/abea8b6261c0117ff3f7b1da34185806cc7fb0958dd2eec5f25b43d4134c/obstore-0.7.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a6db23cbcb3aec10e09a31fd0883950cb9b7f77f4fcf1fb0e8a276e1d1961bf3", size = 3387707, upload-time = "2025-08-01T22:37:24.804Z" }, + { url = "https://files.pythonhosted.org/packages/ad/a7/6fe561c2dab64ce69ed05e76902c6eb9ce82c934bd3b3e6e796a2897dd62/obstore-0.7.3-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:00fde287770bdbdbb06379670d30c257b20e77a4a11b36f1e232b5bc6ef07b7a", size = 3558626, upload-time = "2025-08-01T22:37:26.058Z" }, + { url = "https://files.pythonhosted.org/packages/ed/83/f0c25dcce75e5297cba2a8ecb93198b01f4ff7af699fa1296207e30bf02e/obstore-0.7.3-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c420036356269666197f0704392c9495f255bb3ff9b667c69fb49bc65bd50dcd", size = 3706975, upload-time = "2025-08-01T22:37:27.306Z" }, + { url = "https://files.pythonhosted.org/packages/da/6d/029a65fa2c51443d27d5a6f57a76becc51793d0a53ea0efac2e4fbce3eda/obstore-0.7.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c28482626ca9481569ad16ba0c0c36947ce96e8147c64011dc0af6d58be8ff9c", size = 3973329, upload-time = "2025-08-01T22:37:28.592Z" }, + { url = "https://files.pythonhosted.org/packages/b1/d6/0e49f9d6c5e9d0021722c5e3ad7402d8457ffe2743fe245a1b16fc9caf72/obstore-0.7.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9cead20055221337ddf218098afe8138f8624395b0cf2a730da72a4523c11b2f", size = 4021499, upload-time = "2025-08-01T22:37:30.135Z" }, + { url = "https://files.pythonhosted.org/packages/f6/8e/daf5d23477c14cd52525b6e8d5046106e37fbf4f4e62fc0a4c0952c7e229/obstore-0.7.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c71017142a593022848f4af0ac1e39af1a56927981cc2c89542888edb206eb33", size = 3806108, upload-time = "2025-08-01T22:37:31.438Z" }, + { url = "https://files.pythonhosted.org/packages/23/a5/123bcc4b0762e479f9bc443b8a91885c90cc92e844543c2f87d48b1b674e/obstore-0.7.3-cp312-cp312-manylinux_2_24_aarch64.whl", hash = "sha256:8aebc2bf796a0d1525318a9ac69608a96d03abc621ca1e6d810e08a70bd695c1", size = 3576246, upload-time = "2025-08-01T22:37:32.698Z" }, + { url = "https://files.pythonhosted.org/packages/71/29/c2fc9ebdb84bddf25a644ee15d5855d8c5e29218dd6ee7877a3378b0094d/obstore-0.7.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:c0ebf03969b81ee559c377c5ebca9dcdffbef0e6650d43659676aeaeb302a272", size = 3739761, upload-time = "2025-08-01T22:37:33.961Z" }, + { url = "https://files.pythonhosted.org/packages/14/be/a04542e8f37b547fa8720d518c333760f90323cbd392e60bf48d1631e965/obstore-0.7.3-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:e0f5d97064ec35fdef3079f867afe6fa5e76ab2bb3e809855ab34a1aa34c9dcd", size = 3784232, upload-time = "2025-08-01T22:37:35.223Z" }, + { url = "https://files.pythonhosted.org/packages/05/d9/d164f871f9dd91fc5870171a3c60f5986d5f9f98a6e58da4663bbe16a662/obstore-0.7.3-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:3a80541671646c5e49493de61361a1851c8c172cf28981b76aa4248a9f02f5b1", size = 3788418, upload-time = "2025-08-01T22:37:36.418Z" }, + { url = "https://files.pythonhosted.org/packages/78/9e/59701156233d94b4654637424890188bb5e1154ea53260a93016084ce423/obstore-0.7.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a5ce6385ad89afad106d05d37296f724ba10f8f4e57ab8ad7f4ecce0aa226d3d", size = 3976968, upload-time = "2025-08-01T22:37:37.702Z" }, + { url = "https://files.pythonhosted.org/packages/a2/fe/d551a770ae10fe2ca5feb5c7256c777219614297c6e45d6714ade9b43fbf/obstore-0.7.3-cp312-cp312-win_amd64.whl", hash = "sha256:632522ba63a44768977defc0a93fc5dd59ea0455bfd6926cd3121971306da4e5", size = 4050093, upload-time = "2025-08-01T22:37:38.962Z" }, + { url = "https://files.pythonhosted.org/packages/2a/ef/491cf28be51301aa9695d8448c4e6489956c162564dbdf4f21836696e294/obstore-0.7.3-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:dcb71412dc8d2bd464b340d1f36d8c0ceb7894c01c2ceaaa5f2ac45376503fa2", size = 3676519, upload-time = "2025-08-01T22:37:40.194Z" }, + { url = "https://files.pythonhosted.org/packages/f0/12/41c51cca59784d2b6c60a99a2a010f8e73a089416d288db12d91cbcdbd02/obstore-0.7.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:6d486bb01438039d686401ce4207d82c02b8b639227baa5bdd578efdab388dea", size = 3387665, upload-time = "2025-08-01T22:37:41.431Z" }, + { url = "https://files.pythonhosted.org/packages/cb/27/9aac5a70c6d4a496a837748bc9368e7825dc58761711d5f65cc8bc9d3765/obstore-0.7.3-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fcaaf0c9223b5592658c131ff32a0574be995c7e237f406266f9a68ea2266769", size = 3558354, upload-time = "2025-08-01T22:37:42.678Z" }, + { url = "https://files.pythonhosted.org/packages/f2/04/70e6cf1931d56db2f86a359ea171aa403146c04faf20aeb025eeabe254dd/obstore-0.7.3-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e8ae6cde734df3cc542c14152029170d9ae70ce50b957831ed71073113bd3d60", size = 3706831, upload-time = "2025-08-01T22:37:44.415Z" }, + { url = "https://files.pythonhosted.org/packages/e9/a9/758920c8c7256f0cd366a3b0063247a197d9a1e2e189e2309400022787c5/obstore-0.7.3-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:30da82ae3bfdf24fa80af38967e323ae8da0bb7c36cce01f0dda7689faaf1272", size = 3973250, upload-time = "2025-08-01T22:37:45.631Z" }, + { url = "https://files.pythonhosted.org/packages/59/f8/5a6a831d7328a4351caab13ba7faf47cb1bdcb5afba2e46535386ccf1170/obstore-0.7.3-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b5daa9f912eac8cdf218161d34e13f38cbb594e934eaaf8a7c09dca5a394b231", size = 4030160, upload-time = "2025-08-01T22:37:47.208Z" }, + { url = "https://files.pythonhosted.org/packages/67/7d/698e4851049999b4a8ff9622ece0cba86e64c4242fa981e21f9832bdd378/obstore-0.7.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ef06cad4e8978d672357b328b4f61c48827b2b79d7eaf58b68ee31ac0e652b8", size = 3805594, upload-time = "2025-08-01T22:37:48.699Z" }, + { url = "https://files.pythonhosted.org/packages/b4/a6/4a9290cac8aaa16a7ce9aec6e8a001ed0d0ed42d1e49570c6770d31f693c/obstore-0.7.3-cp313-cp313-manylinux_2_24_aarch64.whl", hash = "sha256:d34920539a94da2b87195787b80004960638dfd0aa2f4369fc9239e0a41470a8", size = 3575482, upload-time = "2025-08-01T22:37:50.216Z" }, + { url = "https://files.pythonhosted.org/packages/e6/c9/87f7c88daf07a52b5d86a9de0664574ee0dea2f5e6cd26a91ad4688b53fb/obstore-0.7.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:6dfcdaa779f376745ff493cce7f19cbbe8d75f68304bf1062e757ab60bd62de1", size = 3739411, upload-time = "2025-08-01T22:37:51.483Z" }, + { url = "https://files.pythonhosted.org/packages/69/58/1163bcb48e80e220ef6010130880d24a75239025fde1092356ce71b6efee/obstore-0.7.3-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:ae095f679e4796b8f6ef80ed3813ddd14a477ae219a0c059c23cf294f9288ded", size = 3783914, upload-time = "2025-08-01T22:37:52.857Z" }, + { url = "https://files.pythonhosted.org/packages/75/a2/f5b68265a6ea248adbd4e2f9db2dae7d727ab6ac53a63dfebcf28f1aacea/obstore-0.7.3-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:6def59e79c19b8804743fec6407f542b387dc1630c2254412ae8bd3a0b98e7e4", size = 3787905, upload-time = "2025-08-01T22:37:54.414Z" }, + { url = "https://files.pythonhosted.org/packages/8b/2c/23b671c7eaf37097fe9c3c2cc925c466135d4866e2009444daf91f180fed/obstore-0.7.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f97797c42476ab19853ef4a161b903eaf96c2363a23b9e0187d66b0daee350cb", size = 3976888, upload-time = "2025-08-01T22:37:55.681Z" }, + { url = "https://files.pythonhosted.org/packages/42/10/5f352e6dd1388f5c8931261357e111a6923121d937a1ebad09f4cf391418/obstore-0.7.3-cp313-cp313-win_amd64.whl", hash = "sha256:8f0ecc01b1444bc08ff98e368b80ea2c085a7783621075298e86d3aba96f8e27", size = 4050018, upload-time = "2025-08-01T22:37:57.285Z" }, +] + +[[package]] +name = "openapi-schema-validator" +version = "0.6.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "jsonschema" }, + { name = "jsonschema-specifications" }, + { name = "rfc3339-validator" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/8b/f3/5507ad3325169347cd8ced61c232ff3df70e2b250c49f0fe140edb4973c6/openapi_schema_validator-0.6.3.tar.gz", hash = "sha256:f37bace4fc2a5d96692f4f8b31dc0f8d7400fd04f3a937798eaf880d425de6ee", size = 11550, upload-time = "2025-01-10T18:08:22.268Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/21/c6/ad0fba32775ae749016829dace42ed80f4407b171da41313d1a3a5f102e4/openapi_schema_validator-0.6.3-py3-none-any.whl", hash = "sha256:f3b9870f4e556b5a62a1c39da72a6b4b16f3ad9c73dc80084b1b11e74ba148a3", size = 8755, upload-time = "2025-01-10T18:08:19.758Z" }, +] + +[[package]] +name = "openapi-spec-validator" +version = "0.7.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "jsonschema" }, + { name = "jsonschema-path" }, + { name = "lazy-object-proxy" }, + { name = "openapi-schema-validator" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/82/af/fe2d7618d6eae6fb3a82766a44ed87cd8d6d82b4564ed1c7cfb0f6378e91/openapi_spec_validator-0.7.2.tar.gz", hash = "sha256:cc029309b5c5dbc7859df0372d55e9d1ff43e96d678b9ba087f7c56fc586f734", size = 36855, upload-time = "2025-06-07T14:48:56.299Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/27/dd/b3fd642260cb17532f66cc1e8250f3507d1e580483e209dc1e9d13bd980d/openapi_spec_validator-0.7.2-py3-none-any.whl", hash = "sha256:4bbdc0894ec85f1d1bea1d6d9c8b2c3c8d7ccaa13577ef40da9c006c9fd0eb60", size = 39713, upload-time = "2025-06-07T14:48:54.077Z" }, +] + +[[package]] +name = "packaging" +version = "25.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a1/d4/1fc4078c65507b51b96ca8f8c3ba19e6a61c8253c72794544580a7b6c24d/packaging-25.0.tar.gz", hash = "sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f", size = 165727, upload-time = "2025-04-19T11:48:59.673Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl", hash = "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484", size = 66469, upload-time = "2025-04-19T11:48:57.875Z" }, +] + +[[package]] +name = "parso" +version = "0.8.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/66/94/68e2e17afaa9169cf6412ab0f28623903be73d1b32e208d9e8e541bb086d/parso-0.8.4.tar.gz", hash = "sha256:eb3a7b58240fb99099a345571deecc0f9540ea5f4dd2fe14c2a99d6b281ab92d", size = 400609, upload-time = "2024-04-05T09:43:55.897Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c6/ac/dac4a63f978e4dcb3c6d3a78c4d8e0192a113d288502a1216950c41b1027/parso-0.8.4-py2.py3-none-any.whl", hash = "sha256:a418670a20291dacd2dddc80c377c5c3791378ee1e8d12bffc35420643d43f18", size = 103650, upload-time = "2024-04-05T09:43:53.299Z" }, +] + +[[package]] +name = "pathable" +version = "0.4.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/67/93/8f2c2075b180c12c1e9f6a09d1a985bc2036906b13dff1d8917e395f2048/pathable-0.4.4.tar.gz", hash = "sha256:6905a3cd17804edfac7875b5f6c9142a218c7caef78693c2dbbbfbac186d88b2", size = 8124, upload-time = "2025-01-10T18:43:13.247Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7d/eb/b6260b31b1a96386c0a880edebe26f89669098acea8e0318bff6adb378fd/pathable-0.4.4-py3-none-any.whl", hash = "sha256:5ae9e94793b6ef5a4cbe0a7ce9dbbefc1eec38df253763fd0aeeacf2762dbbc2", size = 9592, upload-time = "2025-01-10T18:43:11.88Z" }, +] + +[[package]] +name = "pathspec" +version = "0.12.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ca/bc/f35b8446f4531a7cb215605d100cd88b7ac6f44ab3fc94870c120ab3adbf/pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712", size = 51043, upload-time = "2023-12-10T22:30:45Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cc/20/ff623b09d963f88bfde16306a54e12ee5ea43e9b597108672ff3a408aad6/pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08", size = 31191, upload-time = "2023-12-10T22:30:43.14Z" }, +] + +[[package]] +name = "pexpect" +version = "4.9.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "ptyprocess" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/42/92/cc564bf6381ff43ce1f4d06852fc19a2f11d180f23dc32d9588bee2f149d/pexpect-4.9.0.tar.gz", hash = "sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f", size = 166450, upload-time = "2023-11-25T09:07:26.339Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9e/c3/059298687310d527a58bb01f3b1965787ee3b40dce76752eda8b44e9a2c5/pexpect-4.9.0-py2.py3-none-any.whl", hash = "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523", size = 63772, upload-time = "2023-11-25T06:56:14.81Z" }, +] + +[[package]] +name = "pip" +version = "25.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/20/16/650289cd3f43d5a2fadfd98c68bd1e1e7f2550a1a5326768cddfbcedb2c5/pip-25.2.tar.gz", hash = "sha256:578283f006390f85bb6282dffb876454593d637f5d1be494b5202ce4877e71f2", size = 1840021, upload-time = "2025-07-30T21:50:15.401Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b7/3f/945ef7ab14dc4f9d7f40288d2df998d1837ee0888ec3659c813487572faa/pip-25.2-py3-none-any.whl", hash = "sha256:6d67a2b4e7f14d8b31b8b52648866fa717f45a1eb70e83002f4331d07e953717", size = 1752557, upload-time = "2025-07-30T21:50:13.323Z" }, +] + +[[package]] +name = "platformdirs" +version = "4.3.8" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/fe/8b/3c73abc9c759ecd3f1f7ceff6685840859e8070c4d947c93fae71f6a0bf2/platformdirs-4.3.8.tar.gz", hash = "sha256:3d512d96e16bcb959a814c9f348431070822a6496326a4be0911c40b5a74c2bc", size = 21362, upload-time = "2025-05-07T22:47:42.121Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fe/39/979e8e21520d4e47a0bbe349e2713c0aac6f3d853d0e5b34d76206c439aa/platformdirs-4.3.8-py3-none-any.whl", hash = "sha256:ff7059bb7eb1179e2685604f4aaf157cfd9535242bd23742eadc3c13542139b4", size = 18567, upload-time = "2025-05-07T22:47:40.376Z" }, +] + +[[package]] +name = "pluggy" +version = "1.6.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f9/e2/3e91f31a7d2b083fe6ef3fa267035b518369d9511ffab804f839851d2779/pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3", size = 69412, upload-time = "2025-05-15T12:30:07.975Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746", size = 20538, upload-time = "2025-05-15T12:30:06.134Z" }, +] + +[[package]] +name = "ply" +version = "3.11" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e5/69/882ee5c9d017149285cab114ebeab373308ef0f874fcdac9beb90e0ac4da/ply-3.11.tar.gz", hash = "sha256:00c7c1aaa88358b9c765b6d3000c6eec0ba42abca5351b095321aef446081da3", size = 159130, upload-time = "2018-02-15T19:01:31.097Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a3/58/35da89ee790598a0700ea49b2a66594140f44dec458c07e8e3d4979137fc/ply-3.11-py2.py3-none-any.whl", hash = "sha256:096f9b8350b65ebd2fd1346b12452efe5b9607f7482813ffca50c22722a807ce", size = 49567, upload-time = "2018-02-15T19:01:27.172Z" }, +] + +[[package]] +name = "prompt-toolkit" +version = "3.0.51" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "wcwidth" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/bb/6e/9d084c929dfe9e3bfe0c6a47e31f78a25c54627d64a66e884a8bf5474f1c/prompt_toolkit-3.0.51.tar.gz", hash = "sha256:931a162e3b27fc90c86f1b48bb1fb2c528c2761475e57c9c06de13311c7b54ed", size = 428940, upload-time = "2025-04-15T09:18:47.731Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ce/4f/5249960887b1fbe561d9ff265496d170b55a735b76724f10ef19f9e40716/prompt_toolkit-3.0.51-py3-none-any.whl", hash = "sha256:52742911fde84e2d423e2f9a4cf1de7d7ac4e51958f648d9540e0fb8db077b07", size = 387810, upload-time = "2025-04-15T09:18:44.753Z" }, +] + +[[package]] +name = "propcache" +version = "0.3.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a6/16/43264e4a779dd8588c21a70f0709665ee8f611211bdd2c87d952cfa7c776/propcache-0.3.2.tar.gz", hash = "sha256:20d7d62e4e7ef05f221e0db2856b979540686342e7dd9973b815599c7057e168", size = 44139, upload-time = "2025-06-09T22:56:06.081Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/80/8d/e8b436717ab9c2cfc23b116d2c297305aa4cd8339172a456d61ebf5669b8/propcache-0.3.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0b8d2f607bd8f80ddc04088bc2a037fdd17884a6fcadc47a96e334d72f3717be", size = 74207, upload-time = "2025-06-09T22:54:05.399Z" }, + { url = "https://files.pythonhosted.org/packages/d6/29/1e34000e9766d112171764b9fa3226fa0153ab565d0c242c70e9945318a7/propcache-0.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:06766d8f34733416e2e34f46fea488ad5d60726bb9481d3cddf89a6fa2d9603f", size = 43648, upload-time = "2025-06-09T22:54:08.023Z" }, + { url = "https://files.pythonhosted.org/packages/46/92/1ad5af0df781e76988897da39b5f086c2bf0f028b7f9bd1f409bb05b6874/propcache-0.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a2dc1f4a1df4fecf4e6f68013575ff4af84ef6f478fe5344317a65d38a8e6dc9", size = 43496, upload-time = "2025-06-09T22:54:09.228Z" }, + { url = "https://files.pythonhosted.org/packages/b3/ce/e96392460f9fb68461fabab3e095cb00c8ddf901205be4eae5ce246e5b7e/propcache-0.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:be29c4f4810c5789cf10ddf6af80b041c724e629fa51e308a7a0fb19ed1ef7bf", size = 217288, upload-time = "2025-06-09T22:54:10.466Z" }, + { url = "https://files.pythonhosted.org/packages/c5/2a/866726ea345299f7ceefc861a5e782b045545ae6940851930a6adaf1fca6/propcache-0.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:59d61f6970ecbd8ff2e9360304d5c8876a6abd4530cb752c06586849ac8a9dc9", size = 227456, upload-time = "2025-06-09T22:54:11.828Z" }, + { url = "https://files.pythonhosted.org/packages/de/03/07d992ccb6d930398689187e1b3c718339a1c06b8b145a8d9650e4726166/propcache-0.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:62180e0b8dbb6b004baec00a7983e4cc52f5ada9cd11f48c3528d8cfa7b96a66", size = 225429, upload-time = "2025-06-09T22:54:13.823Z" }, + { url = "https://files.pythonhosted.org/packages/5d/e6/116ba39448753b1330f48ab8ba927dcd6cf0baea8a0ccbc512dfb49ba670/propcache-0.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c144ca294a204c470f18cf4c9d78887810d04a3e2fbb30eea903575a779159df", size = 213472, upload-time = "2025-06-09T22:54:15.232Z" }, + { url = "https://files.pythonhosted.org/packages/a6/85/f01f5d97e54e428885a5497ccf7f54404cbb4f906688a1690cd51bf597dc/propcache-0.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c5c2a784234c28854878d68978265617aa6dc0780e53d44b4d67f3651a17a9a2", size = 204480, upload-time = "2025-06-09T22:54:17.104Z" }, + { url = "https://files.pythonhosted.org/packages/e3/79/7bf5ab9033b8b8194cc3f7cf1aaa0e9c3256320726f64a3e1f113a812dce/propcache-0.3.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:5745bc7acdafa978ca1642891b82c19238eadc78ba2aaa293c6863b304e552d7", size = 214530, upload-time = "2025-06-09T22:54:18.512Z" }, + { url = "https://files.pythonhosted.org/packages/31/0b/bd3e0c00509b609317df4a18e6b05a450ef2d9a963e1d8bc9c9415d86f30/propcache-0.3.2-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:c0075bf773d66fa8c9d41f66cc132ecc75e5bb9dd7cce3cfd14adc5ca184cb95", size = 205230, upload-time = "2025-06-09T22:54:19.947Z" }, + { url = "https://files.pythonhosted.org/packages/7a/23/fae0ff9b54b0de4e819bbe559508da132d5683c32d84d0dc2ccce3563ed4/propcache-0.3.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:5f57aa0847730daceff0497f417c9de353c575d8da3579162cc74ac294c5369e", size = 206754, upload-time = "2025-06-09T22:54:21.716Z" }, + { url = "https://files.pythonhosted.org/packages/b7/7f/ad6a3c22630aaa5f618b4dc3c3598974a72abb4c18e45a50b3cdd091eb2f/propcache-0.3.2-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:eef914c014bf72d18efb55619447e0aecd5fb7c2e3fa7441e2e5d6099bddff7e", size = 218430, upload-time = "2025-06-09T22:54:23.17Z" }, + { url = "https://files.pythonhosted.org/packages/5b/2c/ba4f1c0e8a4b4c75910742f0d333759d441f65a1c7f34683b4a74c0ee015/propcache-0.3.2-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:2a4092e8549031e82facf3decdbc0883755d5bbcc62d3aea9d9e185549936dcf", size = 223884, upload-time = "2025-06-09T22:54:25.539Z" }, + { url = "https://files.pythonhosted.org/packages/88/e4/ebe30fc399e98572019eee82ad0caf512401661985cbd3da5e3140ffa1b0/propcache-0.3.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:85871b050f174bc0bfb437efbdb68aaf860611953ed12418e4361bc9c392749e", size = 211480, upload-time = "2025-06-09T22:54:26.892Z" }, + { url = "https://files.pythonhosted.org/packages/96/0a/7d5260b914e01d1d0906f7f38af101f8d8ed0dc47426219eeaf05e8ea7c2/propcache-0.3.2-cp311-cp311-win32.whl", hash = "sha256:36c8d9b673ec57900c3554264e630d45980fd302458e4ac801802a7fd2ef7897", size = 37757, upload-time = "2025-06-09T22:54:28.241Z" }, + { url = "https://files.pythonhosted.org/packages/e1/2d/89fe4489a884bc0da0c3278c552bd4ffe06a1ace559db5ef02ef24ab446b/propcache-0.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:e53af8cb6a781b02d2ea079b5b853ba9430fcbe18a8e3ce647d5982a3ff69f39", size = 41500, upload-time = "2025-06-09T22:54:29.4Z" }, + { url = "https://files.pythonhosted.org/packages/a8/42/9ca01b0a6f48e81615dca4765a8f1dd2c057e0540f6116a27dc5ee01dfb6/propcache-0.3.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:8de106b6c84506b31c27168582cd3cb3000a6412c16df14a8628e5871ff83c10", size = 73674, upload-time = "2025-06-09T22:54:30.551Z" }, + { url = "https://files.pythonhosted.org/packages/af/6e/21293133beb550f9c901bbece755d582bfaf2176bee4774000bd4dd41884/propcache-0.3.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:28710b0d3975117239c76600ea351934ac7b5ff56e60953474342608dbbb6154", size = 43570, upload-time = "2025-06-09T22:54:32.296Z" }, + { url = "https://files.pythonhosted.org/packages/0c/c8/0393a0a3a2b8760eb3bde3c147f62b20044f0ddac81e9d6ed7318ec0d852/propcache-0.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ce26862344bdf836650ed2487c3d724b00fbfec4233a1013f597b78c1cb73615", size = 43094, upload-time = "2025-06-09T22:54:33.929Z" }, + { url = "https://files.pythonhosted.org/packages/37/2c/489afe311a690399d04a3e03b069225670c1d489eb7b044a566511c1c498/propcache-0.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bca54bd347a253af2cf4544bbec232ab982f4868de0dd684246b67a51bc6b1db", size = 226958, upload-time = "2025-06-09T22:54:35.186Z" }, + { url = "https://files.pythonhosted.org/packages/9d/ca/63b520d2f3d418c968bf596839ae26cf7f87bead026b6192d4da6a08c467/propcache-0.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:55780d5e9a2ddc59711d727226bb1ba83a22dd32f64ee15594b9392b1f544eb1", size = 234894, upload-time = "2025-06-09T22:54:36.708Z" }, + { url = "https://files.pythonhosted.org/packages/11/60/1d0ed6fff455a028d678df30cc28dcee7af77fa2b0e6962ce1df95c9a2a9/propcache-0.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:035e631be25d6975ed87ab23153db6a73426a48db688070d925aa27e996fe93c", size = 233672, upload-time = "2025-06-09T22:54:38.062Z" }, + { url = "https://files.pythonhosted.org/packages/37/7c/54fd5301ef38505ab235d98827207176a5c9b2aa61939b10a460ca53e123/propcache-0.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ee6f22b6eaa39297c751d0e80c0d3a454f112f5c6481214fcf4c092074cecd67", size = 224395, upload-time = "2025-06-09T22:54:39.634Z" }, + { url = "https://files.pythonhosted.org/packages/ee/1a/89a40e0846f5de05fdc6779883bf46ba980e6df4d2ff8fb02643de126592/propcache-0.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7ca3aee1aa955438c4dba34fc20a9f390e4c79967257d830f137bd5a8a32ed3b", size = 212510, upload-time = "2025-06-09T22:54:41.565Z" }, + { url = "https://files.pythonhosted.org/packages/5e/33/ca98368586c9566a6b8d5ef66e30484f8da84c0aac3f2d9aec6d31a11bd5/propcache-0.3.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:7a4f30862869fa2b68380d677cc1c5fcf1e0f2b9ea0cf665812895c75d0ca3b8", size = 222949, upload-time = "2025-06-09T22:54:43.038Z" }, + { url = "https://files.pythonhosted.org/packages/ba/11/ace870d0aafe443b33b2f0b7efdb872b7c3abd505bfb4890716ad7865e9d/propcache-0.3.2-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:b77ec3c257d7816d9f3700013639db7491a434644c906a2578a11daf13176251", size = 217258, upload-time = "2025-06-09T22:54:44.376Z" }, + { url = "https://files.pythonhosted.org/packages/5b/d2/86fd6f7adffcfc74b42c10a6b7db721d1d9ca1055c45d39a1a8f2a740a21/propcache-0.3.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:cab90ac9d3f14b2d5050928483d3d3b8fb6b4018893fc75710e6aa361ecb2474", size = 213036, upload-time = "2025-06-09T22:54:46.243Z" }, + { url = "https://files.pythonhosted.org/packages/07/94/2d7d1e328f45ff34a0a284cf5a2847013701e24c2a53117e7c280a4316b3/propcache-0.3.2-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:0b504d29f3c47cf6b9e936c1852246c83d450e8e063d50562115a6be6d3a2535", size = 227684, upload-time = "2025-06-09T22:54:47.63Z" }, + { url = "https://files.pythonhosted.org/packages/b7/05/37ae63a0087677e90b1d14710e532ff104d44bc1efa3b3970fff99b891dc/propcache-0.3.2-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:ce2ac2675a6aa41ddb2a0c9cbff53780a617ac3d43e620f8fd77ba1c84dcfc06", size = 234562, upload-time = "2025-06-09T22:54:48.982Z" }, + { url = "https://files.pythonhosted.org/packages/a4/7c/3f539fcae630408d0bd8bf3208b9a647ccad10976eda62402a80adf8fc34/propcache-0.3.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:62b4239611205294cc433845b914131b2a1f03500ff3c1ed093ed216b82621e1", size = 222142, upload-time = "2025-06-09T22:54:50.424Z" }, + { url = "https://files.pythonhosted.org/packages/7c/d2/34b9eac8c35f79f8a962546b3e97e9d4b990c420ee66ac8255d5d9611648/propcache-0.3.2-cp312-cp312-win32.whl", hash = "sha256:df4a81b9b53449ebc90cc4deefb052c1dd934ba85012aa912c7ea7b7e38b60c1", size = 37711, upload-time = "2025-06-09T22:54:52.072Z" }, + { url = "https://files.pythonhosted.org/packages/19/61/d582be5d226cf79071681d1b46b848d6cb03d7b70af7063e33a2787eaa03/propcache-0.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:7046e79b989d7fe457bb755844019e10f693752d169076138abf17f31380800c", size = 41479, upload-time = "2025-06-09T22:54:53.234Z" }, + { url = "https://files.pythonhosted.org/packages/dc/d1/8c747fafa558c603c4ca19d8e20b288aa0c7cda74e9402f50f31eb65267e/propcache-0.3.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ca592ed634a73ca002967458187109265e980422116c0a107cf93d81f95af945", size = 71286, upload-time = "2025-06-09T22:54:54.369Z" }, + { url = "https://files.pythonhosted.org/packages/61/99/d606cb7986b60d89c36de8a85d58764323b3a5ff07770a99d8e993b3fa73/propcache-0.3.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:9ecb0aad4020e275652ba3975740f241bd12a61f1a784df044cf7477a02bc252", size = 42425, upload-time = "2025-06-09T22:54:55.642Z" }, + { url = "https://files.pythonhosted.org/packages/8c/96/ef98f91bbb42b79e9bb82bdd348b255eb9d65f14dbbe3b1594644c4073f7/propcache-0.3.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:7f08f1cc28bd2eade7a8a3d2954ccc673bb02062e3e7da09bc75d843386b342f", size = 41846, upload-time = "2025-06-09T22:54:57.246Z" }, + { url = "https://files.pythonhosted.org/packages/5b/ad/3f0f9a705fb630d175146cd7b1d2bf5555c9beaed54e94132b21aac098a6/propcache-0.3.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d1a342c834734edb4be5ecb1e9fb48cb64b1e2320fccbd8c54bf8da8f2a84c33", size = 208871, upload-time = "2025-06-09T22:54:58.975Z" }, + { url = "https://files.pythonhosted.org/packages/3a/38/2085cda93d2c8b6ec3e92af2c89489a36a5886b712a34ab25de9fbca7992/propcache-0.3.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8a544caaae1ac73f1fecfae70ded3e93728831affebd017d53449e3ac052ac1e", size = 215720, upload-time = "2025-06-09T22:55:00.471Z" }, + { url = "https://files.pythonhosted.org/packages/61/c1/d72ea2dc83ac7f2c8e182786ab0fc2c7bd123a1ff9b7975bee671866fe5f/propcache-0.3.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:310d11aa44635298397db47a3ebce7db99a4cc4b9bbdfcf6c98a60c8d5261cf1", size = 215203, upload-time = "2025-06-09T22:55:01.834Z" }, + { url = "https://files.pythonhosted.org/packages/af/81/b324c44ae60c56ef12007105f1460d5c304b0626ab0cc6b07c8f2a9aa0b8/propcache-0.3.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c1396592321ac83157ac03a2023aa6cc4a3cc3cfdecb71090054c09e5a7cce3", size = 206365, upload-time = "2025-06-09T22:55:03.199Z" }, + { url = "https://files.pythonhosted.org/packages/09/73/88549128bb89e66d2aff242488f62869014ae092db63ccea53c1cc75a81d/propcache-0.3.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8cabf5b5902272565e78197edb682017d21cf3b550ba0460ee473753f28d23c1", size = 196016, upload-time = "2025-06-09T22:55:04.518Z" }, + { url = "https://files.pythonhosted.org/packages/b9/3f/3bdd14e737d145114a5eb83cb172903afba7242f67c5877f9909a20d948d/propcache-0.3.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0a2f2235ac46a7aa25bdeb03a9e7060f6ecbd213b1f9101c43b3090ffb971ef6", size = 205596, upload-time = "2025-06-09T22:55:05.942Z" }, + { url = "https://files.pythonhosted.org/packages/0f/ca/2f4aa819c357d3107c3763d7ef42c03980f9ed5c48c82e01e25945d437c1/propcache-0.3.2-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:92b69e12e34869a6970fd2f3da91669899994b47c98f5d430b781c26f1d9f387", size = 200977, upload-time = "2025-06-09T22:55:07.792Z" }, + { url = "https://files.pythonhosted.org/packages/cd/4a/e65276c7477533c59085251ae88505caf6831c0e85ff8b2e31ebcbb949b1/propcache-0.3.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:54e02207c79968ebbdffc169591009f4474dde3b4679e16634d34c9363ff56b4", size = 197220, upload-time = "2025-06-09T22:55:09.173Z" }, + { url = "https://files.pythonhosted.org/packages/7c/54/fc7152e517cf5578278b242396ce4d4b36795423988ef39bb8cd5bf274c8/propcache-0.3.2-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:4adfb44cb588001f68c5466579d3f1157ca07f7504fc91ec87862e2b8e556b88", size = 210642, upload-time = "2025-06-09T22:55:10.62Z" }, + { url = "https://files.pythonhosted.org/packages/b9/80/abeb4a896d2767bf5f1ea7b92eb7be6a5330645bd7fb844049c0e4045d9d/propcache-0.3.2-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:fd3e6019dc1261cd0291ee8919dd91fbab7b169bb76aeef6c716833a3f65d206", size = 212789, upload-time = "2025-06-09T22:55:12.029Z" }, + { url = "https://files.pythonhosted.org/packages/b3/db/ea12a49aa7b2b6d68a5da8293dcf50068d48d088100ac016ad92a6a780e6/propcache-0.3.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4c181cad81158d71c41a2bce88edce078458e2dd5ffee7eddd6b05da85079f43", size = 205880, upload-time = "2025-06-09T22:55:13.45Z" }, + { url = "https://files.pythonhosted.org/packages/d1/e5/9076a0bbbfb65d1198007059c65639dfd56266cf8e477a9707e4b1999ff4/propcache-0.3.2-cp313-cp313-win32.whl", hash = "sha256:8a08154613f2249519e549de2330cf8e2071c2887309a7b07fb56098f5170a02", size = 37220, upload-time = "2025-06-09T22:55:15.284Z" }, + { url = "https://files.pythonhosted.org/packages/d3/f5/b369e026b09a26cd77aa88d8fffd69141d2ae00a2abaaf5380d2603f4b7f/propcache-0.3.2-cp313-cp313-win_amd64.whl", hash = "sha256:e41671f1594fc4ab0a6dec1351864713cb3a279910ae8b58f884a88a0a632c05", size = 40678, upload-time = "2025-06-09T22:55:16.445Z" }, + { url = "https://files.pythonhosted.org/packages/a4/3a/6ece377b55544941a08d03581c7bc400a3c8cd3c2865900a68d5de79e21f/propcache-0.3.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:9a3cf035bbaf035f109987d9d55dc90e4b0e36e04bbbb95af3055ef17194057b", size = 76560, upload-time = "2025-06-09T22:55:17.598Z" }, + { url = "https://files.pythonhosted.org/packages/0c/da/64a2bb16418740fa634b0e9c3d29edff1db07f56d3546ca2d86ddf0305e1/propcache-0.3.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:156c03d07dc1323d8dacaa221fbe028c5c70d16709cdd63502778e6c3ccca1b0", size = 44676, upload-time = "2025-06-09T22:55:18.922Z" }, + { url = "https://files.pythonhosted.org/packages/36/7b/f025e06ea51cb72c52fb87e9b395cced02786610b60a3ed51da8af017170/propcache-0.3.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:74413c0ba02ba86f55cf60d18daab219f7e531620c15f1e23d95563f505efe7e", size = 44701, upload-time = "2025-06-09T22:55:20.106Z" }, + { url = "https://files.pythonhosted.org/packages/a4/00/faa1b1b7c3b74fc277f8642f32a4c72ba1d7b2de36d7cdfb676db7f4303e/propcache-0.3.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f066b437bb3fa39c58ff97ab2ca351db465157d68ed0440abecb21715eb24b28", size = 276934, upload-time = "2025-06-09T22:55:21.5Z" }, + { url = "https://files.pythonhosted.org/packages/74/ab/935beb6f1756e0476a4d5938ff44bf0d13a055fed880caf93859b4f1baf4/propcache-0.3.2-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f1304b085c83067914721e7e9d9917d41ad87696bf70f0bc7dee450e9c71ad0a", size = 278316, upload-time = "2025-06-09T22:55:22.918Z" }, + { url = "https://files.pythonhosted.org/packages/f8/9d/994a5c1ce4389610838d1caec74bdf0e98b306c70314d46dbe4fcf21a3e2/propcache-0.3.2-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ab50cef01b372763a13333b4e54021bdcb291fc9a8e2ccb9c2df98be51bcde6c", size = 282619, upload-time = "2025-06-09T22:55:24.651Z" }, + { url = "https://files.pythonhosted.org/packages/2b/00/a10afce3d1ed0287cef2e09506d3be9822513f2c1e96457ee369adb9a6cd/propcache-0.3.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fad3b2a085ec259ad2c2842666b2a0a49dea8463579c606426128925af1ed725", size = 265896, upload-time = "2025-06-09T22:55:26.049Z" }, + { url = "https://files.pythonhosted.org/packages/2e/a8/2aa6716ffa566ca57c749edb909ad27884680887d68517e4be41b02299f3/propcache-0.3.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:261fa020c1c14deafd54c76b014956e2f86991af198c51139faf41c4d5e83892", size = 252111, upload-time = "2025-06-09T22:55:27.381Z" }, + { url = "https://files.pythonhosted.org/packages/36/4f/345ca9183b85ac29c8694b0941f7484bf419c7f0fea2d1e386b4f7893eed/propcache-0.3.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:46d7f8aa79c927e5f987ee3a80205c987717d3659f035c85cf0c3680526bdb44", size = 268334, upload-time = "2025-06-09T22:55:28.747Z" }, + { url = "https://files.pythonhosted.org/packages/3e/ca/fcd54f78b59e3f97b3b9715501e3147f5340167733d27db423aa321e7148/propcache-0.3.2-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:6d8f3f0eebf73e3c0ff0e7853f68be638b4043c65a70517bb575eff54edd8dbe", size = 255026, upload-time = "2025-06-09T22:55:30.184Z" }, + { url = "https://files.pythonhosted.org/packages/8b/95/8e6a6bbbd78ac89c30c225210a5c687790e532ba4088afb8c0445b77ef37/propcache-0.3.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:03c89c1b14a5452cf15403e291c0ccd7751d5b9736ecb2c5bab977ad6c5bcd81", size = 250724, upload-time = "2025-06-09T22:55:31.646Z" }, + { url = "https://files.pythonhosted.org/packages/ee/b0/0dd03616142baba28e8b2d14ce5df6631b4673850a3d4f9c0f9dd714a404/propcache-0.3.2-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:0cc17efde71e12bbaad086d679ce575268d70bc123a5a71ea7ad76f70ba30bba", size = 268868, upload-time = "2025-06-09T22:55:33.209Z" }, + { url = "https://files.pythonhosted.org/packages/c5/98/2c12407a7e4fbacd94ddd32f3b1e3d5231e77c30ef7162b12a60e2dd5ce3/propcache-0.3.2-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:acdf05d00696bc0447e278bb53cb04ca72354e562cf88ea6f9107df8e7fd9770", size = 271322, upload-time = "2025-06-09T22:55:35.065Z" }, + { url = "https://files.pythonhosted.org/packages/35/91/9cb56efbb428b006bb85db28591e40b7736847b8331d43fe335acf95f6c8/propcache-0.3.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:4445542398bd0b5d32df908031cb1b30d43ac848e20470a878b770ec2dcc6330", size = 265778, upload-time = "2025-06-09T22:55:36.45Z" }, + { url = "https://files.pythonhosted.org/packages/9a/4c/b0fe775a2bdd01e176b14b574be679d84fc83958335790f7c9a686c1f468/propcache-0.3.2-cp313-cp313t-win32.whl", hash = "sha256:f86e5d7cd03afb3a1db8e9f9f6eff15794e79e791350ac48a8c924e6f439f394", size = 41175, upload-time = "2025-06-09T22:55:38.436Z" }, + { url = "https://files.pythonhosted.org/packages/a4/ff/47f08595e3d9b5e149c150f88d9714574f1a7cbd89fe2817158a952674bf/propcache-0.3.2-cp313-cp313t-win_amd64.whl", hash = "sha256:9704bedf6e7cbe3c65eca4379a9b53ee6a83749f047808cbb5044d40d7d72198", size = 44857, upload-time = "2025-06-09T22:55:39.687Z" }, + { url = "https://files.pythonhosted.org/packages/cc/35/cc0aaecf278bb4575b8555f2b137de5ab821595ddae9da9d3cd1da4072c7/propcache-0.3.2-py3-none-any.whl", hash = "sha256:98f1ec44fb675f5052cccc8e609c46ed23a35a1cfd18545ad4e29002d858a43f", size = 12663, upload-time = "2025-06-09T22:56:04.484Z" }, +] + +[[package]] +name = "psutil" +version = "7.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/2a/80/336820c1ad9286a4ded7e845b2eccfcb27851ab8ac6abece774a6ff4d3de/psutil-7.0.0.tar.gz", hash = "sha256:7be9c3eba38beccb6495ea33afd982a44074b78f28c434a1f51cc07fd315c456", size = 497003, upload-time = "2025-02-13T21:54:07.946Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ed/e6/2d26234410f8b8abdbf891c9da62bee396583f713fb9f3325a4760875d22/psutil-7.0.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:101d71dc322e3cffd7cea0650b09b3d08b8e7c4109dd6809fe452dfd00e58b25", size = 238051, upload-time = "2025-02-13T21:54:12.36Z" }, + { url = "https://files.pythonhosted.org/packages/04/8b/30f930733afe425e3cbfc0e1468a30a18942350c1a8816acfade80c005c4/psutil-7.0.0-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:39db632f6bb862eeccf56660871433e111b6ea58f2caea825571951d4b6aa3da", size = 239535, upload-time = "2025-02-13T21:54:16.07Z" }, + { url = "https://files.pythonhosted.org/packages/2a/ed/d362e84620dd22876b55389248e522338ed1bf134a5edd3b8231d7207f6d/psutil-7.0.0-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1fcee592b4c6f146991ca55919ea3d1f8926497a713ed7faaf8225e174581e91", size = 275004, upload-time = "2025-02-13T21:54:18.662Z" }, + { url = "https://files.pythonhosted.org/packages/bf/b9/b0eb3f3cbcb734d930fdf839431606844a825b23eaf9a6ab371edac8162c/psutil-7.0.0-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b1388a4f6875d7e2aff5c4ca1cc16c545ed41dd8bb596cefea80111db353a34", size = 277986, upload-time = "2025-02-13T21:54:21.811Z" }, + { url = "https://files.pythonhosted.org/packages/eb/a2/709e0fe2f093556c17fbafda93ac032257242cabcc7ff3369e2cb76a97aa/psutil-7.0.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5f098451abc2828f7dc6b58d44b532b22f2088f4999a937557b603ce72b1993", size = 279544, upload-time = "2025-02-13T21:54:24.68Z" }, + { url = "https://files.pythonhosted.org/packages/50/e6/eecf58810b9d12e6427369784efe814a1eec0f492084ce8eb8f4d89d6d61/psutil-7.0.0-cp37-abi3-win32.whl", hash = "sha256:ba3fcef7523064a6c9da440fc4d6bd07da93ac726b5733c29027d7dc95b39d99", size = 241053, upload-time = "2025-02-13T21:54:34.31Z" }, + { url = "https://files.pythonhosted.org/packages/50/1b/6921afe68c74868b4c9fa424dad3be35b095e16687989ebbb50ce4fceb7c/psutil-7.0.0-cp37-abi3-win_amd64.whl", hash = "sha256:4cf3d4eb1aa9b348dec30105c55cd9b7d4629285735a102beb4441e38db90553", size = 244885, upload-time = "2025-02-13T21:54:37.486Z" }, +] + +[[package]] +name = "ptyprocess" +version = "0.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/20/e5/16ff212c1e452235a90aeb09066144d0c5a6a8c0834397e03f5224495c4e/ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220", size = 70762, upload-time = "2020-12-28T15:15:30.155Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/22/a6/858897256d0deac81a172289110f31629fc4cee19b6f01283303e18c8db3/ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35", size = 13993, upload-time = "2020-12-28T15:15:28.35Z" }, +] + +[[package]] +name = "pure-eval" +version = "0.2.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/cd/05/0a34433a064256a578f1783a10da6df098ceaa4a57bbeaa96a6c0352786b/pure_eval-0.2.3.tar.gz", hash = "sha256:5f4e983f40564c576c7c8635ae88db5956bb2229d7e9237d03b3c0b0190eaf42", size = 19752, upload-time = "2024-07-21T12:58:21.801Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8e/37/efad0257dc6e593a18957422533ff0f87ede7c9c6ea010a2177d738fb82f/pure_eval-0.2.3-py3-none-any.whl", hash = "sha256:1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0", size = 11842, upload-time = "2024-07-21T12:58:20.04Z" }, +] + +[[package]] +name = "py-partiql-parser" +version = "0.6.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/58/a1/0a2867e48b232b4f82c4929ef7135f2a5d72c3886b957dccf63c70aa2fcb/py_partiql_parser-0.6.1.tar.gz", hash = "sha256:8583ff2a0e15560ef3bc3df109a7714d17f87d81d33e8c38b7fed4e58a63215d", size = 17120, upload-time = "2024-12-25T22:06:41.327Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/97/84/0e410c20bbe9a504fc56e97908f13261c2b313d16cbb3b738556166f044a/py_partiql_parser-0.6.1-py2.py3-none-any.whl", hash = "sha256:ff6a48067bff23c37e9044021bf1d949c83e195490c17e020715e927fe5b2456", size = 23520, upload-time = "2024-12-25T22:06:39.106Z" }, +] + +[[package]] +name = "pycparser" +version = "2.22" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/1d/b2/31537cf4b1ca988837256c910a668b553fceb8f069bedc4b1c826024b52c/pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6", size = 172736, upload-time = "2024-03-30T13:22:22.564Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/13/a3/a812df4e2dd5696d1f351d58b8fe16a405b234ad2886a0dab9183fb78109/pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc", size = 117552, upload-time = "2024-03-30T13:22:20.476Z" }, +] + +[[package]] +name = "pydantic" +version = "2.11.7" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "annotated-types" }, + { name = "pydantic-core" }, + { name = "typing-extensions" }, + { name = "typing-inspection" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/00/dd/4325abf92c39ba8623b5af936ddb36ffcfe0beae70405d456ab1fb2f5b8c/pydantic-2.11.7.tar.gz", hash = "sha256:d989c3c6cb79469287b1569f7447a17848c998458d49ebe294e975b9baf0f0db", size = 788350, upload-time = "2025-06-14T08:33:17.137Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6a/c0/ec2b1c8712ca690e5d61979dee872603e92b8a32f94cc1b72d53beab008a/pydantic-2.11.7-py3-none-any.whl", hash = "sha256:dde5df002701f6de26248661f6835bbe296a47bf73990135c7d07ce741b9623b", size = 444782, upload-time = "2025-06-14T08:33:14.905Z" }, +] + +[[package]] +name = "pydantic-core" +version = "2.33.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ad/88/5f2260bdfae97aabf98f1778d43f69574390ad787afb646292a638c923d4/pydantic_core-2.33.2.tar.gz", hash = "sha256:7cb8bc3605c29176e1b105350d2e6474142d7c1bd1d9327c4a9bdb46bf827acc", size = 435195, upload-time = "2025-04-23T18:33:52.104Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3f/8d/71db63483d518cbbf290261a1fc2839d17ff89fce7089e08cad07ccfce67/pydantic_core-2.33.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:4c5b0a576fb381edd6d27f0a85915c6daf2f8138dc5c267a57c08a62900758c7", size = 2028584, upload-time = "2025-04-23T18:31:03.106Z" }, + { url = "https://files.pythonhosted.org/packages/24/2f/3cfa7244ae292dd850989f328722d2aef313f74ffc471184dc509e1e4e5a/pydantic_core-2.33.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e799c050df38a639db758c617ec771fd8fb7a5f8eaaa4b27b101f266b216a246", size = 1855071, upload-time = "2025-04-23T18:31:04.621Z" }, + { url = "https://files.pythonhosted.org/packages/b3/d3/4ae42d33f5e3f50dd467761304be2fa0a9417fbf09735bc2cce003480f2a/pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dc46a01bf8d62f227d5ecee74178ffc448ff4e5197c756331f71efcc66dc980f", size = 1897823, upload-time = "2025-04-23T18:31:06.377Z" }, + { url = "https://files.pythonhosted.org/packages/f4/f3/aa5976e8352b7695ff808599794b1fba2a9ae2ee954a3426855935799488/pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a144d4f717285c6d9234a66778059f33a89096dfb9b39117663fd8413d582dcc", size = 1983792, upload-time = "2025-04-23T18:31:07.93Z" }, + { url = "https://files.pythonhosted.org/packages/d5/7a/cda9b5a23c552037717f2b2a5257e9b2bfe45e687386df9591eff7b46d28/pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:73cf6373c21bc80b2e0dc88444f41ae60b2f070ed02095754eb5a01df12256de", size = 2136338, upload-time = "2025-04-23T18:31:09.283Z" }, + { url = "https://files.pythonhosted.org/packages/2b/9f/b8f9ec8dd1417eb9da784e91e1667d58a2a4a7b7b34cf4af765ef663a7e5/pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3dc625f4aa79713512d1976fe9f0bc99f706a9dee21dfd1810b4bbbf228d0e8a", size = 2730998, upload-time = "2025-04-23T18:31:11.7Z" }, + { url = "https://files.pythonhosted.org/packages/47/bc/cd720e078576bdb8255d5032c5d63ee5c0bf4b7173dd955185a1d658c456/pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:881b21b5549499972441da4758d662aeea93f1923f953e9cbaff14b8b9565aef", size = 2003200, upload-time = "2025-04-23T18:31:13.536Z" }, + { url = "https://files.pythonhosted.org/packages/ca/22/3602b895ee2cd29d11a2b349372446ae9727c32e78a94b3d588a40fdf187/pydantic_core-2.33.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:bdc25f3681f7b78572699569514036afe3c243bc3059d3942624e936ec93450e", size = 2113890, upload-time = "2025-04-23T18:31:15.011Z" }, + { url = "https://files.pythonhosted.org/packages/ff/e6/e3c5908c03cf00d629eb38393a98fccc38ee0ce8ecce32f69fc7d7b558a7/pydantic_core-2.33.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:fe5b32187cbc0c862ee201ad66c30cf218e5ed468ec8dc1cf49dec66e160cc4d", size = 2073359, upload-time = "2025-04-23T18:31:16.393Z" }, + { url = "https://files.pythonhosted.org/packages/12/e7/6a36a07c59ebefc8777d1ffdaf5ae71b06b21952582e4b07eba88a421c79/pydantic_core-2.33.2-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:bc7aee6f634a6f4a95676fcb5d6559a2c2a390330098dba5e5a5f28a2e4ada30", size = 2245883, upload-time = "2025-04-23T18:31:17.892Z" }, + { url = "https://files.pythonhosted.org/packages/16/3f/59b3187aaa6cc0c1e6616e8045b284de2b6a87b027cce2ffcea073adf1d2/pydantic_core-2.33.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:235f45e5dbcccf6bd99f9f472858849f73d11120d76ea8707115415f8e5ebebf", size = 2241074, upload-time = "2025-04-23T18:31:19.205Z" }, + { url = "https://files.pythonhosted.org/packages/e0/ed/55532bb88f674d5d8f67ab121a2a13c385df382de2a1677f30ad385f7438/pydantic_core-2.33.2-cp311-cp311-win32.whl", hash = "sha256:6368900c2d3ef09b69cb0b913f9f8263b03786e5b2a387706c5afb66800efd51", size = 1910538, upload-time = "2025-04-23T18:31:20.541Z" }, + { url = "https://files.pythonhosted.org/packages/fe/1b/25b7cccd4519c0b23c2dd636ad39d381abf113085ce4f7bec2b0dc755eb1/pydantic_core-2.33.2-cp311-cp311-win_amd64.whl", hash = "sha256:1e063337ef9e9820c77acc768546325ebe04ee38b08703244c1309cccc4f1bab", size = 1952909, upload-time = "2025-04-23T18:31:22.371Z" }, + { url = "https://files.pythonhosted.org/packages/49/a9/d809358e49126438055884c4366a1f6227f0f84f635a9014e2deb9b9de54/pydantic_core-2.33.2-cp311-cp311-win_arm64.whl", hash = "sha256:6b99022f1d19bc32a4c2a0d544fc9a76e3be90f0b3f4af413f87d38749300e65", size = 1897786, upload-time = "2025-04-23T18:31:24.161Z" }, + { url = "https://files.pythonhosted.org/packages/18/8a/2b41c97f554ec8c71f2a8a5f85cb56a8b0956addfe8b0efb5b3d77e8bdc3/pydantic_core-2.33.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:a7ec89dc587667f22b6a0b6579c249fca9026ce7c333fc142ba42411fa243cdc", size = 2009000, upload-time = "2025-04-23T18:31:25.863Z" }, + { url = "https://files.pythonhosted.org/packages/a1/02/6224312aacb3c8ecbaa959897af57181fb6cf3a3d7917fd44d0f2917e6f2/pydantic_core-2.33.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3c6db6e52c6d70aa0d00d45cdb9b40f0433b96380071ea80b09277dba021ddf7", size = 1847996, upload-time = "2025-04-23T18:31:27.341Z" }, + { url = "https://files.pythonhosted.org/packages/d6/46/6dcdf084a523dbe0a0be59d054734b86a981726f221f4562aed313dbcb49/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e61206137cbc65e6d5256e1166f88331d3b6238e082d9f74613b9b765fb9025", size = 1880957, upload-time = "2025-04-23T18:31:28.956Z" }, + { url = "https://files.pythonhosted.org/packages/ec/6b/1ec2c03837ac00886ba8160ce041ce4e325b41d06a034adbef11339ae422/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eb8c529b2819c37140eb51b914153063d27ed88e3bdc31b71198a198e921e011", size = 1964199, upload-time = "2025-04-23T18:31:31.025Z" }, + { url = "https://files.pythonhosted.org/packages/2d/1d/6bf34d6adb9debd9136bd197ca72642203ce9aaaa85cfcbfcf20f9696e83/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c52b02ad8b4e2cf14ca7b3d918f3eb0ee91e63b3167c32591e57c4317e134f8f", size = 2120296, upload-time = "2025-04-23T18:31:32.514Z" }, + { url = "https://files.pythonhosted.org/packages/e0/94/2bd0aaf5a591e974b32a9f7123f16637776c304471a0ab33cf263cf5591a/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:96081f1605125ba0855dfda83f6f3df5ec90c61195421ba72223de35ccfb2f88", size = 2676109, upload-time = "2025-04-23T18:31:33.958Z" }, + { url = "https://files.pythonhosted.org/packages/f9/41/4b043778cf9c4285d59742281a769eac371b9e47e35f98ad321349cc5d61/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f57a69461af2a5fa6e6bbd7a5f60d3b7e6cebb687f55106933188e79ad155c1", size = 2002028, upload-time = "2025-04-23T18:31:39.095Z" }, + { url = "https://files.pythonhosted.org/packages/cb/d5/7bb781bf2748ce3d03af04d5c969fa1308880e1dca35a9bd94e1a96a922e/pydantic_core-2.33.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:572c7e6c8bb4774d2ac88929e3d1f12bc45714ae5ee6d9a788a9fb35e60bb04b", size = 2100044, upload-time = "2025-04-23T18:31:41.034Z" }, + { url = "https://files.pythonhosted.org/packages/fe/36/def5e53e1eb0ad896785702a5bbfd25eed546cdcf4087ad285021a90ed53/pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:db4b41f9bd95fbe5acd76d89920336ba96f03e149097365afe1cb092fceb89a1", size = 2058881, upload-time = "2025-04-23T18:31:42.757Z" }, + { url = "https://files.pythonhosted.org/packages/01/6c/57f8d70b2ee57fc3dc8b9610315949837fa8c11d86927b9bb044f8705419/pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:fa854f5cf7e33842a892e5c73f45327760bc7bc516339fda888c75ae60edaeb6", size = 2227034, upload-time = "2025-04-23T18:31:44.304Z" }, + { url = "https://files.pythonhosted.org/packages/27/b9/9c17f0396a82b3d5cbea4c24d742083422639e7bb1d5bf600e12cb176a13/pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:5f483cfb75ff703095c59e365360cb73e00185e01aaea067cd19acffd2ab20ea", size = 2234187, upload-time = "2025-04-23T18:31:45.891Z" }, + { url = "https://files.pythonhosted.org/packages/b0/6a/adf5734ffd52bf86d865093ad70b2ce543415e0e356f6cacabbc0d9ad910/pydantic_core-2.33.2-cp312-cp312-win32.whl", hash = "sha256:9cb1da0f5a471435a7bc7e439b8a728e8b61e59784b2af70d7c169f8dd8ae290", size = 1892628, upload-time = "2025-04-23T18:31:47.819Z" }, + { url = "https://files.pythonhosted.org/packages/43/e4/5479fecb3606c1368d496a825d8411e126133c41224c1e7238be58b87d7e/pydantic_core-2.33.2-cp312-cp312-win_amd64.whl", hash = "sha256:f941635f2a3d96b2973e867144fde513665c87f13fe0e193c158ac51bfaaa7b2", size = 1955866, upload-time = "2025-04-23T18:31:49.635Z" }, + { url = "https://files.pythonhosted.org/packages/0d/24/8b11e8b3e2be9dd82df4b11408a67c61bb4dc4f8e11b5b0fc888b38118b5/pydantic_core-2.33.2-cp312-cp312-win_arm64.whl", hash = "sha256:cca3868ddfaccfbc4bfb1d608e2ccaaebe0ae628e1416aeb9c4d88c001bb45ab", size = 1888894, upload-time = "2025-04-23T18:31:51.609Z" }, + { url = "https://files.pythonhosted.org/packages/46/8c/99040727b41f56616573a28771b1bfa08a3d3fe74d3d513f01251f79f172/pydantic_core-2.33.2-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:1082dd3e2d7109ad8b7da48e1d4710c8d06c253cbc4a27c1cff4fbcaa97a9e3f", size = 2015688, upload-time = "2025-04-23T18:31:53.175Z" }, + { url = "https://files.pythonhosted.org/packages/3a/cc/5999d1eb705a6cefc31f0b4a90e9f7fc400539b1a1030529700cc1b51838/pydantic_core-2.33.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f517ca031dfc037a9c07e748cefd8d96235088b83b4f4ba8939105d20fa1dcd6", size = 1844808, upload-time = "2025-04-23T18:31:54.79Z" }, + { url = "https://files.pythonhosted.org/packages/6f/5e/a0a7b8885c98889a18b6e376f344da1ef323d270b44edf8174d6bce4d622/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a9f2c9dd19656823cb8250b0724ee9c60a82f3cdf68a080979d13092a3b0fef", size = 1885580, upload-time = "2025-04-23T18:31:57.393Z" }, + { url = "https://files.pythonhosted.org/packages/3b/2a/953581f343c7d11a304581156618c3f592435523dd9d79865903272c256a/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2b0a451c263b01acebe51895bfb0e1cc842a5c666efe06cdf13846c7418caa9a", size = 1973859, upload-time = "2025-04-23T18:31:59.065Z" }, + { url = "https://files.pythonhosted.org/packages/e6/55/f1a813904771c03a3f97f676c62cca0c0a4138654107c1b61f19c644868b/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ea40a64d23faa25e62a70ad163571c0b342b8bf66d5fa612ac0dec4f069d916", size = 2120810, upload-time = "2025-04-23T18:32:00.78Z" }, + { url = "https://files.pythonhosted.org/packages/aa/c3/053389835a996e18853ba107a63caae0b9deb4a276c6b472931ea9ae6e48/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0fb2d542b4d66f9470e8065c5469ec676978d625a8b7a363f07d9a501a9cb36a", size = 2676498, upload-time = "2025-04-23T18:32:02.418Z" }, + { url = "https://files.pythonhosted.org/packages/eb/3c/f4abd740877a35abade05e437245b192f9d0ffb48bbbbd708df33d3cda37/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9fdac5d6ffa1b5a83bca06ffe7583f5576555e6c8b3a91fbd25ea7780f825f7d", size = 2000611, upload-time = "2025-04-23T18:32:04.152Z" }, + { url = "https://files.pythonhosted.org/packages/59/a7/63ef2fed1837d1121a894d0ce88439fe3e3b3e48c7543b2a4479eb99c2bd/pydantic_core-2.33.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:04a1a413977ab517154eebb2d326da71638271477d6ad87a769102f7c2488c56", size = 2107924, upload-time = "2025-04-23T18:32:06.129Z" }, + { url = "https://files.pythonhosted.org/packages/04/8f/2551964ef045669801675f1cfc3b0d74147f4901c3ffa42be2ddb1f0efc4/pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:c8e7af2f4e0194c22b5b37205bfb293d166a7344a5b0d0eaccebc376546d77d5", size = 2063196, upload-time = "2025-04-23T18:32:08.178Z" }, + { url = "https://files.pythonhosted.org/packages/26/bd/d9602777e77fc6dbb0c7db9ad356e9a985825547dce5ad1d30ee04903918/pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:5c92edd15cd58b3c2d34873597a1e20f13094f59cf88068adb18947df5455b4e", size = 2236389, upload-time = "2025-04-23T18:32:10.242Z" }, + { url = "https://files.pythonhosted.org/packages/42/db/0e950daa7e2230423ab342ae918a794964b053bec24ba8af013fc7c94846/pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:65132b7b4a1c0beded5e057324b7e16e10910c106d43675d9bd87d4f38dde162", size = 2239223, upload-time = "2025-04-23T18:32:12.382Z" }, + { url = "https://files.pythonhosted.org/packages/58/4d/4f937099c545a8a17eb52cb67fe0447fd9a373b348ccfa9a87f141eeb00f/pydantic_core-2.33.2-cp313-cp313-win32.whl", hash = "sha256:52fb90784e0a242bb96ec53f42196a17278855b0f31ac7c3cc6f5c1ec4811849", size = 1900473, upload-time = "2025-04-23T18:32:14.034Z" }, + { url = "https://files.pythonhosted.org/packages/a0/75/4a0a9bac998d78d889def5e4ef2b065acba8cae8c93696906c3a91f310ca/pydantic_core-2.33.2-cp313-cp313-win_amd64.whl", hash = "sha256:c083a3bdd5a93dfe480f1125926afcdbf2917ae714bdb80b36d34318b2bec5d9", size = 1955269, upload-time = "2025-04-23T18:32:15.783Z" }, + { url = "https://files.pythonhosted.org/packages/f9/86/1beda0576969592f1497b4ce8e7bc8cbdf614c352426271b1b10d5f0aa64/pydantic_core-2.33.2-cp313-cp313-win_arm64.whl", hash = "sha256:e80b087132752f6b3d714f041ccf74403799d3b23a72722ea2e6ba2e892555b9", size = 1893921, upload-time = "2025-04-23T18:32:18.473Z" }, + { url = "https://files.pythonhosted.org/packages/a4/7d/e09391c2eebeab681df2b74bfe6c43422fffede8dc74187b2b0bf6fd7571/pydantic_core-2.33.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:61c18fba8e5e9db3ab908620af374db0ac1baa69f0f32df4f61ae23f15e586ac", size = 1806162, upload-time = "2025-04-23T18:32:20.188Z" }, + { url = "https://files.pythonhosted.org/packages/f1/3d/847b6b1fed9f8ed3bb95a9ad04fbd0b212e832d4f0f50ff4d9ee5a9f15cf/pydantic_core-2.33.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95237e53bb015f67b63c91af7518a62a8660376a6a0db19b89acc77a4d6199f5", size = 1981560, upload-time = "2025-04-23T18:32:22.354Z" }, + { url = "https://files.pythonhosted.org/packages/6f/9a/e73262f6c6656262b5fdd723ad90f518f579b7bc8622e43a942eec53c938/pydantic_core-2.33.2-cp313-cp313t-win_amd64.whl", hash = "sha256:c2fc0a768ef76c15ab9238afa6da7f69895bb5d1ee83aeea2e3509af4472d0b9", size = 1935777, upload-time = "2025-04-23T18:32:25.088Z" }, + { url = "https://files.pythonhosted.org/packages/7b/27/d4ae6487d73948d6f20dddcd94be4ea43e74349b56eba82e9bdee2d7494c/pydantic_core-2.33.2-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:dd14041875d09cc0f9308e37a6f8b65f5585cf2598a53aa0123df8b129d481f8", size = 2025200, upload-time = "2025-04-23T18:33:14.199Z" }, + { url = "https://files.pythonhosted.org/packages/f1/b8/b3cb95375f05d33801024079b9392a5ab45267a63400bf1866e7ce0f0de4/pydantic_core-2.33.2-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:d87c561733f66531dced0da6e864f44ebf89a8fba55f31407b00c2f7f9449593", size = 1859123, upload-time = "2025-04-23T18:33:16.555Z" }, + { url = "https://files.pythonhosted.org/packages/05/bc/0d0b5adeda59a261cd30a1235a445bf55c7e46ae44aea28f7bd6ed46e091/pydantic_core-2.33.2-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f82865531efd18d6e07a04a17331af02cb7a651583c418df8266f17a63c6612", size = 1892852, upload-time = "2025-04-23T18:33:18.513Z" }, + { url = "https://files.pythonhosted.org/packages/3e/11/d37bdebbda2e449cb3f519f6ce950927b56d62f0b84fd9cb9e372a26a3d5/pydantic_core-2.33.2-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2bfb5112df54209d820d7bf9317c7a6c9025ea52e49f46b6a2060104bba37de7", size = 2067484, upload-time = "2025-04-23T18:33:20.475Z" }, + { url = "https://files.pythonhosted.org/packages/8c/55/1f95f0a05ce72ecb02a8a8a1c3be0579bbc29b1d5ab68f1378b7bebc5057/pydantic_core-2.33.2-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:64632ff9d614e5eecfb495796ad51b0ed98c453e447a76bcbeeb69615079fc7e", size = 2108896, upload-time = "2025-04-23T18:33:22.501Z" }, + { url = "https://files.pythonhosted.org/packages/53/89/2b2de6c81fa131f423246a9109d7b2a375e83968ad0800d6e57d0574629b/pydantic_core-2.33.2-pp311-pypy311_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:f889f7a40498cc077332c7ab6b4608d296d852182211787d4f3ee377aaae66e8", size = 2069475, upload-time = "2025-04-23T18:33:24.528Z" }, + { url = "https://files.pythonhosted.org/packages/b8/e9/1f7efbe20d0b2b10f6718944b5d8ece9152390904f29a78e68d4e7961159/pydantic_core-2.33.2-pp311-pypy311_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:de4b83bb311557e439b9e186f733f6c645b9417c84e2eb8203f3f820a4b988bf", size = 2239013, upload-time = "2025-04-23T18:33:26.621Z" }, + { url = "https://files.pythonhosted.org/packages/3c/b2/5309c905a93811524a49b4e031e9851a6b00ff0fb668794472ea7746b448/pydantic_core-2.33.2-pp311-pypy311_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:82f68293f055f51b51ea42fafc74b6aad03e70e191799430b90c13d643059ebb", size = 2238715, upload-time = "2025-04-23T18:33:28.656Z" }, + { url = "https://files.pythonhosted.org/packages/32/56/8a7ca5d2cd2cda1d245d34b1c9a942920a718082ae8e54e5f3e5a58b7add/pydantic_core-2.33.2-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:329467cecfb529c925cf2bbd4d60d2c509bc2fb52a20c1045bf09bb70971a9c1", size = 2066757, upload-time = "2025-04-23T18:33:30.645Z" }, +] + +[[package]] +name = "pydata-sphinx-theme" +version = "0.16.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "accessible-pygments" }, + { name = "babel" }, + { name = "beautifulsoup4" }, + { name = "docutils" }, + { name = "pygments" }, + { name = "sphinx" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/00/20/bb50f9de3a6de69e6abd6b087b52fa2418a0418b19597601605f855ad044/pydata_sphinx_theme-0.16.1.tar.gz", hash = "sha256:a08b7f0b7f70387219dc659bff0893a7554d5eb39b59d3b8ef37b8401b7642d7", size = 2412693, upload-time = "2024-12-17T10:53:39.537Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e2/0d/8ba33fa83a7dcde13eb3c1c2a0c1cc29950a048bfed6d9b0d8b6bd710b4c/pydata_sphinx_theme-0.16.1-py3-none-any.whl", hash = "sha256:225331e8ac4b32682c18fcac5a57a6f717c4e632cea5dd0e247b55155faeccde", size = 6723264, upload-time = "2024-12-17T10:53:35.645Z" }, +] + +[[package]] +name = "pygments" +version = "2.19.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b0/77/a5b8c569bf593b0140bde72ea885a803b82086995367bf2037de0159d924/pygments-2.19.2.tar.gz", hash = "sha256:636cb2477cec7f8952536970bc533bc43743542f70392ae026374600add5b887", size = 4968631, upload-time = "2025-06-21T13:39:12.283Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl", hash = "sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b", size = 1225217, upload-time = "2025-06-21T13:39:07.939Z" }, +] + +[[package]] +name = "pyparsing" +version = "3.2.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/bb/22/f1129e69d94ffff626bdb5c835506b3a5b4f3d070f17ea295e12c2c6f60f/pyparsing-3.2.3.tar.gz", hash = "sha256:b9c13f1ab8b3b542f72e28f634bad4de758ab3ce4546e4301970ad6fa77c38be", size = 1088608, upload-time = "2025-03-25T05:01:28.114Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/05/e7/df2285f3d08fee213f2d041540fa4fc9ca6c2d44cf36d3a035bf2a8d2bcc/pyparsing-3.2.3-py3-none-any.whl", hash = "sha256:a749938e02d6fd0b59b356ca504a24982314bb090c383e3cf201c95ef7e2bfcf", size = 111120, upload-time = "2025-03-25T05:01:24.908Z" }, +] + +[[package]] +name = "pytest" +version = "8.3.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "iniconfig" }, + { name = "packaging" }, + { name = "pluggy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ae/3c/c9d525a414d506893f0cd8a8d0de7706446213181570cdbd766691164e40/pytest-8.3.5.tar.gz", hash = "sha256:f4efe70cc14e511565ac476b57c279e12a855b11f48f212af1080ef2263d3845", size = 1450891, upload-time = "2025-03-02T12:54:54.503Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/30/3d/64ad57c803f1fa1e963a7946b6e0fea4a70df53c1a7fed304586539c2bac/pytest-8.3.5-py3-none-any.whl", hash = "sha256:c69214aa47deac29fad6c2a4f590b9c4a9fdb16a403176fe154b79c0b4d4d820", size = 343634, upload-time = "2025-03-02T12:54:52.069Z" }, +] + +[[package]] +name = "pytest-accept" +version = "0.1.12" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pytest" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b5/a9/1ba09166e1bb7dc3db5c74e447e68ca0a72c799dce6b8745ca8ad64acd95/pytest-accept-0.1.12.tar.gz", hash = "sha256:0cbed8fafac4ab5ca4413f353c68ea51d99911d13656530ba8b49d0dae200f26", size = 17698, upload-time = "2024-12-08T22:57:00.211Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/23/4e/7677b01b773f9aa1b77ad1aa55c601cc8763966d691e7a341eaca1ffc09e/pytest_accept-0.1.12-py3-none-any.whl", hash = "sha256:189ccac80113920966c98ce4d6d1bfbe1b22f39b7e97a5c3a46c68db2ca84415", size = 15511, upload-time = "2024-12-08T22:57:01.785Z" }, +] + +[[package]] +name = "pytest-asyncio" +version = "1.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pytest" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/4e/51/f8794af39eeb870e87a8c8068642fc07bce0c854d6865d7dd0f2a9d338c2/pytest_asyncio-1.1.0.tar.gz", hash = "sha256:796aa822981e01b68c12e4827b8697108f7205020f24b5793b3c41555dab68ea", size = 46652, upload-time = "2025-07-16T04:29:26.393Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c7/9d/bf86eddabf8c6c9cb1ea9a869d6873b46f105a5d292d3a6f7071f5b07935/pytest_asyncio-1.1.0-py3-none-any.whl", hash = "sha256:5fe2d69607b0bd75c656d1211f969cadba035030156745ee09e7d71740e58ecf", size = 15157, upload-time = "2025-07-16T04:29:24.929Z" }, +] + +[[package]] +name = "pytest-cov" +version = "6.2.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "coverage", extra = ["toml"] }, + { name = "pluggy" }, + { name = "pytest" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/18/99/668cade231f434aaa59bbfbf49469068d2ddd945000621d3d165d2e7dd7b/pytest_cov-6.2.1.tar.gz", hash = "sha256:25cc6cc0a5358204b8108ecedc51a9b57b34cc6b8c967cc2c01a4e00d8a67da2", size = 69432, upload-time = "2025-06-12T10:47:47.684Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bc/16/4ea354101abb1287856baa4af2732be351c7bee728065aed451b678153fd/pytest_cov-6.2.1-py3-none-any.whl", hash = "sha256:f5bc4c23f42f1cdd23c70b1dab1bbaef4fc505ba950d53e0081d0730dd7e86d5", size = 24644, upload-time = "2025-06-12T10:47:45.932Z" }, +] + +[[package]] +name = "pytest-xdist" +version = "3.8.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "execnet" }, + { name = "pytest" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/78/b4/439b179d1ff526791eb921115fca8e44e596a13efeda518b9d845a619450/pytest_xdist-3.8.0.tar.gz", hash = "sha256:7e578125ec9bc6050861aa93f2d59f1d8d085595d6551c2c90b6f4fad8d3a9f1", size = 88069, upload-time = "2025-07-01T13:30:59.346Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ca/31/d4e37e9e550c2b92a9cbc2e4d0b7420a27224968580b5a447f420847c975/pytest_xdist-3.8.0-py3-none-any.whl", hash = "sha256:202ca578cfeb7370784a8c33d6d05bc6e13b4f25b5053c30a152269fd10f0b88", size = 46396, upload-time = "2025-07-01T13:30:56.632Z" }, +] + +[[package]] +name = "python-dateutil" +version = "2.9.0.post0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "six" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/66/c0/0c8b6ad9f17a802ee498c46e004a0eb49bc148f2fd230864601a86dcf6db/python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", size = 342432, upload-time = "2024-03-01T18:36:20.211Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427", size = 229892, upload-time = "2024-03-01T18:36:18.57Z" }, +] + +[[package]] +name = "pywin32" +version = "311" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7c/af/449a6a91e5d6db51420875c54f6aff7c97a86a3b13a0b4f1a5c13b988de3/pywin32-311-cp311-cp311-win32.whl", hash = "sha256:184eb5e436dea364dcd3d2316d577d625c0351bf237c4e9a5fabbcfa5a58b151", size = 8697031, upload-time = "2025-07-14T20:13:13.266Z" }, + { url = "https://files.pythonhosted.org/packages/51/8f/9bb81dd5bb77d22243d33c8397f09377056d5c687aa6d4042bea7fbf8364/pywin32-311-cp311-cp311-win_amd64.whl", hash = "sha256:3ce80b34b22b17ccbd937a6e78e7225d80c52f5ab9940fe0506a1a16f3dab503", size = 9508308, upload-time = "2025-07-14T20:13:15.147Z" }, + { url = "https://files.pythonhosted.org/packages/44/7b/9c2ab54f74a138c491aba1b1cd0795ba61f144c711daea84a88b63dc0f6c/pywin32-311-cp311-cp311-win_arm64.whl", hash = "sha256:a733f1388e1a842abb67ffa8e7aad0e70ac519e09b0f6a784e65a136ec7cefd2", size = 8703930, upload-time = "2025-07-14T20:13:16.945Z" }, + { url = "https://files.pythonhosted.org/packages/e7/ab/01ea1943d4eba0f850c3c61e78e8dd59757ff815ff3ccd0a84de5f541f42/pywin32-311-cp312-cp312-win32.whl", hash = "sha256:750ec6e621af2b948540032557b10a2d43b0cee2ae9758c54154d711cc852d31", size = 8706543, upload-time = "2025-07-14T20:13:20.765Z" }, + { url = "https://files.pythonhosted.org/packages/d1/a8/a0e8d07d4d051ec7502cd58b291ec98dcc0c3fff027caad0470b72cfcc2f/pywin32-311-cp312-cp312-win_amd64.whl", hash = "sha256:b8c095edad5c211ff31c05223658e71bf7116daa0ecf3ad85f3201ea3190d067", size = 9495040, upload-time = "2025-07-14T20:13:22.543Z" }, + { url = "https://files.pythonhosted.org/packages/ba/3a/2ae996277b4b50f17d61f0603efd8253cb2d79cc7ae159468007b586396d/pywin32-311-cp312-cp312-win_arm64.whl", hash = "sha256:e286f46a9a39c4a18b319c28f59b61de793654af2f395c102b4f819e584b5852", size = 8710102, upload-time = "2025-07-14T20:13:24.682Z" }, + { url = "https://files.pythonhosted.org/packages/a5/be/3fd5de0979fcb3994bfee0d65ed8ca9506a8a1260651b86174f6a86f52b3/pywin32-311-cp313-cp313-win32.whl", hash = "sha256:f95ba5a847cba10dd8c4d8fefa9f2a6cf283b8b88ed6178fa8a6c1ab16054d0d", size = 8705700, upload-time = "2025-07-14T20:13:26.471Z" }, + { url = "https://files.pythonhosted.org/packages/e3/28/e0a1909523c6890208295a29e05c2adb2126364e289826c0a8bc7297bd5c/pywin32-311-cp313-cp313-win_amd64.whl", hash = "sha256:718a38f7e5b058e76aee1c56ddd06908116d35147e133427e59a3983f703a20d", size = 9494700, upload-time = "2025-07-14T20:13:28.243Z" }, + { url = "https://files.pythonhosted.org/packages/04/bf/90339ac0f55726dce7d794e6d79a18a91265bdf3aa70b6b9ca52f35e022a/pywin32-311-cp313-cp313-win_arm64.whl", hash = "sha256:7b4075d959648406202d92a2310cb990fea19b535c7f4a78d3f5e10b926eeb8a", size = 8709318, upload-time = "2025-07-14T20:13:30.348Z" }, + { url = "https://files.pythonhosted.org/packages/c9/31/097f2e132c4f16d99a22bfb777e0fd88bd8e1c634304e102f313af69ace5/pywin32-311-cp314-cp314-win32.whl", hash = "sha256:b7a2c10b93f8986666d0c803ee19b5990885872a7de910fc460f9b0c2fbf92ee", size = 8840714, upload-time = "2025-07-14T20:13:32.449Z" }, + { url = "https://files.pythonhosted.org/packages/90/4b/07c77d8ba0e01349358082713400435347df8426208171ce297da32c313d/pywin32-311-cp314-cp314-win_amd64.whl", hash = "sha256:3aca44c046bd2ed8c90de9cb8427f581c479e594e99b5c0bb19b29c10fd6cb87", size = 9656800, upload-time = "2025-07-14T20:13:34.312Z" }, + { url = "https://files.pythonhosted.org/packages/c0/d2/21af5c535501a7233e734b8af901574572da66fcc254cb35d0609c9080dd/pywin32-311-cp314-cp314-win_arm64.whl", hash = "sha256:a508e2d9025764a8270f93111a970e1d0fbfc33f4153b388bb649b7eec4f9b42", size = 8932540, upload-time = "2025-07-14T20:13:36.379Z" }, +] + +[[package]] +name = "pyyaml" +version = "6.0.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/54/ed/79a089b6be93607fa5cdaedf301d7dfb23af5f25c398d5ead2525b063e17/pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e", size = 130631, upload-time = "2024-08-06T20:33:50.674Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f8/aa/7af4e81f7acba21a4c6be026da38fd2b872ca46226673c89a758ebdc4fd2/PyYAML-6.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774", size = 184612, upload-time = "2024-08-06T20:32:03.408Z" }, + { url = "https://files.pythonhosted.org/packages/8b/62/b9faa998fd185f65c1371643678e4d58254add437edb764a08c5a98fb986/PyYAML-6.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee", size = 172040, upload-time = "2024-08-06T20:32:04.926Z" }, + { url = "https://files.pythonhosted.org/packages/ad/0c/c804f5f922a9a6563bab712d8dcc70251e8af811fce4524d57c2c0fd49a4/PyYAML-6.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c", size = 736829, upload-time = "2024-08-06T20:32:06.459Z" }, + { url = "https://files.pythonhosted.org/packages/51/16/6af8d6a6b210c8e54f1406a6b9481febf9c64a3109c541567e35a49aa2e7/PyYAML-6.0.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317", size = 764167, upload-time = "2024-08-06T20:32:08.338Z" }, + { url = "https://files.pythonhosted.org/packages/75/e4/2c27590dfc9992f73aabbeb9241ae20220bd9452df27483b6e56d3975cc5/PyYAML-6.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85", size = 762952, upload-time = "2024-08-06T20:32:14.124Z" }, + { url = "https://files.pythonhosted.org/packages/9b/97/ecc1abf4a823f5ac61941a9c00fe501b02ac3ab0e373c3857f7d4b83e2b6/PyYAML-6.0.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4", size = 735301, upload-time = "2024-08-06T20:32:16.17Z" }, + { url = "https://files.pythonhosted.org/packages/45/73/0f49dacd6e82c9430e46f4a027baa4ca205e8b0a9dce1397f44edc23559d/PyYAML-6.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e", size = 756638, upload-time = "2024-08-06T20:32:18.555Z" }, + { url = "https://files.pythonhosted.org/packages/22/5f/956f0f9fc65223a58fbc14459bf34b4cc48dec52e00535c79b8db361aabd/PyYAML-6.0.2-cp311-cp311-win32.whl", hash = "sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5", size = 143850, upload-time = "2024-08-06T20:32:19.889Z" }, + { url = "https://files.pythonhosted.org/packages/ed/23/8da0bbe2ab9dcdd11f4f4557ccaf95c10b9811b13ecced089d43ce59c3c8/PyYAML-6.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44", size = 161980, upload-time = "2024-08-06T20:32:21.273Z" }, + { url = "https://files.pythonhosted.org/packages/86/0c/c581167fc46d6d6d7ddcfb8c843a4de25bdd27e4466938109ca68492292c/PyYAML-6.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab", size = 183873, upload-time = "2024-08-06T20:32:25.131Z" }, + { url = "https://files.pythonhosted.org/packages/a8/0c/38374f5bb272c051e2a69281d71cba6fdb983413e6758b84482905e29a5d/PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725", size = 173302, upload-time = "2024-08-06T20:32:26.511Z" }, + { url = "https://files.pythonhosted.org/packages/c3/93/9916574aa8c00aa06bbac729972eb1071d002b8e158bd0e83a3b9a20a1f7/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5", size = 739154, upload-time = "2024-08-06T20:32:28.363Z" }, + { url = "https://files.pythonhosted.org/packages/95/0f/b8938f1cbd09739c6da569d172531567dbcc9789e0029aa070856f123984/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425", size = 766223, upload-time = "2024-08-06T20:32:30.058Z" }, + { url = "https://files.pythonhosted.org/packages/b9/2b/614b4752f2e127db5cc206abc23a8c19678e92b23c3db30fc86ab731d3bd/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476", size = 767542, upload-time = "2024-08-06T20:32:31.881Z" }, + { url = "https://files.pythonhosted.org/packages/d4/00/dd137d5bcc7efea1836d6264f049359861cf548469d18da90cd8216cf05f/PyYAML-6.0.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48", size = 731164, upload-time = "2024-08-06T20:32:37.083Z" }, + { url = "https://files.pythonhosted.org/packages/c9/1f/4f998c900485e5c0ef43838363ba4a9723ac0ad73a9dc42068b12aaba4e4/PyYAML-6.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b", size = 756611, upload-time = "2024-08-06T20:32:38.898Z" }, + { url = "https://files.pythonhosted.org/packages/df/d1/f5a275fdb252768b7a11ec63585bc38d0e87c9e05668a139fea92b80634c/PyYAML-6.0.2-cp312-cp312-win32.whl", hash = "sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4", size = 140591, upload-time = "2024-08-06T20:32:40.241Z" }, + { url = "https://files.pythonhosted.org/packages/0c/e8/4f648c598b17c3d06e8753d7d13d57542b30d56e6c2dedf9c331ae56312e/PyYAML-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8", size = 156338, upload-time = "2024-08-06T20:32:41.93Z" }, + { url = "https://files.pythonhosted.org/packages/ef/e3/3af305b830494fa85d95f6d95ef7fa73f2ee1cc8ef5b495c7c3269fb835f/PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba", size = 181309, upload-time = "2024-08-06T20:32:43.4Z" }, + { url = "https://files.pythonhosted.org/packages/45/9f/3b1c20a0b7a3200524eb0076cc027a970d320bd3a6592873c85c92a08731/PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1", size = 171679, upload-time = "2024-08-06T20:32:44.801Z" }, + { url = "https://files.pythonhosted.org/packages/7c/9a/337322f27005c33bcb656c655fa78325b730324c78620e8328ae28b64d0c/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133", size = 733428, upload-time = "2024-08-06T20:32:46.432Z" }, + { url = "https://files.pythonhosted.org/packages/a3/69/864fbe19e6c18ea3cc196cbe5d392175b4cf3d5d0ac1403ec3f2d237ebb5/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484", size = 763361, upload-time = "2024-08-06T20:32:51.188Z" }, + { url = "https://files.pythonhosted.org/packages/04/24/b7721e4845c2f162d26f50521b825fb061bc0a5afcf9a386840f23ea19fa/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5", size = 759523, upload-time = "2024-08-06T20:32:53.019Z" }, + { url = "https://files.pythonhosted.org/packages/2b/b2/e3234f59ba06559c6ff63c4e10baea10e5e7df868092bf9ab40e5b9c56b6/PyYAML-6.0.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc", size = 726660, upload-time = "2024-08-06T20:32:54.708Z" }, + { url = "https://files.pythonhosted.org/packages/fe/0f/25911a9f080464c59fab9027482f822b86bf0608957a5fcc6eaac85aa515/PyYAML-6.0.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652", size = 751597, upload-time = "2024-08-06T20:32:56.985Z" }, + { url = "https://files.pythonhosted.org/packages/14/0d/e2c3b43bbce3cf6bd97c840b46088a3031085179e596d4929729d8d68270/PyYAML-6.0.2-cp313-cp313-win32.whl", hash = "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183", size = 140527, upload-time = "2024-08-06T20:33:03.001Z" }, + { url = "https://files.pythonhosted.org/packages/fa/de/02b54f42487e3d3c6efb3f89428677074ca7bf43aae402517bc7cca949f3/PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563", size = 156446, upload-time = "2024-08-06T20:33:04.33Z" }, +] + +[[package]] +name = "pyzmq" +version = "27.0.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cffi", marker = "implementation_name == 'pypy'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/30/5f/557d2032a2f471edbcc227da724c24a1c05887b5cda1e3ae53af98b9e0a5/pyzmq-27.0.1.tar.gz", hash = "sha256:45c549204bc20e7484ffd2555f6cf02e572440ecf2f3bdd60d4404b20fddf64b", size = 281158, upload-time = "2025-08-03T05:05:40.352Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ae/18/a8e0da6ababbe9326116fb1c890bf1920eea880e8da621afb6bc0f39a262/pyzmq-27.0.1-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:9729190bd770314f5fbba42476abf6abe79a746eeda11d1d68fd56dd70e5c296", size = 1332721, upload-time = "2025-08-03T05:03:15.237Z" }, + { url = "https://files.pythonhosted.org/packages/75/a4/9431ba598651d60ebd50dc25755402b770322cf8432adcc07d2906e53a54/pyzmq-27.0.1-cp311-cp311-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:696900ef6bc20bef6a242973943574f96c3f97d2183c1bd3da5eea4f559631b1", size = 908249, upload-time = "2025-08-03T05:03:16.933Z" }, + { url = "https://files.pythonhosted.org/packages/f0/7a/e624e1793689e4e685d2ee21c40277dd4024d9d730af20446d88f69be838/pyzmq-27.0.1-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f96a63aecec22d3f7fdea3c6c98df9e42973f5856bb6812c3d8d78c262fee808", size = 668649, upload-time = "2025-08-03T05:03:18.49Z" }, + { url = "https://files.pythonhosted.org/packages/6c/29/0652a39d4e876e0d61379047ecf7752685414ad2e253434348246f7a2a39/pyzmq-27.0.1-cp311-cp311-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c512824360ea7490390566ce00bee880e19b526b312b25cc0bc30a0fe95cb67f", size = 856601, upload-time = "2025-08-03T05:03:20.194Z" }, + { url = "https://files.pythonhosted.org/packages/36/2d/8d5355d7fc55bb6e9c581dd74f58b64fa78c994079e3a0ea09b1b5627cde/pyzmq-27.0.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:dfb2bb5e0f7198eaacfb6796fb0330afd28f36d985a770745fba554a5903595a", size = 1657750, upload-time = "2025-08-03T05:03:22.055Z" }, + { url = "https://files.pythonhosted.org/packages/ab/f4/cd032352d5d252dc6f5ee272a34b59718ba3af1639a8a4ef4654f9535cf5/pyzmq-27.0.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:4f6886c59ba93ffde09b957d3e857e7950c8fe818bd5494d9b4287bc6d5bc7f1", size = 2034312, upload-time = "2025-08-03T05:03:23.578Z" }, + { url = "https://files.pythonhosted.org/packages/e4/1a/c050d8b6597200e97a4bd29b93c769d002fa0b03083858227e0376ad59bc/pyzmq-27.0.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b99ea9d330e86ce1ff7f2456b33f1bf81c43862a5590faf4ef4ed3a63504bdab", size = 1893632, upload-time = "2025-08-03T05:03:25.167Z" }, + { url = "https://files.pythonhosted.org/packages/6a/29/173ce21d5097e7fcf284a090e8beb64fc683c6582b1f00fa52b1b7e867ce/pyzmq-27.0.1-cp311-cp311-win32.whl", hash = "sha256:571f762aed89025ba8cdcbe355fea56889715ec06d0264fd8b6a3f3fa38154ed", size = 566587, upload-time = "2025-08-03T05:03:26.769Z" }, + { url = "https://files.pythonhosted.org/packages/53/ab/22bd33e7086f0a2cc03a5adabff4bde414288bb62a21a7820951ef86ec20/pyzmq-27.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:ee16906c8025fa464bea1e48128c048d02359fb40bebe5333103228528506530", size = 632873, upload-time = "2025-08-03T05:03:28.685Z" }, + { url = "https://files.pythonhosted.org/packages/90/14/3e59b4a28194285ceeff725eba9aa5ba8568d1cb78aed381dec1537c705a/pyzmq-27.0.1-cp311-cp311-win_arm64.whl", hash = "sha256:ba068f28028849da725ff9185c24f832ccf9207a40f9b28ac46ab7c04994bd41", size = 558918, upload-time = "2025-08-03T05:03:30.085Z" }, + { url = "https://files.pythonhosted.org/packages/0e/9b/c0957041067c7724b310f22c398be46399297c12ed834c3bc42200a2756f/pyzmq-27.0.1-cp312-abi3-macosx_10_15_universal2.whl", hash = "sha256:af7ebce2a1e7caf30c0bb64a845f63a69e76a2fadbc1cac47178f7bb6e657bdd", size = 1305432, upload-time = "2025-08-03T05:03:32.177Z" }, + { url = "https://files.pythonhosted.org/packages/8e/55/bd3a312790858f16b7def3897a0c3eb1804e974711bf7b9dcb5f47e7f82c/pyzmq-27.0.1-cp312-abi3-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:8f617f60a8b609a13099b313e7e525e67f84ef4524b6acad396d9ff153f6e4cd", size = 895095, upload-time = "2025-08-03T05:03:33.918Z" }, + { url = "https://files.pythonhosted.org/packages/20/50/fc384631d8282809fb1029a4460d2fe90fa0370a0e866a8318ed75c8d3bb/pyzmq-27.0.1-cp312-abi3-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1d59dad4173dc2a111f03e59315c7bd6e73da1a9d20a84a25cf08325b0582b1a", size = 651826, upload-time = "2025-08-03T05:03:35.818Z" }, + { url = "https://files.pythonhosted.org/packages/7e/0a/2356305c423a975000867de56888b79e44ec2192c690ff93c3109fd78081/pyzmq-27.0.1-cp312-abi3-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f5b6133c8d313bde8bd0d123c169d22525300ff164c2189f849de495e1344577", size = 839751, upload-time = "2025-08-03T05:03:37.265Z" }, + { url = "https://files.pythonhosted.org/packages/d7/1b/81e95ad256ca7e7ccd47f5294c1c6da6e2b64fbace65b84fe8a41470342e/pyzmq-27.0.1-cp312-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:58cca552567423f04d06a075f4b473e78ab5bdb906febe56bf4797633f54aa4e", size = 1641359, upload-time = "2025-08-03T05:03:38.799Z" }, + { url = "https://files.pythonhosted.org/packages/50/63/9f50ec965285f4e92c265c8f18344e46b12803666d8b73b65d254d441435/pyzmq-27.0.1-cp312-abi3-musllinux_1_2_i686.whl", hash = "sha256:4b9d8e26fb600d0d69cc9933e20af08552e97cc868a183d38a5c0d661e40dfbb", size = 2020281, upload-time = "2025-08-03T05:03:40.338Z" }, + { url = "https://files.pythonhosted.org/packages/02/4a/19e3398d0dc66ad2b463e4afa1fc541d697d7bc090305f9dfb948d3dfa29/pyzmq-27.0.1-cp312-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:2329f0c87f0466dce45bba32b63f47018dda5ca40a0085cc5c8558fea7d9fc55", size = 1877112, upload-time = "2025-08-03T05:03:42.012Z" }, + { url = "https://files.pythonhosted.org/packages/bf/42/c562e9151aa90ed1d70aac381ea22a929d6b3a2ce4e1d6e2e135d34fd9c6/pyzmq-27.0.1-cp312-abi3-win32.whl", hash = "sha256:57bb92abdb48467b89c2d21da1ab01a07d0745e536d62afd2e30d5acbd0092eb", size = 558177, upload-time = "2025-08-03T05:03:43.979Z" }, + { url = "https://files.pythonhosted.org/packages/40/96/5c50a7d2d2b05b19994bf7336b97db254299353dd9b49b565bb71b485f03/pyzmq-27.0.1-cp312-abi3-win_amd64.whl", hash = "sha256:ff3f8757570e45da7a5bedaa140489846510014f7a9d5ee9301c61f3f1b8a686", size = 618923, upload-time = "2025-08-03T05:03:45.438Z" }, + { url = "https://files.pythonhosted.org/packages/13/33/1ec89c8f21c89d21a2eaff7def3676e21d8248d2675705e72554fb5a6f3f/pyzmq-27.0.1-cp312-abi3-win_arm64.whl", hash = "sha256:df2c55c958d3766bdb3e9d858b911288acec09a9aab15883f384fc7180df5bed", size = 552358, upload-time = "2025-08-03T05:03:46.887Z" }, + { url = "https://files.pythonhosted.org/packages/6c/a0/f26e276211ec8090a4d11e4ec70eb8a8b15781e591c1d44ce62f372963a0/pyzmq-27.0.1-cp313-cp313-android_24_arm64_v8a.whl", hash = "sha256:497bd8af534ae55dc4ef67eebd1c149ff2a0b0f1e146db73c8b5a53d83c1a5f5", size = 1122287, upload-time = "2025-08-03T05:03:48.838Z" }, + { url = "https://files.pythonhosted.org/packages/9c/d8/af4b507e4f7eeea478cc8ee873995a6fd55582bfb99140593ed460e1db3c/pyzmq-27.0.1-cp313-cp313-android_24_x86_64.whl", hash = "sha256:a066ea6ad6218b4c233906adf0ae67830f451ed238419c0db609310dd781fbe7", size = 1155756, upload-time = "2025-08-03T05:03:50.907Z" }, + { url = "https://files.pythonhosted.org/packages/ac/55/37fae0013e11f88681da42698e550b08a316d608242551f65095cc99232a/pyzmq-27.0.1-cp313-cp313t-macosx_10_15_universal2.whl", hash = "sha256:72d235d6365ca73d8ce92f7425065d70f5c1e19baa458eb3f0d570e425b73a96", size = 1340826, upload-time = "2025-08-03T05:03:52.568Z" }, + { url = "https://files.pythonhosted.org/packages/f2/e4/3a87854c64b26fcf63a9d1b6f4382bd727d4797c772ceb334a97b7489be9/pyzmq-27.0.1-cp313-cp313t-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:313a7b374e3dc64848644ca348a51004b41726f768b02e17e689f1322366a4d9", size = 897283, upload-time = "2025-08-03T05:03:54.167Z" }, + { url = "https://files.pythonhosted.org/packages/17/3e/4296c6b0ad2d07be11ae1395dccf9cae48a0a655cf9be1c3733ad2b591d1/pyzmq-27.0.1-cp313-cp313t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:119ce8590409702394f959c159d048002cbed2f3c0645ec9d6a88087fc70f0f1", size = 660565, upload-time = "2025-08-03T05:03:56.152Z" }, + { url = "https://files.pythonhosted.org/packages/72/41/a33ba3aa48b45b23c4cd4ac49aafde46f3e0f81939f2bfb3b6171a437122/pyzmq-27.0.1-cp313-cp313t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:45c3e00ce16896ace2cd770ab9057a7cf97d4613ea5f2a13f815141d8b6894b9", size = 847680, upload-time = "2025-08-03T05:03:57.696Z" }, + { url = "https://files.pythonhosted.org/packages/3f/8c/bf2350bb25b3b58d2e5b5d2290ffab0e923f0cc6d02288d3fbf4baa6e4d1/pyzmq-27.0.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:678e50ec112bdc6df5a83ac259a55a4ba97a8b314c325ab26b3b5b071151bc61", size = 1650151, upload-time = "2025-08-03T05:03:59.387Z" }, + { url = "https://files.pythonhosted.org/packages/f7/1a/a5a07c54890891344a8ddc3d5ab320dd3c4e39febb6e4472546e456d5157/pyzmq-27.0.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:d0b96c30be9f9387b18b18b6133c75a7b1b0065da64e150fe1feb5ebf31ece1c", size = 2023766, upload-time = "2025-08-03T05:04:01.883Z" }, + { url = "https://files.pythonhosted.org/packages/62/5e/514dcff08f02c6c8a45a6e23621901139cf853be7ac5ccd0b9407c3aa3de/pyzmq-27.0.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:88dc92d9eb5ea4968123e74db146d770b0c8d48f0e2bfb1dbc6c50a8edb12d64", size = 1885195, upload-time = "2025-08-03T05:04:03.923Z" }, + { url = "https://files.pythonhosted.org/packages/c8/91/87f74f98a487fbef0b115f6025e4a295129fd56b2b633a03ba7d5816ecc2/pyzmq-27.0.1-cp313-cp313t-win32.whl", hash = "sha256:6dcbcb34f5c9b0cefdfc71ff745459241b7d3cda5b27c7ad69d45afc0821d1e1", size = 574213, upload-time = "2025-08-03T05:04:05.905Z" }, + { url = "https://files.pythonhosted.org/packages/e6/d7/07f7d0d7f4c81e08be7b60e52ff2591c557377c017f96204d33d5fca1b07/pyzmq-27.0.1-cp313-cp313t-win_amd64.whl", hash = "sha256:b9fd0fda730461f510cfd9a40fafa5355d65f5e3dbdd8d6dfa342b5b3f5d1949", size = 640202, upload-time = "2025-08-03T05:04:07.439Z" }, + { url = "https://files.pythonhosted.org/packages/ab/83/21d66bcef6fb803647a223cbde95111b099e2176277c0cbc8b099c485510/pyzmq-27.0.1-cp313-cp313t-win_arm64.whl", hash = "sha256:56a3b1853f3954ec1f0e91085f1350cc57d18f11205e4ab6e83e4b7c414120e0", size = 561514, upload-time = "2025-08-03T05:04:09.071Z" }, + { url = "https://files.pythonhosted.org/packages/5a/0b/d5ea75cf46b52cdce85a85200c963cb498932953df443892238be49b1a01/pyzmq-27.0.1-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:f98f6b7787bd2beb1f0dde03f23a0621a0c978edf673b7d8f5e7bc039cbe1b60", size = 1340836, upload-time = "2025-08-03T05:04:10.774Z" }, + { url = "https://files.pythonhosted.org/packages/be/4c/0dbce882550e17db6846b29e9dc242aea7590e7594e1ca5043e8e58fff2d/pyzmq-27.0.1-cp314-cp314t-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:351bf5d8ca0788ca85327fda45843b6927593ff4c807faee368cc5aaf9f809c2", size = 897236, upload-time = "2025-08-03T05:04:13.221Z" }, + { url = "https://files.pythonhosted.org/packages/1b/22/461e131cf16b8814f3c356fa1ea0912697dbc4c64cddf01f7756ec704c1e/pyzmq-27.0.1-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5268a5a9177afff53dc6d70dffe63114ba2a6e7b20d9411cc3adeba09eeda403", size = 660374, upload-time = "2025-08-03T05:04:15.032Z" }, + { url = "https://files.pythonhosted.org/packages/3f/0c/bbd65a814395bf4fc3e57c6c13af27601c07e4009bdfb75ebcf500537bbd/pyzmq-27.0.1-cp314-cp314t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a4aca06ba295aa78bec9b33ec028d1ca08744c36294338c41432b7171060c808", size = 847497, upload-time = "2025-08-03T05:04:16.967Z" }, + { url = "https://files.pythonhosted.org/packages/1e/df/3d1f4a03b561d824cbd491394f67591957e2f1acf6dc85d96f970312a76a/pyzmq-27.0.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:1c363c6dc66352331d5ad64bb838765c6692766334a6a02fdb05e76bd408ae18", size = 1650028, upload-time = "2025-08-03T05:04:19.398Z" }, + { url = "https://files.pythonhosted.org/packages/41/c9/a3987540f59a412bdaae3f362f78e00e6769557a598c63b7e32956aade5a/pyzmq-27.0.1-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:87aebf4acd7249bdff8d3df03aed4f09e67078e6762cfe0aecf8d0748ff94cde", size = 2023808, upload-time = "2025-08-03T05:04:21.145Z" }, + { url = "https://files.pythonhosted.org/packages/b0/a5/c388f4cd80498a8eaef7535f2a8eaca0a35b82b87a0b47fa1856fc135004/pyzmq-27.0.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:e4f22d67756518d71901edf73b38dc0eb4765cce22c8fe122cc81748d425262b", size = 1884970, upload-time = "2025-08-03T05:04:22.908Z" }, + { url = "https://files.pythonhosted.org/packages/9a/ac/b2a89a1ed90526a1b9a260cdc5cd42f055fd44ee8d2a59902b5ac35ddeb1/pyzmq-27.0.1-cp314-cp314t-win32.whl", hash = "sha256:8c62297bc7aea2147b472ca5ca2b4389377ad82898c87cabab2a94aedd75e337", size = 586905, upload-time = "2025-08-03T05:04:24.492Z" }, + { url = "https://files.pythonhosted.org/packages/68/62/7aa5ea04e836f7a788b2a67405f83011cef59ca76d7bac91d1fc9a0476da/pyzmq-27.0.1-cp314-cp314t-win_amd64.whl", hash = "sha256:bee5248d5ec9223545f8cc4f368c2d571477ae828c99409125c3911511d98245", size = 660503, upload-time = "2025-08-03T05:04:26.382Z" }, + { url = "https://files.pythonhosted.org/packages/89/32/3836ed85947b06f1d67c07ce16c00b0cf8c053ab0b249d234f9f81ff95ff/pyzmq-27.0.1-cp314-cp314t-win_arm64.whl", hash = "sha256:0fc24bf45e4a454e55ef99d7f5c8b8712539200ce98533af25a5bfa954b6b390", size = 575098, upload-time = "2025-08-03T05:04:27.974Z" }, + { url = "https://files.pythonhosted.org/packages/b4/1a/49f66fe0bc2b2568dd4280f1f520ac8fafd73f8d762140e278d48aeaf7b9/pyzmq-27.0.1-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:7fb0ee35845bef1e8c4a152d766242164e138c239e3182f558ae15cb4a891f94", size = 835949, upload-time = "2025-08-03T05:05:13.798Z" }, + { url = "https://files.pythonhosted.org/packages/49/94/443c1984b397eab59b14dd7ae8bc2ac7e8f32dbc646474453afcaa6508c4/pyzmq-27.0.1-pp311-pypy311_pp73-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:f379f11e138dfd56c3f24a04164f871a08281194dd9ddf656a278d7d080c8ad0", size = 799875, upload-time = "2025-08-03T05:05:15.632Z" }, + { url = "https://files.pythonhosted.org/packages/30/f1/fd96138a0f152786a2ba517e9c6a8b1b3516719e412a90bb5d8eea6b660c/pyzmq-27.0.1-pp311-pypy311_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b978c0678cffbe8860ec9edc91200e895c29ae1ac8a7085f947f8e8864c489fb", size = 567403, upload-time = "2025-08-03T05:05:17.326Z" }, + { url = "https://files.pythonhosted.org/packages/16/57/34e53ef2b55b1428dac5aabe3a974a16c8bda3bf20549ba500e3ff6cb426/pyzmq-27.0.1-pp311-pypy311_pp73-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7ebccf0d760bc92a4a7c751aeb2fef6626144aace76ee8f5a63abeb100cae87f", size = 747032, upload-time = "2025-08-03T05:05:19.074Z" }, + { url = "https://files.pythonhosted.org/packages/81/b7/769598c5ae336fdb657946950465569cf18803140fe89ce466d7f0a57c11/pyzmq-27.0.1-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:77fed80e30fa65708546c4119840a46691290efc231f6bfb2ac2a39b52e15811", size = 544566, upload-time = "2025-08-03T05:05:20.798Z" }, +] + +[[package]] +name = "referencing" +version = "0.36.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "attrs" }, + { name = "rpds-py" }, + { name = "typing-extensions", marker = "python_full_version < '3.13'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/2f/db/98b5c277be99dd18bfd91dd04e1b759cad18d1a338188c936e92f921c7e2/referencing-0.36.2.tar.gz", hash = "sha256:df2e89862cd09deabbdba16944cc3f10feb6b3e6f18e902f7cc25609a34775aa", size = 74744, upload-time = "2025-01-25T08:48:16.138Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c1/b1/3baf80dc6d2b7bc27a95a67752d0208e410351e3feb4eb78de5f77454d8d/referencing-0.36.2-py3-none-any.whl", hash = "sha256:e8699adbbf8b5c7de96d8ffa0eb5c158b3beafce084968e2ea8bb08c6794dcd0", size = 26775, upload-time = "2025-01-25T08:48:14.241Z" }, +] + +[[package]] +name = "regex" +version = "2025.7.34" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/0b/de/e13fa6dc61d78b30ba47481f99933a3b49a57779d625c392d8036770a60d/regex-2025.7.34.tar.gz", hash = "sha256:9ead9765217afd04a86822dfcd4ed2747dfe426e887da413b15ff0ac2457e21a", size = 400714, upload-time = "2025-07-31T00:21:16.262Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0d/85/f497b91577169472f7c1dc262a5ecc65e39e146fc3a52c571e5daaae4b7d/regex-2025.7.34-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:da304313761b8500b8e175eb2040c4394a875837d5635f6256d6fa0377ad32c8", size = 484594, upload-time = "2025-07-31T00:19:13.927Z" }, + { url = "https://files.pythonhosted.org/packages/1c/c5/ad2a5c11ce9e6257fcbfd6cd965d07502f6054aaa19d50a3d7fd991ec5d1/regex-2025.7.34-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:35e43ebf5b18cd751ea81455b19acfdec402e82fe0dc6143edfae4c5c4b3909a", size = 289294, upload-time = "2025-07-31T00:19:15.395Z" }, + { url = "https://files.pythonhosted.org/packages/8e/01/83ffd9641fcf5e018f9b51aa922c3e538ac9439424fda3df540b643ecf4f/regex-2025.7.34-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:96bbae4c616726f4661fe7bcad5952e10d25d3c51ddc388189d8864fbc1b3c68", size = 285933, upload-time = "2025-07-31T00:19:16.704Z" }, + { url = "https://files.pythonhosted.org/packages/77/20/5edab2e5766f0259bc1da7381b07ce6eb4401b17b2254d02f492cd8a81a8/regex-2025.7.34-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9feab78a1ffa4f2b1e27b1bcdaad36f48c2fed4870264ce32f52a393db093c78", size = 792335, upload-time = "2025-07-31T00:19:18.561Z" }, + { url = "https://files.pythonhosted.org/packages/30/bd/744d3ed8777dce8487b2606b94925e207e7c5931d5870f47f5b643a4580a/regex-2025.7.34-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f14b36e6d4d07f1a5060f28ef3b3561c5d95eb0651741474ce4c0a4c56ba8719", size = 858605, upload-time = "2025-07-31T00:19:20.204Z" }, + { url = "https://files.pythonhosted.org/packages/99/3d/93754176289718d7578c31d151047e7b8acc7a8c20e7706716f23c49e45e/regex-2025.7.34-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:85c3a958ef8b3d5079c763477e1f09e89d13ad22198a37e9d7b26b4b17438b33", size = 905780, upload-time = "2025-07-31T00:19:21.876Z" }, + { url = "https://files.pythonhosted.org/packages/ee/2e/c689f274a92deffa03999a430505ff2aeace408fd681a90eafa92fdd6930/regex-2025.7.34-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:37555e4ae0b93358fa7c2d240a4291d4a4227cc7c607d8f85596cdb08ec0a083", size = 798868, upload-time = "2025-07-31T00:19:23.222Z" }, + { url = "https://files.pythonhosted.org/packages/0d/9e/39673688805d139b33b4a24851a71b9978d61915c4d72b5ffda324d0668a/regex-2025.7.34-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:ee38926f31f1aa61b0232a3a11b83461f7807661c062df9eb88769d86e6195c3", size = 781784, upload-time = "2025-07-31T00:19:24.59Z" }, + { url = "https://files.pythonhosted.org/packages/18/bd/4c1cab12cfabe14beaa076523056b8ab0c882a8feaf0a6f48b0a75dab9ed/regex-2025.7.34-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:a664291c31cae9c4a30589bd8bc2ebb56ef880c9c6264cb7643633831e606a4d", size = 852837, upload-time = "2025-07-31T00:19:25.911Z" }, + { url = "https://files.pythonhosted.org/packages/cb/21/663d983cbb3bba537fc213a579abbd0f263fb28271c514123f3c547ab917/regex-2025.7.34-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:f3e5c1e0925e77ec46ddc736b756a6da50d4df4ee3f69536ffb2373460e2dafd", size = 844240, upload-time = "2025-07-31T00:19:27.688Z" }, + { url = "https://files.pythonhosted.org/packages/8e/2d/9beeeb913bc5d32faa913cf8c47e968da936af61ec20af5d269d0f84a100/regex-2025.7.34-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:d428fc7731dcbb4e2ffe43aeb8f90775ad155e7db4347a639768bc6cd2df881a", size = 787139, upload-time = "2025-07-31T00:19:29.475Z" }, + { url = "https://files.pythonhosted.org/packages/eb/f5/9b9384415fdc533551be2ba805dd8c4621873e5df69c958f403bfd3b2b6e/regex-2025.7.34-cp311-cp311-win32.whl", hash = "sha256:e154a7ee7fa18333ad90b20e16ef84daaeac61877c8ef942ec8dfa50dc38b7a1", size = 264019, upload-time = "2025-07-31T00:19:31.129Z" }, + { url = "https://files.pythonhosted.org/packages/18/9d/e069ed94debcf4cc9626d652a48040b079ce34c7e4fb174f16874958d485/regex-2025.7.34-cp311-cp311-win_amd64.whl", hash = "sha256:24257953d5c1d6d3c129ab03414c07fc1a47833c9165d49b954190b2b7f21a1a", size = 276047, upload-time = "2025-07-31T00:19:32.497Z" }, + { url = "https://files.pythonhosted.org/packages/fd/cf/3bafbe9d1fd1db77355e7fbbbf0d0cfb34501a8b8e334deca14f94c7b315/regex-2025.7.34-cp311-cp311-win_arm64.whl", hash = "sha256:3157aa512b9e606586900888cd469a444f9b898ecb7f8931996cb715f77477f0", size = 268362, upload-time = "2025-07-31T00:19:34.094Z" }, + { url = "https://files.pythonhosted.org/packages/ff/f0/31d62596c75a33f979317658e8d261574785c6cd8672c06741ce2e2e2070/regex-2025.7.34-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:7f7211a746aced993bef487de69307a38c5ddd79257d7be83f7b202cb59ddb50", size = 485492, upload-time = "2025-07-31T00:19:35.57Z" }, + { url = "https://files.pythonhosted.org/packages/d8/16/b818d223f1c9758c3434be89aa1a01aae798e0e0df36c1f143d1963dd1ee/regex-2025.7.34-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:fb31080f2bd0681484b275461b202b5ad182f52c9ec606052020fe13eb13a72f", size = 290000, upload-time = "2025-07-31T00:19:37.175Z" }, + { url = "https://files.pythonhosted.org/packages/cd/70/69506d53397b4bd6954061bae75677ad34deb7f6ca3ba199660d6f728ff5/regex-2025.7.34-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0200a5150c4cf61e407038f4b4d5cdad13e86345dac29ff9dab3d75d905cf130", size = 286072, upload-time = "2025-07-31T00:19:38.612Z" }, + { url = "https://files.pythonhosted.org/packages/b0/73/536a216d5f66084fb577bb0543b5cb7de3272eb70a157f0c3a542f1c2551/regex-2025.7.34-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:739a74970e736df0773788377969c9fea3876c2fc13d0563f98e5503e5185f46", size = 797341, upload-time = "2025-07-31T00:19:40.119Z" }, + { url = "https://files.pythonhosted.org/packages/26/af/733f8168449e56e8f404bb807ea7189f59507cbea1b67a7bbcd92f8bf844/regex-2025.7.34-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:4fef81b2f7ea6a2029161ed6dea9ae13834c28eb5a95b8771828194a026621e4", size = 862556, upload-time = "2025-07-31T00:19:41.556Z" }, + { url = "https://files.pythonhosted.org/packages/19/dd/59c464d58c06c4f7d87de4ab1f590e430821345a40c5d345d449a636d15f/regex-2025.7.34-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:ea74cf81fe61a7e9d77989050d0089a927ab758c29dac4e8e1b6c06fccf3ebf0", size = 910762, upload-time = "2025-07-31T00:19:43Z" }, + { url = "https://files.pythonhosted.org/packages/37/a8/b05ccf33ceca0815a1e253693b2c86544932ebcc0049c16b0fbdf18b688b/regex-2025.7.34-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e4636a7f3b65a5f340ed9ddf53585c42e3ff37101d383ed321bfe5660481744b", size = 801892, upload-time = "2025-07-31T00:19:44.645Z" }, + { url = "https://files.pythonhosted.org/packages/5f/9a/b993cb2e634cc22810afd1652dba0cae156c40d4864285ff486c73cd1996/regex-2025.7.34-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6cef962d7834437fe8d3da6f9bfc6f93f20f218266dcefec0560ed7765f5fe01", size = 786551, upload-time = "2025-07-31T00:19:46.127Z" }, + { url = "https://files.pythonhosted.org/packages/2d/79/7849d67910a0de4e26834b5bb816e028e35473f3d7ae563552ea04f58ca2/regex-2025.7.34-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:cbe1698e5b80298dbce8df4d8d1182279fbdaf1044e864cbc9d53c20e4a2be77", size = 856457, upload-time = "2025-07-31T00:19:47.562Z" }, + { url = "https://files.pythonhosted.org/packages/91/c6/de516bc082524b27e45cb4f54e28bd800c01efb26d15646a65b87b13a91e/regex-2025.7.34-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:32b9f9bcf0f605eb094b08e8da72e44badabb63dde6b83bd530580b488d1c6da", size = 848902, upload-time = "2025-07-31T00:19:49.312Z" }, + { url = "https://files.pythonhosted.org/packages/7d/22/519ff8ba15f732db099b126f039586bd372da6cd4efb810d5d66a5daeda1/regex-2025.7.34-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:524c868ba527eab4e8744a9287809579f54ae8c62fbf07d62aacd89f6026b282", size = 788038, upload-time = "2025-07-31T00:19:50.794Z" }, + { url = "https://files.pythonhosted.org/packages/3f/7d/aabb467d8f57d8149895d133c88eb809a1a6a0fe262c1d508eb9dfabb6f9/regex-2025.7.34-cp312-cp312-win32.whl", hash = "sha256:d600e58ee6d036081c89696d2bdd55d507498a7180df2e19945c6642fac59588", size = 264417, upload-time = "2025-07-31T00:19:52.292Z" }, + { url = "https://files.pythonhosted.org/packages/3b/39/bd922b55a4fc5ad5c13753274e5b536f5b06ec8eb9747675668491c7ab7a/regex-2025.7.34-cp312-cp312-win_amd64.whl", hash = "sha256:9a9ab52a466a9b4b91564437b36417b76033e8778e5af8f36be835d8cb370d62", size = 275387, upload-time = "2025-07-31T00:19:53.593Z" }, + { url = "https://files.pythonhosted.org/packages/f7/3c/c61d2fdcecb754a40475a3d1ef9a000911d3e3fc75c096acf44b0dfb786a/regex-2025.7.34-cp312-cp312-win_arm64.whl", hash = "sha256:c83aec91af9c6fbf7c743274fd952272403ad9a9db05fe9bfc9df8d12b45f176", size = 268482, upload-time = "2025-07-31T00:19:55.183Z" }, + { url = "https://files.pythonhosted.org/packages/15/16/b709b2119975035169a25aa8e4940ca177b1a2e25e14f8d996d09130368e/regex-2025.7.34-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:c3c9740a77aeef3f5e3aaab92403946a8d34437db930a0280e7e81ddcada61f5", size = 485334, upload-time = "2025-07-31T00:19:56.58Z" }, + { url = "https://files.pythonhosted.org/packages/94/a6/c09136046be0595f0331bc58a0e5f89c2d324cf734e0b0ec53cf4b12a636/regex-2025.7.34-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:69ed3bc611540f2ea70a4080f853741ec698be556b1df404599f8724690edbcd", size = 289942, upload-time = "2025-07-31T00:19:57.943Z" }, + { url = "https://files.pythonhosted.org/packages/36/91/08fc0fd0f40bdfb0e0df4134ee37cfb16e66a1044ac56d36911fd01c69d2/regex-2025.7.34-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:d03c6f9dcd562c56527c42b8530aad93193e0b3254a588be1f2ed378cdfdea1b", size = 285991, upload-time = "2025-07-31T00:19:59.837Z" }, + { url = "https://files.pythonhosted.org/packages/be/2f/99dc8f6f756606f0c214d14c7b6c17270b6bbe26d5c1f05cde9dbb1c551f/regex-2025.7.34-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6164b1d99dee1dfad33f301f174d8139d4368a9fb50bf0a3603b2eaf579963ad", size = 797415, upload-time = "2025-07-31T00:20:01.668Z" }, + { url = "https://files.pythonhosted.org/packages/62/cf/2fcdca1110495458ba4e95c52ce73b361cf1cafd8a53b5c31542cde9a15b/regex-2025.7.34-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:1e4f4f62599b8142362f164ce776f19d79bdd21273e86920a7b604a4275b4f59", size = 862487, upload-time = "2025-07-31T00:20:03.142Z" }, + { url = "https://files.pythonhosted.org/packages/90/38/899105dd27fed394e3fae45607c1983e138273ec167e47882fc401f112b9/regex-2025.7.34-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:72a26dcc6a59c057b292f39d41465d8233a10fd69121fa24f8f43ec6294e5415", size = 910717, upload-time = "2025-07-31T00:20:04.727Z" }, + { url = "https://files.pythonhosted.org/packages/ee/f6/4716198dbd0bcc9c45625ac4c81a435d1c4d8ad662e8576dac06bab35b17/regex-2025.7.34-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d5273fddf7a3e602695c92716c420c377599ed3c853ea669c1fe26218867002f", size = 801943, upload-time = "2025-07-31T00:20:07.1Z" }, + { url = "https://files.pythonhosted.org/packages/40/5d/cff8896d27e4e3dd11dd72ac78797c7987eb50fe4debc2c0f2f1682eb06d/regex-2025.7.34-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c1844be23cd40135b3a5a4dd298e1e0c0cb36757364dd6cdc6025770363e06c1", size = 786664, upload-time = "2025-07-31T00:20:08.818Z" }, + { url = "https://files.pythonhosted.org/packages/10/29/758bf83cf7b4c34f07ac3423ea03cee3eb3176941641e4ccc05620f6c0b8/regex-2025.7.34-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:dde35e2afbbe2272f8abee3b9fe6772d9b5a07d82607b5788e8508974059925c", size = 856457, upload-time = "2025-07-31T00:20:10.328Z" }, + { url = "https://files.pythonhosted.org/packages/d7/30/c19d212b619963c5b460bfed0ea69a092c6a43cba52a973d46c27b3e2975/regex-2025.7.34-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:f3f6e8e7af516a7549412ce57613e859c3be27d55341a894aacaa11703a4c31a", size = 849008, upload-time = "2025-07-31T00:20:11.823Z" }, + { url = "https://files.pythonhosted.org/packages/9e/b8/3c35da3b12c87e3cc00010ef6c3a4ae787cff0bc381aa3d251def219969a/regex-2025.7.34-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:469142fb94a869beb25b5f18ea87646d21def10fbacb0bcb749224f3509476f0", size = 788101, upload-time = "2025-07-31T00:20:13.729Z" }, + { url = "https://files.pythonhosted.org/packages/47/80/2f46677c0b3c2b723b2c358d19f9346e714113865da0f5f736ca1a883bde/regex-2025.7.34-cp313-cp313-win32.whl", hash = "sha256:da7507d083ee33ccea1310447410c27ca11fb9ef18c95899ca57ff60a7e4d8f1", size = 264401, upload-time = "2025-07-31T00:20:15.233Z" }, + { url = "https://files.pythonhosted.org/packages/be/fa/917d64dd074682606a003cba33585c28138c77d848ef72fc77cbb1183849/regex-2025.7.34-cp313-cp313-win_amd64.whl", hash = "sha256:9d644de5520441e5f7e2db63aec2748948cc39ed4d7a87fd5db578ea4043d997", size = 275368, upload-time = "2025-07-31T00:20:16.711Z" }, + { url = "https://files.pythonhosted.org/packages/65/cd/f94383666704170a2154a5df7b16be28f0c27a266bffcd843e58bc84120f/regex-2025.7.34-cp313-cp313-win_arm64.whl", hash = "sha256:7bf1c5503a9f2cbd2f52d7e260acb3131b07b6273c470abb78568174fe6bde3f", size = 268482, upload-time = "2025-07-31T00:20:18.189Z" }, + { url = "https://files.pythonhosted.org/packages/ac/23/6376f3a23cf2f3c00514b1cdd8c990afb4dfbac3cb4a68b633c6b7e2e307/regex-2025.7.34-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:8283afe7042d8270cecf27cca558873168e771183d4d593e3c5fe5f12402212a", size = 485385, upload-time = "2025-07-31T00:20:19.692Z" }, + { url = "https://files.pythonhosted.org/packages/73/5b/6d4d3a0b4d312adbfd6d5694c8dddcf1396708976dd87e4d00af439d962b/regex-2025.7.34-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:6c053f9647e3421dd2f5dff8172eb7b4eec129df9d1d2f7133a4386319b47435", size = 289788, upload-time = "2025-07-31T00:20:21.941Z" }, + { url = "https://files.pythonhosted.org/packages/92/71/5862ac9913746e5054d01cb9fb8125b3d0802c0706ef547cae1e7f4428fa/regex-2025.7.34-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:a16dd56bbcb7d10e62861c3cd000290ddff28ea142ffb5eb3470f183628011ac", size = 286136, upload-time = "2025-07-31T00:20:26.146Z" }, + { url = "https://files.pythonhosted.org/packages/27/df/5b505dc447eb71278eba10d5ec940769ca89c1af70f0468bfbcb98035dc2/regex-2025.7.34-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:69c593ff5a24c0d5c1112b0df9b09eae42b33c014bdca7022d6523b210b69f72", size = 797753, upload-time = "2025-07-31T00:20:27.919Z" }, + { url = "https://files.pythonhosted.org/packages/86/38/3e3dc953d13998fa047e9a2414b556201dbd7147034fbac129392363253b/regex-2025.7.34-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:98d0ce170fcde1a03b5df19c5650db22ab58af375aaa6ff07978a85c9f250f0e", size = 863263, upload-time = "2025-07-31T00:20:29.803Z" }, + { url = "https://files.pythonhosted.org/packages/68/e5/3ff66b29dde12f5b874dda2d9dec7245c2051f2528d8c2a797901497f140/regex-2025.7.34-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d72765a4bff8c43711d5b0f5b452991a9947853dfa471972169b3cc0ba1d0751", size = 910103, upload-time = "2025-07-31T00:20:31.313Z" }, + { url = "https://files.pythonhosted.org/packages/9e/fe/14176f2182125977fba3711adea73f472a11f3f9288c1317c59cd16ad5e6/regex-2025.7.34-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4494f8fd95a77eb434039ad8460e64d57baa0434f1395b7da44015bef650d0e4", size = 801709, upload-time = "2025-07-31T00:20:33.323Z" }, + { url = "https://files.pythonhosted.org/packages/5a/0d/80d4e66ed24f1ba876a9e8e31b709f9fd22d5c266bf5f3ab3c1afe683d7d/regex-2025.7.34-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:4f42b522259c66e918a0121a12429b2abcf696c6f967fa37bdc7b72e61469f98", size = 786726, upload-time = "2025-07-31T00:20:35.252Z" }, + { url = "https://files.pythonhosted.org/packages/12/75/c3ebb30e04a56c046f5c85179dc173818551037daae2c0c940c7b19152cb/regex-2025.7.34-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:aaef1f056d96a0a5d53ad47d019d5b4c66fe4be2da87016e0d43b7242599ffc7", size = 857306, upload-time = "2025-07-31T00:20:37.12Z" }, + { url = "https://files.pythonhosted.org/packages/b1/b2/a4dc5d8b14f90924f27f0ac4c4c4f5e195b723be98adecc884f6716614b6/regex-2025.7.34-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:656433e5b7dccc9bc0da6312da8eb897b81f5e560321ec413500e5367fcd5d47", size = 848494, upload-time = "2025-07-31T00:20:38.818Z" }, + { url = "https://files.pythonhosted.org/packages/0d/21/9ac6e07a4c5e8646a90b56b61f7e9dac11ae0747c857f91d3d2bc7c241d9/regex-2025.7.34-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:e91eb2c62c39705e17b4d42d4b86c4e86c884c0d15d9c5a47d0835f8387add8e", size = 787850, upload-time = "2025-07-31T00:20:40.478Z" }, + { url = "https://files.pythonhosted.org/packages/be/6c/d51204e28e7bc54f9a03bb799b04730d7e54ff2718862b8d4e09e7110a6a/regex-2025.7.34-cp314-cp314-win32.whl", hash = "sha256:f978ddfb6216028c8f1d6b0f7ef779949498b64117fc35a939022f67f810bdcb", size = 269730, upload-time = "2025-07-31T00:20:42.253Z" }, + { url = "https://files.pythonhosted.org/packages/74/52/a7e92d02fa1fdef59d113098cb9f02c5d03289a0e9f9e5d4d6acccd10677/regex-2025.7.34-cp314-cp314-win_amd64.whl", hash = "sha256:4b7dc33b9b48fb37ead12ffc7bdb846ac72f99a80373c4da48f64b373a7abeae", size = 278640, upload-time = "2025-07-31T00:20:44.42Z" }, + { url = "https://files.pythonhosted.org/packages/d1/78/a815529b559b1771080faa90c3ab401730661f99d495ab0071649f139ebd/regex-2025.7.34-cp314-cp314-win_arm64.whl", hash = "sha256:4b8c4d39f451e64809912c82392933d80fe2e4a87eeef8859fcc5380d0173c64", size = 271757, upload-time = "2025-07-31T00:20:46.355Z" }, +] + +[[package]] +name = "requests" +version = "2.32.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi" }, + { name = "charset-normalizer" }, + { name = "idna" }, + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e1/0a/929373653770d8a0d7ea76c37de6e41f11eb07559b103b1c02cafb3f7cf8/requests-2.32.4.tar.gz", hash = "sha256:27d0316682c8a29834d3264820024b62a36942083d52caf2f14c0591336d3422", size = 135258, upload-time = "2025-06-09T16:43:07.34Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7c/e4/56027c4a6b4ae70ca9de302488c5ca95ad4a39e190093d6c1a8ace08341b/requests-2.32.4-py3-none-any.whl", hash = "sha256:27babd3cda2a6d50b30443204ee89830707d396671944c998b5975b031ac2b2c", size = 64847, upload-time = "2025-06-09T16:43:05.728Z" }, +] + +[[package]] +name = "responses" +version = "0.25.7" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pyyaml" }, + { name = "requests" }, + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/81/7e/2345ac3299bd62bd7163216702bbc88976c099cfceba5b889f2a457727a1/responses-0.25.7.tar.gz", hash = "sha256:8ebae11405d7a5df79ab6fd54277f6f2bc29b2d002d0dd2d5c632594d1ddcedb", size = 79203, upload-time = "2025-03-11T15:36:16.624Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e4/fc/1d20b64fa90e81e4fa0a34c9b0240a6cfb1326b7e06d18a5432a9917c316/responses-0.25.7-py3-none-any.whl", hash = "sha256:92ca17416c90fe6b35921f52179bff29332076bb32694c0df02dcac2c6bc043c", size = 34732, upload-time = "2025-03-11T15:36:14.589Z" }, +] + +[[package]] +name = "rfc3339-validator" +version = "0.1.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "six" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/28/ea/a9387748e2d111c3c2b275ba970b735e04e15cdb1eb30693b6b5708c4dbd/rfc3339_validator-0.1.4.tar.gz", hash = "sha256:138a2abdf93304ad60530167e51d2dfb9549521a836871b88d7f4695d0022f6b", size = 5513, upload-time = "2021-05-12T16:37:54.178Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7b/44/4e421b96b67b2daff264473f7465db72fbdf36a07e05494f50300cc7b0c6/rfc3339_validator-0.1.4-py2.py3-none-any.whl", hash = "sha256:24f6ec1eda14ef823da9e36ec7113124b39c04d50a4d3d3a3c2859577e7791fa", size = 3490, upload-time = "2021-05-12T16:37:52.536Z" }, +] + +[[package]] +name = "rich" +version = "14.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markdown-it-py" }, + { name = "pygments" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/fe/75/af448d8e52bf1d8fa6a9d089ca6c07ff4453d86c65c145d0a300bb073b9b/rich-14.1.0.tar.gz", hash = "sha256:e497a48b844b0320d45007cdebfeaeed8db2a4f4bcf49f15e455cfc4af11eaa8", size = 224441, upload-time = "2025-07-25T07:32:58.125Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e3/30/3c4d035596d3cf444529e0b2953ad0466f6049528a879d27534700580395/rich-14.1.0-py3-none-any.whl", hash = "sha256:536f5f1785986d6dbdea3c75205c473f970777b4a0d6c6dd1b696aa05a3fa04f", size = 243368, upload-time = "2025-07-25T07:32:56.73Z" }, +] + +[[package]] +name = "rpds-py" +version = "0.26.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a5/aa/4456d84bbb54adc6a916fb10c9b374f78ac840337644e4a5eda229c81275/rpds_py-0.26.0.tar.gz", hash = "sha256:20dae58a859b0906f0685642e591056f1e787f3a8b39c8e8749a45dc7d26bdb0", size = 27385, upload-time = "2025-07-01T15:57:13.958Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/09/4c/4ee8f7e512030ff79fda1df3243c88d70fc874634e2dbe5df13ba4210078/rpds_py-0.26.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:9e8cb77286025bdb21be2941d64ac6ca016130bfdcd228739e8ab137eb4406ed", size = 372610, upload-time = "2025-07-01T15:53:58.844Z" }, + { url = "https://files.pythonhosted.org/packages/fa/9d/3dc16be00f14fc1f03c71b1d67c8df98263ab2710a2fbd65a6193214a527/rpds_py-0.26.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5e09330b21d98adc8ccb2dbb9fc6cb434e8908d4c119aeaa772cb1caab5440a0", size = 358032, upload-time = "2025-07-01T15:53:59.985Z" }, + { url = "https://files.pythonhosted.org/packages/e7/5a/7f1bf8f045da2866324a08ae80af63e64e7bfaf83bd31f865a7b91a58601/rpds_py-0.26.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c9c1b92b774b2e68d11193dc39620d62fd8ab33f0a3c77ecdabe19c179cdbc1", size = 381525, upload-time = "2025-07-01T15:54:01.162Z" }, + { url = "https://files.pythonhosted.org/packages/45/8a/04479398c755a066ace10e3d158866beb600867cacae194c50ffa783abd0/rpds_py-0.26.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:824e6d3503ab990d7090768e4dfd9e840837bae057f212ff9f4f05ec6d1975e7", size = 397089, upload-time = "2025-07-01T15:54:02.319Z" }, + { url = "https://files.pythonhosted.org/packages/72/88/9203f47268db488a1b6d469d69c12201ede776bb728b9d9f29dbfd7df406/rpds_py-0.26.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8ad7fd2258228bf288f2331f0a6148ad0186b2e3643055ed0db30990e59817a6", size = 514255, upload-time = "2025-07-01T15:54:03.38Z" }, + { url = "https://files.pythonhosted.org/packages/f5/b4/01ce5d1e853ddf81fbbd4311ab1eff0b3cf162d559288d10fd127e2588b5/rpds_py-0.26.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0dc23bbb3e06ec1ea72d515fb572c1fea59695aefbffb106501138762e1e915e", size = 402283, upload-time = "2025-07-01T15:54:04.923Z" }, + { url = "https://files.pythonhosted.org/packages/34/a2/004c99936997bfc644d590a9defd9e9c93f8286568f9c16cdaf3e14429a7/rpds_py-0.26.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d80bf832ac7b1920ee29a426cdca335f96a2b5caa839811803e999b41ba9030d", size = 383881, upload-time = "2025-07-01T15:54:06.482Z" }, + { url = "https://files.pythonhosted.org/packages/05/1b/ef5fba4a8f81ce04c427bfd96223f92f05e6cd72291ce9d7523db3b03a6c/rpds_py-0.26.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0919f38f5542c0a87e7b4afcafab6fd2c15386632d249e9a087498571250abe3", size = 415822, upload-time = "2025-07-01T15:54:07.605Z" }, + { url = "https://files.pythonhosted.org/packages/16/80/5c54195aec456b292f7bd8aa61741c8232964063fd8a75fdde9c1e982328/rpds_py-0.26.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d422b945683e409000c888e384546dbab9009bb92f7c0b456e217988cf316107", size = 558347, upload-time = "2025-07-01T15:54:08.591Z" }, + { url = "https://files.pythonhosted.org/packages/f2/1c/1845c1b1fd6d827187c43afe1841d91678d7241cbdb5420a4c6de180a538/rpds_py-0.26.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:77a7711fa562ba2da1aa757e11024ad6d93bad6ad7ede5afb9af144623e5f76a", size = 587956, upload-time = "2025-07-01T15:54:09.963Z" }, + { url = "https://files.pythonhosted.org/packages/2e/ff/9e979329dd131aa73a438c077252ddabd7df6d1a7ad7b9aacf6261f10faa/rpds_py-0.26.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:238e8c8610cb7c29460e37184f6799547f7e09e6a9bdbdab4e8edb90986a2318", size = 554363, upload-time = "2025-07-01T15:54:11.073Z" }, + { url = "https://files.pythonhosted.org/packages/00/8b/d78cfe034b71ffbe72873a136e71acc7a831a03e37771cfe59f33f6de8a2/rpds_py-0.26.0-cp311-cp311-win32.whl", hash = "sha256:893b022bfbdf26d7bedb083efeea624e8550ca6eb98bf7fea30211ce95b9201a", size = 220123, upload-time = "2025-07-01T15:54:12.382Z" }, + { url = "https://files.pythonhosted.org/packages/94/c1/3c8c94c7dd3905dbfde768381ce98778500a80db9924731d87ddcdb117e9/rpds_py-0.26.0-cp311-cp311-win_amd64.whl", hash = "sha256:87a5531de9f71aceb8af041d72fc4cab4943648d91875ed56d2e629bef6d4c03", size = 231732, upload-time = "2025-07-01T15:54:13.434Z" }, + { url = "https://files.pythonhosted.org/packages/67/93/e936fbed1b734eabf36ccb5d93c6a2e9246fbb13c1da011624b7286fae3e/rpds_py-0.26.0-cp311-cp311-win_arm64.whl", hash = "sha256:de2713f48c1ad57f89ac25b3cb7daed2156d8e822cf0eca9b96a6f990718cc41", size = 221917, upload-time = "2025-07-01T15:54:14.559Z" }, + { url = "https://files.pythonhosted.org/packages/ea/86/90eb87c6f87085868bd077c7a9938006eb1ce19ed4d06944a90d3560fce2/rpds_py-0.26.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:894514d47e012e794f1350f076c427d2347ebf82f9b958d554d12819849a369d", size = 363933, upload-time = "2025-07-01T15:54:15.734Z" }, + { url = "https://files.pythonhosted.org/packages/63/78/4469f24d34636242c924626082b9586f064ada0b5dbb1e9d096ee7a8e0c6/rpds_py-0.26.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:fc921b96fa95a097add244da36a1d9e4f3039160d1d30f1b35837bf108c21136", size = 350447, upload-time = "2025-07-01T15:54:16.922Z" }, + { url = "https://files.pythonhosted.org/packages/ad/91/c448ed45efdfdade82348d5e7995e15612754826ea640afc20915119734f/rpds_py-0.26.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e1157659470aa42a75448b6e943c895be8c70531c43cb78b9ba990778955582", size = 384711, upload-time = "2025-07-01T15:54:18.101Z" }, + { url = "https://files.pythonhosted.org/packages/ec/43/e5c86fef4be7f49828bdd4ecc8931f0287b1152c0bb0163049b3218740e7/rpds_py-0.26.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:521ccf56f45bb3a791182dc6b88ae5f8fa079dd705ee42138c76deb1238e554e", size = 400865, upload-time = "2025-07-01T15:54:19.295Z" }, + { url = "https://files.pythonhosted.org/packages/55/34/e00f726a4d44f22d5c5fe2e5ddd3ac3d7fd3f74a175607781fbdd06fe375/rpds_py-0.26.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9def736773fd56b305c0eef698be5192c77bfa30d55a0e5885f80126c4831a15", size = 517763, upload-time = "2025-07-01T15:54:20.858Z" }, + { url = "https://files.pythonhosted.org/packages/52/1c/52dc20c31b147af724b16104500fba13e60123ea0334beba7b40e33354b4/rpds_py-0.26.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cdad4ea3b4513b475e027be79e5a0ceac8ee1c113a1a11e5edc3c30c29f964d8", size = 406651, upload-time = "2025-07-01T15:54:22.508Z" }, + { url = "https://files.pythonhosted.org/packages/2e/77/87d7bfabfc4e821caa35481a2ff6ae0b73e6a391bb6b343db2c91c2b9844/rpds_py-0.26.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:82b165b07f416bdccf5c84546a484cc8f15137ca38325403864bfdf2b5b72f6a", size = 386079, upload-time = "2025-07-01T15:54:23.987Z" }, + { url = "https://files.pythonhosted.org/packages/e3/d4/7f2200c2d3ee145b65b3cddc4310d51f7da6a26634f3ac87125fd789152a/rpds_py-0.26.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d04cab0a54b9dba4d278fe955a1390da3cf71f57feb78ddc7cb67cbe0bd30323", size = 421379, upload-time = "2025-07-01T15:54:25.073Z" }, + { url = "https://files.pythonhosted.org/packages/ae/13/9fdd428b9c820869924ab62236b8688b122baa22d23efdd1c566938a39ba/rpds_py-0.26.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:79061ba1a11b6a12743a2b0f72a46aa2758613d454aa6ba4f5a265cc48850158", size = 562033, upload-time = "2025-07-01T15:54:26.225Z" }, + { url = "https://files.pythonhosted.org/packages/f3/e1/b69686c3bcbe775abac3a4c1c30a164a2076d28df7926041f6c0eb5e8d28/rpds_py-0.26.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:f405c93675d8d4c5ac87364bb38d06c988e11028a64b52a47158a355079661f3", size = 591639, upload-time = "2025-07-01T15:54:27.424Z" }, + { url = "https://files.pythonhosted.org/packages/5c/c9/1e3d8c8863c84a90197ac577bbc3d796a92502124c27092413426f670990/rpds_py-0.26.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:dafd4c44b74aa4bed4b250f1aed165b8ef5de743bcca3b88fc9619b6087093d2", size = 557105, upload-time = "2025-07-01T15:54:29.93Z" }, + { url = "https://files.pythonhosted.org/packages/9f/c5/90c569649057622959f6dcc40f7b516539608a414dfd54b8d77e3b201ac0/rpds_py-0.26.0-cp312-cp312-win32.whl", hash = "sha256:3da5852aad63fa0c6f836f3359647870e21ea96cf433eb393ffa45263a170d44", size = 223272, upload-time = "2025-07-01T15:54:31.128Z" }, + { url = "https://files.pythonhosted.org/packages/7d/16/19f5d9f2a556cfed454eebe4d354c38d51c20f3db69e7b4ce6cff904905d/rpds_py-0.26.0-cp312-cp312-win_amd64.whl", hash = "sha256:cf47cfdabc2194a669dcf7a8dbba62e37a04c5041d2125fae0233b720da6f05c", size = 234995, upload-time = "2025-07-01T15:54:32.195Z" }, + { url = "https://files.pythonhosted.org/packages/83/f0/7935e40b529c0e752dfaa7880224771b51175fce08b41ab4a92eb2fbdc7f/rpds_py-0.26.0-cp312-cp312-win_arm64.whl", hash = "sha256:20ab1ae4fa534f73647aad289003f1104092890849e0266271351922ed5574f8", size = 223198, upload-time = "2025-07-01T15:54:33.271Z" }, + { url = "https://files.pythonhosted.org/packages/6a/67/bb62d0109493b12b1c6ab00de7a5566aa84c0e44217c2d94bee1bd370da9/rpds_py-0.26.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:696764a5be111b036256c0b18cd29783fab22154690fc698062fc1b0084b511d", size = 363917, upload-time = "2025-07-01T15:54:34.755Z" }, + { url = "https://files.pythonhosted.org/packages/4b/f3/34e6ae1925a5706c0f002a8d2d7f172373b855768149796af87bd65dcdb9/rpds_py-0.26.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:1e6c15d2080a63aaed876e228efe4f814bc7889c63b1e112ad46fdc8b368b9e1", size = 350073, upload-time = "2025-07-01T15:54:36.292Z" }, + { url = "https://files.pythonhosted.org/packages/75/83/1953a9d4f4e4de7fd0533733e041c28135f3c21485faaef56a8aadbd96b5/rpds_py-0.26.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:390e3170babf42462739a93321e657444f0862c6d722a291accc46f9d21ed04e", size = 384214, upload-time = "2025-07-01T15:54:37.469Z" }, + { url = "https://files.pythonhosted.org/packages/48/0e/983ed1b792b3322ea1d065e67f4b230f3b96025f5ce3878cc40af09b7533/rpds_py-0.26.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7da84c2c74c0f5bc97d853d9e17bb83e2dcafcff0dc48286916001cc114379a1", size = 400113, upload-time = "2025-07-01T15:54:38.954Z" }, + { url = "https://files.pythonhosted.org/packages/69/7f/36c0925fff6f660a80be259c5b4f5e53a16851f946eb080351d057698528/rpds_py-0.26.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4c5fe114a6dd480a510b6d3661d09d67d1622c4bf20660a474507aaee7eeeee9", size = 515189, upload-time = "2025-07-01T15:54:40.57Z" }, + { url = "https://files.pythonhosted.org/packages/13/45/cbf07fc03ba7a9b54662c9badb58294ecfb24f828b9732970bd1a431ed5c/rpds_py-0.26.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3100b3090269f3a7ea727b06a6080d4eb7439dca4c0e91a07c5d133bb1727ea7", size = 406998, upload-time = "2025-07-01T15:54:43.025Z" }, + { url = "https://files.pythonhosted.org/packages/6c/b0/8fa5e36e58657997873fd6a1cf621285ca822ca75b4b3434ead047daa307/rpds_py-0.26.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2c03c9b0c64afd0320ae57de4c982801271c0c211aa2d37f3003ff5feb75bb04", size = 385903, upload-time = "2025-07-01T15:54:44.752Z" }, + { url = "https://files.pythonhosted.org/packages/4b/f7/b25437772f9f57d7a9fbd73ed86d0dcd76b4c7c6998348c070d90f23e315/rpds_py-0.26.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5963b72ccd199ade6ee493723d18a3f21ba7d5b957017607f815788cef50eaf1", size = 419785, upload-time = "2025-07-01T15:54:46.043Z" }, + { url = "https://files.pythonhosted.org/packages/a7/6b/63ffa55743dfcb4baf2e9e77a0b11f7f97ed96a54558fcb5717a4b2cd732/rpds_py-0.26.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:9da4e873860ad5bab3291438525cae80169daecbfafe5657f7f5fb4d6b3f96b9", size = 561329, upload-time = "2025-07-01T15:54:47.64Z" }, + { url = "https://files.pythonhosted.org/packages/2f/07/1f4f5e2886c480a2346b1e6759c00278b8a69e697ae952d82ae2e6ee5db0/rpds_py-0.26.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:5afaddaa8e8c7f1f7b4c5c725c0070b6eed0228f705b90a1732a48e84350f4e9", size = 590875, upload-time = "2025-07-01T15:54:48.9Z" }, + { url = "https://files.pythonhosted.org/packages/cc/bc/e6639f1b91c3a55f8c41b47d73e6307051b6e246254a827ede730624c0f8/rpds_py-0.26.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4916dc96489616a6f9667e7526af8fa693c0fdb4f3acb0e5d9f4400eb06a47ba", size = 556636, upload-time = "2025-07-01T15:54:50.619Z" }, + { url = "https://files.pythonhosted.org/packages/05/4c/b3917c45566f9f9a209d38d9b54a1833f2bb1032a3e04c66f75726f28876/rpds_py-0.26.0-cp313-cp313-win32.whl", hash = "sha256:2a343f91b17097c546b93f7999976fd6c9d5900617aa848c81d794e062ab302b", size = 222663, upload-time = "2025-07-01T15:54:52.023Z" }, + { url = "https://files.pythonhosted.org/packages/e0/0b/0851bdd6025775aaa2365bb8de0697ee2558184c800bfef8d7aef5ccde58/rpds_py-0.26.0-cp313-cp313-win_amd64.whl", hash = "sha256:0a0b60701f2300c81b2ac88a5fb893ccfa408e1c4a555a77f908a2596eb875a5", size = 234428, upload-time = "2025-07-01T15:54:53.692Z" }, + { url = "https://files.pythonhosted.org/packages/ed/e8/a47c64ed53149c75fb581e14a237b7b7cd18217e969c30d474d335105622/rpds_py-0.26.0-cp313-cp313-win_arm64.whl", hash = "sha256:257d011919f133a4746958257f2c75238e3ff54255acd5e3e11f3ff41fd14256", size = 222571, upload-time = "2025-07-01T15:54:54.822Z" }, + { url = "https://files.pythonhosted.org/packages/89/bf/3d970ba2e2bcd17d2912cb42874107390f72873e38e79267224110de5e61/rpds_py-0.26.0-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:529c8156d7506fba5740e05da8795688f87119cce330c244519cf706a4a3d618", size = 360475, upload-time = "2025-07-01T15:54:56.228Z" }, + { url = "https://files.pythonhosted.org/packages/82/9f/283e7e2979fc4ec2d8ecee506d5a3675fce5ed9b4b7cb387ea5d37c2f18d/rpds_py-0.26.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:f53ec51f9d24e9638a40cabb95078ade8c99251945dad8d57bf4aabe86ecee35", size = 346692, upload-time = "2025-07-01T15:54:58.561Z" }, + { url = "https://files.pythonhosted.org/packages/e3/03/7e50423c04d78daf391da3cc4330bdb97042fc192a58b186f2d5deb7befd/rpds_py-0.26.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ab504c4d654e4a29558eaa5bb8cea5fdc1703ea60a8099ffd9c758472cf913f", size = 379415, upload-time = "2025-07-01T15:54:59.751Z" }, + { url = "https://files.pythonhosted.org/packages/57/00/d11ee60d4d3b16808432417951c63df803afb0e0fc672b5e8d07e9edaaae/rpds_py-0.26.0-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fd0641abca296bc1a00183fe44f7fced8807ed49d501f188faa642d0e4975b83", size = 391783, upload-time = "2025-07-01T15:55:00.898Z" }, + { url = "https://files.pythonhosted.org/packages/08/b3/1069c394d9c0d6d23c5b522e1f6546b65793a22950f6e0210adcc6f97c3e/rpds_py-0.26.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:69b312fecc1d017b5327afa81d4da1480f51c68810963a7336d92203dbb3d4f1", size = 512844, upload-time = "2025-07-01T15:55:02.201Z" }, + { url = "https://files.pythonhosted.org/packages/08/3b/c4fbf0926800ed70b2c245ceca99c49f066456755f5d6eb8863c2c51e6d0/rpds_py-0.26.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c741107203954f6fc34d3066d213d0a0c40f7bb5aafd698fb39888af277c70d8", size = 402105, upload-time = "2025-07-01T15:55:03.698Z" }, + { url = "https://files.pythonhosted.org/packages/1c/b0/db69b52ca07413e568dae9dc674627a22297abb144c4d6022c6d78f1e5cc/rpds_py-0.26.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc3e55a7db08dc9a6ed5fb7103019d2c1a38a349ac41901f9f66d7f95750942f", size = 383440, upload-time = "2025-07-01T15:55:05.398Z" }, + { url = "https://files.pythonhosted.org/packages/4c/e1/c65255ad5b63903e56b3bb3ff9dcc3f4f5c3badde5d08c741ee03903e951/rpds_py-0.26.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9e851920caab2dbcae311fd28f4313c6953993893eb5c1bb367ec69d9a39e7ed", size = 412759, upload-time = "2025-07-01T15:55:08.316Z" }, + { url = "https://files.pythonhosted.org/packages/e4/22/bb731077872377a93c6e93b8a9487d0406c70208985831034ccdeed39c8e/rpds_py-0.26.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:dfbf280da5f876d0b00c81f26bedce274e72a678c28845453885a9b3c22ae632", size = 556032, upload-time = "2025-07-01T15:55:09.52Z" }, + { url = "https://files.pythonhosted.org/packages/e0/8b/393322ce7bac5c4530fb96fc79cc9ea2f83e968ff5f6e873f905c493e1c4/rpds_py-0.26.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:1cc81d14ddfa53d7f3906694d35d54d9d3f850ef8e4e99ee68bc0d1e5fed9a9c", size = 585416, upload-time = "2025-07-01T15:55:11.216Z" }, + { url = "https://files.pythonhosted.org/packages/49/ae/769dc372211835bf759319a7aae70525c6eb523e3371842c65b7ef41c9c6/rpds_py-0.26.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:dca83c498b4650a91efcf7b88d669b170256bf8017a5db6f3e06c2bf031f57e0", size = 554049, upload-time = "2025-07-01T15:55:13.004Z" }, + { url = "https://files.pythonhosted.org/packages/6b/f9/4c43f9cc203d6ba44ce3146246cdc38619d92c7bd7bad4946a3491bd5b70/rpds_py-0.26.0-cp313-cp313t-win32.whl", hash = "sha256:4d11382bcaf12f80b51d790dee295c56a159633a8e81e6323b16e55d81ae37e9", size = 218428, upload-time = "2025-07-01T15:55:14.486Z" }, + { url = "https://files.pythonhosted.org/packages/7e/8b/9286b7e822036a4a977f2f1e851c7345c20528dbd56b687bb67ed68a8ede/rpds_py-0.26.0-cp313-cp313t-win_amd64.whl", hash = "sha256:ff110acded3c22c033e637dd8896e411c7d3a11289b2edf041f86663dbc791e9", size = 231524, upload-time = "2025-07-01T15:55:15.745Z" }, + { url = "https://files.pythonhosted.org/packages/55/07/029b7c45db910c74e182de626dfdae0ad489a949d84a468465cd0ca36355/rpds_py-0.26.0-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:da619979df60a940cd434084355c514c25cf8eb4cf9a508510682f6c851a4f7a", size = 364292, upload-time = "2025-07-01T15:55:17.001Z" }, + { url = "https://files.pythonhosted.org/packages/13/d1/9b3d3f986216b4d1f584878dca15ce4797aaf5d372d738974ba737bf68d6/rpds_py-0.26.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:ea89a2458a1a75f87caabefe789c87539ea4e43b40f18cff526052e35bbb4fdf", size = 350334, upload-time = "2025-07-01T15:55:18.922Z" }, + { url = "https://files.pythonhosted.org/packages/18/98/16d5e7bc9ec715fa9668731d0cf97f6b032724e61696e2db3d47aeb89214/rpds_py-0.26.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:feac1045b3327a45944e7dcbeb57530339f6b17baff154df51ef8b0da34c8c12", size = 384875, upload-time = "2025-07-01T15:55:20.399Z" }, + { url = "https://files.pythonhosted.org/packages/f9/13/aa5e2b1ec5ab0e86a5c464d53514c0467bec6ba2507027d35fc81818358e/rpds_py-0.26.0-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b818a592bd69bfe437ee8368603d4a2d928c34cffcdf77c2e761a759ffd17d20", size = 399993, upload-time = "2025-07-01T15:55:21.729Z" }, + { url = "https://files.pythonhosted.org/packages/17/03/8021810b0e97923abdbab6474c8b77c69bcb4b2c58330777df9ff69dc559/rpds_py-0.26.0-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1a8b0dd8648709b62d9372fc00a57466f5fdeefed666afe3fea5a6c9539a0331", size = 516683, upload-time = "2025-07-01T15:55:22.918Z" }, + { url = "https://files.pythonhosted.org/packages/dc/b1/da8e61c87c2f3d836954239fdbbfb477bb7b54d74974d8f6fcb34342d166/rpds_py-0.26.0-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6d3498ad0df07d81112aa6ec6c95a7e7b1ae00929fb73e7ebee0f3faaeabad2f", size = 408825, upload-time = "2025-07-01T15:55:24.207Z" }, + { url = "https://files.pythonhosted.org/packages/38/bc/1fc173edaaa0e52c94b02a655db20697cb5fa954ad5a8e15a2c784c5cbdd/rpds_py-0.26.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:24a4146ccb15be237fdef10f331c568e1b0e505f8c8c9ed5d67759dac58ac246", size = 387292, upload-time = "2025-07-01T15:55:25.554Z" }, + { url = "https://files.pythonhosted.org/packages/7c/eb/3a9bb4bd90867d21916f253caf4f0d0be7098671b6715ad1cead9fe7bab9/rpds_py-0.26.0-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a9a63785467b2d73635957d32a4f6e73d5e4df497a16a6392fa066b753e87387", size = 420435, upload-time = "2025-07-01T15:55:27.798Z" }, + { url = "https://files.pythonhosted.org/packages/cd/16/e066dcdb56f5632713445271a3f8d3d0b426d51ae9c0cca387799df58b02/rpds_py-0.26.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:de4ed93a8c91debfd5a047be327b7cc8b0cc6afe32a716bbbc4aedca9e2a83af", size = 562410, upload-time = "2025-07-01T15:55:29.057Z" }, + { url = "https://files.pythonhosted.org/packages/60/22/ddbdec7eb82a0dc2e455be44c97c71c232983e21349836ce9f272e8a3c29/rpds_py-0.26.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:caf51943715b12af827696ec395bfa68f090a4c1a1d2509eb4e2cb69abbbdb33", size = 590724, upload-time = "2025-07-01T15:55:30.719Z" }, + { url = "https://files.pythonhosted.org/packages/2c/b4/95744085e65b7187d83f2fcb0bef70716a1ea0a9e5d8f7f39a86e5d83424/rpds_py-0.26.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:4a59e5bc386de021f56337f757301b337d7ab58baa40174fb150accd480bc953", size = 558285, upload-time = "2025-07-01T15:55:31.981Z" }, + { url = "https://files.pythonhosted.org/packages/37/37/6309a75e464d1da2559446f9c811aa4d16343cebe3dbb73701e63f760caa/rpds_py-0.26.0-cp314-cp314-win32.whl", hash = "sha256:92c8db839367ef16a662478f0a2fe13e15f2227da3c1430a782ad0f6ee009ec9", size = 223459, upload-time = "2025-07-01T15:55:33.312Z" }, + { url = "https://files.pythonhosted.org/packages/d9/6f/8e9c11214c46098b1d1391b7e02b70bb689ab963db3b19540cba17315291/rpds_py-0.26.0-cp314-cp314-win_amd64.whl", hash = "sha256:b0afb8cdd034150d4d9f53926226ed27ad15b7f465e93d7468caaf5eafae0d37", size = 236083, upload-time = "2025-07-01T15:55:34.933Z" }, + { url = "https://files.pythonhosted.org/packages/47/af/9c4638994dd623d51c39892edd9d08e8be8220a4b7e874fa02c2d6e91955/rpds_py-0.26.0-cp314-cp314-win_arm64.whl", hash = "sha256:ca3f059f4ba485d90c8dc75cb5ca897e15325e4e609812ce57f896607c1c0867", size = 223291, upload-time = "2025-07-01T15:55:36.202Z" }, + { url = "https://files.pythonhosted.org/packages/4d/db/669a241144460474aab03e254326b32c42def83eb23458a10d163cb9b5ce/rpds_py-0.26.0-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:5afea17ab3a126006dc2f293b14ffc7ef3c85336cf451564a0515ed7648033da", size = 361445, upload-time = "2025-07-01T15:55:37.483Z" }, + { url = "https://files.pythonhosted.org/packages/3b/2d/133f61cc5807c6c2fd086a46df0eb8f63a23f5df8306ff9f6d0fd168fecc/rpds_py-0.26.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:69f0c0a3df7fd3a7eec50a00396104bb9a843ea6d45fcc31c2d5243446ffd7a7", size = 347206, upload-time = "2025-07-01T15:55:38.828Z" }, + { url = "https://files.pythonhosted.org/packages/05/bf/0e8fb4c05f70273469eecf82f6ccf37248558526a45321644826555db31b/rpds_py-0.26.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:801a71f70f9813e82d2513c9a96532551fce1e278ec0c64610992c49c04c2dad", size = 380330, upload-time = "2025-07-01T15:55:40.175Z" }, + { url = "https://files.pythonhosted.org/packages/d4/a8/060d24185d8b24d3923322f8d0ede16df4ade226a74e747b8c7c978e3dd3/rpds_py-0.26.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:df52098cde6d5e02fa75c1f6244f07971773adb4a26625edd5c18fee906fa84d", size = 392254, upload-time = "2025-07-01T15:55:42.015Z" }, + { url = "https://files.pythonhosted.org/packages/b9/7b/7c2e8a9ee3e6bc0bae26bf29f5219955ca2fbb761dca996a83f5d2f773fe/rpds_py-0.26.0-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9bc596b30f86dc6f0929499c9e574601679d0341a0108c25b9b358a042f51bca", size = 516094, upload-time = "2025-07-01T15:55:43.603Z" }, + { url = "https://files.pythonhosted.org/packages/75/d6/f61cafbed8ba1499b9af9f1777a2a199cd888f74a96133d8833ce5eaa9c5/rpds_py-0.26.0-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9dfbe56b299cf5875b68eb6f0ebaadc9cac520a1989cac0db0765abfb3709c19", size = 402889, upload-time = "2025-07-01T15:55:45.275Z" }, + { url = "https://files.pythonhosted.org/packages/92/19/c8ac0a8a8df2dd30cdec27f69298a5c13e9029500d6d76718130f5e5be10/rpds_py-0.26.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ac64f4b2bdb4ea622175c9ab7cf09444e412e22c0e02e906978b3b488af5fde8", size = 384301, upload-time = "2025-07-01T15:55:47.098Z" }, + { url = "https://files.pythonhosted.org/packages/41/e1/6b1859898bc292a9ce5776016c7312b672da00e25cec74d7beced1027286/rpds_py-0.26.0-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:181ef9b6bbf9845a264f9aa45c31836e9f3c1f13be565d0d010e964c661d1e2b", size = 412891, upload-time = "2025-07-01T15:55:48.412Z" }, + { url = "https://files.pythonhosted.org/packages/ef/b9/ceb39af29913c07966a61367b3c08b4f71fad841e32c6b59a129d5974698/rpds_py-0.26.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:49028aa684c144ea502a8e847d23aed5e4c2ef7cadfa7d5eaafcb40864844b7a", size = 557044, upload-time = "2025-07-01T15:55:49.816Z" }, + { url = "https://files.pythonhosted.org/packages/2f/27/35637b98380731a521f8ec4f3fd94e477964f04f6b2f8f7af8a2d889a4af/rpds_py-0.26.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:e5d524d68a474a9688336045bbf76cb0def88549c1b2ad9dbfec1fb7cfbe9170", size = 585774, upload-time = "2025-07-01T15:55:51.192Z" }, + { url = "https://files.pythonhosted.org/packages/52/d9/3f0f105420fecd18551b678c9a6ce60bd23986098b252a56d35781b3e7e9/rpds_py-0.26.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:c1851f429b822831bd2edcbe0cfd12ee9ea77868f8d3daf267b189371671c80e", size = 554886, upload-time = "2025-07-01T15:55:52.541Z" }, + { url = "https://files.pythonhosted.org/packages/6b/c5/347c056a90dc8dd9bc240a08c527315008e1b5042e7a4cf4ac027be9d38a/rpds_py-0.26.0-cp314-cp314t-win32.whl", hash = "sha256:7bdb17009696214c3b66bb3590c6d62e14ac5935e53e929bcdbc5a495987a84f", size = 219027, upload-time = "2025-07-01T15:55:53.874Z" }, + { url = "https://files.pythonhosted.org/packages/75/04/5302cea1aa26d886d34cadbf2dc77d90d7737e576c0065f357b96dc7a1a6/rpds_py-0.26.0-cp314-cp314t-win_amd64.whl", hash = "sha256:f14440b9573a6f76b4ee4770c13f0b5921f71dde3b6fcb8dabbefd13b7fe05d7", size = 232821, upload-time = "2025-07-01T15:55:55.167Z" }, + { url = "https://files.pythonhosted.org/packages/51/f2/b5c85b758a00c513bb0389f8fc8e61eb5423050c91c958cdd21843faa3e6/rpds_py-0.26.0-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:f61a9326f80ca59214d1cceb0a09bb2ece5b2563d4e0cd37bfd5515c28510674", size = 373505, upload-time = "2025-07-01T15:56:34.716Z" }, + { url = "https://files.pythonhosted.org/packages/23/e0/25db45e391251118e915e541995bb5f5ac5691a3b98fb233020ba53afc9b/rpds_py-0.26.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:183f857a53bcf4b1b42ef0f57ca553ab56bdd170e49d8091e96c51c3d69ca696", size = 359468, upload-time = "2025-07-01T15:56:36.219Z" }, + { url = "https://files.pythonhosted.org/packages/0b/73/dd5ee6075bb6491be3a646b301dfd814f9486d924137a5098e61f0487e16/rpds_py-0.26.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:941c1cfdf4799d623cf3aa1d326a6b4fdb7a5799ee2687f3516738216d2262fb", size = 382680, upload-time = "2025-07-01T15:56:37.644Z" }, + { url = "https://files.pythonhosted.org/packages/2f/10/84b522ff58763a5c443f5bcedc1820240e454ce4e620e88520f04589e2ea/rpds_py-0.26.0-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:72a8d9564a717ee291f554eeb4bfeafe2309d5ec0aa6c475170bdab0f9ee8e88", size = 397035, upload-time = "2025-07-01T15:56:39.241Z" }, + { url = "https://files.pythonhosted.org/packages/06/ea/8667604229a10a520fcbf78b30ccc278977dcc0627beb7ea2c96b3becef0/rpds_py-0.26.0-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:511d15193cbe013619dd05414c35a7dedf2088fcee93c6bbb7c77859765bd4e8", size = 514922, upload-time = "2025-07-01T15:56:40.645Z" }, + { url = "https://files.pythonhosted.org/packages/24/e6/9ed5b625c0661c4882fc8cdf302bf8e96c73c40de99c31e0b95ed37d508c/rpds_py-0.26.0-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aea1f9741b603a8d8fedb0ed5502c2bc0accbc51f43e2ad1337fe7259c2b77a5", size = 402822, upload-time = "2025-07-01T15:56:42.137Z" }, + { url = "https://files.pythonhosted.org/packages/8a/58/212c7b6fd51946047fb45d3733da27e2fa8f7384a13457c874186af691b1/rpds_py-0.26.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4019a9d473c708cf2f16415688ef0b4639e07abaa569d72f74745bbeffafa2c7", size = 384336, upload-time = "2025-07-01T15:56:44.239Z" }, + { url = "https://files.pythonhosted.org/packages/aa/f5/a40ba78748ae8ebf4934d4b88e77b98497378bc2c24ba55ebe87a4e87057/rpds_py-0.26.0-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:093d63b4b0f52d98ebae33b8c50900d3d67e0666094b1be7a12fffd7f65de74b", size = 416871, upload-time = "2025-07-01T15:56:46.284Z" }, + { url = "https://files.pythonhosted.org/packages/d5/a6/33b1fc0c9f7dcfcfc4a4353daa6308b3ece22496ceece348b3e7a7559a09/rpds_py-0.26.0-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:2abe21d8ba64cded53a2a677e149ceb76dcf44284202d737178afe7ba540c1eb", size = 559439, upload-time = "2025-07-01T15:56:48.549Z" }, + { url = "https://files.pythonhosted.org/packages/71/2d/ceb3f9c12f8cfa56d34995097f6cd99da1325642c60d1b6680dd9df03ed8/rpds_py-0.26.0-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:4feb7511c29f8442cbbc28149a92093d32e815a28aa2c50d333826ad2a20fdf0", size = 588380, upload-time = "2025-07-01T15:56:50.086Z" }, + { url = "https://files.pythonhosted.org/packages/c8/ed/9de62c2150ca8e2e5858acf3f4f4d0d180a38feef9fdab4078bea63d8dba/rpds_py-0.26.0-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:e99685fc95d386da368013e7fb4269dd39c30d99f812a8372d62f244f662709c", size = 555334, upload-time = "2025-07-01T15:56:51.703Z" }, +] + +[[package]] +name = "s3fs" +version = "2025.7.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "aiobotocore" }, + { name = "aiohttp" }, + { name = "fsspec" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/bf/13/37438c4672ba1d23ec46df0e4b57e98469e5c5f4f98313cf6842b631652b/s3fs-2025.7.0.tar.gz", hash = "sha256:5e7f9ec0cad7745155e3eb86fae15b1481fa29946bf5b3a4ce3a60701ce6022d", size = 77795, upload-time = "2025-07-15T16:35:22.177Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ff/c7/30d13b7fd4f866ca3f30e9a6e7ae038f0c45226f6e26b3cc98d6d197f93b/s3fs-2025.7.0-py3-none-any.whl", hash = "sha256:b6b2d3f84b6aa1c2ba5e62e39dd9410cf54f10a2cce1ea6db1ba0d1a6bcce685", size = 30315, upload-time = "2025-07-15T16:35:20.734Z" }, +] + +[[package]] +name = "s3transfer" +version = "0.13.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "botocore" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/6d/05/d52bf1e65044b4e5e27d4e63e8d1579dbdec54fce685908ae09bc3720030/s3transfer-0.13.1.tar.gz", hash = "sha256:c3fdba22ba1bd367922f27ec8032d6a1cf5f10c934fb5d68cf60fd5a23d936cf", size = 150589, upload-time = "2025-07-18T19:22:42.31Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6d/4f/d073e09df851cfa251ef7840007d04db3293a0482ce607d2b993926089be/s3transfer-0.13.1-py3-none-any.whl", hash = "sha256:a981aa7429be23fe6dfc13e80e4020057cbab622b08c0315288758d67cabc724", size = 85308, upload-time = "2025-07-18T19:22:40.947Z" }, +] + +[[package]] +name = "setuptools" +version = "80.9.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/18/5d/3bf57dcd21979b887f014ea83c24ae194cfcd12b9e0fda66b957c69d1fca/setuptools-80.9.0.tar.gz", hash = "sha256:f36b47402ecde768dbfafc46e8e4207b4360c654f1f3bb84475f0a28628fb19c", size = 1319958, upload-time = "2025-05-27T00:56:51.443Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a3/dc/17031897dae0efacfea57dfd3a82fdd2a2aeb58e0ff71b77b87e44edc772/setuptools-80.9.0-py3-none-any.whl", hash = "sha256:062d34222ad13e0cc312a4c02d73f059e86a4acbfbdea8f8f76b28c99f306922", size = 1201486, upload-time = "2025-05-27T00:56:49.664Z" }, +] + +[[package]] +name = "six" +version = "1.17.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/94/e7/b2c673351809dca68a0e064b6af791aa332cf192da575fd474ed7d6f16a2/six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81", size = 34031, upload-time = "2024-12-04T17:35:28.174Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050, upload-time = "2024-12-04T17:35:26.475Z" }, +] + +[[package]] +name = "sniffio" +version = "1.3.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a2/87/a6771e1546d97e7e041b6ae58d80074f81b7d5121207425c964ddf5cfdbd/sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc", size = 20372, upload-time = "2024-02-25T23:20:04.057Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2", size = 10235, upload-time = "2024-02-25T23:20:01.196Z" }, +] + +[[package]] +name = "snowballstemmer" +version = "3.0.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/75/a7/9810d872919697c9d01295633f5d574fb416d47e535f258272ca1f01f447/snowballstemmer-3.0.1.tar.gz", hash = "sha256:6d5eeeec8e9f84d4d56b847692bacf79bc2c8e90c7f80ca4444ff8b6f2e52895", size = 105575, upload-time = "2025-05-09T16:34:51.843Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c8/78/3565d011c61f5a43488987ee32b6f3f656e7f107ac2782dd57bdd7d91d9a/snowballstemmer-3.0.1-py3-none-any.whl", hash = "sha256:6cd7b3897da8d6c9ffb968a6781fa6532dce9c3618a4b127d920dab764a19064", size = 103274, upload-time = "2025-05-09T16:34:50.371Z" }, +] + +[[package]] +name = "sortedcontainers" +version = "2.4.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e8/c4/ba2f8066cceb6f23394729afe52f3bf7adec04bf9ed2c820b39e19299111/sortedcontainers-2.4.0.tar.gz", hash = "sha256:25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88", size = 30594, upload-time = "2021-05-16T22:03:42.897Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl", hash = "sha256:a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0", size = 29575, upload-time = "2021-05-16T22:03:41.177Z" }, +] + +[[package]] +name = "soupsieve" +version = "2.7" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/3f/f4/4a80cd6ef364b2e8b65b15816a843c0980f7a5a2b4dc701fc574952aa19f/soupsieve-2.7.tar.gz", hash = "sha256:ad282f9b6926286d2ead4750552c8a6142bc4c783fd66b0293547c8fe6ae126a", size = 103418, upload-time = "2025-04-20T18:50:08.518Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e7/9c/0e6afc12c269578be5c0c1c9f4b49a8d32770a080260c333ac04cc1c832d/soupsieve-2.7-py3-none-any.whl", hash = "sha256:6e60cc5c1ffaf1cebcc12e8188320b72071e922c2e897f737cadce79ad5d30c4", size = 36677, upload-time = "2025-04-20T18:50:07.196Z" }, +] + +[[package]] +name = "sphinx" +version = "8.1.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "alabaster" }, + { name = "babel" }, + { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "docutils" }, + { name = "imagesize" }, + { name = "jinja2" }, + { name = "packaging" }, + { name = "pygments" }, + { name = "requests" }, + { name = "snowballstemmer" }, + { name = "sphinxcontrib-applehelp" }, + { name = "sphinxcontrib-devhelp" }, + { name = "sphinxcontrib-htmlhelp" }, + { name = "sphinxcontrib-jsmath" }, + { name = "sphinxcontrib-qthelp" }, + { name = "sphinxcontrib-serializinghtml" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/6f/6d/be0b61178fe2cdcb67e2a92fc9ebb488e3c51c4f74a36a7824c0adf23425/sphinx-8.1.3.tar.gz", hash = "sha256:43c1911eecb0d3e161ad78611bc905d1ad0e523e4ddc202a58a821773dc4c927", size = 8184611, upload-time = "2024-10-13T20:27:13.93Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/26/60/1ddff83a56d33aaf6f10ec8ce84b4c007d9368b21008876fceda7e7381ef/sphinx-8.1.3-py3-none-any.whl", hash = "sha256:09719015511837b76bf6e03e42eb7595ac8c2e41eeb9c29c5b755c6b677992a2", size = 3487125, upload-time = "2024-10-13T20:27:10.448Z" }, +] + +[[package]] +name = "sphinx-autoapi" +version = "3.4.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "astroid" }, + { name = "jinja2" }, + { name = "pyyaml" }, + { name = "sphinx" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/4a/eb/cc243583bb1d518ca3b10998c203d919a8ed90affd4831f2b61ad09043d2/sphinx_autoapi-3.4.0.tar.gz", hash = "sha256:e6d5371f9411bbb9fca358c00a9e57aef3ac94cbfc5df4bab285946462f69e0c", size = 29292, upload-time = "2024-11-30T01:09:40.956Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/de/d6/f2acdc2567337fd5f5dc091a4e58d8a0fb14927b9779fc1e5ecee96d9824/sphinx_autoapi-3.4.0-py3-none-any.whl", hash = "sha256:4027fef2875a22c5f2a57107c71641d82f6166bf55beb407a47aaf3ef14e7b92", size = 34095, upload-time = "2024-11-30T01:09:17.272Z" }, +] + +[[package]] +name = "sphinx-autobuild" +version = "2024.10.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama" }, + { name = "sphinx" }, + { name = "starlette" }, + { name = "uvicorn" }, + { name = "watchfiles" }, + { name = "websockets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a5/2c/155e1de2c1ba96a72e5dba152c509a8b41e047ee5c2def9e9f0d812f8be7/sphinx_autobuild-2024.10.3.tar.gz", hash = "sha256:248150f8f333e825107b6d4b86113ab28fa51750e5f9ae63b59dc339be951fb1", size = 14023, upload-time = "2024-10-02T23:15:30.172Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/18/c0/eba125db38c84d3c74717008fd3cb5000b68cd7e2cbafd1349c6a38c3d3b/sphinx_autobuild-2024.10.3-py3-none-any.whl", hash = "sha256:158e16c36f9d633e613c9aaf81c19b0fc458ca78b112533b20dafcda430d60fa", size = 11908, upload-time = "2024-10-02T23:15:28.739Z" }, +] + +[[package]] +name = "sphinx-copybutton" +version = "0.5.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "sphinx" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/fc/2b/a964715e7f5295f77509e59309959f4125122d648f86b4fe7d70ca1d882c/sphinx-copybutton-0.5.2.tar.gz", hash = "sha256:4cf17c82fb9646d1bc9ca92ac280813a3b605d8c421225fd9913154103ee1fbd", size = 23039, upload-time = "2023-04-14T08:10:22.998Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9e/48/1ea60e74949eecb12cdd6ac43987f9fd331156388dcc2319b45e2ebb81bf/sphinx_copybutton-0.5.2-py3-none-any.whl", hash = "sha256:fb543fd386d917746c9a2c50360c7905b605726b9355cd26e9974857afeae06e", size = 13343, upload-time = "2023-04-14T08:10:20.844Z" }, +] + +[[package]] +name = "sphinx-design" +version = "0.6.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "sphinx" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/2b/69/b34e0cb5336f09c6866d53b4a19d76c227cdec1bbc7ac4de63ca7d58c9c7/sphinx_design-0.6.1.tar.gz", hash = "sha256:b44eea3719386d04d765c1a8257caca2b3e6f8421d7b3a5e742c0fd45f84e632", size = 2193689, upload-time = "2024-08-02T13:48:44.277Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c6/43/65c0acbd8cc6f50195a3a1fc195c404988b15c67090e73c7a41a9f57d6bd/sphinx_design-0.6.1-py3-none-any.whl", hash = "sha256:b11f37db1a802a183d61b159d9a202314d4d2fe29c163437001324fe2f19549c", size = 2215338, upload-time = "2024-08-02T13:48:42.106Z" }, +] + +[[package]] +name = "sphinx-issues" +version = "5.0.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "sphinx" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/3a/62/b55f1c482ce20acee71185dbebf0497a48d23b325b48925d95d5ce0e4666/sphinx_issues-5.0.1.tar.gz", hash = "sha256:6da131d4545af00be4b48ec7c4086ea82c1371a05116bbe5779f57cff34bf16a", size = 14370, upload-time = "2025-04-10T13:41:41.945Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e9/22/497d11c8198e00f45bffa6edc275066938dcec76c346facf40a72ff94222/sphinx_issues-5.0.1-py3-none-any.whl", hash = "sha256:58cdd94df25546fa96a224afc9df17063deffaf38336c4a694d2bf478aec75a4", size = 8229, upload-time = "2025-04-10T13:41:40.655Z" }, +] + +[[package]] +name = "sphinx-reredirects" +version = "1.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "sphinx" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/72/61/d3039bc2b688c73e81f515afe771b7cc9631dfef63b3e3ac3aab3d73c685/sphinx_reredirects-1.0.0.tar.gz", hash = "sha256:7c9bada9f1330489fcf4c7297a2d6da2a49ca4877d3f42d1388ae1de1019bf5c", size = 711970, upload-time = "2025-05-31T14:45:55.428Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2a/7f/adb886a3db417a2ccea6a13dcb4b88d08f82104aed17e347346f79480a5f/sphinx_reredirects-1.0.0-py3-none-any.whl", hash = "sha256:1d0102710a8f633c6c885f940f440f7195ada675c1739976f0135790747dea06", size = 6173, upload-time = "2025-05-31T14:45:53.014Z" }, +] + +[[package]] +name = "sphinxcontrib-applehelp" +version = "2.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ba/6e/b837e84a1a704953c62ef8776d45c3e8d759876b4a84fe14eba2859106fe/sphinxcontrib_applehelp-2.0.0.tar.gz", hash = "sha256:2f29ef331735ce958efa4734873f084941970894c6090408b079c61b2e1c06d1", size = 20053, upload-time = "2024-07-29T01:09:00.465Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5d/85/9ebeae2f76e9e77b952f4b274c27238156eae7979c5421fba91a28f4970d/sphinxcontrib_applehelp-2.0.0-py3-none-any.whl", hash = "sha256:4cd3f0ec4ac5dd9c17ec65e9ab272c9b867ea77425228e68ecf08d6b28ddbdb5", size = 119300, upload-time = "2024-07-29T01:08:58.99Z" }, +] + +[[package]] +name = "sphinxcontrib-devhelp" +version = "2.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f6/d2/5beee64d3e4e747f316bae86b55943f51e82bb86ecd325883ef65741e7da/sphinxcontrib_devhelp-2.0.0.tar.gz", hash = "sha256:411f5d96d445d1d73bb5d52133377b4248ec79db5c793ce7dbe59e074b4dd1ad", size = 12967, upload-time = "2024-07-29T01:09:23.417Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/35/7a/987e583882f985fe4d7323774889ec58049171828b58c2217e7f79cdf44e/sphinxcontrib_devhelp-2.0.0-py3-none-any.whl", hash = "sha256:aefb8b83854e4b0998877524d1029fd3e6879210422ee3780459e28a1f03a8a2", size = 82530, upload-time = "2024-07-29T01:09:21.945Z" }, +] + +[[package]] +name = "sphinxcontrib-htmlhelp" +version = "2.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/43/93/983afd9aa001e5201eab16b5a444ed5b9b0a7a010541e0ddfbbfd0b2470c/sphinxcontrib_htmlhelp-2.1.0.tar.gz", hash = "sha256:c9e2916ace8aad64cc13a0d233ee22317f2b9025b9cf3295249fa985cc7082e9", size = 22617, upload-time = "2024-07-29T01:09:37.889Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0a/7b/18a8c0bcec9182c05a0b3ec2a776bba4ead82750a55ff798e8d406dae604/sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl", hash = "sha256:166759820b47002d22914d64a075ce08f4c46818e17cfc9470a9786b759b19f8", size = 98705, upload-time = "2024-07-29T01:09:36.407Z" }, +] + +[[package]] +name = "sphinxcontrib-jsmath" +version = "1.0.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b2/e8/9ed3830aeed71f17c026a07a5097edcf44b692850ef215b161b8ad875729/sphinxcontrib-jsmath-1.0.1.tar.gz", hash = "sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8", size = 5787, upload-time = "2019-01-21T16:10:16.347Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c2/42/4c8646762ee83602e3fb3fbe774c2fac12f317deb0b5dbeeedd2d3ba4b77/sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl", hash = "sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178", size = 5071, upload-time = "2019-01-21T16:10:14.333Z" }, +] + +[[package]] +name = "sphinxcontrib-qthelp" +version = "2.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/68/bc/9104308fc285eb3e0b31b67688235db556cd5b0ef31d96f30e45f2e51cae/sphinxcontrib_qthelp-2.0.0.tar.gz", hash = "sha256:4fe7d0ac8fc171045be623aba3e2a8f613f8682731f9153bb2e40ece16b9bbab", size = 17165, upload-time = "2024-07-29T01:09:56.435Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/27/83/859ecdd180cacc13b1f7e857abf8582a64552ea7a061057a6c716e790fce/sphinxcontrib_qthelp-2.0.0-py3-none-any.whl", hash = "sha256:b18a828cdba941ccd6ee8445dbe72ffa3ef8cbe7505d8cd1fa0d42d3f2d5f3eb", size = 88743, upload-time = "2024-07-29T01:09:54.885Z" }, +] + +[[package]] +name = "sphinxcontrib-serializinghtml" +version = "2.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/3b/44/6716b257b0aa6bfd51a1b31665d1c205fb12cb5ad56de752dfa15657de2f/sphinxcontrib_serializinghtml-2.0.0.tar.gz", hash = "sha256:e9d912827f872c029017a53f0ef2180b327c3f7fd23c87229f7a8e8b70031d4d", size = 16080, upload-time = "2024-07-29T01:10:09.332Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/52/a7/d2782e4e3f77c8450f727ba74a8f12756d5ba823d81b941f1b04da9d033a/sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl", hash = "sha256:6e2cb0eef194e10c27ec0023bfeb25badbbb5868244cf5bc5bdc04e4464bf331", size = 92072, upload-time = "2024-07-29T01:10:08.203Z" }, +] + +[[package]] +name = "stack-data" +version = "0.6.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "asttokens" }, + { name = "executing" }, + { name = "pure-eval" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/28/e3/55dcc2cfbc3ca9c29519eb6884dd1415ecb53b0e934862d3559ddcb7e20b/stack_data-0.6.3.tar.gz", hash = "sha256:836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9", size = 44707, upload-time = "2023-09-30T13:58:05.479Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f1/7b/ce1eafaf1a76852e2ec9b22edecf1daa58175c090266e9f6c64afcd81d91/stack_data-0.6.3-py3-none-any.whl", hash = "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695", size = 24521, upload-time = "2023-09-30T13:58:03.53Z" }, +] + +[[package]] +name = "starlette" +version = "0.47.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio" }, + { name = "typing-extensions", marker = "python_full_version < '3.13'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/04/57/d062573f391d062710d4088fa1369428c38d51460ab6fedff920efef932e/starlette-0.47.2.tar.gz", hash = "sha256:6ae9aa5db235e4846decc1e7b79c4f346adf41e9777aebeb49dfd09bbd7023d8", size = 2583948, upload-time = "2025-07-20T17:31:58.522Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f7/1f/b876b1f83aef204198a42dc101613fefccb32258e5428b5f9259677864b4/starlette-0.47.2-py3-none-any.whl", hash = "sha256:c5847e96134e5c5371ee9fac6fdf1a67336d5815e09eb2a01fdb57a351ef915b", size = 72984, upload-time = "2025-07-20T17:31:56.738Z" }, +] + +[[package]] +name = "sympy" +version = "1.14.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "mpmath" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/83/d3/803453b36afefb7c2bb238361cd4ae6125a569b4db67cd9e79846ba2d68c/sympy-1.14.0.tar.gz", hash = "sha256:d3d3fe8df1e5a0b42f0e7bdf50541697dbe7d23746e894990c030e2b05e72517", size = 7793921, upload-time = "2025-04-27T18:05:01.611Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a2/09/77d55d46fd61b4a135c444fc97158ef34a095e5681d0a6c10b75bf356191/sympy-1.14.0-py3-none-any.whl", hash = "sha256:e091cc3e99d2141a0ba2847328f5479b05d94a6635cb96148ccb3f34671bd8f5", size = 6299353, upload-time = "2025-04-27T18:04:59.103Z" }, +] + +[[package]] +name = "tomli" +version = "2.2.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/18/87/302344fed471e44a87289cf4967697d07e532f2421fdaf868a303cbae4ff/tomli-2.2.1.tar.gz", hash = "sha256:cd45e1dc79c835ce60f7404ec8119f2eb06d38b1deba146f07ced3bbc44505ff", size = 17175, upload-time = "2024-11-27T22:38:36.873Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/43/ca/75707e6efa2b37c77dadb324ae7d9571cb424e61ea73fad7c56c2d14527f/tomli-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:678e4fa69e4575eb77d103de3df8a895e1591b48e740211bd1067378c69e8249", size = 131077, upload-time = "2024-11-27T22:37:54.956Z" }, + { url = "https://files.pythonhosted.org/packages/c7/16/51ae563a8615d472fdbffc43a3f3d46588c264ac4f024f63f01283becfbb/tomli-2.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:023aa114dd824ade0100497eb2318602af309e5a55595f76b626d6d9f3b7b0a6", size = 123429, upload-time = "2024-11-27T22:37:56.698Z" }, + { url = "https://files.pythonhosted.org/packages/f1/dd/4f6cd1e7b160041db83c694abc78e100473c15d54620083dbd5aae7b990e/tomli-2.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ece47d672db52ac607a3d9599a9d48dcb2f2f735c6c2d1f34130085bb12b112a", size = 226067, upload-time = "2024-11-27T22:37:57.63Z" }, + { url = "https://files.pythonhosted.org/packages/a9/6b/c54ede5dc70d648cc6361eaf429304b02f2871a345bbdd51e993d6cdf550/tomli-2.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6972ca9c9cc9f0acaa56a8ca1ff51e7af152a9f87fb64623e31d5c83700080ee", size = 236030, upload-time = "2024-11-27T22:37:59.344Z" }, + { url = "https://files.pythonhosted.org/packages/1f/47/999514fa49cfaf7a92c805a86c3c43f4215621855d151b61c602abb38091/tomli-2.2.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c954d2250168d28797dd4e3ac5cf812a406cd5a92674ee4c8f123c889786aa8e", size = 240898, upload-time = "2024-11-27T22:38:00.429Z" }, + { url = "https://files.pythonhosted.org/packages/73/41/0a01279a7ae09ee1573b423318e7934674ce06eb33f50936655071d81a24/tomli-2.2.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8dd28b3e155b80f4d54beb40a441d366adcfe740969820caf156c019fb5c7ec4", size = 229894, upload-time = "2024-11-27T22:38:02.094Z" }, + { url = "https://files.pythonhosted.org/packages/55/18/5d8bc5b0a0362311ce4d18830a5d28943667599a60d20118074ea1b01bb7/tomli-2.2.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e59e304978767a54663af13c07b3d1af22ddee3bb2fb0618ca1593e4f593a106", size = 245319, upload-time = "2024-11-27T22:38:03.206Z" }, + { url = "https://files.pythonhosted.org/packages/92/a3/7ade0576d17f3cdf5ff44d61390d4b3febb8a9fc2b480c75c47ea048c646/tomli-2.2.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:33580bccab0338d00994d7f16f4c4ec25b776af3ffaac1ed74e0b3fc95e885a8", size = 238273, upload-time = "2024-11-27T22:38:04.217Z" }, + { url = "https://files.pythonhosted.org/packages/72/6f/fa64ef058ac1446a1e51110c375339b3ec6be245af9d14c87c4a6412dd32/tomli-2.2.1-cp311-cp311-win32.whl", hash = "sha256:465af0e0875402f1d226519c9904f37254b3045fc5084697cefb9bdde1ff99ff", size = 98310, upload-time = "2024-11-27T22:38:05.908Z" }, + { url = "https://files.pythonhosted.org/packages/6a/1c/4a2dcde4a51b81be3530565e92eda625d94dafb46dbeb15069df4caffc34/tomli-2.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:2d0f2fdd22b02c6d81637a3c95f8cd77f995846af7414c5c4b8d0545afa1bc4b", size = 108309, upload-time = "2024-11-27T22:38:06.812Z" }, + { url = "https://files.pythonhosted.org/packages/52/e1/f8af4c2fcde17500422858155aeb0d7e93477a0d59a98e56cbfe75070fd0/tomli-2.2.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4a8f6e44de52d5e6c657c9fe83b562f5f4256d8ebbfe4ff922c495620a7f6cea", size = 132762, upload-time = "2024-11-27T22:38:07.731Z" }, + { url = "https://files.pythonhosted.org/packages/03/b8/152c68bb84fc00396b83e7bbddd5ec0bd3dd409db4195e2a9b3e398ad2e3/tomli-2.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8d57ca8095a641b8237d5b079147646153d22552f1c637fd3ba7f4b0b29167a8", size = 123453, upload-time = "2024-11-27T22:38:09.384Z" }, + { url = "https://files.pythonhosted.org/packages/c8/d6/fc9267af9166f79ac528ff7e8c55c8181ded34eb4b0e93daa767b8841573/tomli-2.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e340144ad7ae1533cb897d406382b4b6fede8890a03738ff1683af800d54192", size = 233486, upload-time = "2024-11-27T22:38:10.329Z" }, + { url = "https://files.pythonhosted.org/packages/5c/51/51c3f2884d7bab89af25f678447ea7d297b53b5a3b5730a7cb2ef6069f07/tomli-2.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db2b95f9de79181805df90bedc5a5ab4c165e6ec3fe99f970d0e302f384ad222", size = 242349, upload-time = "2024-11-27T22:38:11.443Z" }, + { url = "https://files.pythonhosted.org/packages/ab/df/bfa89627d13a5cc22402e441e8a931ef2108403db390ff3345c05253935e/tomli-2.2.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:40741994320b232529c802f8bc86da4e1aa9f413db394617b9a256ae0f9a7f77", size = 252159, upload-time = "2024-11-27T22:38:13.099Z" }, + { url = "https://files.pythonhosted.org/packages/9e/6e/fa2b916dced65763a5168c6ccb91066f7639bdc88b48adda990db10c8c0b/tomli-2.2.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:400e720fe168c0f8521520190686ef8ef033fb19fc493da09779e592861b78c6", size = 237243, upload-time = "2024-11-27T22:38:14.766Z" }, + { url = "https://files.pythonhosted.org/packages/b4/04/885d3b1f650e1153cbb93a6a9782c58a972b94ea4483ae4ac5cedd5e4a09/tomli-2.2.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:02abe224de6ae62c19f090f68da4e27b10af2b93213d36cf44e6e1c5abd19fdd", size = 259645, upload-time = "2024-11-27T22:38:15.843Z" }, + { url = "https://files.pythonhosted.org/packages/9c/de/6b432d66e986e501586da298e28ebeefd3edc2c780f3ad73d22566034239/tomli-2.2.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b82ebccc8c8a36f2094e969560a1b836758481f3dc360ce9a3277c65f374285e", size = 244584, upload-time = "2024-11-27T22:38:17.645Z" }, + { url = "https://files.pythonhosted.org/packages/1c/9a/47c0449b98e6e7d1be6cbac02f93dd79003234ddc4aaab6ba07a9a7482e2/tomli-2.2.1-cp312-cp312-win32.whl", hash = "sha256:889f80ef92701b9dbb224e49ec87c645ce5df3fa2cc548664eb8a25e03127a98", size = 98875, upload-time = "2024-11-27T22:38:19.159Z" }, + { url = "https://files.pythonhosted.org/packages/ef/60/9b9638f081c6f1261e2688bd487625cd1e660d0a85bd469e91d8db969734/tomli-2.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:7fc04e92e1d624a4a63c76474610238576942d6b8950a2d7f908a340494e67e4", size = 109418, upload-time = "2024-11-27T22:38:20.064Z" }, + { url = "https://files.pythonhosted.org/packages/04/90/2ee5f2e0362cb8a0b6499dc44f4d7d48f8fff06d28ba46e6f1eaa61a1388/tomli-2.2.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f4039b9cbc3048b2416cc57ab3bda989a6fcf9b36cf8937f01a6e731b64f80d7", size = 132708, upload-time = "2024-11-27T22:38:21.659Z" }, + { url = "https://files.pythonhosted.org/packages/c0/ec/46b4108816de6b385141f082ba99e315501ccd0a2ea23db4a100dd3990ea/tomli-2.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:286f0ca2ffeeb5b9bd4fcc8d6c330534323ec51b2f52da063b11c502da16f30c", size = 123582, upload-time = "2024-11-27T22:38:22.693Z" }, + { url = "https://files.pythonhosted.org/packages/a0/bd/b470466d0137b37b68d24556c38a0cc819e8febe392d5b199dcd7f578365/tomli-2.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a92ef1a44547e894e2a17d24e7557a5e85a9e1d0048b0b5e7541f76c5032cb13", size = 232543, upload-time = "2024-11-27T22:38:24.367Z" }, + { url = "https://files.pythonhosted.org/packages/d9/e5/82e80ff3b751373f7cead2815bcbe2d51c895b3c990686741a8e56ec42ab/tomli-2.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9316dc65bed1684c9a98ee68759ceaed29d229e985297003e494aa825ebb0281", size = 241691, upload-time = "2024-11-27T22:38:26.081Z" }, + { url = "https://files.pythonhosted.org/packages/05/7e/2a110bc2713557d6a1bfb06af23dd01e7dde52b6ee7dadc589868f9abfac/tomli-2.2.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e85e99945e688e32d5a35c1ff38ed0b3f41f43fad8df0bdf79f72b2ba7bc5272", size = 251170, upload-time = "2024-11-27T22:38:27.921Z" }, + { url = "https://files.pythonhosted.org/packages/64/7b/22d713946efe00e0adbcdfd6d1aa119ae03fd0b60ebed51ebb3fa9f5a2e5/tomli-2.2.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ac065718db92ca818f8d6141b5f66369833d4a80a9d74435a268c52bdfa73140", size = 236530, upload-time = "2024-11-27T22:38:29.591Z" }, + { url = "https://files.pythonhosted.org/packages/38/31/3a76f67da4b0cf37b742ca76beaf819dca0ebef26d78fc794a576e08accf/tomli-2.2.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:d920f33822747519673ee656a4b6ac33e382eca9d331c87770faa3eef562aeb2", size = 258666, upload-time = "2024-11-27T22:38:30.639Z" }, + { url = "https://files.pythonhosted.org/packages/07/10/5af1293da642aded87e8a988753945d0cf7e00a9452d3911dd3bb354c9e2/tomli-2.2.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a198f10c4d1b1375d7687bc25294306e551bf1abfa4eace6650070a5c1ae2744", size = 243954, upload-time = "2024-11-27T22:38:31.702Z" }, + { url = "https://files.pythonhosted.org/packages/5b/b9/1ed31d167be802da0fc95020d04cd27b7d7065cc6fbefdd2f9186f60d7bd/tomli-2.2.1-cp313-cp313-win32.whl", hash = "sha256:d3f5614314d758649ab2ab3a62d4f2004c825922f9e370b29416484086b264ec", size = 98724, upload-time = "2024-11-27T22:38:32.837Z" }, + { url = "https://files.pythonhosted.org/packages/c7/32/b0963458706accd9afcfeb867c0f9175a741bf7b19cd424230714d722198/tomli-2.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:a38aa0308e754b0e3c67e344754dff64999ff9b513e691d0e786265c93583c69", size = 109383, upload-time = "2024-11-27T22:38:34.455Z" }, + { url = "https://files.pythonhosted.org/packages/6e/c2/61d3e0f47e2b74ef40a68b9e6ad5984f6241a942f7cd3bbfbdbd03861ea9/tomli-2.2.1-py3-none-any.whl", hash = "sha256:cb55c73c5f4408779d0cf3eef9f762b9c9f147a77de7b258bef0a5628adc85cc", size = 14257, upload-time = "2024-11-27T22:38:35.385Z" }, +] + +[[package]] +name = "tomlkit" +version = "0.13.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/cc/18/0bbf3884e9eaa38819ebe46a7bd25dcd56b67434402b66a58c4b8e552575/tomlkit-0.13.3.tar.gz", hash = "sha256:430cf247ee57df2b94ee3fbe588e71d362a941ebb545dec29b53961d61add2a1", size = 185207, upload-time = "2025-06-05T07:13:44.947Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bd/75/8539d011f6be8e29f339c42e633aae3cb73bffa95dd0f9adec09b9c58e85/tomlkit-0.13.3-py3-none-any.whl", hash = "sha256:c89c649d79ee40629a9fda55f8ace8c6a1b42deb912b2a8fd8d942ddadb606b0", size = 38901, upload-time = "2025-06-05T07:13:43.546Z" }, +] + +[[package]] +name = "tornado" +version = "6.5.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/51/89/c72771c81d25d53fe33e3dca61c233b665b2780f21820ba6fd2c6793c12b/tornado-6.5.1.tar.gz", hash = "sha256:84ceece391e8eb9b2b95578db65e920d2a61070260594819589609ba9bc6308c", size = 509934, upload-time = "2025-05-22T18:15:38.788Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/77/89/f4532dee6843c9e0ebc4e28d4be04c67f54f60813e4bf73d595fe7567452/tornado-6.5.1-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:d50065ba7fd11d3bd41bcad0825227cc9a95154bad83239357094c36708001f7", size = 441948, upload-time = "2025-05-22T18:15:20.862Z" }, + { url = "https://files.pythonhosted.org/packages/15/9a/557406b62cffa395d18772e0cdcf03bed2fff03b374677348eef9f6a3792/tornado-6.5.1-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:9e9ca370f717997cb85606d074b0e5b247282cf5e2e1611568b8821afe0342d6", size = 440112, upload-time = "2025-05-22T18:15:22.591Z" }, + { url = "https://files.pythonhosted.org/packages/55/82/7721b7319013a3cf881f4dffa4f60ceff07b31b394e459984e7a36dc99ec/tornado-6.5.1-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b77e9dfa7ed69754a54c89d82ef746398be82f749df69c4d3abe75c4d1ff4888", size = 443672, upload-time = "2025-05-22T18:15:24.027Z" }, + { url = "https://files.pythonhosted.org/packages/7d/42/d11c4376e7d101171b94e03cef0cbce43e823ed6567ceda571f54cf6e3ce/tornado-6.5.1-cp39-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:253b76040ee3bab8bcf7ba9feb136436a3787208717a1fb9f2c16b744fba7331", size = 443019, upload-time = "2025-05-22T18:15:25.735Z" }, + { url = "https://files.pythonhosted.org/packages/7d/f7/0c48ba992d875521ac761e6e04b0a1750f8150ae42ea26df1852d6a98942/tornado-6.5.1-cp39-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:308473f4cc5a76227157cdf904de33ac268af770b2c5f05ca6c1161d82fdd95e", size = 443252, upload-time = "2025-05-22T18:15:27.499Z" }, + { url = "https://files.pythonhosted.org/packages/89/46/d8d7413d11987e316df4ad42e16023cd62666a3c0dfa1518ffa30b8df06c/tornado-6.5.1-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:caec6314ce8a81cf69bd89909f4b633b9f523834dc1a352021775d45e51d9401", size = 443930, upload-time = "2025-05-22T18:15:29.299Z" }, + { url = "https://files.pythonhosted.org/packages/78/b2/f8049221c96a06df89bed68260e8ca94beca5ea532ffc63b1175ad31f9cc/tornado-6.5.1-cp39-abi3-musllinux_1_2_i686.whl", hash = "sha256:13ce6e3396c24e2808774741331638ee6c2f50b114b97a55c5b442df65fd9692", size = 443351, upload-time = "2025-05-22T18:15:31.038Z" }, + { url = "https://files.pythonhosted.org/packages/76/ff/6a0079e65b326cc222a54720a748e04a4db246870c4da54ece4577bfa702/tornado-6.5.1-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:5cae6145f4cdf5ab24744526cc0f55a17d76f02c98f4cff9daa08ae9a217448a", size = 443328, upload-time = "2025-05-22T18:15:32.426Z" }, + { url = "https://files.pythonhosted.org/packages/49/18/e3f902a1d21f14035b5bc6246a8c0f51e0eef562ace3a2cea403c1fb7021/tornado-6.5.1-cp39-abi3-win32.whl", hash = "sha256:e0a36e1bc684dca10b1aa75a31df8bdfed656831489bc1e6a6ebed05dc1ec365", size = 444396, upload-time = "2025-05-22T18:15:34.205Z" }, + { url = "https://files.pythonhosted.org/packages/7b/09/6526e32bf1049ee7de3bebba81572673b19a2a8541f795d887e92af1a8bc/tornado-6.5.1-cp39-abi3-win_amd64.whl", hash = "sha256:908e7d64567cecd4c2b458075589a775063453aeb1d2a1853eedb806922f568b", size = 444840, upload-time = "2025-05-22T18:15:36.1Z" }, + { url = "https://files.pythonhosted.org/packages/55/a7/535c44c7bea4578e48281d83c615219f3ab19e6abc67625ef637c73987be/tornado-6.5.1-cp39-abi3-win_arm64.whl", hash = "sha256:02420a0eb7bf617257b9935e2b754d1b63897525d8a289c9d65690d580b4dcf7", size = 443596, upload-time = "2025-05-22T18:15:37.433Z" }, +] + +[[package]] +name = "towncrier" +version = "24.8.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click" }, + { name = "jinja2" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/69/d7/a5183f788cf4fabf03f7c767ae0b968249b0c737eb64b4d87a07ae01fea7/towncrier-24.8.0.tar.gz", hash = "sha256:013423ee7eed102b2f393c287d22d95f66f1a3ea10a4baa82d298001a7f18af3", size = 61635, upload-time = "2024-08-23T14:52:28.197Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/93/1b/2f7b88506e22d9798c139261af4946865c0787cfa345514ca3c70173a9cc/towncrier-24.8.0-py3-none-any.whl", hash = "sha256:9343209592b839209cdf28c339ba45792fbfe9775b5f9c177462fd693e127d8d", size = 56981, upload-time = "2024-08-23T14:52:26.659Z" }, +] + +[[package]] +name = "traitlets" +version = "5.14.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/eb/79/72064e6a701c2183016abbbfedaba506d81e30e232a68c9f0d6f6fcd1574/traitlets-5.14.3.tar.gz", hash = "sha256:9ed0579d3502c94b4b3732ac120375cda96f923114522847de4b3bb98b96b6b7", size = 161621, upload-time = "2024-04-19T11:11:49.746Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/00/c0/8f5d070730d7836adc9c9b6408dec68c6ced86b304a9b26a14df072a6e8c/traitlets-5.14.3-py3-none-any.whl", hash = "sha256:b74e89e397b1ed28cc831db7aea759ba6640cb3de13090ca145426688ff1ac4f", size = 85359, upload-time = "2024-04-19T11:11:46.763Z" }, +] + +[[package]] +name = "typing-extensions" +version = "4.14.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/98/5a/da40306b885cc8c09109dc2e1abd358d5684b1425678151cdaed4731c822/typing_extensions-4.14.1.tar.gz", hash = "sha256:38b39f4aeeab64884ce9f74c94263ef78f3c22467c8724005483154c26648d36", size = 107673, upload-time = "2025-07-04T13:28:34.16Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b5/00/d631e67a838026495268c2f6884f3711a15a9a2a96cd244fdaea53b823fb/typing_extensions-4.14.1-py3-none-any.whl", hash = "sha256:d1e1e3b58374dc93031d6eda2420a48ea44a36c2b4766a4fdeb3710755731d76", size = 43906, upload-time = "2025-07-04T13:28:32.743Z" }, +] + +[[package]] +name = "typing-inspection" +version = "0.4.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f8/b1/0c11f5058406b3af7609f121aaa6b609744687f1d158b3c3a5bf4cc94238/typing_inspection-0.4.1.tar.gz", hash = "sha256:6ae134cc0203c33377d43188d4064e9b357dba58cff3185f22924610e70a9d28", size = 75726, upload-time = "2025-05-21T18:55:23.885Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/17/69/cd203477f944c353c31bade965f880aa1061fd6bf05ded0726ca845b6ff7/typing_inspection-0.4.1-py3-none-any.whl", hash = "sha256:389055682238f53b04f7badcb49b989835495a96700ced5dab2d8feae4b26f51", size = 14552, upload-time = "2025-05-21T18:55:22.152Z" }, +] + +[[package]] +name = "universal-pathlib" +version = "0.2.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "fsspec" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/eb/21/dd871495af3933e585261adce42678dcdf1168c9d6fa0a8f7b6565e54472/universal_pathlib-0.2.6.tar.gz", hash = "sha256:50817aaeaa9f4163cb1e76f5bdf84207fa05ce728b23fd779479b3462e5430ac", size = 175427, upload-time = "2024-12-13T00:58:27.514Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e5/4d/2e577f6db7aa0f932d19f799c18f604b2b302c65f733419b900ec07dbade/universal_pathlib-0.2.6-py3-none-any.whl", hash = "sha256:700dec2b58ef34b87998513de6d2ae153b22f083197dfafb8544744edabd1b18", size = 50087, upload-time = "2024-12-13T00:58:24.582Z" }, +] + +[[package]] +name = "urllib3" +version = "2.5.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/15/22/9ee70a2574a4f4599c47dd506532914ce044817c7752a79b6a51286319bc/urllib3-2.5.0.tar.gz", hash = "sha256:3fc47733c7e419d4bc3f6b3dc2b4f890bb743906a30d56ba4a5bfa4bbff92760", size = 393185, upload-time = "2025-06-18T14:07:41.644Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a7/c2/fe1e52489ae3122415c51f387e221dd0773709bad6c6cdaa599e8a2c5185/urllib3-2.5.0-py3-none-any.whl", hash = "sha256:e6b01673c0fa6a13e374b50871808eb3bf7046c4b125b216f6bf1cc604cff0dc", size = 129795, upload-time = "2025-06-18T14:07:40.39Z" }, +] + +[[package]] +name = "uv" +version = "0.8.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/71/05/779581d8e5cd8d12dc3e2297280a03293f7b465bb5f53308479e508c5c44/uv-0.8.4.tar.gz", hash = "sha256:2ab21c32a28dbe434c9074f899ed8084955f7b09ac5e7ffac548d3454f77516f", size = 3442716, upload-time = "2025-07-30T17:10:56.404Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/96/10/4d52b081defca3cfb4a11d6af3af4314fe7f289ba19e40d6cfab778f9257/uv-0.8.4-py3-none-linux_armv6l.whl", hash = "sha256:f9a5da616ca0d2bbe79367db9cf339cbaf1affee5d6b130a3be2779a917c14fa", size = 18077025, upload-time = "2025-07-30T17:10:13.016Z" }, + { url = "https://files.pythonhosted.org/packages/36/fa/7847373d214de987e96ef6b820a4ed2fa5e1c392ecc73cd53e94013d6074/uv-0.8.4-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:4d8422b3058998d87fee46d4d1a437e202407cafca8b8ac69e01c6479fbe0271", size = 18143542, upload-time = "2025-07-30T17:10:18.006Z" }, + { url = "https://files.pythonhosted.org/packages/16/39/7d4b68132868c550ae97c3b2c348c55db47a987dff05ab0e5f577bf0e197/uv-0.8.4-py3-none-macosx_11_0_arm64.whl", hash = "sha256:edc813645348665a3b4716a7d5e961cf7c8d1d3bfb9d907a4f18cf87c712a430", size = 16860749, upload-time = "2025-07-30T17:10:20.417Z" }, + { url = "https://files.pythonhosted.org/packages/e3/8f/f703e4ba41aae195d4958b701c2ee6cdbbbb8cdccb082845d6abfe834cf9/uv-0.8.4-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.musllinux_1_1_aarch64.whl", hash = "sha256:c2323e915ae562db4ebcdf5e20d3dd37a14959d07cc54939d86ab0dcdbf08f58", size = 17469507, upload-time = "2025-07-30T17:10:22.779Z" }, + { url = "https://files.pythonhosted.org/packages/59/f8/9366ceeb63f9dd6aa11375047762c1033d36521722e748b65a24e435f459/uv-0.8.4-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:96d7a68c360383d638c283811d57558fbf7b5f769ff4bdbc99ee2a3bf9a6e574", size = 17766700, upload-time = "2025-07-30T17:10:24.903Z" }, + { url = "https://files.pythonhosted.org/packages/f2/e3/190eb0ca91b8a0e5f80f93aeb7924b12be89656066170d6e1244e90c5e80/uv-0.8.4-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:385dec5a0c0909d5a24af5b02db24b49b025cbed59c6225e4c794ff40069d9aa", size = 18432996, upload-time = "2025-07-30T17:10:27.239Z" }, + { url = "https://files.pythonhosted.org/packages/ab/f6/b5fc5fe6e93e0294cbd8ba228d10b12e46a5e27b143565e868da758e0209/uv-0.8.4-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:b2230310ca303328c9fd351044fb81349f3ccfaa2863f135d37bfcee707adfd1", size = 19842168, upload-time = "2025-07-30T17:10:29.958Z" }, + { url = "https://files.pythonhosted.org/packages/f5/f0/d01779df4ac2ae39bf440c97f53346f1b9eef17cc84a45ed66206e348650/uv-0.8.4-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:86d64c66993eb0d9821caea27920175a27cd24df1eba8a340d8b3ae4074fac77", size = 19497445, upload-time = "2025-07-30T17:10:32.064Z" }, + { url = "https://files.pythonhosted.org/packages/80/ca/48c78393cb3a73940e768b74f74c30ca7719de6f83457a125b9cfa0c37e0/uv-0.8.4-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:624cf5b7bdc5cc0253115fefaad40008205d4acf34b77b294479dfe4eacb9697", size = 18852025, upload-time = "2025-07-30T17:10:34.34Z" }, + { url = "https://files.pythonhosted.org/packages/42/e2/5cf11c85fb48276b49979ea06e92c1e95524e1e4c5bccbd591a334c8de68/uv-0.8.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f9cd287982f62419f98ca7182fbbc2fd0fad1a04008b956a88eb85ce1d522611", size = 18806944, upload-time = "2025-07-30T17:10:36.819Z" }, + { url = "https://files.pythonhosted.org/packages/1c/b1/773dcd5ef4947a5bd7c183f1cc8afb9e761488ff1b48b46cb0d95bc5c8cf/uv-0.8.4-py3-none-manylinux_2_28_aarch64.whl", hash = "sha256:e6fa3754a2b965dceecfce8c38cacf7cd6b76a2787b9e189cf33acdb64a7472a", size = 17706599, upload-time = "2025-07-30T17:10:38.976Z" }, + { url = "https://files.pythonhosted.org/packages/e6/8f/20dcb6aaa9c9d7e16320b5143b1fdaa5fd1ebc42a99e2d5f4283aafc59f1/uv-0.8.4-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:9f2a7042553e85c66884a6a3c1b88e116bc5fe5e5d1c9b62f025b1de41534734", size = 18564686, upload-time = "2025-07-30T17:10:41.163Z" }, + { url = "https://files.pythonhosted.org/packages/8a/19/9f9df99259d6725fc269d5394606919f32c3e0d21f486277c040cb7c5dad/uv-0.8.4-py3-none-musllinux_1_1_armv7l.whl", hash = "sha256:2c80470d7253bd26c5990f4914cfddc68a6bb4da7c7da316a29e99feafe272a1", size = 17722213, upload-time = "2025-07-30T17:10:43.354Z" }, + { url = "https://files.pythonhosted.org/packages/00/f4/358576eea98eb4ba58135690a60f8052dbd8b50173a5c0e93e59c8797c2c/uv-0.8.4-py3-none-musllinux_1_1_i686.whl", hash = "sha256:b90eb86019ff92922dea54b8772074909ce7ab3359b2e8f8f3fe4d0658d3a898", size = 17997363, upload-time = "2025-07-30T17:10:45.631Z" }, + { url = "https://files.pythonhosted.org/packages/51/0f/9e5ff7d73846d8c924a5ef262dee247b453b7b2bd2ba5db1a819c72bd176/uv-0.8.4-py3-none-musllinux_1_1_x86_64.whl", hash = "sha256:cad63a02a735ba591679d713376767fc7649ad1e7097a95d0d267a68c2e803fc", size = 18954586, upload-time = "2025-07-30T17:10:47.789Z" }, + { url = "https://files.pythonhosted.org/packages/3c/fa/58c416c634253bdd7ec50baa5d79010f887453425a62e6a23f9668a75305/uv-0.8.4-py3-none-win32.whl", hash = "sha256:b83cd9eeb4c63ab69c6e8d0e26e57b5a9a8b1dca4015f4ddf088ed4a234e7018", size = 17907610, upload-time = "2025-07-30T17:10:49.966Z" }, + { url = "https://files.pythonhosted.org/packages/76/8e/2d6f5bce0f41074122caed1672f90f7ed5df2bd9827c8723c73a657bea7b/uv-0.8.4-py3-none-win_amd64.whl", hash = "sha256:ad056c8f6568d9f495e402753e79a092f28d513e6b5146d1c8dc2bdea668adb1", size = 19704945, upload-time = "2025-07-30T17:10:52.145Z" }, + { url = "https://files.pythonhosted.org/packages/58/de/196e862af4c3b2ff8cb4a7a3ad38ecf0306fa87d03ec9275f16e2f5dc416/uv-0.8.4-py3-none-win_arm64.whl", hash = "sha256:41f3a22550811bf7a0980b3d4dfce09e2c93aec7c42c92313ae3d3d0b97e1054", size = 18316402, upload-time = "2025-07-30T17:10:54.507Z" }, +] + +[[package]] +name = "uvicorn" +version = "0.35.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click" }, + { name = "h11" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/5e/42/e0e305207bb88c6b8d3061399c6a961ffe5fbb7e2aa63c9234df7259e9cd/uvicorn-0.35.0.tar.gz", hash = "sha256:bc662f087f7cf2ce11a1d7fd70b90c9f98ef2e2831556dd078d131b96cc94a01", size = 78473, upload-time = "2025-06-28T16:15:46.058Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d2/e2/dc81b1bd1dcfe91735810265e9d26bc8ec5da45b4c0f6237e286819194c3/uvicorn-0.35.0-py3-none-any.whl", hash = "sha256:197535216b25ff9b785e29a0b79199f55222193d47f820816e7da751e9bc8d4a", size = 66406, upload-time = "2025-06-28T16:15:44.816Z" }, +] + +[[package]] +name = "watchfiles" +version = "1.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/2a/9a/d451fcc97d029f5812e898fd30a53fd8c15c7bbd058fd75cfc6beb9bd761/watchfiles-1.1.0.tar.gz", hash = "sha256:693ed7ec72cbfcee399e92c895362b6e66d63dac6b91e2c11ae03d10d503e575", size = 94406, upload-time = "2025-06-15T19:06:59.42Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8b/78/7401154b78ab484ccaaeef970dc2af0cb88b5ba8a1b415383da444cdd8d3/watchfiles-1.1.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:c9649dfc57cc1f9835551deb17689e8d44666315f2e82d337b9f07bd76ae3aa2", size = 405751, upload-time = "2025-06-15T19:05:07.679Z" }, + { url = "https://files.pythonhosted.org/packages/76/63/e6c3dbc1f78d001589b75e56a288c47723de28c580ad715eb116639152b5/watchfiles-1.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:406520216186b99374cdb58bc48e34bb74535adec160c8459894884c983a149c", size = 397313, upload-time = "2025-06-15T19:05:08.764Z" }, + { url = "https://files.pythonhosted.org/packages/6c/a2/8afa359ff52e99af1632f90cbf359da46184207e893a5f179301b0c8d6df/watchfiles-1.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb45350fd1dc75cd68d3d72c47f5b513cb0578da716df5fba02fff31c69d5f2d", size = 450792, upload-time = "2025-06-15T19:05:09.869Z" }, + { url = "https://files.pythonhosted.org/packages/1d/bf/7446b401667f5c64972a57a0233be1104157fc3abf72c4ef2666c1bd09b2/watchfiles-1.1.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:11ee4444250fcbeb47459a877e5e80ed994ce8e8d20283857fc128be1715dac7", size = 458196, upload-time = "2025-06-15T19:05:11.91Z" }, + { url = "https://files.pythonhosted.org/packages/58/2f/501ddbdfa3fa874ea5597c77eeea3d413579c29af26c1091b08d0c792280/watchfiles-1.1.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bda8136e6a80bdea23e5e74e09df0362744d24ffb8cd59c4a95a6ce3d142f79c", size = 484788, upload-time = "2025-06-15T19:05:13.373Z" }, + { url = "https://files.pythonhosted.org/packages/61/1e/9c18eb2eb5c953c96bc0e5f626f0e53cfef4bd19bd50d71d1a049c63a575/watchfiles-1.1.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b915daeb2d8c1f5cee4b970f2e2c988ce6514aace3c9296e58dd64dc9aa5d575", size = 597879, upload-time = "2025-06-15T19:05:14.725Z" }, + { url = "https://files.pythonhosted.org/packages/8b/6c/1467402e5185d89388b4486745af1e0325007af0017c3384cc786fff0542/watchfiles-1.1.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ed8fc66786de8d0376f9f913c09e963c66e90ced9aa11997f93bdb30f7c872a8", size = 477447, upload-time = "2025-06-15T19:05:15.775Z" }, + { url = "https://files.pythonhosted.org/packages/2b/a1/ec0a606bde4853d6c4a578f9391eeb3684a9aea736a8eb217e3e00aa89a1/watchfiles-1.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fe4371595edf78c41ef8ac8df20df3943e13defd0efcb732b2e393b5a8a7a71f", size = 453145, upload-time = "2025-06-15T19:05:17.17Z" }, + { url = "https://files.pythonhosted.org/packages/90/b9/ef6f0c247a6a35d689fc970dc7f6734f9257451aefb30def5d100d6246a5/watchfiles-1.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b7c5f6fe273291f4d414d55b2c80d33c457b8a42677ad14b4b47ff025d0893e4", size = 626539, upload-time = "2025-06-15T19:05:18.557Z" }, + { url = "https://files.pythonhosted.org/packages/34/44/6ffda5537085106ff5aaa762b0d130ac6c75a08015dd1621376f708c94de/watchfiles-1.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:7738027989881e70e3723c75921f1efa45225084228788fc59ea8c6d732eb30d", size = 624472, upload-time = "2025-06-15T19:05:19.588Z" }, + { url = "https://files.pythonhosted.org/packages/c3/e3/71170985c48028fa3f0a50946916a14055e741db11c2e7bc2f3b61f4d0e3/watchfiles-1.1.0-cp311-cp311-win32.whl", hash = "sha256:622d6b2c06be19f6e89b1d951485a232e3b59618def88dbeda575ed8f0d8dbf2", size = 279348, upload-time = "2025-06-15T19:05:20.856Z" }, + { url = "https://files.pythonhosted.org/packages/89/1b/3e39c68b68a7a171070f81fc2561d23ce8d6859659406842a0e4bebf3bba/watchfiles-1.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:48aa25e5992b61debc908a61ab4d3f216b64f44fdaa71eb082d8b2de846b7d12", size = 292607, upload-time = "2025-06-15T19:05:21.937Z" }, + { url = "https://files.pythonhosted.org/packages/61/9f/2973b7539f2bdb6ea86d2c87f70f615a71a1fc2dba2911795cea25968aea/watchfiles-1.1.0-cp311-cp311-win_arm64.whl", hash = "sha256:00645eb79a3faa70d9cb15c8d4187bb72970b2470e938670240c7998dad9f13a", size = 285056, upload-time = "2025-06-15T19:05:23.12Z" }, + { url = "https://files.pythonhosted.org/packages/f6/b8/858957045a38a4079203a33aaa7d23ea9269ca7761c8a074af3524fbb240/watchfiles-1.1.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:9dc001c3e10de4725c749d4c2f2bdc6ae24de5a88a339c4bce32300a31ede179", size = 402339, upload-time = "2025-06-15T19:05:24.516Z" }, + { url = "https://files.pythonhosted.org/packages/80/28/98b222cca751ba68e88521fabd79a4fab64005fc5976ea49b53fa205d1fa/watchfiles-1.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d9ba68ec283153dead62cbe81872d28e053745f12335d037de9cbd14bd1877f5", size = 394409, upload-time = "2025-06-15T19:05:25.469Z" }, + { url = "https://files.pythonhosted.org/packages/86/50/dee79968566c03190677c26f7f47960aff738d32087087bdf63a5473e7df/watchfiles-1.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:130fc497b8ee68dce163e4254d9b0356411d1490e868bd8790028bc46c5cc297", size = 450939, upload-time = "2025-06-15T19:05:26.494Z" }, + { url = "https://files.pythonhosted.org/packages/40/45/a7b56fb129700f3cfe2594a01aa38d033b92a33dddce86c8dfdfc1247b72/watchfiles-1.1.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:50a51a90610d0845a5931a780d8e51d7bd7f309ebc25132ba975aca016b576a0", size = 457270, upload-time = "2025-06-15T19:05:27.466Z" }, + { url = "https://files.pythonhosted.org/packages/b5/c8/fa5ef9476b1d02dc6b5e258f515fcaaecf559037edf8b6feffcbc097c4b8/watchfiles-1.1.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dc44678a72ac0910bac46fa6a0de6af9ba1355669b3dfaf1ce5f05ca7a74364e", size = 483370, upload-time = "2025-06-15T19:05:28.548Z" }, + { url = "https://files.pythonhosted.org/packages/98/68/42cfcdd6533ec94f0a7aab83f759ec11280f70b11bfba0b0f885e298f9bd/watchfiles-1.1.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a543492513a93b001975ae283a51f4b67973662a375a403ae82f420d2c7205ee", size = 598654, upload-time = "2025-06-15T19:05:29.997Z" }, + { url = "https://files.pythonhosted.org/packages/d3/74/b2a1544224118cc28df7e59008a929e711f9c68ce7d554e171b2dc531352/watchfiles-1.1.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8ac164e20d17cc285f2b94dc31c384bc3aa3dd5e7490473b3db043dd70fbccfd", size = 478667, upload-time = "2025-06-15T19:05:31.172Z" }, + { url = "https://files.pythonhosted.org/packages/8c/77/e3362fe308358dc9f8588102481e599c83e1b91c2ae843780a7ded939a35/watchfiles-1.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f7590d5a455321e53857892ab8879dce62d1f4b04748769f5adf2e707afb9d4f", size = 452213, upload-time = "2025-06-15T19:05:32.299Z" }, + { url = "https://files.pythonhosted.org/packages/6e/17/c8f1a36540c9a1558d4faf08e909399e8133599fa359bf52ec8fcee5be6f/watchfiles-1.1.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:37d3d3f7defb13f62ece99e9be912afe9dd8a0077b7c45ee5a57c74811d581a4", size = 626718, upload-time = "2025-06-15T19:05:33.415Z" }, + { url = "https://files.pythonhosted.org/packages/26/45/fb599be38b4bd38032643783d7496a26a6f9ae05dea1a42e58229a20ac13/watchfiles-1.1.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:7080c4bb3efd70a07b1cc2df99a7aa51d98685be56be6038c3169199d0a1c69f", size = 623098, upload-time = "2025-06-15T19:05:34.534Z" }, + { url = "https://files.pythonhosted.org/packages/a1/e7/fdf40e038475498e160cd167333c946e45d8563ae4dd65caf757e9ffe6b4/watchfiles-1.1.0-cp312-cp312-win32.whl", hash = "sha256:cbcf8630ef4afb05dc30107bfa17f16c0896bb30ee48fc24bf64c1f970f3b1fd", size = 279209, upload-time = "2025-06-15T19:05:35.577Z" }, + { url = "https://files.pythonhosted.org/packages/3f/d3/3ae9d5124ec75143bdf088d436cba39812122edc47709cd2caafeac3266f/watchfiles-1.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:cbd949bdd87567b0ad183d7676feb98136cde5bb9025403794a4c0db28ed3a47", size = 292786, upload-time = "2025-06-15T19:05:36.559Z" }, + { url = "https://files.pythonhosted.org/packages/26/2f/7dd4fc8b5f2b34b545e19629b4a018bfb1de23b3a496766a2c1165ca890d/watchfiles-1.1.0-cp312-cp312-win_arm64.whl", hash = "sha256:0a7d40b77f07be87c6faa93d0951a0fcd8cbca1ddff60a1b65d741bac6f3a9f6", size = 284343, upload-time = "2025-06-15T19:05:37.5Z" }, + { url = "https://files.pythonhosted.org/packages/d3/42/fae874df96595556a9089ade83be34a2e04f0f11eb53a8dbf8a8a5e562b4/watchfiles-1.1.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:5007f860c7f1f8df471e4e04aaa8c43673429047d63205d1630880f7637bca30", size = 402004, upload-time = "2025-06-15T19:05:38.499Z" }, + { url = "https://files.pythonhosted.org/packages/fa/55/a77e533e59c3003d9803c09c44c3651224067cbe7fb5d574ddbaa31e11ca/watchfiles-1.1.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:20ecc8abbd957046f1fe9562757903f5eaf57c3bce70929fda6c7711bb58074a", size = 393671, upload-time = "2025-06-15T19:05:39.52Z" }, + { url = "https://files.pythonhosted.org/packages/05/68/b0afb3f79c8e832e6571022611adbdc36e35a44e14f129ba09709aa4bb7a/watchfiles-1.1.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f2f0498b7d2a3c072766dba3274fe22a183dbea1f99d188f1c6c72209a1063dc", size = 449772, upload-time = "2025-06-15T19:05:40.897Z" }, + { url = "https://files.pythonhosted.org/packages/ff/05/46dd1f6879bc40e1e74c6c39a1b9ab9e790bf1f5a2fe6c08b463d9a807f4/watchfiles-1.1.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:239736577e848678e13b201bba14e89718f5c2133dfd6b1f7846fa1b58a8532b", size = 456789, upload-time = "2025-06-15T19:05:42.045Z" }, + { url = "https://files.pythonhosted.org/packages/8b/ca/0eeb2c06227ca7f12e50a47a3679df0cd1ba487ea19cf844a905920f8e95/watchfiles-1.1.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eff4b8d89f444f7e49136dc695599a591ff769300734446c0a86cba2eb2f9895", size = 482551, upload-time = "2025-06-15T19:05:43.781Z" }, + { url = "https://files.pythonhosted.org/packages/31/47/2cecbd8694095647406645f822781008cc524320466ea393f55fe70eed3b/watchfiles-1.1.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:12b0a02a91762c08f7264e2e79542f76870c3040bbc847fb67410ab81474932a", size = 597420, upload-time = "2025-06-15T19:05:45.244Z" }, + { url = "https://files.pythonhosted.org/packages/d9/7e/82abc4240e0806846548559d70f0b1a6dfdca75c1b4f9fa62b504ae9b083/watchfiles-1.1.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:29e7bc2eee15cbb339c68445959108803dc14ee0c7b4eea556400131a8de462b", size = 477950, upload-time = "2025-06-15T19:05:46.332Z" }, + { url = "https://files.pythonhosted.org/packages/25/0d/4d564798a49bf5482a4fa9416dea6b6c0733a3b5700cb8a5a503c4b15853/watchfiles-1.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d9481174d3ed982e269c090f780122fb59cee6c3796f74efe74e70f7780ed94c", size = 451706, upload-time = "2025-06-15T19:05:47.459Z" }, + { url = "https://files.pythonhosted.org/packages/81/b5/5516cf46b033192d544102ea07c65b6f770f10ed1d0a6d388f5d3874f6e4/watchfiles-1.1.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:80f811146831c8c86ab17b640801c25dc0a88c630e855e2bef3568f30434d52b", size = 625814, upload-time = "2025-06-15T19:05:48.654Z" }, + { url = "https://files.pythonhosted.org/packages/0c/dd/7c1331f902f30669ac3e754680b6edb9a0dd06dea5438e61128111fadd2c/watchfiles-1.1.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:60022527e71d1d1fda67a33150ee42869042bce3d0fcc9cc49be009a9cded3fb", size = 622820, upload-time = "2025-06-15T19:05:50.088Z" }, + { url = "https://files.pythonhosted.org/packages/1b/14/36d7a8e27cd128d7b1009e7715a7c02f6c131be9d4ce1e5c3b73d0e342d8/watchfiles-1.1.0-cp313-cp313-win32.whl", hash = "sha256:32d6d4e583593cb8576e129879ea0991660b935177c0f93c6681359b3654bfa9", size = 279194, upload-time = "2025-06-15T19:05:51.186Z" }, + { url = "https://files.pythonhosted.org/packages/25/41/2dd88054b849aa546dbeef5696019c58f8e0774f4d1c42123273304cdb2e/watchfiles-1.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:f21af781a4a6fbad54f03c598ab620e3a77032c5878f3d780448421a6e1818c7", size = 292349, upload-time = "2025-06-15T19:05:52.201Z" }, + { url = "https://files.pythonhosted.org/packages/c8/cf/421d659de88285eb13941cf11a81f875c176f76a6d99342599be88e08d03/watchfiles-1.1.0-cp313-cp313-win_arm64.whl", hash = "sha256:5366164391873ed76bfdf618818c82084c9db7fac82b64a20c44d335eec9ced5", size = 283836, upload-time = "2025-06-15T19:05:53.265Z" }, + { url = "https://files.pythonhosted.org/packages/45/10/6faf6858d527e3599cc50ec9fcae73590fbddc1420bd4fdccfebffeedbc6/watchfiles-1.1.0-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:17ab167cca6339c2b830b744eaf10803d2a5b6683be4d79d8475d88b4a8a4be1", size = 400343, upload-time = "2025-06-15T19:05:54.252Z" }, + { url = "https://files.pythonhosted.org/packages/03/20/5cb7d3966f5e8c718006d0e97dfe379a82f16fecd3caa7810f634412047a/watchfiles-1.1.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:328dbc9bff7205c215a7807da7c18dce37da7da718e798356212d22696404339", size = 392916, upload-time = "2025-06-15T19:05:55.264Z" }, + { url = "https://files.pythonhosted.org/packages/8c/07/d8f1176328fa9e9581b6f120b017e286d2a2d22ae3f554efd9515c8e1b49/watchfiles-1.1.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f7208ab6e009c627b7557ce55c465c98967e8caa8b11833531fdf95799372633", size = 449582, upload-time = "2025-06-15T19:05:56.317Z" }, + { url = "https://files.pythonhosted.org/packages/66/e8/80a14a453cf6038e81d072a86c05276692a1826471fef91df7537dba8b46/watchfiles-1.1.0-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a8f6f72974a19efead54195bc9bed4d850fc047bb7aa971268fd9a8387c89011", size = 456752, upload-time = "2025-06-15T19:05:57.359Z" }, + { url = "https://files.pythonhosted.org/packages/5a/25/0853b3fe0e3c2f5af9ea60eb2e781eade939760239a72c2d38fc4cc335f6/watchfiles-1.1.0-cp313-cp313t-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d181ef50923c29cf0450c3cd47e2f0557b62218c50b2ab8ce2ecaa02bd97e670", size = 481436, upload-time = "2025-06-15T19:05:58.447Z" }, + { url = "https://files.pythonhosted.org/packages/fe/9e/4af0056c258b861fbb29dcb36258de1e2b857be4a9509e6298abcf31e5c9/watchfiles-1.1.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:adb4167043d3a78280d5d05ce0ba22055c266cf8655ce942f2fb881262ff3cdf", size = 596016, upload-time = "2025-06-15T19:05:59.59Z" }, + { url = "https://files.pythonhosted.org/packages/c5/fa/95d604b58aa375e781daf350897aaaa089cff59d84147e9ccff2447c8294/watchfiles-1.1.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8c5701dc474b041e2934a26d31d39f90fac8a3dee2322b39f7729867f932b1d4", size = 476727, upload-time = "2025-06-15T19:06:01.086Z" }, + { url = "https://files.pythonhosted.org/packages/65/95/fe479b2664f19be4cf5ceeb21be05afd491d95f142e72d26a42f41b7c4f8/watchfiles-1.1.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b067915e3c3936966a8607f6fe5487df0c9c4afb85226613b520890049deea20", size = 451864, upload-time = "2025-06-15T19:06:02.144Z" }, + { url = "https://files.pythonhosted.org/packages/d3/8a/3c4af14b93a15ce55901cd7a92e1a4701910f1768c78fb30f61d2b79785b/watchfiles-1.1.0-cp313-cp313t-musllinux_1_1_aarch64.whl", hash = "sha256:9c733cda03b6d636b4219625a4acb5c6ffb10803338e437fb614fef9516825ef", size = 625626, upload-time = "2025-06-15T19:06:03.578Z" }, + { url = "https://files.pythonhosted.org/packages/da/f5/cf6aa047d4d9e128f4b7cde615236a915673775ef171ff85971d698f3c2c/watchfiles-1.1.0-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:cc08ef8b90d78bfac66f0def80240b0197008e4852c9f285907377b2947ffdcb", size = 622744, upload-time = "2025-06-15T19:06:05.066Z" }, + { url = "https://files.pythonhosted.org/packages/2c/00/70f75c47f05dea6fd30df90f047765f6fc2d6eb8b5a3921379b0b04defa2/watchfiles-1.1.0-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:9974d2f7dc561cce3bb88dfa8eb309dab64c729de85fba32e98d75cf24b66297", size = 402114, upload-time = "2025-06-15T19:06:06.186Z" }, + { url = "https://files.pythonhosted.org/packages/53/03/acd69c48db4a1ed1de26b349d94077cca2238ff98fd64393f3e97484cae6/watchfiles-1.1.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c68e9f1fcb4d43798ad8814c4c1b61547b014b667216cb754e606bfade587018", size = 393879, upload-time = "2025-06-15T19:06:07.369Z" }, + { url = "https://files.pythonhosted.org/packages/2f/c8/a9a2a6f9c8baa4eceae5887fecd421e1b7ce86802bcfc8b6a942e2add834/watchfiles-1.1.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:95ab1594377effac17110e1352989bdd7bdfca9ff0e5eeccd8c69c5389b826d0", size = 450026, upload-time = "2025-06-15T19:06:08.476Z" }, + { url = "https://files.pythonhosted.org/packages/fe/51/d572260d98388e6e2b967425c985e07d47ee6f62e6455cefb46a6e06eda5/watchfiles-1.1.0-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fba9b62da882c1be1280a7584ec4515d0a6006a94d6e5819730ec2eab60ffe12", size = 457917, upload-time = "2025-06-15T19:06:09.988Z" }, + { url = "https://files.pythonhosted.org/packages/c6/2d/4258e52917bf9f12909b6ec314ff9636276f3542f9d3807d143f27309104/watchfiles-1.1.0-cp314-cp314-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3434e401f3ce0ed6b42569128b3d1e3af773d7ec18751b918b89cd49c14eaafb", size = 483602, upload-time = "2025-06-15T19:06:11.088Z" }, + { url = "https://files.pythonhosted.org/packages/84/99/bee17a5f341a4345fe7b7972a475809af9e528deba056f8963d61ea49f75/watchfiles-1.1.0-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fa257a4d0d21fcbca5b5fcba9dca5a78011cb93c0323fb8855c6d2dfbc76eb77", size = 596758, upload-time = "2025-06-15T19:06:12.197Z" }, + { url = "https://files.pythonhosted.org/packages/40/76/e4bec1d59b25b89d2b0716b41b461ed655a9a53c60dc78ad5771fda5b3e6/watchfiles-1.1.0-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7fd1b3879a578a8ec2076c7961076df540b9af317123f84569f5a9ddee64ce92", size = 477601, upload-time = "2025-06-15T19:06:13.391Z" }, + { url = "https://files.pythonhosted.org/packages/1f/fa/a514292956f4a9ce3c567ec0c13cce427c158e9f272062685a8a727d08fc/watchfiles-1.1.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:62cc7a30eeb0e20ecc5f4bd113cd69dcdb745a07c68c0370cea919f373f65d9e", size = 451936, upload-time = "2025-06-15T19:06:14.656Z" }, + { url = "https://files.pythonhosted.org/packages/32/5d/c3bf927ec3bbeb4566984eba8dd7a8eb69569400f5509904545576741f88/watchfiles-1.1.0-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:891c69e027748b4a73847335d208e374ce54ca3c335907d381fde4e41661b13b", size = 626243, upload-time = "2025-06-15T19:06:16.232Z" }, + { url = "https://files.pythonhosted.org/packages/e6/65/6e12c042f1a68c556802a84d54bb06d35577c81e29fba14019562479159c/watchfiles-1.1.0-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:12fe8eaffaf0faa7906895b4f8bb88264035b3f0243275e0bf24af0436b27259", size = 623073, upload-time = "2025-06-15T19:06:17.457Z" }, + { url = "https://files.pythonhosted.org/packages/89/ab/7f79d9bf57329e7cbb0a6fd4c7bd7d0cee1e4a8ef0041459f5409da3506c/watchfiles-1.1.0-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:bfe3c517c283e484843cb2e357dd57ba009cff351edf45fb455b5fbd1f45b15f", size = 400872, upload-time = "2025-06-15T19:06:18.57Z" }, + { url = "https://files.pythonhosted.org/packages/df/d5/3f7bf9912798e9e6c516094db6b8932df53b223660c781ee37607030b6d3/watchfiles-1.1.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:a9ccbf1f129480ed3044f540c0fdbc4ee556f7175e5ab40fe077ff6baf286d4e", size = 392877, upload-time = "2025-06-15T19:06:19.55Z" }, + { url = "https://files.pythonhosted.org/packages/0d/c5/54ec7601a2798604e01c75294770dbee8150e81c6e471445d7601610b495/watchfiles-1.1.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ba0e3255b0396cac3cc7bbace76404dd72b5438bf0d8e7cefa2f79a7f3649caa", size = 449645, upload-time = "2025-06-15T19:06:20.66Z" }, + { url = "https://files.pythonhosted.org/packages/0a/04/c2f44afc3b2fce21ca0b7802cbd37ed90a29874f96069ed30a36dfe57c2b/watchfiles-1.1.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4281cd9fce9fc0a9dbf0fc1217f39bf9cf2b4d315d9626ef1d4e87b84699e7e8", size = 457424, upload-time = "2025-06-15T19:06:21.712Z" }, + { url = "https://files.pythonhosted.org/packages/9f/b0/eec32cb6c14d248095261a04f290636da3df3119d4040ef91a4a50b29fa5/watchfiles-1.1.0-cp314-cp314t-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6d2404af8db1329f9a3c9b79ff63e0ae7131986446901582067d9304ae8aaf7f", size = 481584, upload-time = "2025-06-15T19:06:22.777Z" }, + { url = "https://files.pythonhosted.org/packages/d1/e2/ca4bb71c68a937d7145aa25709e4f5d68eb7698a25ce266e84b55d591bbd/watchfiles-1.1.0-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e78b6ed8165996013165eeabd875c5dfc19d41b54f94b40e9fff0eb3193e5e8e", size = 596675, upload-time = "2025-06-15T19:06:24.226Z" }, + { url = "https://files.pythonhosted.org/packages/a1/dd/b0e4b7fb5acf783816bc950180a6cd7c6c1d2cf7e9372c0ea634e722712b/watchfiles-1.1.0-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:249590eb75ccc117f488e2fabd1bfa33c580e24b96f00658ad88e38844a040bb", size = 477363, upload-time = "2025-06-15T19:06:25.42Z" }, + { url = "https://files.pythonhosted.org/packages/69/c4/088825b75489cb5b6a761a4542645718893d395d8c530b38734f19da44d2/watchfiles-1.1.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d05686b5487cfa2e2c28ff1aa370ea3e6c5accfe6435944ddea1e10d93872147", size = 452240, upload-time = "2025-06-15T19:06:26.552Z" }, + { url = "https://files.pythonhosted.org/packages/10/8c/22b074814970eeef43b7c44df98c3e9667c1f7bf5b83e0ff0201b0bd43f9/watchfiles-1.1.0-cp314-cp314t-musllinux_1_1_aarch64.whl", hash = "sha256:d0e10e6f8f6dc5762adee7dece33b722282e1f59aa6a55da5d493a97282fedd8", size = 625607, upload-time = "2025-06-15T19:06:27.606Z" }, + { url = "https://files.pythonhosted.org/packages/32/fa/a4f5c2046385492b2273213ef815bf71a0d4c1943b784fb904e184e30201/watchfiles-1.1.0-cp314-cp314t-musllinux_1_1_x86_64.whl", hash = "sha256:af06c863f152005c7592df1d6a7009c836a247c9d8adb78fef8575a5a98699db", size = 623315, upload-time = "2025-06-15T19:06:29.076Z" }, + { url = "https://files.pythonhosted.org/packages/8c/6b/686dcf5d3525ad17b384fd94708e95193529b460a1b7bf40851f1328ec6e/watchfiles-1.1.0-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:0ece16b563b17ab26eaa2d52230c9a7ae46cf01759621f4fbbca280e438267b3", size = 406910, upload-time = "2025-06-15T19:06:49.335Z" }, + { url = "https://files.pythonhosted.org/packages/f3/d3/71c2dcf81dc1edcf8af9f4d8d63b1316fb0a2dd90cbfd427e8d9dd584a90/watchfiles-1.1.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:51b81e55d40c4b4aa8658427a3ee7ea847c591ae9e8b81ef94a90b668999353c", size = 398816, upload-time = "2025-06-15T19:06:50.433Z" }, + { url = "https://files.pythonhosted.org/packages/b8/fa/12269467b2fc006f8fce4cd6c3acfa77491dd0777d2a747415f28ccc8c60/watchfiles-1.1.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f2bcdc54ea267fe72bfc7d83c041e4eb58d7d8dc6f578dfddb52f037ce62f432", size = 451584, upload-time = "2025-06-15T19:06:51.834Z" }, + { url = "https://files.pythonhosted.org/packages/bd/d3/254cea30f918f489db09d6a8435a7de7047f8cb68584477a515f160541d6/watchfiles-1.1.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:923fec6e5461c42bd7e3fd5ec37492c6f3468be0499bc0707b4bbbc16ac21792", size = 454009, upload-time = "2025-06-15T19:06:52.896Z" }, +] + +[[package]] +name = "wcwidth" +version = "0.2.13" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/6c/63/53559446a878410fc5a5974feb13d31d78d752eb18aeba59c7fef1af7598/wcwidth-0.2.13.tar.gz", hash = "sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5", size = 101301, upload-time = "2024-01-06T02:10:57.829Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fd/84/fd2ba7aafacbad3c4201d395674fc6348826569da3c0937e75505ead3528/wcwidth-0.2.13-py2.py3-none-any.whl", hash = "sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859", size = 34166, upload-time = "2024-01-06T02:10:55.763Z" }, +] + +[[package]] +name = "websockets" +version = "15.0.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/21/e6/26d09fab466b7ca9c7737474c52be4f76a40301b08362eb2dbc19dcc16c1/websockets-15.0.1.tar.gz", hash = "sha256:82544de02076bafba038ce055ee6412d68da13ab47f0c60cab827346de828dee", size = 177016, upload-time = "2025-03-05T20:03:41.606Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9f/32/18fcd5919c293a398db67443acd33fde142f283853076049824fc58e6f75/websockets-15.0.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:823c248b690b2fd9303ba00c4f66cd5e2d8c3ba4aa968b2779be9532a4dad431", size = 175423, upload-time = "2025-03-05T20:01:56.276Z" }, + { url = "https://files.pythonhosted.org/packages/76/70/ba1ad96b07869275ef42e2ce21f07a5b0148936688c2baf7e4a1f60d5058/websockets-15.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:678999709e68425ae2593acf2e3ebcbcf2e69885a5ee78f9eb80e6e371f1bf57", size = 173082, upload-time = "2025-03-05T20:01:57.563Z" }, + { url = "https://files.pythonhosted.org/packages/86/f2/10b55821dd40eb696ce4704a87d57774696f9451108cff0d2824c97e0f97/websockets-15.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d50fd1ee42388dcfb2b3676132c78116490976f1300da28eb629272d5d93e905", size = 173330, upload-time = "2025-03-05T20:01:59.063Z" }, + { url = "https://files.pythonhosted.org/packages/a5/90/1c37ae8b8a113d3daf1065222b6af61cc44102da95388ac0018fcb7d93d9/websockets-15.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d99e5546bf73dbad5bf3547174cd6cb8ba7273062a23808ffea025ecb1cf8562", size = 182878, upload-time = "2025-03-05T20:02:00.305Z" }, + { url = "https://files.pythonhosted.org/packages/8e/8d/96e8e288b2a41dffafb78e8904ea7367ee4f891dafc2ab8d87e2124cb3d3/websockets-15.0.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:66dd88c918e3287efc22409d426c8f729688d89a0c587c88971a0faa2c2f3792", size = 181883, upload-time = "2025-03-05T20:02:03.148Z" }, + { url = "https://files.pythonhosted.org/packages/93/1f/5d6dbf551766308f6f50f8baf8e9860be6182911e8106da7a7f73785f4c4/websockets-15.0.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8dd8327c795b3e3f219760fa603dcae1dcc148172290a8ab15158cf85a953413", size = 182252, upload-time = "2025-03-05T20:02:05.29Z" }, + { url = "https://files.pythonhosted.org/packages/d4/78/2d4fed9123e6620cbf1706c0de8a1632e1a28e7774d94346d7de1bba2ca3/websockets-15.0.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8fdc51055e6ff4adeb88d58a11042ec9a5eae317a0a53d12c062c8a8865909e8", size = 182521, upload-time = "2025-03-05T20:02:07.458Z" }, + { url = "https://files.pythonhosted.org/packages/e7/3b/66d4c1b444dd1a9823c4a81f50231b921bab54eee2f69e70319b4e21f1ca/websockets-15.0.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:693f0192126df6c2327cce3baa7c06f2a117575e32ab2308f7f8216c29d9e2e3", size = 181958, upload-time = "2025-03-05T20:02:09.842Z" }, + { url = "https://files.pythonhosted.org/packages/08/ff/e9eed2ee5fed6f76fdd6032ca5cd38c57ca9661430bb3d5fb2872dc8703c/websockets-15.0.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:54479983bd5fb469c38f2f5c7e3a24f9a4e70594cd68cd1fa6b9340dadaff7cf", size = 181918, upload-time = "2025-03-05T20:02:11.968Z" }, + { url = "https://files.pythonhosted.org/packages/d8/75/994634a49b7e12532be6a42103597b71098fd25900f7437d6055ed39930a/websockets-15.0.1-cp311-cp311-win32.whl", hash = "sha256:16b6c1b3e57799b9d38427dda63edcbe4926352c47cf88588c0be4ace18dac85", size = 176388, upload-time = "2025-03-05T20:02:13.32Z" }, + { url = "https://files.pythonhosted.org/packages/98/93/e36c73f78400a65f5e236cd376713c34182e6663f6889cd45a4a04d8f203/websockets-15.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:27ccee0071a0e75d22cb35849b1db43f2ecd3e161041ac1ee9d2352ddf72f065", size = 176828, upload-time = "2025-03-05T20:02:14.585Z" }, + { url = "https://files.pythonhosted.org/packages/51/6b/4545a0d843594f5d0771e86463606a3988b5a09ca5123136f8a76580dd63/websockets-15.0.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:3e90baa811a5d73f3ca0bcbf32064d663ed81318ab225ee4f427ad4e26e5aff3", size = 175437, upload-time = "2025-03-05T20:02:16.706Z" }, + { url = "https://files.pythonhosted.org/packages/f4/71/809a0f5f6a06522af902e0f2ea2757f71ead94610010cf570ab5c98e99ed/websockets-15.0.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:592f1a9fe869c778694f0aa806ba0374e97648ab57936f092fd9d87f8bc03665", size = 173096, upload-time = "2025-03-05T20:02:18.832Z" }, + { url = "https://files.pythonhosted.org/packages/3d/69/1a681dd6f02180916f116894181eab8b2e25b31e484c5d0eae637ec01f7c/websockets-15.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0701bc3cfcb9164d04a14b149fd74be7347a530ad3bbf15ab2c678a2cd3dd9a2", size = 173332, upload-time = "2025-03-05T20:02:20.187Z" }, + { url = "https://files.pythonhosted.org/packages/a6/02/0073b3952f5bce97eafbb35757f8d0d54812b6174ed8dd952aa08429bcc3/websockets-15.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8b56bdcdb4505c8078cb6c7157d9811a85790f2f2b3632c7d1462ab5783d215", size = 183152, upload-time = "2025-03-05T20:02:22.286Z" }, + { url = "https://files.pythonhosted.org/packages/74/45/c205c8480eafd114b428284840da0b1be9ffd0e4f87338dc95dc6ff961a1/websockets-15.0.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0af68c55afbd5f07986df82831c7bff04846928ea8d1fd7f30052638788bc9b5", size = 182096, upload-time = "2025-03-05T20:02:24.368Z" }, + { url = "https://files.pythonhosted.org/packages/14/8f/aa61f528fba38578ec553c145857a181384c72b98156f858ca5c8e82d9d3/websockets-15.0.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:64dee438fed052b52e4f98f76c5790513235efaa1ef7f3f2192c392cd7c91b65", size = 182523, upload-time = "2025-03-05T20:02:25.669Z" }, + { url = "https://files.pythonhosted.org/packages/ec/6d/0267396610add5bc0d0d3e77f546d4cd287200804fe02323797de77dbce9/websockets-15.0.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d5f6b181bb38171a8ad1d6aa58a67a6aa9d4b38d0f8c5f496b9e42561dfc62fe", size = 182790, upload-time = "2025-03-05T20:02:26.99Z" }, + { url = "https://files.pythonhosted.org/packages/02/05/c68c5adbf679cf610ae2f74a9b871ae84564462955d991178f95a1ddb7dd/websockets-15.0.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:5d54b09eba2bada6011aea5375542a157637b91029687eb4fdb2dab11059c1b4", size = 182165, upload-time = "2025-03-05T20:02:30.291Z" }, + { url = "https://files.pythonhosted.org/packages/29/93/bb672df7b2f5faac89761cb5fa34f5cec45a4026c383a4b5761c6cea5c16/websockets-15.0.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3be571a8b5afed347da347bfcf27ba12b069d9d7f42cb8c7028b5e98bbb12597", size = 182160, upload-time = "2025-03-05T20:02:31.634Z" }, + { url = "https://files.pythonhosted.org/packages/ff/83/de1f7709376dc3ca9b7eeb4b9a07b4526b14876b6d372a4dc62312bebee0/websockets-15.0.1-cp312-cp312-win32.whl", hash = "sha256:c338ffa0520bdb12fbc527265235639fb76e7bc7faafbb93f6ba80d9c06578a9", size = 176395, upload-time = "2025-03-05T20:02:33.017Z" }, + { url = "https://files.pythonhosted.org/packages/7d/71/abf2ebc3bbfa40f391ce1428c7168fb20582d0ff57019b69ea20fa698043/websockets-15.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:fcd5cf9e305d7b8338754470cf69cf81f420459dbae8a3b40cee57417f4614a7", size = 176841, upload-time = "2025-03-05T20:02:34.498Z" }, + { url = "https://files.pythonhosted.org/packages/cb/9f/51f0cf64471a9d2b4d0fc6c534f323b664e7095640c34562f5182e5a7195/websockets-15.0.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ee443ef070bb3b6ed74514f5efaa37a252af57c90eb33b956d35c8e9c10a1931", size = 175440, upload-time = "2025-03-05T20:02:36.695Z" }, + { url = "https://files.pythonhosted.org/packages/8a/05/aa116ec9943c718905997412c5989f7ed671bc0188ee2ba89520e8765d7b/websockets-15.0.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:5a939de6b7b4e18ca683218320fc67ea886038265fd1ed30173f5ce3f8e85675", size = 173098, upload-time = "2025-03-05T20:02:37.985Z" }, + { url = "https://files.pythonhosted.org/packages/ff/0b/33cef55ff24f2d92924923c99926dcce78e7bd922d649467f0eda8368923/websockets-15.0.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:746ee8dba912cd6fc889a8147168991d50ed70447bf18bcda7039f7d2e3d9151", size = 173329, upload-time = "2025-03-05T20:02:39.298Z" }, + { url = "https://files.pythonhosted.org/packages/31/1d/063b25dcc01faa8fada1469bdf769de3768b7044eac9d41f734fd7b6ad6d/websockets-15.0.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:595b6c3969023ecf9041b2936ac3827e4623bfa3ccf007575f04c5a6aa318c22", size = 183111, upload-time = "2025-03-05T20:02:40.595Z" }, + { url = "https://files.pythonhosted.org/packages/93/53/9a87ee494a51bf63e4ec9241c1ccc4f7c2f45fff85d5bde2ff74fcb68b9e/websockets-15.0.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3c714d2fc58b5ca3e285461a4cc0c9a66bd0e24c5da9911e30158286c9b5be7f", size = 182054, upload-time = "2025-03-05T20:02:41.926Z" }, + { url = "https://files.pythonhosted.org/packages/ff/b2/83a6ddf56cdcbad4e3d841fcc55d6ba7d19aeb89c50f24dd7e859ec0805f/websockets-15.0.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0f3c1e2ab208db911594ae5b4f79addeb3501604a165019dd221c0bdcabe4db8", size = 182496, upload-time = "2025-03-05T20:02:43.304Z" }, + { url = "https://files.pythonhosted.org/packages/98/41/e7038944ed0abf34c45aa4635ba28136f06052e08fc2168520bb8b25149f/websockets-15.0.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:229cf1d3ca6c1804400b0a9790dc66528e08a6a1feec0d5040e8b9eb14422375", size = 182829, upload-time = "2025-03-05T20:02:48.812Z" }, + { url = "https://files.pythonhosted.org/packages/e0/17/de15b6158680c7623c6ef0db361da965ab25d813ae54fcfeae2e5b9ef910/websockets-15.0.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:756c56e867a90fb00177d530dca4b097dd753cde348448a1012ed6c5131f8b7d", size = 182217, upload-time = "2025-03-05T20:02:50.14Z" }, + { url = "https://files.pythonhosted.org/packages/33/2b/1f168cb6041853eef0362fb9554c3824367c5560cbdaad89ac40f8c2edfc/websockets-15.0.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:558d023b3df0bffe50a04e710bc87742de35060580a293c2a984299ed83bc4e4", size = 182195, upload-time = "2025-03-05T20:02:51.561Z" }, + { url = "https://files.pythonhosted.org/packages/86/eb/20b6cdf273913d0ad05a6a14aed4b9a85591c18a987a3d47f20fa13dcc47/websockets-15.0.1-cp313-cp313-win32.whl", hash = "sha256:ba9e56e8ceeeedb2e080147ba85ffcd5cd0711b89576b83784d8605a7df455fa", size = 176393, upload-time = "2025-03-05T20:02:53.814Z" }, + { url = "https://files.pythonhosted.org/packages/1b/6c/c65773d6cab416a64d191d6ee8a8b1c68a09970ea6909d16965d26bfed1e/websockets-15.0.1-cp313-cp313-win_amd64.whl", hash = "sha256:e09473f095a819042ecb2ab9465aee615bd9c2028e4ef7d933600a8401c79561", size = 176837, upload-time = "2025-03-05T20:02:55.237Z" }, + { url = "https://files.pythonhosted.org/packages/fa/a8/5b41e0da817d64113292ab1f8247140aac61cbf6cfd085d6a0fa77f4984f/websockets-15.0.1-py3-none-any.whl", hash = "sha256:f7a866fbc1e97b5c617ee4116daaa09b722101d4a3c170c787450ba409f9736f", size = 169743, upload-time = "2025-03-05T20:03:39.41Z" }, +] + +[[package]] +name = "werkzeug" +version = "3.1.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markupsafe" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9f/69/83029f1f6300c5fb2471d621ab06f6ec6b3324685a2ce0f9777fd4a8b71e/werkzeug-3.1.3.tar.gz", hash = "sha256:60723ce945c19328679790e3282cc758aa4a6040e4bb330f53d30fa546d44746", size = 806925, upload-time = "2024-11-08T15:52:18.093Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/52/24/ab44c871b0f07f491e5d2ad12c9bd7358e527510618cb1b803a88e986db1/werkzeug-3.1.3-py3-none-any.whl", hash = "sha256:54b78bf3716d19a65be4fceccc0d1d7b89e608834989dfae50ea87564639213e", size = 224498, upload-time = "2024-11-08T15:52:16.132Z" }, +] + +[[package]] +name = "wrapt" +version = "1.17.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c3/fc/e91cc220803d7bc4db93fb02facd8461c37364151b8494762cc88b0fbcef/wrapt-1.17.2.tar.gz", hash = "sha256:41388e9d4d1522446fe79d3213196bd9e3b301a336965b9e27ca2788ebd122f3", size = 55531, upload-time = "2025-01-14T10:35:45.465Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cd/f7/a2aab2cbc7a665efab072344a8949a71081eed1d2f451f7f7d2b966594a2/wrapt-1.17.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ff04ef6eec3eee8a5efef2401495967a916feaa353643defcc03fc74fe213b58", size = 53308, upload-time = "2025-01-14T10:33:33.992Z" }, + { url = "https://files.pythonhosted.org/packages/50/ff/149aba8365fdacef52b31a258c4dc1c57c79759c335eff0b3316a2664a64/wrapt-1.17.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4db983e7bca53819efdbd64590ee96c9213894272c776966ca6306b73e4affda", size = 38488, upload-time = "2025-01-14T10:33:35.264Z" }, + { url = "https://files.pythonhosted.org/packages/65/46/5a917ce85b5c3b490d35c02bf71aedaa9f2f63f2d15d9949cc4ba56e8ba9/wrapt-1.17.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9abc77a4ce4c6f2a3168ff34b1da9b0f311a8f1cfd694ec96b0603dff1c79438", size = 38776, upload-time = "2025-01-14T10:33:38.28Z" }, + { url = "https://files.pythonhosted.org/packages/ca/74/336c918d2915a4943501c77566db41d1bd6e9f4dbc317f356b9a244dfe83/wrapt-1.17.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0b929ac182f5ace000d459c59c2c9c33047e20e935f8e39371fa6e3b85d56f4a", size = 83776, upload-time = "2025-01-14T10:33:40.678Z" }, + { url = "https://files.pythonhosted.org/packages/09/99/c0c844a5ccde0fe5761d4305485297f91d67cf2a1a824c5f282e661ec7ff/wrapt-1.17.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f09b286faeff3c750a879d336fb6d8713206fc97af3adc14def0cdd349df6000", size = 75420, upload-time = "2025-01-14T10:33:41.868Z" }, + { url = "https://files.pythonhosted.org/packages/b4/b0/9fc566b0fe08b282c850063591a756057c3247b2362b9286429ec5bf1721/wrapt-1.17.2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1a7ed2d9d039bd41e889f6fb9364554052ca21ce823580f6a07c4ec245c1f5d6", size = 83199, upload-time = "2025-01-14T10:33:43.598Z" }, + { url = "https://files.pythonhosted.org/packages/9d/4b/71996e62d543b0a0bd95dda485219856def3347e3e9380cc0d6cf10cfb2f/wrapt-1.17.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:129a150f5c445165ff941fc02ee27df65940fcb8a22a61828b1853c98763a64b", size = 82307, upload-time = "2025-01-14T10:33:48.499Z" }, + { url = "https://files.pythonhosted.org/packages/39/35/0282c0d8789c0dc9bcc738911776c762a701f95cfe113fb8f0b40e45c2b9/wrapt-1.17.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:1fb5699e4464afe5c7e65fa51d4f99e0b2eadcc176e4aa33600a3df7801d6662", size = 75025, upload-time = "2025-01-14T10:33:51.191Z" }, + { url = "https://files.pythonhosted.org/packages/4f/6d/90c9fd2c3c6fee181feecb620d95105370198b6b98a0770cba090441a828/wrapt-1.17.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9a2bce789a5ea90e51a02dfcc39e31b7f1e662bc3317979aa7e5538e3a034f72", size = 81879, upload-time = "2025-01-14T10:33:52.328Z" }, + { url = "https://files.pythonhosted.org/packages/8f/fa/9fb6e594f2ce03ef03eddbdb5f4f90acb1452221a5351116c7c4708ac865/wrapt-1.17.2-cp311-cp311-win32.whl", hash = "sha256:4afd5814270fdf6380616b321fd31435a462019d834f83c8611a0ce7484c7317", size = 36419, upload-time = "2025-01-14T10:33:53.551Z" }, + { url = "https://files.pythonhosted.org/packages/47/f8/fb1773491a253cbc123c5d5dc15c86041f746ed30416535f2a8df1f4a392/wrapt-1.17.2-cp311-cp311-win_amd64.whl", hash = "sha256:acc130bc0375999da18e3d19e5a86403667ac0c4042a094fefb7eec8ebac7cf3", size = 38773, upload-time = "2025-01-14T10:33:56.323Z" }, + { url = "https://files.pythonhosted.org/packages/a1/bd/ab55f849fd1f9a58ed7ea47f5559ff09741b25f00c191231f9f059c83949/wrapt-1.17.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:d5e2439eecc762cd85e7bd37161d4714aa03a33c5ba884e26c81559817ca0925", size = 53799, upload-time = "2025-01-14T10:33:57.4Z" }, + { url = "https://files.pythonhosted.org/packages/53/18/75ddc64c3f63988f5a1d7e10fb204ffe5762bc663f8023f18ecaf31a332e/wrapt-1.17.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:3fc7cb4c1c744f8c05cd5f9438a3caa6ab94ce8344e952d7c45a8ed59dd88392", size = 38821, upload-time = "2025-01-14T10:33:59.334Z" }, + { url = "https://files.pythonhosted.org/packages/48/2a/97928387d6ed1c1ebbfd4efc4133a0633546bec8481a2dd5ec961313a1c7/wrapt-1.17.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8fdbdb757d5390f7c675e558fd3186d590973244fab0c5fe63d373ade3e99d40", size = 38919, upload-time = "2025-01-14T10:34:04.093Z" }, + { url = "https://files.pythonhosted.org/packages/73/54/3bfe5a1febbbccb7a2f77de47b989c0b85ed3a6a41614b104204a788c20e/wrapt-1.17.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5bb1d0dbf99411f3d871deb6faa9aabb9d4e744d67dcaaa05399af89d847a91d", size = 88721, upload-time = "2025-01-14T10:34:07.163Z" }, + { url = "https://files.pythonhosted.org/packages/25/cb/7262bc1b0300b4b64af50c2720ef958c2c1917525238d661c3e9a2b71b7b/wrapt-1.17.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d18a4865f46b8579d44e4fe1e2bcbc6472ad83d98e22a26c963d46e4c125ef0b", size = 80899, upload-time = "2025-01-14T10:34:09.82Z" }, + { url = "https://files.pythonhosted.org/packages/2a/5a/04cde32b07a7431d4ed0553a76fdb7a61270e78c5fd5a603e190ac389f14/wrapt-1.17.2-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc570b5f14a79734437cb7b0500376b6b791153314986074486e0b0fa8d71d98", size = 89222, upload-time = "2025-01-14T10:34:11.258Z" }, + { url = "https://files.pythonhosted.org/packages/09/28/2e45a4f4771fcfb109e244d5dbe54259e970362a311b67a965555ba65026/wrapt-1.17.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6d9187b01bebc3875bac9b087948a2bccefe464a7d8f627cf6e48b1bbae30f82", size = 86707, upload-time = "2025-01-14T10:34:12.49Z" }, + { url = "https://files.pythonhosted.org/packages/c6/d2/dcb56bf5f32fcd4bd9aacc77b50a539abdd5b6536872413fd3f428b21bed/wrapt-1.17.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:9e8659775f1adf02eb1e6f109751268e493c73716ca5761f8acb695e52a756ae", size = 79685, upload-time = "2025-01-14T10:34:15.043Z" }, + { url = "https://files.pythonhosted.org/packages/80/4e/eb8b353e36711347893f502ce91c770b0b0929f8f0bed2670a6856e667a9/wrapt-1.17.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e8b2816ebef96d83657b56306152a93909a83f23994f4b30ad4573b00bd11bb9", size = 87567, upload-time = "2025-01-14T10:34:16.563Z" }, + { url = "https://files.pythonhosted.org/packages/17/27/4fe749a54e7fae6e7146f1c7d914d28ef599dacd4416566c055564080fe2/wrapt-1.17.2-cp312-cp312-win32.whl", hash = "sha256:468090021f391fe0056ad3e807e3d9034e0fd01adcd3bdfba977b6fdf4213ea9", size = 36672, upload-time = "2025-01-14T10:34:17.727Z" }, + { url = "https://files.pythonhosted.org/packages/15/06/1dbf478ea45c03e78a6a8c4be4fdc3c3bddea5c8de8a93bc971415e47f0f/wrapt-1.17.2-cp312-cp312-win_amd64.whl", hash = "sha256:ec89ed91f2fa8e3f52ae53cd3cf640d6feff92ba90d62236a81e4e563ac0e991", size = 38865, upload-time = "2025-01-14T10:34:19.577Z" }, + { url = "https://files.pythonhosted.org/packages/ce/b9/0ffd557a92f3b11d4c5d5e0c5e4ad057bd9eb8586615cdaf901409920b14/wrapt-1.17.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:6ed6ffac43aecfe6d86ec5b74b06a5be33d5bb9243d055141e8cabb12aa08125", size = 53800, upload-time = "2025-01-14T10:34:21.571Z" }, + { url = "https://files.pythonhosted.org/packages/c0/ef/8be90a0b7e73c32e550c73cfb2fa09db62234227ece47b0e80a05073b375/wrapt-1.17.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:35621ae4c00e056adb0009f8e86e28eb4a41a4bfa8f9bfa9fca7d343fe94f998", size = 38824, upload-time = "2025-01-14T10:34:22.999Z" }, + { url = "https://files.pythonhosted.org/packages/36/89/0aae34c10fe524cce30fe5fc433210376bce94cf74d05b0d68344c8ba46e/wrapt-1.17.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a604bf7a053f8362d27eb9fefd2097f82600b856d5abe996d623babd067b1ab5", size = 38920, upload-time = "2025-01-14T10:34:25.386Z" }, + { url = "https://files.pythonhosted.org/packages/3b/24/11c4510de906d77e0cfb5197f1b1445d4fec42c9a39ea853d482698ac681/wrapt-1.17.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5cbabee4f083b6b4cd282f5b817a867cf0b1028c54d445b7ec7cfe6505057cf8", size = 88690, upload-time = "2025-01-14T10:34:28.058Z" }, + { url = "https://files.pythonhosted.org/packages/71/d7/cfcf842291267bf455b3e266c0c29dcb675b5540ee8b50ba1699abf3af45/wrapt-1.17.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:49703ce2ddc220df165bd2962f8e03b84c89fee2d65e1c24a7defff6f988f4d6", size = 80861, upload-time = "2025-01-14T10:34:29.167Z" }, + { url = "https://files.pythonhosted.org/packages/d5/66/5d973e9f3e7370fd686fb47a9af3319418ed925c27d72ce16b791231576d/wrapt-1.17.2-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8112e52c5822fc4253f3901b676c55ddf288614dc7011634e2719718eaa187dc", size = 89174, upload-time = "2025-01-14T10:34:31.702Z" }, + { url = "https://files.pythonhosted.org/packages/a7/d3/8e17bb70f6ae25dabc1aaf990f86824e4fd98ee9cadf197054e068500d27/wrapt-1.17.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:9fee687dce376205d9a494e9c121e27183b2a3df18037f89d69bd7b35bcf59e2", size = 86721, upload-time = "2025-01-14T10:34:32.91Z" }, + { url = "https://files.pythonhosted.org/packages/6f/54/f170dfb278fe1c30d0ff864513cff526d624ab8de3254b20abb9cffedc24/wrapt-1.17.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:18983c537e04d11cf027fbb60a1e8dfd5190e2b60cc27bc0808e653e7b218d1b", size = 79763, upload-time = "2025-01-14T10:34:34.903Z" }, + { url = "https://files.pythonhosted.org/packages/4a/98/de07243751f1c4a9b15c76019250210dd3486ce098c3d80d5f729cba029c/wrapt-1.17.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:703919b1633412ab54bcf920ab388735832fdcb9f9a00ae49387f0fe67dad504", size = 87585, upload-time = "2025-01-14T10:34:36.13Z" }, + { url = "https://files.pythonhosted.org/packages/f9/f0/13925f4bd6548013038cdeb11ee2cbd4e37c30f8bfd5db9e5a2a370d6e20/wrapt-1.17.2-cp313-cp313-win32.whl", hash = "sha256:abbb9e76177c35d4e8568e58650aa6926040d6a9f6f03435b7a522bf1c487f9a", size = 36676, upload-time = "2025-01-14T10:34:37.962Z" }, + { url = "https://files.pythonhosted.org/packages/bf/ae/743f16ef8c2e3628df3ddfd652b7d4c555d12c84b53f3d8218498f4ade9b/wrapt-1.17.2-cp313-cp313-win_amd64.whl", hash = "sha256:69606d7bb691b50a4240ce6b22ebb319c1cfb164e5f6569835058196e0f3a845", size = 38871, upload-time = "2025-01-14T10:34:39.13Z" }, + { url = "https://files.pythonhosted.org/packages/3d/bc/30f903f891a82d402ffb5fda27ec1d621cc97cb74c16fea0b6141f1d4e87/wrapt-1.17.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:4a721d3c943dae44f8e243b380cb645a709ba5bd35d3ad27bc2ed947e9c68192", size = 56312, upload-time = "2025-01-14T10:34:40.604Z" }, + { url = "https://files.pythonhosted.org/packages/8a/04/c97273eb491b5f1c918857cd26f314b74fc9b29224521f5b83f872253725/wrapt-1.17.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:766d8bbefcb9e00c3ac3b000d9acc51f1b399513f44d77dfe0eb026ad7c9a19b", size = 40062, upload-time = "2025-01-14T10:34:45.011Z" }, + { url = "https://files.pythonhosted.org/packages/4e/ca/3b7afa1eae3a9e7fefe499db9b96813f41828b9fdb016ee836c4c379dadb/wrapt-1.17.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:e496a8ce2c256da1eb98bd15803a79bee00fc351f5dfb9ea82594a3f058309e0", size = 40155, upload-time = "2025-01-14T10:34:47.25Z" }, + { url = "https://files.pythonhosted.org/packages/89/be/7c1baed43290775cb9030c774bc53c860db140397047cc49aedaf0a15477/wrapt-1.17.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40d615e4fe22f4ad3528448c193b218e077656ca9ccb22ce2cb20db730f8d306", size = 113471, upload-time = "2025-01-14T10:34:50.934Z" }, + { url = "https://files.pythonhosted.org/packages/32/98/4ed894cf012b6d6aae5f5cc974006bdeb92f0241775addad3f8cd6ab71c8/wrapt-1.17.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a5aaeff38654462bc4b09023918b7f21790efb807f54c000a39d41d69cf552cb", size = 101208, upload-time = "2025-01-14T10:34:52.297Z" }, + { url = "https://files.pythonhosted.org/packages/ea/fd/0c30f2301ca94e655e5e057012e83284ce8c545df7661a78d8bfca2fac7a/wrapt-1.17.2-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9a7d15bbd2bc99e92e39f49a04653062ee6085c0e18b3b7512a4f2fe91f2d681", size = 109339, upload-time = "2025-01-14T10:34:53.489Z" }, + { url = "https://files.pythonhosted.org/packages/75/56/05d000de894c4cfcb84bcd6b1df6214297b8089a7bd324c21a4765e49b14/wrapt-1.17.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:e3890b508a23299083e065f435a492b5435eba6e304a7114d2f919d400888cc6", size = 110232, upload-time = "2025-01-14T10:34:55.327Z" }, + { url = "https://files.pythonhosted.org/packages/53/f8/c3f6b2cf9b9277fb0813418e1503e68414cd036b3b099c823379c9575e6d/wrapt-1.17.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:8c8b293cd65ad716d13d8dd3624e42e5a19cc2a2f1acc74b30c2c13f15cb61a6", size = 100476, upload-time = "2025-01-14T10:34:58.055Z" }, + { url = "https://files.pythonhosted.org/packages/a7/b1/0bb11e29aa5139d90b770ebbfa167267b1fc548d2302c30c8f7572851738/wrapt-1.17.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:4c82b8785d98cdd9fed4cac84d765d234ed3251bd6afe34cb7ac523cb93e8b4f", size = 106377, upload-time = "2025-01-14T10:34:59.3Z" }, + { url = "https://files.pythonhosted.org/packages/6a/e1/0122853035b40b3f333bbb25f1939fc1045e21dd518f7f0922b60c156f7c/wrapt-1.17.2-cp313-cp313t-win32.whl", hash = "sha256:13e6afb7fe71fe7485a4550a8844cc9ffbe263c0f1a1eea569bc7091d4898555", size = 37986, upload-time = "2025-01-14T10:35:00.498Z" }, + { url = "https://files.pythonhosted.org/packages/09/5e/1655cf481e079c1f22d0cabdd4e51733679932718dc23bf2db175f329b76/wrapt-1.17.2-cp313-cp313t-win_amd64.whl", hash = "sha256:eaf675418ed6b3b31c7a989fd007fa7c3be66ce14e5c3b27336383604c9da85c", size = 40750, upload-time = "2025-01-14T10:35:03.378Z" }, + { url = "https://files.pythonhosted.org/packages/2d/82/f56956041adef78f849db6b289b282e72b55ab8045a75abad81898c28d19/wrapt-1.17.2-py3-none-any.whl", hash = "sha256:b18f2d1533a71f069c7f82d524a52599053d4c7166e9dd374ae2136b7f40f7c8", size = 23594, upload-time = "2025-01-14T10:35:44.018Z" }, +] + +[[package]] +name = "xmltodict" +version = "0.14.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/50/05/51dcca9a9bf5e1bce52582683ce50980bcadbc4fa5143b9f2b19ab99958f/xmltodict-0.14.2.tar.gz", hash = "sha256:201e7c28bb210e374999d1dde6382923ab0ed1a8a5faeece48ab525b7810a553", size = 51942, upload-time = "2024-10-16T06:10:29.683Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d6/45/fc303eb433e8a2a271739c98e953728422fa61a3c1f36077a49e395c972e/xmltodict-0.14.2-py2.py3-none-any.whl", hash = "sha256:20cc7d723ed729276e808f26fb6b3599f786cbc37e06c65e192ba77c40f20aac", size = 9981, upload-time = "2024-10-16T06:10:27.649Z" }, +] + +[[package]] +name = "yarl" +version = "1.20.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "idna" }, + { name = "multidict" }, + { name = "propcache" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/3c/fb/efaa23fa4e45537b827620f04cf8f3cd658b76642205162e072703a5b963/yarl-1.20.1.tar.gz", hash = "sha256:d017a4997ee50c91fd5466cef416231bb82177b93b029906cefc542ce14c35ac", size = 186428, upload-time = "2025-06-10T00:46:09.923Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b1/18/893b50efc2350e47a874c5c2d67e55a0ea5df91186b2a6f5ac52eff887cd/yarl-1.20.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:47ee6188fea634bdfaeb2cc420f5b3b17332e6225ce88149a17c413c77ff269e", size = 133833, upload-time = "2025-06-10T00:43:07.393Z" }, + { url = "https://files.pythonhosted.org/packages/89/ed/b8773448030e6fc47fa797f099ab9eab151a43a25717f9ac043844ad5ea3/yarl-1.20.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d0f6500f69e8402d513e5eedb77a4e1818691e8f45e6b687147963514d84b44b", size = 91070, upload-time = "2025-06-10T00:43:09.538Z" }, + { url = "https://files.pythonhosted.org/packages/e3/e3/409bd17b1e42619bf69f60e4f031ce1ccb29bd7380117a55529e76933464/yarl-1.20.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7a8900a42fcdaad568de58887c7b2f602962356908eedb7628eaf6021a6e435b", size = 89818, upload-time = "2025-06-10T00:43:11.575Z" }, + { url = "https://files.pythonhosted.org/packages/f8/77/64d8431a4d77c856eb2d82aa3de2ad6741365245a29b3a9543cd598ed8c5/yarl-1.20.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bad6d131fda8ef508b36be3ece16d0902e80b88ea7200f030a0f6c11d9e508d4", size = 347003, upload-time = "2025-06-10T00:43:14.088Z" }, + { url = "https://files.pythonhosted.org/packages/8d/d2/0c7e4def093dcef0bd9fa22d4d24b023788b0a33b8d0088b51aa51e21e99/yarl-1.20.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:df018d92fe22aaebb679a7f89fe0c0f368ec497e3dda6cb81a567610f04501f1", size = 336537, upload-time = "2025-06-10T00:43:16.431Z" }, + { url = "https://files.pythonhosted.org/packages/f0/f3/fc514f4b2cf02cb59d10cbfe228691d25929ce8f72a38db07d3febc3f706/yarl-1.20.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8f969afbb0a9b63c18d0feecf0db09d164b7a44a053e78a7d05f5df163e43833", size = 362358, upload-time = "2025-06-10T00:43:18.704Z" }, + { url = "https://files.pythonhosted.org/packages/ea/6d/a313ac8d8391381ff9006ac05f1d4331cee3b1efaa833a53d12253733255/yarl-1.20.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:812303eb4aa98e302886ccda58d6b099e3576b1b9276161469c25803a8db277d", size = 357362, upload-time = "2025-06-10T00:43:20.888Z" }, + { url = "https://files.pythonhosted.org/packages/00/70/8f78a95d6935a70263d46caa3dd18e1f223cf2f2ff2037baa01a22bc5b22/yarl-1.20.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:98c4a7d166635147924aa0bf9bfe8d8abad6fffa6102de9c99ea04a1376f91e8", size = 348979, upload-time = "2025-06-10T00:43:23.169Z" }, + { url = "https://files.pythonhosted.org/packages/cb/05/42773027968968f4f15143553970ee36ead27038d627f457cc44bbbeecf3/yarl-1.20.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:12e768f966538e81e6e7550f9086a6236b16e26cd964cf4df35349970f3551cf", size = 337274, upload-time = "2025-06-10T00:43:27.111Z" }, + { url = "https://files.pythonhosted.org/packages/05/be/665634aa196954156741ea591d2f946f1b78ceee8bb8f28488bf28c0dd62/yarl-1.20.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:fe41919b9d899661c5c28a8b4b0acf704510b88f27f0934ac7a7bebdd8938d5e", size = 363294, upload-time = "2025-06-10T00:43:28.96Z" }, + { url = "https://files.pythonhosted.org/packages/eb/90/73448401d36fa4e210ece5579895731f190d5119c4b66b43b52182e88cd5/yarl-1.20.1-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:8601bc010d1d7780592f3fc1bdc6c72e2b6466ea34569778422943e1a1f3c389", size = 358169, upload-time = "2025-06-10T00:43:30.701Z" }, + { url = "https://files.pythonhosted.org/packages/c3/b0/fce922d46dc1eb43c811f1889f7daa6001b27a4005587e94878570300881/yarl-1.20.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:daadbdc1f2a9033a2399c42646fbd46da7992e868a5fe9513860122d7fe7a73f", size = 362776, upload-time = "2025-06-10T00:43:32.51Z" }, + { url = "https://files.pythonhosted.org/packages/f1/0d/b172628fce039dae8977fd22caeff3eeebffd52e86060413f5673767c427/yarl-1.20.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:03aa1e041727cb438ca762628109ef1333498b122e4c76dd858d186a37cec845", size = 381341, upload-time = "2025-06-10T00:43:34.543Z" }, + { url = "https://files.pythonhosted.org/packages/6b/9b/5b886d7671f4580209e855974fe1cecec409aa4a89ea58b8f0560dc529b1/yarl-1.20.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:642980ef5e0fa1de5fa96d905c7e00cb2c47cb468bfcac5a18c58e27dbf8d8d1", size = 379988, upload-time = "2025-06-10T00:43:36.489Z" }, + { url = "https://files.pythonhosted.org/packages/73/be/75ef5fd0fcd8f083a5d13f78fd3f009528132a1f2a1d7c925c39fa20aa79/yarl-1.20.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:86971e2795584fe8c002356d3b97ef6c61862720eeff03db2a7c86b678d85b3e", size = 371113, upload-time = "2025-06-10T00:43:38.592Z" }, + { url = "https://files.pythonhosted.org/packages/50/4f/62faab3b479dfdcb741fe9e3f0323e2a7d5cd1ab2edc73221d57ad4834b2/yarl-1.20.1-cp311-cp311-win32.whl", hash = "sha256:597f40615b8d25812f14562699e287f0dcc035d25eb74da72cae043bb884d773", size = 81485, upload-time = "2025-06-10T00:43:41.038Z" }, + { url = "https://files.pythonhosted.org/packages/f0/09/d9c7942f8f05c32ec72cd5c8e041c8b29b5807328b68b4801ff2511d4d5e/yarl-1.20.1-cp311-cp311-win_amd64.whl", hash = "sha256:26ef53a9e726e61e9cd1cda6b478f17e350fb5800b4bd1cd9fe81c4d91cfeb2e", size = 86686, upload-time = "2025-06-10T00:43:42.692Z" }, + { url = "https://files.pythonhosted.org/packages/5f/9a/cb7fad7d73c69f296eda6815e4a2c7ed53fc70c2f136479a91c8e5fbdb6d/yarl-1.20.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:bdcc4cd244e58593a4379fe60fdee5ac0331f8eb70320a24d591a3be197b94a9", size = 133667, upload-time = "2025-06-10T00:43:44.369Z" }, + { url = "https://files.pythonhosted.org/packages/67/38/688577a1cb1e656e3971fb66a3492501c5a5df56d99722e57c98249e5b8a/yarl-1.20.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:b29a2c385a5f5b9c7d9347e5812b6f7ab267193c62d282a540b4fc528c8a9d2a", size = 91025, upload-time = "2025-06-10T00:43:46.295Z" }, + { url = "https://files.pythonhosted.org/packages/50/ec/72991ae51febeb11a42813fc259f0d4c8e0507f2b74b5514618d8b640365/yarl-1.20.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1112ae8154186dfe2de4732197f59c05a83dc814849a5ced892b708033f40dc2", size = 89709, upload-time = "2025-06-10T00:43:48.22Z" }, + { url = "https://files.pythonhosted.org/packages/99/da/4d798025490e89426e9f976702e5f9482005c548c579bdae792a4c37769e/yarl-1.20.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:90bbd29c4fe234233f7fa2b9b121fb63c321830e5d05b45153a2ca68f7d310ee", size = 352287, upload-time = "2025-06-10T00:43:49.924Z" }, + { url = "https://files.pythonhosted.org/packages/1a/26/54a15c6a567aac1c61b18aa0f4b8aa2e285a52d547d1be8bf48abe2b3991/yarl-1.20.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:680e19c7ce3710ac4cd964e90dad99bf9b5029372ba0c7cbfcd55e54d90ea819", size = 345429, upload-time = "2025-06-10T00:43:51.7Z" }, + { url = "https://files.pythonhosted.org/packages/d6/95/9dcf2386cb875b234353b93ec43e40219e14900e046bf6ac118f94b1e353/yarl-1.20.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4a979218c1fdb4246a05efc2cc23859d47c89af463a90b99b7c56094daf25a16", size = 365429, upload-time = "2025-06-10T00:43:53.494Z" }, + { url = "https://files.pythonhosted.org/packages/91/b2/33a8750f6a4bc224242a635f5f2cff6d6ad5ba651f6edcccf721992c21a0/yarl-1.20.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:255b468adf57b4a7b65d8aad5b5138dce6a0752c139965711bdcb81bc370e1b6", size = 363862, upload-time = "2025-06-10T00:43:55.766Z" }, + { url = "https://files.pythonhosted.org/packages/98/28/3ab7acc5b51f4434b181b0cee8f1f4b77a65919700a355fb3617f9488874/yarl-1.20.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a97d67108e79cfe22e2b430d80d7571ae57d19f17cda8bb967057ca8a7bf5bfd", size = 355616, upload-time = "2025-06-10T00:43:58.056Z" }, + { url = "https://files.pythonhosted.org/packages/36/a3/f666894aa947a371724ec7cd2e5daa78ee8a777b21509b4252dd7bd15e29/yarl-1.20.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8570d998db4ddbfb9a590b185a0a33dbf8aafb831d07a5257b4ec9948df9cb0a", size = 339954, upload-time = "2025-06-10T00:43:59.773Z" }, + { url = "https://files.pythonhosted.org/packages/f1/81/5f466427e09773c04219d3450d7a1256138a010b6c9f0af2d48565e9ad13/yarl-1.20.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:97c75596019baae7c71ccf1d8cc4738bc08134060d0adfcbe5642f778d1dca38", size = 365575, upload-time = "2025-06-10T00:44:02.051Z" }, + { url = "https://files.pythonhosted.org/packages/2e/e3/e4b0ad8403e97e6c9972dd587388940a032f030ebec196ab81a3b8e94d31/yarl-1.20.1-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:1c48912653e63aef91ff988c5432832692ac5a1d8f0fb8a33091520b5bbe19ef", size = 365061, upload-time = "2025-06-10T00:44:04.196Z" }, + { url = "https://files.pythonhosted.org/packages/ac/99/b8a142e79eb86c926f9f06452eb13ecb1bb5713bd01dc0038faf5452e544/yarl-1.20.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:4c3ae28f3ae1563c50f3d37f064ddb1511ecc1d5584e88c6b7c63cf7702a6d5f", size = 364142, upload-time = "2025-06-10T00:44:06.527Z" }, + { url = "https://files.pythonhosted.org/packages/34/f2/08ed34a4a506d82a1a3e5bab99ccd930a040f9b6449e9fd050320e45845c/yarl-1.20.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:c5e9642f27036283550f5f57dc6156c51084b458570b9d0d96100c8bebb186a8", size = 381894, upload-time = "2025-06-10T00:44:08.379Z" }, + { url = "https://files.pythonhosted.org/packages/92/f8/9a3fbf0968eac704f681726eff595dce9b49c8a25cd92bf83df209668285/yarl-1.20.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:2c26b0c49220d5799f7b22c6838409ee9bc58ee5c95361a4d7831f03cc225b5a", size = 383378, upload-time = "2025-06-10T00:44:10.51Z" }, + { url = "https://files.pythonhosted.org/packages/af/85/9363f77bdfa1e4d690957cd39d192c4cacd1c58965df0470a4905253b54f/yarl-1.20.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:564ab3d517e3d01c408c67f2e5247aad4019dcf1969982aba3974b4093279004", size = 374069, upload-time = "2025-06-10T00:44:12.834Z" }, + { url = "https://files.pythonhosted.org/packages/35/99/9918c8739ba271dcd935400cff8b32e3cd319eaf02fcd023d5dcd487a7c8/yarl-1.20.1-cp312-cp312-win32.whl", hash = "sha256:daea0d313868da1cf2fac6b2d3a25c6e3a9e879483244be38c8e6a41f1d876a5", size = 81249, upload-time = "2025-06-10T00:44:14.731Z" }, + { url = "https://files.pythonhosted.org/packages/eb/83/5d9092950565481b413b31a23e75dd3418ff0a277d6e0abf3729d4d1ce25/yarl-1.20.1-cp312-cp312-win_amd64.whl", hash = "sha256:48ea7d7f9be0487339828a4de0360d7ce0efc06524a48e1810f945c45b813698", size = 86710, upload-time = "2025-06-10T00:44:16.716Z" }, + { url = "https://files.pythonhosted.org/packages/8a/e1/2411b6d7f769a07687acee88a062af5833cf1966b7266f3d8dfb3d3dc7d3/yarl-1.20.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:0b5ff0fbb7c9f1b1b5ab53330acbfc5247893069e7716840c8e7d5bb7355038a", size = 131811, upload-time = "2025-06-10T00:44:18.933Z" }, + { url = "https://files.pythonhosted.org/packages/b2/27/584394e1cb76fb771371770eccad35de400e7b434ce3142c2dd27392c968/yarl-1.20.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:14f326acd845c2b2e2eb38fb1346c94f7f3b01a4f5c788f8144f9b630bfff9a3", size = 90078, upload-time = "2025-06-10T00:44:20.635Z" }, + { url = "https://files.pythonhosted.org/packages/bf/9a/3246ae92d4049099f52d9b0fe3486e3b500e29b7ea872d0f152966fc209d/yarl-1.20.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f60e4ad5db23f0b96e49c018596707c3ae89f5d0bd97f0ad3684bcbad899f1e7", size = 88748, upload-time = "2025-06-10T00:44:22.34Z" }, + { url = "https://files.pythonhosted.org/packages/a3/25/35afe384e31115a1a801fbcf84012d7a066d89035befae7c5d4284df1e03/yarl-1.20.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:49bdd1b8e00ce57e68ba51916e4bb04461746e794e7c4d4bbc42ba2f18297691", size = 349595, upload-time = "2025-06-10T00:44:24.314Z" }, + { url = "https://files.pythonhosted.org/packages/28/2d/8aca6cb2cabc8f12efcb82749b9cefecbccfc7b0384e56cd71058ccee433/yarl-1.20.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:66252d780b45189975abfed839616e8fd2dbacbdc262105ad7742c6ae58f3e31", size = 342616, upload-time = "2025-06-10T00:44:26.167Z" }, + { url = "https://files.pythonhosted.org/packages/0b/e9/1312633d16b31acf0098d30440ca855e3492d66623dafb8e25b03d00c3da/yarl-1.20.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:59174e7332f5d153d8f7452a102b103e2e74035ad085f404df2e40e663a22b28", size = 361324, upload-time = "2025-06-10T00:44:27.915Z" }, + { url = "https://files.pythonhosted.org/packages/bc/a0/688cc99463f12f7669eec7c8acc71ef56a1521b99eab7cd3abb75af887b0/yarl-1.20.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e3968ec7d92a0c0f9ac34d5ecfd03869ec0cab0697c91a45db3fbbd95fe1b653", size = 359676, upload-time = "2025-06-10T00:44:30.041Z" }, + { url = "https://files.pythonhosted.org/packages/af/44/46407d7f7a56e9a85a4c207724c9f2c545c060380718eea9088f222ba697/yarl-1.20.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d1a4fbb50e14396ba3d375f68bfe02215d8e7bc3ec49da8341fe3157f59d2ff5", size = 352614, upload-time = "2025-06-10T00:44:32.171Z" }, + { url = "https://files.pythonhosted.org/packages/b1/91/31163295e82b8d5485d31d9cf7754d973d41915cadce070491778d9c9825/yarl-1.20.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:11a62c839c3a8eac2410e951301309426f368388ff2f33799052787035793b02", size = 336766, upload-time = "2025-06-10T00:44:34.494Z" }, + { url = "https://files.pythonhosted.org/packages/b4/8e/c41a5bc482121f51c083c4c2bcd16b9e01e1cf8729e380273a952513a21f/yarl-1.20.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:041eaa14f73ff5a8986b4388ac6bb43a77f2ea09bf1913df7a35d4646db69e53", size = 364615, upload-time = "2025-06-10T00:44:36.856Z" }, + { url = "https://files.pythonhosted.org/packages/e3/5b/61a3b054238d33d70ea06ebba7e58597891b71c699e247df35cc984ab393/yarl-1.20.1-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:377fae2fef158e8fd9d60b4c8751387b8d1fb121d3d0b8e9b0be07d1b41e83dc", size = 360982, upload-time = "2025-06-10T00:44:39.141Z" }, + { url = "https://files.pythonhosted.org/packages/df/a3/6a72fb83f8d478cb201d14927bc8040af901811a88e0ff2da7842dd0ed19/yarl-1.20.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:1c92f4390e407513f619d49319023664643d3339bd5e5a56a3bebe01bc67ec04", size = 369792, upload-time = "2025-06-10T00:44:40.934Z" }, + { url = "https://files.pythonhosted.org/packages/7c/af/4cc3c36dfc7c077f8dedb561eb21f69e1e9f2456b91b593882b0b18c19dc/yarl-1.20.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:d25ddcf954df1754ab0f86bb696af765c5bfaba39b74095f27eececa049ef9a4", size = 382049, upload-time = "2025-06-10T00:44:42.854Z" }, + { url = "https://files.pythonhosted.org/packages/19/3a/e54e2c4752160115183a66dc9ee75a153f81f3ab2ba4bf79c3c53b33de34/yarl-1.20.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:909313577e9619dcff8c31a0ea2aa0a2a828341d92673015456b3ae492e7317b", size = 384774, upload-time = "2025-06-10T00:44:45.275Z" }, + { url = "https://files.pythonhosted.org/packages/9c/20/200ae86dabfca89060ec6447649f219b4cbd94531e425e50d57e5f5ac330/yarl-1.20.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:793fd0580cb9664548c6b83c63b43c477212c0260891ddf86809e1c06c8b08f1", size = 374252, upload-time = "2025-06-10T00:44:47.31Z" }, + { url = "https://files.pythonhosted.org/packages/83/75/11ee332f2f516b3d094e89448da73d557687f7d137d5a0f48c40ff211487/yarl-1.20.1-cp313-cp313-win32.whl", hash = "sha256:468f6e40285de5a5b3c44981ca3a319a4b208ccc07d526b20b12aeedcfa654b7", size = 81198, upload-time = "2025-06-10T00:44:49.164Z" }, + { url = "https://files.pythonhosted.org/packages/ba/ba/39b1ecbf51620b40ab402b0fc817f0ff750f6d92712b44689c2c215be89d/yarl-1.20.1-cp313-cp313-win_amd64.whl", hash = "sha256:495b4ef2fea40596bfc0affe3837411d6aa3371abcf31aac0ccc4bdd64d4ef5c", size = 86346, upload-time = "2025-06-10T00:44:51.182Z" }, + { url = "https://files.pythonhosted.org/packages/43/c7/669c52519dca4c95153c8ad96dd123c79f354a376346b198f438e56ffeb4/yarl-1.20.1-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:f60233b98423aab21d249a30eb27c389c14929f47be8430efa7dbd91493a729d", size = 138826, upload-time = "2025-06-10T00:44:52.883Z" }, + { url = "https://files.pythonhosted.org/packages/6a/42/fc0053719b44f6ad04a75d7f05e0e9674d45ef62f2d9ad2c1163e5c05827/yarl-1.20.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:6f3eff4cc3f03d650d8755c6eefc844edde99d641d0dcf4da3ab27141a5f8ddf", size = 93217, upload-time = "2025-06-10T00:44:54.658Z" }, + { url = "https://files.pythonhosted.org/packages/4f/7f/fa59c4c27e2a076bba0d959386e26eba77eb52ea4a0aac48e3515c186b4c/yarl-1.20.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:69ff8439d8ba832d6bed88af2c2b3445977eba9a4588b787b32945871c2444e3", size = 92700, upload-time = "2025-06-10T00:44:56.784Z" }, + { url = "https://files.pythonhosted.org/packages/2f/d4/062b2f48e7c93481e88eff97a6312dca15ea200e959f23e96d8ab898c5b8/yarl-1.20.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3cf34efa60eb81dd2645a2e13e00bb98b76c35ab5061a3989c7a70f78c85006d", size = 347644, upload-time = "2025-06-10T00:44:59.071Z" }, + { url = "https://files.pythonhosted.org/packages/89/47/78b7f40d13c8f62b499cc702fdf69e090455518ae544c00a3bf4afc9fc77/yarl-1.20.1-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:8e0fe9364ad0fddab2688ce72cb7a8e61ea42eff3c7caeeb83874a5d479c896c", size = 323452, upload-time = "2025-06-10T00:45:01.605Z" }, + { url = "https://files.pythonhosted.org/packages/eb/2b/490d3b2dc66f52987d4ee0d3090a147ea67732ce6b4d61e362c1846d0d32/yarl-1.20.1-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8f64fbf81878ba914562c672024089e3401974a39767747691c65080a67b18c1", size = 346378, upload-time = "2025-06-10T00:45:03.946Z" }, + { url = "https://files.pythonhosted.org/packages/66/ad/775da9c8a94ce925d1537f939a4f17d782efef1f973039d821cbe4bcc211/yarl-1.20.1-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f6342d643bf9a1de97e512e45e4b9560a043347e779a173250824f8b254bd5ce", size = 353261, upload-time = "2025-06-10T00:45:05.992Z" }, + { url = "https://files.pythonhosted.org/packages/4b/23/0ed0922b47a4f5c6eb9065d5ff1e459747226ddce5c6a4c111e728c9f701/yarl-1.20.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:56dac5f452ed25eef0f6e3c6a066c6ab68971d96a9fb441791cad0efba6140d3", size = 335987, upload-time = "2025-06-10T00:45:08.227Z" }, + { url = "https://files.pythonhosted.org/packages/3e/49/bc728a7fe7d0e9336e2b78f0958a2d6b288ba89f25a1762407a222bf53c3/yarl-1.20.1-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c7d7f497126d65e2cad8dc5f97d34c27b19199b6414a40cb36b52f41b79014be", size = 329361, upload-time = "2025-06-10T00:45:10.11Z" }, + { url = "https://files.pythonhosted.org/packages/93/8f/b811b9d1f617c83c907e7082a76e2b92b655400e61730cd61a1f67178393/yarl-1.20.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:67e708dfb8e78d8a19169818eeb5c7a80717562de9051bf2413aca8e3696bf16", size = 346460, upload-time = "2025-06-10T00:45:12.055Z" }, + { url = "https://files.pythonhosted.org/packages/70/fd/af94f04f275f95da2c3b8b5e1d49e3e79f1ed8b6ceb0f1664cbd902773ff/yarl-1.20.1-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:595c07bc79af2494365cc96ddeb772f76272364ef7c80fb892ef9d0649586513", size = 334486, upload-time = "2025-06-10T00:45:13.995Z" }, + { url = "https://files.pythonhosted.org/packages/84/65/04c62e82704e7dd0a9b3f61dbaa8447f8507655fd16c51da0637b39b2910/yarl-1.20.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:7bdd2f80f4a7df852ab9ab49484a4dee8030023aa536df41f2d922fd57bf023f", size = 342219, upload-time = "2025-06-10T00:45:16.479Z" }, + { url = "https://files.pythonhosted.org/packages/91/95/459ca62eb958381b342d94ab9a4b6aec1ddec1f7057c487e926f03c06d30/yarl-1.20.1-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:c03bfebc4ae8d862f853a9757199677ab74ec25424d0ebd68a0027e9c639a390", size = 350693, upload-time = "2025-06-10T00:45:18.399Z" }, + { url = "https://files.pythonhosted.org/packages/a6/00/d393e82dd955ad20617abc546a8f1aee40534d599ff555ea053d0ec9bf03/yarl-1.20.1-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:344d1103e9c1523f32a5ed704d576172d2cabed3122ea90b1d4e11fe17c66458", size = 355803, upload-time = "2025-06-10T00:45:20.677Z" }, + { url = "https://files.pythonhosted.org/packages/9e/ed/c5fb04869b99b717985e244fd93029c7a8e8febdfcffa06093e32d7d44e7/yarl-1.20.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:88cab98aa4e13e1ade8c141daeedd300a4603b7132819c484841bb7af3edce9e", size = 341709, upload-time = "2025-06-10T00:45:23.221Z" }, + { url = "https://files.pythonhosted.org/packages/24/fd/725b8e73ac2a50e78a4534ac43c6addf5c1c2d65380dd48a9169cc6739a9/yarl-1.20.1-cp313-cp313t-win32.whl", hash = "sha256:b121ff6a7cbd4abc28985b6028235491941b9fe8fe226e6fdc539c977ea1739d", size = 86591, upload-time = "2025-06-10T00:45:25.793Z" }, + { url = "https://files.pythonhosted.org/packages/94/c3/b2e9f38bc3e11191981d57ea08cab2166e74ea770024a646617c9cddd9f6/yarl-1.20.1-cp313-cp313t-win_amd64.whl", hash = "sha256:541d050a355bbbc27e55d906bc91cb6fe42f96c01413dd0f4ed5a5240513874f", size = 93003, upload-time = "2025-06-10T00:45:27.752Z" }, + { url = "https://files.pythonhosted.org/packages/b4/2d/2345fce04cfd4bee161bf1e7d9cdc702e3e16109021035dbb24db654a622/yarl-1.20.1-py3-none-any.whl", hash = "sha256:83b8eb083fe4683c6115795d9fc1cfaf2cbbefb19b3a1cb68f6527460f483a77", size = 46542, upload-time = "2025-06-10T00:46:07.521Z" }, +] + +[[package]] +name = "zarr" +source = { editable = "." } +dependencies = [ + { name = "donfig" }, + { name = "numcodecs", extra = ["crc32c"] }, + { name = "numpy" }, + { name = "packaging" }, + { name = "typing-extensions" }, +] + +[package.optional-dependencies] +docs = [ + { name = "astroid" }, + { name = "numcodecs", extra = ["msgpack"] }, + { name = "numpydoc" }, + { name = "pydata-sphinx-theme" }, + { name = "pytest" }, + { name = "rich" }, + { name = "s3fs" }, + { name = "sphinx" }, + { name = "sphinx-autoapi" }, + { name = "sphinx-autobuild" }, + { name = "sphinx-copybutton" }, + { name = "sphinx-design" }, + { name = "sphinx-issues" }, + { name = "sphinx-reredirects" }, + { name = "towncrier" }, +] +gpu = [ + { name = "cupy-cuda12x" }, +] +optional = [ + { name = "rich" }, + { name = "universal-pathlib" }, +] +remote = [ + { name = "fsspec" }, + { name = "obstore" }, +] +remote-tests = [ + { name = "botocore" }, + { name = "fsspec" }, + { name = "moto", extra = ["s3", "server"] }, + { name = "obstore" }, + { name = "requests" }, + { name = "s3fs" }, +] +test = [ + { name = "coverage" }, + { name = "hypothesis" }, + { name = "mypy" }, + { name = "packaging" }, + { name = "pytest" }, + { name = "pytest-accept" }, + { name = "pytest-asyncio" }, + { name = "pytest-cov" }, + { name = "pytest-xdist" }, + { name = "rich" }, + { name = "tomlkit" }, + { name = "uv" }, +] + +[package.dev-dependencies] +dev = [ + { name = "ipykernel" }, + { name = "pip" }, +] + +[package.metadata] +requires-dist = [ + { name = "astroid", marker = "extra == 'docs'", specifier = "<4" }, + { name = "botocore", marker = "extra == 'remote-tests'" }, + { name = "coverage", marker = "extra == 'test'", specifier = ">=7.10" }, + { name = "cupy-cuda12x", marker = "extra == 'gpu'" }, + { name = "donfig", specifier = ">=0.8" }, + { name = "fsspec", marker = "extra == 'remote'", specifier = ">=2023.10.0" }, + { name = "fsspec", marker = "extra == 'remote-tests'", specifier = ">=2023.10.0" }, + { name = "hypothesis", marker = "extra == 'test'" }, + { name = "moto", extras = ["s3", "server"], marker = "extra == 'remote-tests'" }, + { name = "mypy", marker = "extra == 'test'" }, + { name = "numcodecs", extras = ["crc32c"], specifier = ">=0.14" }, + { name = "numcodecs", extras = ["msgpack"], marker = "extra == 'docs'" }, + { name = "numpy", specifier = ">=1.26" }, + { name = "numpydoc", marker = "extra == 'docs'" }, + { name = "obstore", marker = "extra == 'remote'", specifier = ">=0.5.1" }, + { name = "obstore", marker = "extra == 'remote-tests'", specifier = ">=0.5.1" }, + { name = "packaging", specifier = ">=22.0" }, + { name = "packaging", marker = "extra == 'test'" }, + { name = "pydata-sphinx-theme", marker = "extra == 'docs'" }, + { name = "pytest", marker = "extra == 'docs'" }, + { name = "pytest", marker = "extra == 'test'", specifier = "<8.4" }, + { name = "pytest-accept", marker = "extra == 'test'" }, + { name = "pytest-asyncio", marker = "extra == 'test'" }, + { name = "pytest-cov", marker = "extra == 'test'" }, + { name = "pytest-xdist", marker = "extra == 'test'" }, + { name = "requests", marker = "extra == 'remote-tests'" }, + { name = "rich", marker = "extra == 'docs'" }, + { name = "rich", marker = "extra == 'optional'" }, + { name = "rich", marker = "extra == 'test'" }, + { name = "s3fs", marker = "extra == 'docs'", specifier = ">=2023.10.0" }, + { name = "s3fs", marker = "extra == 'remote-tests'", specifier = ">=2023.10.0" }, + { name = "sphinx", marker = "extra == 'docs'", specifier = "==8.1.3" }, + { name = "sphinx-autoapi", marker = "extra == 'docs'", specifier = "==3.4.0" }, + { name = "sphinx-autobuild", marker = "extra == 'docs'", specifier = ">=2021.3.14" }, + { name = "sphinx-copybutton", marker = "extra == 'docs'" }, + { name = "sphinx-design", marker = "extra == 'docs'" }, + { name = "sphinx-issues", marker = "extra == 'docs'" }, + { name = "sphinx-reredirects", marker = "extra == 'docs'" }, + { name = "tomlkit", marker = "extra == 'test'" }, + { name = "towncrier", marker = "extra == 'docs'" }, + { name = "typing-extensions", specifier = ">=4.9" }, + { name = "universal-pathlib", marker = "extra == 'optional'" }, + { name = "uv", marker = "extra == 'test'" }, +] +provides-extras = ["docs", "gpu", "optional", "remote", "remote-tests", "test"] + +[package.metadata.requires-dev] +dev = [ + { name = "ipykernel", specifier = ">=6.29.5" }, + { name = "pip", specifier = ">=25.0.1" }, +] From 95353d96c3aa8f58a4b6c2868dc106ecc266a1d8 Mon Sep 17 00:00:00 2001 From: ruaridhg Date: Mon, 15 Sep 2025 15:15:37 +0100 Subject: [PATCH 35/39] Delete test files --- benchmark.zarr/c/0/0 | Bin 810 -> 0 bytes benchmark.zarr/c/0/1 | Bin 810 -> 0 bytes benchmark.zarr/c/0/2 | Bin 810 -> 0 bytes benchmark.zarr/c/0/3 | Bin 810 -> 0 bytes benchmark.zarr/c/0/4 | Bin 810 -> 0 bytes benchmark.zarr/c/0/5 | Bin 810 -> 0 bytes benchmark.zarr/c/0/6 | Bin 810 -> 0 bytes benchmark.zarr/c/0/7 | Bin 810 -> 0 bytes benchmark.zarr/c/0/8 | Bin 810 -> 0 bytes benchmark.zarr/c/0/9 | Bin 810 -> 0 bytes benchmark.zarr/c/1/0 | Bin 810 -> 0 bytes benchmark.zarr/c/1/1 | Bin 810 -> 0 bytes benchmark.zarr/c/1/2 | Bin 810 -> 0 bytes benchmark.zarr/c/1/3 | Bin 810 -> 0 bytes benchmark.zarr/c/1/4 | Bin 810 -> 0 bytes benchmark.zarr/c/1/5 | Bin 810 -> 0 bytes benchmark.zarr/c/1/6 | Bin 810 -> 0 bytes benchmark.zarr/c/1/7 | Bin 810 -> 0 bytes benchmark.zarr/c/1/8 | Bin 810 -> 0 bytes benchmark.zarr/c/1/9 | Bin 810 -> 0 bytes benchmark.zarr/c/2/0 | Bin 810 -> 0 bytes benchmark.zarr/c/2/1 | Bin 810 -> 0 bytes benchmark.zarr/c/2/2 | Bin 810 -> 0 bytes benchmark.zarr/c/2/3 | Bin 810 -> 0 bytes benchmark.zarr/c/2/4 | Bin 810 -> 0 bytes benchmark.zarr/c/2/5 | Bin 810 -> 0 bytes benchmark.zarr/c/2/6 | Bin 810 -> 0 bytes benchmark.zarr/c/2/7 | Bin 810 -> 0 bytes benchmark.zarr/c/2/8 | Bin 810 -> 0 bytes benchmark.zarr/c/2/9 | Bin 810 -> 0 bytes benchmark.zarr/c/3/0 | Bin 810 -> 0 bytes benchmark.zarr/c/3/1 | Bin 810 -> 0 bytes benchmark.zarr/c/3/2 | Bin 810 -> 0 bytes benchmark.zarr/c/3/3 | Bin 810 -> 0 bytes benchmark.zarr/c/3/4 | Bin 810 -> 0 bytes benchmark.zarr/c/3/5 | Bin 810 -> 0 bytes benchmark.zarr/c/3/6 | Bin 810 -> 0 bytes benchmark.zarr/c/3/7 | Bin 810 -> 0 bytes benchmark.zarr/c/3/8 | Bin 810 -> 0 bytes benchmark.zarr/c/3/9 | Bin 810 -> 0 bytes benchmark.zarr/c/4/0 | Bin 810 -> 0 bytes benchmark.zarr/c/4/1 | Bin 810 -> 0 bytes benchmark.zarr/c/4/2 | Bin 810 -> 0 bytes benchmark.zarr/c/4/3 | Bin 810 -> 0 bytes benchmark.zarr/c/4/4 | Bin 810 -> 0 bytes benchmark.zarr/c/4/5 | Bin 810 -> 0 bytes benchmark.zarr/c/4/6 | Bin 810 -> 0 bytes benchmark.zarr/c/4/7 | Bin 810 -> 0 bytes benchmark.zarr/c/4/8 | Bin 810 -> 0 bytes benchmark.zarr/c/4/9 | Bin 810 -> 0 bytes benchmark.zarr/c/5/0 | Bin 810 -> 0 bytes benchmark.zarr/c/5/1 | Bin 810 -> 0 bytes benchmark.zarr/c/5/2 | Bin 810 -> 0 bytes benchmark.zarr/c/5/3 | Bin 810 -> 0 bytes benchmark.zarr/c/5/4 | Bin 810 -> 0 bytes benchmark.zarr/c/5/5 | Bin 810 -> 0 bytes benchmark.zarr/c/5/6 | Bin 810 -> 0 bytes benchmark.zarr/c/5/7 | Bin 810 -> 0 bytes benchmark.zarr/c/5/8 | Bin 810 -> 0 bytes benchmark.zarr/c/5/9 | Bin 810 -> 0 bytes benchmark.zarr/c/6/0 | Bin 810 -> 0 bytes benchmark.zarr/c/6/1 | Bin 810 -> 0 bytes benchmark.zarr/c/6/2 | Bin 810 -> 0 bytes benchmark.zarr/c/6/3 | Bin 810 -> 0 bytes benchmark.zarr/c/6/4 | Bin 810 -> 0 bytes benchmark.zarr/c/6/5 | Bin 810 -> 0 bytes benchmark.zarr/c/6/6 | Bin 810 -> 0 bytes benchmark.zarr/c/6/7 | Bin 810 -> 0 bytes benchmark.zarr/c/6/8 | Bin 810 -> 0 bytes benchmark.zarr/c/6/9 | Bin 810 -> 0 bytes benchmark.zarr/c/7/0 | Bin 810 -> 0 bytes benchmark.zarr/c/7/1 | Bin 810 -> 0 bytes benchmark.zarr/c/7/2 | Bin 810 -> 0 bytes benchmark.zarr/c/7/3 | Bin 810 -> 0 bytes benchmark.zarr/c/7/4 | Bin 810 -> 0 bytes benchmark.zarr/c/7/5 | Bin 810 -> 0 bytes benchmark.zarr/c/7/6 | Bin 810 -> 0 bytes benchmark.zarr/c/7/7 | Bin 810 -> 0 bytes benchmark.zarr/c/7/8 | Bin 810 -> 0 bytes benchmark.zarr/c/7/9 | Bin 810 -> 0 bytes benchmark.zarr/c/8/0 | Bin 810 -> 0 bytes benchmark.zarr/c/8/1 | Bin 810 -> 0 bytes benchmark.zarr/c/8/2 | Bin 810 -> 0 bytes benchmark.zarr/c/8/3 | Bin 810 -> 0 bytes benchmark.zarr/c/8/4 | Bin 810 -> 0 bytes benchmark.zarr/c/8/5 | Bin 810 -> 0 bytes benchmark.zarr/c/8/6 | Bin 810 -> 0 bytes benchmark.zarr/c/8/7 | Bin 810 -> 0 bytes benchmark.zarr/c/8/8 | Bin 810 -> 0 bytes benchmark.zarr/c/8/9 | Bin 810 -> 0 bytes benchmark.zarr/c/9/0 | Bin 810 -> 0 bytes benchmark.zarr/c/9/1 | Bin 810 -> 0 bytes benchmark.zarr/c/9/2 | Bin 810 -> 0 bytes benchmark.zarr/c/9/3 | Bin 810 -> 0 bytes benchmark.zarr/c/9/4 | Bin 810 -> 0 bytes benchmark.zarr/c/9/5 | Bin 810 -> 0 bytes benchmark.zarr/c/9/6 | Bin 810 -> 0 bytes benchmark.zarr/c/9/7 | Bin 810 -> 0 bytes benchmark.zarr/c/9/8 | Bin 810 -> 0 bytes benchmark.zarr/c/9/9 | Bin 810 -> 0 bytes benchmark.zarr/zarr.json | 42 --------------------------------------- test.zarr/c/0/0 | Bin 810 -> 0 bytes test.zarr/c/0/1 | Bin 810 -> 0 bytes test.zarr/c/0/2 | Bin 810 -> 0 bytes test.zarr/c/0/3 | Bin 810 -> 0 bytes test.zarr/c/0/4 | Bin 810 -> 0 bytes test.zarr/c/0/5 | Bin 810 -> 0 bytes test.zarr/c/0/6 | Bin 810 -> 0 bytes test.zarr/c/0/7 | Bin 810 -> 0 bytes test.zarr/c/0/8 | Bin 810 -> 0 bytes test.zarr/c/0/9 | Bin 810 -> 0 bytes test.zarr/c/1/0 | Bin 810 -> 0 bytes test.zarr/c/1/1 | Bin 810 -> 0 bytes test.zarr/c/1/2 | Bin 810 -> 0 bytes test.zarr/c/1/3 | Bin 810 -> 0 bytes test.zarr/c/1/4 | Bin 810 -> 0 bytes test.zarr/c/1/5 | Bin 810 -> 0 bytes test.zarr/c/1/6 | Bin 810 -> 0 bytes test.zarr/c/1/7 | Bin 810 -> 0 bytes test.zarr/c/1/8 | Bin 810 -> 0 bytes test.zarr/c/1/9 | Bin 810 -> 0 bytes test.zarr/c/2/0 | Bin 810 -> 0 bytes test.zarr/c/2/1 | Bin 810 -> 0 bytes test.zarr/c/2/2 | Bin 810 -> 0 bytes test.zarr/c/2/3 | Bin 810 -> 0 bytes test.zarr/c/2/4 | Bin 810 -> 0 bytes test.zarr/c/2/5 | Bin 810 -> 0 bytes test.zarr/c/2/6 | Bin 810 -> 0 bytes test.zarr/c/2/7 | Bin 810 -> 0 bytes test.zarr/c/2/8 | Bin 810 -> 0 bytes test.zarr/c/2/9 | Bin 810 -> 0 bytes test.zarr/c/3/0 | Bin 810 -> 0 bytes test.zarr/c/3/1 | Bin 810 -> 0 bytes test.zarr/c/3/2 | Bin 810 -> 0 bytes test.zarr/c/3/3 | Bin 810 -> 0 bytes test.zarr/c/3/4 | Bin 810 -> 0 bytes test.zarr/c/3/5 | Bin 810 -> 0 bytes test.zarr/c/3/6 | Bin 810 -> 0 bytes test.zarr/c/3/7 | Bin 810 -> 0 bytes test.zarr/c/3/8 | Bin 810 -> 0 bytes test.zarr/c/3/9 | Bin 810 -> 0 bytes test.zarr/c/4/0 | Bin 810 -> 0 bytes test.zarr/c/4/1 | Bin 810 -> 0 bytes test.zarr/c/4/2 | Bin 810 -> 0 bytes test.zarr/c/4/3 | Bin 810 -> 0 bytes test.zarr/c/4/4 | Bin 810 -> 0 bytes test.zarr/c/4/5 | Bin 810 -> 0 bytes test.zarr/c/4/6 | Bin 810 -> 0 bytes test.zarr/c/4/7 | Bin 810 -> 0 bytes test.zarr/c/4/8 | Bin 810 -> 0 bytes test.zarr/c/4/9 | Bin 810 -> 0 bytes test.zarr/c/5/0 | Bin 810 -> 0 bytes test.zarr/c/5/1 | Bin 810 -> 0 bytes test.zarr/c/5/2 | Bin 810 -> 0 bytes test.zarr/c/5/3 | Bin 810 -> 0 bytes test.zarr/c/5/4 | Bin 810 -> 0 bytes test.zarr/c/5/5 | Bin 810 -> 0 bytes test.zarr/c/5/6 | Bin 810 -> 0 bytes test.zarr/c/5/7 | Bin 810 -> 0 bytes test.zarr/c/5/8 | Bin 810 -> 0 bytes test.zarr/c/5/9 | Bin 810 -> 0 bytes test.zarr/c/6/0 | Bin 810 -> 0 bytes test.zarr/c/6/1 | Bin 810 -> 0 bytes test.zarr/c/6/2 | Bin 810 -> 0 bytes test.zarr/c/6/3 | Bin 810 -> 0 bytes test.zarr/c/6/4 | Bin 810 -> 0 bytes test.zarr/c/6/5 | Bin 810 -> 0 bytes test.zarr/c/6/6 | Bin 810 -> 0 bytes test.zarr/c/6/7 | Bin 810 -> 0 bytes test.zarr/c/6/8 | Bin 810 -> 0 bytes test.zarr/c/6/9 | Bin 810 -> 0 bytes test.zarr/c/7/0 | Bin 810 -> 0 bytes test.zarr/c/7/1 | Bin 810 -> 0 bytes test.zarr/c/7/2 | Bin 810 -> 0 bytes test.zarr/c/7/3 | Bin 810 -> 0 bytes test.zarr/c/7/4 | Bin 810 -> 0 bytes test.zarr/c/7/5 | Bin 810 -> 0 bytes test.zarr/c/7/6 | Bin 810 -> 0 bytes test.zarr/c/7/7 | Bin 810 -> 0 bytes test.zarr/c/7/8 | Bin 810 -> 0 bytes test.zarr/c/7/9 | Bin 810 -> 0 bytes test.zarr/c/8/0 | Bin 810 -> 0 bytes test.zarr/c/8/1 | Bin 810 -> 0 bytes test.zarr/c/8/2 | Bin 810 -> 0 bytes test.zarr/c/8/3 | Bin 810 -> 0 bytes test.zarr/c/8/4 | Bin 810 -> 0 bytes test.zarr/c/8/5 | Bin 810 -> 0 bytes test.zarr/c/8/6 | Bin 810 -> 0 bytes test.zarr/c/8/7 | Bin 810 -> 0 bytes test.zarr/c/8/8 | Bin 810 -> 0 bytes test.zarr/c/8/9 | Bin 810 -> 0 bytes test.zarr/c/9/0 | Bin 810 -> 0 bytes test.zarr/c/9/1 | Bin 810 -> 0 bytes test.zarr/c/9/2 | Bin 810 -> 0 bytes test.zarr/c/9/3 | Bin 810 -> 0 bytes test.zarr/c/9/4 | Bin 810 -> 0 bytes test.zarr/c/9/5 | Bin 810 -> 0 bytes test.zarr/c/9/6 | Bin 810 -> 0 bytes test.zarr/c/9/7 | Bin 810 -> 0 bytes test.zarr/c/9/8 | Bin 810 -> 0 bytes test.zarr/c/9/9 | Bin 810 -> 0 bytes test.zarr/zarr.json | 42 --------------------------------------- 202 files changed, 84 deletions(-) delete mode 100644 benchmark.zarr/c/0/0 delete mode 100644 benchmark.zarr/c/0/1 delete mode 100644 benchmark.zarr/c/0/2 delete mode 100644 benchmark.zarr/c/0/3 delete mode 100644 benchmark.zarr/c/0/4 delete mode 100644 benchmark.zarr/c/0/5 delete mode 100644 benchmark.zarr/c/0/6 delete mode 100644 benchmark.zarr/c/0/7 delete mode 100644 benchmark.zarr/c/0/8 delete mode 100644 benchmark.zarr/c/0/9 delete mode 100644 benchmark.zarr/c/1/0 delete mode 100644 benchmark.zarr/c/1/1 delete mode 100644 benchmark.zarr/c/1/2 delete mode 100644 benchmark.zarr/c/1/3 delete mode 100644 benchmark.zarr/c/1/4 delete mode 100644 benchmark.zarr/c/1/5 delete mode 100644 benchmark.zarr/c/1/6 delete mode 100644 benchmark.zarr/c/1/7 delete mode 100644 benchmark.zarr/c/1/8 delete mode 100644 benchmark.zarr/c/1/9 delete mode 100644 benchmark.zarr/c/2/0 delete mode 100644 benchmark.zarr/c/2/1 delete mode 100644 benchmark.zarr/c/2/2 delete mode 100644 benchmark.zarr/c/2/3 delete mode 100644 benchmark.zarr/c/2/4 delete mode 100644 benchmark.zarr/c/2/5 delete mode 100644 benchmark.zarr/c/2/6 delete mode 100644 benchmark.zarr/c/2/7 delete mode 100644 benchmark.zarr/c/2/8 delete mode 100644 benchmark.zarr/c/2/9 delete mode 100644 benchmark.zarr/c/3/0 delete mode 100644 benchmark.zarr/c/3/1 delete mode 100644 benchmark.zarr/c/3/2 delete mode 100644 benchmark.zarr/c/3/3 delete mode 100644 benchmark.zarr/c/3/4 delete mode 100644 benchmark.zarr/c/3/5 delete mode 100644 benchmark.zarr/c/3/6 delete mode 100644 benchmark.zarr/c/3/7 delete mode 100644 benchmark.zarr/c/3/8 delete mode 100644 benchmark.zarr/c/3/9 delete mode 100644 benchmark.zarr/c/4/0 delete mode 100644 benchmark.zarr/c/4/1 delete mode 100644 benchmark.zarr/c/4/2 delete mode 100644 benchmark.zarr/c/4/3 delete mode 100644 benchmark.zarr/c/4/4 delete mode 100644 benchmark.zarr/c/4/5 delete mode 100644 benchmark.zarr/c/4/6 delete mode 100644 benchmark.zarr/c/4/7 delete mode 100644 benchmark.zarr/c/4/8 delete mode 100644 benchmark.zarr/c/4/9 delete mode 100644 benchmark.zarr/c/5/0 delete mode 100644 benchmark.zarr/c/5/1 delete mode 100644 benchmark.zarr/c/5/2 delete mode 100644 benchmark.zarr/c/5/3 delete mode 100644 benchmark.zarr/c/5/4 delete mode 100644 benchmark.zarr/c/5/5 delete mode 100644 benchmark.zarr/c/5/6 delete mode 100644 benchmark.zarr/c/5/7 delete mode 100644 benchmark.zarr/c/5/8 delete mode 100644 benchmark.zarr/c/5/9 delete mode 100644 benchmark.zarr/c/6/0 delete mode 100644 benchmark.zarr/c/6/1 delete mode 100644 benchmark.zarr/c/6/2 delete mode 100644 benchmark.zarr/c/6/3 delete mode 100644 benchmark.zarr/c/6/4 delete mode 100644 benchmark.zarr/c/6/5 delete mode 100644 benchmark.zarr/c/6/6 delete mode 100644 benchmark.zarr/c/6/7 delete mode 100644 benchmark.zarr/c/6/8 delete mode 100644 benchmark.zarr/c/6/9 delete mode 100644 benchmark.zarr/c/7/0 delete mode 100644 benchmark.zarr/c/7/1 delete mode 100644 benchmark.zarr/c/7/2 delete mode 100644 benchmark.zarr/c/7/3 delete mode 100644 benchmark.zarr/c/7/4 delete mode 100644 benchmark.zarr/c/7/5 delete mode 100644 benchmark.zarr/c/7/6 delete mode 100644 benchmark.zarr/c/7/7 delete mode 100644 benchmark.zarr/c/7/8 delete mode 100644 benchmark.zarr/c/7/9 delete mode 100644 benchmark.zarr/c/8/0 delete mode 100644 benchmark.zarr/c/8/1 delete mode 100644 benchmark.zarr/c/8/2 delete mode 100644 benchmark.zarr/c/8/3 delete mode 100644 benchmark.zarr/c/8/4 delete mode 100644 benchmark.zarr/c/8/5 delete mode 100644 benchmark.zarr/c/8/6 delete mode 100644 benchmark.zarr/c/8/7 delete mode 100644 benchmark.zarr/c/8/8 delete mode 100644 benchmark.zarr/c/8/9 delete mode 100644 benchmark.zarr/c/9/0 delete mode 100644 benchmark.zarr/c/9/1 delete mode 100644 benchmark.zarr/c/9/2 delete mode 100644 benchmark.zarr/c/9/3 delete mode 100644 benchmark.zarr/c/9/4 delete mode 100644 benchmark.zarr/c/9/5 delete mode 100644 benchmark.zarr/c/9/6 delete mode 100644 benchmark.zarr/c/9/7 delete mode 100644 benchmark.zarr/c/9/8 delete mode 100644 benchmark.zarr/c/9/9 delete mode 100644 benchmark.zarr/zarr.json delete mode 100644 test.zarr/c/0/0 delete mode 100644 test.zarr/c/0/1 delete mode 100644 test.zarr/c/0/2 delete mode 100644 test.zarr/c/0/3 delete mode 100644 test.zarr/c/0/4 delete mode 100644 test.zarr/c/0/5 delete mode 100644 test.zarr/c/0/6 delete mode 100644 test.zarr/c/0/7 delete mode 100644 test.zarr/c/0/8 delete mode 100644 test.zarr/c/0/9 delete mode 100644 test.zarr/c/1/0 delete mode 100644 test.zarr/c/1/1 delete mode 100644 test.zarr/c/1/2 delete mode 100644 test.zarr/c/1/3 delete mode 100644 test.zarr/c/1/4 delete mode 100644 test.zarr/c/1/5 delete mode 100644 test.zarr/c/1/6 delete mode 100644 test.zarr/c/1/7 delete mode 100644 test.zarr/c/1/8 delete mode 100644 test.zarr/c/1/9 delete mode 100644 test.zarr/c/2/0 delete mode 100644 test.zarr/c/2/1 delete mode 100644 test.zarr/c/2/2 delete mode 100644 test.zarr/c/2/3 delete mode 100644 test.zarr/c/2/4 delete mode 100644 test.zarr/c/2/5 delete mode 100644 test.zarr/c/2/6 delete mode 100644 test.zarr/c/2/7 delete mode 100644 test.zarr/c/2/8 delete mode 100644 test.zarr/c/2/9 delete mode 100644 test.zarr/c/3/0 delete mode 100644 test.zarr/c/3/1 delete mode 100644 test.zarr/c/3/2 delete mode 100644 test.zarr/c/3/3 delete mode 100644 test.zarr/c/3/4 delete mode 100644 test.zarr/c/3/5 delete mode 100644 test.zarr/c/3/6 delete mode 100644 test.zarr/c/3/7 delete mode 100644 test.zarr/c/3/8 delete mode 100644 test.zarr/c/3/9 delete mode 100644 test.zarr/c/4/0 delete mode 100644 test.zarr/c/4/1 delete mode 100644 test.zarr/c/4/2 delete mode 100644 test.zarr/c/4/3 delete mode 100644 test.zarr/c/4/4 delete mode 100644 test.zarr/c/4/5 delete mode 100644 test.zarr/c/4/6 delete mode 100644 test.zarr/c/4/7 delete mode 100644 test.zarr/c/4/8 delete mode 100644 test.zarr/c/4/9 delete mode 100644 test.zarr/c/5/0 delete mode 100644 test.zarr/c/5/1 delete mode 100644 test.zarr/c/5/2 delete mode 100644 test.zarr/c/5/3 delete mode 100644 test.zarr/c/5/4 delete mode 100644 test.zarr/c/5/5 delete mode 100644 test.zarr/c/5/6 delete mode 100644 test.zarr/c/5/7 delete mode 100644 test.zarr/c/5/8 delete mode 100644 test.zarr/c/5/9 delete mode 100644 test.zarr/c/6/0 delete mode 100644 test.zarr/c/6/1 delete mode 100644 test.zarr/c/6/2 delete mode 100644 test.zarr/c/6/3 delete mode 100644 test.zarr/c/6/4 delete mode 100644 test.zarr/c/6/5 delete mode 100644 test.zarr/c/6/6 delete mode 100644 test.zarr/c/6/7 delete mode 100644 test.zarr/c/6/8 delete mode 100644 test.zarr/c/6/9 delete mode 100644 test.zarr/c/7/0 delete mode 100644 test.zarr/c/7/1 delete mode 100644 test.zarr/c/7/2 delete mode 100644 test.zarr/c/7/3 delete mode 100644 test.zarr/c/7/4 delete mode 100644 test.zarr/c/7/5 delete mode 100644 test.zarr/c/7/6 delete mode 100644 test.zarr/c/7/7 delete mode 100644 test.zarr/c/7/8 delete mode 100644 test.zarr/c/7/9 delete mode 100644 test.zarr/c/8/0 delete mode 100644 test.zarr/c/8/1 delete mode 100644 test.zarr/c/8/2 delete mode 100644 test.zarr/c/8/3 delete mode 100644 test.zarr/c/8/4 delete mode 100644 test.zarr/c/8/5 delete mode 100644 test.zarr/c/8/6 delete mode 100644 test.zarr/c/8/7 delete mode 100644 test.zarr/c/8/8 delete mode 100644 test.zarr/c/8/9 delete mode 100644 test.zarr/c/9/0 delete mode 100644 test.zarr/c/9/1 delete mode 100644 test.zarr/c/9/2 delete mode 100644 test.zarr/c/9/3 delete mode 100644 test.zarr/c/9/4 delete mode 100644 test.zarr/c/9/5 delete mode 100644 test.zarr/c/9/6 delete mode 100644 test.zarr/c/9/7 delete mode 100644 test.zarr/c/9/8 delete mode 100644 test.zarr/c/9/9 delete mode 100644 test.zarr/zarr.json diff --git a/benchmark.zarr/c/0/0 b/benchmark.zarr/c/0/0 deleted file mode 100644 index 44c2c3f9d814255711fef835f826ab387cb8bdbd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy03>|y6P8HCKNdOyoerDPKWQn?_>?E&Kf>$!<)>liKb=tA z>4?kgKgWZ1nnDxiKR9>h|2`P8KfbA0K^Z31KlsHTHNqzCKSEyiM1}w7KkD2atI& zF{4i0KS1sw>a*0`KhXbNWLPSrKZN11T=g93KQy?!v)Q}KKQgJAr(xFHKZMYAhLTa( zKORRpg(o`TKO0mxaGX)=KTPlY5LNWZKVKP1Xkd@%Kk;!r;VYrxKd)5H?9fExKR7_> z5H5wkKZZ-}C#IO)KhUvoEXZcKKYV(^Si5J$KNQ+>;ON}qKbGqN;?x=CKU3fOxIvfh zKg+rA{8!K9Kk7!h9aXB`KPIx-r*|^!KT@-X`Iz+IKP&9zHq905Kd@av`)`@6KeEx% z?~mKNupdGe4{DKf^ZH-Gkfj zKc$2_qyS0aKO~LjRleluKi;C6rCo9AKiX3w^D5%yKUXgfc?22mKXyc&L4BIyKU&$~ z8!GqQKR-1A4-W?IKfrsboVj$XKhR#Ig08jFKS#v<$HzY7KfbsTzy!kKKPr=z;dQ&$ zKV!0+B;h#eKi8(%4vKM9K!WCaE4KS4V{*|7xVKP)OAKmdZ-KY-nd+An#0KLugD zT{R=(KNM-2m^z@tKTBLu%2uT4KLC>UoZRGyKai`K`Ki*#KLD0jUdiE^Kg-C&k}1sP zKPdghJLvk^KOfuQu;%*eKc57JLxB|LKm0Bgr#(p7KPG-pv;{EHKM+l+BKczLKLch( oE9L>?Kju6FF7mzQKjjDS4O!ynKLFqq{?zd1Kg38$Cj^J(KU!X(djJ3c diff --git a/benchmark.zarr/c/0/1 b/benchmark.zarr/c/0/1 deleted file mode 100644 index cbbbea7617682dcdcde3eceaf441df553acf547e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy0Ms7-fZXKeKP5FA)PSqwKV;!&v6#@{KLNFxrd7A@KhhPe zX9`B#KS22Mf&GixKT;kTgnY@?KX~NqSxZd6KMn;mHRpQYKUFp@iA_S|KLGRaLZ9!H zKWLd+FUqUMKTPu->H!qQKbU4Y4b;KNKXlrZ6apvKKS=kCVp;X-KNdC60YeGYKUXaL z#YLa#KhgdB>Li@Kio+y!^|V?KNxH` zEAb!2KS*lz!sU|aKUCJ>AF&$fKY-rcPZJ(;KQ1iXM#K-&KfzlL54V!xKN_a{3MfO> zKZr!0Hb)`jKYBCu4`~P9KYaNZI1^3MKd8`l*eo2-KgK?NxZEb=KWL~ycNRtIKRS|f zW9vBPKZqKKwZw_OKa_y#wbm@+Kj=Q2ianmuKk70vzOqZyKL}3$wkBWCKSb9leVd8b zKN$|h^T1)_KSb)s>-Yo6KPW8f@N&AoKSohLj(g(mKO*#Wkvl`}KTOt1+AO`oKcuaX zOao5lKM4FLBK0)iKbVi`0e$_uKYPVt*KafHKW05{2O#a*KXBi~#eVeLKN)RQ~KYC#(=C?c1KgpPD0}XWSKT~g>yc5yuKQnZeCIA2c diff --git a/benchmark.zarr/c/0/2 b/benchmark.zarr/c/0/2 deleted file mode 100644 index db1051c445ddfea06c32a23dfa8a0498722c1f1d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy0O|yk0A6j|Ka8+r0Oxe=Kb>}&{Jx6nKM96LW1x`fKQlso z<2=vrKaQChppe1WKOJjd14CEmKfEl!q>S3=Ka$BhL~*F;KLqacs)%{UKkV=;KeIH` zKf|y};zeQNKlr-|@ri5bKZ=rtcEl6sKimUUnf>X-KL_)?5K#}{KScJo$P{A8Kft2e zm$C+)KLkT_stMZGKkU2U&BD&lKNiQGSlN2%KR76X1z>i~KRz-O!{1cWKQ@#offobh zKluI?KGfRgKUVRrfSuOnKZ>7>`Q!8HKkTjnH^r>ZKdTm>7wDDlKiz>6)*C13KTgZP z)dStvKN#bJ8UM!IKctR_1KZ=?KXfur?M#HnKN9g;O4wc7Km6r8u3;h3KbC;bJ+h?X zKcw+*SAuBWKP2d03Akg!KhuC=GCe%+Ke3pWnNKj~KLMumlfTsBKTFxeJ*d;;KjES7 zH5(=9KNdh@InT=9KfY1|b8Uy|KkV5g$Mo^qKQOOjL{U50KSCr$gL?huKUTX(_kro{ zKe#Ej*nDH}Kb+{vZ=|o^Ka0IJRlG>!KT?pXQz>@nKkk3=C*o4vKOk28dCA$)KlJy< zCNGuPKkyAFE5bLTKVCglWBdK%KS~6nr;Iq!KVbY0SyIxGKWkef0Ox`1KZxV)rbTPs zKdm@jsVL9yKZ8JFgPK<4KVygFvFwZMKmMz6@$d}NKS?y20~vSeKQMl@OqQkQKiPwn zIWs-yKe(7!FH69~KSi=AQ;zcGKM;RQ0n$ppKfJ5uW>+rkKR1rFK$*VgKL`XP$`QTB zKVS~{po)2@Kkc^Z?Po;nKOQB)nq=ADKdemuZ}L9SKQZo*N+wI}KkG(ft{Vj9KjCVw zZC{J(KM0^*oC0UNKWoa}f5{l^KkH5*O05#bTcjEKcs*g20G2zKM)!KtK)RfKXJhhF?NpSKXraPFBy#EKV&KP oSeD$!KeqhyR>D@K~ z5C34?KRA7D9B_NPKMrAcs^fm+KZ-j1TYmrRKLvR6KYAaS^aRh=KgeI)ak=QwKPqX(5s3ZUKO9uAKkB(aYLNKpKj?Uiv80;SKhhG_%xw+fKW^hS(Ayf`KLp$x2uaM$KePv}x)na| zKlu}jp3Sf7KZr5im4Q^XKb*m8SFa4mKThg@k_*@0KN6#cuWi-uKU!*r#UsGvKfKfj z10)j1KNRO-4L9`JKWWSu`|Qf-Kd_SDBgg&2KdHS}E83djKkURQ8`f&yKay6ef9Q$Q zKSCl`)Hhw&KTy#93W77?KYZ-OEG2!{Ka2#PakTl&Kdnfv;6j|?KM<6QPaBHBKl~^( za%|1WKX7U*m$v5JKgg7kC!!tYKRnxlgaO~^KWY~b8*g*lKUmj(L2mf$KhkBU#X>97 zKY$7ds8*PyKglPGarg4*KVQ6y&)+)iKf2PoMIYASKfuXA0oekcKcIh?s_>=YKYXj@ zXKh@|-Z6u%Q zKWzY=QAU2`KmR4agGB1+KmOK9jU(*eKVbB_6Gt|=Kd8A-0^HooKad>EsLK!SKQ1mI oH8-;FKL)m&1c>40KmIgN&_F%pKQl8%dfPYQKVm}y24^VUKNo?M(EtDd diff --git a/benchmark.zarr/c/0/4 b/benchmark.zarr/c/0/4 deleted file mode 100644 index 3ec11a66979d2af428f562aae7081bd2d3fc41e3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy0Fv@iy}NqRKQM+-0dH`pKZY(-=~oQvKgjl>6uHH{KR|n~ zVUC~XKRD`#Z)Pp*KU|e~4$l9?KNP_-0CJ(;KQxyR7A6(kKgr($3s4T@KhqP8>&BSp zKhre4Est&EKeGp%Yhl~xKVWJ7IWGa!Kl+J(d0DyOKTgFv2rpvVKNhpvpBn()KX}gk z1UO%_KbB!h)%wuhKd9Ap-{rKsKb~6y_2)y>KR~`zG#?wOKj1t4GAV+(KRN>IFJLd{ zKfbYBKZh4q zBCPJ}KR}I6C>5rJKNz$5=qc{rKZO7Oi$RsoKg-0vI-dXNKbs^Yzc!QVKkj#e`+czK zKQ_nqR!(^1KN=byN12A|KL*3f+oKijKY$JZZ4&>DKdj&Eb|&D>KUkL4-z5IdKl!%N z#XT$OKWHPc{Js?BKS|;XX0|rvKg0-eL#zSKKMJiQH#k1+KXBNb)|YC>KVTEq9gt$~ zKmLk?v=GMVKk~@aIi*PHKc<`JV5&OQKi=qnJWG((KVYZj{d`-|KQu{CeJQNPKg+D+ zB-=9XKM6m)1z`o}KR^F6Q#}UgKayM2U@rFDKcX=V*v&ZRKXeu{#B}}9KNJG(T`wf; zKg2qF)(;idKh4m{t&!{KKXn)TG+`G zKNqSghZm9KKM;oVvFPpr{KQB{(;!_#tKQN-f ogzA*OKeXCE;D$KYKd5Yb%;yZ{KM?24mu&O7KVxj!P7>JTKWws*VE_OC diff --git a/benchmark.zarr/c/0/5 b/benchmark.zarr/c/0/5 deleted file mode 100644 index 88edc219c1d404dce85ae81d4343f7cac4d534e1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV~$3oz3G00-bn&D@n9deODXqf|q2)g=A0JLXhI4RyWU^frm2ap`nPqO91_o#+&) zq?)X5#(CjB?2*`|kF>hyiy&;9-#bem@9Lb7A*tQ(9U0?9X2+kA@yMu#kQ z+_@f^FP2u4|LO2};#QKVT8qM6diThhddL)qLnZ?{Kq4NCLLAsQnR|Udzr_m1Z*ql$ ziwuI;$y$$W1CF!?G#i5k5H_4x99_@}ZXh=!ZxGXB6 z0QprHr}lvs6;aoG9>ffwP?~r=sjC_^&H|SC1c8zyMsSEi1mn0pskqDlrzU-WthOH# zY0S_@u(x)3y2IR$5Po>dwc{C}K6JT|S)c|* zxG6h0@e^M1{_==dU+_rTQCFYZiEC#v$D%ZP%)Dq5iOasi#*Hr7v!Wg&O#l3RRX18^ zdsljTSy1-wiOfx80e48l=L@Y!n$mNwydMO8S)D-U*MgPu8S#(q41=Cb+o6gu!e?2U zw~Ox=94)^4)%iy&Xk&gvP=XbwcBNBw(K^@+jor6hYw#k^_Fb{gfH{)1{f<8>ajE6F zfi`7A@AB$$XR;FEd9&H}f7)PQ6fAEj9l+)J2THOhN5HM=p%+->ut{@!Usp@e?ipl@1XS|7TMvR!n!7C<*A64sa~jvq$QZ7a`zjb=n8_=apte+CXU?V;z~eiS8#t^UPR!~8B#Ugy?= zc@bp6=A}w-8gnyGFbNzy;~zA(L<&i2$6_}3Ej&~`Y1SG7u^z>EzG@UtGR}EXJ*41^ zHqL9m(FfA3wOy_(6LOAS^%IwWgSsuyz#Jb0iN%O%I$r{{FtmM|*LzH_3}Z|w3A|J# zXLXiZFk}?=@)nsv*+*yJ``m}c8%L^|e!hWbQc!9kBGq#8oVu`i^6pG@8 lBdZA)epXP`d6{rxDaQ17w3x7GW-0FXASL|w#Kjq-_z%l3mCyhH diff --git a/benchmark.zarr/c/0/6 b/benchmark.zarr/c/0/6 deleted file mode 100644 index 174dd9f1e2df214fa108298ff1ae461ed3c43b7a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy08m&WAXb9gKU`C1SEqWDiq zKZ%@EIzDmlKkWj@xs0*zKOQLG9MdK4KbXl#loj#rKgG$eB9J-nKfH8tvwfIKdez)v7J=YKf49mO?NBj zKisP-i<;EOKl~B;za7@+KY+xZ0%Ir9Kja#7%a|g@Kaw4e0@*CkKY}OotYnDMKjA=v zZkG4xKRj7%8G0)3KXd8nCVB1dKM&?0^sP7PKkx`EhTSc!KM48f5RJ^qKu9M{J zKMZ4~5Gd~KKQ0hvcTHC5KVToJ;9Q-*KY-=yztNO=KM({JVJfieKaU>wl9q?=KgO0% z@PNzcKUUaRr@#>4Km76LA`AEKKR@W@PxZF!KXV#(27}M!KN!NPQA8@kKlCzRdoC!@ zKWumFV4MZ(KghSC)_qpSKk(&HzupYYKb)E8jLM+rKQ9)= zKhC`0KNzu@3LW0VKl*%N@Wvd_KUt9Suj+^GKPUm3ENQT|KVbokgRej7KLj9h+4>#J zKVozI+k-LUKQyYvdQpSIKSWy8KUAbt+R*gUKlBc1Yy5`SKgx|UF5XAKWqo&g_AGVKRK*+O{`etKS&o^5-OwCKkx%)pf!W)KR1&u+FjP| zKde88HZ{QAKkUH4S8of_KcMH9uS4s>Ka^bXEtr~{k zKdzGG!s@N*KWNAbO|SIOKYXWXasUXyKdH=4x9^7LKU8-_$aGrXKQvqVE?UXiKX5W# zgzua0KWJGG_j4k+Kand`++D!oKLFs@MOt1iKVW7E62--rKMw+!7)C|!KaO1vM}(;E zKU*vEv*(NNKNPX1X&h3}Kg>1y_+G!mKM)96JX^KvKb(G7s_|6MKfqkf6os_cKSR}j z)g=SwKNxfk$~oN3KQn1&MEi~HKQ;WZE^5QzKVX5q0FdaLKhXI1wDpngKd1{eV}e(- zKaM+@$?eqGKiI)qN<`u6KRoGfY*F~qKL~@D(#`F>KLSV=lw38@KltLf7}Mv=KQdP3 zD81T_jKP}}LscstYKX?OJ{XO5!KcNP>St}jjKXK2Y9KT@b zKeTu!RKNwuKjd2T(l5WmKSe&+8iMQQKOiO3yH?G%KjTfcV60{8KN)z-Lb@yAKbX}3 z8VNq;KfwDnQ@2=_KLCt55`8jyKZwx>O16u}KdUWvV%^l|KXfT#d((~7KY)qVEoQCG zKMucCSbRd&KQPHE0W#azKg^o5J4W!@KeeTKI{hE+KlI?R46lFWKlHgJuT+!nKlor8 zW=hN5KOR**i<_O$Kk&)D#k+R8KVU3%gj(9{Klk&a*6G6GKZtBU)jHV9KkB_XGIcN4 zKY$~$d=vnrKYpNTDLi=ZKkO*cNCcMRKW47+1je1>KgA?@m7<2{KiyN|_?QRjKWv@Z osQS&@KZK>+=n4?jKitWf#wYRMKO9zgrrYf1KcEN?;|_Y6KUxu*H~;_u diff --git a/benchmark.zarr/c/0/8 b/benchmark.zarr/c/0/8 deleted file mode 100644 index 5871db141beb2c9867a4ec88be2ec594d989ff35..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV~$3sB1e00-cCT+yA{S#e83b2BM*2t|I0yWCpcqPkrjdg+d0A*BcAwGvL2Tox7U zwCWt1&}hPO7L8U-Yg;HF_LfS(9r@HG@|+J-3Q21+TiGY!>|k zNW3t?-9q_wLq2qeQia);RlC3ay?MRexO(5N5&ZmdhV(Go#Ipgs)7`)uszU|u}su0WEy2gQy z{hw#MQ{^BX+4!_}%S}XlD+yasd>-n#KK4|R18J>!8(3-^q#XA4#S6Oe%i5_fS!IK2 zMc2GVu6D58%IfQ?NAN5w^mApi0Uej(h-9H0W4d$}adHTw|1{=8l^k;@oQl%T10YSc zxD8(w!+l12)WZ6&uyfosvbwjhIQLB^w6)r2Rh-=keSn!XT(FTR=}FHAXbo~kh~+%6&8@wOtT|2Dl$O2 z*ACfq2>;Hn0Td=Rnpvezq-H3*z84vB*Lp#jKBY$*+s9b3%M57=Bax!i!M9ml#3MWL zO7BHp`|>Ns*vmwx{fzMRbJz86big~})X~@M5h$n?F0%`?C>AZ2gub>R=J~|2CiI{(8FZxQ|j@8X*Z diff --git a/benchmark.zarr/c/0/9 b/benchmark.zarr/c/0/9 deleted file mode 100644 index 32feca503e0ab9d292719103390168e4ad006747..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmWO3{WFsR00;2t?c_AcQE5L+WzkSqRGRwY^d<^5dQ;N` zks)NtO`rQqTTsQFc{B8l8a7G?f2EFuqUuw(l`tc&!`w%38Mdpyp+T7p1%;cfTYHqiGpyTzD#(N`BPi>TH@ z6EWSilivxk*hw;_up3E~sViP1$90kGuw^O%qOiQtPuhd~J$K0CDm@bG+Z1(b69!hZ zcty+1sMTLk+&TCPtw!1^;euXhI!Bv+1t?IE{L>PkYDRC&xSemb974PI(RA@wjBd(6 zrL_?y>fL-^G70}Pq16n2Keo|l6(ogek@?g!C^(Tq#m8fO!l4NdD`(DsvCjb3Tlc>q z2`yk|vkYY}Pw}Oz#W{x62HVgyr7WryMBajA&nz8UKbPIux`TiZ+q0SBNFvYc(OFeJ z30wP`E_(a_RpZi#tT-dW`bRx(FYW-hQEiD=N+ykMm0? zjCEe=4xHBw+M-5=cb^dQtE(%Qoz~&#=0A#%;4)}AFBI#eOW}58bU0Dkf$u4qLnD$R zT1{=J#Pd8eFHHj!Ec)~g3vT)rXx@^5B?gA|7cZO$oA_QPsg m)=MH*59Wpa&fzCWP^s-n(f|K0rO(dIpOC|LV_cC^rNKYT!JVZ5 diff --git a/benchmark.zarr/c/1/0 b/benchmark.zarr/c/1/0 deleted file mode 100644 index 38a708f06ed1cd6c404369de19e0ac7b2274e6a4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy01%oI)~98|KUiGg?+%gSKU$L&>*$j1KglHunnDrdKh#LU zQukERKXl|<^qU>fKfp5vyFkjXKX`uP0}}A%KfJhL=w+_fKlsm&Cl%+wKUCBA16>x` zKV=)vRmZjAKim_lYs$~bKc-rUmJw>)Kfqd%4yMl6KZuU5LK)-cKTs0T!bd!-KR{Lq z%DsS(Kb2g=IlnvRKU0qhiLyiOKaBO8?lIZHKcdZk&0|pJKlpe~+dt#FKVZP(_5U!L zKW=*74JCZ)KP|E9fPby-KjQSH^F+ArKOnMjnoSm*KUk$m)~%|wKiW#CAyG5uKL+Ga zsto(vKW1Fs;ehecKf%zA)=ebkKTW5lfg5|_KM+2q3w#8*KR_g3=jZ~sKh8Jl9xFrE zKL^d4!Dof&Kf{uWMo>8KKRBpTmRyF`Kk53C5CKZ+KQK^%f%b98KR_EkD%w<>Kife1 zp3-^mKd?qZ>JsU!Ka?V^dfW2nKRnXRt`BA2KO}J$T-}YtKXP(3Bty8|KUg@vs^kda zKU_ntYq@F1Kcw0%z6L$wKS$rfCu9_KYi=pD*OE5Kdk=S0|TDiKisLcqT=i3KYP=ucV!^zKiYTz0uaRO zKY&Q@gw*e*KVT*qTrqsRKTw8_@og~YKMKYxnh z7y4Q0KeR+2DqKgwolw>m%BKba6xg9X0oKlTf1z_>5lKj3R6KfMjF zKOhMV(rGoBKVs+txs(~@KXaZ{*a|)GKd4sCzgjTSKem|JEF*j0Ke#rUH_>$IKaAv4 zKhJy1KYE5@8&MAAKlNBCW${ zKLC*La@!kQKf3qL_13xQKOIT!K#FYUKjt$b0hArsKLQRptS9!?KU&DnYLn~kKYDWZ os~|_+KQC6};<6j(Ka!T~KOV@)gKP7zg351sIKj0U*tEc#>Kj;j9A6$>pKlK9%wskY)KkQoK778Q8KUb!b z$|>gQKOD4?4Q^dKN#@d2?m1hKc%>!E!UCYKO*ndhqvO@KZYS*3)6G! zKLQ~IK8I$}KM+1&s{W_HKLYCKarY_VKkfv6-j5>gKZuOS&fo#+KZ0H2yH}#)KaP%$ z%K#nSKR&*^Ojjx2Kd!nO?i{b=Kf)8;(p9+NKY6_fn_)%lKN^)_?kmmWKfSXsjux@& zKe+phMH95RHHKWA3&)q64OKLE8fUL^InKajKD){?&9KeMles*@<=KY%NCPL>;EAKj~9NU3To_ zKldU%W(be&KUTP&-^iBQKgiS3@1B0QKd{pL9pnbVKP;#U79ZQdKUxHXg5Gb`KT!bI z2MHSNKbU(fZP0(kKVXvuewKH`KP)@cw@y*bKNz^;ngvDJKX7xXy;zdrKZI5BoeeAJ zKU$fFz@%jFKX3^~bp&UjKVC}Ntt6f7KWw&uPsby`KOjx!>Zq!?KSbH&3g-{VKeES3 o7`k`pKg(zVKGFKcK1{cZ#IrKfvbvTbWOkKex1m)j0v`Ke$QQ^S-9rKRJAp3i!C^ zKV^2s{bk1OKZ>kd^#;%9KR{Ri9{@4DKi>gO(Y@X1KaBPe=jeaoKg)evm;{jIKYn0M z-h9XHKc1PCJ|#fZKlt_vtdok?KLzu(yeInYKR!@K@FY^;KS`I5g?XppKlCBq2pb9P zKjzjZcaGK3KVI2HthZIrKWV=i4B8awKUhiXx8aG?KMwhKlaNt)^$YIKhe+c$NG`% zKfoMBlJ<KPUTZ`c=8D! zKd``dff=LEKZY*?d&lDKKi~nVX1I>UKXzu#rA9C2KTI1>V(1vdKkT|n=8@{gKLwPE zpb)a)KQ!-LZ)fS~KV6E1Ai725Kh!RB=3;Q^KcJs}l^m$dKTvz4@to1@KY-+k4eO@o zKj7Ff$cD-2KXAmE(WonLwKz-3Kd`8=bv=f@ zKdE^x|Jpa@Ki0}t-7=ThKTy5s{aEGgKjq$pVZWs5KgbeK!&I8sKViXHX85D-Kkz}s oKW4h@KmMVvSLc-8KY(1AZ>W#IKhUW3UJ}8uKS1jBAKb9eg&X<(xKQP~hyCGldKb)FQ1vml2KbNI}iY&72Kgq8h(H_p= zKP*hlx4MzQKYIPZ;@AA@KT-}~N&A!BKlq9+9ahKNKcG_gIf@sfKVWy|d?jk@Kea7~ z{)xNkKL9}Ic-0VXKa8ucrBB)9Kh9~>Dcr&DKOd*74&-y>Kdd`{K)-9`Kg<+B2g5(m zKfeEoNlm8FKbWoc#l4#EKSE$_U-UrKKZjj;#euo%Kc~&3^4;9;KWdI(K02_|Kfu<@ zqKx0GKcLkR%Tt@bKSZ;!?xcI;KZIy^D0Xn;KNvthH>h0WKUnG&q6$;LKfD!-^Ba2L zKhjwi(L*oYKjd-o><>%DKj01-IC~}LKO)Tq?P#RmKSYo1F-NlKKcs;{6FfH0Kc-UH zq|v3`KOC*ROq{XoKbT}1sQTvVKg}583xvAwKd63v7LEqVKT`YxGQhd+KY1;jstBs; zKiW2z;u1dGKkHE}?m8y#KY)XMuoEwmKVRmUTUYe#KSr1_)Kh%WKaf+j=wIN=KR}{D zoag1)KMqrAb=V@^Kj`}K{mKi^KL9`8ft3T?KUCC`cb%TcKc^gV)7TX1KcaQXNrpAj zKOpR8f|kKV2CVH%Ic|Kk1qo`=OfXKTyi9&SOQwKUl-f zPC6#MKWM&Biwk(&KWH@8TU)5?Kj;yZFrBaIKNC0J_sAdaKfvR>$$neVKc435uj+^F zKMO_g7q0*0Kf_+GFio89KWK{+l1ZGoKe(@dE7IoZKXTs{tiN{NKhQ9bVyJP}Kj6tn zL@#8oKaA5XHdzATKlj6X@sZ)+KZFD-ChHvUKUDwEwwZ+6KU6dAP`5|gKU$eL8hRAm zKd)=x4u`>KZt&B0z*BsKcH?FS&p*JKj^ySaf?I3KXkkSmhfoqKOaxB z>!cguKQUXG3|qJ6Kl=F&l?DjwKLDseGd{akKQMhv$0{wkKe)Ip`7i^yKR=<(Sn`?Z zKd2guUPoofKQ2ajolH;cKQyG1Vn7h$Kh}rqBRk*dKei`e;;yvXKSYGvzt}U@Kd{}+ zKEKVYKS&|x*^id&KkC!o@GEHLKP2#Qo<0BQKbEHG$=96aKe%y_L0s?TKemUYxk;Vn zKav}FlTqOBKd?syx1wLbKUv-r7J`}NKY)B-jmmw_KOpn%*8V)9KeQdS(eFpdKRjsN zmYCPdKjY|&1Y_akKYp7jlgRJuKdsYzuWKX4Bsre_GQKT6&+VBrt%KVSi{&}`r0qKRS@uE%IvDKL7;f zf-1aUKVvlUntL(mKd_3^yW!#IKSsqp-U@8!KSrr7t5XcHmW5KjDr7#Eq}xKX`|pQvd(} diff --git a/benchmark.zarr/c/1/5 b/benchmark.zarr/c/1/5 deleted file mode 100644 index 216a7352fbac021682cf1e1b036c3bcfc64c8d21..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy0IPvg!|jFSKVUkQt^<3XKbqu0<)XsgKf2eOo9Qa!Kje>? zo=TF#Ke&Jrjjt8dKV;IvH3CZ4Kj?&Q)7Z?gKi$I3h~>)9Kj26ZI)x3FKQ+MGipHhwKbe){7dXS^Kj?uxAAk?eKW==Y_FR10KRSmF z8tB5?KLPhq1BNy1KdRL6i-NZ5KO_es3J*N*Kd$blHMz9oKWa+41IOj+Kd{h$Kl*~j zKRO9@Vv^w7KL+x#ObZy?Kic9?0c(EKKS7exKSoLzo+`-eKj3-MK&9ceKaiO5w!JULKM;ipo}FE_KZ^XM zXJSF!KdeFj;_5uKQc5m z6x$H!KLipXPr-HBKQ!7B2MmADKeX0N8KUCFKL(Ui?3IwyKboZueOe9KKQ!^ac$He$ zKj1T=2uY{WKfG}=oIv~QKcNT^gqAbxKLea}syi?2KaXCMHtg2wKd#Z$NzroEKLpsC z0I_t~KdxiA)5p8hKe%~QW)!j1KfnR^OqibTKkib$eRe(FKXUdrlr+@oKPbjjpbUDt zKirX=wg(l>SN~Ng7 znv|8&!zSuB|6z}T|x zn7_9YjMYN>RION$#P;!^YEB zZ~*y(t@)&fIb((@vI4_e(QIdR!P!0{u+3n{(WR^9KiTBn1M z=X=&XD#0o`sljcMK=aRUP4V+I$m?ht-PElF;V#Jai|7Vtv^kCJI{+@jp{|-yf%;21 zyHyX2(8(sfhc7CS|HdIYT;GKjmi=X{!-VRXLxyzvJ!s>3U*kRysHB}C1(F6qRLm%H z4^tqk*Bo$lx*qZWI_t)IjrhWp&)Ub(qQSxb5W?4DtR?l;@$Ode+RlbtDExx(^dsU> zc{{Lnt}^(~2uQX$V~OwkKwVkNYzMRPB>|+fpT%iVF7~^VQIt z^P6_Ab_Ata{F&@B6&iD2uu>-EP!3*C4lDnR4UZ;|k~>sr2;jd}Wb~k#-$h>{Q^2rX znsPe$IqZc6_39cm3afnR(qk5s>|yS`vt<~+YOh@LxvfDlCFhn`rV+HTfWi!#4!)O( mZI2i_d|VjKvt}zWKEFKcghCH4=Td4SoexjzL7{bW2>$_m=9~Bc diff --git a/benchmark.zarr/c/1/7 b/benchmark.zarr/c/1/7 deleted file mode 100644 index 9599d5e94a75d54da913b9c407301529ef80fb3e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy0NAck!kWR| zKkw*jh2gsAKjJFO3Zl~EKL$(P7X5VWKW3vdz0C;LKLlRQQtOTGKXjKpKzj+?KOic> zM&4q=Kj~SiLCpZ~Kj|>tfQCcuKgcGE(>yQOKZY619>|#CKTE%R`K(mqKYpCfYSC8c zKO|bny9jW=Kbm$*+P(YdKUHR^dJb^lKYPz*Qs%wpKg-*VV<|xFKf-?hRLg zZnB@EKh_F5;;_NkKQFjbr-54UKUio>Dvs0TKXfy7E*I+PKj1P!o30MXKftA<%sEA# zKU#C)Lc8tgKN>W>PW!agKVZ|RZZ-y|KQaE$!$f!JKL;`;cg{xaKLh5$tL}#9KgRR_ zK3>+MQ_gKiCA^r6F&+KLmj!VU>`Kk8=)sarkJKS282m-DF4KY%jy z%JSspKh$C+kdMCYKXxv@Y^Mg+KhPtO94briKY=do-5z`6KidJ-qJQb_Ki?5oKf;Ua zKN+#J@KWaOKa)U6SVAS>KLDWcUx8n5KNmN5K`8LxKh!aHF%gNwKL`{g{zRqRKOSOg zW2&LlKQbBeJP|0XSVKNJnpFkc|gKjJ!N@7b)}Kbe%Knzjq#KM033OLCLc zKQeIzcU98lKUhCZ+zVK}KX`2ltRxu0KOpyfv3Y2aKZbRThnTe3KPWd&iKf28{ z$gNc8Kd2D<|AJA%KOBFn|1=)JKR}S=-INHIKkOwYDsD>LKR4+xN~;_1KUfR#ekTU$ zKW5hZ7u3e=KfW5KV(SIsKNPb?eb_S0KMG2i)60(LKh@n(F&R7WKfZ83q_Dv0KX@Mf z|1lQ9KXjsL*TQ7UKLqSvI;yMSKT=8sjx(6$Kb2sjE{?6D4s zKO~n5Y_9a(KiINF%msYzKZN7ayWE%GKUingi`?SmKeVdL<_wz5Kd@Z7&nAq)KWLdZ zSk)iQKUQfd|MQgVKisW)BbZ6=Kifn=yvo|)Kdf3=uA<4xKe%Uzn(v|RKg+uA$v_?N zKbT$EJcxViKLFJ|L$Mf+KT4PJ9HP?NKTyJB=q29GKRY$k|AOY} zKkz?& zeFb3PKOlA4h$n~4KaLNqo2oq7KflNdTNDW6KOFr*u2*c-Ki@qg!^Ph0Kj6+3Y(0(9 zKV4R(v7=z_KWJdd81xIXKQBEOUI(t_KNOG-W2MB{KSl{g?}5qYKO_^Ur116BKX{Ze zGE;TnKT{#4Jp_5mWbeKlDb#$!9;sKO{rXf=7GJKR9U^ze`x& zKkO*UBf?$MKd?IoyO`G4KOk@(4<$>NKkdM076}&PKXewuPH`UYKS~Qts^K-zKWdSb oi4`a9KQ!*UNPwKvKdK5=+BRj`Kip^;I1IKZK9T!1%W5Kh-t{%qy_&KW@=~7RIyXKU}ZKLE*RCKTgsecxV*eKkC$`eRB@x zKg^WfQlLuCKSVt3Ez1DRKLy|)&EcErKSUT%jy>7ZKOe6$beKBrKe@QP`QR7eKMS#* z=ql>vKe%-7PLuM*KhVq~uiYxmKSr@!Mq)hdKM`*aM;^`LKY%7K^+&*{KMDh{|0v4k zKk)Y-cV+$LKg@_MJ#EV0Kg5Ng5^sRVKRkv{c=?m%KXT9WjBeZ4KcG>(g-FD@KR!f* z$&?4uKmT0%E+U485KV`?x3hm+TKZvqkW@tdbKRNg% zBQFT$Kk#&3^PX_%KLFOqT+$j*KQ^{oG4E&XKjoFuzG-9aKPD0tr@LI~Kj4>rjKvKiw;W1E_xGKOp?b0sDpBKfu@`Ea>R7KeP-?K`TAeKL2;CC9DOT8>&dOKCapaO$9);vlyW1kK6v?BGE}2N;6M2J#g;{NTTS|4rNnZT^wwVzV7nsq;??v+S@W@Ahr!mcf#s6-?P82f3X0 zGk2~Y89s#9E?y_NR-vvsu?=BHPs78_ChYf?){aZtvA3_`Oj|jDgN=b(PZdcJAr4yo zHK`vNaYx)XRDMR&N4g zefk22(0E84D8jM0+H)>6J>0Y6N`zt~NPKoM_htuHj@hMK=Mr%4PDsexXhO;PI+y+q zHTc1q+*WowtdnF5f+O{aW-QNq6D5OE>1GLOvx1cxzPP|<2IZr+nAd9u={Yw?;9QEg zk_whbV?W}VdFNi;wqrY2qK{ZOh$U&uSP@}bJhrZ=7O_kSDN0Rv${=v`LL@tCL<4hd zQsiHT7E3G7)QrUrAUlBYFSsPd`?{VW>NOk8qN0h}=mLYxin&Wzk=*ErY@2Sz*O9TE z7q$)H1p9Fg$6tyb{>w$Vv-^=x=s01~W;DCT80xtecu^lzjFuWs&0Eb(6qGN{* zeC9>TPDdA7D5PA8z6)uWXC2?T#dZJ z4e5Kd3OF6^xKAIJ;gLFTi0!6=hx~VX);tk-&fy1s-H_vGV50h6j23ig!By~VJoH5a=uS{n-P6Fw;PL5ss2&Z1if`r9b&$;)ONp zKOHa-AQ$N2KP=W4Iu;1!KQ=S<(4{BjKVX{HM@#JQKRa8dh4h*4KSpR@F_^N`KVl(9 z`&5V8Kc&d2QUl=XKhQ;NL(~nqKM+_;-YnzeKYU#ea3j^oKOhZXYh)P7KfoiFtRhmR zKhPK_nxC}FKU}mTGWdPaKWI0@;rvX~KZqFScaRX|mKa!CE#UB9B zKeV4U>9Ux?KjQ49^uy!dKj0(LS=b%#KVe8SLWMo-Kf^Zmlav$ZKS0VZP!9BqKRPJ> zzNu8#KWu39ON~y$KXM2<#*8oSKL?78SlS=qKf9UB#n<`ZKg?G&j)76sKRi{pov|0n zKY)58lyk?hKXww0%x~rIKk5+WBC0OzKaiVyfIjuSKNvqspXIL8KMdsSl2<^=Km1F0 z8{g^8KYcmq?xA?-KS8t{))JZEKipEa=0%y`KYRIE{u8|HKZR0Y=I77hKa?T=(|6I; zKLSBC3$laJKdfKzKPOw* zi%EjzKZtzdpBVAyKNqNuFa+iAKLytf0~oC7KN9#!vZmqaKbl2o(9w|HKSdIL7zLK( zKNMjF86e-xKQ{fHg5)XfKL-6JOd!tYKV`Z$_X_0hKg0)F_*MqzKd4=S`S)SNKb93z z=eY{yKQuKG>?Ru4KMM9(Ph4Ki=;bYxpbY zKjd+$5*66wKf;SbjmwPJKloaEt|~auKcgEs7RG7mKL)rwlel`{KcXBD98d!1KgPyB z{wiwRKX6ez=t4W{Kh$rLbK58GKgs7-9U$}VKZZC+IA?;~KhWwMZnvnqKLugXZ2|u1 zKU^E$MhZ*BKguaW)tU0|Kl};+gI|f>KmL)d0{KtSKgh*$W?pE+KYdV*%a04>KQNw6 z&#m6mKe75i?&^~6Kf0Vs>uEgHKe#C9W}=zyKaS7w&bRaEKLpY~(BBx;KVY#rUew^r zKjyS->Rk8eKUgm&cLUemKlIBdX7$MKKYzR{4rz?-KL9)r7|5VxKQ{POaTbQtKSBuG z7F$s5KV`ZiI8Zd^Kh;^M3F4gPKOPb^6d;b}KX8t?kG*BbKjtLM<6*JiKXf`q)KzQ6 zKd(COO7oZ zaxtaFKTwP4)kwk4KR{iw0vDm@KaiV?G_UfvKl)s9KAR2GKQl|h+ygAKY+}EV5+OEKi-#i zn_JE5KM?m^s^|%^Kk&M&4`?CfKOD7hKAB?NKj2b4YRfvfKNJJrG2+KVLU=Z1k<@ zKLpy3gL*v8Ke4+Uw-;RIKhV`HG6am*KecFl49Z>QKQzxCd%+yYKUl^&Pl4+1Kao5j zbTnDxKlJL2RbE%lKjcm9Z12h1KR}Hl947(aKhrDo5>vD2Ke|fbDWucjKOn?R82&+} zKU6e`c4PX`KjNdDUqBPaTC$(pKhg@#XjkLjKVJ8cD*ylh diff --git a/benchmark.zarr/c/2/4 b/benchmark.zarr/c/2/4 deleted file mode 100644 index e7e5b40b9ed74c177ab885ad3b0dcde6e6493a5a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy04nW^zutu1KR>FxO|qZkKd2Q}otgC5KjyVDvRtv*KY7my z_rkNKSa2w&Ffg&KTwWibHgLc zKl!7`+{D}CKLK9=;KuagKU5J&E?_OmKUmw5q5n_JKk$kQsDZr9Kk%L4k@tezKNPPM8deVGKWz9R9>YxAKSJO;?e9F< zKY&5KTH(aEKMJt@v6#5vKQ=G^PEg|SKfDuAO3=#OKd1+lj`l*$KRW|Fm|6Rw3^B9KN4%maCte`KeW=~dD&>q zKX_m-b~>K#KY&xMcFE_>Ke+m`$F*V8KgP@JfQz!&KQy2zM4SunKPub3JCyU|KV&=| zvz~X=Kai_%HWQhtKfw7M_%PqEKdLSP*g1*YKVTE;L}iBWKQI85;OYX&KRH`dFYP(w zKVU7eY;h09Ka|ra-=PV_KLQr;oKAw$KUS6v7dx!tKk3OmaAqs$KU@3m3lHk-KOXE{ zMaUe`KL8HRYKggSGjuh9j zKbr}yEVh{HKQJSRvP*QmKax%$(pU-WKd1@{L*RP3KTg2aNE&?JKY)!x2M?v3KT{%9 z#)V_=KMXmTKp-9IKZS@6D|*u8KToVKlC|5!%efoKbebN3RjEnKbp3KOU=T>giJ0KlpOv zHS46$KY(}ZK{cs#KOFJ;slMayKi-nQy_J2@KPo%Fhn~vXKL}|A3&m@=KZ+9k7KP5% zKZtLJK^8H>KX}4u;A7>%KZ#jhha`yQKh&Q4obl%BKe`|eb-`TkKMFkeFmnCgKky-k z)b(iEKd4m+1a!vQKkj}UMo^aEKWt+Z2Dkv{Kh*VPDrzapKWI{K^|cexKaiF_v&h)K zKN&rgTb|VFKa3>fAvJ~NKf z%#wZKKLukD-fd0hKao-mhOBMqKZz90dRFS>Kjt!PN`tQ1KRUiIJwPVqKMD4sL$~(j zKk(Jj)W5T&KR~2fQO5|?Kk%#9Q=Jg1KXiNA@>wh3KfCY>B)qcZKPc}tv6pP=KX6Q* z(S;tVKeQ^1wBaejKM1rKzb9PUKV9v3tuLhDKa`mj=XKugKfo)9GN{9pKi5)z&EhlZ zKMVM}dpRNIKaF|hE4Vf6KVUB?o!pR@Kc+`pUL>aDKQ8!$@4#%-KV;$KRU>lbKcMd^ zUBox&KZr;RVa!3|KcZ85Bs!wuKk&p${T=GiKS;a+#~3@_KkftFP?#&_KXLtEc=F)l zKl1-W@EQ2rKLxP8+`}p0Kj_9fpmwFOKhT99{(y7aKL`#rMgrBxKlH#4PcugCKgU;N z#*(PxKZuEnaA4cDKV&-#HcqO^KlrEf8P>SkKcB(&vOJ{kKbdr!4c}PmKl($+pCqR2 zKR_w&m~{f)KfKRU+4pnKKb|pB@>fIYKZqz75OR*|KX|V$FjSJjKZ2BP->37~KjBN& oD|6QEKQ$-|P%07WKQ_3t+%UB1Ki$x5R+pLPKLOTOhKrf(KkSsAVE_OC diff --git a/benchmark.zarr/c/2/6 b/benchmark.zarr/c/2/6 deleted file mode 100644 index 9c046c9f239d3095f55a1e3c377631b0f15effda..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmWO4i!&1d00&@3>R7e7X0%I+Hd#8m%DU*+>OvQh!__(RIE9r*vQm-DDRx4RP91K& z(?eP+J*d3Z`3Bzojzn{8{)>7gcX9E_?}A@9(Kd(p8%hCgdT<2Bwn~lx;;ET>@IHXs`I}0O8%C1J-|Fv8 z5#oL0no~ayVO@dX?-_3;wrFD`MXn~iJw~^C=`x9d`HZX=6g`BzhCMx23LH$GlMMM! z;{4@ijYMNWj5)}TW+TTS<%?5wngU&ZI{sJjC@75A?iY1BNIl#_iq{%o=Ofg*@N`J; zxb0GRS^;j2ry%#b7FE49r3<38Ad!7v79Xes*GHIntzsMvUQOPtv}fQ(Bt~>*}KTMT1CJSq_Vq$`I&u+q`~Ihx$do(|Gc6B#!07 zD@TRmA6~XI*ITjg)}+q~^%QPIVP;9Y3Pc(f+mnV+u~TZ}DtiZuKW?X|^D}WoU?pul zKMecbeA>eO60FSWb7p8paphws^Hro4ErhTUzMmQ)W|G*|T7|OeyZIFBhoESq69(d2 zQC*o;8dlQ++XTl5N2wGyx#G3H(Mr^&h?t=*GK3N~+31s7P%?Y&)3nwx0F5;ytZ^#MI)#Kdy8y(($nFKRT5gs?PQ5Kknr;BoyM- zKP+Q27`WTkKMql^n^6JmKlBKL0nDh>KLGRX=bq>9KT9wZ`)^(BKZ?_8Y}+E#Ki*&0 zt7j9^Kgcf8=X)OGKfqoaVlEtsKa_C%jdi=zKd-B7p|wlvKX{Fzk}5IKKjI?-B+kR+ zKjP8Ycf?EYKd6yl7!XR|Kf)pCC1WzwKgfoXB-JR*Kg&h(D|svLKazu`sLj*uKdyJ# zT7YcpKNNz(=n!M?Kc+KE-q>5~KcMWwq{k)3KXe1$}$DKRwaXlf)qEKU?sq z<&tRRKWL1=UKRUo1k6-%dKU{NuA9gtBKNBzN zx=88jKZGSt8Ik4LKPjgZj+koWKYWeNJa^~lKh}_1@cZlFKN)NB$IyW4KjVLtKgQ`-xvYrQKS%;A@{ZuWKP&AV z@cYT^KXf%JXb#}SKT;NBh5GU0KL&H+1ES*FKl-sygNNJKKP=sq6fE`HKZA(ewGaQ` zKY(X`Rj>V!KkEM5>LAGAKR={E2tB0eKhSv{6YHU;KR_?{#k|F)KVWZ-9BCV+KZwiM zb*B@!KhbZz`Jj|KZsmg0s+FqKm3SE-U`0iKkom|RWT*vKY%xZnpAMSKMatzqde%>Kc}&Y ogM>KXKj_#&%$<+3KWwUcFAHqkKkPR(;UN^uKM?EXf=d^=Kj@jF6951J diff --git a/benchmark.zarr/c/2/8 b/benchmark.zarr/c/2/8 deleted file mode 100644 index 657f2deaef7a109f1560b75f668643f588418725..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy0Bmlira6G+KME!|ZmJ&NKj`w%=)r*EKX6@n=bA;SKOoCc z-z^I3Kalv|>XetFKe8Uz3|0)`KQunR)4svWKinY&Zo^W|zkKWa&#f|GpL zKY%4@XsCj-KY&qlB`>DpKiRsiC)g3-KPORaIN*rmKU@)~U4ApzKZb&2SyaR7KcKsA z77teLKf3^Jig2UjKX9;ApXJo0KNE_q^veKh!z~H;T{DKTF{}%;m7?KMyeZuniRJKa>D|n3a^( zKb!Ra^LBRZKd|g-l^z|+KR{jpGUkuSKk8RiOK`;GKa$=@sY_t$Kck@Yj2!CZKPtKq zxN*(vKZpQj9@AOYKP+ps77^6MKiSFNst}~-Kgiuh*ejjWKRgw`XlC)+KTy&Bw9$&V zKbncy{2MvfKj?CqfPZ!4KWHrwAch_4KLA_|RR-XYKeu@%d872~Km1KOi`fv@Kk!6Y zgBxb(Khxkf@r1tYKNuEVdqGj-Kb`@%3PSzlKUYC-3~X%cKST`)*#)2PKVY(dL?$brM@KkCD}2T{D{KctDp%{ZFIKTOyUbS;&`Kdej^Y3l6UKfY5D z5rg^KKS)s&hNX+LKOYJqDXBy3KX0xdgz4JuKLAr6`vmTEKh*QNKUJd8KcP>oywKY0 zKhI!RNVll#KO&rI=Co_xKf;YG$a5>wKh*VI6xAfiKM3xXAsnLQKcgTQb#))&KTLp$ os6-FPKiSJ!WD`Y+9KN`&goPO-kKNLxOz#Zl0 zKOn;HG~LplKXh!pYvS79KWc!-h9GC>Ka)QSCzq_{KS+V1CLoIAKj?I%d>>usKkfoh zb!BhrKTD`7q+S8)KVX8n?+*p0KTNpo5>6r1KY}BI#u?<{KhWPtROB+sKb|guwN(4= zKVY_b;ExotKMpErc;{5vKjp6>|GS?KfqVD zs2N6wKl-O4Sn62gKg!5y4d6!ZKl&rx1PE{EKUaWx+ZOBVKfJ^S#mKTzE+fkhv(KRoUD%%4~9Kh;Ggar=+pKd2*`PJTkrKgx|=t+Q&~KaxV5 zMO}&PKj=3)K&(gLKc2k#4R871Kal6^qsLObKdx6>@RiouKhSG{oa-{cKX8znix%3T zKakl;^ni!7Ki9B5Dq9)jKLpsNIpLGxKO!c^H@r#VKR#lUAKUKLKMGLw&&FHbKY&bn zeJ0Y+KOEas(T#D`KP)n)6X&ACKOCpdEjhQ(KjUrJXL)QMG zKM1}%MtYvdKaLz`uYuj!KgrpGIx%tXKT0`IfElyvKcMEHN{wr!KjaSM)YjPNKg1z} z@7C<>KeEnOQLBm7KPqjq;eg%SKdJ4tl)$KVV~<;m`NNKZ;9g_Cht^KmHR(nCSG{KmG{Viz^!CKl1xE(!_D^KO_~_ zP(CcvKV-~5VtU`=KLL78_^^=aKV(Iu;TbvNKVWo{(m_^{KWgyH?XsrrKi7^+7!sW0 zKV~4yWdpS9KeKW&T3$ToKcOo^8@`_IKTsL0Q$BX7KTy)jTKd5tmP~X_sKfS@L oZ-#r|KM7lSf7^%cKQQ*G64|WfKYokrA{Gm zg)9|ivBic zptEj1{YjMs5!-GF$R;&TCsoEAaTvi`Tec5*r2#I5r`N8LeuR(qTD~+=3*x9T-<@9q zr{DXSoz)^lA0sW}=MwN=?Dp7YuLjJ%;I7%EIt1lghv>(ZnA5PFrsTIHJbRpD_gVp7 z=H-L;HfT|ueM7h2Qv_X}zkgYd0>V$1c+?;@5+`j-BMYCx6cRNYT5HDB6`8z()B(`X z-Ji(2qlVAVgu(a!4A{^JuO zXL0D^$WElESE{a^RY7z!`I{$2i5E1#8(|-n&~2nPEE#G?Vqguo(c?3y0z0DiT_5hT zf~%VKTv+xJ@uikwkX;PED5(c2HTr;w(~Q5;RXI$q0T0W919v#~!s((cE$+D(jiu*@ zPjJkbSY-1&u1$<0#*@!eHbQu5MC|RUdc5v^Mp^fkfCD?mtFT9d>5txY%{nE)4@Un* zo9r*x?{+z5%N+^!NWB~DhcxhV_SD+Xl%uR|p|`!e3a&+V1yMHNAWIpMcvyXfaid|p zh(RDrc_K{RX+&|sgEQwGU!kdo`qICcz@>em#pUd;SUT_5)|{(-={3`!ka^2RLpSms4zpWqx0rcjbKLCZg(U%BPghKv^;qTn}rpudV3l6 zN0DMeT4YFKXuFd&1~}Q7s$M3%gU&ZFf?!LLL8JBZRdUQ5bZrryRN;EkZhpo6K^W54 zaGb~5LE5>yKjmf}HcJ$ih`1q4a;?8JVof;i-jNvkTZpWV!%b3oAA~#f3q(idVDH+L lW@ak!%=L^hx=4jhOOBP)Dq3;1=0$}i+yp`(TsCIajsM;im1h6| diff --git a/benchmark.zarr/c/3/2 b/benchmark.zarr/c/3/2 deleted file mode 100644 index 16acec1c4322708c00b1cdd0b1ca31d4dbec6931..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy06K}SKGUM%KgEOsQflqxKPcIlaZ#k)KXwf&*GER{KOLye zsc5X{Ke%|n4-pvYKRlX)nqPP5KVF3?fH$e{KkulDmIou}KMX~HQXw&*-Kc6n`UBX=JKQglK zGQhy!Kd3Yh;}c`uKUHm)zivwFKQ>h>3KY$KcyBi|ZKcw6~4WW&~Kd;E6(+`mEKQ;!bKBD#SKd`>|*S2xiKj0S~ zhTM!LKc3;85kY9)KmXN3tG4UlKPC6gE#aKwKM58tW*|-O zKcMQW8Ks)TKT>r_r@*k%KciT3{XqHdKLCzNeTflUKMsf@1}uy3Kh4BbdSG?pKLC+g zTsr>NKbkc7CWM&YKe$o2W?+@DKfxem`ulzCKQuQCKscSkKVTTORW_ZhKioXcW7?O> zKjbC#q31K;Ke6IF^=F;rKWv+UN)CDJKOm@#jfnJ~KPWvqXS$c^KYA&Q4`tHlKW2he ze0&tzKO2+u&%(svKWkj4sR^_0KeT9cXZq#rKUwsf0gyD~KZCvzAf(0WKj^H4;0l)9 zKj^)m5WMN{KU^O(;MSwuKeqS&S9KTxL`ds!~qKS(Oh*+ZMxKS*%4-k;UAKPXEC z2UZ8&Kc_W?=M(?wKVYD(kNWhyKiJTMZFKTZazWGLF$KP=WXa`?l|KTTU0`6S`u zKVW1nuI*RQKN0%PR|XK`KeXiuFoz=1Kjw^iogshhKb`mXO>(>LKi$!;#~_vNKfg;6 ohtRt0KaT$dT&X$XKLC}`B*`VaKNMY%a*BrBKP_nJ@XNC6Kh6G@!2kdN diff --git a/benchmark.zarr/c/3/3 b/benchmark.zarr/c/3/3 deleted file mode 100644 index 5a9b1c8aa74020548813c3ffdd3eb2aa3345c5df..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy06HBv`;nsNKN;YqL9=KL+KZZdsnoKa&sIVxIWwKY%X%ofSpOKS4AHF+4fsKZtBKm_Lok zKbUo~?XZXFKYtZjDb7jeKW$PE%+Yt|Kky=IIVW4EKWbn4`MihbKg54tMb~ibKetNQ z0(xcZKa#(0zdzOEKYkf}5%cQjKfp`5{h%-GKP;c?KGBWRKmMHg)pm&JKg=K@HbdIn zKPH87B#$!ZKed!Fo5^Rw1aXJqKLCFDvuE9FKXwMZNDw>WKR~6f?1dDKc`n7G>NX}Kh%lg>vh`VKb`ky&*HKh5bl{{@ocKg^EYdkbmnKlL+K*g#(7 zKS=I#*cr0wKST_9#edf6KfHdEN!YjAKRnDIT{vaeKT4?w$UHFBKTQ^g%J&uSKQPYS5Nh$iKcJyx-HVNvKO9Gn o+QEwHKLFE59xqSVKNfIU2PntbKLF1IMT5SkKdvDLywA4fKWONVn*aa+ diff --git a/benchmark.zarr/c/3/4 b/benchmark.zarr/c/3/4 deleted file mode 100644 index 4e3ae9f2a419ea63a9dcd052cbe9f66443662838..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy0JO`3RZ&64KmWh2 z8m=|$KX^r&=Ru#iKW_Ohn`CP0KZ1u&&9I^DKVVV3Z1nl7Kj7-`%fC>wKR}82)L1m5 zKg)0Eb23WoKb|&&IVtksKgQAIEynZEKloRi&bCjxKQ?@pM)gJLKM9&_SR}RWKL+=x zbr!$hKTK4QWMUBAKjyYiYD%~3KP2JlBjb3{Kd|<;g8%aDKe+n7$EK>qKgPBGsMDdAkGXKRAvs^}|K9KenbV&Y4=&Kj_#rT3_e2Kgv6v9A#76Kb{Ju`lI^gKVVmc zhtwLzKPVd0H^k)KKgdb;Wa_lhKdKfffWXPwKf05=<4uj}KhWLt2!I^0KXje@4srYL zKOD451c$olKmJ6tnYgg*KUc+#aR|WbKSYdfpIEfVKlSb9g|=$zKgY5eH6~EtKYH@! zB3Dq?KR96rq=rx2KNw=sfER4hKX3{!^2+$HKky)RY{j?AKQaq$ss|X{KWSE;dpKyY4KabG!qMujkKLCP5n*j$k_6*|FKfod!fl@lKKMJ1LG98=hKMWI1p|pDH zKQJgDbver7Kibm!DwCD%KQzcbni%rSKL8J!01gGKKm2#keBJuiKdn8$K?{rFKOEEi zV1lLVKh$Oc3-f5yKY{_6cW=SeKLA3pRf`i_KfoA5u@76bKk>0<6(Ek{Kh>zO)SJ=d zKaUj7k}bmQKUCO?L#j8*KZ>F$&YS|*Ka2=FKaNwkQ<{S4KL)evfBJmsKg^G) z;8>#KKg{&bBy&XWKL9$n<9RD>KeqZBQ0_h6Kd1%Sn-`U|Kj;GaWkCwKWgFr$c4<u^%N}v&KTN!)EYo%AKhjNZ{z-GKh~pj6lx~rKkznnE;t?SKUBnS@V2nwKM|>e?fGHqKO2EiX*#LmKkD+hWyf#V zKUXHGW7;9_KTnv17kq*4Kgi`7OpzJjKeS({@?|sWKO~cXz(^_2KWLKcTZ`B2e(}KQGzRS; zKRkMV#DKj`4TNDwK?KM?8x%}!h7Kfupf zzT0)*Kaug(0B6+eKTVE2TWb>KTt9kP{~f|KQ)Ec zmR&#TKe8S1sye^wKWAqkYKhc@Pz$j4fKOkw<@*P6PKM>}-2eCD_ zKW(CG7cs2nKY;BYzrs0)KUTMS4J%viKY)6!rzY00QKj7yeX2Ln-KLB8YRTM~9Kkje{o|!t|KfL)WcQ8oC zKVVYukw&GyKgP7XrKc*^KRg#S=kRL5KY%LR*be09KPfzgI>tnO;pKV-43XKh5-KcmLCG~hku zKTW6LBv$(EKP0q~vt!B0KNyAAPK_7KKP{$y4p!OWKaZUfyZS`qKaAVRbb}Y*KkzoC o%-cS?Kd{6@bqC(eKQu4Z=YR3$KfDAoiu5epKRkvR4HiD(KOCZxuK)l5 diff --git a/benchmark.zarr/c/3/6 b/benchmark.zarr/c/3/6 deleted file mode 100644 index 5fc18c9ef040752dc04c0ed9b7e279d7fa4c5582..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV~$3sB1e00-cjQd4&#YzSR4%TZEto$9wDaVgZfE8=z;B800^LOMy89le(`R!SYR zMO}51QmRR6Q>;Cje_LC7R!;Ir&iBz9edd_%B-`aSy}GiRN;?yFGG5(eRLfzwm>fop z?gFDeu_&lXkE#!+LML@rxYUVDa$a;GAeK7I`y|7gCUJ0h!z5mIetTG|Qov2R?CXi+ zotO$->l_jF4hc(ta&?qWEI1fFmhPp-iA~&?Thki+YvTztm_*)SZauBkg637%q8vxG znAq4X_D)t~I4>~B+NZ+z5f^%qZ~`L|@yvXS0o=Msu^>bNb4Y&H?_4dG{NW9x1{vX> zax%KWw+j_yTDX_q2=_$4q#4Rvyw2$CvUI6nytjU_^TAOhaK461gDtT8_3y~S$X*cI z_I&m&E#k;oHSF?sIN9wPPs_E!|Jp^SUy2NcerLwy7A;6r*2ThojkVwS~EpUr5Z(Hi!4X58}o7=7v(0}t?7h-QfrhWAn zrl1|Wy_KSZX)C5Ps|+%3Kiun=k*Q=oJnuB7+iq1tdd1Q8zP}zrRl7H3J~AM{V~5p; zr^cb4jQvOF^u6l`;SsvlEz(hr zY04Nmbl)gk>YpTVKE8xah+f2^mE&m{H8z|%0fs|BL)~!=HlHp3TPpp6oG@BRFjI%- zqp52$uc%QOkL?^Gfn6<6wno*A;`Zpi#^=KXk~s4&6f66&LB#6QEl{FkZ(vjlLjgu& zymN-O1~wv2#GFEkyxCT&jAX?<#b8H7SvNF3J@zZIO-Pt}Ls#Sx;Mh1RUX2)0=;8aG zY#c}QuS;9*_L*T95%+HXxDt|#bF9k(0r=gN8|*djF>`g`CXp?bjXPRNhOvr diff --git a/benchmark.zarr/c/3/7 b/benchmark.zarr/c/3/7 deleted file mode 100644 index ab2d35710285b2eb91b8a5dda03d5ab708f67cfd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy01u}32MLz%KZ^IR=u(r>KXWii_WR!AKVWA)aQf8YKXQc+ z#ZlkuKhB1w>#Ug7KSUO}!1UV0KkypCK^0=OKSJZzFAJUEKf|*>%On);KQd8=q-2=f zKXUkpNn2pyKPW|;RL8KU4sPhE`R=KR`FkdXa3KKWW+uN!B6ZKfXSg zzn#G1KYW~O-@5G6KhW{yw!^HVKlGCC&+5&^KV;$V1or^oKj0&70FlNKW0pkhSX-@KiYBY zUr5&IKa@2TSldG0KZx;nrQHVMKY+KsnTXD%Kk!lVIh-)aKcJBXfJV8^KVoDQdrMW} zKfq7C*A9W%KLF~OS(0DNKbpk)lOEjZKS3~AhQE>GKOo&IsH(%KKUKK~D5GBGKPxJm zgrS<~KL(5(*Q>7TKV=-9POCNNKTChh?XlD6KVEv<)TxryKlyVD-MJL+KXAD1M+W(~ zKNN`EC&t;{KVH;MJdTUfKjd&H6oeV?KOCHAdB*+dKQPL+hyrlwKg?+gx~yi(Kbt51 z$gKk6KXViOkS}lKKP)<6MPwn`KmCae$urvFKYd)Xm+@ooKY;HLxARG=KQZ7`4KOa| zKk5e7TAFm$KdcDcdzmTWKN#hW6ndYtKf>1t2>qziKmQc-M~ThtKl%>Kx$>;pKPaYU zuvognKcI?PlS0ejKXKk7-3N7C4KP*PVO|<>WKNP)Hqey_jKY(KI$clc1 zKM*~`1%oBKKX$w1C}3OCKT^3$Nrx-lKhc@rkP|E6Ke=1D)Et}OKaU!ZU9|n}KN=f# o$i~s#KcGi*E3l-&KghbbCKVX`M+##^oKjwa#Li;G-KRo0XJOwJ&KLEiCM*FMNKioL3Nn;z* zKgfRq>ccncKXtIC;Q8zAKUkve8rTWLKO_`oJ$>QnKjzysKyq~BKhW3%Xl(?&KM<++ zRyvN^KW3=rR~d5AKY9c&<=xERKfv=j`j188KL9p%#_|AJKN=n6*R5~pKRT_pKI$v& zKfL2k=56!VKYUg2PgjP-Km0UlOzSS`KhAhA4=VcLKaen4Zv-~nKY+c>8gSp3Kl13v zU?k_?KSG<)8PR{`KgwJWqWuErKVYAESqyZ^Ke$$<6yq1YKiK5E#{ALHKOh7YJ7&|- zKLkuaE}4_)KfWwxDBj57KSJAknt){7KR$+T1Ux;{KXy13pvXDwKf{U8X_95{Kd@kK z^K8(!KdN@jCn5LMKS=sWT_QZgKi}@9xgEppKQ9I=jIQ|UKW;!u4-fq8KQiQ-B3&Qu zKM=s5!|}%CKW;nQa_=M5KR}M=HuChyKfuxAU+s64KZq;s8(yg0KS?$ZVsyjjKe`)C zbimN)KcE_rwvN`zKZrWPfxrr}Ke{viR%61}KkHY1MPH5YKh9Ajo1UW6KRq~@6&SJa zKYW>V6kP$>KZe3vB^4FnKfawMBG7H&KkO*hXqRTKTuwD1620cKYr_7b?CO- zKYR|c>B^AFKeZSP$jCG3Kj?Y!y+9VxMlKfW0zam9DzKLD24Inb!bKVH@b zR^`^(KZ{B7`KV~;KWV)OYGrBdKPcd0zTmIeKZpY~0Pw@SKX8OpH0U|xKN{MVWFx5M zKMWu*Yr_-PKdENBRT8Kfv_51LNbIKi=Lt9{8@~KagqO=E(iTKkJbN z9OoJBKZBhy&pjOPKbSZp#BUKOfg{H-tRlKSp=5 z_+2F8Kj-fWYLBnzKeo-CEMf8MKf=_KA<2>0KL8QeJ!gb=KNio^DtBKU{K|`eOObKkVsD3<(tCKZLWCBw%*!Kg@`|b$Q&`KaIYN z%LSU~KW3sAWc0-DKL`$Y5jl|CKO;CczG^_@KWH}JhuMYGKXKby6E8I9KQ2^K2LTxD zKN^fph&a6KKhO05&*2tKiN0G10D_KKNp)ozi71NKgz5|77!WVKYgU>B6oG> zKg#3Sx$AS}KfvQbaqj-WKS2M|ei|IuKUph&(W7zXKj6cmD<4|xKeCsd&ekg0KX3$y o#N|T6KXj#exMO^!~g&Q diff --git a/benchmark.zarr/c/4/0 b/benchmark.zarr/c/4/0 deleted file mode 100644 index 773ee0a0f33bd7b1bac035044aa43c46c7293cb8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy0K71n85uUVKaG%O9bew)KU`_-CLuS+KO>gejKbXQKXh-G1N2taKL+qe zqIdc1KfWYHs5e9JKR}(K@&aGzKPFQJWR}F>KMAyXd*I&dKZ(a07~4?fKg3uydu%W4 zKb5@314f+UKgS#`izYLKO`8dJwM#YKLEGPpL%SOKb-aBIw-2dKd|3%{O4e=Kcq{MFWLIZ zKOlO?#}(PtKe(9L+^Jj7KNLVg;v81TKVS&b)uTk4KT!Xs>@NbqKhQf2S@Yh*KW7o+ zJpB>kKdgp6$b%omKY0Au_E@mcKft9V7f1+?KX`1n2gN+KKeNzrA_9@^KL7x83yKVURF z!aQxmKMI~Uuv}W>KL{kS;u+<~KRz}n%SnsqKR<=_6gWreKd4YbbM4jPKXvXP#p}H7KgJBtTBS$cKWWMq^3d$&KOj>1(03@EKSZE+#|#VXKU!#Z zLv04uKcaqvl37jBKj6Iv_X{@HKTu$GWmZt^KLB-e>_3cZKQUP8O2ts?KVbjI=>u4= zKN5DQsfwcHKZIcfti|BQKMp?RKCxQrKSJIm-MKa3KZeG62~_dlKVYO|!FnFxKf$iR o;b>^>KSCQ2<>WZyKfdYjf~T(4KVUI?J9DeRKgx$n#7ubRKhcMdZU6uP diff --git a/benchmark.zarr/c/4/1 b/benchmark.zarr/c/4/1 deleted file mode 100644 index e73314a2b40dd296b11cfed98bb433f9ed78c370..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy04!Jt$!Fi)KkQ9_O94gdKbR)v%G;aFKf;>a$frWzKMryG zqW>c0KR_0?ZFBeMKTMSC0O$O{KfoZ=7*PC~Kg;PRKskcvKWkP}pLXTtKg>INh)WRe zKd`U1&M6$fKSg8cPq_f>KUs{S-UPqrKfseD5K3T_KSG!QO)6*IKc3$O9L%%nKkOGf z^mwlCKhPz#t^CopKR|p8Y`5;~KY+{VlCuBYKQ!fK_-D!2KbI}%W;(OwKL<Kk;-YDKg6JKPQ0}$Ca7lKj4>; zIj|nbKf;F2JgmmvKcSF7LY>;}KQM=s#@N-vKTlPEz`>sGKOBkboxw}XKS;6_7;SXE zKjgyHO{`AcKPb3rkexTTKfo7Oh4sFwKVE4MyL$ZVKY--03LFY~KVV8n-CGx#KU@`B z>6$O=KbEKRCqVDkKlFcJ(me0QKU@;9KWEnAKN@$eWC4QYKUy-@T}?IYKcU||V}Kyz zKcIG9*(<89KbyfReC7}8KW)(69vlnoKb(T^6}`{lKf){4?w%OjKU}Ti9)GP_u zKa^b51xUWyKZtm8tq*(dKc7Vo9WyNEKgGxUhd>SMKj~ZuR9U^~KRhZ2DLO*eKLEI; zC85Jt@RM*Kd8b|rKK{rKcpPjmjKM>Z2JiN=y zKaeV6WKR{Jc;b2^WKiU^yVmCtOKWllMA{adCKOp_XLNhY=tT0Kj2zs8KpSIKO2fLwpTsnKV7?w2DQNCKgU7LDG*`jKb$irZ$ZH9KVXHa osJJY=KX_=5lwEeXKM*QIPzB=k(RkKYg#% zcxOrCKgOa@!7`oKKY-aYzXELEKVWPn6y%A`KX!F;zzquTKfrC$bc^$_Kj65kpwfk{ zKf~|AKZVfaKZ2YLI^(X=GRAKN<~r2~88`KaGb$KLZHm9kH?JKNiwWHzoVoKX_0a!3^uvKV%9hf4W)kKTy;L+#)QtKfYi+)(|w& zKPdE1@<2h0+?!KlTwb+=GhWKR!Pu|9gy!*E7KXARu<|K=`Kgj^u o30CgtKXiJG_AOe~KWNhV6C&c@KSDP&evZrEKj0ibl4;Y(Kj$u<*Z=?k diff --git a/benchmark.zarr/c/4/3 b/benchmark.zarr/c/4/3 deleted file mode 100644 index 002e95aaa3102ec395430aaa8692b5d67d1246b5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmWO4i&M)100;2ZU7JR!q~vxnr%XiDysr8tLu%#GLKMp=uOlNJC3AL!lj4?F?zCRy zR7#ylYPE8WWSG^q_ONBv_FIQ5hVc0tK8(hNf4DQ9o%~3GSLgaRe$9cH;b^b$CJ@D6 z9ro>ehx1p-&&Iib=AeaEr3z!2Bmj5Qb;R>UCHnoO^+Y8o(MJ|4sR@93Ir? zPKhD4XpKRco??T{CHGiRwGjb6xhLbdnIT|*3Y0y$jLIuz0~gr_EYtWidsuJqePMiT zebq-W_wkz(tii3@sg6?}8h9_-csnbz4a%Pl*T+9=!KVL+xJ&8B^rjre zf=32e{Im1q{4Zb(-fcG3S&Hl`csbQ{4@-U7Q^;W^JP0gWl~iv>6onEr+dd3>Fr5=USr6J7&UgVu5BJ=kiHJnWN6pEuEb0{kyHbep!ZHGxosqF8dS$5O>ozcyS`=QUy=5dBL9&kB zsda9_wc^I+4!#NgQG(Un3ON)$H96Z}yu;qBh9$q`1_-Ilv-Xu;c=hrIuezlZ>2put zca65fL!FVT%l`n0d%3Q=Rg2^t7g^tI8nRq-`L$Q{~I`pv9D3f_rTuF#C)T`cWVVi?u?zxT%PRl+Et m1v#;7cu%~}6aN2H_~GHf^EM4QD`)5~%#=f1Np2Lo*zga$wvI^v diff --git a/benchmark.zarr/c/4/4 b/benchmark.zarr/c/4/4 deleted file mode 100644 index cc47ad70c6f6a2940862eb6b530bc41eb7343101..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy0Jt~B4$XMYKUrlN4O}SVKX0MpQbjxFKeZiK-U*fOKT0=p z^$h6LKRW?49Y9{_Kaj)YV%tlgKR`r%dg{crKdC@^cE_FUKi*`08Z}$kKNg#d1=R)S zKkQv)J6oRMKcF5olbO<>LKTr}4WBs}0KVZPXOvNR% zKOK5&?Xq3zKY<$ljPOKap18s_seeKa{a~eSjR?KcJR3 z*C*xMKkyi(4S)%vKU9zG01%?fKkW3n55Bk7Ki25M?fUNRKN7&q1I$0>KM+ui(};G~ zKTF4+qQ_F_KiKb5&%LYVKh9T#S`UcaKR82l4q5uqKRP%8(WoftKO(3aG}L0;KgdiV zPi?csKQ_KheNq?KKekAR9{;CCKQw%x zoXUgAKfaNm#s2c!KVZP%RUd2AKYWFKJxu$?KRcD(KbU*#KML_BPU!*fKa8gc8iYI5 zKa!(8PaPfEKea5J6?*;bKk&ij?I|juKXKrkF%d}WKY$2&N5?V1KcQ=5BfvB7KV`^J oi?EsHKd`!Pl`7QYKcg)5aG${MKVlnSPsz&TKQKNbt8K>AKZq!p82|tP diff --git a/benchmark.zarr/c/4/5 b/benchmark.zarr/c/4/5 deleted file mode 100644 index 8530b5500d8c6dc4ed09714ebcb21071a0d1381c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy0A@U~L4%>uKU7jR^0Kf}1BOHS|RKhdTQ+j>suKY6=4WeY3j zKVi1?D^LaHKmKqIF6wUIKjAUfEY9NRKfa7(1>PdvKNk?+)>H%SKiq%^&8ObqKX7hu z+8f)Iz_MIKe$w!^Lk|4KO#4OU4Z58KZ_W+43RGH zKhR^QzFZT^Kdd^|=<^2cKdi@K_XA$!KdRw-tMQZ3Kh^QLht6B#KZH0gL$S8sKS0Yq zdG9)^KhTw5OFi_`Kb%b(bzWA;KhEu|v)qQ@Kh79FKz@7MKW!0DR0bjKKgFUPGTue% zKL@b(03Mj+KS;xYgSpnhKL|BtkoPy+KUMAA*Jl6iKWy#lY!2+(Kd1n~v$K7}KUkx{ zPv5laKT}&z77pd%KTt0kb~oyyKXgSF;Z|GSKUovieS6sLKcEVDCrt;iKWv*i9bxg& zKQPMS3n<&PKkD+i1I)7BKPnSuG~cS;Kja8xtdBt1KS(8`$=8VLKh)NIiHhvXKO{j~ o9NfsxKRJ`qxcOP;KXS4@jB%UhKjcTCDA29SKm3Sj_uL}SKea2HqW}N^ diff --git a/benchmark.zarr/c/4/6 b/benchmark.zarr/c/4/6 deleted file mode 100644 index 0525d1dedde26ab153813cf1f429d78762eb56c9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmWO0i&F~#00-b=uALP_UO6_2L(3!VlJXlzN4SbgbeE0L$zuu0Ybb;$C23)cGgVO}MO3 z)Ko=lFs(iLx8T)B_-i|ueJ&-4J9X|$7ezR@J9ea8Z2-fdQd~N!g)TO=q-TW$PYe2M z>IdIrbZE5pVxk4j-3h`hi35xTeOonM22WOT<~flUDU*tx77*JJ(ox1T9hXCp+u|R! z!-F{5@V3D34%m3o114Tz8Tt*Bu0P>B+@kj81UsL-nKc z9Ef0~het=+k)os$mfMt&4!r3N&^q8>oVn+4%zI3EFhUyku@w^<2eQw0dvN+5i#(HM zg>Z)Z`xv4Qo$eS-@$N=ECde}vFSCNoy^(v0au)@QrjJS@_k+&jhKOByDDz5qr6e!X z{_0O1S!+l5;N3*ARu5)Vd9QV)3(1kr&o2Ts8017sx>NLcObyyVml$zloPJJdofY)5 zE?w(2FI2IevId<886m5TKARPwDzt>P1{0`d+|?Jdy||JwOxy6ui0ZKvn>A+u8&|!u zk3DR}O>yCD@g_IcO)e_qmA^!(fb#j}FEi$d_#}(WiQnt_IoA&esA8<fCJTa(1c6D)|yesM3j51VAdEHTH9*IRzYB~>^u&78br-gYxmzf~kw z54sM zKG25qYy4&!FvDHz%Wmq#sG$e*xCe}2_jV~J_RC>j{&l{^&xQupqtZt@CxUGq@tRw1 zD95qF!X2&973^wY74{+U?bf*Q!3r=Z@;p^{L>S2qGyVMk71qW7xE*Q$_e0CcE%hph zc)~V8jtj)fhNO+f&Ctl$nS6o<(w^3{T{f7CDqL@#t3m!d7$4;K3=t$( mMoFRo`zR+ehFEUU-_@=U8vX!PZ8c?5ni-tSzS_Af)%XWg)twmt diff --git a/benchmark.zarr/c/4/7 b/benchmark.zarr/c/4/7 deleted file mode 100644 index 7913f89f40b910c8cf23f56354878f8171ebf041..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy04#SMCMkr^KQ7)q5`h}tKfk&YMTe&9KgvDf)bm8pKg6jG zSGy|gKd|@tn7k_MKk)bj)>(bTKeN|K!G(kEKQ2_#Y9-awKNH8I%{ltzKXfybnXL`R zKLGhiaOHZ2Kb$mqb`YlIKVnT_B^SxtKbBtG_YzOsKM}ZH3;N{bKVz~vW1M*AKZmqj zbx*tRKN!QUT)}?FKQ&EfZ)&&TKcG{xgT>02KmEIlLn&9~KMn{NjO*aqKX-v& zKcYu%Q3@H~KYz;JbVPWZKMt###uYfAKjg)R)!^#hKimee=4E2W zKW3Ts#_t}~KjiCPS#T82Kl|Uz(ajR)KR9BufRO>TKW>lV-Xo^#KV;+aCzp!XKlZ#C zzor7xKU`06q16P{Kf2fMKj%#3KhSJgzJ@cuKY*(wO_V*jKLp|GsMkB;KO%Z1#FS3r zKWO-Gt-%q-KRlp9KMK9uKf&wS6vh|hKl+BO^EXG`KRRO7mI^r3Ka#kRxUan1KS*SK zNw;X~Ke%o#+}s`0KM$5H2f4@SKW~u$HJRk(KQJ0fk5-_gKL8QbFJ%#zKVS)QImW2% zKcZ~}42>1iKm8>-r1K!@KVA)u3-SZKPFvC(Q8)RKL|uH zJ`YaHKW^f1XCm>~KSI=E>9P&lKVay!$)$R-Ka81uQI(y`KT5eTKR<3PmQhUUKj7S$@Qo^;KWMG1j5xj0Kk{?WJg5ukKR~|l z5}Gi-Ke{b+PRM-iKj7%+{R`y4KalG78J}sjKcG=87KXM>?i!oc< zKk_^=cJD~vKZw~uO#>6#KYdT42*!2nKSsP}5#TT1KL9c}8r3YRKVT9gwaJX>KStHH o<@yubKS8pof84#~Kjv8SY*b<6KlFf@?Xn zQ!az&Ke~LB>6lsQKXfJ|ArTW zKX7Sx{SR)WKV%m38#r|DKZcYjp57bZKLD2mCrz@WKeD)_lKI>3KaT^-IUjcDKTtqY zY^)X7KLF~}Rp=m`KbXQ|$OaL?Kj0SmEG`VpKVw2Z6tJxBKYQ7Y;Lh;lKVH6z{0&Rc zKeD1NuoWKYKe~{Q#D9|LKZV4Wz62=hKVZ=YaF%ezKj1dAKxxS4KR?-h7sj{cKZuq{V*HWlKLrHzuS1gIKLsMpy)w<~KVU(46ha)XKTM^R+6^J?Kh9A;Z$+Wv zKmWil%vaFmKZr>sKsM;GKMd>-r`Pn*Kb{fM0|1llKh&N~qL|F zKZYhLnsxTjKU${&N%wN?KNJ&^x@y{uV3hKe<@=SjR2yKXcT5$azxa zKkCDtijKeSKS-H*Q{NleKai5-W=&|XKcKa=p8Nr=Kl$jU?MNx*KYwSJa^+XBbGvKNL*Q+_*T~ zKl)v}TRSh^KgVS*@Q-TjKY2uM*KZr*KR8QmyU_!`KLf}NV00DfKOjt$7vPV%KLId( ozeAtzKiCLzE>V!gKM1Wh(<-0QKd>5cBfgTOKjvN~;OOD$Kf*eRxc~qF diff --git a/benchmark.zarr/c/4/9 b/benchmark.zarr/c/4/9 deleted file mode 100644 index e8bc71280dda0af1ed2621271e51a0d9b787fd09..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy0OISXmifHnKSpCW84h>fKla_FZM~4#KM;%MK9)DFKZGw~ zTMk*lKj#myZOf+NKfcr54(`J3ohKLLQ@N7SV1KcPy(ds-3aKbSvOgIqhoKO+tSoirrtKcL)ho9UU;Kk5L( zN*zDZKfm%N3btSAKY4>N_t4(zKj;-wJAfCrKX!j#>sd?CKQX<14)rzRKZ+5s@~v3g zKk}LmK1|ltKV!U*a6%>PKdiVJUSEdYKd7Eh(~7;!Kh@qp(`TgQKSdd@WAm`>Kf`GT zvOyE!KVXY(67meqKTs-*u(){LKM@0scZ#&+Ke?nc2jNKOKTMqJFPQ)4KLAM2JXJPD zKcrD-PGKGCKU4}cTZp3TKX4D&CidgzKQxa7z)ytYKXB`OpeV|wKWT7jObCkUKdh5o zF9iVDKm6B8ztU{WKT+}APx3|MKT^6FsR-TTKV1s29)t+wKYHqeUqqDTKVX~fAG)ug zKbfV2tD?W?KX84SZl7f0Kc~9&9ChI7Kf{CFS{jD!KW7hVVQ@F>KSMG{c;89rKb=z2 z{gV^xKVVH|+6|lAKQLZnk)@f!KbYMGwOGXIKdj-QpmwC_KMoe8^SR;ZKa}PzTzDqh zKXAVR5M^epKi_h>l9X@ZKkn|QgoLl|KO$6a+W)fFKe9&B2EuFUKQoG-D(?T{KXL;x z!#TL!Kcp2hRo0~LKddseqH4*@KWbz=Ko059KZ-*F!~zfDKLia4WNX;(KXmnO9HDFI zKa5azYl6SXKmHGZU|*csKQ!{@e|ve-KPx~IE*U!JKU{GH9Pkp-KOmn9c3z*;KWrz_ ou%MFTKhHecFQhK(KU`km^ay9tKX}O$!i&J#Kin~ap$l-qKMf9&cmMzZ diff --git a/benchmark.zarr/c/5/0 b/benchmark.zarr/c/5/0 deleted file mode 100644 index 5390adb4ab8b5e2eda04a31bb158f5d5132cafab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy0L6^D)}KP|Ka4IeQ@NPIKMPuHc!Rp;KaMW1YW$h$KM_N* z+EY5~Kda+;5ha-GKX6fHKPZyOKUE`=NaPgbKQ=>Xvqj_7KOpC~fB#68KWMEsvslHt zKYS@c{1WEFKS&k|z`FaKQ4P{)wGu3KZcjZjd94{KTZl;YTBaTKY50d znq4vLKfPl5WMA9hKRiB(pG&adKmBxS^za?(KP*g;)9p*@Kdn3N@6{CUKeW-ANRZFw zKR{rGMv|0(KP>Ae{wVLjKhi(CduTb?Kbe3H9+P70KbTX{mwMd9Kgc9=R7)__KNYnL z`kC75Ka#m4O`wD4KXtyfwlC7;Kiq9zh+nAMKTxeT(HPjjKOnhJG0u~aKTJdafsLN# zKfjI{RD!zgKbeDq3Qu<8Ki5j`3A!lgKUZ3Z@YOizKZf#f*CQzDKjo+5M?1*sKLDEx z`b~qMKfp(%yjH=* zKbYw?<~88AKQN=0VtUo3KM;aVYMa39KX7{=dE&*mKk&R$Quuc0KfeO7e9HCUKeXnP zZQw1}KVZjrj?)F+Kau^ryw@z`KdMy}DxKWlg|!)%b{Kj6l*YlgkEKVWOICRzHqKSZO?!pKj6P*Luci#KaQ+< z>?Q-%Klb^_KpQ#fKRBY!?C9djKW_F=g{@)kKY4@}ARl_}Ke}33Cg70RKdNqMdL`%I zKYjLw0rdssKZpg68S^Z#KLGTB;w|ySKO5cca!O_9KNbbJ`TEq|Klt15w)s@bKg4wl zlwjH3Kgzs3Zc6#rKSuTuH@8maKR$!XJ4v4GKdjV8@A$FPKfH=vMp9SSKTJ3fy8+9@ zKU!qS;-f;;KQ?xYxm}m+Kc7nKOxtgTmixAKg_Mn oN-S!|KSu^b2!VXyKdj;F)L#6?KgctXpR{#J2 diff --git a/benchmark.zarr/c/5/1 b/benchmark.zarr/c/5/1 deleted file mode 100644 index cfbe0fe4a6f2b577964aad125979e6592bda353b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy0Ch==ISAD5Kkxy$s*xSfKPG<*&Ro^xKh&v}40r0$Ka}Ht zAK>59KQsQb#lOPgKU~Fa@e%mfKU{DB2uRc9KdJ!olKftO;@^c*M zKSDvnGxr73KTUU_wdKhr_5#dN^pKXk;I#xRuUKltiWRkmrk zKVS@D_FieqKky*O7*kNfKN4!R)9EkJKSKf;4f>DdKWDF>O1kmmKX^xAjtOt$KLJ@~ z>-i+>KiNdQ)mfT(KRsOl$H>3xKL!Z2$4*-2KY-OwKl`Dn zKg>lC?QKf)s;b&s^)KR9A)efHGYKLB3}K#t6YKjdy_iyxNUKPYUB z5}h{QKU^i^inN~9Kj8S!j_ro!KgkQ^@Y5&eKiNCM>PU3qKNP^!63GP9KeC&6(Ikr1 zKemVVKbRoU z-5o5`KbubL+D$9vKhZ4mo*07QKmM`q7m~p0KPbGtPNZbVKl=3u)2&P2KWi*SS4D*D zKZNFtu9qOpKbQqftK`HVuISoKZ+6%_kR`BKSG%IvnXxjKlux9T){NtKZ-~5 zxa11pKaP=q?HKIZKWb?4EJbGMKSYXleJ&K?KY*94&!@4>KNRj3$4hzWKY%7>$FK?C zKg8x>BL7vvKSCZT9(W<$KT?aX=TWKBKPl);PY`V7KaQC`8X+9%KfL&bWx9~vKfpUf z0(_>JKS*b)Wzw0*KTruoQ*O8CKTmj^eDF!^Ke~Gs3>I+RKU|g-4g=ikKPY-EL$TMj zKiD_2pjYngKeSl>F*WziKOD{H`h8c+Kg7;cW9*mSKf%Zmr2Kd2KLDtlJ!>h`Kir~p zTbCNuKOnCP3#uFMKg4{&Kv^=}KebjI9YrYOKcY*7X!)q=KQki<$6(s)KQ>++=vSrR zKfu*amghRjKjJX1f@(Kk&x+b4jA zKV5V>&&rAAKMx+gEVS$IKa3|v9nCD%KW5Y~_UEMQKX5I|Ko*YPKRSBnH9D*AKOji% zw+ip%KY9?9q~=rJKWLGw0aDt_KM6oU#H3^HKY+}hauP7mKQ6eE!2_$HLJLKU?_4fQU}uKSw7oE+6IYKa{Y` zfLuz+KdmtM^-Uk@KgH=Zh^=?wKN`aND9X>~KMVzvOFdlbKS;ajW~6YxKQ`T=>IOFA zKT_c^U4p>bKZu2?j1YXYKgROzB-0__Ka3)-=V!0lKdyq}J-lY*KWfU0+;|x4KXFh2 o@S=_3KedSypp%v2KjC3b-CZ@CiYKgxZg_Y8s5KXgt`LOqt$Kk|SKV2t|UKh zKPaGWgcnc3Ke8%l*C7?uKg`czwU0&7KM+qomwKr0KVa!r3>GxCKSn72e{rANKd3aC z2`yXiKX6h9^;F=fKgQ=v%AQc{KR`>HF;IuIKaVv4v#J~9KbUCUc)M=zKLiH>Y#BJn zKeTgE$In*HKX4<(#A+qwKVW0VonQRXKeWL_$OnhPKkz4LHj#a|KMz9%YfzHuKenB@ zbnb-bKYYvWUAjQYKNxZ+7yJ?BKN$O~>?r5ZKe%zV8Y?y9Kj#0u_(VwPKd{UJZp#9@ zKT6US#u@t4KUqO9N1ck|KfFHO+1WJJKLCaplRHhEKW+g}_mjBWKi~{Cc~=|LKf2jj z1yU&6KUh?GcvjWXKVYvr=y~FlKex8h(kcoDtvYKj_{C zI)whUKR~NaqD0)*KR?R87;=c`KWID{?}z%dKd?GsRdaLUKmV5?{7FsZKhP1nr1KHj zKlx4N2jG_BKU|aG%jFr=KVHuAB!7qNKW6*W*$o}iKg9NDXgOBPKXG4P6wYz(KmC@B oBvbX~Kbac7*pP(dKah|oRFPk{KX5J(*w6mAKL%(yFGL#VKRN-D82|tP diff --git a/benchmark.zarr/c/5/4 b/benchmark.zarr/c/5/4 deleted file mode 100644 index 7e16157bd7a28141899b9a91d3838223f5b1b0a4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy0Fc1pQP;-QKWZow&JljoKbjBl=F79uKk9fEN!7^ZKgXhd zuOMFRKR)@gF}N+!KUS>5nJmNTKiML?3MMz|Kc36cr|O90KTL4B`kZF!KN$ZczvI%i zKQ@YQ@)_pVKT0d`&O5>7KRzs`RU8@OKQ?zHsnDm=KlQfK3F`pkKRGgv@0_*jKh8Ig z!UHweKU}Oo>L;S_KaO9uMsU>9Kg3%hu9Q2@KY;QU(X5`*Ke|UT7q0^AKe)*pgpDb& zKT;K9Y)J>?KR~Sg#?eQtKXK@*t-(v+KVQb2Y7qJFKQ=&gF25G&KfLvj@1X6?KX^7d zY1KF9Kg^#qS$;>!KL9^K0d&Z8Kf|3$8B=`fKd=v>5e25|Kfp;27i;gnKTJ*m%$3jLxKhRBV==Oo;Km6Rxi+d8uKYlwKXk|r#sSsV zKNNd%j7A>iKNwK@$EugWKgReoybqw%KcR!BZkdeZKP5m=5z`InKcE_V&jV-6KR$%4 zz?mE4KRNvwW{)ZAKjoM`{nfDMKk#dEu5mNfKh{c#Y_NCMKf)L?*gE^)KSA8?!3zEB zKPTw=1ceggKfu0*l4LWGKd*SzmN^XVKPvT7v<-*Y zKj*JBmfP*)KU1kiMhC^}KYt41twe3?KV~O{j_}6PKY%m2UA%OuKgSa)S!mwlKg{NK z%*k5NKg_h`Wcs+>KSGKQIGzn4Xo;KNu?q$>Js2KNu2=7M%OZKfBPxJ>34_ zKLW+<&_;mkKTf4B4n4-&KcI9eQe(foKi-W4JW90HKT%yYR(dDwKO8ObYj@AyKRA^X o^_B?hKgB}ND*-IxKkihlTRwQ(Kb9d&STO1CKSg6XYHIQ7KYBu%d;kCd diff --git a/benchmark.zarr/c/5/5 b/benchmark.zarr/c/5/5 deleted file mode 100644 index 936750d67db31d2c21744d86f9213e8d75a31ec5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy04%=DsZMe4KOOEax+3-MKj5VfIVzo)KNzgXK$NevKjzAr zT$iuWKjv!)V0RbYKgU)|6MrY-KX_efh=kF(Kj5N(W`x0KYt)9*)rYcKfsdNDN8DeKO<(VaX3ToKhrthj%nHAKfU;k zXhNstKh3^F#j+yqKlSsiqFh1iKMOO=^4wzWKTpoj^OXneKS|RPOb1ipKVxSb-d70X zKLCi7h8cA*KgE3~F^|OQKLr8CC^Y-yKLDoQKKdbuKdi6MM7<=yKT5i<*b?s0KiG0T zp@U7Ki*MM8J>&hKMkSK8mO`8KbR9n zb8;5yKT6$WI4gYEKibLy`G9xgKVbt;fD$0;KM_Vzi76Z5KlmXscx6iIKRVs^T&}C> zKOlSeR7;eXKaXWi(q_$q_KRuJH#z{)$KVY;jF+wB4KQRWr o=s3gcKfPy&A2YS=KQ(UVU21^uKc=56OS1>nKg8vj;HvJ%Kio2ym;e9( diff --git a/benchmark.zarr/c/5/6 b/benchmark.zarr/c/5/6 deleted file mode 100644 index a2e3cb746364aacdb954d313408a24ec2aca379f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy0QTgMT(JJKX2Bw;YSkgKfwKttM_*AKLDwY?wZfWKTO8{bKhUw@;>-l% zKR_L0ugm(TKLT<#H<)tnKQQ^u2do0#KZ(g&t?}LOKNDg_BGv!rKUl0RnhTW7KhcUR zF9S#DKMUNj)6@X#Klg59wmbdcKTJaHnQZsbKjnJ*hO)roKS-yv9ome)KjO79$~yq& zKZ^r+#5LsPKe1eVCO`n}KOo~NBjzfyKZUFZXRhhzKiI=%_tQt{Klt}>ftd>1KeXG} zU@aEoKQ6PmW5(0pKNL0l%!I1mKgjn=P+(ZkKWIry2KX5Ks zTlc!lKY+i!V`^NGKc=px%n8WXKRkYZxV@h4KVMfj92vjhKfpKQId+u1KMF-so~xwV zKO~2ZndO_oKcK==G8F2fKd7YTPU4%;KQ3{zh}OmAKf?+sbKOtmKcu6=$kk`)KTZ*a zwFUX*Kexzl^k+ZkKhVUoJ45K>Ke>4_6vdwAKbTtU0C@wuKM-VzpMg8yKMvGQf8x#2 zKPX67DmoUkKXIx&)#=;dKRANTofXREKL;m{k{&JWKPtm?x7#o3KQiB6+@_1-Kh%!? oS;Y6tKddOQi0}x=KOiJev*ur|KaMA`#LbfDKY|3rkFzc0KZ_EjxBvhE diff --git a/benchmark.zarr/c/5/7 b/benchmark.zarr/c/5/7 deleted file mode 100644 index fee41ed0224e4ff46313fee992b64176790726fa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy0G^%{E_I6UKVZu6?CVFIKMDG6I>q4P-Kdf%2`aiYK zKjZ9mkwv=TKQcMHi#asVKLB-aR@%u&Kc0f7U~+%$KO!_JP{73RKNr-D*vrrDKX}*{ zKREEzKVvJGlcCn@KUhrSfC=HhKg<&^C;h(0KM=Kgbt>?Ja$6XKdi)U5k2eEKQj)5A+qi0KS**&v#aarKdQ&i=c5eNKdwR+v>pWNKgOJN zt-p8MKW03jk3s_OKO8*EQyCc4KNxKEf?H_dKN1aq(r(|>KY+h;(BP$$KX6L9L~%KV&ayBJ<KYS8F4l4ZIKPqY^T~7GyKO^Ops%=)|KiJh)s4q&gKhPNiUh(#2yKRKh2Hd=7+Kg7+8vCymIKR-o!%LUf% zKU(oR%Y0DYKQ5_S87}?TKZ9M&Q(`&hKbd%5Js}qCKcp773p(Mz5KcXSA$U!F8KSyb+hLDluKVS%7<3nVgKY(;QuvD{u zKWwu*IXvOiKhVH>>0QvKKXPmFoNOT5Kejs_v*+dNKYDSC>Sz4YKYc2uBJ5h`KgpZI z8~R4(KY&@*DvRr#KTwP{z`v-cKQbM>c)tAWKXw}?fyCI}KMyPX z1A@oyKkKxV)q(otKg?1t@`Q=PKLilWm#viIKeC|fTp$Y9KTPpr77U`nKfK&?rH%#B zKk!JdO{U_~KYh~}Bg_NrKSsPWe3v)qKSemX;HkppKb9Cm?3StSKX?NHI{_8bKcbV5 z5r?qoKLF`d+!+*pKmBUpXZ$+nKWcY%mlreLKjZ$*L*@?SKRMrN?Kcu*(ggB4gKXEEJ*BA8SKfx&073ul!KVt)u(;z43 zKlShKPuVh>Lw`GKYQiPdB`*8Kc#D^ z?5suSKm1QTGpyj-Kc+vx1PVyqKQv5Br_v?gKj4xv#nA1#KPEpgqsva{KPba3ZiQXG zKi>^RJrX+aKcy|GqSr$2KipKZwJgTNKQKx*UQTqXKWuZsZ)Z%{2KQLR!isD(Z zKX~z?i&uQUKTHI*Z`%ahKX7_~9vfTkKf0d>sI#RKMLFsPKWp3KTGu1BZ!deKfpE=*Ztt!KUkarF^fgUKL$=CgmlQ( zKXNDg$~M^KKV-~mU2Jj4KYA4Brngz`Kd0K8VBo#yKQh1S5Gj%9Kfpm%yWFX&Kd|9a z$0z%@Kj?jw5Oo8wKg0=JJ-DO9KkFbJA&~*#KVaUlcNa06KWpk(gpsc8Kfvk26fnZ) zKcLH^xS&KmLeeIA6rm zKd|Z9B%qJ7KbUqJ1CnF3KOX-Nk&@5eKXqBVLrJRbKQrvznx{hIKiSWNgN;V#KMqMV z(U82=Kg?8;V+}OJKcGQEO#?oqKjQme&5KS9v9l;iv1Kd=m!IM9CIKk!x=fM&O`KLYRNIC^5ozfCi`KgJ??pksO0KjV>yT|V>RKL{!LIF=gYKZ-fjeKX@OegE+s! zKTb)K?uf3{KNvkAjB|R=Kf(g@Lsj48KY5#80LgpiKkh$oVXCI;KUTX|>MY&VKafpP z8kxf7Kcaa)0kYoLKL`|fc|hjgKNjPr3Lld1KL7ysq{NKMKd_L5R~gsRKd~*)U_El{ zKQ^D%|3|~%Kd`{92Gx$FKN#2hMZ<*SKLEosmaA2CKPR#z5wu?IKmG&$Ox)DqKTc5l z9jQa*Kj#((mSI)tKTaDTUi>ECKO~6wRi7uwKP}M?=UwFNKhl!R30w}|Kfyx5l9K-J zKN>a^mWs9AKXA$jf?|rGKU(_}2UBh2KZXN4@Lt&5KYi0)3cKg%bX5KGVGKUiGh1UHw*KRP_ZS5wyIKRjo$RGUTB zKR%Y4L7_m>Kf1g|f=9OBKUtBjE+6gTKc7_N|HL%yKfOX#x0G-1KO#;|)bA|nKQXC7 zC&?e>Kg#S3rgyRHKPr&vgHk8!Klb0lM)KU`AS7bLUVKQRXZV)!cMKTLsbyyz&&KMb<7j5>zpKipbXkc55g zKLGFnW!IG1KO;%ca2rJ9KR2CCmtS_}KR;JZ24UUcKNG&%K^4vFKR7O>t$gq5Kgf4G z8WcvhKcrUSzL&_>KYnsOeoCs>Kk<<%=>co(Kgy~_2nMw8KRzYot0&ynKOCHGpNRqM zKjy9&BX9uSKLk(RRlgM3KOT7?7wU<;MKWAX*Yww1_j}KPykGLCPKFKVUB8=%Y8jKM+bK39);{KZf}6`%LlVKY`6} z$?zECKU{wCp4!dNKTfk&$KWT{KZDhIKN=hFKWv2pFLlYuKcO>?2gQWvKTY@@xZHK) zKY+3J$+hFcKYY^_Wd+s6KSSWMjAp#+KQSb3dYbv-KU^ElCcow6KM zW*UXlKd{G*9;F+mKhbrJ?9+Ke@+e9>N>oKlDs+W4HU| zKf8~XCz7q>KUyBS>bM@`KZgCguH}Q&KV>j-)hs*UKlZvUv5ar%KP9f!W{pJdKiTd7gKkVniWZ`D#Kg6TeMEhRW zKYq@R&gG%*KflSr>znD#KLD=*jF`fAKPW9L-uNWXKW@04G5`Po diff --git a/benchmark.zarr/c/6/3 b/benchmark.zarr/c/6/3 deleted file mode 100644 index b7ffe407a230e87106a71fcc43b3d3cec7239823..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy0Ic-K){xKjbV4 z;KEh!KdNF-Z}-yGKd{}S)q`=YKda$DKP?pKKgbl4Zb+imKZUKU3(8%rVU9KcL2qyLArLKU{2w z@!8+$Ki>l~B2aFJ-c(lLKm1UWY-g_TKf=ug0fNffKg&yWKoB78KRD-={!z%^ zKh~jx4PVXCKgpJsXGMKZ)<+Px3(IKR}t7n=B33KU;UIIk;W!KYH&( zIc6N;KRCAd!gq|`KM>(;wuJZMKYJ0B(tJJPKg=OD+w4)sKWFhqM73DsKYZDRSm4*@ zKlU*3e0N^&KSP@vP2R@tKMr0g=vMF2KjQS1>KFvmKQQtE%?|q7KkN#mk^;o+KgbV; zh0BJ;KPjBJO?%AXKja+Snh(w1KjPIN>nu>A5Kg1jOmMRd@KmXzEG>Jg$ zKU^kA!92mzKP3>MW6QbVKR^c3Uz)bGKldjR1nW8CKV4n%ev!TCKX5M+E4k6hKlsb@ znr$??KaQOgZ&*;?Kj)Qu)M7a2KWK;zXn%pWKOhBUukyvxKMv>e^skZSKldB(xClJ$ zKlXLr>?5?|KOn_L@!<>SKVX(=JU3tGKR6l%9&WADKhm@&vJWoXKeyt=74nI)b#ViKQJw8$J-L* zKa?wY{lP@rKlCh(A!YB(Kb}`0El+#yKhS&r2_;0YKai|)O{Fd0KR^t1T`huxKU8C9 o-AF6LKX7o|wrb$lKcvYc%)%4cKm2FD>KHK6KM<;@{e`RSKcDoV?f?J) diff --git a/benchmark.zarr/c/6/4 b/benchmark.zarr/c/6/4 deleted file mode 100644 index 15adfe907c81d7ecb14db21b3fdb4fd36530afa2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy0PyTp2>dpnKO|^~w4hGQKYt)IkIN$NKYFgZT81#vKlZXb zKW}m5KPdQhO$7YmKe$az@8t*BKRPy{y{gLVKZ#6B9)h&(KPc^YG;O=;KREGONzRkl zKc5v^TI5XNKaQoDM!$v9KXV8-D;bRKKNL6M^^Xm~Kir&0?q=}VKl(&rk^yAXKeQjM zuYsDxKhnG(n_|$@KQm)RBW2s}Ki1AHJ#zW&KaSb{C-FSvKX~d*>#gzRKiu$A7-1&P zKfoqTISoGIKgo@P;4vcNKXtk8DbhaUKVr$maTi+SKX_k*vA}ZFKd`AVbXV=jKa``- zR5rKRKirQhMU#-%KhJ|XBWpJAKQFkvHx)MIKbSclE(mkKKL^h#{fH0ZKTgOrA-QVS zKY->Q?*}HMKXrC>CNpR6KLj;#T)R5QKO#-c)=z}sKLmgt1BPhdKWaQUQ6BENIb_Kj0_8(EswaKY(evqtHk0KdoZ`v`NhEKN0~vvFP;E zKW=!z--4g+KR_%@3?&2RKkFQE44Hc9KlHPYz2^AtKi!sj!7z~JKX`ivB1h!bKWM&T oL^u}8Kcr|&zG1<|KLJ3|!)cM|KYrX3hxwf3KcKyS%^OLgKT;czkN^Mx diff --git a/benchmark.zarr/c/6/5 b/benchmark.zarr/c/6/5 deleted file mode 100644 index 2ab89792c356bbf5b4e70691a42f6c166d4e416e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy02YO}0`CIgKT=h7Nj5a+Ke0=o@L?KjabaKs*%HKiD>z-Y7rkKQ4;~@hqg(KW3q~ZioHVKUahG{~$Z* zKSa1iW++q9Kf3=KkZfrHS*!$KZH{#eN4vD zKY(H0lEzNNKeNo`yk!09KbQd%eUaF+KWwD$DIhJwKO7xuh*b^6KQykxjKKdES>b~7C3Kb_O)58ssJKi~SRK~BctKXl}3 zY2C5rKLDjoA9c%yKSK-3%dP3>KO)~e_cQzAKVFarxT}NRKVFA+{CsWKKdF!WrE1Ua zKlC2sSIn#7KR~QtSQ8VYKkr6e*}sV4KMIBozwhPVKbYS>|DWp0KO}?_8w|P0KQ!9A zy`vMsKlIgt16(@BKLD>S*QU~PKVN_)5)^jeKaRLVEE*5qKkpgS^1g)SKTQx8ITgp| zKaSuZolQB^KV%w#juN5JKW++3CFkbjKc177(+%_NKb|1nWUO+~Kj{BF0TM&EKN1C6 z&G(+vKf{q!82Gg8KMbf6PEV}NKW{FmS`n-3KLnt5p3!aYKUf-3{mq-#KfqW@8VL@| zKk{OxOd+k~KY;wVJm%%yKj49L9Re8WKPucEemZ#7KbIe4A5f0xKd=@nwWF?~Kdt`s o>yXLoKPH98yB`wgKYRdijg?u)KN^jrJa%H~KO4VOx65MgKgckXZ~y=R diff --git a/benchmark.zarr/c/6/6 b/benchmark.zarr/c/6/6 deleted file mode 100644 index 26ecac0269cd23f34c5df12098d4ca7a092ab161..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy0Nj4}1Ih}@KNKfjM6vPJKN(=fN3T=oKc2>*{_RNVKZE^W zVwwBrKZrDQCWG?0KVXu&A0tn&KS0ny?-q-`KND5Y_dQJSKcIT&G@>%WKO{p7^e}A5 zKkgz_u6k6}KXd9a_8)fXKe+is-hw{mKcTu-1ttdXKZs!urcqMTKjpFc((*3mKcEY- z!~e4FKL8Z%>FqbNKO{ygfr1U#Kg9+txI*yiKNx-UHgJEkKY6Q#?{5L^KSW9)Tq$7O zKVVmvHQGhzKW);=zACNZKkAezP6*W2Kgf&aWe;7dv#5$KhQZVZ&ZcFKfs&>d=E3ZKNsKH1#hC~KWfEC_|-q; zKjaw7nRbHUKLEz~Tj8>SKS~W_z|z##KXP=S)dOAHKU!+7jN{?vKcMdBJe0ApKm5+8 zB=1k}KOm+nbFh7(KVbca!gvd{KME{m<~ZNyKV-Y7CN@{yKhO3$n)0XWKQvO1e)!Yd zKhR{KQ%V5cKPWcopDeoHKMrFjC>Sc&Kd=N(e>*zZKP4hzYU7yUKm3QAaYP5fKR#q6 z?9Fo1Kal4T32gSiKkKg85rd*}brKMg%Q!aoS?KRC2VPYKr1Ki_|arT_QjKd|amm}lIfKge15*_TSx zKQXW5;s-Y7Kd>EWUp!fKcNTF`4W@uKUhV+SrSUkKX+M{F8}}l diff --git a/benchmark.zarr/c/6/7 b/benchmark.zarr/c/6/7 deleted file mode 100644 index bb7ecc1a86eff2bea0df293b622f76b7aeb8c167..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy04Q;NoAfX3KN4@_bojIzevKT0k?QXg{bKVl}=@_IhnKVe$h zHvmlUKi0?Y|8h~)KbZ4+uQ_ntKh4d>)SFl0KmI}}rBDgfKd_5od5V+jKeRGEqg*=f zKh%57=n2o~KhVDKPW=2ku7PuKfM!= zbcI_v=KMV~$tt*c2Kjb0T oV*B>YKg6*JJbh&CKR_@AZnqr0KTynVLfsJNKR#9D^5j_UKdMTXGynhq diff --git a/benchmark.zarr/c/6/8 b/benchmark.zarr/c/6/8 deleted file mode 100644 index 658072aa092efe8e853353624c957dfd7084d49a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy0JL5s!+0FqKgc@o<_uo$KU-I*GQd>qKXL?RM-^}6Kk4*# z-Ah*KKTwr34xqicKjsQKFb?45KRENfu`*}kKeQgij zKWMoEWgkr8KYs;V0;b&RKOlKKQvW-cKTxTQY;E4+KQt`XMT@V& zKT`+btngUjKbEZWGCp(XKR`&Kz7|HrKh+k)cB=#8Kd6KYKljlJ8T;MjKTD1QhEOT%KTIZ+UqPwrKfpS|ffo4OKb7p5TmS$7 diff --git a/benchmark.zarr/c/6/9 b/benchmark.zarr/c/6/9 deleted file mode 100644 index a4ee80410d78030a36cda1b08d1829a4073ce042..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy03ZN+SP87^KaPIfJ}2noKeoT~8oFfDKLTuCVb9psKYb*4 z;ROoeKcF38yXFh;KY_(u-fnp8KL{Jm7EO=mKk&4O^rWn!KR!dBz2blAKZ9?bIgvo% zKcMIT(?lwoKZsjPg=r?-KOwD6$p}H^KmU?tMP(1?KR{Eb0^rq(Kj5eqJ$FmmKlF~F zCHXhrKXb~;A>JJ8KVbMyJ>4dlKM?6rXG=A)Kfv^2q3|=@KRN@FT_S1gKOA(-(VfH8 zKb#|_|EFQaKUB1S4bFwiKYT#$zOeD;Kc1BQrvnz}KXx3Ls-IBnKcE$IYUl&tKe+c8 zgYx6=Kb>QFVrh8hKUBMKD)n>AKde(CoH(V(KR|z*tqZ@qKXeb6$w!6JKSA2~>*@gE zKRZv9|Jr5aKQ8tbO)7)wKVZ*!NPnxkKhTbf8dqAuKcHGu0#U}CKM0=65Yf@jKZaQC z+LmD1KXpUnn>zOHKSHbCzRw}wKm8WJE>A<^KmN|vnA{iNKi*Z7LC&1)KZqZ~KeLvy zKk22suJ*FzKO<4!@~_?LKhUa)d9>ujKg6jYBvOdYKltO_q8hHTKfyy^Hp=KXO(^G1V~VKYX-6H>lh0KdpJ3^-(SFKNx5mO4l6A zKi-<6s+#2MKlX*&)F)`|KNQ%RAHgu?Kav5Wb(iJSKYq2Q8>PtXKj4jDndNNmKiY{R z9OjeXKdSeZW8_TaKS=7t4y<!YDKk#qf*ypC8KOizw)oriWKj14920kR2KhK2EpROnC zKU#a$wdEk_KR~p0p%|vDKLiG)vO1x}Kj_;@+Fs$bKQf?fYKR@;KhrQzk%}YkKTJ|x z87+rabAKR_Vxif=!HKV;~qOA?Oc zKg2xQFy)THKakbMf4&y#Kd{xQkxi__KcHM62;K4FKO53NlO}EGKfqlIhpfSqKln>X z=M;LjKS&|I>Wd_|Kkhj)S2AhgKM)7}a=W^zKXfboI_@LDKOjCg)@~;1KWVBEch+|0 zKSH(AAJvlJKgdiAdaO$7KeI!(nd4#YKd_BNIo!<9KPeFTvt_65KQLAx>UGb_KR{NH z{pAakKP0}NLePWVKeZF(CwXq|Ka8WaELU{NKLE_AVkq*cKiISzT2m~!KNbPFoT^>m zKd^TG%4_|-Kj2}yhGY++Ki7?xqI*Z?KZA)}jmOgFKUMH*8*KOFKatkEI=`#nKN*pO zMq5JUKm6YO6C=CKKRoHO;FxCAKW$#sMooY0Kfu*oId)RpKh-9xcr)tkKNe~P6RLL6 zKYp`dxl+CBKPHjV$874?KVE>k=F?*4KLz%m1)DwRKc7^C#16LWKN^ICz#ydGKQ1r* zt^A(gKR_9f3eoSNKa9xrv=MIZKLE0eb{!C)KLS}64inDaKS(iyXBm;lKSCRtryt+o zKfw0L&LSL;Ki!|XaUCe&Kg5PC58^}4KPo-Gn{Q^^Kcq3VezEVKl<@TQwtE*KQQ8QvJ%O>KYpbT4ZOkQKdwJub89}-KO{Q1xAM!) zKQ6n9MaqopKYVb{|FaP3KN#ODRN&XoKdQ^~Fa1C4KjiYHOxv07KeMael>pA{KQHlc o8((biKYV=LI7LXoKe$0M?++C1KgqwRj8b^)Kh`u>A{8j$KijC30ssI2 diff --git a/benchmark.zarr/c/7/1 b/benchmark.zarr/c/7/1 deleted file mode 100644 index 50849bc0c0e06943243b6bfa3ce61597eff1c2fe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy0P%{gpiAfOKQ4#&IP06-KajjJpL!a zKVT&6@G(xdKMHIGvgGB{KZiVVa2;vtKOmafydW*7KX_9J_gIqdKSl_71GB-_Ke~Wv z*-qBnKUQQV0!-xVKYF*+M%23GKP+g{Fw2(AKLHucGlrV!KWqo%4pPq9KWsCqiR1Lu zKf)>K>rKYhKWImZ$GJq*KYr&M1A7YAKhT3NG;pZ3Kax(HMYww2Ka?FNZL2BeKcHjJ zB)%rIKUxvoS{Yu_KLBf2>Y~KZKh&%}GK{9{Kb|+66v^o5KbU=LimB(iKL8i;M{Qum zKR{|61f)L0KcL7kAQ=0nKU5h#3W>zdKaz(@Y&z)bKkL|WLI4WwKkCo-`TJ(zKlS(f zYizscKV)P>9k}t}KeRT4t74YLKjfT`R=3vWKg81(R({^kKh$km3NF*ZKXkAB5*S+N zKQx07-xsUcKL))nMMNImKS^52d9u#uKS%)MwopdeKg>X@ASd?NKO|95wyl)TKfDJN zoSXKeg@OKhM#idZak+Kj7^93kK}IKX4A%bNlGPKWN`? zoY5)ZKakO{*gP`hKX~O&K3nCbOKd|NragKjJ47zkD3vKTz!D{k$*TKemnqr)(SGKk#|woFZhiKa>l%v9Vj(KN#7# z;7fh6KU&rqAN-Q#KQy37OG13mKmTi>zi*G_KU6!Y9G7?BKS15WF?M$EKQ5217&2tk zKaj1bm9#L^KisLbTh$ooKN7Dv&{OZ)KeLwJDtck-KUu?HO#~3_KbfqLBnYhHKRq+G o8-cd%Kd{rIJ+Q90Ke}?^8glsWKeQUs_gQ4)Kh9MnM%nx9KPBCqUjP6A diff --git a/benchmark.zarr/c/7/2 b/benchmark.zarr/c/7/2 deleted file mode 100644 index 1c1e3981573b662c2b3325c5f7a46f3e8e45e22b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy0CWI$kXDN3Ke&c*`d5j=Ki`Qd0SUP4Kd4)%7IEd)KjILu z;?I2FKO17f2}i}_Ka1H0*i2^ZKk5Ur)w7`4KVw^k83!)lKNc{omjCtBKU9|!7?L8^ zKgfjHA93;3KRT{k@3ouLKM=i1$%b2}Ke_TH4fgcyKOk)B8`ONeKkBKG8~EViKd0tv zb$&PCKk2*?9LIF#KU!I1flt@qKai2S4x6m7KN&raNO~*kKL)Ru%oo+^Kd{h0uPa#1 zKU}2cI;%m`KSaS}$5(vdKl@ruuaj%yKZc%~$aKL7_xcgdpf zKTc**3B1JQKe9)#=AgOkKZ_&iQ@!KjKX~V$q=ksFKY)=7r0T$uKTi5&P@n+jKd6jV zI!|cEKN|p@BS`SzKVWh9p5Gn5Kg@T&j#0hkKfCeo5A@pOKL9rmI|D)OKj^Gi!e!aU zKlWZOHL5n^KLE<6czs=hKYm%5U7E7&Kg^AG;Wg;ZKR08ojY>S>KL8Tkl;--hKPIDy zeN8y(KPUiGY@O}rKM$k<&!NieKhpCbTK6gKKWYrnUv2chKhWCDG%wNCKQy)3nd@ciKhH5?eIOd?KOb8S o$yRIRKeB$eYPQbOKWF1$JXhxAKM?QYNbt4oKlEn)I9u<PUB`$m=R?hh-@& z$&ThU#AeId*2`M0tn6xQm9|})B<=V<4>wd~GGI4;NjrzoDlAtv<>}OH?9wroRqOQ(2%-sMPaA zb(l)YT}cymLlWLepJq3p>Ml8)%+!IDmas|^(t!%$u`x2e2N^WI>EUk!Dsn4JKG$_& z^&Pv{zInsAQ})xtizCJtKhZLWa1gCaq*rC^8l+LBUk?Om;WM61W;uCuk| zM+Rrx!X-F&V{0v+HG~LKWEgX}8REHq+iq5A;CVT8)=tJZ?4WJ@!3rCKU4AlSac(cD zu>mpF-LD~V{_ynzYXm_`W!})P5op@x&i~_SfPWq@QEpP;qC$BoHm3nzyHc}Vt;4uw zX9kM0z9D$Dx@qwY3mEJ92cvmLII-B?bv1b)C-iysN-cOz>!kAebE3!{>4!X zGi-2X_*gj$49LH&Q!V@P1*GfS8(Not!l$gHw*|>1=xz7rg(PY)$!}UP)vv|259MpU zlMEpCu=$j~Mi5KgrH(m9oF)-A7U^UlB>(2NWq(9gof~_@j23X5u9}$&F*cthL{kcy zam6=z{R{3edX=TFZ;or>I~GY#b2CCH=phCP`q22KE^6%TAQVNV?^cz`AzQc8!?0U| z(0eM)tGz~Kol8jP-dBOu*gUHx!-!T)H(iTVL+ugB-4mn+Ew!A~w!#K^rSFO0%@zUW(w&e5Ud0MFbr^)@a3J~+FPS?Z@U@hfkX69Bs{sVjun|A;J diff --git a/benchmark.zarr/c/7/4 b/benchmark.zarr/c/7/4 deleted file mode 100644 index c51602cee1b43398ad150b00177ecea825260d00..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy04(jj>y|IUKXCTA65m{@Kk&=JlzF$mKm62LG-*fFKPbEV z7&kS=KRTK)kqxTZKLBVR+GDejKTy9dfn1QLKQjeG5--K=KRSOhswj2bKfFbV>ut!v zKWH`fIm@x!KXC1N_I^_5KSZL{eR`HyKoD`KUb8{#Y+zDKWO&FA!C@?Kbqsg z%(l+kKft{=qzzcbKRg(Agp*k5KWK}*cpdWXKlr*;QTxH}KMT{q#)QA*KlsOOFouE0 zKj2pwaFP|cKd^i9lyXMyKSqgol&9g~Kd;0g2VI@+KZPUqi=R;CKlsT;SP$sLKd5=G zG0DEtKN~X^+!OBXKbbTz^XOphKY*<_R@`!UKSgEZjeZE?KfnVhjpF8wKY&8LD>qPt zKLHy|(Fb|zKV<3?+;%$BKNfu!h7YsmKZpW>>*l4uKiu^LuCl1hKbUP%=a*Z)KldaM z^P-vJKY+4`_eh(JKPsS>sh?!+Km9BxUe#yoKYOgQgW-lRCRFgKX$NyU6sPnKdse4SPWg@KN{GoD2Wg3KfsNI_2vk#KVxhz zf^4GeKQr?xe$L9^KSmLh0lu*9KfD9^2}wZRKa-1b_JcO=Kac=A*}j#eKLDgxFXK{?KV%Vz>j-7QKYIo`QmjAe zKMbgk^XCcAKa`BK)U3?QKWrZQEDkKT>csF&ozFKg9Xsmv1!TKbXDc5Mx)*Km4GA z^VG@PKg`(KhD7UB^xKzKal$w9&4@ZKb)zj zqX&WGKLqwR`EbY9KU6DUy58NyKcZ9pN`$!CKM+Ka;;-EHxqKKb9h4HyQxf zKU+CJT6%};KLOU}1NDC7KXL;dvJSQ4KbG42876e(KNGIZWOL)^KTQwByz3C>KiP7O zXyTveKW}v@tw*KX#yZ z(kfu-Kk7AFC1CdKKdR=ngKyH>Ka6KZIW}s420+KWLW((KtxSKOwb7s&8EHKU%6JkxD4rKfk~ue^9dTKi)EDe+kUo zKV-sVerh?|Kd?TfM5g1=Kd_@gL->u+KS5Wirg^>QKZ?l6bhn7zKjunnIJO(oKTAY2 z`h1`4KV*pOa4BBiKTGYmUTP@oKj1SwjS7S4KS_l>G(S7;KX*?_F9G7^KTz_ibq?5} zKYd5$CZHzcKST(cEJ;MhKVWNXAHz+)Kkd)}_Es|GKk=n9y0Px!Klp!@ZvbJ;KaOa~ ooq6-_KY*t0P=KzuKQ1c~Y@clDKWh3tJKN!bEeXR_)KY;S9 zY{nUeKkkBSk6CiuKhQRbu$R}%KZr;++UcUhKcq{0>@pS1KR7)WPTKUBrvsn$2g zKc`DW1(0*^KWv(HRK_;VKdF0KkOUOrKQKmW+vjboKXk{x`^^&6Kju~zy?levKTxh( zWz{L6KlJrDLe7xoKOPTdEpJNXKU(T!)sbV}Kh%2Z9G1JsKdfbrqesf(KVUPfG?tFZ zKZp!;4OrsqKhBB)v`#AGKSawG^*hYWKg|+DE7E1ywKY*a)dIzR(KYhQE*Z=?k diff --git a/benchmark.zarr/c/7/7 b/benchmark.zarr/c/7/7 deleted file mode 100644 index a1038f337c58e7095a0ad55ed33bfa610045bfa1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy0IZpqyXXz=KfTQc8}en~Ka3FqHW0+aKZ2@>AFEXEKb&#~ zr!3FmKQoMB+3mjNKY(6_6`V8UKRL@;`G7&f#KQ2$SN8NznKbfT%RI+Q}Kaf5dJ+b2EKZLdz%3R>hKdz|mfY@&0KLOEHAiu5Q zKgJ5MKak~PU4B-%Khh=Z zqD;)=Ki>LO3C6PGKg&e55aPz@KXppjO;&a5KfJOT3pJw$Kfv)-sahU}KN?D#s}O3@KOW+7l6s{KVS<_weJPfKX+}Y%iePCKiQ^()}A`;KPFe9Zyli7KWdmbJ-YSVKQJ6D z2+6O`KUM2j%@T6%KO|LL`G!!#KM?n#qAyg~ zKgeT(RNFh|KcE4FZh3p9KS0YSa9(}qKkE7g;4E~~KZ{AqI-Y*%KggxZYN?UCKX{^s zy)Pu|KU$CXip;0rKUv~~*P1fuKirutm_3okKl<^ll@wUjKb#H|P!^HkKa-GhlN(d+ zKSn^dH4UcFKZ_LK`kYSaKX7j9=xS=sKV4M09l-hGKQ0R@Bq8nAKh652yX^KLzV-E-VM{KNu;3t_&x+Kd8dQ*7T3v zKLh*i&zMQ!KW<5WM%S|1Keu{EEHC5YKU1V_*l4!mKXlXS9p0$SKNw?IWXuZBKLEJT o%Al)XKbJ{6sYJBoKMHq)$ diff --git a/benchmark.zarr/c/7/9 b/benchmark.zarr/c/7/9 deleted file mode 100644 index 7dd7b85d0a216240f4cbb3aee1e855358e5c0f41..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy0AbzrFw0QrKiSs9PdT~hKiTi}7#z6hKilM}^aY0JKm3O3 zbifWq zKL-Na*&q?&KX8qiCSX^{KTtO!x%xooKj_7dnBe{3KUTnj%2uT7Kaxb>RqTV}Kd_f% zYilU!KY&@OrQ;~kKXu30WH+tnKfc_qy_N9oKQL6*;NH)=KLB{4tU5MQKU;WbisVA% zKhTfxtCPj#KWKx_bcjvjKSR02LJ?NuKbe}vD!*FlKk!QHT!y};Kj`WGU*tf&KWOz6 zLMzj-KW(_&uI;nwKccKjt|u1TKL)$^>Q@5dKO@q4=VyoNKNA7Bhg<~fKf}IPcv=JN zKgH99ps;%6KjmHpTiEdDKX41mk#9TKKe#08Od)8`Kco#SAy8H3KaT8Nnq*DYKe_9} zngL1gKPz1X@eqRHKO=?7!+de)KYnAUi>2t`Kd^`5inCYXKY%!BYNRxeKVIdFR|A*t zKS5mdFrEkPKbJy3m4LYGKg3vI_YNuPKTy1Ewk@66KW&wJPX5>IKPXAl8bTfKKRnAu zY*WkHKjf&igyik%KgjZ!(GE=5KaBEpZ8ERgKPIYn4@Ac8KfzwpNEj^dKgdO6&(87FKk(Lw=Bh!*KlKpo;<0q+KTZ_k%M6q2Kk#n;k~ZeJKcG^o z_9n29KbGmL8Jhm?KWjz{9Hj2yKhbXxE;~KwKlrXF!t)HuKL{OPCXUnRKj5XRPWwvN zKL9X)?S-hIKUBnLf;WQ1KMW;;G1O-7KVGV;5$C+vKj@!ozSf)GKa^H-`9b*6KbL<` zUR~elKU53yu^FG`KOF|UTKPUdfEJW?^Kfnfkv)bO^Kcp}= o$V{}!Ka?e(MjWx@KQAor60d*jKT&N(K*$E{KmXGtQ##u2KZu2>;Q#;t diff --git a/benchmark.zarr/c/8/0 b/benchmark.zarr/c/8/0 deleted file mode 100644 index 4d7cbeaab58e621eaf26e98f6541f9ddb6b1c04c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy09?)%XsXEMKS=KSsB_X(0&UKcYfDw$Q2TKe$uWy*fzSKahD= z@Q-n^KhXR?s{CxfKc}ZZy*u>oKO1z6Z9~WIKcqIWC5DaaKQ=-_6wR~RKi#b92JQOo zKO;Ed*eQKPb;zpMw+PKN>}8FD6UwKadr&JI4IpKT}V1emDi{ zKk&0^$Ir3RKW?bB-Yq%gKY*5nl6M?^KQBQ2mh_n6KM{cC^&em6Kkz>x&OM2>Klf)G zTookjKXeM;c0p9qKX7cNEGqAzKg@18fmWvDKTt7#c6v*#KYVO2rShlDKi|mqJb3fv zKinPl7CcGaKVU)eOIh>YKOjiwW+7#*KMcLK2xwZ(KZLv1!nLN+KMKW(K` zP2IfdKa^5UEbB7KKhPP;)z?1EKLd{(inXBZKg0}EdZBN`Ka3(H{*_|TKYeW)cX5^E zKP0ZM5KQ03Kl0;_sNz}UKUG1Z?Fee+KaPOf=kCYuKNOMpQK9JRKY$$JGM7ZmKU=v< zP(Ux|KXJzZomvazKkC>>;3g;HKj)%_bk0cVKVK+FV=u+yKir`$g*A1+KOFOygG6A! zKXjQ)j+&y*Kg0Kw(XJQjKcEzxy|G!xKc-I*;#lU=Kku%qm{OJIKXhyJld7!eKR>Y% oMvSKCKVo)1k3K!(KQ19b-4%KZt#D>Z>5* zKY4qnmrwcOKfGbJzjTemKcM6E;tX7wKfwDq&4^^%KR_@3ytMz5KY;n3L;pO?KQ`rW zr9E-iKj2$`;$jx)KT~V?npbAxKRjuN4#`XDKai|RgIP!GKW*-KX`0yYw>;K zKQy9Wme;PwKP8`;G1*q?KUfd;s2)1PKVamb{P(=BKOORXM+j5lKbq9T*bdCmKdu6b zH)_G)KdF=N<$}ZEKS}~iW=p8hKaLa6&aHs!KX^OrPWpG~KO0v+_0j(2Kj6};EzuX& zKO{LShBZvhKa!?6EO4vgKStZCJijyLn_KiBzDT4^HWKk9Y#s7yH0KM*|Bmnwy_KP;Adm~|fB zKLlDM?`rwSKWGNdCEvraKUL1Voc@UIKlnBT+F>@dKO$TPZX!m}Khl8__K#5DKWZxo zMDU63KSbrlZ_aq_KhN+^n}}%aKMw!Rz$r7}KR>XfuZYm&KU_|G$DFz9Ki;7M2$+D= zKV&uLDnQ!hKTaQ3#7%XKS_i224+g)Kf_~YI8dbMKla4clva`1 zKgj+i3wPbxKL7(HBkF^QKbSk}a3uKLjRBYK9@?KY(tV(}TvAKRdn2YL#r@ zKd(HU1n$q}KX3_$SE9_bKgxuQ+kaf@KgRamN&LCfKe*7okTv(yKhTbnTwzL}KN1;J zN~@aCKOZ0laX|#-Kiv0NLmOPYvTIcKTsU=Pk^rDKbd`8mocR6KSDB%h0>+fKU7Yg6=LkfKiCLU9y%(vN-9KU$%u<3L30KeSS# o#{uc=Kll_2kI+rHKiiNIbE*^OKVGT%Dxmk%KL|;LxvF^OKSvjrIRF3v diff --git a/benchmark.zarr/c/8/3 b/benchmark.zarr/c/8/3 deleted file mode 100644 index 265de240b31b9f7babfe80d62df3b344bd0b1316..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy08zGs#G$S0KRVX%Xg|5qKLqUZAD`^+KTvcnOkf7PKl$w# z_|hEUKMx$L0 zKQ5`ttFOkogq-7*KS^kFu8lP0KRKNiUG0}MOoKl6Lcw@YsCKe+9x*oSuRKaZzp<6xTPKTw{` z96bH%KkpwPS@k&LKNyc#18m6CKNtqXbAh(IKb#Wb1&x;DKhd5ChUp~YKf(bLEi$&y zKU8^KD5ihiKOejYf-ooPKYyJkvQzHiKUbF;)=MknKNe+N6gh_GKX#;P+F8EoKY3bb o(7W^GKlG@CvO3q(KN6}B>YU8oKVVT)Fr?q)Kay_@Qp{fBKUO80ivR!s diff --git a/benchmark.zarr/c/8/4 b/benchmark.zarr/c/8/4 deleted file mode 100644 index a62210c6a22d9310b0002a4072d9b6ade2b99065..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy00BUtI~b4VKksl42!_w;KfM&}g!v%hKU$IQ>if{zKd|FQ zjFLU-KbU{hKk{~#Ot;Y zkql_vKQYR#UX%aiKPXtffC6^uKfvGtOnS(WKWsROQ}y=4KcFBz(u&`hKYgTaPqk(4 zKWBn@x}MtUKLBu%0`TRZKedsy%b2<2KS*Q_KlL@$Kb9@z!befwKUjZmUSia>KUwGK z{lc{AKWJbU8i$k3KmRjK;V|9dKYnj=K#Jn$KhPHZVzKe*6XtTs~RKTZW!IEDe(KPWrlI7fTyKQMqHzw<@FKfFDUhMca$Kg91yZ1w-r zKR9vZ0xALJKYEOKg-;OMKfJ4!3#Q=KKd@&ko!jZ^KW@3T*yw4{Ki2kZr~;SJKip7{ zKpkJpKN^O!fAKKk#;;aWY7^KQI~tRBYU$ zKbU;Jo9+bfKe3m8rYQmIKb)Re&W=FFKiS`(_epf(KlZ>q@Fq3kKj2%{&=<;-KeXQo zoPf*DKgg%k6GSTKKYGHxpr~@$KYBovPj1%HKQMmZ00qv|KTs5bzIRdMKTIO{XnkVj zKXk#oh1b&AKRolb0wl@KKVTCuAfxo=KW*_A@NtUiKcG?vfsVh+KiEyF7UnY4KMO}9>t za)pXedMrKWQH%7zXzR)KTm9Cy)*5lt$m8=Te1g<#r&H)IGyEuxLh8>VGl}}zMO#C; z4iHHlO#^WS*zLwQp2-<26Iti0-j1NZ)Zr5lbIaBIt9 zZ_PS8)PYmUfwWN=I-?S~0ah$y$mdqL>k#VBUl6M^LtvGQLt6>xD%g*0LL0pDoU-Z9 zjYz7#u-bQ)9m-&5k%BRV`v=R#;U`U4te`U~dI##_VP^VuK-Rb~K-KaNFX=foDVr{% zrqIWJk?|gB(b>DUzat@5N$P8^%Mp>UZc92jj$zi9wiPKO;PqwvFfz>0rYF>$eQSjG z#{7`P?+*AMUi-4Wbp*1zQYD%57G>^p3w`-E5M2rR%a0Bq^fS zlLp$bil@d4P}@OGa-D~i)g2BnHo zM2MK*)~HCZRvL=q|9_PS_uOd7aDYA@nIY;kLc(=<{YGPkj4v3U*r~;$$Gz-{=RJsM zTX;UEorEy_Tma`+7h0p7X*a`0;QxEncfLW7%4)XAn>B=kjMEWH?hvx->UpW6R}eo7 m5CIHre_!gd=}+VKy4WRu1K diff --git a/benchmark.zarr/c/8/6 b/benchmark.zarr/c/8/6 deleted file mode 100644 index d7fbea4a109103110491b83647ef7d3866de5a48..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy0LU1bX6~-MKdEnct#}mTKe#?HEFtZ;KdWK9?!5KoKN!JM zqzq2hKTKWt{AvcsKQPJ3nU$NT@-`oKWb{3&bjj0KhR{{amxqnKlEyYuGgaCKVXZ@ zlV8WiKYNYV)jp5nKQYoIW`;K7KOb{^_AuY$KL%Cy)McgIKm2gG_NLJ9KiKk+%C;ui zKg(w6iNX_Kd?T#hUoFsKfdRjea1uXKgxDU zi%x6aKi64a#6D;0KSJTqzc^9vKV;u>4*`1UKd>8q3nV_$Kj5E`Io!LtKVBNsWdott zKTw%MD5IvrKLPem{~Ji*Kk2C#X=Xj_Kd2*jG}{-$KV)AD)B4oOKSeT7HqzJOKX!I( zf&Q%3KiYM9sMK=oKQIm6utmz`KM>IWEn}q6KLCj98eQYpKfp)||K4T0KQyBO$>KlnY8wkS2^KN#*$<&~+?KQI!B z_Yyg^KLDlu@mt56KVSq7WRS_oKLjSnI?5BoKcr0QEK~o~Ka_eUUm{=3KjcxJ28v6{ zKh~|1E0LY7Z@lKTuC= zO&&4CKm5}dV-RWPKby}-!9Zu}KTSN$&dxvPKVqmZeyt`KTa+>jtY?OKRvuC;S0FqKY%xS^L@OD zKbKH!G-BW4KfzqDoy}3tKL~07xtlf6KZy3%Ex%UZKbTKf=P7CF zKZ~)kLpjvxKU#xUK|e#|KRAYHv~^3$KU=K_^Zg#=KPA_8Kalyhdi}KFKcF9oK8UZ%KMbuYUrr;%Kcw<$P@4MZKM+htxKhgB zKLG#2ZD^O0KN$l2KbUMED#dHFKOKx44J0RKdEY2Lir-*wKei9g zConwQKk%>cXiPhxKjoHsfm}P{KadkyxJGNKKR#Ui4ju>OKVY~V;^OkpKdDKZOW6D6 zKa5Rw+ibbjKd6cfbj$zEKi~j<4cy13KYoL22@&$$KPrDm0AE(`KNgcLmvp(-KeI_f zTA0AD2`12Kk7GoMO^FJKUS7(eWCNyKl3-!1V7{HKX~$KS(B;eKfqF1oCo*sKU^bh zqd5GKNnznE`qb~ zKU;Xmq~=)VKc4W;DaFC&Kip@&?4LZ%KZLp_KVfjNyH`5vKfw0XCsGHAKU3&~=Q2g$KLCSu8VsMyKO=v2d(U*?KPtGM;0j&c zKNgB2d=`?|KhW9+SIN`bKOj|}h3P)WKU8dLvVHv1KP+?uIWE1&KU!bC!Oh0zKTwRP zh;0MMKhn;~7=_O7KS4*Cp{V!dKQdfIiq&l8KRin^&E!nmKd}B_BY5GmKR`H3_gv@X zKUAZqvwFnFKaP;eol!mSKTI*Hl9?ylKcSa3FZtKW$!hrb-CzKl}qbIt;bZKc<^v0A4xmKa?3x+8#ye zKS3wI{Gk}>KS*Fn#G5tSKTITHYKoHIKUm6tzp<3OKUiUYoc%VzKm305YM%APKj2Ru ou>@nGKh>fE0R9){KP+_0=l0XUKOh5Rgu>R4KkRfRxh=}vKMLfQeE?6SKQwmXYjFX_KR^~5 z!2_<9Kimixi%dAwKZ34f3)aopKR_H-RZLUaKL}}dVWxV_Kg1)p^wizYKXNznbGm=h zKVfz&YVAJdKP1vB>;jO%Kh_8w`*vySKkfF&zG;o%KhSk35$((FKOtzqpJV0eKMAa} z5J2DRKf~XOy|}gOKaj%089ec9z5>8KUHzy$@CHIKL8X!bBu7gKd7d1vQIC{KTypTEaCO*Kd>)T zOo1k^Ke#&qUy?@TKTM-n>>_8uKiDee_;(H1KPL3M%cZ*1KRYGb%s6l4Kb)s(>Z{1b zKaS$Vr`I?KeoW_lHYmQKctBs zs?_DiKQ>i2qxJ0UKa3(_U$oEOKUl1M6+SbvKgb^+2k03s_ zKRQB)|f!zKcF0hrAkt$KbEeJCyp59KlEQL zNKI1dKLXe;G2}7nKfosLOoT@5Ke8hghqzkhKd72ks&DAgKbd=~T@NztKZGx!t5l%i zKhSQZx+= zKOHS_;RNIBKl~{hEQS&6KcKijL(Mv=KOrO};-t&tKfhT^P#y5(KctZae?xukKNTqO oP)tteKj@J-1ckoPKLB@fG56lHKRH-Xs#po?KhWk6$OZQ5KVxKMW|^Y;TauKbeIIJxCGiKSkOB+va%eKlDD1FksW) zKXG=KD1;T@Kc6j%AO-sDKf~v{JSvanKhn!I>x{4CKLB5Y29Mp>Kj1MJuU8t7KgVMa zhh<*vKb_uj?9UkIKcgh2+#fgWKkt=OT@uOVKNk(}xA@iSKh((JH+PKhDW@TU$=mKLjl>yKN%Z zKa!4{Poq=bKc7lmJG)QlKUSgNnpQW{KU+_+)%+dfKR{)`WRk??KjvRnFOVncKTy8+ za#-!=KQz9@hU*T_KdzF`T0D>KKbV~9LL&0cKkf=k2x>p?KUj^w>ZFRoKk3QDH#y|u zKa%|1dOgMIKh!Ix=MvrHKalbd^4J{eKU@e#M*}CrKR>(gMdE?&KTvM_ZvR8LKVm_l zo{hKOKfr)qnsyeZKY&kIDkBD^KSL#PxF$H_KP)F_y9Z3{KZ`wjOGA3+KV$=B2EXFy zKVmP0p-+Y9KL9n?B@Zd6KkQiH#RSK}Kcbp{o6r&3KPbjViI>9EKMFD@o0|9LKQ-8xi~s-t diff --git a/benchmark.zarr/c/9/1 b/benchmark.zarr/c/9/1 deleted file mode 100644 index 693c57af111e83ec3504fdffbe5f00869a69205f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy0DhksraKh&L|ezcL_ zKLiJdj(6PFKd5&ll^|>AKb?d(EF8GyKeBRDO^?mcKPoa&=(J$&KhTY89*h0QKjZ^2 zc+EY|-2yM|KNc7zSQz)}KaOC= zyl;5hKP=eN#W8xoKUPfK|3>58Ke~pNFw?Q@KgzZibHgg(KM4Hg2ZpxMKa9S)@HD;G zKcLmCOe%@eKV0p`yo@y8KfbdPCKPe%KS**7S{>`jKUDA-K-Kidt4xLRi9KlmSK3G$feKMa5+_0jbu018;KgMwJbvlKWr46;sH0w zKbPx0UGRe8Kg=qBZ6wRWKVtG#RXl;%KY2o07}p)|KR#%KXT8AeKL!LoJJI~@Ke*r! zRvt0GKQP}IoYaQwKR_Plk_pPWKL{ajT2WHuKM3!LV6uSKKe}OqLtn_?KjrJ!#G&fp zKMXV2Cdc~aKi4h<{;`4XKS*|s1)s6lKeK&HKedJCKYkmV0FBq#KNvxTS$1gMKbSSe oGx@_PZh1Kke2cWV1-`KgZ+JpD@qnKM$sq(f|Me diff --git a/benchmark.zarr/c/9/2 b/benchmark.zarr/c/9/2 deleted file mode 100644 index 91ad43f1958c3fc7ea09f4137efa425d4d13cdf9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy05mq@1BWQhKfy(yWr?xpKQ^71A{)WjKl4DL(-bx3KVazl zBDpBBKaibVwDkL-KWwL-6vxurm(dA&bKgxqcRju>UKUBoUXH-|oKMV&? z%OfuDKZpee8RDq3Kf0E50O5YzKinjN#dcflKl}lM9-a=~KQLkrJ5RW%KVhFLB9hDM zKmLe?=>Kl*Ke@G$fGpDNKMpIrEzlk2KP3MbR{^l(KbQFBZu>IrKjvj};YZlhKeS28 zDW96{KW0aG5bJr`KYT`+QI{*lKNjwMRy>X1Ka*C?P|a28KNlArJ)bb?Kfsf79BomO zKaP#@F9E#JKT=r5a2WC9KVQ#m31S)OKVa+m`47&?Kft_^|8bk$KeBtjkAgAcKh|(c z4`vD1Kd5|JMxTKPpekF%FX2KR%dXMb3HNKNt~A&b+g`Kde4_bdqSw zKay(vhMe^7KQta(4Mh6sKY(Vp-9$8;KY;Vu+&YWkKR_6{ckI8aKV)}%2I`mSKksjY zj7+cQKR^O5GjaKjKbNJ8fPbLpKV)*X3Q8u;KhEuLJFjutKO9qgmUETJKmPn%2kaNw zKfcX`I!vPEKe(QN^-G7-KNj(P&(et6KiUiXEA6iDKT7A{{>viPKVI;^#`37xKj(Nt z#-Kc@DSumAu6 diff --git a/benchmark.zarr/c/9/3 b/benchmark.zarr/c/9/3 deleted file mode 100644 index 0775d97144032f9e58d168c0af863b914c721dca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy0O;^?>~BD{KeP^{TBY66KY7bA5h7pfKe9#Aob~V2Kkbrl z>{BA+Kfb9^H1iSBKVC>^s7kNcKO!b2PQ%RUKWgPaB)-n>KX2!eH`%Y}KdApLi@2rJ zKlTh~^EbEbKOiEMlFL2cKjhU*7DvU$KcJG7PVSD8KOpd=D$a7)KhPR4spV?zKlw3; z2Q47xKb9+&Sao^cKg?Q!xHQ_xKk~2dwiu?=KcZI0tlA;yKTq}d^?*X)KLEFA7UaLc zKZtWGMN*u-KV@uw94}buKNcV!Xe0LEKg=V?f*MfkKZk-Lt~3|rKTr0q>^(N?KfJ5~ z(SH)$KUUX-3_|(dKQOCjEICf@KZn!)KbZY8#Q}`HKh=e}gcn8NKj?--AyKWn zKZ-GA+$)dKPtga!#EbzKO=%Bw!Dt#KQ2GXi3LH^Kf5a4-|@lbKk&KPx4BfkKhDCv ov2#t-KVFBU!D8d?KOGLEYtdQmKbK%p4*})wKT1SiBk&y4KRZjA`2YX_ diff --git a/benchmark.zarr/c/9/4 b/benchmark.zarr/c/9/4 deleted file mode 100644 index a5c121b1afd5f79c24e8c4cf922708acab14fe65..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy086w9@gUOSKO_&(Qtb`IKU$w6ZFzd?KcpK>d^z9VKQMo_ zMC6^RKO}vx6syV5KN;{2B}*OQKY*a@d}Z;xKU>?k_oY+fKOhgV(FL@UKd2?|3M4|Z zKSkVDlOJv2KZ8`DyF`cNKk#gjTJFZ}KlEt`3pWbmKP-*H@r+^OKZ;qaXzHBVKOi7) zY{MAfKg@_-N-7n?Kd`cdAN(`AKXe@EKWA#>KRjPPc_d-zKPi`r$tAbzKh$_~Uvd`H zKP-KtHi1gXKmSyl?~U5#KTy;>LkNfKKWO#H%2|%+KW2$ekS>SVKUjFC21=I6Kl-*K z`-uJ3KhVO^^Lah4KYkb5ypJ5 zKl0haKOjKpg=3YfKbAP=FSOLzKN8>CRBvwTKOli!l-`Z6KjfqWUBrUNKb+xd)q=6( zKh)anL(wGOKR`HYwteTzKLErb>T+g7Kdeov!2`tCKU$dyr#bK2KWl?jZAaVhKcXzy zwO@AJKQvbopvMW*KTh#~_ev7bKahA3gAXg~KPU@T>i%@yKfwZbNsO@SKREH&92_&x zKO4jkTGPwwKY81WgbO+8KRm+ysdhowKlBX@vGhXBKX9lA?fN{nKLAf_F1r43KM$I` zYanalKfE|~;*2TeKl;p1gqQHqKT!B#)Ndi+KlQ?Mae++g)mKZTnNQ%H8_KRxf{0t4>sKZ1VhgzcW*Kjv}l;RlV_KUhE=X>fzfKUlpu oY@E}~KNeHM%Ni@+Kk{)F?o4UxKeW+(!LH=(KV(CiLV>uzKXG`NR{#J2 diff --git a/benchmark.zarr/c/9/5 b/benchmark.zarr/c/9/5 deleted file mode 100644 index d64d0c1ddef76b399ad4b2f96f631abdc99644c8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy0E{D3>%}STKWZ&YEQlc5Kf!khq9NnwKV77Pft3s4KOlxl z(0nE2Kje^L?cIaPKe%v-d6YlnKS9ieP@!w*KLy>A)v1c>Ka*8zv!~hZKa|1H@nvnr zKajQ4{SvaGKV`8(JWNUJKU^5d<)8e{KN(C1Hxz;EKX8Ox-$E0kKLDZ4=?~w>KL8u< zRqo?$KbvoPjo`K5Kk2{}0md-nKY-HpGxa>#KR~=6aum&%Kb$}W$dgOaKll+7wwrR$ zKLVX#G6MYIKcM)ul#D^=KdoX4;aQ*IKe8bFWA?w=KPa2xe@MXKKc#qCx3V1KKlmoU^lGcKTo&>MnPcgKX7Uq{C1qBKL}X?be~?qKY)FQOS#&`KLAb%m%nPgKVD>g zVJN5IKTs(VzxafzKcJ=*^gAS!Kf*G+?g`c5KbYdV-PZH7KM-^FvDUiLKjp(w!P}(c zKUekZqIOQ`KPbZ*n<=f?Kj>u1uoDy2KXZ>|#yEoHKR@_l#Di4hKN!ji8YiK;Km6f? zRctcOKRiEZa8BdxKlqF}`j~9bKOMx#5Vv*ZKmJYuEdj38KZr{9jU~|RKX?p?_3eJS zKQBZ4ZCjt_KhWFPzPv=JKV;Fx>9-riKPYbEQA%31KdvM?fi`C3KVXbMUhO@yKe`T& z-h-RqKj!bSZJK!1KSbMv2Ggw8KN<&3Nxi}9Kb3IlRtt#hKX|tP5hje=KbYA0EQ|QW zKLj#85&9$LKT=m!55TV3Kbgk)&5^O@KUf<6D@2^aKhqp-6>l8iKk5PB@K*@yKVUt? zzM?wHKT!Q4or7)7KX38HW>5C!KMKa_`Zjv)KhWTBb|F;eKY)%m3#})#KVTM@;CKnD zKjuI4l{m@mKjIQN%Y9qWKj`$5NNNh)Kftqg_dY(?KR_i~O^J4dKe4lIDb?ENKTedc olce(5KNdH%_lFSMKQwf3j@P%@KOP4_Dvqq+KjEFa{DVE^KMAgu2><{9 diff --git a/benchmark.zarr/c/9/6 b/benchmark.zarr/c/9/6 deleted file mode 100644 index 75989b7bf648b3eed0c239c7c7f98f1bef605583..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy06@ugdlt3sKZ-}PT3~nGKW8333>a?VKLOb)f9mb)Ka$a9 zKY9M@KR`va!{vwGKkwsANF|oyKMcONhJPx~KgKeLKt}iBKm5mRVPb{CKaP#Pa3%}g zKhJ4GxQQI%Kb3uC%(KVLgF7HCZ3KO}|x*Ll;U+KcH3KfIOnA|7PeKVDg-DY>TPKepqvRgjhLKU4XKG81m+KUkU3q#T1KLGY?8Kge|0+|X~~KPaONyso_0KZJiT!WE_3 zKeh$VpfASfKkAokNA>jTKkC9txm~K}KhO#IMmH^~KS8#r%D_J9KP(O^v24WPKVR<7 zh-BpGKm8x=z)b1oKiJ06HeRX5KTqL#omnd5Km4pK+o=ZAKQc!e4Tc5WKTtLo%KSWqa>9ml_KUzv>GG`0hKNyJB*(@K>KM04U9!}JKLB6_s#8i=KRhx-+{8-L zKi?bff!X-xKZHfq@Sd#CKis8jo=Du_KVJGf(R_u_KSu3?j{L{kKdh^B($RjvKXd>^ zO6~{fKScNrUA}(mKeuvHWKW^@6Y)!-2Kd^r({QcszKlJk&fiMBxKflSD_ZU3oKgNca7XSbN diff --git a/benchmark.zarr/c/9/7 b/benchmark.zarr/c/9/7 deleted file mode 100644 index 6f07f085df47ade6641ee4fde93087e54a5227f3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy0AIt+po383KOpNHfnNizKQN~-)PjhuKN;vFy8-s)KXVOb zi{Y8(KjtX86%c^gKQ+Nc02IpRKm73RRo!RZKl9QK6+4^dKls|~AKKR&{}Rl6+GKZ_^j;L9oKKj1A13rwHqKafEX zLU}>6KiW9V$Pkg!KTuSJN|Er>KMCYrnWGHmKL&zX;mA$vKQPW7lI```KeEN~l}*LlKS<{+B&ZX)KPu5N%SONBKj|eR z@&8cbKh&=Kagd_#E@U&KmGhPA7DD{KUn6k^eblUKh$Z_X2ogT zKhOIfteD{HKl%CKHk_~HKX^ef6-ctvKXe5O`xQ>jKZ5Eo2Kt@bKQRg0^@T(4KPQ`K z2%1{sKb)N{ke(LXKX%qv(T>sWKkV!vSH36UKlGqeu8Th0KTT^Nz8`GhKfpaa^BV}^ zKgxB_>3CG(KPogS=!y{1KNw7(`2#Y+Kj;$kYHKbl-FO7jrwKSrVH9%{tlKOnJRk+c5Y zKVT|W_M->VKj1^yG6KgE=$lm7|kKQQ6D zqpZr>KdsJzd#$7CKa43;!5TfwKY&_;aCySvKNK)aO#KNCA&Cw6x4KirvaW|Yq7KU&ZxfSr!sKX9f` o0i*t^KbzC4I^gP(THKV>I|PZ;KPY|UMjwjWKRTHqyR0GLKX_2>f1fMUKeN$p zalpgjKWCz=St5(q~OipKaSdl%4(_BKTZy#l@gTQKkx}F0mw_ZKM*bfajGH1 zKLaq)G2V#mKOhp-q~e#}Ka!0BHWEJJKZx+TZu4#GKZqyWvc@9eKR~~*=gR7pKPNxg zUr3VaKavk^r1mN2KW8_JAAAkzKY6I7hboljKPq^iO3w1`KjX~9yj241KgiVV6fOnC zKUx8>P7_zzKTsT{1WXRmKmGH`v%=fqKgvWJj#RisyOPxKQ#BJDiy%RKN)9l zI5`;MKbXj##THh*KmIfAwvC+BKlD*R(IKADKcF0qHQLCgKb{Ifmu~srKQe#$_`)LW=KOhqq9$+WyKPoG`P)Xh2W2KfH}5 z#JEYtKk9rsdt;*GKN|f~iHZT8KYv4cs3E%UKNwk5MS!vAKUe_!NZo|#aKbRr*`5&jqKfpJ=g-15wKjcaHsmYk)Ki}*4J&s}EKTBjJ z&?@ilKOkM6&*}o}Kj2>R>J^NpKj~^kQsju^KNKftL+;)bY@ zKh%Y|gO+FBKO?T9wT{N(KgjFR1}PG;KV&P-)xCJlKOB{t-=iYvKZw;R3Zt9kKWN>J znTDUuKZresaQ=9`KN&HrtbqLJKZ#560y&53KllJt8617QKL9vTKoym@Kb+@j~Y`PcH zKlpa!>r~<7KO&t@(MAr`KR`;^9jt@jKkmLlrG;tVKP0VTK&_O*KP+@U^u({xKfa-8 zj!9VBKP~$<%3#{;KLDCUBwH+xKSZeoPxVUTKd|xIo8ZgOKZCs&-8KpBKiqkMe%{31 zKk~T6KfRumAu6 diff --git a/benchmark.zarr/zarr.json b/benchmark.zarr/zarr.json deleted file mode 100644 index 56616dc366..0000000000 --- a/benchmark.zarr/zarr.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "shape": [ - 100, - 100 - ], - "data_type": "float64", - "chunk_grid": { - "name": "regular", - "configuration": { - "chunk_shape": [ - 10, - 10 - ] - } - }, - "chunk_key_encoding": { - "name": "default", - "configuration": { - "separator": "/" - } - }, - "fill_value": 0.0, - "codecs": [ - { - "name": "bytes", - "configuration": { - "endian": "little" - } - }, - { - "name": "zstd", - "configuration": { - "level": 0, - "checksum": false - } - } - ], - "attributes": {}, - "zarr_format": 3, - "node_type": "array", - "storage_transformers": [] -} \ No newline at end of file diff --git a/test.zarr/c/0/0 b/test.zarr/c/0/0 deleted file mode 100644 index 5666e3c9cf63757e96c4b8b7449ddeef37bb692a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy0KlH*0hVOoKP+ukRMv{pKZ0m_ELr8=Kl$aSq^M%%KQLzV zlzOtdKRf3mPGiyJKOqYI@xYbrKVU^>z_qBvKl~ckjN+@vKXlMy^@ml)Kb}j~$Kks;X2{QTPKRpaeq%n-;Kcrvc z4l+L1KLCGrcMl_PKTekGN9&p8KlNJ|(QyUiKZi4F)+LnUKX@>i@qek}Kgb+!TR^CKWI^(fkyM{KU!EV zMY{v#KhO;K1Mn~7KNc>WuQ$BgKkMk?*@&6oKk9A&4?1SvKV&g=#!uAPKf+KuoE_fm zKLu$wH`{gRKW27vF^SLQKM*tNWIgZCKfss4rr8>>KeC_T5O)pbKR6>79x~e0Kc{pI zx+x0hKeUrHASb*KQR~60tc_+KMEG~UQQC@Kf)oL_$sy2KY@+? z1MEHRKRnSm2k2McKY%01zW61qKLj>+4EK%hKdQH^YM-0ZKafe?O7|YNKd!4g#N6NN zKPbax#lX?mKaGhF62c+qKf)2gWNKeWB?sonkJKmC8-|GeApKL|fsMfB0XSqZ1+KcAPw zKXEmvhDciFKN`sW;*Xc+Kh%Q$5pt%?KPvjqsiY9$KaLkXwC45FKOC)-W;JEZKMY^W zk=z}{KfO93gfai>KeRG_>?v!>KcG1W%rsfGKlQ*}xadpdKW|S2*et~!1KV0|r9B(|=KUgr`H+ewmKPo*A_VCQmKd>z( z%X7}tKj1&BA$*>xKh#bO#vAd;KNhZRE=rmKmLx`L9&+BKlcB$KROKUXIG o8Cw_PKO`zXBQg@~Kk`T6(&LQoKP59yKj==vb(JQ;KOkRQdZ-4~ zKZ-*FLp*ivKk@Z4YOU$$KN#*!%DK|lKX^YEgmeZKO=i? zO+EtTKUgRKde1`XKmPg^-gJ7_KalVOnl`_vKfZ$m4B{^AKcXrP>cD2$KbDwPL`^c` zKT;L2cb%ZtKfpe#76o#=KP>FvCdbvoKMuRTdBB0$KTdg}r)+N6KcwKP@7jjXKcww; z*>d67KlrsSORA!`KagmSw5~L|2WfKgN{v z!PDyBKfv}26)7^DKZfR~w_ps^KNc4sht-tQKcE~v1_NG^KThJ0r}d)HKSb`I)=EOs zKeS-%=RLL7KhOQs89j37Kf(s>fi8L7Kh}e@S9QGaKh%1}?xV=SKaXKMwHs~ZKgfu7 zo-%IIKSJtq^?Iq~KR(XYhNWBPKS&REV)pjFKcH$jb(V~pKRQx+L6_IxKj4Z2_;?|~ zKhkW#Kk4k)Kl9IXB9xKrKc|n9SgW+?KlpMCR3K+Kfo>XBk4KMKe!clT<1#TKY16K2mk;8 diff --git a/test.zarr/c/0/3 b/test.zarr/c/0/3 deleted file mode 100644 index b5cff87630c93ec151cc6625aea2b32ea38de80c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy03UjrpcG%{KWK5D)1rpmKcI&P(z9!>KkTl$G&i@;Kj>;r zGa5nLKcF$y3>-elKZcd9F(Q}PKN+8GWeh*zKRt%P{w4wAKdkk+viar9KX|?G?Kr32 zKk{H?31oTeKdpG3D)ENrKi#`t?E(qlKM`RJONaFCKcE!Fgt>*1KW0XRsh)Z5KLjci z$RtwjKUmO?L-E?}KUn%U$jjhKWHOJ+JW@eKUN^B9eX+NKSVrd#Rn7JKU6(*&AHUT zKYF7aDl~r6Kf=g2ce#_(KS@dF!V0D3Kco}Z%0>j!KkKnqTtq(aKT0RlI*sDyKNxd} z&8Eh)KM?523`dacKN$jnpKXogKd(hBE`9^KVeZ@Y%f#q zKc!lKSXRgV+JC~KOWrNb)B~0KesnU zRgcl+Kcw{rvNg2MKkCFb;#KO?KT#Bj!s&VLKe(wB}>`2nlKibNOehN3(KPXK&Scw_K zKR9{$uxtdkKj_qY(}U{mKfRIk&ZHsXKec3@sK=M=Kina4;YCBjKa3+;8&}5RKNxjr z*`y!7KR@TGI_qrbKSzp}3q!~1KR`n?J+)7|KR{T*!;JrqKZWl&g|e^iKPF#FRW<15 zKij!Z9Umj=Kh9O&Y9h$fKlFF?=Io)}KbrZab6m^kKkBhJ;jAKly){bqeL}KU%=W?N&C{KM($G7>-2lKMYlck{CS1KiJye@b^l{ zKP7oBJTpw^KX5~7jhztaKR+L^-9fePKPfCO`tY9YKmGr)dHdGjKSFBemv5=lKc-MH zbFTN-Kg{3pkl}*RKM)<-Qmsd>Ke(h!@>np#Ki9a~Ac#`pKh4XGcl~?pKOKYB=QeaLIa^KOhvj?O8UNKQyM~ns7npKSaBS#kV8GKO{Zfm#b9HKNK)1 zmok&qKN?o0BEHe>KWoKX`Vl_xqURKeV32Bn<1)KZ?Qcoh1h2KLmpC=SFel zKdaM<;$i0OKlXAR%zDw^KY+(~8th@!KRBe80t$o6KRfj0hwhK#KSC$?j(@}6KUxF# zGZTv7Kej_WkFs0UKO@ZziDUikKaqqigjW{gKe8$LtW$>HKccX)X$MB$KNA><2!4?3 zKiHHC_h2L1KZ0@{5kKPEKW>{Ill9u`KM{J+CGX+mKYJ8G&=suaKTatY;Lfk=KloDR ze-f^{KUFJ>WOT*vKR182&Iz9AKY-S)g4-IzKW|ROn6Q!TKg|~4Wr8K+Ka3MJ$v?c{ zKM**Wlwxk#KiIId_NS)gKMH#)*vQKUM&!(a3J$Kb>UP>loNuS0KLD1o z%o-kuKUm0y#o>s^KRBm5hEQd)KQuVZ{>rG&KhgY3ML(77KjvlqV#S`^KSn8j&CxL4 zKSAVT(tZHpKTRmi@)2m^KbSAzJM+!MKVp+;p<3CwR-@KMv&Weagz>KX?T$uC!>}KbCqgCZKdG|}TN{AvKQ?_- zNagwIKj6{?j0=^9`fKbGN3g=-<#KQK&k^7Ze}KSm1XdX0?hKah+y=vm{oKd?&%-agy7KNwdM zm5|W5Kan@5Vac)UKmD^c2EMN8Kc?fY6$J^@KZ)~+gQlV2KS19W7%VNLKN#jY0i$%m zKSxA-^n>c?KV&aLq5JvIKU|1g+?*4@Kgdj%ijLa5KZ*8!tQ5uRKZ1bhS5ao!Kiaf3 z;oJ7xKlF-QfSW|*xgd=KLi9W6d8!r zKUM<=&TnbvKLD715+qsMKct7)`I_k4KX7?y$_?tfKP^G#v9i?VKZpWRCoW>vKVS=z zf%NsIKj@tVyp<~1KPr$`uGBQrKlFKP*zZTpKcoSu4CVI7KgFKYLsO67Kkg?`a5k9f zKicNZj`iu?KiGeiCaMAIKZ46Zkq3KY)Jnr1z}fKhPyyNHQ(VKjU_rCERQ4Kc(cKivR!s diff --git a/test.zarr/c/0/6 b/test.zarr/c/0/6 deleted file mode 100644 index 8e7efbc4fbf766c063d529d853fc2d4dddb459ad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy06Ap<`k=kwKkVYei3eTPKaP@ z)pei3KQMxdV0ZNGKTeNS(R3)=KL7<~Ot31OKZV2X!wIS3KTOEc!O>^fKQf89NOd;d zKU^^(_XKmtKXnAgp@*&HKiCRBxCe>DKg=BQO~&xeKNF@8fU861KgllbNLJ12KLo?U ztOu*rKNzu&8nHpnKTqg*PCo(WKU}YE(2QNuKa(^`UKYx7NhZ`>DKP2ioui2T} zKZug0Kg%8sJc+pAKMpaVuFxInKLY(aTeM2hKY%$5IUoXxKd_7YJ7%-mKiAQ_ z8f^gTKd>xv5dv|uKV0knq2%P@KO%X2))>pvKYD=^#>o%qKcTh{`XTe^Kcc`k%ASYW zKdu=?NukZvKh9HrCF8=}KmHOuQKXO1KSa=_1Ku;wKU5Klu`2V-KT^Kpw&-cqKcMy? zF{fapKdy#InqBnaKZ&a4VJO$>Kd28}F)h8(KcZVxkljMjKU9bi8uV)8KVOt*24kh+ zKV0sK&dIINKZ;yQc5%h$Kj81j*;O9NKY(UHSgz^YKj7VEfikKL{|T!EPJGKlt<73r6U>KM*(}BKzr}Kfnbzdpz%iKXWlcEwftdKikBQ zdfM{hKf)8YW+8KL9eba1ILGKQV}x&j0`b diff --git a/test.zarr/c/0/7 b/test.zarr/c/0/7 deleted file mode 100644 index f32a75bddd1d2444d43b1438eec894b7bd7586e4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy0D}_g!xhr%KklHhTFzJGKO{aGTv6xGKZtO3#qPh|KRB#h zI){9|KXD6B0k&7_KVWGzz|3i;KVZZhq(TX_KkzIUmDsJaKdxLIDefZFKU~*_bdtZ% zKO*laCOLl5KiCp9&hxtBKg5X#(lfopKP&23ylY72KL91e3;wX;KQxw|&O-$0Keu%p z=ZU}WKl32F^$202fqXCKcGfRiTNJAKbRS^4PVRLKm2~qsje06KhPqk^{;Hc zKPqOH%a?4|KXe^Mfy=?pKjsN_!;SvjKUgdh(HgkPKY&3wu;YP_KT;6Qx?14dKZ*(I zv5(i@KR1J(9La&`KXn&n=I!C-KZ}+E=>@yxKOYE2+Y(UgKNHT7+3>dIKYhXWXew3Y zKZy6SYPV?DKP$1>?9K({KV2JZ{l0nTKQK#!=|IuWKTw0n4moPKKft;=BN$ANKLswh z$oYNcKaz5%ipMePKiIY|=vpqtKVm2#_Bns+KhTf4=RsB3Kl#Nvsp1yoKX9c-~1KTe1Y<)n4#KXzSM6JKWY)WOwR<`KLCQB%D;KNu=C z`d3oCKbCMl75A0qKf1h2YV!EsKa^rBL$Z(LKUhsiZyW~cKgq!A9_vl-KM2QS^Z&xa zKQTR(WxUShKY+?eE!DBXKVm*aXKiIfLN}UDEKZtQdw%rifKb!|q@xdDJ zKZN^iB#w~VKQDJ91aAZ5KTNz}iF4TAKRSSK4OryRKh$Sz;5z~0KPj@}L?0;Kdh%^))7+TKL8b(Z2$lO diff --git a/test.zarr/c/0/8 b/test.zarr/c/0/8 deleted file mode 100644 index 5bbc31b315ec48f0695a4c1c8fea00d78e16251d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy0On>m2J12AKQ0$Me<&K`KXkmZ5C)R%Kd1)cjUjumKfD(v zWv_ANKOjH!VgFj^KmW&&-hLMDKbWeW;hu=XKX&l|FF9t=KW$C($Dq&XKeR8yCT4lm zKUX;mwrpqYKeu%^zoCxqKY)0{#nKMj`no~mKeR=YDyakNKfJh+ z{AStBKRW<{f#VtKKd5pvibo@}KM#&y+Wge#KcY1Hn>z;6KSu^wtDFt!KRiB`h{3Pb zKY+`ljSoWCKV4xfI+8KuKX743N(bM{KhWkMuRm(RKXul^q2`C;KgjcUX6U1^Klr5+ zUwwhOKg`^M1=A7RKY)Pry3z^YKfsgQ`a0FYKd?^8ZbJ9gKlo``B`S)uKdF57gNO9( zKU{cQ%oR=TKb&g`^ax7cKVYvlz~|KMa5X+)K~YKQLI6cu~}^KLrYL zwD?2eKhn_^*Zf}GKe%A<%4x8%KZyJUY!wT|KY3L%&BEa6KU)Kdnj+%qKa8wao9DOG zKNd?vTbCizKRC@6HGNXtKcqj12jH8^Ke-NcowDNUKQPXh=kILJKYhT=l}c*jKaEYr zm0%a{zPoKSy;8jFbiH zKLAP#u{sifKZ%jX^NeodKbRtfhc&y$KjvEbrdYVyKY;syXoqv7Ki5H`Ic~+{KQx~q ow2QCXKmNzB0E`pYKi~dywZkjvKX!T=R@$89KN#};RqY|@Kcljp1ONa4 diff --git a/test.zarr/c/0/9 b/test.zarr/c/0/9 deleted file mode 100644 index 3893e881c8889eed2a5741f9ee781f0fba002b97..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy0M)0tcIeLSKVtnG7--(*KXfykNex@XKS2v!t=R|SKPpPF zxIS9dKgK_3cWuGZKdkmt!JOmTKg6J{eB|ZXKO^G&_ytGmKXAmuOTuK}KThrh(AZMKLA?7WOcxbKjy04HP$!NKW+H)Uf`$hKkO#h-Vxf}KdkHd4n)wvKRTZi z45aGpKYEKM-`TMQnl9KT+llP`~WtKTu(2DbJX#KVaoVl4ld{KVa_P`C5~k zKNfJJsyxr$KhVkK`u@+?Ke9B(w>f?7KYEM=qU(*|KOE;hB{ebJKMBTQ-L6CIKeGoC z3HUSVKh=Qah_d14KMq)Il>m&{Kago8d>2>7KTeoj*^ji|KeMQyj6PECKfDCcVL zKVaT`qLKgcwiW09h{KWL?^gso(>KT}j^(a%fZKkO6vykpJjKP$c?YD+KRKcHk! zSR`N9KjbO1f3D`{KMKs&lDV?65G4aKY&3etzjl#4U#KajaH@V8{KKcH9tS@gJ)KP(`ay#N3J diff --git a/test.zarr/c/1/0 b/test.zarr/c/1/0 deleted file mode 100644 index be8041c39f41c5e18b7c933f4c3e8f4377660987..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy0MJ$X7H_hkKg{wMTNKRAKkE|JnzXC#KY922dlg6NKX8?3 zl0y#bKfo&YX9bX_KhR45S;{5SKMIwwgQ`%|KmMxojt~*sKieg0rK-^BKXj72S^weD zKU6%T7yeS&KlWHJYo|uiKL$@<$vRfjKgvb?Ro=VnKcFS`S)gv~KO~#h!uF@-KS)yZ z47Y{TKM`C@5>fx?KSC#Cc*Hp7KTLDerg5arKfUv8mU8gwKT!I9`L(<6KYSr4HkwP` zKbVv6z*PL*KkhVI^f$=TKMX@WU|ZSjKhnq!o)$ISKh{lZD%~0GKY$(~i1dS#KcJqO zn>ePQKiCiCF$`VIKeNKi=b~8YKcH!THdQX>Kce>=xARTlKL8}zcR6a8KLq-DuzrH* zKRtSeV7p-GKl5Q>1@(6AKSXNJEECq{KTxCe>V%BDKWEW&W4N>8KiKBk82FjDKf?M6 z=Rcz2Kl>6k0uu}4Kfbz)X!XO=KhP3`tC%UlKafEJIzWZSKPAIUG;ML^KVXHyI(oH| zKV~(MtQo`aKk)a_(m2JVKVM6tD2p%SKd`RLb>m5+KPw+xg=%@|KR0O=;QFrbKgth6 zbJv&dKhpmawxIUuKa3laR7Tp_KbPP&RL8~UKMKc=j54_3KQcO+aVqoVKTI7SZWo-> zKSujA7hChvKP2zQAq?=>KUfuO3LqfWKguy%Dp}mqKWb-YoI?!eKf3yf;&rRzKRops zLAL4TKQj6!)7O&dKWrVD2DC)VKaA$((A%oWKUUgKG7@aKQL23XkYZiKVa@q@d_E~ zKfroC{6?Y6KN|f+y>pA+KTJXt7jP%xKL9@TU-l8CKbBg>5R!P?KgiX^V<&^jKLD!X o);5B%KbjUw>bK0&Kfu5w*n5|xKM>AU-oJ~jKX$~RyA_e_KRhFxwg3PC diff --git a/test.zarr/c/1/1 b/test.zarr/c/1/1 deleted file mode 100644 index 6d555979c30d69955b17ba23cc5568f5b1df6ddf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy05Eb;T>;^*Kd#x_GNa$`Kg?s9_R4D5KQ!rzY%SdEKc-eo z&7@-KKU&K}QWUY;KNfLsrKjmdN?_ELRKR^Q=jEO^(KcJ(2 ziE2l%KWvTL4Dn3mKk(!j^2|o#KjX2MAp`~OKhPBw+X#%dKb!_Qc3VQmKfy+M+?#0Z zKWvi8f6)2wKcs+~4e_k!KTH<*+>-PKjDxObIE({Kb3WB-T5fsKXh))IVKT2Z% znpI5QKNP*B$8+e=KjJ>s1NR#1KY%LN{HW;fKS2A!>g$u0Kcm$?vmQ|BKeX}l%*SBb zKY$00tBJC&KUN`>t|E%oKZ4qy=>zcSKfacPD!NbZKNwd69l&kcKP5^1xqOxGKS0S+ zKawfdKU?5u(H9WlKOzlCXz#Y+Kg)aezsC>bKd@4@_253YKjT}4LLKU%nQ*?scUKOZ(S55K|SKfpy%3zxyqKeBkwT+K$~KdQkP o3gk%aKWe|bXo)%AKTyg-CSTaGKcu4C{YVnZKjuM9u*{a{KL$LY$N&HU diff --git a/test.zarr/c/1/2 b/test.zarr/c/1/2 deleted file mode 100644 index 364d65a7b8082efc3539d58727d1b6ea20840b81..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy06av5xh4hUKbJ^mbG2pQKY+TIkM}^9KVP3L!Hi7lKllM! zG@9??KX%w^ZwL|MKcsr>)A5MlKUk5i-_TXZKX}AJZ)^72KVGiRt^QrxKZ4C;oCg%) zKk!o0v^EgLKW0b$l<^JUKV^x9sQfbFKS<0093lYDKUZZY@)%j`Kf}^n<7(*YKP2{L z$tBOjKX_(9@ftC|KLmb}?>YL}Kd<}EuDuGM1zv#KN#76 zZ7dwZKfNUIPDEVbKRn56+F~-mKg6}uC+pPFKX5dF?^99RKT=0uc7FTOKan$Mzy0dy zKgcL^*O?sPKS>npPZwe3KP+*uoKW7*KLcck*#z0^KWM)QyD)d_Kf+~)!DE)vKj7xU zb|%~BKX$p>!j-)0KlF)y%BD8bKS=dQ4T`|FKNt%Xks4aEKPu+R$3If;KOhf$@;QjW zKY;is;Y1~mKe88Hxt?m$KPubvpJor~Kfq>w5n1t(KV(*udyI9*KWn>>jZ1LhKhE7< zGYih-KbcEinfN*2Kb#D}?{quGKU#FKZquFCKOioLOC$O2KcENt^l)+0KS=E|#%`#v zKc(#!1qux4Kj^iw#+F;_KQ5(Anbwx>Km2zC)Ko>~KN|8S8@18sKj1DaDK9$FKaiU8 zvKdytKc8#(A;kvfKYQc|nH_NCKVFZKdig`yKY&a8@Sug4KjBJ*!x)d|KgF`#@y=xB zKX#JVB-}vLKV&`JqUKV-KW7D=oi~Q$KZHQoF)_s9Ka{$-<(@grKg`memaRP7KO_Gf o6o7N-KYzW)p`j$|KQDA+J=sp;KhOgpUO)bi_@% diff --git a/test.zarr/c/1/3 b/test.zarr/c/1/3 deleted file mode 100644 index 45a8acccd61786414e234358f303426c1c5b6b3f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy0E_)j&tIKkl6D((^XsKWMbt`t~NwKiJwhfGzXMKX4jqAw#ONKWyn=iZNH@ zKVZ@CF;G@Kl{c5EyMorKXi&1Uw#SPKM_#`+%NUvKU$E` zPC297KTxqfON@TEKm9XZKv5y)KM-BWRi>@gKXiOAB(g&7KMuAapi8IQKis5(rMnc( zKcHB^>p2_KKMRJ?BDK8YKQ47Cfk|}fKXTDBK?l*}KTolWEMouKRRzx z# zKc-=~uQf&IKeipUstKj;Kfu-WsFMtxKQV+;F~IBNKhW=SOT;X*KR}j7o~nMKKOT7M z*fOr$Ki2oyDjDkRKeNpT$a4noKS(4+e1KBvKN5|PY`g*LKS*Ya8(NUjKfpf9NNMKbToXW~j^WKWycI=v=JlKOb(m z$g&0QKT1!8glD?aKe))8BpAuJKke^|=^;hwKOBBjr}9VUKS)ULhD7AQKceGyS1&x= zKf*nA*sB@tKb5m@)b1JKKOfm;(l(^vKO*F1{cOb3KjaIs&(V42KaLzZ5B2WfKVU$7 z*qJn*KWu@Q0{H#xKcyPwrwPjEKbsJpsYsCNKe>f9AL#n$KL>*C3Y@X+KYisG%6u{9 zKMZ$1#Xpq7KSJp+w7g^HKfAoieNNEsKkyy^>$dKtKMlL=P?s?6KhnoZnX3uvKeD?z oHO%bnKhD+1$WRg7KOE|*mBZW6KbSdh-g@}cKlUYx$K?yyKXm<_5&!@I diff --git a/test.zarr/c/1/4 b/test.zarr/c/1/4 deleted file mode 100644 index 7fb4fb8bf32b8a11975ee71546062628823f4c20..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy0QjdUghC~|KUm2ypA(n3KcNaq6o$O)KTEJhsu(csKgZ+x z%vuWIKS-w-+10tpKLAgXz`OH_KZy<%Evkv)KW3nvu!6VmKNZ>vA6-u4KY#b3Nz~Th zKMGrgE0|oiKWM`HkX-n|KZkkBpzwX?KLpZIS$o65Kg{i>_y14D zKRI!n60t7mKiq|)09b6@Kiw>f!5@0=KeX2 zKcMn!Y5=>gKj^KQM`PS>MFbKR}ShRl*C$KWH!;f_2NsKf!myq6}f_KV<0C zo6>61KRIZ$X@-mCKY-~~Nk(g~Kd_H{tR#)CKPMr;>CD3IKmCkM83sn@KeIeFF%IzJ zKWMI?(;L{jKhhKjQDC_}&lKKai)G{x=}XiKR|1hm`vTa zKaJTM7Kc{g4a5QY^KSEW37x9MP zKUm8(o-=gVKSUX8opdtKKVR%l(z|T$KeQ?8McUTMKkDLJoM=SUKi2HD_2d21Kd^>0 z`iA)CKOn$xZZ)N;KPbg5UH*2KX9$+k?DuF zKaUr6W#cL3Kjs6Z3?wA&KX5Se^7c{9KN#dl(EX?1KZ5U~(s?uCKj5Mp_Vb{UKT^k! oJYtF5KO)J!e}t{qKiK29;)$B>KU}~?z2|+&KQO>FDKh!jKkL_@7ytkO diff --git a/test.zarr/c/1/5 b/test.zarr/c/1/5 deleted file mode 100644 index 84911de15cb007ae314b04794ba6a5163d7b4126..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy0DwyYoJdT0KjWkf6|#WnKejhOx!9HKKY&@QO-$eFKd=zU ziSjn5KL}uDmxfI4KX=9o-)(5%KcL*j_{0OfKQIa=!u)dTKZx2pB-(7gKTR>cNcDK^ zKe#n{|5N3-KT>`z+up$MKkTO^j1Tk8Kd9o;NlGTPKgJeic8mw&Kf<*}&rwt6KMZ9M z&?)l4KWcCxJ5ce_KX_onNe3FqKQy1qQtCUzKN5BbO{41FKi{wu0KR+YKd#S}lMB!9 zKZ(4=7;GTxKSZ>>>HKNSKZtjhXBEQQKfE0P636o6KNRP}11rGnKT@!Hz-njiKbUKy zX?yzGKT$yFSPhQsKd-R+t1G|dKL88VgJ`~eKm2o4zMO~9Km0@HmQzRFKZbVT$g&*d zKPyy1gLxwFKZyRs#ff#^KRmc4I|Px^KggVPQaez@KTL@ilMKL{3{^;0CVKcvV* zbS+fLKVHEjP3^bmKOjvr*A8a1KMGO?g!muRKRa?@UjjzuKaisCS3JeIKe`|yXc*?$ zKlzNBXYP69KNtakzu?ovKR{x|^|JiQKRD+-<95yEKil6x*@UI;KY(dGS6V2c{@c(=5Kayo5 ztTe09KiFFpT1-aJKWLcfEdDjVKeoM}q*?s#KkOIW8#Ru_Kd9G`WCvUBKO~=2-u_qa zKLgE_TtrmiKbT%b-9YBGKZY*@CC$3*KiWFkTW0FgKP+qUx0M>vKkV`i7gL$qKX8pm o2n2)FKMthPi(IDcKeI{%2B8n&KgfNU`_?tXKb*TDrm9!YKct*t}tNkKis_x z#EyyNKVVwYdC?KWKbxxW(?s0jKU#~W3j)pPKUCMBpS60>KQGnO8-r`_KX1tJ^@a`R zKdf@G;pEl8Kb^gO=Tzt7KYFTVt3NZ=KWp@vsq#$fKd>dGP8rqLKj89wIJ67LKRRsk zw4#;XKadSWU(U?LKU2|jSY|-rKbY5u9i{ZwKLDbiS_tm6KL7yOeW)a}DR(KP;d%rV!G@KNT4>TIc-jKZyoj zMZ47MKk!M2iE856KLA4IbNf16KM0egKS0R!re40U?fTF6W3KR7C5JxiJKXX@w-HJEkKY$eD32e8mKaoc*6TnsLKfUzpUG?MY zKQkW9A_AK0Kf2>Q`3Sr2KZIjrh*;_1KcJPP;T=xxKdl*K8N{dJKTytI>}9IiKO&5_ zP$UW0KL-u4Ir3HNKXhG0=7;ppKel>ANzBC4KTw+`S7Xt{KT}QAtDP0)KRw0DxLP3L zKNRV}Lwe=zKW{z{yYznLKV~xy$&SA7KZNQ+rxb|EKis^drJ+~uKRli?%~NaMKNC)2 o^E)Q!KZ?L10DFSyKkXyMBU$?8KUgm4bhb_DKccQx%4N&bKOFs@S^xk5 diff --git a/test.zarr/c/1/7 b/test.zarr/c/1/7 deleted file mode 100644 index 955633989e798ce9c3b7ef94e976bfa018066639..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmWN|dr->(00;0Nj?K!E$CVOJYef(9nAg#lat<{yt)iTXuEh|_tI1;W$~!LH>4~V; z!|Ha(b}N3jS=O;EQnU8cYBZr-nHrz}KmIjyhXgZ6j+jbF&eNlOjatOg&aVurx1h{F zioJwR!C$=~^GqR$X3J@rB$I-;j=}j``VlO$FJ`W#6MHp|O#?|*5Yp<%kX3f*Rh1ju z$~qt+ZL!~m?&9}lZs>5Y4PhZKA~D+rk=ruo)Q~r5x#e4$ms1I;VWj#uT@7|JK~;Gw zupy{g=#|<5A~3AI!7~^WldyOd9&|wqDfOs!vF}ceGNAd)Z+Egnh^9KJ^mucWq znowAgZbk)eY&Z8W3^1BJQs}aPW@?O~#n=E{PJNg#Jm2FKLB6DOL_g@KOG6f zKgDpNuxjq?KLF(nnm#R>KPvFts{q^EKfG#zl-az?KWM5qUe+ewKi;o;*n8;PKO7TR zuZX8KU|3d3gd0V zKcvEE;nlj~Kl{Ybb|OdVKl~{9t$WSDKVTL8qzNm(KX9EHGbOgnKLzu24qdM3KTMc~ za^^R;KU3{chWE_xKPp&oKp)oQKY$nO=25NTKfJChoU75u zKPWDV=kKbsKhmb?$dVi9KRxeCFeew~KeT0FsPo0oKgu?s05%}&KY+6GgF(9FKMMi! zMM=%-KmKoSS^=lvKi;psnlD`2KY$0HOCq3mKc6mETJ=rgKXeIT!&fcKKkx)03{iHb zKNDD7-bZrlKW9c^CIQCgKZI5AYsL8KKS--r3UKS+KgjKEr!gO5C;$Ke diff --git a/test.zarr/c/1/9 b/test.zarr/c/1/9 deleted file mode 100644 index a50244df0cf0ade9f9580008bf44153044bd4dc0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy0QAR7Z)?rxKL8Op3I?j%KQO@l0G;8$KU(Pq1rMa|Kd|Ar z(bHz#Kgv44@JW5sKMuFFSh)V&KWI8N$?*(RKNKQp8$ zkhFc@KlZ*Co2*alKlgz%Bc+z>KLm<+Z_LBcKPiA}Q0E!uKgo?QqFIgaKlmQ3%%!}= zKkDxAlhKKiIQ|m~ywhQKW4U%DRzD9KPv^|MY&7vKQ~+m7)j{qKPK#8xSn;= zKQetM7)^83KlTKAqbX_AKQPCs?op!dKLLh&xMwu#KNz^S_6nNNKZuQ%kCZvQKa2wj z*ul2oKfoZRnAwTLKXP%E;k{<$Kcp&2T!H7>KL8``-jjuzKiuDomZ5IMKgRWDdWW{} zKj3>_3hAKRKkspxfp%W*KYVK7$jYAEKdSg~en4X6KSu_{`;kxPKh%vn7 zKUg0bsX(~aKY)*R+3>-XKVZ+}Kc^eAhhqokKThsep2^eDKQ!0k z{n69kKek9UJiklWKaRy5-i{E_KVyMEwh|faKQb@#lh_g5KPJ^MTSj>1KgoNFq5;+K zKRjft&3?1aKj_wX{iM~kKfEyCFd~4)KP<0a6`fG#KSuPbvvASjKPHh&6dZHrKNy4S zL%F`hKe#`W+8cGgKRee;W)W29KYStNWSM2(Kaj28TZTp8KV(8Ot%cFeKe$IkccT}? zKU`3^Z2YmyKY2YpDJe1OKMI_=7gZP5KR}lYzdg33KR6ICU=YjKKYzFj8;kMjKcIZQ o%_E4SKR?^2HsBBHKT_5}N(bcVKSFMfY!dq1KQYYM^^4%)KWUJbkN^Mx diff --git a/test.zarr/c/2/0 b/test.zarr/c/2/0 deleted file mode 100644 index b4d4560e25759ea718ee56f79d9bb105d858fb48..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy0Jbg36~<)bKguQypv=e8KNGdR66?0+KhvALmk)jHKUmy@ zdrFSlKedQwAs7|pKfJKdl%Jf+Kk$mFY6A?zKf^1z>9?ccKNZDBT^4ieKlYaWkOpAi zKj$8p3IlrVKLEyuhgphIKRzXS=ONM7Kf0`B=l_N4KPuMO&A^x6Ken9~!28tIKTX&R zug|69Kcf1+L<&LaKhDM9Jf9ZkKNzM3W3~U#Kdxu^Za!AhKZL5}R?zCtKjX=o1RKk;tm!PfTXKiG`jIEl5_ zKMMZa$KA^2Kj80Hae1MlKVY4s%eL3XKM47_pVKf1#- zqw-|zKX;27HEFZvKViaVA6#bQKP)xq=|L{(KO?UM8~U{1KN_%|+)!1~KOjI+Qt-gE zKLGi;N6;78KY(tGXhqhVKcXBk4)3DwKlm5}^k3}ZKaiDEnv=_`KMGlThlP9TKV&~8 zR!pDOKSx_mN*&ANKkUCeJ3P7HKd{Mq`z4sUKlc0??hlpFKZ>%LqvjCmKhCinpK)jD zKOqxi?4`c#KfvpvHTuGWKY(Kyp_*=mKfL(2SSjztKkb&Gw5n_FKRDSX&E(?hKk)Fv zSpzP?Kgj=bb$`XRKUDIQ@P;?mKULg1M6FNiKfp1^RfdAvKY((`I;GLqKT1WEkiFFE zKN9ZlcH|H4Kf@b|z#)3zKYEYwC2ODOKhUx7EeYApKXx<`!qH#RKO8X=rbEijKY%f+ zt>9mjKSZk{jOAMBKegNG8hJwNKj4NOk7*~aKgHZ;-r)4$KR7BU#sVqsKR8u6^f3k4 zKdm7$%B3@SY#KiaL$k(4>OuKZ;nUu%;B> zKbXXNyAo>0KlmZb;ng9yKiCqDDK@gcKOo_9H(SlIKP2RFYj*O$KVV?t_V5XLX#KiSP4+T}avKLnXX#Rn+JKkQZ#an_5+KXq+wj5RKUR|alj#H0KT0W`E^T(#Ka54qQfJA)KRwu-P36JlKa6Qs zAlXUdKhVZ+;Jm=JKUdGrzEjueKQOOa9YC<5Ki;O4RwsngKa@4BI*WweKVuwSfGcL= zKl6S)4;!oKKS225Bw`AWKM?OVE$~*dKflL4?<%?OKXcAa_-pInKYVT`3;938KjsCl z3DDNrKjv|fsX~b4KSX-H!Q*V>KaixwBi4$_KV}FQbm4gKKVvk&--@Q~Kf-|67)wUj zKX=nk5z3_MKLLQurRDYDKbT4BtC67TKVr_;((gRsKcthk+|a+&KY;4A=k!{MKimx$ oXz8WwKggPhC`Z-OKeCknZKXiwKM2aELR8SqKdc7!UY4!dKkVqDBLDyZ diff --git a/test.zarr/c/2/2 b/test.zarr/c/2/2 deleted file mode 100644 index dcb067879597587f240e3e22e2642fff19349234..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy0Jyg)njMeMKl@1p^B`H^KWzC-ZbU`OKXInN+Eu~tKV!Gu zsJ+JKKj7JY|7kGVKW;Cdb_>hnKeT%52D`@YKbRe*Pn!GJKRj>lS5!3PKc6~R7w_8d zKTIvj#LyefKUy$-UKb;lh zA%TSCKS9tS_i*3sKPK{8Km!TsKUg+Zg*TM8KbjU;D{ZstKZvrl@A47EKa8YG9}S<% zKk}KU`&P2&KN2?(@tUaDKdw8BFjyn+Kbw5#zA8!TKUl)pmgt(cKb>W1rV&l&KZ-+_ za?#7=KT}(3`Is8$Kl}?Msccx`Ki;_!pkSr!KXEIHFRKpcKhUCLeH}K^KUmNw?f)Uh zKPYMqKW84hKjw9?ooO@MKj4G|mo1&rKlV;wGyX@=KR}FFpW_zoKN0T`>N)}CKOlG1 zL_RdjKe!|}PHkA%KRQ>$u{*`rKUuZNM7cQXKmO+5QrZCGKY*EHMAO1}KN$Q|d3UwV zKO|-UZ{H^DKV%-n4RM3kKU*tR`LHhNKQOKsy6$$tKSYT)KV19UKZitfOVkDKKfr68 zy}uNwKjKAsb>@^D zKNu**&JO~;KVU#uF%Z_|KSsAmXOUtX`&Kb#X8 zNm51UKf|ucDZP#7 zKgo&svjVf_KhBFUp2NECKlpgSjrKyzKWOG1C?Lh>KS&H(H|rkmKR1(DawVhcKh)KmTmS$7 diff --git a/test.zarr/c/2/3 b/test.zarr/c/2/3 deleted file mode 100644 index 1dd66b1facaa0136b19b3f3d268f899087c07762..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy0P53z4EpTqKRP6y&UT~MKggHz+*n8qmTKY72T+Spj>KVUZgp@^BG zKdcKb77(!8KU!41w6Am1KeX??gdWk*KfHbLP*)x7Keo4{^SPbWKM4s0{HM6#KX9gM zYl&psKS2?ZCL_n`Kb0FR6K^u>Kf#*y8Ae>~Kl;ba$Q7F1KLDw>ad#x#KUD2JX`Vdk zKN#8_SZpoaKYJf|A@{)SKkD+9mE3>hKfFJ}^WGiUKe#6U!%9uUKieyU)G96DKXia( zup|V}KMS-B)z}s8KeAzyKXXaNKc8*}Vp;v*KhRLYj{l0R zKOUOkfupnOKiQJ^a<^FKKeIYfGOz6GKcK2Ho;6FWKXS+1u%OP~KT6#)|Ja)9KfR5| zxb|)7KcK}}>Hqw=KiVZWbKU_+X9jAWnKMZcXg4zb@KTmlB-S)laKlYkAg$}9X zKPrT8!aBR*Kk~@T(1q>jKVTkwvz~{TKLC`yd#}FNKZPNId<(naKb0_OB*gmfKXajZ z%hL1hKSD?BX@Q&UKiC&->HYW2KVnX(LsZ@GKdc4yc*D}*KMfo>di7T1KSI1)B^@~4 zKV8~tg*5u^KV2TXm*>FlKho1O#`aX}Kcy}?Z{eclKVZI%2?=NEKhR!*8ceX^KRMFL zd`JB1KUxu%V7RKPiKv|ETxiKjJ9YJTX7eKUY%Do71l6Kiw!wQf=|+ zKVFf?c448}Ka4rNIhLmCKTJwUDE}xH>KXH$=&GC5U zKWBr{|4u^YKeTirZ@kUdKVv3r+S!`wKZuTT+`t6cKi7ZV1@=$nKXUD0li{D#HVv*+PKk}i*s9`PNKQaW> z#u{qaKl8>7`3Z38KVv}cU?^(qKS1%+U)codKb~`N4JK*ZKTA>u3j*`wKj1q)mpbn1 zKN=Y#1j)hKKe}@<*>UUWKT;hR03}?~Klu9ePl~eLKL)McXDZ$5KMk}uITfkuKd$9o zaj*i^Kdcg5=A%E&KO_Td7yj_nKR%p6fH5TPKOf!OfU5uGKai=Tp7wscKYTNMjN3Kn zKY+j>5z;^HKZH_ydv`9*KL8c1HAUxZKTvT-wsh<4KX|76szO1sKb$0}L)y^RKW~~M zHL-N_~KO*lzl4$_iKX@nhYD+NEKYqKoBTMYuKO3|^ze&>M zKQjK1UXXFoKW+urbU538D3*$}KiSlN!M@|;Kdw_F3Y@jlKc@20IP-4lKR^R@ zm0woZKh}NCN(AuMKSKOaPzcr2KNYq@?HWh!KNM@nS1?l9Kj1}`PIVN&KbLKHt0QXZ zKTx+95!3dyKb&$r*Ja1(KlB2~%VomNKOm<}lwIA>KP-swN<^OMKk%-A*Dn#lKZZ8a z4Y~l@Kcst}?BAK$KVC3BjzdP%KRDPm!I|N+Ke5&P0Ryk$KT4s!`CkaqKd=hvO?qeN zKlg$CN~CV%Kkk{Wt}hhqKS2ywFkKNz54mnc`rKV%ZYa>uFFKk&#bXw{qRKNP;i$jcezKV-^5NqqO` zKX%zKEOwaPKd@tAY)AW|KW5|O!;gLJKhCOMxnue5KX7#o9Ae1gKVaqW&foIJKdCvY ozNl{MKZrZ};R4O*Kh1u)`%PTnKd3YUS?nUaKY&c|*@$$HKe}9%fB*mh diff --git a/test.zarr/c/2/5 b/test.zarr/c/2/5 deleted file mode 100644 index fe065ef073833a16f74254116a16ba84ffd2c838..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmWN}dr->(00;0D^U67IHUCVZ=8?{$=&rshF(e)8E?1UU^EkUOqst@YJVrvTm1l@~ zWwu-+dN|Qqo3(yhByDT`+Iu6j3mN|Z+$Ze$ygylVf4?9~NI=a7c0msYLM+=pxj%q5 zWw&?VYyw>w42Sl}TYRPUJsU#31=SYy90^+s+bRdjpukK1~K$kN4N8maw`r=a?`N^G-(u>MnJNqzkzc6d< zhmW98iq0+YV`3ninp=OS4ym=tHAa~g7Cw2o;9(n%kt4gGRFWu8u@`F}HK8cl7m_Jz z1Mfjo9($n)e;J|UGZ`jqf`(8;Sm0?NBslwYU~O#LKSJz;C@MTiYS6%~aE9{~E~Hbx zv`pXQ0zDnVf$d_b&pf5|cPe443$C1bQU~V34m~yT6}W{ePRlPnyvsIUstz+jHc3Y% z?#t0as3(>!RpXHD&c=MU5yGFjzY?<>VG>alp1BS%uNKENme<1aAYKzQzXOXx2ep&b z4%9^~sTsDKfJ|wZSa+yUa5`%FU3n9{g6%?mpbHVteXkQ1w1WOOMxJrF3}&4{EF9;; zkhkKsDc3E?SYX@bt_2-e9JL4@^olqf@!{T>*EK8(C^zek< zl@Z-oymE5Y0lpr$Wn#qZCqQzj#yI4SC zmA`z4l~01Qh!N`j#=*l;_r#P?5;>l^CAP5=Os`bKb3TrK*2KOKL~(0&&!U|Kh}d=h3x9wKR7Z^$SDcvKT|HMvv?Nb zKOF!LRo^A}? zKN4cgXZ4oUKZETvuFT%+KToZ!?yVQ?Kd3uOZWgraKULIMGJr4aKV-Slik}wTKWpX( z7kO{(KM-7@M9Au*KOll+8$)EqKQHn0azn4|KL|NE*YgR`KUV5;Av=`RKe(YE^*A5k zKXfjenH%ZnKX{VF>i5voKkS3jgVaIAKe7GXh&hVuKm1WaX8>~0KgdbifX2JSKcKa% zWs08TKO_Mi9ANCwKcemOl0Em~KZI4<0QLUUKU`MGQse{YKWRiz96kZ(Kbpmg4;-fB zKaZwo9?lBpKj3t%=#om?KhoKzj7L%DKVU;V$_)V2Ke$l}7- zKi`6AEew3+KWNg$>g%iAKbfU!!UiwzKbz-sd)j^JKj-!oyl)5NKa?3Eddel$Kfs!` zSL7zxKPeLul?~A7KX}y3VJ~6lKV)SR=9X;hKjbNzYqs#qKSYHp;7|4AKQd1OrH6*r zKlQ1M)I5jdKPd5QB!=MAKU#|e#0PKUKN(!Lk0z_)KL;?N{tF@OKcLa1{6tdkKLOZL oR83ayKS&Y>B>9HMKZqdIhzLU3KlJee0F02_KcE=Me6rfkKU(3Oga7~l diff --git a/test.zarr/c/2/7 b/test.zarr/c/2/7 deleted file mode 100644 index 0ac02e928c7f17394ed94b364212e2cd8ad5cd2b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy0CaKXHx)+YKLkOo2y+hGKc<$<)*qzQKM!eMs8ZSGKL-q= zgb8KjKZqDo5z8IuKOPMXUTeAFKMzXHoxk1gKM9+XX@rUFKRw_IB<+mmKOj`4et9&( zKl0kya8e@RKT;glt*<%XKb?NwXW$#=Kk)UyOF){eKbV^Vf<-jiKiJLeMB>xAKNMX1 z_-3rlKa7>M_Q1}=KLsZtUYzjmKMR5nUF+KBKS2KDxOd97KcE$TMVKSDKS5z8S@=om zKk!Q@#mqnHKYk^}i+3E;KMAQ|=t*hlKVY<#o+dl7KftJ5LrSfNKOk6Y5U~HTKgut5 z3Yc;1Kez~lx0C|xKZVIxk(S%-Kj%@Fo^b!}Kk7}(2Kenu2`05wdKm4%cF8B4wKR@1r@MEy&22 zKS0IJ$)@vxKO%hiI(L=gKd5GUnjtREKZ@k%Hx26EKSa$=*q$%zKNyYv+$0?9KM=2a ze!pVBKRhg-@{9)AKLr_Kn?ADbKQMlSqV?IeKWM}B;kzQ=KQo!GX1C(+KNGI(^G3Jk zKUgcLnvkU7Kd=^!R~JszKk2+hoVGaNKWb$9ZfxAwKkI+#8DlH%KOvb+;LJnlKe*%D oM9y*HKaUQzPs2UwKk&5?$PM1MKUz`!L9xZ(KekUO>wtmeKf;QjumAu6 diff --git a/test.zarr/c/2/8 b/test.zarr/c/2/8 deleted file mode 100644 index d84fb8f7d6e97ebba82134920cb176f32f683b43..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy0OF8I7J{$kKg1x_P7)O2KidWqJ8?SiKNU{q&Vd2oKW@-eA$wTuKmG=PT0lhNKZco~ zGj`+MKmJgdKyF6eKd>V{JJnFKKcLdJIQzEUKQK?+heqq9Kd}1)@L({nKTs)4_7tqs zKOiA#xQmDGKN2A)NaNe$Kd8D>wzO-|Kk#@*BE*-sKX5^P6Fm&bKSrs?BGWVGKWS4m ze9D{WKfEuulB*rIF2~KSB&Y0E*4oKWgiu zc@BT#KQi5(2)g;%Kc6VyLR)m>Kl!sEe#0s6Kgc+>i~NMeKar%ytuy20KdXZ)jQmIF zKWrq|&7zRPKYTqip0lXKKVXb5wJw?BKlvg7N|lS~KPz>teL;=nKa?2r8I`}}KYAIt zZA0GXKf}YPK0@E(KO}X89|DfVKbTMuZwplHKZxP!?4ygvKdjo;`mK@VKU>Ie$8a*` zKhv$pVAdJwKi)^5Pq169KWL`X#Cz|PAnwz4| zKVD;hKQElqKgg7`6ar=3Ke&QUQzFyIKNQqoa{yY^KOQ_wJtyz%KWe`<{z?bvKTs*b zFz-|1KSW;y#|Wm%Keb>rr!x%WKdkn&XG|vEKQoIeiK4pZKlb0ZXrZm^KekWtC?V?A zKV4%?RkUc~Kf;lAGSQ3cKS1#vA55ybKlR^c%IMqUKk79Q2 zrDzDxKOz4Hs%N9^KRjObTpX_LKYbP)3B|7AKjZ0FF_$9dKb*BnjizVsKXjn&>Qp7j zKfvt^N)TG6KfukUByaNCKkUVCJyqk#KkQrRn}0*yKiqb#%hbfeKm79Wzb-AnKkr0C o-cz*eKZtNSB(s zR$NLsYfQ8sXMk;lTXVD7ivHzixr>WG;<)paEa-d}7}uDQ+D-+sZG=EX`v7TO zf;K0~0+-CsT4DJJ@)r8!P!ftUta!d_vUU)KsXM)_4TDIRcsutV(&AfzF|Il1Xkp?G3RITbr3F7k>=lihQei%TN3pErn{eI zU1rFk+o6{&H_MUhw=J}BjRlmg0o~tXRG^;E@On;BpmO3{6n}gI(>fEqsG}Ei3kov# zl$t>~)0!e|`Ttw8;a5eB1sPSk=wR^>(sSk8{YnYsbgU>Z{`v-t3hVy376)9M_ei0E zrQp2SLigKfL}*cnZLfU<31Y{YOdy7-+A&%B+MIH|H z8qS4B3T$8#*0Q@>>L6pUCHt;1K$9dCMwb>YDZ-k(N@w+9iFlKB6kT`wR6I8`XxC-$8pwlSDVGkubDE(gyHi|g4lqmTwQQ~$#1CnA-AWnM zC$BC_E0rS8FfG-~o3VOr(x0-LPjF49+gVpTQJZqdXSPxUqvD#R!(_wD-QLD>#wg;_ z94ER;2<(qnT<*W30ns+EdhC-4)Zd%cGxk2rxua3suj<2tr-%5nxjN)OZ1NiDwIfVt z&K0#<@I=>8CU#ds-k2Q0d8miAfV942ogT%W9zjH0C;n1jNo5mu1Po8Sohq}SC`gch lT0aVZ>Nx9*R)egFgW(sWtVrBo9FE;LgsJIp_K_n4_y-DXq>lgq diff --git a/test.zarr/c/3/1 b/test.zarr/c/3/1 deleted file mode 100644 index d60d3f7141b3cb99ab75cfdeccf9e70a3852751f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy0QXMmVZSltKlo1fuwx9(Ki`Eb)Kj;@;;Yab@KN@Z> zFh&;VKR&0Dv7g!FKVj6i7{(OoKkfmxWlH+*KO*f8*VujIKSY(`>RhYHKUx&y)ufH! zKdYT-F9jFjKL8KDN-1rWKl*&lWMhcgKa-T+J=){tKi>9%8q+A*KYYnON}}k`KTnn^ z(~QvRKWF;{)kewXKfFWTpicM7KX^tlRg><$KZH(B;N;)UKcHru^P>CRKg|D5e^jx= zKM*={>dxu2KODQowWbEzKR9R)e=KObKglCm(Y6}uKkhq^r@PG7Ka>{2@uUaNKd77n zTC;}cKcFRjKWEz3KX#8#6($bgKYXhb-yv}2KLe#Zs-yPrKSy1o-Z5k3KeV5Zo6gn3 zKTx+&?z5rcKLGzz6TL^OKSwp^KQ_MhFfN$vKb{4^!mx4eKZpT!jCKez)-iLPne zKm3G=KC|M@KN#6B$ke0TKUsUl9v{-`KgHU(F)!=kKM)>{?}sebKirTY+cS~MKk(eY og25u;KN@S!%9P02KQzcZmzNgmKZHc5$?D+CKQ#~%v?)s9KdFzL&;S4c diff --git a/test.zarr/c/3/2 b/test.zarr/c/3/2 deleted file mode 100644 index c3c86f3b11da67c99c7cce21a3d38549b0619fb7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy0AxJLj5@dDKR`EDQmUe=KjGT4_6)q@KW9^wRkBs-Ka#6P z;j-b@KOM8WIuai1KVc(n$j%4qKZo@)B-EDeKfIVIWYR9_Kd$6Em-*$~KOlpvUSwP8 zKhQ>`xRh<#KYN;zC`7{SKg6<)Vrmn~KbWrnTd@|(KVnWj3iz(Kc!GhJkGu3Kcw0hZ!Rp>Kk<;oRKhOhKW|1d z&zzzQVbKZrk@12%fnKSsv4lbOWqKlH4dpKM4C1-oLfuKXpH+J)tD-KQN|4 z1ntJoKSDM?k(1rrKR~=wtZ_%6KeUs_-W93VKNet~wR&RKKVu8kg{dvQKccS@h|F%+KNloKFe>}$KSTv< zhC!6kKae9BFc+}bKRlD~NhI;vKOyw})JU1PmJLDJKa6-i@5;RDKgS7XSrs7TKQs{+ oK~H+xKl@)Mfx-vtKOZ2uR^d(JKcXZ5U9vjwKfoBsjmjRuKb2IOmjD0& diff --git a/test.zarr/c/3/3 b/test.zarr/c/3/3 deleted file mode 100644 index 9f9da8653fed8779a675bcd9e06c7127d9b19eae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy0KB{}BzsNSKfX>)?CzuGKa}4C4`T<+Ke}U1 zKlEDeKR86;%0P|QKMR;eyLdz3KY&w`QuJ8KKfKNUw2J}fKa%$6xQr;|KUiy^u*dVv zKXz(MIN}S|Kjz~gUpPh6KO{7VQZn-CKfrBYgpBOvKTx`^x5AOJKR5uHKg0~?Kevt- zYQ4VfKiDSrWmpKcKi0MwV%aI}KQv*pO* zKdgo2Wq%>dKfo9J>J5}KTK0UOB~73KP9rA2tP*RKTM?)e3J(5 zKR6o}MBIJlKM0#npczWKKL8m%_pDWQKk^h^m;~Y9KS3p7=IkZxKe8z?8VHB&KlGFK zjmW|1Kj*1!=x1c?Ki;vOqIcEoKh{eC_S1aSKlY<&=PI|+KhOjGb!YKPI-%$2H;8KRW-IU_d9=Kd#_P7IO06 zKM=W_y92VOKlRWi@@E|5Kd{A4{r-KVKVU+d>@VckKP+4~@E8KbKirspL14nuKLkCf okB&UVKR{SBxZU%iKWj2D#^aaeKcbePhRU4KKQAH{x*5dfKNh8ye*gdg diff --git a/test.zarr/c/3/4 b/test.zarr/c/3/4 deleted file mode 100644 index cfca9f83edc23d8ab2ff0924ef67ea0c49cc513f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy06Hh;9192NKW~YdfHo%SKUIjy%5K8xKNsN(HTaC-KRmX& zQeK7VKkoNmE%&$EKgRuMAa!HbKkh9VWv!0qKQy2)L~zH)KjI?`-2N%#Keh#634pfU zKU8^)<>tb{KX$8rE&8+2KWkf{V4Qg7KLm%)jIl)NKicI>KQ^@4KQJ>kt5E98Kj!}n ziqfF&KS1Ubttd*HKLLPz<=&^~Ke1~mMZ-bwKej>A_bU(VKa;=cBZjKyKmOjuV@YMw zKe1gS-^?iBKd8GI&oZXxKOFmLEDC?qKWTDCTi%P|Kc1G!)j3MhKfCe7$kLVVKMJM2 zXZ#K5Kg#$xH>u$7KYmB3@Dw`aKR`csva*EeKL*2*DnwuBKTb97b_M;{KPJ;Cuo?g0 zKhP@=PbR*pKc>=kK1yomKSI1AX_tHIKU1(2sosF-KWf_n%lTH@KUj5Gr&22HKTQOc zk_?FBKTK<;Ux7WuKX2XbVJ=+nKNMj+s}oDmKb=HMgJO{BKfe8ZaLaqqKg(XN82UZn zKZH+gsd>fiKYpLpz%@zeKZUqZdV!DaKLGTUxEHKSVg6$8Lb;KhS%Zsv5`UKh#t#Akus0KcH%ZRCOcF zKkqzHG77luKc1@@&+WhIKlGx!lnwppKb?Moog9YjKj~!(uZS@1KQ08?XY&`@Ka6|k z_<}9mKj7hTUrubjKZu94DJ9~|KVZ1zGOg#MKaCMCp}CObKRjvoqjJ#QKOm1Yq4dDq zKZFrh!?pX}KfuSoXlufxKb`kHN^+m)KQ!KMf{DbyKLq@T+=kP{Kb}*O`6xT;KZKNE z+0D7_KLGJbKf2iG5=GkH zKl;ATNTdbiKV)OXjimk8KOa5Ne3{eeKMI6893KemKd+12=8NF!KTukBwwc?bKbT44 o*L;<^Keh`qzg~asKOnaYvx(l*Ka#?zoE>M>Km6Q=g@_%>KQ{KAJpcdz diff --git a/test.zarr/c/3/5 b/test.zarr/c/3/5 deleted file mode 100644 index 9e1753b0f456038316424c2e7a721ca4da06d7c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy08lo>9Sv#`oKc{T}OYVd1KY}mKlCewEKlYm~ah`$QKX&yG6aoF!KmOIWC-(^A zKThTKiKZaQN`&lRDKOiL(vpHs& zKLEhj*%C*@KhQwC7|MmwKOE@63H&?bKZ2H!jvL(WKXT3_-X5gnKU{2Re@8RTKRCwA zMoDtlKi2R7C7NOFKbzuN@b0PLKP;d_Z1?!vKMYmwYt%r~Kfsvm9LT?%KWu{}4Fp}? zKg{&CF`co>KLHne7=2CcKN?>_NOmLQKPGx|BdwCsKY-qV*NM!cKYs(0=>_rcKhTGv zv=R^4KS17;S}p11KZ;7BbJfM=KZGYvKG_7qKi-p4-Hu_|KR53*fKkz?(=)TO)KLE(@-_3;AKWs+W7v8__KWra= zbIr-nKaz$~z1n2yKLRNoz1&*iKco_vG)CKOmdx$V_Lc9#W3p zKj1osFNEysKN?dIl`-GaKYE?UN^&0JKckf~{#04$Kc=;5jxK%JKPuznJ^8%mKX8H1 zW6NydKY-H8>Sf=jKg04mP+zm)KbmKKTyTrufA94Kb+EU z*3KrwKQXPzXKQ!nKbA@-p(?r1Kj4?v_rPt@Kk)Gn$V)%sKcKsRN&jWgKbn_?{_d6S zKl*E%XfFlWKZ>jhw=Q4hKRD)Fe`sgSKZY0uVpKgJ#^2K92?Kd{Ey!8%v&KQoH2ZBDf7Kl7WojJcQTKey{ts?g2rKg}YtUO2Jf zKWdC+p+M5&KR}dRfVs$#KY(bHGnIOTKgu^$KftE*?tq`4Kht-u?+20PKV-={ zEJm8%Ki}TMU5k(HKVYSCbvv`CKR&BqDhxK{KddAM&yfw|KWbY>L_oIeKQ@-~;2D|h zKO>H+BUAD2Kcca&mr$zKKQ5Mg-Kg1_3KLnI*piSH5KX^AI;yd@ZKN!*y z47^6XKer991IJVDKcHWoF5Mo=KQEeZV9Mv>KZO}RB@6}QKg#4ypX0~sKRI@5*`5jL zKUhAEU?4WOKUtt)_8aWsKilEbQ(1rFKX5l)Bj;+aKeIRYmg6t!Ke|Q`?SBU5KfuC) o343DYKL7=rhD(!_KLE+n&ttvQKL`|>o+-@DKMFypvCC)HKdvs5dH?_b diff --git a/test.zarr/c/3/7 b/test.zarr/c/3/7 deleted file mode 100644 index e5bafeec8125aa16df6ea2f9fcbe25490c36b2cb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy02F9cR2GWLKj6{cMi|JHKQ{In9JJ!%KiVWx5rC@LKgQ4o z9=5aFKfto9Vw>cbKaub|(dygnKlIgsS>C8Lu zKQGC&z|!jAKcr+@W#-)8KSmRAi%wzVKdy)xbRID5KkEiIShaHFKS-7`md%9IKTGbQ zetCcGKL8#nLDeDYKLquA7vKTaKdjAQW?WL*KlOMlKSuNDKb0Y1QCJJ?KVYkc1mRhy zKPtEg{sqYGKg=M)yNM{uKMZdqfnrt8KPVUww{6eNKMo2?9Kf{l%^0`OnKUhVY)tE8nKd`eSWbme@KVIzRiRz-`KcKDcO7vmLKNz=7 z2Z+tHKYNIlustN^KZ`SXY1HHCKfuDPt&F*zKjc^tF5!~dKU`W!y4x|+KM|K$8ajC7 zKXjb9fpAUNKi;;~ZBfqFKeA=qA~JQ-KhOvyW%m5SKPY;@M1RZfKia8{$4eROKSY!L zk-dWLKb`W3$4Lj{KSOig)Xl%-KPE{vThWf?KZdAF=A(JhKgH%t?7h_KKh_iWsa6@| zKLCn5%0>p@KUj$I+Ka#9KR#BYnfZR#KM*{t+!#{VKl@~0-264|KT!ALXfW-vKl#`) zu^9g1KXkv&PXuPgKbD_}44Td0KUf=)_fk~EKhO<7R&xcZKhTzzOkJO-KZ%Q{`eEMd zKfiMmo^?0tKU9$4M4E-qKLl$)5w>ICKS^oS5A)OEKN?4EJTUvvKWwC*_a+qAKbLm@ orHdZtKX8}eeEAHiKZ=Y*)GmSVKRY*sAEPtlKSm1)?lFtjKW3bpCjbBd diff --git a/test.zarr/c/3/8 b/test.zarr/c/3/8 deleted file mode 100644 index 60ae68a5f6776bfd609bbc5adb66a28728392fd0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy05p%ic|GsXKlSUNU}&!HKT>zW!-RX`KOh7dDv{FGKjE8I zX%`mfKS1|9W3IA`KXB>csEAUdKeJU8BL#KYwf!?ZLYhzKZuHGniNRVKfF+;mrz5&KT!Fu<<{t=Kk3X_g8Vh%Kd2!SwpKP>b~oO{B@KO|dl-_LQyKMqbv{_|JbKcI(1Gie&FKOKWH7zK&t zKU~WkD4#LhKhp7kT3>VFKZXcs!(|WTKliLN;>X75KMdaJixd3jKd7M6^CY{{KWzPR zSno^iKe&wqYN!{^KZ2Z$<9zScKNxzt3@l&LKM~XnF32_IKRnH0#@6-gKR_Yf3Z3$U zKW1FO?7*kvKV0-9qQeB@KXNB=OF!D$KR}nt7}>7cKW$mRa368tKi4sj745C;KklUj zRKb+dKVWI^t)9fQKZrd-wEKeRKe6VJs{Li_KWxo5?Xh6%KQ``be`Vq5KTPC4l1NO- zKRl(tLG2*ZKLE16#MyVgKM&@O2Ieo~KlF+9_fU7?Ki;T9Sf|k8Kg2;NE6+67Kl)`G zhWb3yKhN{&25zG5KiE#cr*E{=Kk1=({x{3#Kas6P4v>lCKdBqi*@05*Kagj>RMTwN zKOXC`&us42KQx9tv`_ENKk$f@AA4KQKNx}1Ta^LJKPulNVV_avKXNoMV53&tKVH|> ok%)}kKX9tYvh~8fKd$3k1KeudKO!W7vg8r!Kf38tWhQ6iKRlAB3IG5A diff --git a/test.zarr/c/3/9 b/test.zarr/c/3/9 deleted file mode 100644 index 959e2c1a76f2fa52c7e3e61c3feef4d6709cd40f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy05o8U`$swFKQ_1daX6dpKN(59j(`K;Kd}q$j=*>4KmS_A ztIrDRKMr^9ty@OeKe#=lOO&$aKU(AO0GD2iC+8f zKTP}d!13VAKM+VbM93)4KPFaw{@bJFKX`eo*oqeJKSe9A88+JGKPY)?dRKeWKk&fo zJ_8-^Kesn*Gzcf;KV?CY%#E<&KTV(k&sgQ)Kh%O3-F#x;Kfp4Bq&GLBKgh2Nd=mr5 zKX&~A5DG-sKeFrbN=VMrKU^KTk}Mn4KW=7y;hdT3KNf)_7dDORKLPR~^icxlKN?Bi zEDd4YKNPUAt&1?>KWdUCkWb4KS6RQYLDdZ zKTyPk?w(P;KQo}4alOspKR=9HTZ?Y$Kd`3JZwtlQKb2^-q|u%0KQs)53qg?9KY}Nf z@ed2uKNzVwSL{E)KXl)B@b!t!KWRnG2zq4hKcZc$GA)KYn1w>dtb}Ke+8luna=%KN?qYvw2wKKU|YC*Ssd>KddDJT6{OeKf$8H z<0lH|KQIyqEKA&|Kar37bTt0yKmM5~glYEMKiC0SOk$14KhO~wq7+V}KbWmhVJ+J0 zKS|cntrX zKO{<_iI8K{KVV-|MCn+#Kd4icGmNd&Kf-Kps!|2rKRB~-$H-mTKkyy^^KvZQKhX7Q oZ~p_*KkdD@r#G?aKjEzK(FVWjKZEKIqKj|fKfvzFf>SEKKTrRYuK)l5 diff --git a/test.zarr/c/4/0 b/test.zarr/c/4/0 deleted file mode 100644 index 7c18753701deb923dc2ca75a707f496fdc0f694a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy0LDGqAYz;0KSLAJC;@8jKU^1jUN3syKdlWxaQIR0Ki*m> zY%e|BKWmPL4d`3#KM_jXua#WxKaP?FJa&BOKaCU`_%8G7Kid{d%4mh=2{gKT>?O0?TRNKk|pcq;H7CKlGew z!N^L&KTTiuJ3}4rKVpSd6&up(KTRMPVe}T`KmYxK!FI6ZKh{2~^%X$nKY%jOl-uvmja5|KWL7jIiAGBKLqrSJR4-?KRz_D_|?kR zKl&Cdb5jG|KN#9CZWO@6KbBIl@_N_SKa_N{ha_~?Kj3lY74uTlKVW6%v}@;}Kkx#1 z0-$`nKOjW?z2ZQ^Kkt^iVI`CAKOXs@T!^XHKjglhY}(G+KL8I5&Uj?YKd^B)HVfO) zKOM1OM10TXKjvdux2b&AKMY6>JEV=@KgPAne*@>-KjCtwTsQ9PKj;8p@RsYwKQ>8f oP^w|=KUlEPGc1nHKcE4}6_qZZKdqiefY##eKL$rB(jA)aKWwv_v;Y7A diff --git a/test.zarr/c/4/1 b/test.zarr/c/4/1 deleted file mode 100644 index b6dde466e2eac05c19f70bd79e58a99befd4dbaf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy0AC;OBh&QiKSCNSg}E})Kl@?Mv==exKb$QU>|l7}KP=O2 z`Gj%gKhWGE3izwjKk>)T32zZ zKa|P2ZPb3oKmDqFFl|ZeKL%gX+CfUwKeX_ACakQ-KdYu=SBCQIKc{i{M0ox0KSXc} zt=I6vKf_8!SngWwKOh4Lu+iMRKX(c3HWk_LKP-gc3(KJ6KR9ZsoKxhxKdhZV`w(Q* zKPGGRk%w*CKiEp50Zg#&KUSSn2?cfIKN!_}AOIcLKluBxk7#PYKlTdF1r&VmKWdCb zik8mZKLBRUfAmb;KcGzc59h6@KLu3k*Dh@0Ki%@sV(UEMKlDMOKfq+uKh+~sBKN0qqS|LN_KWT4*AQ+SD zKP~C6vzcz=KftJMhSWu_Kbkv?BVT;#KimPcaKal^$lp^`PKek86c2~mhKeFYI zSI;}xKfVmMsy`&tKkafB6;=b~KisAV4B)HkKe{@@XEV;>KO7;26gtDmKZ;+2T;S60 zKeHwe-djB4KLm3M@uPvsKhOtmB|QqdKcvJtSMWo~KSm-j9P!%QKLdD38wYFYKQ0VW zdH2WdKdR6Z1=5??KkQ;>Z8TWeKfW6P*5^UwKk}xF`5V~iKaLurWu<7@Ki9Uu0BaZK zKj`uD3Q()qKN>-tEuea#7vuKN6wpMu>ROKmV{s%OrE|Kjf7ecKMIY zKUa``nPEoZKeDNjs7N5?KctV=_i!@qKR|k3@e(?hKlD_xi6H0JKgkt~SoD?QKi&Wq zr5zFAKgD+~(e@$cKjd{scTD5qKMrKg(3=)>5qJKQ#BW+E~Qc zKdBiK*2swCKLkmi>BKft?)2&;&WKbTo7%-PJuKcrcEm5}o7 zKW!R~hLpbSKc)p~(3yDNKNgLw*ck5GKS&vKU4BcGZKajA6 oNN)zYKMXO@%BQC1KVB_u)Rvm&Kd|k*C@tyCKW&2O4~Tu_KYU-882|tP diff --git a/test.zarr/c/4/3 b/test.zarr/c/4/3 deleted file mode 100644 index 066045214ced1d0a7a7c2f3abc2f0c35c35cf76c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy0NARjkli4{KP>G1gEN55lKimTEj&@?iKSFd`GjVg`KRK-p zuZSk@KQ?AXHUNgwKb{U3#5%O?KR}u#^CS+zKfscQ5(xjeKX?T}DipWtKQIjg4wzo3 zKac>ip)%{_Ka8oo$H@KNKNRF;oWn%eKbXlCqGl+}KbecleS6RDKOi0SJ+`FgKY*Ub zA_N`VKbxoDwY_WTKSb`fo*&TNKbSMuR*5^fKcJF++KNRhGb;Ts@KL&dO28rJ0KOPeZ1&RUYKlFIEoRp=^Ka9%97+>S; zKb5cw=Z`w;KVwcDAP;orKWqWVJhYF{KUnM#JtpVLKQ3zdnxZ4sKSZg!iE&5DKO9>V zoGIVeKVIyiu)qbdZKP)WU1g81KKUVx?IP_l8KbU5hTm*LG zKhriSdMgp-KN0E=t~asgKMOw39k0aWKY@l_RE&w`KPf@2ZOR+%Kax1tusK-LKM~xS zW-OiOKLq&1(?xd1KSgI9r)Q?*KWX2zwsO1YKTxa?&jnzyKa8&v1AUOwKbfsrR>#ud zKSzJgf~6+xKS?@^RIJ10KfnNfGln^qKewex;S5RBKkK-Gl|LEjKPyz{#^!tCKm1XA ol=8mQKM9NS=KqoEKYUj&hxv%jKOwJOXPm6=KbjtnGfDjFKdu;#qW}N^ diff --git a/test.zarr/c/4/4 b/test.zarr/c/4/4 deleted file mode 100644 index 5fdced2c97395b62a6feef13c92e827ff6631ec1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy05F=ls`caRKf>iLu%(sfM86?KgOsMGdl^{KUu&bLSM+{KV5R-nu5dUKM=}Dy3b~+ zKbi`IXJc^cKh7Yww#*CLKP+4M6b1^@Ke1J4hG%l+KhS*V4djd1Kh&1S&fgEuKbUWl zLCxLjKSUE)xsw&iKc4zs1E#&^KP?f1)(AoGKjBq#KB({KKVUjWktDR+KY(t;E2^*5 zKOm?%SyMKdKQ3qIYj}6kKScdQ*GQP*KV(c~fT9}VKWeb5e&N&DKMXGn%;7V@KZJz^ z6 zKZmamH1V9}KQYOjdjt~ZKasT!E*}f)KRm-K14f_BKcqgujZm!bKfO8Q@wGnUKUi3~ z+7)!^KOkB1T(f7cKkDVJ!HaO-KP)Eu5dvGnKP208&+B63KS+pp5wQKYKW5k$%oxby zKP9Ff9?|&bKhyU>v-TU{KMWuikmuXRKPTvCisr51Kiopk`ZWjBKlpugfSelOKiJ!) z?mg4YKOC#{ZS@fEKbTBTo@?yMKk`KQj1UWM@t1KQ_H--#={UKVEO12GzyZKPVGGCp&%FKam!^ z4PPwjKg)G)c`7R9KgRluD?*6dKS0@SOyw)zKmVRz6{KZ2zLN&KndKM*_AcGbDWKfIvToc$~6KO|%uylVl@ zKSW8VrqE63KRl#9(S5wwKedd}aP8gaKVW@(>Y;hyKVD5%z60$igKcH>P oAMjP|KS-mhGzKNrKVlx~(%*gWKf&0y$m@vhKbIdQ)_zRwKmSpgXaE2J diff --git a/test.zarr/c/4/5 b/test.zarr/c/4/5 deleted file mode 100644 index 5495a226b08deb2567e50e99668e89ebef7331a8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy04TmQzgmf~KN5Yb832~zKV!NV1AhPHKV(F}jbE(ZKXTux zi1e=GKY&MxbbXeKKcpR@@gw)!KWw%%X~yTnKY{XsCJ^4~Kbo5B>B|G}KgGtyzqEJg zKSK6qy*?KS-`I%OeokKR}vI z@~-^gKLsw~;&3+RKfurjLW=v0KajpXF5djtKR6zGDK2l!KY-Px82<~@KUQ4Hv49`v zKY}Lr%P;`vKfo{m83UP!Kj2)L=OQSVKX7SpYZHj=Kg}C*tI}ZPKSYyJ>9?HhKZ_W6 zZ@fY7KLGm6)DafvKU|Cl2@yWhKcvxd*-l;RKRD3|Hq~v-KlsXEj6X@uKeWPbuii=7 zKYVHO7ZV2IKeTT6V+>yGKXS)!-|Fz{KWS*`Xvi??KP!<>u)J{OKQh;z0PS$*KRDkC zivuImKRA`dsx?`@KjdYCUe96RKeW;SkQYSjKOT372iH{6Kc6r|z%T*rKRnisl!8U+ zKX&f!iLW&3KN8cxTyOp9Kha%w?x=XL zKZaEuM^5nLKOECwgMIqpKUVz^8E(|nKZ<1TVWSx7KWr5N)Wwk9KVSr(wm$HjKi0^C oJ9^USKb`=bWkE>mKkf;B?i+K{KRdy#C*(`&Kb(82gwHJ9KX?S1+5i9m diff --git a/test.zarr/c/4/6 b/test.zarr/c/4/6 deleted file mode 100644 index 3436c30c7333dc30907d65611e9d3b34067731c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy06tN3;z$tEKe)N1a+`ANKO|mBR5}UdKW3X%bN}hnKd!2u zy{Tg4Kj4)vUfY?*KP!zug{KPZKY@MI^Db`hKah9(QTd(jKV;2nm&JJPKkc>U2eX3V zKXnbLrJ=RxKODc|<~}s+KkWdIBxc0zKX1!ENS;CJKUeI<3VZkGKLp6wtFtrgKcrM$ zM?_G}KeD{LTBx_~Klo0ea~{vgKT3x+#sYuqKU5{4Ri$~$KlRIeY1s%CKRW*tGQy$MKfp$( z#wcx2)LMKj`5+ zHa3~;KNve>YC)8?KZEcguUHV_KhA^3x?bqvKf-qJg}iC(KdIsJ((}gZKRRZyAY{eb zKM-c^Y=*+kKTzCUUu$#6KkY3{dr-{lKX$~H3|X)3KNugC?9g7nKk{QKW41mZs1tnKbV(#1V3BrKl2ThCO+BkKZF*>Vp(R|KkSp;g(br6KiV9dID}Q^ zKVb%E;(M#;KMGp9PwF)9KR#nKVo8+WKP>f6ta=mfKf)R~ysKg@6BOc!avKO+R3OaK4? diff --git a/test.zarr/c/4/7 b/test.zarr/c/4/7 deleted file mode 100644 index e8ae00cdc2a670c777f95794e937c66ced553e26..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV~$3s8#z00;079TV#+QF&bBQn^UZ;XMCFL|#LVg*c_xCa+w{Fr7TENTl;fddRD3 zwn}uJ9$Q_mt;bfaRa@C3v#l@LJZf5gKfm&&W5;O|CwLOXzL?_!RECGx?>U=sDC%&r2fqfyXoXv!Gz)*GxrH#*B=VLlKephQ2uc+vlA<)=2vgI< zNazMFC?>G6%81)_3F$KuOt_?B$u+}+c$*nN|FG^m9Lk;ej2mJQvW&UiCrG#-iKZ%Z zb-4E>p``b?7UpGhvo=bGfF`jmeXALC??s%I#RKqoP77z)M7SY-6+XCO0ETM~8@^HX zXn#{HJjzwT@k+sy;ZYf^bna)L6e*loDQ%twT?n;DmR{H_0q16BR0En(5;5;;@xl&t zts5(JI@N$ejnLi~tHY>@FuI;MfaUwoYxgrP^5~yxtOupA=63R=u`TdkKlmXiX$Z5b zsMQL-9z`~fQu+!KjV>3d4$cPp$EhaIT_638+WqnfA+^xm&_rHR`RIVZ-$ z!s$fDW@^zbt^utapK%sn30m1M%Wbg&)aQcKEo47_M6c=(JJA5bmbN&1W)H@OKfDp; z=%CTwT>NCB0?F6A1%(q7NaA^A3&!*ake0>QCo9mYpE}8%Yr>ScS36JEX+ha737UUJ ziIA3mD&yHU{5T*vu&1LAm+f@7foKzcX7SY#bP|94Q@=Dfb%Na^=ZKt1jKt;%YxjS} zi*cFb_3iZ_SaqM&PgO_{&fn`A+y$aGK+g*=h1Ewp@>ooQpp>$4S`I&sZ;z!+02RCY zHN#@Utm?l0Iq$T1^gb~yWoJ7Kx7gFyR@A^+_B4zcMk49EZye#MgRIE2_dE35&8kcVftl<2LzoQ2Cd|oWWPYCBV0w=e-X8Z?kDxQA; diff --git a/test.zarr/c/4/8 b/test.zarr/c/4/8 deleted file mode 100644 index 704c702ec1c61a539a653d9c3375dbaa32cd9604..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy0KibO{v832KbW%l5>N`bKe0Y2?{OvTKX;Tr3?P)_KijNJ z$e-otKbU0l;2h-NKeofvXxs+lKWq|s#o6f7Kad0m@s3o#KSF;tn^|S!KV3KiwJEvj zKQPDZ1+lo%KWJ-cORQzSKVYFJ7~UD{KVV6!=YulaKV*U%@r~KmKe|cu3+1qKRcp(fqQh~KYYJa-!)CeKP>!glsk;=KWKD+;sC?BKa<#`X}eqDKNXxB zLo2fHKk|9Xo5BI^KX`cIh%BYXKQ8mMpokytKT0?Vf9mz!KW#MJnDkBOKa|mefDY}` zKM383gQ-#AKg`n?$1fMwKZrd?MrAA8KNJVGDF6z`KTxHJ=d7^oKNBAZ!y{_yKU4^f z?>=MFKTB(^84>g1KLX%1L#KV}KYHX^uu6&AKSKOyhtyaw>&KX{G<(^1yPKVkvyQIy%_KXl37hRa~sKm4N*)eeQn zKi|jD=(#)PKUn)FF~z5eIRKfH=78L^MaKUpCx&|GKdKYEOcB#>KY-KCws9`AKf8R$Q`(>F zKZdOJ`u~E^KiG@`p$o;#KM4Ewn4H4TKcsVBksT4=KbxQhENf}wKL+maiYyG)KM=qM zu@EcjKM2j60l3?|KS*N{bym*WKc*_(WIPh!Kid5?uUXsBKcE@Eg~I2TKUXON*hxI? zKbqVTj$VA`KhttFuHS;@KU6VQ-rG0WKgW&27OH6EKWf@n(yb8KKe1}$=ljO$Kfr$0 z2OUI`KaF&*wIR9aKXY;qXKbd|;tmj1TKN&}IMPnQ6KWb$^=>{U`KcxGMYUgRlKRS;h2Nh`8KkB~>ei!D^ zKjRy4jV|ioKagg_8T0bwKiIO=vn&tRKN?S$7}IOiKfenctx@gaKX=f0Ptv^SKLBa1 ziT$g#KhPH_^3KS4EFqB}e6Kin&;jp@A2KVC!7@JzGL>CjVKj2}PQu;oYKU1V#2AG!MKUfh{ o#ov#zKiCyMU3zBTKLPqU?UpCyKTm)J_K3IdKgdvG!kSRhKRAn*?E!_dED)rQ|wZ@A@tDA>L`z0G%iU-%gCheaN<_z zQcg!w#IC7MlT2n?b=j=7TDIS|RyM14CjNoXXKmvK51ZyS&7U-pNGm=3Ne4Y+!)2wc z3beL|`<5`QNIg2s)0|-k@6cV7?M)A)^BWB7{d%z`TS-$pEr<;F+yB?t4a!*S)pIkg z=oJ5Qhn93>j=PF;mTW;z{=xHM70u9j1(s&=tswkQuD$lw2EvYCoQnBTxk zNWhK`Apz33 z**rR22upvCLpMmEBq(R&J=tSSG3g_7jbns+b?3RJ z0txU8Q zPWE3BH-Lqk=6&WS+2I_EV9Lo~Kx%g-hvwEIuaI$Pjkg?G;-3Y(GYt@o%-D0}MJK{Z z+?oX!6{wAEn*N$^L)xPQ!5V`d!?dSeyxtKkaoh=~)9pywT69~}(~A!YtLp<6oA7q* mc^QtI;Ihd~sT<9(e#={R>4Xwr%ALYihY2y0pF5^asqqgIw4?d} diff --git a/test.zarr/c/5/1 b/test.zarr/c/5/1 deleted file mode 100644 index 47c1db8a104cf442b79aae281e41b987046396e8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy0BD}CM4XG*KTrg6>i{zEKTxcZpuk4TKhh&;{3kooKk&>* zw@TgEKg`5oCG}$9KL+6eHa0KqKisXEg+fKIZrKfTd&$?}flKP;i~@hrdHKXfJ8 zrFEFbKLplNI<&9SKR$rwmk*}cKk67^E!`jLKh$VmU&08;KPF?`VIsEVKM|J{t#WJQ zKPwUxS3gPWKZFjY+cV9?KWIYGCOTBSKe#bmiuaM%KP<($<#86&Kjj0mUSMeLKk>Fh zdORHCKbT38UB&0&KUg%*CJp?yKUP~AL@{mcKS)E0_X)nhKPv1~jr*+OKY%*bqQ3Zr zKge*O9nzt|Km2bg6Bwb~KcJ-FF8YD(KXj`(Q=SIrKm3LVk?)(_KUm7gpD**(KN@;5 zvO(Y0KLw4X?q_S@Kb)&#l^zP@KXf%U@+w`}Klos^ELGs|KY&BeBG9L+KYS)kmPEb9 zKlrJYWUJlYKeDI(aU|sLKTYUMd0TnlKk&z)Bp4d#Kjn?)z31fUKiU|laJI(aKcgkI zfyfE&Kduqq#gDe_Ke_o*c8Aa6Kk((mlE%ZJKajwYvgHl$Kg{M9h5h90KQ^}(AxAjc zKVXsKGHbo6KmIox%Q*eoKS)9s;^PgxKg@w&VkW=MKd9YWLqu7*KUUc#H;6sqKVF^n zy(;nJKXB)Z3aetdKLDVfJes9yf!? zKOH(iG88l5Km6{ubb@`vKX|r4x*gcOKMUegf20NGKbPFuv_cT;Kc!}Rl`D$vKUNc< o(mN>WKk2bNA~oaTKV+~&3?minKcjLY?0nYdKXQ#6I)hKtKlnnL7XSbN diff --git a/test.zarr/c/5/2 b/test.zarr/c/5/2 deleted file mode 100644 index 1f36d4dfc4f491b7e041757b21f48b4dd39a77d7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy0H0skD;5CiKM3t2Cx92*KM;qQOfA{NKMsMkUNlwgKk~&+ zppx_6Kk|E}Sas*zKYR{*A`%wrKTI6B1`74fKfs>Dx8oP*Kk7uX*sX!*KQz2`?jFw7 zKWMhbvMx8*KQpj!QX_}xKh}AWHm+No0KebW#m_fAd zKSrE^p2v3XKlDS^4cgq|KZ(&SG4%B0Kj@{KRy82eKO|vs@y*S}KTu{FYL+_bKXFN+ zfUIofKfKl|bsLc9Kf0mvt?)zQKhobOo|Hq}KeQ&1f|nE5KMKMeBn-eXGOKc1rA zaxEg~Ke?Dg9}8RPKXcCF>>TLgKfeD~=9He)Kf+P$zfpqRKkp@Ph~gRPKk>B8P&#tz zKQc~py0ydHKZq?Q=i5@jKiqA))3PzzKM-=srv;O*KWVs%ec6)kKVV!iX&%3}KUCZR zRnmvYKd$VvDFt=cKe+NiV$gQgKR^`PU=n(qKX92}pnKN3KMG6rKx?ztKU&2QqnUNl zKOCQtT*9c@Kci`@?|Sp?KR)4-KLDWT6Z+YaKS>gUh>>;a zKg4i8^+J-(KMgmWI-#KDKd#{e8KrgNKWx_CrdYq&KY(Jj=J4O-KRA&M7XTT!KdsEN zc6_1bKls6#Xx};BKLVzQT1{x#Kl0|BXC({dKgx1sa*zJ%KeVuNj5Sy8Kc(yGBvdfy zKQ7LvkRJcvKV)j?y`n4PKgCxbNEx``Ka7;3H)Wv7KT6W8_zZFEKaf6Uvu8rQKVXB4 zd%UH~KP}9sFHQ&LKY=C<5~#fBKf7=;{aA?RKZex8AI?SHKghmBEwCf(KmLUq`r5qK zKftxg`K+vlKltObR*Ub`KTI(}{*ySvKMjf*%8!fSKR9ZlamhZqKO(!8YDt^zKVDpy zhyJ(VKYBC~2RxM0KL8FrZajr^Kjh0CB4;zhKjZ@r(a5jqKm6xm7PX`AKmN$}loYAs zKiGswpTd~sKca6;^;KkSo7Q>JRnKbT@=kgzhsKctKGY%+ktKfIEsFSaS@KL`vNqct+e zKa?I{uSqq~Ki$YNEI7yPKjNQtztrIGKOoh!{WBupKb`3GLVYvlKR|7DlWabQKS-;w zc7<5TKb*mhp>6u%KaS-=>UTijKOh5~kHUW6KR6{(-rkP0KXnI7HTf9nKXe}{8jh#h zKYodgAg9OTKaCT9K{D9lKREt56H~0qKeT_jE5}gBKWN%P(%D1aKNtsKOmNyKuFx$KfUZ7!nAPeKll*CenX|tKbt}> z2@KhyLpqfo@+KTCdm zHJtq7KPbhk3w~qRKcL;rvwD%BKNvBT>YUo@KlJJxGfd9uKQ1O$W3#~2KgduC9Kwa@ zKk(8*Zv3j&KPvoktM=*EKOj+{O-(bVKc2G&rJyjTKheA5t$*y|KUZsEc|zgu zKiV(ZQ>RJnKaGPJ%S9{ZKh}GPv_nnSKMQQy5!d1AKaz3_Ge!F5Kl=N5rE2WmKl+#J z*;p6hKSu#AKOhh|W)-~LKhVss3QjMmKLBw{*V5FuKb2-1?`!twKcH(12Xbbo zKQy%XOW$hCKj6a^ObHXLKfEK<9CUucKl>(u!)D2 zKit?Rk~Li2KW0-^v_>N3KQJ962tHEIKibTi2*Ts$KR?8k-2d(FKY*q&skJewKlYcz zX1@sPKd4DNwU)HGKY5M0VOrVdKOk!WhGDADKX`kV%AD@ZKe&?`20ZTKPE3T>eW8&KZbZuz>eJLKe8G11|3}EKggmh98VbJKjs=_4)o#RKbrUH z4I#$iKl$&Ix#P&_Kd=oRLs)v#KRzATlI&69KP)4KMf#oNKl#J!p!fB;KS;6FqWdo7KXAo` ob(_V#KMEpT+d;S9KY#_1py{j1KXRMHTk7%EKU7gdP4ueGKfxQL1poj5 diff --git a/test.zarr/c/5/5 b/test.zarr/c/5/5 deleted file mode 100644 index daa3a24da835297aa6800f3de4b9a0a30ad0805a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy0NBHbI|weqKf>&Hg(#xsKeVgaN2`w4KS2D`EHb&jKajWo z9rL8EKL{=&00-L6Kj24msTH=qKQqSdPjZgyKZyRf6K9sYKS{(71Ki=~KM-#^_bA%K zKgtZ6c`d}_KLgY>9|F$dKRD`m*3o~vKaNhr|5h{9KdsQsH6qIEKUN9iLOb+Kc_4e-TN`(KRAb3s7fiqKg3(i^DE2a zKPx$)R|(qYKl)MS8lFGWKMXYh7edX~KN&dzxE6xtKZ+4RPDJg}Kbk`X8XA|ab7ZKh&*6Ql2`{Kd{b~coVarKd0Jf5Lx5oKdfMPjc35+Kcuwksze~c zKN_Z@X7{!4KLF5VB&nUjKVi?F830J`Kj%pJp<3SUKUOQAHUgvUKU{ah4!8g8KTbw_ zF0hjBKeq3%%;k>jKL8-st2O*NKVKMtA>FO&KkP7*e}L%iKfr43r5=8yKfc3zdUVL? zKmYA+;Tn?UKM1eK4E5K?KLA*oA-3CJKLCJaSbgG$KSza_nH-DiKaF2v-SZLYKVVK| zXvl-kKNRT>D- zkGguoKSVA(`DbO$KMtUvbk&0HKNiisldMzaKghu**ybC(KS+%Rg|LUYKM28w^UHy@ zKOVg3o(wtZKiV<23ZaG9KYAV1DChU-KT&ylHR&?sKbRJ5J_O3VKfqElQEkEBKOhql oKSD9yKdl;b#A`s}KiN>P*EI{|KkP#%hmhIiKclnDAl!iDKg|f1@Bjb+ diff --git a/test.zarr/c/5/6 b/test.zarr/c/5/6 deleted file mode 100644 index 38816901d9d164a332ef9c7f911be4d59f1ebda7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy04VJm{0eikKi=2Ltp_{PKRi6<<5w)rKXlD`bUa(?Khccs z5@37jKWgvRkaa%nKZ`(NyG*$1KcI&C7KUHtKiL1<;ajuOKY+)HuYyg1Kk%MoTbEO` zKiR2vQQNQUKc1ij=Oke6KO?2RJ&I}LKXeFhbWEVjKh*na@|bbfKc0PcE;v=@Ki=_! z2Q&H7Ki!O!Y*RAkKdSwXH>fqxKX8|4K&?6KKXc7$JfUglKSGjJ2zG<)KPgh?_!iRZ zKS{5mkgN~kKhQ%@jDO|CKeS$Si9=+|Kb{A_+=R^TKYW9@-WWQ_KLA8~-Go~7KWLEs+GqFZKMjR%V)X;zKdcUSQw!hcKlF-jRm^?W zKSM!<0}f#6KY~&qs~1}BKd8{j=V;32Kj4+F)|K0*KXAH?T;>$!KP-)Df%j#~KZsis zi55`IKVDxGs`LWxKkYHwY zXt|f$KeP+?ivvOCKallrUlPvZKM*GGk-I~_KOopVOxpmZKU*K!zi)HpKZ;ru+W~~w zKfD+SDc^+OKja#Nf{VuHKjhlv8&){#KOX8QnrHjhKV~3SZY?9{KL{8nIpHbfKOwEJ z>P4vMKL|BAKc-~22rSC%KOh*+M3xw|KekS!A`dLy zKg*7(7H6pGKX9Jq!OK0PKTJ86sDVE0Kd@ZJ1>V%$Kcsm|qZEtdKbk<|ZS#WbKPJm0 oZkS5tKLa`!&x*R^KYk*cK4f0mKTPv43g7kUKWcY~h4C-gKPtSEP5=M^ diff --git a/test.zarr/c/5/7 b/test.zarr/c/5/7 deleted file mode 100644 index 88d04e21111af323b5cae5379d16b3ec6837b9c8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy07H;KEPn#yKV7B;XKVGMzAZEAkKds@89U7MI zKM>$NvuYxvKlbod>nHE#KL+c7NXo6^KLBO-mPUi?KQ5ZaI?Y$-KLC)uIpH_rKM=;r z3XbxqKichJ?$2xOKY~4au2c^0KhWV|Nbu+0KRAB6cdu^s8_KY`3?Vr@U+KNySmB|YlcKfo|NtHK-UKPC>&I0HKAKj*wQ z6>L)CKafeQIkW86KRE|W^ZYL7KjO-_^;*8vKj(&i6D4KgKeFV{v?VOnKTV#4c^L}k zKjOdnp|WV+KTzb#R>K~qKOEB-ts6PvKlaeEtQ`c}KURPK_z&shKj=Jg```)VKNbW! zyMzMhKdw1pf&{OKiZk;k_#ByKj}-Monc7rKdGc>Mz=xlKV-PlItr=GKa_O!mRtD8Kb5;a oYra?KKWV4e4D0ddKjfJaNznGyKaw|f8hIz@Kd4GNwu{uaKOPvL#Q*>R diff --git a/test.zarr/c/5/8 b/test.zarr/c/5/8 deleted file mode 100644 index 8e73e81b55610767201bd6df52e5d777a352bc34..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV~$3osJ^00!V$s~y+!=qXNGxK+Bzb)|=Xq+EKON+q3aU8T4kJ&qpNTBReBU2b{o zNX#P+T?ywF(-OAKu#J(~CfjUmwbq?VSKmi_NB_(4B|3Q$I5hRIn0O9K(_@GmZfY^o zbZmhVZh`9>*7wLL9Zn5&%LV)?gn5_sQd{$o6BMevq%k4vWZ}(Ci-nj-T8LyMm_cf0 z`TRJn!@T&>+rH=_6r>)a>@C!TPuCGESUPlPlJ&EpI#geoZ$Ii`1U(~p>)ik|+;gtP zW%b*Tx;gOGmOLXe_Zyx)^)TQvgI(-YF2<@1LS0s~1)Eq^;;x@I*d!;Ob;{;IJHi@2 zf4miU1|>B&xO&7q{3V?V8OOOqm$I*aY#>Z;PN*=Z!)mX+_I8gEE4F3XFA;jc9?mq) zMj7Fl@cEF|ri7AAmhDW{LS&G==cP>HIWI6=TmKaf-vhUL4tzqBh1xG@)FCFR)xVV` zKwC#C(_P(*?4&i~KZj(<3F)9u4hEy>dtKDHYg{1^sbkGs^JtOhKgz zA*9%ZH~UoZeG$Ao)};xbmnjA%r=|F$G$mdoDshkW;J$U#g5DGH6$9s{K`WLNWl%)8 z;E?(WtYb)<*L3kew188)G)`9X8UxH0*ai(y6!7vy)L}SAK3W2!E%13>*AQDhj==)&{BVv>|fo6Wm$gFU%IUbzAN`~gqa{!Y-bh; zjR@s$o7s`7gPqNzB)?PO$#wtVh3-m(tl)5#M@dk{&8&CLx50aXKhE`=L{Px>>ec%S}Vpgmkft@7h mNDV{ymVNR?Nog&Xn)536uARXI^?lc^3=7IVGz*H0{rC^Et(F1+ diff --git a/test.zarr/c/5/9 b/test.zarr/c/5/9 deleted file mode 100644 index 9c74483630bd9e10ce563c376a1b91d1392dd3ef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy06I_Cp1>pFKeT2j+caV3KLGt}JK3;~Kii95W`u|6KZxf{ z+U!fuKkJ7>P5qbdKU7p8!n5PkKQyvE8~Q85KhQE0tepnNKXeu^$#HnYKUB)3k>Z=- zKdr)ZkPy@FKgub@CSx|_Kc@tjr(%EMKLBL9%?q)|KdLIN2&Td5KThp3Z-LR)KVqL6 zI=ME~KcK90xc@5DKj`N%b1I$RKZyE^JSA$sKlphP%Cd{sKc%2|w@>NoKN#XFJ6s;S zKS>LhN~6W?KZ2F?>q8suKa^j~SRO>mKg7hxW1lJ7KND#!F_!Y`KgB{91=`>5KXeY7 zH@dyzKhXSwkKLcN$23@P^ zKevYZS8F%tKdi|Hu{v1eKQ(cZF|f?47`c!Kj7;~ZfL*LKfp&GQ#i)cKf%S6`T~07Kh(&@>A8U2KSn@YIsWkH zKll*{44j*^Kj!vY&rapxKh1K?hF3S{KloR9LEO3HKV*cCGQGISKbXo|J%_R8KY!Of zf1~E+KTEDc+~85>KR|xLZtBKUVr4Fz`6l zKU|wJ$FMWZKiFW1PIFS}Kjv*F53tm?D`KL7z^Z#Lk-Kj_2OaQ#KdKjA%?99fL*Kj5rLD(|z9KQoH# ziX}bbKVbj=4D8$5Kf{uf_w?%QKjtru9&t?EKiuXYv77AcKi%~<>ch(KKZ1%BW&{i0 zKZG5tv2wWKKMz}NBm6z;KiU=Zn5#J1Kd8_io8pDsKlxx22Z+kyKh}%5Hd)5iKU|4` oB<>^RKL7zL6k=QEKXVY5E1G2EKeQm$>ahjXKT`z&E{wh6KO^*`X#fBK diff --git a/test.zarr/c/6/0 b/test.zarr/c/6/0 deleted file mode 100644 index 465bb7f5879deed31b869c7e52bf5fcd231674bb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy0P%q!+4e-`KLoK>VqVVYKe&p@M{)hjKL$b=g{(U5KlC5@ z0I*HiKcJQgp9c8fKg3}I&S%!&Kgb4w%mOCWKP)=^?h{$-KfGmUmS%y#KiYe|`l)&C zKZ2!3Y@Su)KgE@c^LY2@KU6b}O7wx*KPbktObLL%KRQ74S;gYiKN9>_cYt~CKj5z4 zhZI}dKY-US(KS4%81kjsKTKsfnj6vIKLD~htbA=|KR__U{nTXHKijd0wI@jL zKR6~_^Mr5CKlDft;!pkDKM)1RT;M0VKg=ZicBVMqKd8H=-lS^2KRHLN0G|iyKZ*^Y zO#p}IKTzUAU8^_SKh7Zc2S<$KKcjQm_YZgHKZXjkN`W%yKd5*dtTjdEKZfpK-Elqc zKaDd!eY$$&Kf!Vm-$s?NwFgKL87&R|G7vKM;dz@k-^RKT-q*6QMiSKS<<9 on<3D&Kj^l`^7H`fKST$3pixJ_KNwWGC3w@-KY+OP`BP%IKXT)qga7~l diff --git a/test.zarr/c/6/1 b/test.zarr/c/6/1 deleted file mode 100644 index f5ec39b41d001795b24a7b730f2c63026801a39c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy0MPkstpuaFKi-%c%^(BUKR*13r`Aa7KOBmzT~XHQKLlxR zkS$8%KM&A$IU>R7KLASI)~}PxKaMuW6oRqoKZI#yDdpJfKY+u6!Y6RQKd00eSL3|l zKN>QZVW1`6Kc{aNz80$LKWER$lviu)KZbAITC?}jKNwAu%*+npKek9BjGj5zKRvVQ zPn?wLKk#1zoQs#ZKg3PtbCMq8KMxn969uE;KQZ_i#?1okKd|%}c`cvjKWNkke6>ru zKiB8MmZqcSKke%xd$gMFKXBkQG!;JCKW2%OgBMELKc8>Wsu2S2KfKhTh6C`}Kh_4$ zXtq4yKdRqPGfqI!KcK0B;i&esKNqsn*<{)4Kfq4B5wIVnKTumD?bc?_KXmax!MD@p zKO5N7EouejKhORv63U?LKMYa3TPrExKV#){mh;%@KX9u{Ben0tKgyyMJOBmkKj1kF zqi^=AKPk_OYfL`uKUmB083e@1KM;!?g1IQaKTOMcadRE#KPH46hSI+1KgO`0J`ynKZGJK z*J|<1KYxR=K`&kIKd4GF)x^WLKm1w|>*6TmKLni&@1R%KKWL)%6r-@yKR_AY!71;8 zKcYnrSi2Y3KW(L1NWdQHKVxE5Pb|vb#KRm2Uya8mxKf@GZ zNb%L{KN3@021Fy}KMb>W5Y?K%KctqEROQFdKVTe?{i1EXKQw-ngn;hbKg7s2+&O92 zKbOIW5_rDsKkdj&QLvWoKfoPm>c?5yKQMP35e^K(KiD85yy|VfKelLcP*jTPKYqZi oDi3GkKZuAT7=+I1KVY&--XIo|Kkn-%3}js9Ka2wl-6=H5Kd2j#ApigX diff --git a/test.zarr/c/6/2 b/test.zarr/c/6/2 deleted file mode 100644 index 46894176e9f14cf2c48140845ad2d27851aebaab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy0EEHsg1R`;KkFYDmzAXGKjxZcH^S@IKjLS>8h$U?KMMPz z!(heIKY7Zh!>kpE=4 zKd68kQ9NMCKLZLISNvJzy^KX@R0>mau7KLCBT`AX@ZKUUo?>E(3eKW8^U zHkFFwKjx9=Qz-!DKlXs`8*5=rE?Kld(_#V_CI zKPmZCA#1AbKVGFZZnjwGKY%0eKm2|xOywcVKTFOTMkJu?KhOh^ zawU`9KaBbz;)eUwKN#|N$es4dKR6rp;C*-MKPSkKY(a-WvKVDMU*vF63KQ^7F=ZuonKO#L! o?)4?(Kg{gg#nx%*Ke7V+^Ci~oKOJB&ly%AJKa1BN&EhZaKWFfdqyPW_ diff --git a/test.zarr/c/6/3 b/test.zarr/c/6/3 deleted file mode 100644 index df6f768aaf358cd0a0255a4c928c950d628e6bf6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmWO2i!;*!00;1u)e$P8(Bsy%(|Xc*r02J%mRv+n)ta&$XQ{R>J-Fsj4slLbrYmY8 zS5h=LS`Wl!v~b3+*ZQr!+h&q#-9r9^&xaui7-iEYPx7VMJvW^Z-&A6d>p0*2|FP@dh}{@cn=tRyBLR$ zktmpv+8S8?0T1%>*B;p2hK3u5nBjF6@J?OH^T<}>E-OjqW3$0u$=yTaYVn$5s}qe% zFl%L5g6|U&r)uWENKCdOx?fam52ytDQPN_UMm<`FVx_nK7?Ctouh)+2VVz<-8z3@+ zxRf%thoi+PU03AhYDCWJHJjoeyhUinJHN3+1IR74$q92Lpm(i5?XGAAzdkW#1;v2R zDb1Yqk9uIqwk#EgX>d7Y`RxN0284AwZ%AK6z-tPP_b;;r*SoCK=%V*ncf+W?9ixV& zbZ*7QKcDgXS5b-VycqU18EL7?L1ZrUc~N$sgjKbFd+u5d1i#FzfMFeEQB~Y?M|6%2B=g}YIF(uhy^yJY9_J2EX|%cgGT+fDF) z<8AMsctkx7WkWgr?1P^Bb(jgRPAYjVl3g>$d7)^cm1G)8`;Q#;t diff --git a/test.zarr/c/6/4 b/test.zarr/c/6/4 deleted file mode 100644 index d4067b52f8ea11964dd638e98276f2e68a134f33..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy07R}4G%=9MKbW*+sa1ZoKPc&Cj(YyYKN!xwm9+o0KYaJJ zl(>`TKT?dA7z-rhKj_NgA&r#OKUg`P+?zJ*KWkM|H|k*PKcvZ+LuVq~Ka@YS6As4T zKMhgkRshK0KO`EKDK5;zKS^A(7=MrGKeUsF3$TXLKaQ_adHYGxKS)zoEIt&`KY%!M zZ9CMVKZ39^Fa4C#KP*)*NhBS@KPQ>*c58~`KV)?8wNz#7KM<<(NWtRZKMIR!mKXcb zKU-(8Ch5uJKg52@*d^5LKZ-Fu^3h?~KQdt^PCawiKWt<66kW>YKMvDgZL6f&KM1Ko z$2zjUKR%JOHRnR#Kemk6>ZttIKM>f0TtNJ%KS59b)k>x7KXe7u-VDgbKLGe&_=%Hq zKPVf&)U!V0KcE4JE$6V%KTst43BsDUKTzOvwb*giKlJAA&*O~lKNfPi{jU_%KbbWM z(Ye0qKkfQQ7j9?dKY*UD=tnocKcGiMPlmdyKbW72keLg}KVw9Id)nFNKZ09KL-0}yf>fWKUuvgJqXz6KbXrD zQv8L+KX8IM>{&d@KSIn}tfSrFKkGEmN4xasKg7Kc84ykGKb};IwBD`nKYb=&G)I8o zKkDQ5)bFHKTdpE{xZwzKY-KNRQmJ06_kKWiF-1r+z{Kb>cI#rOm0KM=&Nnq6YKOnFC!DTkyKMF5w`(khFKfssJxlA#JKk0xlvHHR5KmHt>zW@LL diff --git a/test.zarr/c/6/5 b/test.zarr/c/6/5 deleted file mode 100644 index 7d1c77c44eec39bdcff856883379758c24aed3bd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy0CbX?3in*VKbcPew<&<_KS)4ZXBDfoKV&&idk#C%Ki5av z`2T?IKf-=3Vln{WKbXmn)i7DXKR`v=hi1%;Ka>kP$0!BSKb&T`ZvM{8Kj1`2GO}jX zKP1Gy;=^(8Kkn46{Wp!{Kcp4zg`dajKSgwXr^bWsKl1@4sD6j+KWv~StP8g4Kb(uK z?&*HRKW3F=LcvGrKTrj398==AKlDFCRIGu;KjTPu<0UQVKeGBG34%}FKZsr5Q8iw% zKX#)thM`l@KajhzG{()ZKLqS&_!_wEKM>C*6Z|>UKlsC%#XzIvKi=Uxk^lVMKX~LW zesGV(KftADSA|&TKd}4?-K1v3KMJ#cS3;oPKM?U?jT6D6Ka5m~fXS=DKcJI3JXq4) zKc=%)E$&y@KZxp!Hz)|hKRROL6Wti&Kcsg{%QBwoKeCJpY!4sPKd-@xmMxv-Kb0N1 zBLe#AKf1Jo1v41zKlHDn>yrq=KhW(8>f7tjKadZqF!VC8Ke!ns^X?nwKj!aEyRFvQ zKmO4Lt(W88KU&j|hyhyAKlSGQw7=KkKVR2*jt@=XKUufwLLJTTKYUK=Jr11HKh$Bp z>Vf*+Kh8?XPQfbcKa!SNd?0e$KiYNSM~PA7KQG(i>X}*TKMqZZkDII5KRyTmdD!&d zKWqzfo5VlcKe$|fB2t^OKU@Xce(3+kKd2jk`lukjKcw;E5X2YNKaAQ>5Td2qKfo?f zDlUS+KeD@&{+{94KhO;R9ZWpcKR%Z0dr&;%KSd<~>8)SyKN&r{+Cn$vKZaS)A=g~! zKQP0LJDgYDKls5F?pH>?KlCCj@ZL}EKTwk-f-v#XKL9NRw7g=SKb33f`d=63KmESe zG&IcXKV}(yKjH)IKhT<*eIFvyKLknm?Zt-4KNZP%PBPx}u68R`X5MzRCH552ATONVhenNq+#XaOxH*l=f`8MZWE6*qkh^;>(C zabgelGLC+@8|Z^MZjo&D)&}rd)J&1I5&pymXDZ!}?T7yc^a)-F>%`=A-Wa-D{Vf{# z7-*;4P1*iF^r}zZ7g)4labF8rLM@a6Reo-#2PtK@sYQ`3Fr3@>ENPmvn<^s*N>v~o zj?Jd**J51z>r7RL2fD~3j}%-bzK8FKYPn_vVKO&UoOn7u_NQaODXrf7u1Kd#A|f@IDRymmpIxF;(n9y@q8yz`Kq(g zW-C&2UIh8tMp5C7kK9mg$E~mC7j&}+WrDe!FoqLMkuhYd#*62Fax0sMKg0cDZF$0p zPbg&HcxV~vL~Rp4xJqq9K7~Ug8s#WyEp|WH_!WvG@3N_B&vho+#Ht)CCRtyKMrv%( zu8$^>_PDV#aZA*0X*brjU2e+K*ud+{FbIAaz~+%w2~KG+XY>5JsUQ!0jNVs7mJ^&a zr{-B*avVSQ-tf~mj&ecu({@E3Vp#f)7^)G)!g#Q+jN@Op>c=Ls6%ux7nzBv?l7zFM zWabb&&e^XDLM?BM7eAvfzu#CO3|CEJz?*# zf+UyOXSgw0KOC{RR*jOSCw32JDdDG6s#ODCyfLXa(;L;e*Tv-XroRAWT6a9y!LrjDODy59mM*G{{RcJt&s>E}5Dg_zyKGp+x`y diff --git a/test.zarr/c/6/7 b/test.zarr/c/6/7 deleted file mode 100644 index 75146571960ea7edfb5058f153288c71b56f5a5f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmWO1i!;*!00;0muR2F1j!ve=<+`F=k@NVb+Y!B7bdjsv5!xzsiO!W29qYB^XwehV zLugE6%@jt5*<>Yc>$iv5Z2SF9sq59&`{68K^SNA77o~w2=m>)LnPJUN<++9w^$9bmKSKaX)3%{U7nT;)F>i3 zUc|Hr1Y_6nwYe`)WbhJ1JH7{zpIo?I#0Gpa!tKJ;;4)Ojk4;(xd(s$p>vUkJTYfYj z>cOFl;R{YSlkm8}nrY}7!t{}SqRPa6tmyau=Kny6?1t1zd7=(3QDz_2GbOI4r(81& zW#COvTv|)}P-A6b5gDw2L&eb;$2bCFg-u+>Rt>5*2EX7#&1Tiskc}MM2?G zaGcWz=6NPeR9A8DOiMAGl|w(k=|{wZP55OtiMccN3AUb}F&|C)eWZtkL?-x2ZxW(y zqlYwUof3}}PdoNza$xs-hDlH1V9_S$oM^omL~V;z=%@twDaU197;b) z_ez+&XZWeYA&i(mEh&_ZgIZNwzBAN-+cyJO=94Cv3xvK+YmAT|?CEst?nFEHY4s1= zDZKJ$t5_A2I3GE-RuV7@-`rIXAJmg*Y_WfM5Iva=_y=)pE7OeVJJz_%{>gKawGioa<`sCszL z6@6)(ZO1Q*FURh^HiAZ!*fU#(K{{Ddm<1+$3ZlradaDq!qFGq>T??nL)nDgY4REz( z(mdGhIGhxy*Nzh~i`U0WtxSjtW_9u04cLBa{B6BRgAS^pQ4vvy#gVQ~`aMQ8GHy@9DJZKezK@K4L!PKcb_|Ugmq`KN_8UGthk1KOE}PY9@ux zKi)7HKA4f|KWMjBbD%WEKdMGKf0`fLKa|CR*}7ZCKLAF}__2xMKagzHNUIO9KR9qC zM|;rDKQOd?YM%DKKf3z}D|2k@KLX3yzwVdZKj7QDMJ$xUKYgI5l)h>2KWNW?dH~JN zKbXel?>;)~KbQh({o}5(KkQEhDVqY-KVFug;--PnKi#_GlSvWiKeYMB-)(i%KZ^n3 zOsX^OKlxQ7qPtk-KL$(4RydR8KcrJ_0D#NoKfXX;n~x~dKcE&*Bp?yWKigS%P8a&^ zKcN*Bv|JSJKk)P#D@8KhT65Idav+KY*bmBd}3}Kg-}zqfF1@KThB-@%A(AKRaZSxHS#nKim(pQ9Dr9 zKREQ>bF#<6Kj0)jj^A3vKbZZs3Vqk#KeHmL+J67#KX@5w9p3ZRKbdD2gZ9nfKXOCx zzStk=KRa>w-LV_(KQKq5;%nyRKV~O`&)1KRfAS3K$*YKZ$G|@zagwKLhQvq%iC4Kfv9*dcO9mKjS@A z-7)6oKP&-L=>ad`KeE94ID=B!KTzvha6pCIKaJ~yCM0a+Kd{gx4__DUKa$XVFrw|| zKMYqTsj-g6KWN#RRZ^eiKXGqt+zWN)KN8t`P0F9&KWL57*E~SNKe1e|ZB$U}Kbk!> ot#E46KZF1m%zKPE&4B!hD1KPxf^Y(iM&KVpageyeflKakj+>i_@% diff --git a/test.zarr/c/6/9 b/test.zarr/c/6/9 deleted file mode 100644 index f91d73cefcaa499edd73001a42da6b7d956da69c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy0E&W5<5!s5KU^?N$t)k~KXO{^4e4CgKY~9?G4NN^Kd^~m zfPr1!KTwFHK1lnjKLD>pCk9}BKN13(0zo|6KT9lZ*$sv6KYYX!SF7jeKg8ov$Jgw^ zKTI3qp&sSIKb+M5kxT}}Kk_P{|4824Kjfcq+BsY5KQ4oa)LusGKlle#jH~j-KQ7bl z>lZB1Kej|2$9;9vKY9QR;-7@)KQQC(_xWJ$KSs_{T9`Z5KN^j=khMzFKVmT$7JpIF zKiIL9Ko*VOKLP+BL^%uRKVv+G*QaUbKNXma_^B7+Kj^$n_c02`KkaTF%BdXdKe!XE zy;2G7KOAKWLmxxPKOq=&sbXp9KSbP53V=J*KcKY?#zEwwKgKPZL54rpKexN$L+4uJ zKTK50{Mzc-KeVi8!CH*WKMHntUAZKU&Lw1cs^7KRKc;vCh)& zKVXA|7Ug-RKftVd3ROARKOiOoN<=)OKNDtN3HLtkKLF@*2lsbKKWKwX1Os@tKTJ8$ ziwyD7KL-}D50^sbKbUw2@8X8)Kh&1#pM*BgKOu)%34~c{%h zKX^Hu6g!{6KbA$G_O>SJKL^>*ISC`u zUJ*9!KiJ~L2a6iuKgyc4=gNWFKOL4PH9tk`KN|s=!j_!nKO%}(cq~}wKYRls;io{| zKOxj~>0_zmKYT@+$5F?`Kdx2B7s1Z!Kfm*E+03!#Kfs{?U#J4dKSS|{{3mqlKTI}F o{X`wiKhDf6Y#+zdKh(4?J{Yv-Kgf?Vo%Fi4KLc1ypETU>Kj1@&{{R30 diff --git a/test.zarr/c/7/0 b/test.zarr/c/7/0 deleted file mode 100644 index 524bc77121259d3ecfea41c31922bc5a5a0acb1a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy0G%Qip?|pNKZt^H$Jz9@KX8jwf}qCJKZFI^fVc`*KlMd0t+8U~KcHH){hL+i zKYZcV4O_9#KZG86{G3J3Kce}>=alx*KM2@uLo1QnKhUjMbAmV0Kk#9!{D(%tKS1KP zG#sX>bPX>KVV;NnTE9QKln{x;pSb#KS&9T zXp_;oKa#UqZ!+iTKM*SNWI>tHKV+^zZ4D08KeBl1!m`-lKMAaHL-bMSKbF4}dfndS zKgkBAIHBO@KL}f+A)Y|#KM;Gt?B}53KXkhcX2-$MKVLrpY6HaVKc$5DRH}~RKX3&W z%ZjksKbTBoczImOKVOa@;c+nGKjx645*(J{KkS@Ak)MIhKbi>F0H4_BKm5>fRN-yi zKi0cQ9`Ty!Kh5&Jq0ZpsKa}0h>Z}*kKaio*VVF(8Ke+>*Ta&2aKR5Pfcx` zKU_F!F~950KVXDv&Q5QTKZ59879X3?KfZo2Aj6;LKL}~q)``XFKj3ha5_{ymKeh3l onG=`iKS19{Y`c5MKMF6#gQ}X?KX|#=FQ?1LKOhQ$?a#8)Ka`B4<^TWy diff --git a/test.zarr/c/7/1 b/test.zarr/c/7/1 deleted file mode 100644 index 07d83f99ef6bc06c30f6ceb5218ba36dc5b367a3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy0Bnyg#)kjRKQmQJw0F|%KRF@GxTJpIKjHLp0r-pQKQuU6 zJ87@(KOhNQ%3X%aKNuuPm`;${KYkPacdF^=KXLNa?Pa3vKV%XN=?$#QKRDpqYBPt| zKeMTIo^XNbKQzf#6ujTZKYNAnl#_w%KgT3zPiWZcKNQkyf?#UJKX6F&T4cGkKbXE# z+jjA=KiGwfp%&`TKNvS@lXdUmKL;5sA#SznKj@B4vDDYPKh9EKRSsX=KbC+4S4%eH zKl2Pbh+wthKg(dwS<@o!KP1fJiN}fBKj8A@K|vLGtKSYM|gW`hBKMcvE?l*&rKg5VST#ePq)-tKeY6K zM}Ys?KVmwK2P2%?KS-Vlt|h?1KcWpp>o=R!Kc~@qUsw*|KRAx@Zh%khKNQ#4hxLum zKL9M?QPxvTKh$Iv-rv{TKXN)3d?^&)KL@V~s>6`$KXm>J6;EKUU;J zbc1QOl0}KahW&xANT8Kk!#JfnIUoKiClIwKQ@xUl(u-|KjXd@)Lek+KVa~iQ|orJKWQ9l zjVMX%KcB7wLSWwEKcE9cKO6y8gDi*BKL9+H?$?{$KNv!T zl|Ze&KiZTFxCxx@KZB;ZY;DfwKiqAqDHbTd-kKMY}* z+Q;YEKaiixmMZzfKMZcEVD`k;KXMsU5Gn@lKd>H!HIf#lKdc&N1tL+*KZ($I#j*eF zKgslnK$sQdKhTA@V$iF+Ki95pR~K{UKMvj3#l3RsKV|;G0=-}5KLqp%_iqH!KLQ5C zcma~yKXohEFz1}@KM(4eTIKXf-(!p(WiKcGXQO3C@FKRMD3 zgC(xvKcI$fIytrKM*AwmP=ZsKguaI!c8ygKR`_iZ3$+-KVQQ-y4zjjKblAvnbS$!KhqyL zle1ChKO(+=)AC`~KZYH}!A3^nKdj>~yvBy*Kfspd6CQTaKWH1|4hyrkKghBH!4reB zKe)lNmj=b$Kf!trAr;o*KZK%+$Qs-2KfMUIEyj@GKWMWdR-O^cKU}i)3T^VhKh(F< ow){}kKh1qv-)4E@KUk!~URjCYKXeyzS5Ud`KTlJ7fOdoFKW|NzO#lD@ diff --git a/test.zarr/c/7/3 b/test.zarr/c/7/3 deleted file mode 100644 index 48ebf41718aa6dfc8a5769edc852134a4906d46b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy0KobXwVVOBKSgG6GZ7!w7dYG>4Kf}R!mOd!#KS2(p@bsPKKWft% zaHGT4KR-0Q?~G^ZKh%e5;vT`mKaA$OzEGjqKS1u4==KE~KTRVLfy=k(KhUTQKZ7v^^w9d` zKR`f6*ahL$KZ!Qu8q(V0KfaivAF{>mKcPb;$=7e`KQYpk2R-NRKg@@)3AWzKKUSrl z;pPI;KScjT+gzjEKXAHF%*naXKZMI$Z7TJ}KhTDiYx|4YKfAr`Yl*?*KW&-SXrHa<>KVDAmjqnfeKddS5yKfuFR()THU^Klo&R#dc%mKLhGpa?GaWKg!lW z`12XpKa^j_o;PUNKXsJNi}p3@Kbn4aP+HCEKPF(EjXWLRKL8tgN($ol)KiP}9`&qf?KdAcyK9Kg!KZL3+ zHVZ_;KRcho?p=iBKh7*Nm-I2$KQ3q((hbb)KZieO3+~|KKLL3{>?*e6KZbQtL9Q;) zKlpIZywSz(Kc8Z`Q5VJMKOQBLMfWG)KX6vKj%)CRzR!ZKk#I^&sTriKRc-SpQl*n zKh}rE=JA2sKjwhVlr&P+Kb=BveSiz?d#UKi(O~xVq-)KODsAn~9t1KW>t-yEu*5 zKk=c*jwJTvKMT8zj_JtaKkXot#yHjHKUDB^5GcaRKXjBc{$!%gKO&q7hl9V?KWx`! zh@XKj11w)#z2_KmX~^$GcYGKRh=r=IiRp zKa&QR&93C(KNNwNe6umuKVZ*C_cvP5KX5h&i(=TbKfV5w)X#0=KjUIBs8MX~KU<*| ooQ==!KXjJ{Y8CCrKV)O~OU7x*KPF*&3?ob7KPa8LkLvHrKg^t+pa1{> diff --git a/test.zarr/c/7/5 b/test.zarr/c/7/5 deleted file mode 100644 index 51e84d7dd198ed7b9060824a59b22436d2e6555c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy0B=JXNA|1cKk{(SYvqvJKeWkia6c;0KWJ7w$+XqUKVBy8 zR~cjPKf{t;;g}laKQ;BhW$N1NKO$Y0_r&(*KSBxIMaU}cKP>4`Apfb!KMvduRK`Bg zKR}dsk!?h%Km5}pAVFQ%KWzK;LsgsWKTg^?v!Yq(KfwLxp_1|JKRAg%TR_+CKMd&M ze#aN&KQj&x=l{&*KjaqZ+;`v2Kd{$ZdjJWtKloaob|_K4KdN@(VqDeXKa@u3F<_Fy zKg5pDz04x#KivO94=T&KPmsu8L$uPKVb2g$Tx4SKlq{vb>jraKcF@u1~V+?KfbPzT4?>~KeS;W zwKLJtKPPgj025f?KcPowj_Ty?KT;4h!DI#HKLujBJzIe5KjWKg8{*99Kb0r5p3`sc zKZm)yE@M^dKT4brGCn_Khjw%#X!^PKPU!lY>qt5KgbTVD}emC zKSLQ7>QevgKQO)UE9~IWKML=jbV0J{Ke`S>SQ)b0Kh#|oTNK9AKYvasTyx0pKRVw# zv0O#nKUT5Mf(|X>KPIH`5ryF2KX85SJ#r|+Ke}xIi4j89KY#__Wc>l7KV8#eWm|~n zKg1f>2VFM6KUxdab2>`cKiRR9!izfRKlu!)Aqbb@KP=nH3*wT{KVU+A0Gd$DKaAMk ojEwirKhw1kl{QA@KfGb_iG1VFKTxSXj;asKKQvCw2-h&&KRmge1poj5 diff --git a/test.zarr/c/7/6 b/test.zarr/c/7/6 deleted file mode 100644 index 3a52676e74c64b57e11a8690df21b1b6af518e49..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy00?VF?8FkxKbt_l=eT9*KS(e#uzvQyKcFEMi}|doKe|EH zN(AucKa4w&{Y4ziKj#Rb%mxbMKWI38wBA6=KQ1LPCG=wIKg?QKmJ)Mkg(_FKjM-_7k9YZKR75LuOs%hKj3Nx3V`D?>KY;EYN@f3hKQF1I;h1sn zKZL`fRKQJO4 z6zZ0xKM9F>8;02GKkPCg(I_w2KcE~Mt(jK6KXYfnt+koxKSD)&SgLC7KMt?iI?oH( zKZH!g#O%oFKfb20<M;0RNKM?k6eu+}jKN4#` zudq$uKSs?XJMfk1KmIDA8SUlOKR8rWDRWrXKOe7A2zpiIKfop|b(&VkKXRKEQ&d~h zKjb%#9NGiPKcG9*_S2%gKOTyt@`(-VKZz9waMH5vKQsZzaSqtpKc~P{7z-liKd3(= zFfhH+KY2)~gFEcwKXpoZ&9ANQKQ3DbPNKlyKO%myz7*@*Kl$;E@RVlnKT4f>d|DvW zKSjRM?ELEHKkx|UjHQ#+KPrW4PNt*aKYe_G)6!I72KZS1}5=@WeKLsPU zEjFj)Gm=f^ zKT!X)<)c)`KO-=Cy1Y5&KWGsd`vSPkKY3-TQJ1RWKaAt!k4g37KX@qkPJ)o{Kj4N! zN`ainKXMMCu^eyZKfq}`>b)AWKMXBRNY_j1KZaK&veBd4KR`DL6j9^dKbD@nSO~n? zKOkX40Y)39KaWv*!ogGFKY#{(g50poKVl_}xgnP8KZabrg+LkaKfa}#g7C`VKUCn= o>@832KN0zu-%k(hKb|3%G1RQmKQ3PYz$iZLKZbN_?w6m^KNLrk;Q#;t diff --git a/test.zarr/c/7/7 b/test.zarr/c/7/7 deleted file mode 100644 index fc8d615fa6127d40d01c94d127a726fe5104bf7c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy0AcKjNHtI3KZ#aF$n(|hKT3O%%B4lzKLXxzz;&wbKe}|e zOGYK*KLAX>hCy=cKfo$unNHS`KgjD0Y$=khKiqFYtWLPhKgg<#X__z5KQU>` z#3i@tKeV}W*BDIiKM)qPKX!xTKN4KP0C8~8Kgj0Bx>nNcKZHVPc>*iWKZ4Ym!Ym@) zKV6FpKg&wvKiN160amE!KSXlH9-evNKSYr;l3=IBKR!GK3CY>qKeWxEzXi7AKPV6; z@N$sYKL+&*0xa<0KOjb4#39J-KQQ_5hINR>Kkg}*DixLFKRC?;Wx_1BKlmqAky?M?KW?nN z@aiJfKUgQ~X-ka9KgSPDl9(dtKP$#ILP}iVKf(b~uXTUZKR`#*mokW{KVdmnG@{+% zKjdt=Ye`J&KfljeNxKT?KN#!`Tk&n~KW@GAS=*cBKZkbi3M@V2Kae%(q>|FEKZp!$ zf7jvVKh2i)8K{lxKZ=JaUIV4&KWyErs8~wOKPEsiYKS;5xfg8c?KODV06x_(r zKlE3sm02yvKQ0{BP+fu6KWet1`-AS{Kc~20|I2CNKPp-)8c$8)KSb4mrASf4Kc=k| zpx-3zKgYIH4IDD(KP0Zo0vqkcKNuhRM`1?GKi|}wEZa@&KdK~a(}nrkKL$$d6U)Wx zKjltu(QGy9KSZgL#gxFoKQz5)(GH!>KgcwAF(7NpKj$m1EHxtOKNuh|KO8o^KafL$ z3ii07KbV~EA}(yZKQubT0v4_0KRyYcYglX9KYVBcm)7RvKQMTw$jvIDKS&Nh4dlGs zKZNQPO9d0mKNm|z7rc37PKVk#UZ;uS&Kem`rTs0olKk8WQ o54CC9Ke~^BaaXF}KTJyA7>TaTKWQr0UGF;WKM@bgeEAycKk7V;SO5S3 diff --git a/test.zarr/c/7/8 b/test.zarr/c/7/8 deleted file mode 100644 index b3a0f934e8c9b36df031cd01148c2d3d90552272..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy0D=u`5t60cKLY;DI_WF#KmV7;?!q$QKcW(MnAUsJKhiX} zVh8ouKa^siH>736KiJf8$LxT-KLH|w(5z14Kc26*mWE{MKUB6QX%L6aKZRqT*{Vh2 zKWK>-7zL`rKb5+!t`pSaKM;lLczd(6Kf&eCZSEuIKbYf{{7f|GKhS8V!D}PEKeQb# z$w|xMKV`j@pHzG6KP@lNPKRmjKYX zuy>E`KR(s|YxVKcf>6=XcQSKUYG349^SeKebmEIy1EFKR~)zjnr0#KLSc&R4!!EKeY-m?zQpd zKes7~^bip5KO%<^(tu^=KR_Mpv9D*eKfpT!;qT6F@)LPKkPB_Rz>{iKdM@v^%xoBKL;PR1k;7+Kc#Av zUHCHSKOiFz7#oSTKgZm~9K;^xKkVZ7B6s@MKXhK5zDh{wKZekzI$8DJKa5evcFe=; zKbA8pm(lCvKkBsln|HL>KdcHqfZZA6KP*e08mDW{KRYr`g){u;KL9c9o&ug~KX7KE zD@i!#KLGS|lsi;vKi-H-luabqKStUXrq$N(KQbJ1Hda~DKd^N{Xu1BrKU|XSE5EVX zKZwJFPh*a_KhwfQ+8to+KlIYomf2C(KSG;U82~WZKLFG(n@KcHKY*0LwM}c-KVaj^ o&>C*6Ka4~+scx(6KLBp7)Lg3u&KiGa@7ovdKg|E42XbTPKR~`5{u&s;Ke+IKsll@ypKXKeD zJeS_-KgLw7k{~SVKPKhZjif^CKOmw2Md2EtKWr?#Z+tG~KkeEW8~;7&KjV&~H-Vh# zKdVr`Q-p8qKY$paTjxlXKNdCis0_yMKL{3w-Yg8jKW-g1-}|xBKiiR#y%CD$KMmO9 z)BT_4KO~FS5Tw4|Ki`>=@asA0KdcMlXDn~cKX}<`@)ryhgmF zKZks7GLtsuKMWwicO3)lKUTi|hGc5gKaBM0dl&L$rxXR_Ej_QP7yG%EAI$bJ`9van@ zy0-Q5IFH>%o@+7k+GtJF#U6yQN8T#x`*uiu7GlYcOGpmZe5GjjH7g>-uKu&qPH6rl zoZ^l5Vv3RUDv0qBt<83?Jf05UoMpd8y(M@WETj=Vx}@XAn-ZS_!AP6Xdwu%}umscom*^)B7n<9~Y1=b2CGo>Jyi^ ztR6F(NG5q}HypAW1-V!Cn7ep(qH9kRRtw7BFHnt;cXp}#j%ndms!ic%wqSqtZ8|B? zhDG_hr~#G%u`vtMnW~rgEZW2}Wf`!jy|eK^@c`;L8C$PR4k1l8Msc4oV29%O8Bc*4 zD#Fs1&{`8RL#ynPbPb9Ogu)X-J?z2l`@SlA;NVMLlbquY-!3Z6TUU;Z*~`?!VOm7g z9reh%Yrwvq4P-w>392WhZF$$5uyb!EJBVk*t(t#_#4F55&a06Gr3^yPW5`y&eGLs= zANlz40Ak{AIgT#NfpG_Y!(`3OhxKpD<;z`avG+LSYME;l0E+luX3Y|M@_q2UCV(B9h*7p{!U>?;P9Jf&o0^g~_Pwts%F5x!hY zLV24UbE!AdzE_&y(O5jKiXFte>4%N#p%2*YzdTgnG>90sXVj6oZp`m`@MW{c0=cGd z`*>Xi4z&|&c*&no?WAkTJJkl?6;J0s_gS!k5)%BkN(1(Ricdbt-3SqL{BqC%1wH=n lBfcK7ihBXKGm4OVFg0m**a}C!sC2Y>7^_5=j`!^{<3HDto*w`J diff --git a/test.zarr/c/8/1 b/test.zarr/c/8/1 deleted file mode 100644 index 8d33ce674efb802a1aec08caeb2db1831333baf5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy02|xt6F(5{KMn17U+RwQKfnrQ6^sPKl}qMUjf_JKV)(m zK*1NmKR_%>>^}N}KM?E;?iiHRKf4g7u~2v7KP>U97mFX@Kajv=Z6Q3YKbXXp8K-~7 zKf>1vs0Cx=Ka$(h5{9bgKXB3OW)5@cKl?03Io+t?KL97ZTd;0rKdk1t8bYDvKlXMo zlNKw`KOUw_C1AecKdFT)#+N_rKe<@eC02ImKTTl?K`H3#KLoWA5~>BvKUgnEn34V8 zKkR#~D5e+QKk$CIz^n)9KWU$ud`u_rKRC7GD1{v8KRVHm`B{S3KM?Tf=#9h4KZjj+ z+Fo_yKU`B=-)bStKYIs4iKcLZW&s|QQKiZtOO^So=Kj*lbcN5&?KgKSp0}&?Gw8KPhWr?*`@MKQI(;z`YmR zKTvLJ;yNG1KL_1HFR$U^KSxgv}KR}f6*pJZQKie+DIR+@{KO}*n$24HpKk_QJ z=|Si2KmCvZ6<0CjKQ6tu0U}$`Kfj*7rPp8LKd`Aea0pwfKUmLjyDtRQKX5h79P}98 zKggAS%$Ri5KaykA>MHxwKZLP{VjR}dKPNbxj~JNlKlal@f}Y{hKgMVnw%BarKVf8x z43RA1KX`g6)mf*-Kk_}Ax~luuKh1%;Q7ts%Kay6*p#4_ZKN(BE+wEZFKkOzT$q9?W zKcqnGd&}L>Ke*fD8)1gYKU5gzC?Km4L?UH13MKX3nH zUwzZ)KeK#z#P59QKM?ZqBI#PEKdc~n(C_BlKL$l!#McGtKZN9&f;vv!KXD5Yxmbqe zKj16ePO$&sKQj%T6CRD=KUfp_`b!1nKis~3BdOW!KY%z-J;Z6_GKQlNRWua&9KQs_X z!MWVPKj5`MW$%-}KXCoR#HrAyKaR?C7*BN8Kl${VL-e`fKN!^G_XjDrKTJp-SgRi5 zKLA6PnbQ7rKYqCDW_o7PKY7~urQby4KSm;$82?k_KM^cKGws*xKLDoN{McmAKOm)8 zAD51zKiu;i+Uv&6KRQTdU%toMKLjw3O!m~_Kj^%vMdVn$KW>ps(F--_KOjy!r817R zKbq%QWe4w4n_KM>4}6D{h%Kk$U4Z9-+nKh$sg@x#mSKQ63U%9Hi&KNNhv7o@VwKTdJr zxOSk>KTw?ga|geuKe&83I>1caKQ=K~QM~x-Kk^&L&I>ErKMYjVe?s-eKTtbxYNV#$ zKUj^jgVW5oKc`$AA3u=gKV9J=(crJ(KeljHSdJ~!KUeCX27NQ`KO8!b9XyxOKXf74 z!fYkyKS%^<6owt&KUSwGsD9$$Kj-v`HZTL}KiDNv9WTw)KQ>rpFH$4#KR`U~6Z18~ zKLjG~cqe$xKLmQ?h55zgKYab_smJTWKT9)}m?d@SKLlE>A_dyZKM-FM@_rKMk}n{;UD*KW{vn@c;k- diff --git a/test.zarr/c/8/3 b/test.zarr/c/8/3 deleted file mode 100644 index bda3afab35469c7ce771c10c051411fddbb85ea2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy0Ilv*Uf@3JKX{e(611w+4 zx(TZ8KkeC^!XcL9Kde^>A}n6QKlHyqFD^FVKgi&)&k!TfKjt=j2-bAeKg>i|#`kIN zKMD38DtZFsKX9z!eQ0*5KT(hImI>44Kd+gBj;vhhKfqJ~S_~i4KOPhk-tsoD3 zfq(bwKOP6jXiI0>KmE43;gV|OKMT%mE`T=SKLBqn%FI>EKN+U3%BiN{KUVx)aR@`| zKd{uq{`#54Ki|r7$JE2_KU8Y4(S0(*KbY?C>0zYQKb)A}xu*5yKUGkgKUmKSptEUX`EeKSJaWvuSeYKUKVIIFrTZKVU#(ZGT3)Kftco zqU5u)KfqKhB(77XKX6QmhCXqsKalkiJMG1*Kak`%#=j}27XN|k zKl{sMACwp6KV~skl#MjzKc-fE=5%K1KWLwbU4k*RKjn5!)#^duKYS{)c&Hc2KX9<0 zQu4Z@KZ9Cu7^f=iKW3zPXSkE^Kf4B{k9G#{KahsD#|_<~KadXUh&}$(KOn0Ky!sX3 zKfFjE{)u?nKe@ymYp5jSKPv&tC3jZhKV?zi=SxcKKLjEVEko|YKR2JWB8-aZKlP_G zz2oHLKX+kLP~(i}KhmTiBHL5sKO6F1ndwRFKfb*;H!`E%Kct_@`jtZLKTgPe=26k; zKLF)bLccoZKQurLZiybqKekG~=VFl2KOxMPST#G~KkE9ie_#{qKRrLj5(RYNKfqtx z4By$gKiV1*Fp@9jKUO6RLFNMFKl%oHs{FszKOZfVhXGIOKl`scv#-SLKc-Vy&y^V0 zKODYMEDBlXKiK*+=#_!nKW=rkkOxN9KZH$vis~icKLmQ^!!35vKMDCBSK_bZKQdL= oU_QOyKOal!s;}$eKQfb#nty}iKcgBC{J$dNKLC;~XgXmecjl!cWeNjcd34$5F zt{<*ul->ClI@9?XQAYz3uEw`Qo!R&N>wO!{_jPKc7lp~eQ?&RqR`{BUn>K$v9LE|K zvO{`7MoawY$p*|Y_Q-ttb?_6bvko;G@R7=G?h5P&Z(#HKFST{xh8&BzxBCe)5`*av z3O+zGP-(A^HKF%!h$!v(AQUdVAh=gyZH>tLFlPvCYOjAzr5vmtVO6sH6Xs1@fB(Bh zA}P%!wxF6siYaqtd!!a?N}_9)C^T4gd4qlV0yFpr7Aae#@8CRNuumUIf_J7`D0w0W zo#oE7&wj(W-lGXSj95Bxvn|U*1rgJUXIl6b-+k=20|X?zl@Y{Pz8sNLT+=eqFmg8P zq#;@DV1|x#2;GdhGEs5-?u}t^`Z`~Q-LYYu>#(+P(=)WG6J8DGnQ)!$*(gw(P+KpU zdg*3{{DffHB~3S0^fAhPqCO#YUM`=`Re<2@>IQ<8I8Rf=CBN09LtpOsC1watmn~dN%CfM0gR`?y09-sOe!4ol8{#eg5aDMc+$9b5Y0Zu!ws{Ez@+i@d8j(}qE2lG5$c2;!s74>$ZYBI;erQgXzA*=yxQ lL|!ipM@iom#jnAgmKG*dsKBY+8J<@59>Q~B1?@Bn{{e>coe%&3 diff --git a/test.zarr/c/8/5 b/test.zarr/c/8/5 deleted file mode 100644 index b93e3453d0eaaa94c2d5c21805d35a1841c8cfd3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy0D^TkRbrXsKMG4S+DMJ#KgjklAc}_BKR$38ejpyuKQyEK zlhHcOKSeM)4eTxFKXg|*@98AzKRjbxhM-)~KlsY}G$6OfKTZ;Vng!e8KS>JksxT?+ zKmUk0wovZiKVWwBEBJB6KNk|A3c^FA%;KR|)7*h_iC zKX5a%u$KiPBP^|oc=X zH`xg2Kd}6fHz&2?KbtJZ_TRDVKeW2%;zvorKcqvRkiuZYKfJg8l|bI=>KYgE$ zbVF(DKcEenf6MB1JKU!+I*^80aKON84eAndZ zKW7K~oqKgh8WVZyV?KcGrEV388tKb$kiJcE1cKjy&lr4Jt2KSNpMTzO&YKPMdM zB)Wv+KLJ}(L&2HnKR^b!qpvIIKd2}xvT)eiKWLx=aL0GOKbkii)hTn@KR(H1&Qag! zKOhObWCX3vKbW{~#8-^6Ki0f=9j1cZKX(1j?+$?7KbubmK>H}aFKc;Bt zPjb`UKZ9Dj-&3&QKb`jvC)LH|KP*#Z&YyDUKO4i<$BuXFKN!`sj>;I(Kjhf}V)5qD zKTv$X1m|zmKM1UE#FzN*Kgd{UCQs_xKd|SI`TVN7KS<2&KirFMOwKFpKf{m7oiOO=KST?4-nqEVKi+|?y7GbSKjsB?t62r+KNOkS zUbxrhKWv2dMGEHbKfrmg(3~8YKhCET@M}2lKMbb=Y5!F1KRm~e1&5*MKYT>OVRz5m zKc-QJutwA2Kj3#nV9;5$KLi6uKn=ClKV3j7TO^+BKNPbR1WO(5KP#1ONZEYnKME~( zzwk2QKZ;hD1a+*|KS)Ge?EBZ}KT3+j+)QHNKc&xf8dMqPKPrN-E87*>KWk{_-nUlk zKWEcf<6))dKMBu+{`)QCKRI<9Wjea)KNuyKcu^$ZwM>jKSJB2hI_{6KS3f0J*wI1KghOfwCab=KeZ63pGUjz zKOj#TeZkM^KcF2OEIlKsKcJ)sj{sA{KUBy63_{b`Kd*X)$+n#CKcMw02^^NcKf;<* zN^CdZKf3n)x=2ITKZBWbtD_O+Kfca}!C`IUKRHM;B8Us?KilK*?A(mtKT{NYlE$d! zKjDo{=zm(_Khr8dLY%JaKghO`Y9wdpKe(#T!9(4+KQ6_d316$~KLCB%<(X%}KPp+~ z+=0;5Kax^m`-`XAKl)&s#d*2zKlIh?K|}B0KU7d^SR1e6KZ;37#(TiqKM2vQVOxpS zKh!Z|gtRZgKk~?m1%LkFKmLMF*aPp{KZbyFWabpsKdejF3-18aKi;Dc?fHe-Kd(gL otJ)0VKOt7UO)FRGKT=+<1K!NgKYezRV`h}-Kjm7!#%Y}CKfTMJO8@`> diff --git a/test.zarr/c/8/7 b/test.zarr/c/8/7 deleted file mode 100644 index aa4e8bbe85de038d7180e933535bfcc1e9816c3d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy06b%7NqXbuKPZPB-&29gKdhbAtz1mXKbJbrpad=EKNUr; zk)yHiKZ4n9OS?wmKN|6jF!epqKS&$S6}f`qKMN?~WC0-PKb{{m84{M$KQzZUW+IR5 zKTr>pBhH(kKOz-N3J3({KcPR|bUEecKX?ST@7yoQKbTS1BBX`ZKce7+j0&3NKa3q_ z3oO{>KWl}kg4t*5KbqxvV6_zDKe3*;-MD4pKauQ+km=d(Kd3fR63oWKKPb*^wOL;6 zKjhy4;rlx4KLEkm48&rsKiK_@U6}XNKQX$jk(;vSKZqEAM;~?WKXV@G0@-@!Kagkp zRn^4nKVZ<^s}v}pKhc#5I80FPKg&b`o`($OKQvKhyB((-}?eKh!&Q)`rl@KdhhIHq1WRKX`VaHEa3FKh$*_%Hz=7KTv>1 zviLW@KLEHpX`OmdKNuO~$$p^PKf=VaTdN?^KP(rsgQpt7Ki*ab3MjDbKkiwf-8<3U zKhUfD6()x7KTI+25(JaaKS1n!C-m~;Kb+?a{g-6OKOn=M`FX*~KN<~xN3(v^KOS6p zvZ74bKho6VrNklOKYSU}qftWbKWL2y%OFL$KY+PuYRDYlKLDSjC1b8>KaJ}5D>576 zKb)T6N?_a0KaNuNd3RmoKVS+m;@*nhKYI#fqxq}sKkC&|w~tiTKMKw)->3-hKU87u z-FYzEKY$lQioy}mKeD;jujhV{UX8W63F3x!^eSDq|&!=a3E9D<2d=@FxBbs-RDc$}FieIa` zC{1sX_%|uz(XQ)%|F{!B zW72kZ+HGJy7%r$98^j*pQ)S!$E&Pj^NxeA@P}JXg9ca z70HD%{1t}Q=Lw9sxWdHYu6IEu&8I~xCcscF%S>)|f}j0p|BH?fuxQWpB!o0U&>K%* z$+ki8TQ2tH%0U#0Rt^odVtF9RO*?Kytk?G+aV>gKKAd<3_878nldH)W)X+6Ox#|nU}<6C*epHE|`m||D?`pk6R z9NIN``yIl(uBc9=*s$h(SjMx;HhAPjTDHxR!dNO}7Y#V@g~T)s=2$@*^AA73cfyjg zIn{HK1L8E{0&jx`#mOCyImZS-PwVx`l+1iWA3l>csm9*dq1Hot2#9MU84@oSNal5S lwjOkV9&$gnj5&@7+gfJFz&P^s4;NCm5wPDsyTL)|@gKijkz@b> diff --git a/test.zarr/c/8/9 b/test.zarr/c/8/9 deleted file mode 100644 index 10a2d76747928899706d2e369d8c652364f74742..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy045=JcG~RWKTQlnL9*@WKV3BQe0R#|KSU$JytzZ?KfqzW znO`W)KTv561PPm?KlrOAFbRXiKa42nUK=jaKU80dILJKWKWsd*PdK9QKk8roYM{H{ zKQMC>kZ*O~KX9-jFx>vsKQFz3e@B4pKj>P~TRi;0KgNn_Z?84!KX0E2qbfz|KV;{p za%ze0KVXx%+dbjkKOob5+!`)KLlp2c@8DYKLFxCpKSzaKX{1hz9AR8Kj8U>c{^~hKSahP zb-*mZKjg?5qrUdcKY;c`arDR5KY6w__P43$Kc*`GKXA*?jP?bnKmMUu)q0ZW zKX%lLkTdq!KjS0Li7h|kKO_KpmbKKh81#jnlvGKeNzrA`ZjvKO|io;OB+kKgYR8;&s03KQP(7$#^H- zKa8Q=c~f1*KmEQ;P`@+kKWsrEIYXJzKM)k$HBJ(*KN#3Ue7X1UKd$N!#&6uzKSs5~ zY>L0wKOSIsbnKPUKgM|txIqW(KeDvo{h7DcKQff*XP-UkKX}GX;xQoJKg~c%7YN1T zKLEpThQqJAKVYqbi%x2sKY)0V?W)hGKVYmrUKdrXKiJ|sXrM8)KS2xtzBP5_KN@_~ z2h3R7Kd^^CbCxd0KZ@1oq%M-+KNwSlHJ*#eKljY6w0-92KTw<3EZYaiKee{ZUi;{Kfrr1Kr=k*KVSQjRKkL(0Z{9rWKk(I@u=+I2KSO7XRj$_J zKd8^BKh{&$Ki_Ww8%z)EKQ<8Y8Hr}oKPY>=xS|%&Kb*&?LPS~3KVZvhc3C>wKVbA| zlH_RLKSa;MQk#&_KX4D(N(lv|KVX;s-!`htKdr($y%=KdKPZ(IKvTNbKe*Q4V6kZB zKkzutcfiG~KS0X*N;nd(KhpD+&h97VKX&pH1oZ3aKPK^7F_rh>KP3xQ_AavEKOL(> zE+Aj)KaL>FUIp#uKN{>>$#g~PKhWe;a9JI!KLNHD0JSpjKf<0Wtm@tGKk8}mKO>UecRFg~KXTEch&oQ>KgikPRK0e*KM=wJy>~L9 zKh)8gZN*LKKiW!7jhVsRKQls_w&4xzKZ?~_`s~c?KYW-Zbg2Q>Kj4g3B3W$EKTtjd zdS_tEKbYIyGwSNgKVWnAYd@5cKaOaSkrgTKMD;nDgespKR}mwFY;vEKUUcxq+GM) zKT?a38pZGCKmM&gbBzhuKNPZ`UM{=oKdc%R;0pxdKhCuJ0kp2+KivOOq{^1fKNRBF z>$?NPKeOA;E+vcXKb0B~fvafdKLBd+q3yTlKSpn^ct3saKjTxndAMccKXP_}`Z;sg zKk&pbBx9@9KW|bxkt`46KWO*_+O8hdKRoRJYI)%4KQO_y3wBeYKa}PiPbtalKLlj7 o=RKgPKbUM3H!>NpKLSGuTs~XvKd2SdTbcLNKe8*6Q~&?~ diff --git a/test.zarr/c/9/1 b/test.zarr/c/9/1 deleted file mode 100644 index e9a0a6aa0e3cc95d047ee39319e4d2922150233c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy0G!@hdhM3ZKcwKDKKTpKfw(54$oibKSV*}&i~8JKhfMw^%q&~ zKNu#@0lBNiKQL#XH+g;OKXAo!j=XuhKN{Qq@mUV-Kge$C6bSX{Kdi>}yEqf+Kd8?~ z+ZDF4KY~Luj}A!QKcG*tdP_*OKi_V4ED`GLKktsefPjMGKRG-doyCjpKXywDefE9n zKlX4;>tn{#KV-S^7KXRmKZHt=Di>$(KR9#)*Bv$FKL?Rs90RfGKfHb*uZy+7KMXG^ z@iGt3KPbV(d6fR|Kg#|c;06%vKSDd401W!nKlY>=Q8mTuKd@DWz?DqzKONb;wPfJy zKPS?UFf~@;KYkw}6w;v8Kk8k#;&sWIr=I0RSKN2wlTScMoKbqO0 zr~bUtKXkqm?`ompKR_}H29Z;WKk(AWE+?hJKkPQ?N98ENKgbRQ6Pw1J|X|oKcGD8q=muJKL+*z zER=2QKZF%8UR{UgKX@{q1Um+~KW^pE4B-{gKhoT`YrRb1KY&VSzU0cuKO=Ru oMg;QfKP^?v$v-{oKR`#NL0V9aKQ9U)v9Vs|KgngzlTPmIKLD$bs{jB1 diff --git a/test.zarr/c/9/2 b/test.zarr/c/9/2 deleted file mode 100644 index 2d4dbb15f7d4ef6194882d67e6815fc1e0851353..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy0L1Nfc_iB7KeiE(vG<+WKc_D%3C_goKL)PF*tR~~KZ~As zvoaCqKOYZ&!&KGnKak!u@9@E~KMEI?VPRC$KN%t>?8AKIKaQHVIqXW)KWTvI4LMoh zKVnE=9%-D^KUnWs{w06wKa#?dK5&udKY-`O>1Di$KZLQN_%U_vKPW>QCn~kPKS zKjED~jS0-}KMYS>rA7PNKQI6iM^C3KCl zKQO7~H}%l6KlDHBB!oWMKd_Yz+{S(BKkxt>uCAoCKj;-KYZj)-Kj=Zi>fUkJKR%E& z=JEm1KUt=3cj`ytKUd#E=jJBmKgiS;a4NvgKW@qS@?aO#KkH=YdA!8zKZxL3Y|Cc5 zKN}iAkCWEqKTaQuIUFSFKfs%{S)V7$KlIV-`}9HIKafn}QbjnmKX}a>9Scy;KhkqY z+nQI?y=KZv%Fh^&C&KQ?;i z(A--+{KQ$u66oPQzKjhiee>_jo zKemlH*#^JWKW8^qvQu8qKS}dPJsS$|KSrsrSR~`z zKhjcfbW2;+Kd^Wq1qm1KKgqsj{Oe8NKl4X+*Fz2KKWrNN<%%uHKed=6T?$&{KRB~T o6z8q!d(jMKkD41C#1jDKSa>Q5rf>wKky(1DSjHhKXQVxn5u2j zKSTv!GHx%=KQNq+4kAv1TlKY*2!YKdAm(crLrv3}y@Kd`}2UG*uxKfn!sQuuVEKhO4T?|vWVKhTNgZ&W4OKVB=v^=y>mKjc~= z?_1x>Kg!a6BCI#)KaCKUkl*PfG&mKSRcty`3=XKLBYS`ON~T zKOh-cQTV>*KSHqFDRRElKO*~_k$N-eKS*kz>GQ1CKadx8fRO&NKiV%tY9X5AKS^xV z^eq?SKc;SR<;KZsKd=u>s-Kk4RsdGB55Kej=OHai32KLBG~LF9kPKhVUF zx(Yy}KgiMJCGP&@KPGxQ#`h}gKlANQpo53wKTK#_9u&ULKm7?iqf_zdKY;Z0C6?DyKR72**tUz-KTKaefxG6`KdvOh7Z*(0Kj%%B3jhEB diff --git a/test.zarr/c/9/4 b/test.zarr/c/9/4 deleted file mode 100644 index d371be23fb1feddd8e1028ba45090468dba69309..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy0HBduy0!bMKUCPuY$7K+jAKh|Ui;IBy5Kf2X~jKIp;KPtlj+*8@zKOCXZ5bDP0KM*OPG*S$|KPEkW ztLDMtKlr9u6m(a*KQ^z{mFC~(Ke^dEvQO^pKTDPu@#CH9Ke694~KPA9t9Tr&RKQdgsepk8BKMF0ee`EU7KVa^rX(i#s zKQ}4SWNdNcKQDo0Vx~v!KRnR|tNWSNKZs}HLS?GVKd!H^esSZ{Kj;Cl!pB(8KNR0* z8$jsqKfFjF9pVG+KXfej;(mYDKY3Pe+x?R0KYaZG-Fv(0Kk^2E6GeF8KfdSmU44Jm zKcKj}rp{EEKZ2I{u!cU>KLoNQ-17X^Ka_&-GQJznKX@Hg{59^$KgiokfLvhiKYZKKh(2DMt^MSKg()O$tQo{KNl&>EgVhdKO%iT z*fv(=KZ&y6U{~+sKd=H06`47-KYuU!)8xnHKXVsbB!R`_Kk74KgSV&%1Za|KLAv3 zTK|{eKc?9L^D%JlKa$Qtr|UQ4KWyuzYKR2GKUFK3Qi(jJ1Ki&{~@S||l zKL}EqlqV>~KjZ58uENddKY|^t5V_0UKUncJyG4=2Kgu}1c`S_NKTziPF{~G{KcJd~ z*HU!VKcJsXMKV6uKjl9d`SXYCKS(tZ68U|xKeb4vZSuU}KLFpRK6Hd*Kck&>RJJDR zKOEp^tk?(XKj67DymlXxKV-pO1Mu|AKNlhezuwj3Kfn)ed+xEtKTxtD`=ti&KmB4& zfB!k>KhwyR8xLveKL8x6tSPa+KZ;f6GTZ;`KkOk+*JKL#+!kdxQgKagkG6$%&E zKV#V4q4&(OIisKl0th zWg{l$KVEIkv~WM@KTr}{hIQZmQKj5Fqsd1K`KRkjaTPGmxKOh%>HWXpVKZVnyk5V-2KSF~v zQ3I~pKU^iaO%kigKiGP%jaj$0KMxGqZME9tKd8`_{Pn=lKg^SLp>o32KM3?Sc|Y&n zKUcBvPP{(qKj5oD@xX7lKTP+hwKne7KlGrCN|lzzKc}SubHKOlKlfBCio-+bKf&+_ zW;cxLKg&b`a2NgVKf;8#VzL+4KR9`DUKdWmKbB3GR?JA!Kf`cnA&s%^KOoRB6p0KYUCrdS#x_KUjiLtC;8PKUqL~X-MGVKddm9@{k?wKZH&Ny&f0KKUg36 o!+5gPKLIh+TBv;KKN*u!G}wIaKdimmSQkd!KOK@o*FR?BKNvHZ3jhEB diff --git a/test.zarr/c/9/6 b/test.zarr/c/9/6 deleted file mode 100644 index f558b56f4a5948c5debf9f52849196bdc48c1042..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy0Ei(``dSyaKe&;tgJsg|Khpk1M0GRTKR!J*GU!<7KP+t@ z9$5y$KTsm{r5DP#KM3!v)p6z3KjkR$>e#X9Kb`LaY}th7KltbIfDSXYKPZfo%HuY= zKO6<{d-jLyKM*{QBcYV4KWzlZN-2oqKghadn&||*KcK#<`wI-WKXj0Z;rYkmKeF#2 z>#pk8Kafo(Wf*d}KUF%4ox_slKZDlAhiO~xKWL84jt!pVKNy-2nJ_ryKceSj%;X;1 zKRjnd`3mmpKVvO3EJdv8KY&OzfeB@wKjaW$xMS_@KiwLuuNBh`|HgKX}f@))X?{KMR#JU}^*DKO=9I zHSHMXKPqmHl996RKei;II4F4MKiAG#ja(MyKc-=$olWE0KLG3*{3d&}KeRRtp(mTi zKh^`Im6$x}Kb|FL?|i@NKiBusZOVq^Kh`FbwCXD3Klc2bXv7ulKlBcfe#(TnhgKYv%P3ZQ=CKW4N9gU>bCKOIzSu`rA6 zKi0pd2GsE8KR|vu^Az&HKTJ!kvbpBoKh1DdRXCdNKL!HsCS}v%KQlZE$E=*-KmFH4 zJI{9EKWs?tCcJCYKbSRri3b<$KdS zXE%n>KNBsZ{q-#3KVEuOb7e2-KY(fJj2iQnKM+mL*7SAMKOuSz1K}v(KMVy9kS=58KL?b81UC!oKO4o)2xpb+KLR%z oSTO$QKa7)hlpZ?6KakD)>wW0pKP;rRRMWTWKbEY%qEzJBKZXdGEdT%j diff --git a/test.zarr/c/9/7 b/test.zarr/c/9/7 deleted file mode 100644 index 18a1a0ece3d34340f9c156342fb404ac3bf62a93..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy0EBvE#)4DKKeqowi1papKWN&1ulJkVKU9j{J8!w~KdVMq z(NR_8KdkWJDwrY1KiDuDI~+XWKaPDF2^v@5KM=^-y;#2HKd_+0Pih#bKM+0ysMkxe zKRGIaB$@T+KN+!8bMCm|KYSrwKPciqp&zpBKOg?suoR5#KPauDTGRUHKc?6s zLNdGWKgO6$iobc~KfoU*shVcfKe~P%(NqoAKlrKR9rY zH-5&>KU975T>Bx-KO@ksD`CLlKLlB;>MU^2KO8R~fYRLQKh!O_ZWr9sKl61bBR(kT zKf`#CsaF>6KV;|+aVWaeKR`8>l(wt4Kfq1Xs#Lm&KLGk0v3cx$KNicvltX9SKls)f o$9wR$Ke}$B5w^G3KY%29J~BzsKgI=aWhv&|Kcc7li)Os*KSwQ+Z~y=R diff --git a/test.zarr/c/9/8 b/test.zarr/c/9/8 deleted file mode 100644 index f62afe36cfe63b9a51f2a767138be5a8a3f6fb91..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy05FjMgE^9-KX;l$caDDVKVFRp&m{KfKUfnf5`{InKk)iV zG!rwXKSsrYm>){kKOPRTOUBdRKcwAoj&-cVKeV^ap-W@gKcp{R<6}YYKg1EBp5oEW zKU=d=(oUV{KM<(aiRmYdD*KW)ti$CymzKS1_y&%u-FKTrD*L(<6UKfGNxMc|p*Ki}-T{$?5CKPV6A z&dRXeKdx2orI>WvKSiocl>Xn~KO5tr$}92VKLGr<kCkKg5mBi721i zKc+!|R1+rGKR_8zj2tY1KlX8|%*t@qKWN=AKCz$PKkx42+eKIBKWv7A-Vuq!KWRgK z?X5uKKj`h+u2y2vKSNleh38%8Km4H^xjo_UKYBVm0Prl@Kjfk}+?EjKKa#vm1BNc& zKjA}I<&5LzKeHn2e#J=cKMbUxuwIhkKd7&oELykaKd*@fH5dKuKa8e_c3t`AKaDZ? zxF37(Kfz9ot6j_GKfsR@qfY^VKWR1~71-D0Kd_Nte4%XLKe#B3FZ9^4Kgmu!pSJPBKZmb#Vz?FHKYUK#L90*fKMaXuJM8SjKM?iV zz{)MQKR8;Z7fLY6KNJ#+5N*75f1KX??SasU7T diff --git a/test.zarr/c/9/9 b/test.zarr/c/9/9 deleted file mode 100644 index e4d28de0c9f2ccb86df84ec4f62c31f18ed41ad8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 810 zcmV+_1J(Q}wJ-f(AOZmy0EkQiA}5QnKa_EU)1R>DKOf7lNA$nvKd9G$q@q2^Kg2_y z4U}TvKXQ%u`8t{0KUR2twoqB!Kai_XYyWZ0KQl(451=yTKXe2e#)#I+KNyGYJst+Y zKLFDSjU9V(KaeL*yENd`Kd5NjgT@xPKRbhd%@k+jKXkcMENzJ8KV~VknT-3~KZu{E z$gj5EKS#KP2C{NWN+6Kfn$12Lfe*KVGyK63?OLKMcHjJq%0DKR{pU;a@|q zKW*(X48A_^Kd?o9b2RwZKMuRCKVHSP!A%j~KY$S@M46D}KP=4xAg?{eKRgimyRXgbKR!s) z9sx(yKRIjnv0=vQKLuYS^+jy!KfJnA0ZZ-3KQB5KDKahRKXM0C^wQwfKXvDgyP$*Q zKXAEXWD0JmKjf^KeCHYBKj1F?sYHOAKcd}o$BaSmKj64(|2+@dKVAnDI0~BVKYW&e z^0s*9Kd1i^Cf@$#KN+u>ny%U6Kk^f`pMwhTKS0Bwtd}ggKiIxu7`wRBKRmilo@W=< zKX8SIvJQ8&KY*k+9fF^bKiInV$P^VxKZT`g7UAjRKN-+d);VC} zKcFC;L2579KMU2pKTq$Ug#Z8m diff --git a/test.zarr/zarr.json b/test.zarr/zarr.json deleted file mode 100644 index 56616dc366..0000000000 --- a/test.zarr/zarr.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "shape": [ - 100, - 100 - ], - "data_type": "float64", - "chunk_grid": { - "name": "regular", - "configuration": { - "chunk_shape": [ - 10, - 10 - ] - } - }, - "chunk_key_encoding": { - "name": "default", - "configuration": { - "separator": "/" - } - }, - "fill_value": 0.0, - "codecs": [ - { - "name": "bytes", - "configuration": { - "endian": "little" - } - }, - { - "name": "zstd", - "configuration": { - "level": 0, - "checksum": false - } - } - ], - "attributes": {}, - "zarr_format": 3, - "node_type": "array", - "storage_transformers": [] -} \ No newline at end of file From 5ade440e37ac5f8ec51d11e3d5ae70fe44cfe6a7 Mon Sep 17 00:00:00 2001 From: ruaridhg Date: Mon, 15 Sep 2025 15:16:02 +0100 Subject: [PATCH 36/39] Delete local tests --- test2.py | 28 ----------- test3.py | 115 --------------------------------------------- test_max_size.py | 91 ------------------------------------ test_org.py | 119 ----------------------------------------------- 4 files changed, 353 deletions(-) delete mode 100644 test2.py delete mode 100644 test3.py delete mode 100644 test_max_size.py delete mode 100644 test_org.py diff --git a/test2.py b/test2.py deleted file mode 100644 index ec17fa403d..0000000000 --- a/test2.py +++ /dev/null @@ -1,28 +0,0 @@ -import zarr -from zarr.storage._caching_store import CacheStore -from zarr.storage._memory import MemoryStore - -store_a = MemoryStore({}) -store_b = MemoryStore({}) - -cached_store = CacheStore(store=store_a, cache_store=store_b, max_age_seconds=10, key_insert_times={}) - -z = zarr.create_array(cached_store, shape=(8,), dtype='float32', chunks=(4,)) - -print('filling array with values') -z[:] = 10 - -print('fetching value from first chunk') -z[0] - -print('fetching value from first chunk again') -z[0] - -print('erasing arrays values') -z[:] = z.fill_value - -print('fetching value from first chunk') -z[0] - -print('fetching value from first chunk again') -z[0] \ No newline at end of file diff --git a/test3.py b/test3.py deleted file mode 100644 index cd8565e21c..0000000000 --- a/test3.py +++ /dev/null @@ -1,115 +0,0 @@ -import zarr -import time -import numpy as np -import os -from zarr.storage._caching_store import CacheStore -from zarr.storage import MemoryStore, LocalStore - -print("=== CacheStore Performance Test ===") - -# Set up stores like test2.py -store_a = LocalStore('test3.zarr') # Use LocalStore instead of MemoryStore for persistence -store_b = MemoryStore({}) # Cache backend - -# Create cached store with the same pattern as test2.py -cached_store = CacheStore(store=store_a, cache_store=store_b, max_age_seconds=10, key_insert_times={}) - -# Create array using the cached store -print('Creating zarr array with cached store...') -z_cached = zarr.create_array(cached_store, shape=(100, 100), dtype='float32', chunks=(10, 10), mode='w') - -print('Filling array with values...') -z_cached[:] = np.random.random((100, 100)) # Fill with random data like test.py - -# Ensure the data is written to disk -print(f"Chunks created in test3.zarr: {os.listdir('test3.zarr') if os.path.exists('test3.zarr') else 'Directory not found'}") -if os.path.exists('test3.zarr') and 'c' in os.listdir('test3.zarr'): - chunk_files = os.listdir('test3.zarr/c') - print(f"Number of chunk files: {len(chunk_files)}") - -# Performance comparison like test.py -print("\n=== Performance Benchmarks ===") - -# Benchmark 1: Multiple reads with cache -print("Benchmarking reads with CacheStore...") -start = time.time() -for i in range(50): - print(f'Reading iteration {i+1}/50 with cache...') - _ = z_cached[:] # Read entire array -elapsed_cache = time.time() - start - -# Benchmark 2: Same reads without cache (direct store) -print("\nBenchmarking reads without cache...") -z_nocache = zarr.open('test3.zarr', mode='r') # Direct access without cache -start = time.time() -for i in range(50): - print(f'Reading iteration {i+1}/50 without cache...') - _ = z_nocache[:] # Read entire array -elapsed_nocache = time.time() - start - -print(f"\n=== Results ===") -print(f"Read time with CacheStore: {elapsed_cache:.4f} s") -print(f"Read time without cache: {elapsed_nocache:.4f} s") -if elapsed_cache > 0: - print(f"Speedup: {elapsed_nocache/elapsed_cache:.2f}x") - -# Test cache effectiveness with specific chunks (like test2.py pattern) -print("\n=== Cache Effectiveness Test ===") -print('Testing first chunk access pattern...') - -print('First access to chunk [0:10, 0:10] (should cache)') -start = time.time() -result1 = z_cached[0:10, 0:10] -first_access = time.time() - start - -print('Second access to same chunk [0:10, 0:10] (should hit cache)') -start = time.time() -result2 = z_cached[0:10, 0:10] -second_access = time.time() - start - -print('Third access to same chunk [0:10, 0:10] (should hit cache again)') -start = time.time() -result3 = z_cached[0:10, 0:10] -third_access = time.time() - start - -print(f"\nChunk access timing:") -print(f"First access time: {first_access:.6f} s") -print(f"Second access time: {second_access:.6f} s") -print(f"Third access time: {third_access:.6f} s") - -if second_access > 0: - print(f"Cache speedup (1st vs 2nd): {first_access/second_access:.2f}x") -if third_access > 0: - print(f"Cache speedup (1st vs 3rd): {first_access/third_access:.2f}x") - -# Verify data consistency -print(f"\nData consistency check:") -print(f"All three reads identical: {np.array_equal(result1, result2) and np.array_equal(result2, result3)}") - -# Test cache behavior with different chunks -print("\n=== Different Chunk Access Test ===") -print('Accessing different chunk [20:30, 20:30] (new cache entry)') -start = time.time() -result4 = z_cached[20:30, 20:30] -new_chunk_first = time.time() - start - -print('Second access to new chunk [20:30, 20:30] (should hit cache)') -start = time.time() -result5 = z_cached[20:30, 20:30] -new_chunk_second = time.time() - start - -print(f"New chunk first access: {new_chunk_first:.6f} s") -print(f"New chunk second access: {new_chunk_second:.6f} s") -if new_chunk_second > 0: - print(f"New chunk cache speedup: {new_chunk_first/new_chunk_second:.2f}x") - -print(f"Different chunk data identical: {np.array_equal(result4, result5)}") - -# Test cache expiration simulation -print("\n=== Cache Behavior Summary ===") -print(f"Total operations completed successfully") -print(f"Cache store type: {type(cached_store._cache).__name__}") -print(f"Source store type: {type(cached_store._store).__name__}") -print(f"Max age setting: {cached_store.max_age_seconds} seconds") - -print(f"\n=== Test Complete ===") diff --git a/test_max_size.py b/test_max_size.py deleted file mode 100644 index 83e4a6bb73..0000000000 --- a/test_max_size.py +++ /dev/null @@ -1,91 +0,0 @@ -""" -Test the max_size functionality of CacheStore -""" -import zarr -import numpy as np -from zarr.storage._caching_store import CacheStore -from zarr.storage import MemoryStore, LocalStore - -print("=== Testing CacheStore max_size functionality ===") - -# Create stores -source_store = MemoryStore() -cache_store = MemoryStore() - -# Create a CacheStore with a small max_size (1KB) -cached_store = CacheStore( - source_store, - cache_store=cache_store, - max_size=1024, # 1KB limit - key_insert_times={} -) - -print(f"Initial cache info: {cached_store.cache_info()}") - -# Create some test data that will exceed the cache size -print("\nCreating test arrays...") -z1 = zarr.zeros((50, 50), chunks=(50, 50), dtype='f4', store=cached_store, path='array1') -z2 = zarr.zeros((50, 50), chunks=(50, 50), dtype='f4', store=cached_store, path='array2') -z3 = zarr.zeros((50, 50), chunks=(50, 50), dtype='f4', store=cached_store, path='array3') - -# Fill arrays with data (each chunk is 50*50*4 = 10KB, larger than our 1KB cache) -print("Filling arrays with data...") -z1[:] = np.random.random((50, 50)) -z2[:] = np.random.random((50, 50)) + 1 -z3[:] = np.random.random((50, 50)) + 2 - -print(f"After creating arrays: {cached_store.cache_info()}") - -# Read data - this should trigger cache eviction due to size limits -print("\nReading array1 (should cache and potentially evict due to size)...") -data1 = z1[:] -print(f"After reading array1: {cached_store.cache_info()}") - -print("\nReading array2 (should cache and potentially evict array1)...") -data2 = z2[:] -print(f"After reading array2: {cached_store.cache_info()}") - -print("\nReading array3 (should cache and potentially evict array2)...") -data3 = z3[:] -print(f"After reading array3: {cached_store.cache_info()}") - -# Test without max_size for comparison -print("\n=== Testing without max_size limit ===") -unlimited_cached_store = CacheStore( - source_store, - cache_store=MemoryStore(), # Fresh cache store - max_size=None, # No size limit - key_insert_times={} -) - -print(f"Unlimited cache initial info: {unlimited_cached_store.cache_info()}") - -# Create arrays with unlimited cache -z1_unlimited = zarr.open(unlimited_cached_store, path='array1') -z2_unlimited = zarr.open(unlimited_cached_store, path='array2') -z3_unlimited = zarr.open(unlimited_cached_store, path='array3') - -print("Reading all arrays with unlimited cache...") -data1_unlimited = z1_unlimited[:] -print(f"After reading array1: {unlimited_cached_store.cache_info()}") - -data2_unlimited = z2_unlimited[:] -print(f"After reading array2: {unlimited_cached_store.cache_info()}") - -data3_unlimited = z3_unlimited[:] -print(f"After reading array3: {unlimited_cached_store.cache_info()}") - -print("\n=== Comparison ===") -print(f"Limited cache (1KB): {cached_store.cache_info()}") -print(f"Unlimited cache: {unlimited_cached_store.cache_info()}") - -print("\n=== Data consistency check ===") -print(f"Array1 data matches: {np.array_equal(data1, data1_unlimited)}") -print(f"Array2 data matches: {np.array_equal(data2, data2_unlimited)}") -print(f"Array3 data matches: {np.array_equal(data3, data3_unlimited)}") - -print("\n=== Test clearing cache ===") -print("Note: clear_cache is async, so we'll skip this test in the sync script") -print(f"Current cache info: {unlimited_cached_store.cache_info()}") - -print("\n=== Test complete ===") diff --git a/test_org.py b/test_org.py deleted file mode 100644 index 362f3223c4..0000000000 --- a/test_org.py +++ /dev/null @@ -1,119 +0,0 @@ -import zarr -import zarr.storage -import time -import numpy as np -import os -from zarr.storage._caching_store import CacheStore -from zarr.storage import MemoryStore, FsspecStore - -# Example 1: Local store benchmark -print("=== Local Store Benchmark ===") -local_store = zarr.storage.LocalStore('test.zarr') -# Use MemoryStore as cache backend with CacheStore -cache_backend = MemoryStore() -cache = CacheStore(local_store, cache_store=cache_backend) - -# Create array with zeros (fill_value=0), then write non-zero data to force chunk creation -zarr_array = zarr.zeros((100, 100), chunks=(10, 10), dtype='f8', store=cache, mode='w') - -# Force the data to be written by writing non-fill-value data to all chunks -print("Writing random data to all chunks...") -zarr_array[:] = np.random.random((100, 100)) # This forces all chunks to be materialized and written - -print(f"Chunks created in test.zarr: {os.listdir('test.zarr')}") -if 'c' in os.listdir('test.zarr'): - chunk_files = os.listdir('test.zarr/c') - print(f"Number of chunk files: {len(chunk_files)}") - print(f"Sample chunk files: {chunk_files[:5]}") # Show first 5 - -# Read benchmark with cache -start = time.time() -for _ in range(100): - _ = zarr_array[:] -elapsed_cache = time.time() - start - -# Read benchmark without cache -zarr_array_nocache = zarr.open('test.zarr', mode='r') -start = time.time() -for _ in range(100): - _ = zarr_array_nocache[:] -elapsed_nocache = time.time() - start - -print(f"Read time with CacheStore: {elapsed_cache:.4f} s") -print(f"Read time without cache: {elapsed_nocache:.4f} s") -print(f"Speedup: {elapsed_nocache/elapsed_cache:.2f}x\n") - -############################################### - -# Example 2: Remote store (with error handling) -print("=== Remote Store Benchmark ===") -import gcsfs -import zarr - -# Use Google Cloud Storage filesystem -gcs = gcsfs.GCSFileSystem(token='anon', asynchronous=True) # anonymous access with async support -gcs_path = 'ucl-hip-ct-35a68e99feaae8932b1d44da0358940b/A186/lung-right/4.26um_VOI-3_bm18.ome.zarr/6' - -# Wrap with zarr's FsspecStore to make it v3 compatible -store = FsspecStore(gcs, path=gcs_path) - -# Use MemoryStore as cache backend with CacheStore -remote_cache_backend = MemoryStore() -cache = CacheStore(store, cache_store=remote_cache_backend) - -try: - # Open the zarr array directly since this appears to be a zarr array path - z = zarr.open(cache) - print(f"Array info - Shape: {z.shape}, dtype: {z.dtype}") - - # Benchmark reading with cache - print("Benchmarking reads with CacheStore...") - start = time.time() - for _ in range(10): # Fewer iterations for remote access - _ = z[0:10, 0:10, 0:10] # Read a small chunk - elapsed_cache = time.time() - start - - # Benchmark reading without cache (direct store access) - print("Benchmarking reads without cache...") - z_nocache = zarr.open(store) # Direct store without cache - start = time.time() - for _ in range(10): # Same number of iterations - _ = z_nocache[0:10, 0:10, 0:10] # Read the same small chunk - elapsed_nocache = time.time() - start - - print(f"Read time with CacheStore: {elapsed_cache:.4f} s") - print(f"Read time without cache: {elapsed_nocache:.4f} s") - print(f"Speedup: {elapsed_nocache/elapsed_cache:.2f}x") - - # Test cache effectiveness with repeated access - print("\nTesting cache effectiveness...") - print("First access (from remote):") - start = time.time() - _ = z[20:30, 20:30, 20:30] - first_access = time.time() - start - - print("Second access (from cache):") - start = time.time() - _ = z[20:30, 20:30, 20:30] # Same chunk should be cached - second_access = time.time() - start - - print(f"First access time: {first_access:.4f} s") - print(f"Second access time: {second_access:.4f} s") - print(f"Cache speedup: {first_access/second_access:.2f}x") -except Exception as e: - print(f"Error accessing zarr array: {e}") - print("This might be a group - trying to list contents...") - try: - # Try opening as group without specifying mode - root = zarr.open_group(store=cache) - print(f"Available arrays/groups: {list(root.keys())}") - except Exception as e2: - print(f"Error accessing as group: {e2}") - # If still failing, try direct store access - try: - print("Trying direct store listing...") - # List keys directly from the store - keys = list(store.keys()) - print(f"Store keys: {keys[:10]}...") # Show first 10 keys - except Exception as e3: - print(f"Direct store access failed: {e3}") From 8b465762c622b173d97bf3f8d8dfbf67ced10877 Mon Sep 17 00:00:00 2001 From: ruaridhg Date: Mon, 15 Sep 2025 15:33:21 +0100 Subject: [PATCH 37/39] Remove dict-like references in LRUStoreCache and tests --- src/zarr/storage/_cache.py | 25 +----- tests/test_store/test_cache.py | 141 +++++++++++---------------------- 2 files changed, 52 insertions(+), 114 deletions(-) diff --git a/src/zarr/storage/_cache.py b/src/zarr/storage/_cache.py index a5a999d41d..c4af20bd87 100644 --- a/src/zarr/storage/_cache.py +++ b/src/zarr/storage/_cache.py @@ -2,7 +2,7 @@ from collections import OrderedDict from collections.abc import AsyncIterator, Iterable from threading import Lock -from typing import Any, Self, cast +from typing import Any, Self from zarr.abc.store import ( ByteRequest, @@ -273,7 +273,7 @@ async def getsize( pass except NotImplementedError: pass - except (ConnectionError, TimeoutError): + except (ConnectionError, TimeoutError, RuntimeError): pass except Exception: # Re-raise unexpected exceptions rather than silently falling back @@ -403,12 +403,7 @@ async def get( # For byte_range requests, don't use cache for now (could be optimized later) if byte_range is not None: - try: - return await self._store.get(key, prototype, byte_range) - except TypeError: - # Fallback to sync get from mapping - get full value and slice later - # For now, just return None for byte range requests on sync stores - return None + return await self._store.get(key, prototype, byte_range) if cache_key in self._values_cache: # Try cache first @@ -419,19 +414,7 @@ async def get( return prototype.buffer.from_bytes(value) else: # Cache miss - get from store - - try: - result = await self._store.get(key, prototype, byte_range) - except TypeError: - # Fallback for sync stores - use __getitem__ instead - try: - if hasattr(self._store, "__getitem__"): - value = cast(dict[str, Any], self._store)[key] - result = prototype.buffer.from_bytes(value) - else: - result = None - except KeyError: - result = None + result = await self._store.get(key, prototype, byte_range) # Cache the result if we got one if result is not None: diff --git a/tests/test_store/test_cache.py b/tests/test_store/test_cache.py index 2551b4d3e9..0aa076f318 100644 --- a/tests/test_store/test_cache.py +++ b/tests/test_store/test_cache.py @@ -34,45 +34,22 @@ async def clear(self) -> None: # docstring inherited self._store_dict.clear() - def __getitem__(self, key: Any) -> Any: - self.counter["__getitem__", key] += 1 - return self._store_dict[key] # Access internal dict directly - - def __setitem__(self, key: Any, value: Any) -> None: - self.counter["__setitem__", key] += 1 - self._store_dict[key] = value # Set in internal dict directly - - def __contains__(self, key: Any) -> bool: - self.counter["__contains__", key] += 1 - return key in self._store_dict # Check internal dict directly - - def __iter__(self) -> Any: - self.counter["__iter__"] += 1 - return iter(self._store_dict) # Iterate over internal dict - - def keys(self) -> Any: - self.counter["keys"] += 1 - return self._store_dict.keys() # Return keys from internal dict - - def __delitem__(self, key: Any) -> None: - """Add delete support for testing.""" - self.counter["__delitem__", key] += 1 - del self._store_dict[key] # Delete from internal dict directly + # Dict-like methods removed - LRUStoreCache now uses only async Store interface async def set(self, key: str, value: Any) -> None: """Store-like set method for async interface.""" self.counter["set", key] += 1 # Convert Buffer to bytes if needed if hasattr(value, "to_bytes"): - self[key] = value.to_bytes() + self._store_dict[key] = value.to_bytes() else: - self[key] = value + self._store_dict[key] = value - async def get(self, key: str, prototype: Any = None) -> Any: + async def get(self, key: str, prototype: Any = None, byte_range: Any = None) -> Any: """Store-like get method for async interface.""" self.counter["get", key] += 1 try: - data = self[key] + data = self._store_dict[key] # Return as Buffer if prototype provided if prototype is not None and hasattr(prototype, "buffer"): from zarr.core.buffer.cpu import Buffer @@ -86,18 +63,18 @@ async def delete(self, key: str) -> None: """Store-like delete method for async interface.""" self.counter["delete", key] += 1 with contextlib.suppress(KeyError): - del self[key] + del self._store_dict[key] async def exists(self, key: str) -> bool: """Store-like exists method for async interface.""" self.counter["exists", key] += 1 - return key in self + return key in self._store_dict async def getsize(self, key: str) -> int: """Store-like getsize method for async interface.""" self.counter["getsize", key] += 1 try: - return len(self[key]) + return len(self._store_dict[key]) except KeyError: # noqa: TRY203 raise @@ -158,12 +135,12 @@ async def test_cache_values_no_max_size(self) -> None: store = self.CountingClass() foo_key = self.root + "foo" bar_key = self.root + "bar" - store[foo_key] = b"xxx" - store[bar_key] = b"yyy" - assert 0 == store.counter["__getitem__", foo_key] - assert 1 == store.counter["__setitem__", foo_key] - assert 0 == store.counter["__getitem__", bar_key] - assert 1 == store.counter["__setitem__", bar_key] + await store.set(foo_key, b"xxx") + await store.set(bar_key, b"yyy") + assert 0 == store.counter["get", foo_key] + assert 1 == store.counter["set", foo_key] + assert 0 == store.counter["get", bar_key] + assert 1 == store.counter["set", bar_key] # setup cache cache = self.LRUStoreClass(store, max_size=1024 * 1024) @@ -174,8 +151,8 @@ async def test_cache_values_no_max_size(self) -> None: result = await cache.get(foo_key) assert result is not None assert result.to_bytes() == b"xxx" - assert 1 == store.counter["__getitem__", foo_key] - assert 1 == store.counter["__setitem__", foo_key] + assert 1 == store.counter["get", foo_key] + assert 1 == store.counter["set", foo_key] assert 0 == cache.hits assert 1 == cache.misses @@ -183,8 +160,8 @@ async def test_cache_values_no_max_size(self) -> None: result = await cache.get(foo_key) assert result is not None assert result.to_bytes() == b"xxx" - assert 1 == store.counter["__getitem__", foo_key] - assert 1 == store.counter["__setitem__", foo_key] + assert 1 == store.counter["get", foo_key] # No additional get call due to cache + assert 1 == store.counter["set", foo_key] assert 1 == cache.hits assert 1 == cache.misses @@ -192,14 +169,14 @@ async def test_cache_values_no_max_size(self) -> None: from zarr.core.buffer.cpu import Buffer await cache.set(foo_key, Buffer.from_bytes(b"zzz")) - assert 1 == store.counter["__getitem__", foo_key] - assert 2 == store.counter["__setitem__", foo_key] + assert 1 == store.counter["get", foo_key] + assert 2 == store.counter["set", foo_key] # should be a cache hit result = await cache.get(foo_key) assert result is not None assert result.to_bytes() == b"zzz" - assert 1 == store.counter["__getitem__", foo_key] - assert 2 == store.counter["__setitem__", foo_key] + assert 1 == store.counter["get", foo_key] # No additional get call due to cache + assert 2 == store.counter["set", foo_key] assert 2 == cache.hits assert 1 == cache.misses @@ -208,36 +185,36 @@ async def test_cache_values_no_max_size(self) -> None: result = await cache.get(foo_key) assert result is not None assert result.to_bytes() == b"zzz" - assert 2 == store.counter["__getitem__", foo_key] - assert 2 == store.counter["__setitem__", foo_key] + assert 2 == store.counter["get", foo_key] # Cache invalidated, so new get call + assert 2 == store.counter["set", foo_key] cache.invalidate() result = await cache.get(foo_key) assert result is not None assert result.to_bytes() == b"zzz" - assert 3 == store.counter["__getitem__", foo_key] - assert 2 == store.counter["__setitem__", foo_key] + assert 3 == store.counter["get", foo_key] # Cache invalidated again, so another get call + assert 2 == store.counter["set", foo_key] # test delete() await cache.delete(foo_key) result = await cache.get(foo_key) assert result is None - with pytest.raises(KeyError): - # noinspection PyStatementEffect - store[foo_key] + # Verify the key is actually deleted from underlying store + result = await store.get(foo_key) + assert result is None # verify other keys untouched - assert 0 == store.counter["__getitem__", bar_key] - assert 1 == store.counter["__setitem__", bar_key] + assert 0 == store.counter["get", bar_key] + assert 1 == store.counter["set", bar_key] async def test_cache_values_with_max_size(self) -> None: # setup store store = self.CountingClass() foo_key = self.root + "foo" bar_key = self.root + "bar" - store[foo_key] = b"xxx" - store[bar_key] = b"yyy" - assert 0 == store.counter["__getitem__", foo_key] - assert 0 == store.counter["__getitem__", bar_key] + await store.set(foo_key, b"xxx") + await store.set(bar_key, b"yyy") + assert 0 == store.counter["get", foo_key] + assert 0 == store.counter["get", bar_key] # setup cache - can only hold one item cache = self.LRUStoreClass(store, max_size=5) assert 0 == cache.hits @@ -247,7 +224,7 @@ async def test_cache_values_with_max_size(self) -> None: result = await cache.get(foo_key) assert result is not None assert result.to_bytes() == b"xxx" - assert 1 == store.counter["__getitem__", foo_key] + assert 1 == store.counter["get", foo_key] assert 0 == cache.hits assert 1 == cache.misses @@ -255,7 +232,7 @@ async def test_cache_values_with_max_size(self) -> None: result = await cache.get(foo_key) assert result is not None assert result.to_bytes() == b"xxx" - assert 1 == store.counter["__getitem__", foo_key] + assert 1 == store.counter["get", foo_key] # No additional get call due to cache assert 1 == cache.hits assert 1 == cache.misses @@ -263,7 +240,7 @@ async def test_cache_values_with_max_size(self) -> None: result = await cache.get(bar_key) assert result is not None assert result.to_bytes() == b"yyy" - assert 1 == store.counter["__getitem__", bar_key] + assert 1 == store.counter["get", bar_key] assert 1 == cache.hits assert 2 == cache.misses @@ -271,7 +248,7 @@ async def test_cache_values_with_max_size(self) -> None: result = await cache.get(bar_key) assert result is not None assert result.to_bytes() == b"yyy" - assert 1 == store.counter["__getitem__", bar_key] + assert 1 == store.counter["get", bar_key] # No additional get call due to cache assert 2 == cache.hits assert 2 == cache.misses @@ -279,7 +256,7 @@ async def test_cache_values_with_max_size(self) -> None: result = await cache.get(foo_key) assert result is not None assert result.to_bytes() == b"xxx" - assert 2 == store.counter["__getitem__", foo_key] + assert 2 == store.counter["get", foo_key] # Cache miss due to eviction assert 2 == cache.hits assert 3 == cache.misses @@ -287,7 +264,7 @@ async def test_cache_values_with_max_size(self) -> None: result = await cache.get(bar_key) assert result is not None assert result.to_bytes() == b"yyy" - assert 2 == store.counter["__getitem__", bar_key] + assert 2 == store.counter["get", bar_key] # Cache miss due to eviction assert 2 == cache.hits assert 4 == cache.misses @@ -299,7 +276,7 @@ async def test_cache_value_too_large_warning(self) -> None: large_value = b"x" * 1000 # 1000 bytes small_cache_size = 500 # 500 bytes max cache - store[foo_key] = large_value + await store.set(foo_key, large_value) cache = self.LRUStoreClass(store, max_size=small_cache_size) # Test that warning is emitted when trying to cache a value that's too large @@ -337,57 +314,35 @@ async def test_cache_value_too_large_warning(self) -> None: assert "500 bytes" in warning_message # Check cache size assert "Consider increasing max_size" in warning_message - async def test_getsize_proactive_caching(self) -> None: - """Test that getsize() proactively caches small values but not large ones.""" - store = self.CountingClass() - cache = self.LRUStoreClass(store, max_size=1000) # 1KB cache - - # Small value: 50 bytes < 100 bytes (10% of cache) - store["small"] = b"x" * 50 - # Large value: 200 bytes > 100 bytes (10% of cache) - store["large"] = b"y" * 200 - - # Small value should be proactively cached after getsize() - await cache.getsize("small") # miss += 1 - await cache.get("small") - assert cache.hits == 1 # Cache hit from proactive caching - assert cache.misses == 1 # Only the getsize miss - - # Large value should NOT be proactively cached - await cache.getsize("large") # miss += 1 - await cache.get("large") - assert cache.hits == 1 # No additional hits - assert cache.misses == 3 # getsize miss + get miss - async def test_getsize_uses_cache(self) -> None: """Test that getsize() uses cached values when available.""" store = self.CountingClass() cache = self.LRUStoreClass(store, max_size=1000) - store["key"] = b"value" + await store.set("key", b"value") # Populate cache await cache.get("key") - assert 1 == store.counter["__getitem__", "key"] + assert 1 == store.counter["get", "key"] # getsize() should use cached value size = await cache.getsize("key") assert size == 5 - assert 1 == store.counter["__getitem__", "key"] # No additional store access + assert 1 == store.counter["get", "key"] # No additional store access assert cache.hits == 1 async def test_getsize_exception_handling(self) -> None: """Test that getsize() handles get() exceptions gracefully.""" class FailingStore(CounterStore): - async def get(self, key: str, prototype: Any = None) -> Any: + async def get(self, key: str, prototype: Any = None, byte_range: Any = None) -> Any: if key == "fail": raise RuntimeError("Simulated failure") - return await super().get(key, prototype) + return await super().get(key, prototype, byte_range) store = FailingStore() cache = self.LRUStoreClass(store, max_size=1000) - store["fail"] = b"x" * 50 # Small value that would be cached + await store.set("fail", b"x" * 50) # Small value that would be cached # getsize() should work despite get() failing size = await cache.getsize("fail") From 115390f8647c6985f94c285c7311f439610d996f Mon Sep 17 00:00:00 2001 From: ruaridhg Date: Mon, 15 Sep 2025 15:41:51 +0100 Subject: [PATCH 38/39] Remove dimension separator test function --- src/zarr/storage/_cache.py | 2 +- tests/test_store/test_cache.py | 10 ---------- 2 files changed, 1 insertion(+), 11 deletions(-) diff --git a/src/zarr/storage/_cache.py b/src/zarr/storage/_cache.py index c4af20bd87..55ccfa8a68 100644 --- a/src/zarr/storage/_cache.py +++ b/src/zarr/storage/_cache.py @@ -249,7 +249,7 @@ async def getsize( cached_value = self._values_cache[cache_key] # Move to end to mark as recently used self._values_cache.move_to_end(cache_key) - self.hits +=1 + self.hits += 1 return len(cached_value) # Not in cache, delegate to underlying store diff --git a/tests/test_store/test_cache.py b/tests/test_store/test_cache.py index 0aa076f318..e28b5acfe8 100644 --- a/tests/test_store/test_cache.py +++ b/tests/test_store/test_cache.py @@ -34,8 +34,6 @@ async def clear(self) -> None: # docstring inherited self._store_dict.clear() - # Dict-like methods removed - LRUStoreCache now uses only async Store interface - async def set(self, key: str, value: Any) -> None: """Store-like set method for async interface.""" self.counter["set", key] += 1 @@ -79,11 +77,6 @@ async def getsize(self, key: str) -> int: raise -def skip_if_nested_chunks(**kwargs: Any) -> None: - if kwargs.get("dimension_separator") == "/": - pytest.skip("nested chunks are unsupported") - - class TestLRUStoreCache(StoreTests[LRUStoreCache, Buffer]): # type: ignore[misc] store_cls = LRUStoreCache buffer_cls = cpu.Buffer @@ -115,13 +108,10 @@ def open_kwargs(self) -> dict[str, Any]: return {"store": MemoryStore(), "max_size": 2**27} def create_store(self, **kwargs: Any) -> LRUStoreCache: - # wrapper therefore no dimension_separator argument - skip_if_nested_chunks(**kwargs) return self.LRUStoreClass(MemoryStore(), max_size=2**27) def create_store_from_mapping(self, mapping: dict[str, Any], **kwargs: Any) -> LRUStoreCache: # Handle creation from existing mapping - skip_if_nested_chunks(**kwargs) # Create a MemoryStore from the mapping underlying_store = MemoryStore() if mapping: From 51aeab7379cdf85babcc35dcb98a19ece870ae63 Mon Sep 17 00:00:00 2001 From: ruaridhg Date: Wed, 17 Sep 2025 12:52:44 +0100 Subject: [PATCH 39/39] Remove unused files --- caching_store.py | 150 --- uv.lock | 3307 ---------------------------------------------- 2 files changed, 3457 deletions(-) delete mode 100644 caching_store.py delete mode 100644 uv.lock diff --git a/caching_store.py b/caching_store.py deleted file mode 100644 index c59f6960a7..0000000000 --- a/caching_store.py +++ /dev/null @@ -1,150 +0,0 @@ -# /// script -# requires-python = ">=3.11" -# dependencies = [ -# "zarr @ git+https://github.com/zarr-developers/zarr-python.git@main", -# ] -# /// -# - -import time -import zarr -from typing_extensions import Literal -from zarr.abc.store import ByteRequest, Store -from zarr.core.buffer.core import Buffer, BufferPrototype -from zarr.storage._memory import MemoryStore -from zarr.storage._wrapper import WrapperStore -import logging -logging.basicConfig(level=logging.INFO) -logger = logging.getLogger(__name__) - -class CacheStore(WrapperStore[Store]): - _cache: Store - max_age_seconds: int | Literal["infinity"] - key_insert_times: dict[str, float] - cache_set_data: bool - - def __init__(self, store: Store, *, cache_store: Store, max_age_seconds: int | Literal["infinity"] = "infinity", key_insert_times: dict[str, float] | None = None, cache_set_data: bool = True) -> None: - super().__init__(store) - self._cache = cache_store - self.max_age_seconds = max_age_seconds - if key_insert_times is None: - key_insert_times = {} - else: - self.key_insert_times = key_insert_times - self.cache_set_data = cache_set_data - - def _is_key_fresh(self, key: str) -> bool: - if self.max_age_seconds == "infinity": - return True - else: - now = time.monotonic() - elapsed = now - self.key_insert_times.get(key, 0) - return elapsed < self.max_age_seconds - - async def _get_try_cache(self, key: str, prototype: BufferPrototype, byte_range: ByteRequest | None = None) -> Buffer | None: - maybe_cached_result = await self._cache.get(key, prototype, byte_range) - if maybe_cached_result is not None: - logger.info('_get_try_cache: key %s found in cache', key) - return maybe_cached_result - else: - logger.info('_get_try_cache: key %s not found in cache, fetching from store', key) - maybe_fresh_result = await super().get(key, prototype, byte_range) - if maybe_fresh_result is None: - await self._cache.delete(key) - else: - await self._cache.set(key, maybe_fresh_result) - return maybe_fresh_result - - async def _get_no_cache(self, key: str, prototype: BufferPrototype, byte_range: ByteRequest | None = None) -> Buffer | None: - maybe_fresh_result = await super().get(key, prototype, byte_range) - if maybe_fresh_result is None: - logger.info('_get_no_cache: key %s not found in store, deleting from cache', key) - await self._cache.delete(key) - self.key_insert_times.pop(key, None) - else: - logger.info('_get_no_cache: key %s found in store, setting in cache', key) - await self._cache.set(key, maybe_fresh_result) - self.key_insert_times[key] = time.monotonic() - return maybe_fresh_result - - async def get(self, key: str, prototype: BufferPrototype, byte_range: ByteRequest | None = None) -> Buffer | None: - if self._is_key_fresh(key): - logger.info('get: key %s is not fresh, fetching from store', key) - return await self._get_no_cache(key, prototype, byte_range) - else: - logger.info('get: key %s is fresh, trying cache', key) - return await self._get_try_cache(key, prototype, byte_range) - - async def set(self, key: str, value: Buffer) -> None: - logger.info('set: setting key %s in store', key) - await super().set(key, value) - if self.cache_set_data: - logger.info('set: setting key %s in cache', key) - await self._cache.set(key, value) - self.key_insert_times[key] = time.monotonic() - else: - logger.info('set: deleting key %s from cache', key) - await self._cache.delete(key) - self.key_insert_times.pop(key, None) - - - async def delete(self, key: str) -> None: - logger.info('delete: deleting key %s from store', key) - await super().delete(key) - logger.info('delete: deleting key %s from cache', key) - await self._cache.delete(key) - self.key_insert_times.pop(key, None) - -store_a = MemoryStore({}) -store_b = MemoryStore({}) - -cached_store = CacheStore(store=store_a, cache_store=store_b, max_age_seconds=10, key_insert_times={}) - -z = zarr.create_array(cached_store, shape=(8,), dtype='float32', chunks=(4,)) - -print('filling array with values') -z[:] = 10 - -print('fetching value from first chunk') -z[0] - -print('fetching value from first chunk again') -z[0] - -print('erasing arrays values') -z[:] = z.fill_value - -print('fetching value from first chunk') -z[0] - -print('fetching value from first chunk again') -z[0] - -""" -INFO:__main__:get: key zarr.json is stale, fetching from store -INFO:__main__:_get_no_cache: key zarr.json not found in store, deleting from cache -INFO:__main__:set: setting key zarr.json in store -INFO:__main__:set: setting key zarr.json in cache -filling array with values -INFO:__main__:set: setting key c/0 in store -INFO:__main__:set: setting key c/0 in cache -INFO:__main__:set: setting key c/1 in store -INFO:__main__:set: setting key c/1 in cache -fetching value from first chunk -INFO:__main__:get: key c/0 is fresh, trying cache -INFO:__main__:_get_try_cache: key c/0 found in cache -fetching value from first chunk again -INFO:__main__:get: key c/0 is fresh, trying cache -INFO:__main__:_get_try_cache: key c/0 found in cache -erasing arrays values -INFO:__main__:delete: deleting key c/0 from store -INFO:__main__:delete: deleting key c/0 from cache -INFO:__main__:delete: deleting key c/1 from store -INFO:__main__:delete: deleting key c/1 from cache -fetching value from first chunk -INFO:__main__:get: key c/0 is stale, fetching from store -INFO:__main__:_get_no_cache: key c/0 not found in store, deleting from cache -fetching value from first chunk again -INFO:__main__:get: key c/0 is stale, fetching from store -INFO:__main__:_get_no_cache: key c/0 not found in store, deleting from cache -""" \ No newline at end of file diff --git a/uv.lock b/uv.lock deleted file mode 100644 index 3616161807..0000000000 --- a/uv.lock +++ /dev/null @@ -1,3307 +0,0 @@ -version = 1 -revision = 2 -requires-python = ">=3.11" -resolution-markers = [ - "python_full_version >= '3.12'", - "python_full_version < '3.12'", -] - -[[package]] -name = "accessible-pygments" -version = "0.0.5" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "pygments" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/bc/c1/bbac6a50d02774f91572938964c582fff4270eee73ab822a4aeea4d8b11b/accessible_pygments-0.0.5.tar.gz", hash = "sha256:40918d3e6a2b619ad424cb91e556bd3bd8865443d9f22f1dcdf79e33c8046872", size = 1377899, upload-time = "2024-05-10T11:23:10.216Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/8d/3f/95338030883d8c8b91223b4e21744b04d11b161a3ef117295d8241f50ab4/accessible_pygments-0.0.5-py3-none-any.whl", hash = "sha256:88ae3211e68a1d0b011504b2ffc1691feafce124b845bd072ab6f9f66f34d4b7", size = 1395903, upload-time = "2024-05-10T11:23:08.421Z" }, -] - -[[package]] -name = "aiobotocore" -version = "2.23.2" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "aiohttp" }, - { name = "aioitertools" }, - { name = "botocore" }, - { name = "jmespath" }, - { name = "multidict" }, - { name = "python-dateutil" }, - { name = "wrapt" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/1d/ae/523d48504902a6f17f6ec94311899f217f1bf64b9ca394c89c690c37434c/aiobotocore-2.23.2.tar.gz", hash = "sha256:9c2cbd6e813bb6c60b7f20fc11897976a583c57b0093a87bebfe80a9b08746b2", size = 115881, upload-time = "2025-07-24T17:48:15.957Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/c9/2e/55780065672a69ab3d16062368d358ace7eac196b246e6b15b07301f8fbf/aiobotocore-2.23.2-py3-none-any.whl", hash = "sha256:5ca24feb49be73bd6cd92e82e95aefb0647c07bb85ca57000a0361b9554503d8", size = 84301, upload-time = "2025-07-24T17:48:14.494Z" }, -] - -[[package]] -name = "aiohappyeyeballs" -version = "2.6.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/26/30/f84a107a9c4331c14b2b586036f40965c128aa4fee4dda5d3d51cb14ad54/aiohappyeyeballs-2.6.1.tar.gz", hash = "sha256:c3f9d0113123803ccadfdf3f0faa505bc78e6a72d1cc4806cbd719826e943558", size = 22760, upload-time = "2025-03-12T01:42:48.764Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/0f/15/5bf3b99495fb160b63f95972b81750f18f7f4e02ad051373b669d17d44f2/aiohappyeyeballs-2.6.1-py3-none-any.whl", hash = "sha256:f349ba8f4b75cb25c99c5c2d84e997e485204d2902a9597802b0371f09331fb8", size = 15265, upload-time = "2025-03-12T01:42:47.083Z" }, -] - -[[package]] -name = "aiohttp" -version = "3.12.15" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "aiohappyeyeballs" }, - { name = "aiosignal" }, - { name = "attrs" }, - { name = "frozenlist" }, - { name = "multidict" }, - { name = "propcache" }, - { name = "yarl" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/9b/e7/d92a237d8802ca88483906c388f7c201bbe96cd80a165ffd0ac2f6a8d59f/aiohttp-3.12.15.tar.gz", hash = "sha256:4fc61385e9c98d72fcdf47e6dd81833f47b2f77c114c29cd64a361be57a763a2", size = 7823716, upload-time = "2025-07-29T05:52:32.215Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/20/19/9e86722ec8e835959bd97ce8c1efa78cf361fa4531fca372551abcc9cdd6/aiohttp-3.12.15-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:d3ce17ce0220383a0f9ea07175eeaa6aa13ae5a41f30bc61d84df17f0e9b1117", size = 711246, upload-time = "2025-07-29T05:50:15.937Z" }, - { url = "https://files.pythonhosted.org/packages/71/f9/0a31fcb1a7d4629ac9d8f01f1cb9242e2f9943f47f5d03215af91c3c1a26/aiohttp-3.12.15-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:010cc9bbd06db80fe234d9003f67e97a10fe003bfbedb40da7d71c1008eda0fe", size = 483515, upload-time = "2025-07-29T05:50:17.442Z" }, - { url = "https://files.pythonhosted.org/packages/62/6c/94846f576f1d11df0c2e41d3001000527c0fdf63fce7e69b3927a731325d/aiohttp-3.12.15-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3f9d7c55b41ed687b9d7165b17672340187f87a773c98236c987f08c858145a9", size = 471776, upload-time = "2025-07-29T05:50:19.568Z" }, - { url = "https://files.pythonhosted.org/packages/f8/6c/f766d0aaafcee0447fad0328da780d344489c042e25cd58fde566bf40aed/aiohttp-3.12.15-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bc4fbc61bb3548d3b482f9ac7ddd0f18c67e4225aaa4e8552b9f1ac7e6bda9e5", size = 1741977, upload-time = "2025-07-29T05:50:21.665Z" }, - { url = "https://files.pythonhosted.org/packages/17/e5/fb779a05ba6ff44d7bc1e9d24c644e876bfff5abe5454f7b854cace1b9cc/aiohttp-3.12.15-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:7fbc8a7c410bb3ad5d595bb7118147dfbb6449d862cc1125cf8867cb337e8728", size = 1690645, upload-time = "2025-07-29T05:50:23.333Z" }, - { url = "https://files.pythonhosted.org/packages/37/4e/a22e799c2035f5d6a4ad2cf8e7c1d1bd0923192871dd6e367dafb158b14c/aiohttp-3.12.15-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:74dad41b3458dbb0511e760fb355bb0b6689e0630de8a22b1b62a98777136e16", size = 1789437, upload-time = "2025-07-29T05:50:25.007Z" }, - { url = "https://files.pythonhosted.org/packages/28/e5/55a33b991f6433569babb56018b2fb8fb9146424f8b3a0c8ecca80556762/aiohttp-3.12.15-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3b6f0af863cf17e6222b1735a756d664159e58855da99cfe965134a3ff63b0b0", size = 1828482, upload-time = "2025-07-29T05:50:26.693Z" }, - { url = "https://files.pythonhosted.org/packages/c6/82/1ddf0ea4f2f3afe79dffed5e8a246737cff6cbe781887a6a170299e33204/aiohttp-3.12.15-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b5b7fe4972d48a4da367043b8e023fb70a04d1490aa7d68800e465d1b97e493b", size = 1730944, upload-time = "2025-07-29T05:50:28.382Z" }, - { url = "https://files.pythonhosted.org/packages/1b/96/784c785674117b4cb3877522a177ba1b5e4db9ce0fd519430b5de76eec90/aiohttp-3.12.15-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6443cca89553b7a5485331bc9bedb2342b08d073fa10b8c7d1c60579c4a7b9bd", size = 1668020, upload-time = "2025-07-29T05:50:30.032Z" }, - { url = "https://files.pythonhosted.org/packages/12/8a/8b75f203ea7e5c21c0920d84dd24a5c0e971fe1e9b9ebbf29ae7e8e39790/aiohttp-3.12.15-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6c5f40ec615e5264f44b4282ee27628cea221fcad52f27405b80abb346d9f3f8", size = 1716292, upload-time = "2025-07-29T05:50:31.983Z" }, - { url = "https://files.pythonhosted.org/packages/47/0b/a1451543475bb6b86a5cfc27861e52b14085ae232896a2654ff1231c0992/aiohttp-3.12.15-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:2abbb216a1d3a2fe86dbd2edce20cdc5e9ad0be6378455b05ec7f77361b3ab50", size = 1711451, upload-time = "2025-07-29T05:50:33.989Z" }, - { url = "https://files.pythonhosted.org/packages/55/fd/793a23a197cc2f0d29188805cfc93aa613407f07e5f9da5cd1366afd9d7c/aiohttp-3.12.15-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:db71ce547012a5420a39c1b744d485cfb823564d01d5d20805977f5ea1345676", size = 1691634, upload-time = "2025-07-29T05:50:35.846Z" }, - { url = "https://files.pythonhosted.org/packages/ca/bf/23a335a6670b5f5dfc6d268328e55a22651b440fca341a64fccf1eada0c6/aiohttp-3.12.15-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:ced339d7c9b5030abad5854aa5413a77565e5b6e6248ff927d3e174baf3badf7", size = 1785238, upload-time = "2025-07-29T05:50:37.597Z" }, - { url = "https://files.pythonhosted.org/packages/57/4f/ed60a591839a9d85d40694aba5cef86dde9ee51ce6cca0bb30d6eb1581e7/aiohttp-3.12.15-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:7c7dd29c7b5bda137464dc9bfc738d7ceea46ff70309859ffde8c022e9b08ba7", size = 1805701, upload-time = "2025-07-29T05:50:39.591Z" }, - { url = "https://files.pythonhosted.org/packages/85/e0/444747a9455c5de188c0f4a0173ee701e2e325d4b2550e9af84abb20cdba/aiohttp-3.12.15-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:421da6fd326460517873274875c6c5a18ff225b40da2616083c5a34a7570b685", size = 1718758, upload-time = "2025-07-29T05:50:41.292Z" }, - { url = "https://files.pythonhosted.org/packages/36/ab/1006278d1ffd13a698e5dd4bfa01e5878f6bddefc296c8b62649753ff249/aiohttp-3.12.15-cp311-cp311-win32.whl", hash = "sha256:4420cf9d179ec8dfe4be10e7d0fe47d6d606485512ea2265b0d8c5113372771b", size = 428868, upload-time = "2025-07-29T05:50:43.063Z" }, - { url = "https://files.pythonhosted.org/packages/10/97/ad2b18700708452400278039272032170246a1bf8ec5d832772372c71f1a/aiohttp-3.12.15-cp311-cp311-win_amd64.whl", hash = "sha256:edd533a07da85baa4b423ee8839e3e91681c7bfa19b04260a469ee94b778bf6d", size = 453273, upload-time = "2025-07-29T05:50:44.613Z" }, - { url = "https://files.pythonhosted.org/packages/63/97/77cb2450d9b35f517d6cf506256bf4f5bda3f93a66b4ad64ba7fc917899c/aiohttp-3.12.15-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:802d3868f5776e28f7bf69d349c26fc0efadb81676d0afa88ed00d98a26340b7", size = 702333, upload-time = "2025-07-29T05:50:46.507Z" }, - { url = "https://files.pythonhosted.org/packages/83/6d/0544e6b08b748682c30b9f65640d006e51f90763b41d7c546693bc22900d/aiohttp-3.12.15-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:f2800614cd560287be05e33a679638e586a2d7401f4ddf99e304d98878c29444", size = 476948, upload-time = "2025-07-29T05:50:48.067Z" }, - { url = "https://files.pythonhosted.org/packages/3a/1d/c8c40e611e5094330284b1aea8a4b02ca0858f8458614fa35754cab42b9c/aiohttp-3.12.15-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8466151554b593909d30a0a125d638b4e5f3836e5aecde85b66b80ded1cb5b0d", size = 469787, upload-time = "2025-07-29T05:50:49.669Z" }, - { url = "https://files.pythonhosted.org/packages/38/7d/b76438e70319796bfff717f325d97ce2e9310f752a267bfdf5192ac6082b/aiohttp-3.12.15-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2e5a495cb1be69dae4b08f35a6c4579c539e9b5706f606632102c0f855bcba7c", size = 1716590, upload-time = "2025-07-29T05:50:51.368Z" }, - { url = "https://files.pythonhosted.org/packages/79/b1/60370d70cdf8b269ee1444b390cbd72ce514f0d1cd1a715821c784d272c9/aiohttp-3.12.15-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:6404dfc8cdde35c69aaa489bb3542fb86ef215fc70277c892be8af540e5e21c0", size = 1699241, upload-time = "2025-07-29T05:50:53.628Z" }, - { url = "https://files.pythonhosted.org/packages/a3/2b/4968a7b8792437ebc12186db31523f541943e99bda8f30335c482bea6879/aiohttp-3.12.15-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3ead1c00f8521a5c9070fcb88f02967b1d8a0544e6d85c253f6968b785e1a2ab", size = 1754335, upload-time = "2025-07-29T05:50:55.394Z" }, - { url = "https://files.pythonhosted.org/packages/fb/c1/49524ed553f9a0bec1a11fac09e790f49ff669bcd14164f9fab608831c4d/aiohttp-3.12.15-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6990ef617f14450bc6b34941dba4f12d5613cbf4e33805932f853fbd1cf18bfb", size = 1800491, upload-time = "2025-07-29T05:50:57.202Z" }, - { url = "https://files.pythonhosted.org/packages/de/5e/3bf5acea47a96a28c121b167f5ef659cf71208b19e52a88cdfa5c37f1fcc/aiohttp-3.12.15-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd736ed420f4db2b8148b52b46b88ed038d0354255f9a73196b7bbce3ea97545", size = 1719929, upload-time = "2025-07-29T05:50:59.192Z" }, - { url = "https://files.pythonhosted.org/packages/39/94/8ae30b806835bcd1cba799ba35347dee6961a11bd507db634516210e91d8/aiohttp-3.12.15-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3c5092ce14361a73086b90c6efb3948ffa5be2f5b6fbcf52e8d8c8b8848bb97c", size = 1635733, upload-time = "2025-07-29T05:51:01.394Z" }, - { url = "https://files.pythonhosted.org/packages/7a/46/06cdef71dd03acd9da7f51ab3a9107318aee12ad38d273f654e4f981583a/aiohttp-3.12.15-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:aaa2234bb60c4dbf82893e934d8ee8dea30446f0647e024074237a56a08c01bd", size = 1696790, upload-time = "2025-07-29T05:51:03.657Z" }, - { url = "https://files.pythonhosted.org/packages/02/90/6b4cfaaf92ed98d0ec4d173e78b99b4b1a7551250be8937d9d67ecb356b4/aiohttp-3.12.15-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:6d86a2fbdd14192e2f234a92d3b494dd4457e683ba07e5905a0b3ee25389ac9f", size = 1718245, upload-time = "2025-07-29T05:51:05.911Z" }, - { url = "https://files.pythonhosted.org/packages/2e/e6/2593751670fa06f080a846f37f112cbe6f873ba510d070136a6ed46117c6/aiohttp-3.12.15-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:a041e7e2612041a6ddf1c6a33b883be6a421247c7afd47e885969ee4cc58bd8d", size = 1658899, upload-time = "2025-07-29T05:51:07.753Z" }, - { url = "https://files.pythonhosted.org/packages/8f/28/c15bacbdb8b8eb5bf39b10680d129ea7410b859e379b03190f02fa104ffd/aiohttp-3.12.15-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:5015082477abeafad7203757ae44299a610e89ee82a1503e3d4184e6bafdd519", size = 1738459, upload-time = "2025-07-29T05:51:09.56Z" }, - { url = "https://files.pythonhosted.org/packages/00/de/c269cbc4faa01fb10f143b1670633a8ddd5b2e1ffd0548f7aa49cb5c70e2/aiohttp-3.12.15-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:56822ff5ddfd1b745534e658faba944012346184fbfe732e0d6134b744516eea", size = 1766434, upload-time = "2025-07-29T05:51:11.423Z" }, - { url = "https://files.pythonhosted.org/packages/52/b0/4ff3abd81aa7d929b27d2e1403722a65fc87b763e3a97b3a2a494bfc63bc/aiohttp-3.12.15-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b2acbbfff69019d9014508c4ba0401822e8bae5a5fdc3b6814285b71231b60f3", size = 1726045, upload-time = "2025-07-29T05:51:13.689Z" }, - { url = "https://files.pythonhosted.org/packages/71/16/949225a6a2dd6efcbd855fbd90cf476052e648fb011aa538e3b15b89a57a/aiohttp-3.12.15-cp312-cp312-win32.whl", hash = "sha256:d849b0901b50f2185874b9a232f38e26b9b3d4810095a7572eacea939132d4e1", size = 423591, upload-time = "2025-07-29T05:51:15.452Z" }, - { url = "https://files.pythonhosted.org/packages/2b/d8/fa65d2a349fe938b76d309db1a56a75c4fb8cc7b17a398b698488a939903/aiohttp-3.12.15-cp312-cp312-win_amd64.whl", hash = "sha256:b390ef5f62bb508a9d67cb3bba9b8356e23b3996da7062f1a57ce1a79d2b3d34", size = 450266, upload-time = "2025-07-29T05:51:17.239Z" }, - { url = "https://files.pythonhosted.org/packages/f2/33/918091abcf102e39d15aba2476ad9e7bd35ddb190dcdd43a854000d3da0d/aiohttp-3.12.15-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:9f922ffd05034d439dde1c77a20461cf4a1b0831e6caa26151fe7aa8aaebc315", size = 696741, upload-time = "2025-07-29T05:51:19.021Z" }, - { url = "https://files.pythonhosted.org/packages/b5/2a/7495a81e39a998e400f3ecdd44a62107254803d1681d9189be5c2e4530cd/aiohttp-3.12.15-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:2ee8a8ac39ce45f3e55663891d4b1d15598c157b4d494a4613e704c8b43112cd", size = 474407, upload-time = "2025-07-29T05:51:21.165Z" }, - { url = "https://files.pythonhosted.org/packages/49/fc/a9576ab4be2dcbd0f73ee8675d16c707cfc12d5ee80ccf4015ba543480c9/aiohttp-3.12.15-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3eae49032c29d356b94eee45a3f39fdf4b0814b397638c2f718e96cfadf4c4e4", size = 466703, upload-time = "2025-07-29T05:51:22.948Z" }, - { url = "https://files.pythonhosted.org/packages/09/2f/d4bcc8448cf536b2b54eed48f19682031ad182faa3a3fee54ebe5b156387/aiohttp-3.12.15-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b97752ff12cc12f46a9b20327104448042fce5c33a624f88c18f66f9368091c7", size = 1705532, upload-time = "2025-07-29T05:51:25.211Z" }, - { url = "https://files.pythonhosted.org/packages/f1/f3/59406396083f8b489261e3c011aa8aee9df360a96ac8fa5c2e7e1b8f0466/aiohttp-3.12.15-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:894261472691d6fe76ebb7fcf2e5870a2ac284c7406ddc95823c8598a1390f0d", size = 1686794, upload-time = "2025-07-29T05:51:27.145Z" }, - { url = "https://files.pythonhosted.org/packages/dc/71/164d194993a8d114ee5656c3b7ae9c12ceee7040d076bf7b32fb98a8c5c6/aiohttp-3.12.15-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5fa5d9eb82ce98959fc1031c28198b431b4d9396894f385cb63f1e2f3f20ca6b", size = 1738865, upload-time = "2025-07-29T05:51:29.366Z" }, - { url = "https://files.pythonhosted.org/packages/1c/00/d198461b699188a93ead39cb458554d9f0f69879b95078dce416d3209b54/aiohttp-3.12.15-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f0fa751efb11a541f57db59c1dd821bec09031e01452b2b6217319b3a1f34f3d", size = 1788238, upload-time = "2025-07-29T05:51:31.285Z" }, - { url = "https://files.pythonhosted.org/packages/85/b8/9e7175e1fa0ac8e56baa83bf3c214823ce250d0028955dfb23f43d5e61fd/aiohttp-3.12.15-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5346b93e62ab51ee2a9d68e8f73c7cf96ffb73568a23e683f931e52450e4148d", size = 1710566, upload-time = "2025-07-29T05:51:33.219Z" }, - { url = "https://files.pythonhosted.org/packages/59/e4/16a8eac9df39b48ae102ec030fa9f726d3570732e46ba0c592aeeb507b93/aiohttp-3.12.15-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:049ec0360f939cd164ecbfd2873eaa432613d5e77d6b04535e3d1fbae5a9e645", size = 1624270, upload-time = "2025-07-29T05:51:35.195Z" }, - { url = "https://files.pythonhosted.org/packages/1f/f8/cd84dee7b6ace0740908fd0af170f9fab50c2a41ccbc3806aabcb1050141/aiohttp-3.12.15-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:b52dcf013b57464b6d1e51b627adfd69a8053e84b7103a7cd49c030f9ca44461", size = 1677294, upload-time = "2025-07-29T05:51:37.215Z" }, - { url = "https://files.pythonhosted.org/packages/ce/42/d0f1f85e50d401eccd12bf85c46ba84f947a84839c8a1c2c5f6e8ab1eb50/aiohttp-3.12.15-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:9b2af240143dd2765e0fb661fd0361a1b469cab235039ea57663cda087250ea9", size = 1708958, upload-time = "2025-07-29T05:51:39.328Z" }, - { url = "https://files.pythonhosted.org/packages/d5/6b/f6fa6c5790fb602538483aa5a1b86fcbad66244997e5230d88f9412ef24c/aiohttp-3.12.15-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ac77f709a2cde2cc71257ab2d8c74dd157c67a0558a0d2799d5d571b4c63d44d", size = 1651553, upload-time = "2025-07-29T05:51:41.356Z" }, - { url = "https://files.pythonhosted.org/packages/04/36/a6d36ad545fa12e61d11d1932eef273928b0495e6a576eb2af04297fdd3c/aiohttp-3.12.15-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:47f6b962246f0a774fbd3b6b7be25d59b06fdb2f164cf2513097998fc6a29693", size = 1727688, upload-time = "2025-07-29T05:51:43.452Z" }, - { url = "https://files.pythonhosted.org/packages/aa/c8/f195e5e06608a97a4e52c5d41c7927301bf757a8e8bb5bbf8cef6c314961/aiohttp-3.12.15-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:760fb7db442f284996e39cf9915a94492e1896baac44f06ae551974907922b64", size = 1761157, upload-time = "2025-07-29T05:51:45.643Z" }, - { url = "https://files.pythonhosted.org/packages/05/6a/ea199e61b67f25ba688d3ce93f63b49b0a4e3b3d380f03971b4646412fc6/aiohttp-3.12.15-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ad702e57dc385cae679c39d318def49aef754455f237499d5b99bea4ef582e51", size = 1710050, upload-time = "2025-07-29T05:51:48.203Z" }, - { url = "https://files.pythonhosted.org/packages/b4/2e/ffeb7f6256b33635c29dbed29a22a723ff2dd7401fff42ea60cf2060abfb/aiohttp-3.12.15-cp313-cp313-win32.whl", hash = "sha256:f813c3e9032331024de2eb2e32a88d86afb69291fbc37a3a3ae81cc9917fb3d0", size = 422647, upload-time = "2025-07-29T05:51:50.718Z" }, - { url = "https://files.pythonhosted.org/packages/1b/8e/78ee35774201f38d5e1ba079c9958f7629b1fd079459aea9467441dbfbf5/aiohttp-3.12.15-cp313-cp313-win_amd64.whl", hash = "sha256:1a649001580bdb37c6fdb1bebbd7e3bc688e8ec2b5c6f52edbb664662b17dc84", size = 449067, upload-time = "2025-07-29T05:51:52.549Z" }, -] - -[[package]] -name = "aioitertools" -version = "0.12.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/06/de/38491a84ab323b47c7f86e94d2830e748780525f7a10c8600b67ead7e9ea/aioitertools-0.12.0.tar.gz", hash = "sha256:c2a9055b4fbb7705f561b9d86053e8af5d10cc845d22c32008c43490b2d8dd6b", size = 19369, upload-time = "2024-09-02T03:33:40.349Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/85/13/58b70a580de00893223d61de8fea167877a3aed97d4a5e1405c9159ef925/aioitertools-0.12.0-py3-none-any.whl", hash = "sha256:fc1f5fac3d737354de8831cbba3eb04f79dd649d8f3afb4c5b114925e662a796", size = 24345, upload-time = "2024-09-02T03:34:59.454Z" }, -] - -[[package]] -name = "aiosignal" -version = "1.4.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "frozenlist" }, - { name = "typing-extensions", marker = "python_full_version < '3.13'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/61/62/06741b579156360248d1ec624842ad0edf697050bbaf7c3e46394e106ad1/aiosignal-1.4.0.tar.gz", hash = "sha256:f47eecd9468083c2029cc99945502cb7708b082c232f9aca65da147157b251c7", size = 25007, upload-time = "2025-07-03T22:54:43.528Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/fb/76/641ae371508676492379f16e2fa48f4e2c11741bd63c48be4b12a6b09cba/aiosignal-1.4.0-py3-none-any.whl", hash = "sha256:053243f8b92b990551949e63930a839ff0cf0b0ebbe0597b0f3fb19e1a0fe82e", size = 7490, upload-time = "2025-07-03T22:54:42.156Z" }, -] - -[[package]] -name = "alabaster" -version = "1.0.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a6/f8/d9c74d0daf3f742840fd818d69cfae176fa332022fd44e3469487d5a9420/alabaster-1.0.0.tar.gz", hash = "sha256:c00dca57bca26fa62a6d7d0a9fcce65f3e026e9bfe33e9c538fd3fbb2144fd9e", size = 24210, upload-time = "2024-07-26T18:15:03.762Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/7e/b3/6b4067be973ae96ba0d615946e314c5ae35f9f993eca561b356540bb0c2b/alabaster-1.0.0-py3-none-any.whl", hash = "sha256:fc6786402dc3fcb2de3cabd5fe455a2db534b371124f1f21de8731783dec828b", size = 13929, upload-time = "2024-07-26T18:15:02.05Z" }, -] - -[[package]] -name = "annotated-types" -version = "0.7.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ee/67/531ea369ba64dcff5ec9c3402f9f51bf748cec26dde048a2f973a4eea7f5/annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89", size = 16081, upload-time = "2024-05-20T21:33:25.928Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53", size = 13643, upload-time = "2024-05-20T21:33:24.1Z" }, -] - -[[package]] -name = "antlr4-python3-runtime" -version = "4.13.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/33/5f/2cdf6f7aca3b20d3f316e9f505292e1f256a32089bd702034c29ebde6242/antlr4_python3_runtime-4.13.2.tar.gz", hash = "sha256:909b647e1d2fc2b70180ac586df3933e38919c85f98ccc656a96cd3f25ef3916", size = 117467, upload-time = "2024-08-03T19:00:12.757Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/89/03/a851e84fcbb85214dc637b6378121ef9a0dd61b4c65264675d8a5c9b1ae7/antlr4_python3_runtime-4.13.2-py3-none-any.whl", hash = "sha256:fe3835eb8d33daece0e799090eda89719dbccee7aa39ef94eed3818cafa5a7e8", size = 144462, upload-time = "2024-08-03T19:00:11.134Z" }, -] - -[[package]] -name = "anyio" -version = "4.10.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "idna" }, - { name = "sniffio" }, - { name = "typing-extensions", marker = "python_full_version < '3.13'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/f1/b4/636b3b65173d3ce9a38ef5f0522789614e590dab6a8d505340a4efe4c567/anyio-4.10.0.tar.gz", hash = "sha256:3f3fae35c96039744587aa5b8371e7e8e603c0702999535961dd336026973ba6", size = 213252, upload-time = "2025-08-04T08:54:26.451Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/6f/12/e5e0282d673bb9746bacfb6e2dba8719989d3660cdb2ea79aee9a9651afb/anyio-4.10.0-py3-none-any.whl", hash = "sha256:60e474ac86736bbfd6f210f7a61218939c318f43f9972497381f1c5e930ed3d1", size = 107213, upload-time = "2025-08-04T08:54:24.882Z" }, -] - -[[package]] -name = "appnope" -version = "0.1.4" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/35/5d/752690df9ef5b76e169e68d6a129fa6d08a7100ca7f754c89495db3c6019/appnope-0.1.4.tar.gz", hash = "sha256:1de3860566df9caf38f01f86f65e0e13e379af54f9e4bee1e66b48f2efffd1ee", size = 4170, upload-time = "2024-02-06T09:43:11.258Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/81/29/5ecc3a15d5a33e31b26c11426c45c501e439cb865d0bff96315d86443b78/appnope-0.1.4-py2.py3-none-any.whl", hash = "sha256:502575ee11cd7a28c0205f379b525beefebab9d161b7c964670864014ed7213c", size = 4321, upload-time = "2024-02-06T09:43:09.663Z" }, -] - -[[package]] -name = "astroid" -version = "3.3.11" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/18/74/dfb75f9ccd592bbedb175d4a32fc643cf569d7c218508bfbd6ea7ef9c091/astroid-3.3.11.tar.gz", hash = "sha256:1e5a5011af2920c7c67a53f65d536d65bfa7116feeaf2354d8b94f29573bb0ce", size = 400439, upload-time = "2025-07-13T18:04:23.177Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/af/0f/3b8fdc946b4d9cc8cc1e8af42c4e409468c84441b933d037e101b3d72d86/astroid-3.3.11-py3-none-any.whl", hash = "sha256:54c760ae8322ece1abd213057c4b5bba7c49818853fc901ef09719a60dbf9dec", size = 275612, upload-time = "2025-07-13T18:04:21.07Z" }, -] - -[[package]] -name = "asttokens" -version = "3.0.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/4a/e7/82da0a03e7ba5141f05cce0d302e6eed121ae055e0456ca228bf693984bc/asttokens-3.0.0.tar.gz", hash = "sha256:0dcd8baa8d62b0c1d118b399b2ddba3c4aff271d0d7a9e0d4c1681c79035bbc7", size = 61978, upload-time = "2024-11-30T04:30:14.439Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/25/8a/c46dcc25341b5bce5472c718902eb3d38600a903b14fa6aeecef3f21a46f/asttokens-3.0.0-py3-none-any.whl", hash = "sha256:e3078351a059199dd5138cb1c706e6430c05eff2ff136af5eb4790f9d28932e2", size = 26918, upload-time = "2024-11-30T04:30:10.946Z" }, -] - -[[package]] -name = "attrs" -version = "25.3.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/5a/b0/1367933a8532ee6ff8d63537de4f1177af4bff9f3e829baf7331f595bb24/attrs-25.3.0.tar.gz", hash = "sha256:75d7cefc7fb576747b2c81b4442d4d4a1ce0900973527c011d1030fd3bf4af1b", size = 812032, upload-time = "2025-03-13T11:10:22.779Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/77/06/bb80f5f86020c4551da315d78b3ab75e8228f89f0162f2c3a819e407941a/attrs-25.3.0-py3-none-any.whl", hash = "sha256:427318ce031701fea540783410126f03899a97ffc6f61596ad581ac2e40e3bc3", size = 63815, upload-time = "2025-03-13T11:10:21.14Z" }, -] - -[[package]] -name = "aws-sam-translator" -version = "1.99.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "boto3" }, - { name = "jsonschema" }, - { name = "pydantic" }, - { name = "typing-extensions" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/ef/78/ac6761ff3f37a1e989ddb62c9a58c4d289ad2ca2bdb3bed1319f4ae49e16/aws_sam_translator-1.99.0.tar.gz", hash = "sha256:be326054a7ee2f535fcd914db85e5d50bdf4054313c14888af69b6de3187cdf8", size = 330448, upload-time = "2025-06-19T19:33:56.944Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/0e/d8/6df2f172f878db9a9f307dd752986fd84075b7ef6f823477191edafb46a8/aws_sam_translator-1.99.0-py3-none-any.whl", hash = "sha256:b1997e09da876342655eb568e66098280ffd137213009f0136b57f4e7694c98c", size = 388649, upload-time = "2025-06-19T19:33:55.241Z" }, -] - -[[package]] -name = "aws-xray-sdk" -version = "2.14.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "botocore" }, - { name = "wrapt" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/e0/6c/8e7fb2a45f20afc5c19d52807b560793fb48b0feca1de7de116b62a7893e/aws_xray_sdk-2.14.0.tar.gz", hash = "sha256:aab843c331af9ab9ba5cefb3a303832a19db186140894a523edafc024cc0493c", size = 93976, upload-time = "2024-06-04T22:11:38.124Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/41/69/b417833a8926fa5491e5346d7c233bf7d8a9b12ba1f4ef41ccea2494000c/aws_xray_sdk-2.14.0-py2.py3-none-any.whl", hash = "sha256:cfbe6feea3d26613a2a869d14c9246a844285c97087ad8f296f901633554ad94", size = 101922, upload-time = "2024-06-04T22:12:25.729Z" }, -] - -[[package]] -name = "babel" -version = "2.17.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/7d/6b/d52e42361e1aa00709585ecc30b3f9684b3ab62530771402248b1b1d6240/babel-2.17.0.tar.gz", hash = "sha256:0c54cffb19f690cdcc52a3b50bcbf71e07a808d1c80d549f2459b9d2cf0afb9d", size = 9951852, upload-time = "2025-02-01T15:17:41.026Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/b7/b8/3fe70c75fe32afc4bb507f75563d39bc5642255d1d94f1f23604725780bf/babel-2.17.0-py3-none-any.whl", hash = "sha256:4d0b53093fdfb4b21c92b5213dba5a1b23885afa8383709427046b21c366e5f2", size = 10182537, upload-time = "2025-02-01T15:17:37.39Z" }, -] - -[[package]] -name = "beautifulsoup4" -version = "4.13.4" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "soupsieve" }, - { name = "typing-extensions" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/d8/e4/0c4c39e18fd76d6a628d4dd8da40543d136ce2d1752bd6eeeab0791f4d6b/beautifulsoup4-4.13.4.tar.gz", hash = "sha256:dbb3c4e1ceae6aefebdaf2423247260cd062430a410e38c66f2baa50a8437195", size = 621067, upload-time = "2025-04-15T17:05:13.836Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/50/cd/30110dc0ffcf3b131156077b90e9f60ed75711223f306da4db08eff8403b/beautifulsoup4-4.13.4-py3-none-any.whl", hash = "sha256:9bbbb14bfde9d79f38b8cd5f8c7c85f4b8f2523190ebed90e950a8dea4cb1c4b", size = 187285, upload-time = "2025-04-15T17:05:12.221Z" }, -] - -[[package]] -name = "blinker" -version = "1.9.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/21/28/9b3f50ce0e048515135495f198351908d99540d69bfdc8c1d15b73dc55ce/blinker-1.9.0.tar.gz", hash = "sha256:b4ce2265a7abece45e7cc896e98dbebe6cead56bcf805a3d23136d145f5445bf", size = 22460, upload-time = "2024-11-08T17:25:47.436Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/10/cb/f2ad4230dc2eb1a74edf38f1a38b9b52277f75bef262d8908e60d957e13c/blinker-1.9.0-py3-none-any.whl", hash = "sha256:ba0efaa9080b619ff2f3459d1d500c57bddea4a6b424b60a91141db6fd2f08bc", size = 8458, upload-time = "2024-11-08T17:25:46.184Z" }, -] - -[[package]] -name = "boto3" -version = "1.39.8" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "botocore" }, - { name = "jmespath" }, - { name = "s3transfer" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/d1/ef/f8dbe6482bdf9eb0230f2639483cdd40ef5aaa89c2fb651f2edeee9c248a/boto3-1.39.8.tar.gz", hash = "sha256:456ea6baef037eb6205d64e012259d14f0c9300c9b30603890746c1a0882fa01", size = 111829, upload-time = "2025-07-17T19:19:14.828Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/3c/f0/f3701472b2e6192e62d80e703186ae9c789b3d607ba22943702c500897d2/boto3-1.39.8-py3-none-any.whl", hash = "sha256:dcea5270ccced0b4b962eb5874cb71b6232ccfc6203e05bf834a314442e4a79c", size = 139886, upload-time = "2025-07-17T19:19:12.634Z" }, -] - -[[package]] -name = "botocore" -version = "1.39.8" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "jmespath" }, - { name = "python-dateutil" }, - { name = "urllib3" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/32/57/16d3d21963975b9be180e96695abfb146695ae7db57f9a2d47e92d33ce9d/botocore-1.39.8.tar.gz", hash = "sha256:3848bd9057ea8dbc059e7764eda63bda575727ad1101dbd03636ab4a6f283fa5", size = 14205898, upload-time = "2025-07-17T19:19:03.832Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/11/ac/51462dd35fc60d11cdce93ba82ccf1635a161ceadc646d89f67d666fff31/botocore-1.39.8-py3-none-any.whl", hash = "sha256:ab43f79c6893271934faba7ae1987a313d59576361c544c70a5391ade560891d", size = 13866818, upload-time = "2025-07-17T19:18:58.521Z" }, -] - -[[package]] -name = "certifi" -version = "2025.8.3" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/dc/67/960ebe6bf230a96cda2e0abcf73af550ec4f090005363542f0765df162e0/certifi-2025.8.3.tar.gz", hash = "sha256:e564105f78ded564e3ae7c923924435e1daa7463faeab5bb932bc53ffae63407", size = 162386, upload-time = "2025-08-03T03:07:47.08Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e5/48/1549795ba7742c948d2ad169c1c8cdbae65bc450d6cd753d124b17c8cd32/certifi-2025.8.3-py3-none-any.whl", hash = "sha256:f6c12493cfb1b06ba2ff328595af9350c65d6644968e5d3a2ffd78699af217a5", size = 161216, upload-time = "2025-08-03T03:07:45.777Z" }, -] - -[[package]] -name = "cffi" -version = "1.17.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "pycparser" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/fc/97/c783634659c2920c3fc70419e3af40972dbaf758daa229a7d6ea6135c90d/cffi-1.17.1.tar.gz", hash = "sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824", size = 516621, upload-time = "2024-09-04T20:45:21.852Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/6b/f4/927e3a8899e52a27fa57a48607ff7dc91a9ebe97399b357b85a0c7892e00/cffi-1.17.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a45e3c6913c5b87b3ff120dcdc03f6131fa0065027d0ed7ee6190736a74cd401", size = 182264, upload-time = "2024-09-04T20:43:51.124Z" }, - { url = "https://files.pythonhosted.org/packages/6c/f5/6c3a8efe5f503175aaddcbea6ad0d2c96dad6f5abb205750d1b3df44ef29/cffi-1.17.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:30c5e0cb5ae493c04c8b42916e52ca38079f1b235c2f8ae5f4527b963c401caf", size = 178651, upload-time = "2024-09-04T20:43:52.872Z" }, - { url = "https://files.pythonhosted.org/packages/94/dd/a3f0118e688d1b1a57553da23b16bdade96d2f9bcda4d32e7d2838047ff7/cffi-1.17.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f75c7ab1f9e4aca5414ed4d8e5c0e303a34f4421f8a0d47a4d019ceff0ab6af4", size = 445259, upload-time = "2024-09-04T20:43:56.123Z" }, - { url = "https://files.pythonhosted.org/packages/2e/ea/70ce63780f096e16ce8588efe039d3c4f91deb1dc01e9c73a287939c79a6/cffi-1.17.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a1ed2dd2972641495a3ec98445e09766f077aee98a1c896dcb4ad0d303628e41", size = 469200, upload-time = "2024-09-04T20:43:57.891Z" }, - { url = "https://files.pythonhosted.org/packages/1c/a0/a4fa9f4f781bda074c3ddd57a572b060fa0df7655d2a4247bbe277200146/cffi-1.17.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:46bf43160c1a35f7ec506d254e5c890f3c03648a4dbac12d624e4490a7046cd1", size = 477235, upload-time = "2024-09-04T20:44:00.18Z" }, - { url = "https://files.pythonhosted.org/packages/62/12/ce8710b5b8affbcdd5c6e367217c242524ad17a02fe5beec3ee339f69f85/cffi-1.17.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a24ed04c8ffd54b0729c07cee15a81d964e6fee0e3d4d342a27b020d22959dc6", size = 459721, upload-time = "2024-09-04T20:44:01.585Z" }, - { url = "https://files.pythonhosted.org/packages/ff/6b/d45873c5e0242196f042d555526f92aa9e0c32355a1be1ff8c27f077fd37/cffi-1.17.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:610faea79c43e44c71e1ec53a554553fa22321b65fae24889706c0a84d4ad86d", size = 467242, upload-time = "2024-09-04T20:44:03.467Z" }, - { url = "https://files.pythonhosted.org/packages/1a/52/d9a0e523a572fbccf2955f5abe883cfa8bcc570d7faeee06336fbd50c9fc/cffi-1.17.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:a9b15d491f3ad5d692e11f6b71f7857e7835eb677955c00cc0aefcd0669adaf6", size = 477999, upload-time = "2024-09-04T20:44:05.023Z" }, - { url = "https://files.pythonhosted.org/packages/44/74/f2a2460684a1a2d00ca799ad880d54652841a780c4c97b87754f660c7603/cffi-1.17.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:de2ea4b5833625383e464549fec1bc395c1bdeeb5f25c4a3a82b5a8c756ec22f", size = 454242, upload-time = "2024-09-04T20:44:06.444Z" }, - { url = "https://files.pythonhosted.org/packages/f8/4a/34599cac7dfcd888ff54e801afe06a19c17787dfd94495ab0c8d35fe99fb/cffi-1.17.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:fc48c783f9c87e60831201f2cce7f3b2e4846bf4d8728eabe54d60700b318a0b", size = 478604, upload-time = "2024-09-04T20:44:08.206Z" }, - { url = "https://files.pythonhosted.org/packages/34/33/e1b8a1ba29025adbdcda5fb3a36f94c03d771c1b7b12f726ff7fef2ebe36/cffi-1.17.1-cp311-cp311-win32.whl", hash = "sha256:85a950a4ac9c359340d5963966e3e0a94a676bd6245a4b55bc43949eee26a655", size = 171727, upload-time = "2024-09-04T20:44:09.481Z" }, - { url = "https://files.pythonhosted.org/packages/3d/97/50228be003bb2802627d28ec0627837ac0bf35c90cf769812056f235b2d1/cffi-1.17.1-cp311-cp311-win_amd64.whl", hash = "sha256:caaf0640ef5f5517f49bc275eca1406b0ffa6aa184892812030f04c2abf589a0", size = 181400, upload-time = "2024-09-04T20:44:10.873Z" }, - { url = "https://files.pythonhosted.org/packages/5a/84/e94227139ee5fb4d600a7a4927f322e1d4aea6fdc50bd3fca8493caba23f/cffi-1.17.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:805b4371bf7197c329fcb3ead37e710d1bca9da5d583f5073b799d5c5bd1eee4", size = 183178, upload-time = "2024-09-04T20:44:12.232Z" }, - { url = "https://files.pythonhosted.org/packages/da/ee/fb72c2b48656111c4ef27f0f91da355e130a923473bf5ee75c5643d00cca/cffi-1.17.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:733e99bc2df47476e3848417c5a4540522f234dfd4ef3ab7fafdf555b082ec0c", size = 178840, upload-time = "2024-09-04T20:44:13.739Z" }, - { url = "https://files.pythonhosted.org/packages/cc/b6/db007700f67d151abadf508cbfd6a1884f57eab90b1bb985c4c8c02b0f28/cffi-1.17.1-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1257bdabf294dceb59f5e70c64a3e2f462c30c7ad68092d01bbbfb1c16b1ba36", size = 454803, upload-time = "2024-09-04T20:44:15.231Z" }, - { url = "https://files.pythonhosted.org/packages/1a/df/f8d151540d8c200eb1c6fba8cd0dfd40904f1b0682ea705c36e6c2e97ab3/cffi-1.17.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da95af8214998d77a98cc14e3a3bd00aa191526343078b530ceb0bd710fb48a5", size = 478850, upload-time = "2024-09-04T20:44:17.188Z" }, - { url = "https://files.pythonhosted.org/packages/28/c0/b31116332a547fd2677ae5b78a2ef662dfc8023d67f41b2a83f7c2aa78b1/cffi-1.17.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d63afe322132c194cf832bfec0dc69a99fb9bb6bbd550f161a49e9e855cc78ff", size = 485729, upload-time = "2024-09-04T20:44:18.688Z" }, - { url = "https://files.pythonhosted.org/packages/91/2b/9a1ddfa5c7f13cab007a2c9cc295b70fbbda7cb10a286aa6810338e60ea1/cffi-1.17.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f79fc4fc25f1c8698ff97788206bb3c2598949bfe0fef03d299eb1b5356ada99", size = 471256, upload-time = "2024-09-04T20:44:20.248Z" }, - { url = "https://files.pythonhosted.org/packages/b2/d5/da47df7004cb17e4955df6a43d14b3b4ae77737dff8bf7f8f333196717bf/cffi-1.17.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b62ce867176a75d03a665bad002af8e6d54644fad99a3c70905c543130e39d93", size = 479424, upload-time = "2024-09-04T20:44:21.673Z" }, - { url = "https://files.pythonhosted.org/packages/0b/ac/2a28bcf513e93a219c8a4e8e125534f4f6db03e3179ba1c45e949b76212c/cffi-1.17.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:386c8bf53c502fff58903061338ce4f4950cbdcb23e2902d86c0f722b786bbe3", size = 484568, upload-time = "2024-09-04T20:44:23.245Z" }, - { url = "https://files.pythonhosted.org/packages/d4/38/ca8a4f639065f14ae0f1d9751e70447a261f1a30fa7547a828ae08142465/cffi-1.17.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4ceb10419a9adf4460ea14cfd6bc43d08701f0835e979bf821052f1805850fe8", size = 488736, upload-time = "2024-09-04T20:44:24.757Z" }, - { url = "https://files.pythonhosted.org/packages/86/c5/28b2d6f799ec0bdecf44dced2ec5ed43e0eb63097b0f58c293583b406582/cffi-1.17.1-cp312-cp312-win32.whl", hash = "sha256:a08d7e755f8ed21095a310a693525137cfe756ce62d066e53f502a83dc550f65", size = 172448, upload-time = "2024-09-04T20:44:26.208Z" }, - { url = "https://files.pythonhosted.org/packages/50/b9/db34c4755a7bd1cb2d1603ac3863f22bcecbd1ba29e5ee841a4bc510b294/cffi-1.17.1-cp312-cp312-win_amd64.whl", hash = "sha256:51392eae71afec0d0c8fb1a53b204dbb3bcabcb3c9b807eedf3e1e6ccf2de903", size = 181976, upload-time = "2024-09-04T20:44:27.578Z" }, - { url = "https://files.pythonhosted.org/packages/8d/f8/dd6c246b148639254dad4d6803eb6a54e8c85c6e11ec9df2cffa87571dbe/cffi-1.17.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f3a2b4222ce6b60e2e8b337bb9596923045681d71e5a082783484d845390938e", size = 182989, upload-time = "2024-09-04T20:44:28.956Z" }, - { url = "https://files.pythonhosted.org/packages/8b/f1/672d303ddf17c24fc83afd712316fda78dc6fce1cd53011b839483e1ecc8/cffi-1.17.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0984a4925a435b1da406122d4d7968dd861c1385afe3b45ba82b750f229811e2", size = 178802, upload-time = "2024-09-04T20:44:30.289Z" }, - { url = "https://files.pythonhosted.org/packages/0e/2d/eab2e858a91fdff70533cab61dcff4a1f55ec60425832ddfdc9cd36bc8af/cffi-1.17.1-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d01b12eeeb4427d3110de311e1774046ad344f5b1a7403101878976ecd7a10f3", size = 454792, upload-time = "2024-09-04T20:44:32.01Z" }, - { url = "https://files.pythonhosted.org/packages/75/b2/fbaec7c4455c604e29388d55599b99ebcc250a60050610fadde58932b7ee/cffi-1.17.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:706510fe141c86a69c8ddc029c7910003a17353970cff3b904ff0686a5927683", size = 478893, upload-time = "2024-09-04T20:44:33.606Z" }, - { url = "https://files.pythonhosted.org/packages/4f/b7/6e4a2162178bf1935c336d4da8a9352cccab4d3a5d7914065490f08c0690/cffi-1.17.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de55b766c7aa2e2a3092c51e0483d700341182f08e67c63630d5b6f200bb28e5", size = 485810, upload-time = "2024-09-04T20:44:35.191Z" }, - { url = "https://files.pythonhosted.org/packages/c7/8a/1d0e4a9c26e54746dc08c2c6c037889124d4f59dffd853a659fa545f1b40/cffi-1.17.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c59d6e989d07460165cc5ad3c61f9fd8f1b4796eacbd81cee78957842b834af4", size = 471200, upload-time = "2024-09-04T20:44:36.743Z" }, - { url = "https://files.pythonhosted.org/packages/26/9f/1aab65a6c0db35f43c4d1b4f580e8df53914310afc10ae0397d29d697af4/cffi-1.17.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd398dbc6773384a17fe0d3e7eeb8d1a21c2200473ee6806bb5e6a8e62bb73dd", size = 479447, upload-time = "2024-09-04T20:44:38.492Z" }, - { url = "https://files.pythonhosted.org/packages/5f/e4/fb8b3dd8dc0e98edf1135ff067ae070bb32ef9d509d6cb0f538cd6f7483f/cffi-1.17.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:3edc8d958eb099c634dace3c7e16560ae474aa3803a5df240542b305d14e14ed", size = 484358, upload-time = "2024-09-04T20:44:40.046Z" }, - { url = "https://files.pythonhosted.org/packages/f1/47/d7145bf2dc04684935d57d67dff9d6d795b2ba2796806bb109864be3a151/cffi-1.17.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:72e72408cad3d5419375fc87d289076ee319835bdfa2caad331e377589aebba9", size = 488469, upload-time = "2024-09-04T20:44:41.616Z" }, - { url = "https://files.pythonhosted.org/packages/bf/ee/f94057fa6426481d663b88637a9a10e859e492c73d0384514a17d78ee205/cffi-1.17.1-cp313-cp313-win32.whl", hash = "sha256:e03eab0a8677fa80d646b5ddece1cbeaf556c313dcfac435ba11f107ba117b5d", size = 172475, upload-time = "2024-09-04T20:44:43.733Z" }, - { url = "https://files.pythonhosted.org/packages/7c/fc/6a8cb64e5f0324877d503c854da15d76c1e50eb722e320b15345c4d0c6de/cffi-1.17.1-cp313-cp313-win_amd64.whl", hash = "sha256:f6a16c31041f09ead72d69f583767292f750d24913dadacf5756b966aacb3f1a", size = 182009, upload-time = "2024-09-04T20:44:45.309Z" }, -] - -[[package]] -name = "cfn-lint" -version = "1.38.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "aws-sam-translator" }, - { name = "jsonpatch" }, - { name = "networkx" }, - { name = "pyyaml" }, - { name = "regex" }, - { name = "sympy" }, - { name = "typing-extensions" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/ee/af/bc4446ffa5344e23012b6c9a8048def3afb25eb4b63d371e5f9f0bdec7ef/cfn_lint-1.38.1.tar.gz", hash = "sha256:cda697ee6a34a50646dcf9dc8beb1f39492ca24824d7f3481925643851312fe3", size = 3448936, upload-time = "2025-07-30T21:28:09.56Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/5d/e9/57eb5492e1e9f441641755f9842a0bd7fa1797c41dd7299436f04f6e746e/cfn_lint-1.38.1-py3-none-any.whl", hash = "sha256:20ccd4e69b20c16126a55a0b7a17d4027129a24c7f2068ac56f2888f191786ed", size = 5762742, upload-time = "2025-07-30T21:28:07.168Z" }, -] - -[[package]] -name = "charset-normalizer" -version = "3.4.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e4/33/89c2ced2b67d1c2a61c19c6751aa8902d46ce3dacb23600a283619f5a12d/charset_normalizer-3.4.2.tar.gz", hash = "sha256:5baececa9ecba31eff645232d59845c07aa030f0c81ee70184a90d35099a0e63", size = 126367, upload-time = "2025-05-02T08:34:42.01Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/05/85/4c40d00dcc6284a1c1ad5de5e0996b06f39d8232f1031cd23c2f5c07ee86/charset_normalizer-3.4.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:be1e352acbe3c78727a16a455126d9ff83ea2dfdcbc83148d2982305a04714c2", size = 198794, upload-time = "2025-05-02T08:32:11.945Z" }, - { url = "https://files.pythonhosted.org/packages/41/d9/7a6c0b9db952598e97e93cbdfcb91bacd89b9b88c7c983250a77c008703c/charset_normalizer-3.4.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aa88ca0b1932e93f2d961bf3addbb2db902198dca337d88c89e1559e066e7645", size = 142846, upload-time = "2025-05-02T08:32:13.946Z" }, - { url = "https://files.pythonhosted.org/packages/66/82/a37989cda2ace7e37f36c1a8ed16c58cf48965a79c2142713244bf945c89/charset_normalizer-3.4.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d524ba3f1581b35c03cb42beebab4a13e6cdad7b36246bd22541fa585a56cccd", size = 153350, upload-time = "2025-05-02T08:32:15.873Z" }, - { url = "https://files.pythonhosted.org/packages/df/68/a576b31b694d07b53807269d05ec3f6f1093e9545e8607121995ba7a8313/charset_normalizer-3.4.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28a1005facc94196e1fb3e82a3d442a9d9110b8434fc1ded7a24a2983c9888d8", size = 145657, upload-time = "2025-05-02T08:32:17.283Z" }, - { url = "https://files.pythonhosted.org/packages/92/9b/ad67f03d74554bed3aefd56fe836e1623a50780f7c998d00ca128924a499/charset_normalizer-3.4.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fdb20a30fe1175ecabed17cbf7812f7b804b8a315a25f24678bcdf120a90077f", size = 147260, upload-time = "2025-05-02T08:32:18.807Z" }, - { url = "https://files.pythonhosted.org/packages/a6/e6/8aebae25e328160b20e31a7e9929b1578bbdc7f42e66f46595a432f8539e/charset_normalizer-3.4.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0f5d9ed7f254402c9e7d35d2f5972c9bbea9040e99cd2861bd77dc68263277c7", size = 149164, upload-time = "2025-05-02T08:32:20.333Z" }, - { url = "https://files.pythonhosted.org/packages/8b/f2/b3c2f07dbcc248805f10e67a0262c93308cfa149a4cd3d1fe01f593e5fd2/charset_normalizer-3.4.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:efd387a49825780ff861998cd959767800d54f8308936b21025326de4b5a42b9", size = 144571, upload-time = "2025-05-02T08:32:21.86Z" }, - { url = "https://files.pythonhosted.org/packages/60/5b/c3f3a94bc345bc211622ea59b4bed9ae63c00920e2e8f11824aa5708e8b7/charset_normalizer-3.4.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:f0aa37f3c979cf2546b73e8222bbfa3dc07a641585340179d768068e3455e544", size = 151952, upload-time = "2025-05-02T08:32:23.434Z" }, - { url = "https://files.pythonhosted.org/packages/e2/4d/ff460c8b474122334c2fa394a3f99a04cf11c646da895f81402ae54f5c42/charset_normalizer-3.4.2-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:e70e990b2137b29dc5564715de1e12701815dacc1d056308e2b17e9095372a82", size = 155959, upload-time = "2025-05-02T08:32:24.993Z" }, - { url = "https://files.pythonhosted.org/packages/a2/2b/b964c6a2fda88611a1fe3d4c400d39c66a42d6c169c924818c848f922415/charset_normalizer-3.4.2-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:0c8c57f84ccfc871a48a47321cfa49ae1df56cd1d965a09abe84066f6853b9c0", size = 153030, upload-time = "2025-05-02T08:32:26.435Z" }, - { url = "https://files.pythonhosted.org/packages/59/2e/d3b9811db26a5ebf444bc0fa4f4be5aa6d76fc6e1c0fd537b16c14e849b6/charset_normalizer-3.4.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:6b66f92b17849b85cad91259efc341dce9c1af48e2173bf38a85c6329f1033e5", size = 148015, upload-time = "2025-05-02T08:32:28.376Z" }, - { url = "https://files.pythonhosted.org/packages/90/07/c5fd7c11eafd561bb51220d600a788f1c8d77c5eef37ee49454cc5c35575/charset_normalizer-3.4.2-cp311-cp311-win32.whl", hash = "sha256:daac4765328a919a805fa5e2720f3e94767abd632ae410a9062dff5412bae65a", size = 98106, upload-time = "2025-05-02T08:32:30.281Z" }, - { url = "https://files.pythonhosted.org/packages/a8/05/5e33dbef7e2f773d672b6d79f10ec633d4a71cd96db6673625838a4fd532/charset_normalizer-3.4.2-cp311-cp311-win_amd64.whl", hash = "sha256:e53efc7c7cee4c1e70661e2e112ca46a575f90ed9ae3fef200f2a25e954f4b28", size = 105402, upload-time = "2025-05-02T08:32:32.191Z" }, - { url = "https://files.pythonhosted.org/packages/d7/a4/37f4d6035c89cac7930395a35cc0f1b872e652eaafb76a6075943754f095/charset_normalizer-3.4.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:0c29de6a1a95f24b9a1aa7aefd27d2487263f00dfd55a77719b530788f75cff7", size = 199936, upload-time = "2025-05-02T08:32:33.712Z" }, - { url = "https://files.pythonhosted.org/packages/ee/8a/1a5e33b73e0d9287274f899d967907cd0bf9c343e651755d9307e0dbf2b3/charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cddf7bd982eaa998934a91f69d182aec997c6c468898efe6679af88283b498d3", size = 143790, upload-time = "2025-05-02T08:32:35.768Z" }, - { url = "https://files.pythonhosted.org/packages/66/52/59521f1d8e6ab1482164fa21409c5ef44da3e9f653c13ba71becdd98dec3/charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fcbe676a55d7445b22c10967bceaaf0ee69407fbe0ece4d032b6eb8d4565982a", size = 153924, upload-time = "2025-05-02T08:32:37.284Z" }, - { url = "https://files.pythonhosted.org/packages/86/2d/fb55fdf41964ec782febbf33cb64be480a6b8f16ded2dbe8db27a405c09f/charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d41c4d287cfc69060fa91cae9683eacffad989f1a10811995fa309df656ec214", size = 146626, upload-time = "2025-05-02T08:32:38.803Z" }, - { url = "https://files.pythonhosted.org/packages/8c/73/6ede2ec59bce19b3edf4209d70004253ec5f4e319f9a2e3f2f15601ed5f7/charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4e594135de17ab3866138f496755f302b72157d115086d100c3f19370839dd3a", size = 148567, upload-time = "2025-05-02T08:32:40.251Z" }, - { url = "https://files.pythonhosted.org/packages/09/14/957d03c6dc343c04904530b6bef4e5efae5ec7d7990a7cbb868e4595ee30/charset_normalizer-3.4.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cf713fe9a71ef6fd5adf7a79670135081cd4431c2943864757f0fa3a65b1fafd", size = 150957, upload-time = "2025-05-02T08:32:41.705Z" }, - { url = "https://files.pythonhosted.org/packages/0d/c8/8174d0e5c10ccebdcb1b53cc959591c4c722a3ad92461a273e86b9f5a302/charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a370b3e078e418187da8c3674eddb9d983ec09445c99a3a263c2011993522981", size = 145408, upload-time = "2025-05-02T08:32:43.709Z" }, - { url = "https://files.pythonhosted.org/packages/58/aa/8904b84bc8084ac19dc52feb4f5952c6df03ffb460a887b42615ee1382e8/charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:a955b438e62efdf7e0b7b52a64dc5c3396e2634baa62471768a64bc2adb73d5c", size = 153399, upload-time = "2025-05-02T08:32:46.197Z" }, - { url = "https://files.pythonhosted.org/packages/c2/26/89ee1f0e264d201cb65cf054aca6038c03b1a0c6b4ae998070392a3ce605/charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:7222ffd5e4de8e57e03ce2cef95a4c43c98fcb72ad86909abdfc2c17d227fc1b", size = 156815, upload-time = "2025-05-02T08:32:48.105Z" }, - { url = "https://files.pythonhosted.org/packages/fd/07/68e95b4b345bad3dbbd3a8681737b4338ff2c9df29856a6d6d23ac4c73cb/charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:bee093bf902e1d8fc0ac143c88902c3dfc8941f7ea1d6a8dd2bcb786d33db03d", size = 154537, upload-time = "2025-05-02T08:32:49.719Z" }, - { url = "https://files.pythonhosted.org/packages/77/1a/5eefc0ce04affb98af07bc05f3bac9094513c0e23b0562d64af46a06aae4/charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:dedb8adb91d11846ee08bec4c8236c8549ac721c245678282dcb06b221aab59f", size = 149565, upload-time = "2025-05-02T08:32:51.404Z" }, - { url = "https://files.pythonhosted.org/packages/37/a0/2410e5e6032a174c95e0806b1a6585eb21e12f445ebe239fac441995226a/charset_normalizer-3.4.2-cp312-cp312-win32.whl", hash = "sha256:db4c7bf0e07fc3b7d89ac2a5880a6a8062056801b83ff56d8464b70f65482b6c", size = 98357, upload-time = "2025-05-02T08:32:53.079Z" }, - { url = "https://files.pythonhosted.org/packages/6c/4f/c02d5c493967af3eda9c771ad4d2bbc8df6f99ddbeb37ceea6e8716a32bc/charset_normalizer-3.4.2-cp312-cp312-win_amd64.whl", hash = "sha256:5a9979887252a82fefd3d3ed2a8e3b937a7a809f65dcb1e068b090e165bbe99e", size = 105776, upload-time = "2025-05-02T08:32:54.573Z" }, - { url = "https://files.pythonhosted.org/packages/ea/12/a93df3366ed32db1d907d7593a94f1fe6293903e3e92967bebd6950ed12c/charset_normalizer-3.4.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:926ca93accd5d36ccdabd803392ddc3e03e6d4cd1cf17deff3b989ab8e9dbcf0", size = 199622, upload-time = "2025-05-02T08:32:56.363Z" }, - { url = "https://files.pythonhosted.org/packages/04/93/bf204e6f344c39d9937d3c13c8cd5bbfc266472e51fc8c07cb7f64fcd2de/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eba9904b0f38a143592d9fc0e19e2df0fa2e41c3c3745554761c5f6447eedabf", size = 143435, upload-time = "2025-05-02T08:32:58.551Z" }, - { url = "https://files.pythonhosted.org/packages/22/2a/ea8a2095b0bafa6c5b5a55ffdc2f924455233ee7b91c69b7edfcc9e02284/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3fddb7e2c84ac87ac3a947cb4e66d143ca5863ef48e4a5ecb83bd48619e4634e", size = 153653, upload-time = "2025-05-02T08:33:00.342Z" }, - { url = "https://files.pythonhosted.org/packages/b6/57/1b090ff183d13cef485dfbe272e2fe57622a76694061353c59da52c9a659/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:98f862da73774290f251b9df8d11161b6cf25b599a66baf087c1ffe340e9bfd1", size = 146231, upload-time = "2025-05-02T08:33:02.081Z" }, - { url = "https://files.pythonhosted.org/packages/e2/28/ffc026b26f441fc67bd21ab7f03b313ab3fe46714a14b516f931abe1a2d8/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c9379d65defcab82d07b2a9dfbfc2e95bc8fe0ebb1b176a3190230a3ef0e07c", size = 148243, upload-time = "2025-05-02T08:33:04.063Z" }, - { url = "https://files.pythonhosted.org/packages/c0/0f/9abe9bd191629c33e69e47c6ef45ef99773320e9ad8e9cb08b8ab4a8d4cb/charset_normalizer-3.4.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e635b87f01ebc977342e2697d05b56632f5f879a4f15955dfe8cef2448b51691", size = 150442, upload-time = "2025-05-02T08:33:06.418Z" }, - { url = "https://files.pythonhosted.org/packages/67/7c/a123bbcedca91d5916c056407f89a7f5e8fdfce12ba825d7d6b9954a1a3c/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:1c95a1e2902a8b722868587c0e1184ad5c55631de5afc0eb96bc4b0d738092c0", size = 145147, upload-time = "2025-05-02T08:33:08.183Z" }, - { url = "https://files.pythonhosted.org/packages/ec/fe/1ac556fa4899d967b83e9893788e86b6af4d83e4726511eaaad035e36595/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ef8de666d6179b009dce7bcb2ad4c4a779f113f12caf8dc77f0162c29d20490b", size = 153057, upload-time = "2025-05-02T08:33:09.986Z" }, - { url = "https://files.pythonhosted.org/packages/2b/ff/acfc0b0a70b19e3e54febdd5301a98b72fa07635e56f24f60502e954c461/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:32fc0341d72e0f73f80acb0a2c94216bd704f4f0bce10aedea38f30502b271ff", size = 156454, upload-time = "2025-05-02T08:33:11.814Z" }, - { url = "https://files.pythonhosted.org/packages/92/08/95b458ce9c740d0645feb0e96cea1f5ec946ea9c580a94adfe0b617f3573/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:289200a18fa698949d2b39c671c2cc7a24d44096784e76614899a7ccf2574b7b", size = 154174, upload-time = "2025-05-02T08:33:13.707Z" }, - { url = "https://files.pythonhosted.org/packages/78/be/8392efc43487ac051eee6c36d5fbd63032d78f7728cb37aebcc98191f1ff/charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4a476b06fbcf359ad25d34a057b7219281286ae2477cc5ff5e3f70a246971148", size = 149166, upload-time = "2025-05-02T08:33:15.458Z" }, - { url = "https://files.pythonhosted.org/packages/44/96/392abd49b094d30b91d9fbda6a69519e95802250b777841cf3bda8fe136c/charset_normalizer-3.4.2-cp313-cp313-win32.whl", hash = "sha256:aaeeb6a479c7667fbe1099af9617c83aaca22182d6cf8c53966491a0f1b7ffb7", size = 98064, upload-time = "2025-05-02T08:33:17.06Z" }, - { url = "https://files.pythonhosted.org/packages/e9/b0/0200da600134e001d91851ddc797809e2fe0ea72de90e09bec5a2fbdaccb/charset_normalizer-3.4.2-cp313-cp313-win_amd64.whl", hash = "sha256:aa6af9e7d59f9c12b33ae4e9450619cf2488e2bbe9b44030905877f0b2324980", size = 105641, upload-time = "2025-05-02T08:33:18.753Z" }, - { url = "https://files.pythonhosted.org/packages/20/94/c5790835a017658cbfabd07f3bfb549140c3ac458cfc196323996b10095a/charset_normalizer-3.4.2-py3-none-any.whl", hash = "sha256:7f56930ab0abd1c45cd15be65cc741c28b1c9a34876ce8c17a2fa107810c0af0", size = 52626, upload-time = "2025-05-02T08:34:40.053Z" }, -] - -[[package]] -name = "click" -version = "8.2.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "colorama", marker = "sys_platform == 'win32'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/60/6c/8ca2efa64cf75a977a0d7fac081354553ebe483345c734fb6b6515d96bbc/click-8.2.1.tar.gz", hash = "sha256:27c491cc05d968d271d5a1db13e3b5a184636d9d930f148c50b038f0d0646202", size = 286342, upload-time = "2025-05-20T23:19:49.832Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/85/32/10bb5764d90a8eee674e9dc6f4db6a0ab47c8c4d0d83c27f7c39ac415a4d/click-8.2.1-py3-none-any.whl", hash = "sha256:61a3265b914e850b85317d0b3109c7f8cd35a670f963866005d6ef1d5175a12b", size = 102215, upload-time = "2025-05-20T23:19:47.796Z" }, -] - -[[package]] -name = "colorama" -version = "0.4.6" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697, upload-time = "2022-10-25T02:36:22.414Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" }, -] - -[[package]] -name = "comm" -version = "0.2.3" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/4c/13/7d740c5849255756bc17888787313b61fd38a0a8304fc4f073dfc46122aa/comm-0.2.3.tar.gz", hash = "sha256:2dc8048c10962d55d7ad693be1e7045d891b7ce8d999c97963a5e3e99c055971", size = 6319, upload-time = "2025-07-25T14:02:04.452Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/60/97/891a0971e1e4a8c5d2b20bbe0e524dc04548d2307fee33cdeba148fd4fc7/comm-0.2.3-py3-none-any.whl", hash = "sha256:c615d91d75f7f04f095b30d1c1711babd43bdc6419c1be9886a85f2f4e489417", size = 7294, upload-time = "2025-07-25T14:02:02.896Z" }, -] - -[[package]] -name = "coverage" -version = "7.10.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ee/76/17780846fc7aade1e66712e1e27dd28faa0a5d987a1f433610974959eaa8/coverage-7.10.2.tar.gz", hash = "sha256:5d6e6d84e6dd31a8ded64759626627247d676a23c1b892e1326f7c55c8d61055", size = 820754, upload-time = "2025-08-04T00:35:17.511Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/6e/53/0125a6fc0af4f2687b4e08b0fb332cd0d5e60f3ca849e7456f995d022656/coverage-7.10.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2c3b210d79925a476dfc8d74c7d53224888421edebf3a611f3adae923e212b27", size = 215119, upload-time = "2025-08-04T00:33:19.101Z" }, - { url = "https://files.pythonhosted.org/packages/0e/2e/960d9871de9152dbc9ff950913c6a6e9cf2eb4cc80d5bc8f93029f9f2f9f/coverage-7.10.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:bf67d1787cd317c3f8b2e4c6ed1ae93497be7e30605a0d32237ac37a37a8a322", size = 215511, upload-time = "2025-08-04T00:33:20.32Z" }, - { url = "https://files.pythonhosted.org/packages/3f/34/68509e44995b9cad806d81b76c22bc5181f3535bca7cd9c15791bfd8951e/coverage-7.10.2-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:069b779d03d458602bc0e27189876e7d8bdf6b24ac0f12900de22dd2154e6ad7", size = 245513, upload-time = "2025-08-04T00:33:21.896Z" }, - { url = "https://files.pythonhosted.org/packages/ef/d4/9b12f357413248ce40804b0f58030b55a25b28a5c02db95fb0aa50c5d62c/coverage-7.10.2-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:4c2de4cb80b9990e71c62c2d3e9f3ec71b804b1f9ca4784ec7e74127e0f42468", size = 247350, upload-time = "2025-08-04T00:33:23.917Z" }, - { url = "https://files.pythonhosted.org/packages/b6/40/257945eda1f72098e4a3c350b1d68fdc5d7d032684a0aeb6c2391153ecf4/coverage-7.10.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:75bf7ab2374a7eb107602f1e07310cda164016cd60968abf817b7a0b5703e288", size = 249516, upload-time = "2025-08-04T00:33:25.5Z" }, - { url = "https://files.pythonhosted.org/packages/ff/55/8987f852ece378cecbf39a367f3f7ec53351e39a9151b130af3a3045b83f/coverage-7.10.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:3f37516458ec1550815134937f73d6d15b434059cd10f64678a2068f65c62406", size = 247241, upload-time = "2025-08-04T00:33:26.767Z" }, - { url = "https://files.pythonhosted.org/packages/df/ae/da397de7a42a18cea6062ed9c3b72c50b39e0b9e7b2893d7172d3333a9a1/coverage-7.10.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:de3c6271c482c250d3303fb5c6bdb8ca025fff20a67245e1425df04dc990ece9", size = 245274, upload-time = "2025-08-04T00:33:28.494Z" }, - { url = "https://files.pythonhosted.org/packages/4e/64/7baa895eb55ec0e1ec35b988687ecd5d4475ababb0d7ae5ca3874dd90ee7/coverage-7.10.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:98a838101321ac3089c9bb1d4bfa967e8afed58021fda72d7880dc1997f20ae1", size = 245882, upload-time = "2025-08-04T00:33:30.048Z" }, - { url = "https://files.pythonhosted.org/packages/24/6c/1fd76a0bd09ae75220ae9775a8290416d726f0e5ba26ea72346747161240/coverage-7.10.2-cp311-cp311-win32.whl", hash = "sha256:f2a79145a531a0e42df32d37be5af069b4a914845b6f686590739b786f2f7bce", size = 217541, upload-time = "2025-08-04T00:33:31.376Z" }, - { url = "https://files.pythonhosted.org/packages/5f/2d/8c18fb7a6e74c79fd4661e82535bc8c68aee12f46c204eabf910b097ccc9/coverage-7.10.2-cp311-cp311-win_amd64.whl", hash = "sha256:e4f5f1320f8ee0d7cfa421ceb257bef9d39fd614dd3ddcfcacd284d4824ed2c2", size = 218426, upload-time = "2025-08-04T00:33:32.976Z" }, - { url = "https://files.pythonhosted.org/packages/da/40/425bb35e4ff7c7af177edf5dffd4154bc2a677b27696afe6526d75c77fec/coverage-7.10.2-cp311-cp311-win_arm64.whl", hash = "sha256:d8f2d83118f25328552c728b8e91babf93217db259ca5c2cd4dd4220b8926293", size = 217116, upload-time = "2025-08-04T00:33:34.302Z" }, - { url = "https://files.pythonhosted.org/packages/4e/1e/2c752bdbbf6f1199c59b1a10557fbb6fb3dc96b3c0077b30bd41a5922c1f/coverage-7.10.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:890ad3a26da9ec7bf69255b9371800e2a8da9bc223ae5d86daeb940b42247c83", size = 215311, upload-time = "2025-08-04T00:33:35.524Z" }, - { url = "https://files.pythonhosted.org/packages/68/6a/84277d73a2cafb96e24be81b7169372ba7ff28768ebbf98e55c85a491b0f/coverage-7.10.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:38fd1ccfca7838c031d7a7874d4353e2f1b98eb5d2a80a2fe5732d542ae25e9c", size = 215550, upload-time = "2025-08-04T00:33:37.109Z" }, - { url = "https://files.pythonhosted.org/packages/b5/e7/5358b73b46ac76f56cc2de921eeabd44fabd0b7ff82ea4f6b8c159c4d5dc/coverage-7.10.2-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:76c1ffaaf4f6f0f6e8e9ca06f24bb6454a7a5d4ced97a1bc466f0d6baf4bd518", size = 246564, upload-time = "2025-08-04T00:33:38.33Z" }, - { url = "https://files.pythonhosted.org/packages/7c/0e/b0c901dd411cb7fc0cfcb28ef0dc6f3049030f616bfe9fc4143aecd95901/coverage-7.10.2-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:86da8a3a84b79ead5c7d0e960c34f580bc3b231bb546627773a3f53c532c2f21", size = 248993, upload-time = "2025-08-04T00:33:39.555Z" }, - { url = "https://files.pythonhosted.org/packages/0e/4e/a876db272072a9e0df93f311e187ccdd5f39a190c6d1c1f0b6e255a0d08e/coverage-7.10.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:99cef9731c8a39801830a604cc53c93c9e57ea8b44953d26589499eded9576e0", size = 250454, upload-time = "2025-08-04T00:33:41.023Z" }, - { url = "https://files.pythonhosted.org/packages/64/d6/1222dc69f8dd1be208d55708a9f4a450ad582bf4fa05320617fea1eaa6d8/coverage-7.10.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:ea58b112f2966a8b91eb13f5d3b1f8bb43c180d624cd3283fb33b1cedcc2dd75", size = 248365, upload-time = "2025-08-04T00:33:42.376Z" }, - { url = "https://files.pythonhosted.org/packages/62/e3/40fd71151064fc315c922dd9a35e15b30616f00146db1d6a0b590553a75a/coverage-7.10.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:20f405188d28da9522b7232e51154e1b884fc18d0b3a10f382d54784715bbe01", size = 246562, upload-time = "2025-08-04T00:33:43.663Z" }, - { url = "https://files.pythonhosted.org/packages/fc/14/8aa93ddcd6623ddaef5d8966268ac9545b145bce4fe7b1738fd1c3f0d957/coverage-7.10.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:64586ce42bbe0da4d9f76f97235c545d1abb9b25985a8791857690f96e23dc3b", size = 247772, upload-time = "2025-08-04T00:33:45.068Z" }, - { url = "https://files.pythonhosted.org/packages/07/4e/dcb1c01490623c61e2f2ea85cb185fa6a524265bb70eeb897d3c193efeb9/coverage-7.10.2-cp312-cp312-win32.whl", hash = "sha256:bc2e69b795d97ee6d126e7e22e78a509438b46be6ff44f4dccbb5230f550d340", size = 217710, upload-time = "2025-08-04T00:33:46.378Z" }, - { url = "https://files.pythonhosted.org/packages/79/16/e8aab4162b5f80ad2e5e1f54b1826e2053aa2f4db508b864af647f00c239/coverage-7.10.2-cp312-cp312-win_amd64.whl", hash = "sha256:adda2268b8cf0d11f160fad3743b4dfe9813cd6ecf02c1d6397eceaa5b45b388", size = 218499, upload-time = "2025-08-04T00:33:48.048Z" }, - { url = "https://files.pythonhosted.org/packages/06/7f/c112ec766e8f1131ce8ce26254be028772757b2d1e63e4f6a4b0ad9a526c/coverage-7.10.2-cp312-cp312-win_arm64.whl", hash = "sha256:164429decd0d6b39a0582eaa30c67bf482612c0330572343042d0ed9e7f15c20", size = 217154, upload-time = "2025-08-04T00:33:49.299Z" }, - { url = "https://files.pythonhosted.org/packages/8d/04/9b7a741557f93c0ed791b854d27aa8d9fe0b0ce7bb7c52ca1b0f2619cb74/coverage-7.10.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:aca7b5645afa688de6d4f8e89d30c577f62956fefb1bad021490d63173874186", size = 215337, upload-time = "2025-08-04T00:33:50.61Z" }, - { url = "https://files.pythonhosted.org/packages/02/a4/8d1088cd644750c94bc305d3cf56082b4cdf7fb854a25abb23359e74892f/coverage-7.10.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:96e5921342574a14303dfdb73de0019e1ac041c863743c8fe1aa6c2b4a257226", size = 215596, upload-time = "2025-08-04T00:33:52.33Z" }, - { url = "https://files.pythonhosted.org/packages/01/2f/643a8d73343f70e162d8177a3972b76e306b96239026bc0c12cfde4f7c7a/coverage-7.10.2-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:11333094c1bff621aa811b67ed794865cbcaa99984dedea4bd9cf780ad64ecba", size = 246145, upload-time = "2025-08-04T00:33:53.641Z" }, - { url = "https://files.pythonhosted.org/packages/1f/4a/722098d1848db4072cda71b69ede1e55730d9063bf868375264d0d302bc9/coverage-7.10.2-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:6eb586fa7d2aee8d65d5ae1dd71414020b2f447435c57ee8de8abea0a77d5074", size = 248492, upload-time = "2025-08-04T00:33:55.366Z" }, - { url = "https://files.pythonhosted.org/packages/3f/b0/8a6d7f326f6e3e6ed398cde27f9055e860a1e858317001835c521673fb60/coverage-7.10.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2d358f259d8019d4ef25d8c5b78aca4c7af25e28bd4231312911c22a0e824a57", size = 249927, upload-time = "2025-08-04T00:33:57.042Z" }, - { url = "https://files.pythonhosted.org/packages/bb/21/1aaadd3197b54d1e61794475379ecd0f68d8fc5c2ebd352964dc6f698a3d/coverage-7.10.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5250bda76e30382e0a2dcd68d961afcab92c3a7613606e6269855c6979a1b0bb", size = 248138, upload-time = "2025-08-04T00:33:58.329Z" }, - { url = "https://files.pythonhosted.org/packages/48/65/be75bafb2bdd22fd8bf9bf63cd5873b91bb26ec0d68f02d4b8b09c02decb/coverage-7.10.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:a91e027d66eff214d88d9afbe528e21c9ef1ecdf4956c46e366c50f3094696d0", size = 246111, upload-time = "2025-08-04T00:33:59.899Z" }, - { url = "https://files.pythonhosted.org/packages/5e/30/a4f0c5e249c3cc60e6c6f30d8368e372f2d380eda40e0434c192ac27ccf5/coverage-7.10.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:228946da741558904e2c03ce870ba5efd9cd6e48cbc004d9a27abee08100a15a", size = 247493, upload-time = "2025-08-04T00:34:01.619Z" }, - { url = "https://files.pythonhosted.org/packages/85/99/f09b9493e44a75cf99ca834394c12f8cb70da6c1711ee296534f97b52729/coverage-7.10.2-cp313-cp313-win32.whl", hash = "sha256:95e23987b52d02e7c413bf2d6dc6288bd5721beb518052109a13bfdc62c8033b", size = 217756, upload-time = "2025-08-04T00:34:03.277Z" }, - { url = "https://files.pythonhosted.org/packages/2d/bb/cbcb09103be330c7d26ff0ab05c4a8861dd2e254656fdbd3eb7600af4336/coverage-7.10.2-cp313-cp313-win_amd64.whl", hash = "sha256:f35481d42c6d146d48ec92d4e239c23f97b53a3f1fbd2302e7c64336f28641fe", size = 218526, upload-time = "2025-08-04T00:34:04.635Z" }, - { url = "https://files.pythonhosted.org/packages/37/8f/8bfb4e0bca52c00ab680767c0dd8cfd928a2a72d69897d9b2d5d8b5f63f5/coverage-7.10.2-cp313-cp313-win_arm64.whl", hash = "sha256:65b451949cb789c346f9f9002441fc934d8ccedcc9ec09daabc2139ad13853f7", size = 217176, upload-time = "2025-08-04T00:34:05.973Z" }, - { url = "https://files.pythonhosted.org/packages/1e/25/d458ba0bf16a8204a88d74dbb7ec5520f29937ffcbbc12371f931c11efd2/coverage-7.10.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:e8415918856a3e7d57a4e0ad94651b761317de459eb74d34cc1bb51aad80f07e", size = 216058, upload-time = "2025-08-04T00:34:07.368Z" }, - { url = "https://files.pythonhosted.org/packages/0b/1c/af4dfd2d7244dc7610fed6d59d57a23ea165681cd764445dc58d71ed01a6/coverage-7.10.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:f287a25a8ca53901c613498e4a40885b19361a2fe8fbfdbb7f8ef2cad2a23f03", size = 216273, upload-time = "2025-08-04T00:34:09.073Z" }, - { url = "https://files.pythonhosted.org/packages/8e/67/ec5095d4035c6e16368226fa9cb15f77f891194c7e3725aeefd08e7a3e5a/coverage-7.10.2-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:75cc1a3f8c88c69bf16a871dab1fe5a7303fdb1e9f285f204b60f1ee539b8fc0", size = 257513, upload-time = "2025-08-04T00:34:10.403Z" }, - { url = "https://files.pythonhosted.org/packages/1c/47/be5550b57a3a8ba797de4236b0fd31031f88397b2afc84ab3c2d4cf265f6/coverage-7.10.2-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:ca07fa78cc9d26bc8c4740de1abd3489cf9c47cc06d9a8ab3d552ff5101af4c0", size = 259377, upload-time = "2025-08-04T00:34:12.138Z" }, - { url = "https://files.pythonhosted.org/packages/37/50/b12a4da1382e672305c2d17cd3029dc16b8a0470de2191dbf26b91431378/coverage-7.10.2-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c2e117e64c26300032755d4520cd769f2623cde1a1d1c3515b05a3b8add0ade1", size = 261516, upload-time = "2025-08-04T00:34:13.608Z" }, - { url = "https://files.pythonhosted.org/packages/db/41/4d3296dbd33dd8da178171540ca3391af7c0184c0870fd4d4574ac290290/coverage-7.10.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:daaf98009977f577b71f8800208f4d40d4dcf5c2db53d4d822787cdc198d76e1", size = 259110, upload-time = "2025-08-04T00:34:15.089Z" }, - { url = "https://files.pythonhosted.org/packages/ea/f1/b409959ecbc0cec0e61e65683b22bacaa4a3b11512f834e16dd8ffbc37db/coverage-7.10.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:ea8d8fe546c528535c761ba424410bbeb36ba8a0f24be653e94b70c93fd8a8ca", size = 257248, upload-time = "2025-08-04T00:34:16.501Z" }, - { url = "https://files.pythonhosted.org/packages/48/ab/7076dc1c240412e9267d36ec93e9e299d7659f6a5c1e958f87e998b0fb6d/coverage-7.10.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:fe024d40ac31eb8d5aae70215b41dafa264676caa4404ae155f77d2fa95c37bb", size = 258063, upload-time = "2025-08-04T00:34:18.338Z" }, - { url = "https://files.pythonhosted.org/packages/1e/77/f6b51a0288f8f5f7dcc7c89abdd22cf514f3bc5151284f5cd628917f8e10/coverage-7.10.2-cp313-cp313t-win32.whl", hash = "sha256:8f34b09f68bdadec122ffad312154eda965ade433559cc1eadd96cca3de5c824", size = 218433, upload-time = "2025-08-04T00:34:19.71Z" }, - { url = "https://files.pythonhosted.org/packages/7b/6d/547a86493e25270ce8481543e77f3a0aa3aa872c1374246b7b76273d66eb/coverage-7.10.2-cp313-cp313t-win_amd64.whl", hash = "sha256:71d40b3ac0f26fa9ffa6ee16219a714fed5c6ec197cdcd2018904ab5e75bcfa3", size = 219523, upload-time = "2025-08-04T00:34:21.171Z" }, - { url = "https://files.pythonhosted.org/packages/ff/d5/3c711e38eaf9ab587edc9bed232c0298aed84e751a9f54aaa556ceaf7da6/coverage-7.10.2-cp313-cp313t-win_arm64.whl", hash = "sha256:abb57fdd38bf6f7dcc66b38dafb7af7c5fdc31ac6029ce373a6f7f5331d6f60f", size = 217739, upload-time = "2025-08-04T00:34:22.514Z" }, - { url = "https://files.pythonhosted.org/packages/71/53/83bafa669bb9d06d4c8c6a055d8d05677216f9480c4698fb183ba7ec5e47/coverage-7.10.2-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:a3e853cc04987c85ec410905667eed4bf08b1d84d80dfab2684bb250ac8da4f6", size = 215328, upload-time = "2025-08-04T00:34:23.991Z" }, - { url = "https://files.pythonhosted.org/packages/1d/6c/30827a9c5a48a813e865fbaf91e2db25cce990bd223a022650ef2293fe11/coverage-7.10.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:0100b19f230df72c90fdb36db59d3f39232391e8d89616a7de30f677da4f532b", size = 215608, upload-time = "2025-08-04T00:34:25.437Z" }, - { url = "https://files.pythonhosted.org/packages/bb/a0/c92d85948056ddc397b72a3d79d36d9579c53cb25393ed3c40db7d33b193/coverage-7.10.2-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:9c1cd71483ea78331bdfadb8dcec4f4edfb73c7002c1206d8e0af6797853f5be", size = 246111, upload-time = "2025-08-04T00:34:26.857Z" }, - { url = "https://files.pythonhosted.org/packages/c2/cf/d695cf86b2559aadd072c91720a7844be4fb82cb4a3b642a2c6ce075692d/coverage-7.10.2-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:9f75dbf4899e29a37d74f48342f29279391668ef625fdac6d2f67363518056a1", size = 248419, upload-time = "2025-08-04T00:34:28.726Z" }, - { url = "https://files.pythonhosted.org/packages/ce/0a/03206aec4a05986e039418c038470d874045f6e00426b0c3879adc1f9251/coverage-7.10.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a7df481e7508de1c38b9b8043da48d94931aefa3e32b47dd20277e4978ed5b95", size = 250038, upload-time = "2025-08-04T00:34:30.061Z" }, - { url = "https://files.pythonhosted.org/packages/ab/9b/b3bd6bd52118c12bc4cf319f5baba65009c9beea84e665b6b9f03fa3f180/coverage-7.10.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:835f39e618099325e7612b3406f57af30ab0a0af350490eff6421e2e5f608e46", size = 248066, upload-time = "2025-08-04T00:34:31.53Z" }, - { url = "https://files.pythonhosted.org/packages/80/cc/bfa92e261d3e055c851a073e87ba6a3bff12a1f7134233e48a8f7d855875/coverage-7.10.2-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:12e52b5aa00aa720097d6947d2eb9e404e7c1101ad775f9661ba165ed0a28303", size = 245909, upload-time = "2025-08-04T00:34:32.943Z" }, - { url = "https://files.pythonhosted.org/packages/12/80/c8df15db4847710c72084164f615ae900af1ec380dce7f74a5678ccdf5e1/coverage-7.10.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:718044729bf1fe3e9eb9f31b52e44ddae07e434ec050c8c628bf5adc56fe4bdd", size = 247329, upload-time = "2025-08-04T00:34:34.388Z" }, - { url = "https://files.pythonhosted.org/packages/04/6f/cb66e1f7124d5dd9ced69f889f02931419cb448125e44a89a13f4e036124/coverage-7.10.2-cp314-cp314-win32.whl", hash = "sha256:f256173b48cc68486299d510a3e729a96e62c889703807482dbf56946befb5c8", size = 218007, upload-time = "2025-08-04T00:34:35.846Z" }, - { url = "https://files.pythonhosted.org/packages/8c/e1/3d4be307278ce32c1b9d95cc02ee60d54ddab784036101d053ec9e4fe7f5/coverage-7.10.2-cp314-cp314-win_amd64.whl", hash = "sha256:2e980e4179f33d9b65ac4acb86c9c0dde904098853f27f289766657ed16e07b3", size = 218802, upload-time = "2025-08-04T00:34:37.35Z" }, - { url = "https://files.pythonhosted.org/packages/ec/66/1e43bbeb66c55a5a5efec70f1c153cf90cfc7f1662ab4ebe2d844de9122c/coverage-7.10.2-cp314-cp314-win_arm64.whl", hash = "sha256:14fb5b6641ab5b3c4161572579f0f2ea8834f9d3af2f7dd8fbaecd58ef9175cc", size = 217397, upload-time = "2025-08-04T00:34:39.15Z" }, - { url = "https://files.pythonhosted.org/packages/81/01/ae29c129217f6110dc694a217475b8aecbb1b075d8073401f868c825fa99/coverage-7.10.2-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:e96649ac34a3d0e6491e82a2af71098e43be2874b619547c3282fc11d3840a4b", size = 216068, upload-time = "2025-08-04T00:34:40.648Z" }, - { url = "https://files.pythonhosted.org/packages/a2/50/6e9221d4139f357258f36dfa1d8cac4ec56d9d5acf5fdcc909bb016954d7/coverage-7.10.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:1a2e934e9da26341d342d30bfe91422bbfdb3f1f069ec87f19b2909d10d8dcc4", size = 216285, upload-time = "2025-08-04T00:34:42.441Z" }, - { url = "https://files.pythonhosted.org/packages/eb/ec/89d1d0c0ece0d296b4588e0ef4df185200456d42a47f1141335f482c2fc5/coverage-7.10.2-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:651015dcd5fd9b5a51ca79ece60d353cacc5beaf304db750407b29c89f72fe2b", size = 257603, upload-time = "2025-08-04T00:34:43.899Z" }, - { url = "https://files.pythonhosted.org/packages/82/06/c830af66734671c778fc49d35b58339e8f0687fbd2ae285c3f96c94da092/coverage-7.10.2-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:81bf6a32212f9f66da03d63ecb9cd9bd48e662050a937db7199dbf47d19831de", size = 259568, upload-time = "2025-08-04T00:34:45.519Z" }, - { url = "https://files.pythonhosted.org/packages/60/57/f280dd6f1c556ecc744fbf39e835c33d3ae987d040d64d61c6f821e87829/coverage-7.10.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d800705f6951f75a905ea6feb03fff8f3ea3468b81e7563373ddc29aa3e5d1ca", size = 261691, upload-time = "2025-08-04T00:34:47.019Z" }, - { url = "https://files.pythonhosted.org/packages/54/2b/c63a0acbd19d99ec32326164c23df3a4e18984fb86e902afdd66ff7b3d83/coverage-7.10.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:248b5394718e10d067354448dc406d651709c6765669679311170da18e0e9af8", size = 259166, upload-time = "2025-08-04T00:34:48.792Z" }, - { url = "https://files.pythonhosted.org/packages/fd/c5/cd2997dcfcbf0683634da9df52d3967bc1f1741c1475dd0e4722012ba9ef/coverage-7.10.2-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:5c61675a922b569137cf943770d7ad3edd0202d992ce53ac328c5ff68213ccf4", size = 257241, upload-time = "2025-08-04T00:34:51.038Z" }, - { url = "https://files.pythonhosted.org/packages/16/26/c9e30f82fdad8d47aee90af4978b18c88fa74369ae0f0ba0dbf08cee3a80/coverage-7.10.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:52d708b5fd65589461381fa442d9905f5903d76c086c6a4108e8e9efdca7a7ed", size = 258139, upload-time = "2025-08-04T00:34:52.533Z" }, - { url = "https://files.pythonhosted.org/packages/c9/99/bdb7bd00bebcd3dedfb895fa9af8e46b91422993e4a37ac634a5f1113790/coverage-7.10.2-cp314-cp314t-win32.whl", hash = "sha256:916369b3b914186b2c5e5ad2f7264b02cff5df96cdd7cdad65dccd39aa5fd9f0", size = 218809, upload-time = "2025-08-04T00:34:54.075Z" }, - { url = "https://files.pythonhosted.org/packages/eb/5e/56a7852e38a04d1520dda4dfbfbf74a3d6dec932c20526968f7444763567/coverage-7.10.2-cp314-cp314t-win_amd64.whl", hash = "sha256:5b9d538e8e04916a5df63052d698b30c74eb0174f2ca9cd942c981f274a18eaf", size = 219926, upload-time = "2025-08-04T00:34:55.643Z" }, - { url = "https://files.pythonhosted.org/packages/e0/12/7fbe6b9c52bb9d627e9556f9f2edfdbe88b315e084cdecc9afead0c3b36a/coverage-7.10.2-cp314-cp314t-win_arm64.whl", hash = "sha256:04c74f9ef1f925456a9fd23a7eef1103126186d0500ef9a0acb0bd2514bdc7cc", size = 217925, upload-time = "2025-08-04T00:34:57.564Z" }, - { url = "https://files.pythonhosted.org/packages/18/d8/9b768ac73a8ac2d10c080af23937212434a958c8d2a1c84e89b450237942/coverage-7.10.2-py3-none-any.whl", hash = "sha256:95db3750dd2e6e93d99fa2498f3a1580581e49c494bddccc6f85c5c21604921f", size = 206973, upload-time = "2025-08-04T00:35:15.918Z" }, -] - -[package.optional-dependencies] -toml = [ - { name = "tomli", marker = "python_full_version <= '3.11'" }, -] - -[[package]] -name = "crc32c" -version = "2.7.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/7f/4c/4e40cc26347ac8254d3f25b9f94710b8e8df24ee4dddc1ba41907a88a94d/crc32c-2.7.1.tar.gz", hash = "sha256:f91b144a21eef834d64178e01982bb9179c354b3e9e5f4c803b0e5096384968c", size = 45712, upload-time = "2024-09-24T06:20:17.553Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/45/8e/2f37f46368bbfd50edfc11b96f0aa135699034b1b020966c70ebaff3463b/crc32c-2.7.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:19e03a50545a3ef400bd41667d5525f71030488629c57d819e2dd45064f16192", size = 49672, upload-time = "2024-09-24T06:18:18.032Z" }, - { url = "https://files.pythonhosted.org/packages/ed/b8/e52f7c4b045b871c2984d70f37c31d4861b533a8082912dfd107a96cf7c1/crc32c-2.7.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8c03286b1e5ce9bed7090084f206aacd87c5146b4b10de56fe9e86cbbbf851cf", size = 37155, upload-time = "2024-09-24T06:18:19.373Z" }, - { url = "https://files.pythonhosted.org/packages/25/ee/0cfa82a68736697f3c7e435ba658c2ef8c997f42b89f6ab4545efe1b2649/crc32c-2.7.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:80ebbf144a1a56a532b353e81fa0f3edca4f4baa1bf92b1dde2c663a32bb6a15", size = 35372, upload-time = "2024-09-24T06:18:20.983Z" }, - { url = "https://files.pythonhosted.org/packages/aa/92/c878aaba81c431fcd93a059e9f6c90db397c585742793f0bf6e0c531cc67/crc32c-2.7.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:96b794fd11945298fdd5eb1290a812efb497c14bc42592c5c992ca077458eeba", size = 54879, upload-time = "2024-09-24T06:18:23.085Z" }, - { url = "https://files.pythonhosted.org/packages/5b/f5/ab828ab3907095e06b18918408748950a9f726ee2b37be1b0839fb925ee1/crc32c-2.7.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9df7194dd3c0efb5a21f5d70595b7a8b4fd9921fbbd597d6d8e7a11eca3e2d27", size = 52588, upload-time = "2024-09-24T06:18:24.463Z" }, - { url = "https://files.pythonhosted.org/packages/6a/2b/9e29e9ac4c4213d60491db09487125db358cd9263490fbadbd55e48fbe03/crc32c-2.7.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d698eec444b18e296a104d0b9bb6c596c38bdcb79d24eba49604636e9d747305", size = 53674, upload-time = "2024-09-24T06:18:25.624Z" }, - { url = "https://files.pythonhosted.org/packages/79/ed/df3c4c14bf1b29f5c9b52d51fb6793e39efcffd80b2941d994e8f7f5f688/crc32c-2.7.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:e07cf10ef852d219d179333fd706d1c415626f1f05e60bd75acf0143a4d8b225", size = 54691, upload-time = "2024-09-24T06:18:26.578Z" }, - { url = "https://files.pythonhosted.org/packages/0c/47/4917af3c9c1df2fff28bbfa6492673c9adeae5599dcc207bbe209847489c/crc32c-2.7.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:d2a051f296e6e92e13efee3b41db388931cdb4a2800656cd1ed1d9fe4f13a086", size = 52896, upload-time = "2024-09-24T06:18:28.174Z" }, - { url = "https://files.pythonhosted.org/packages/1b/6f/26fc3dda5835cda8f6cd9d856afe62bdeae428de4c34fea200b0888e8835/crc32c-2.7.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a1738259802978cdf428f74156175da6a5fdfb7256f647fdc0c9de1bc6cd7173", size = 53554, upload-time = "2024-09-24T06:18:29.104Z" }, - { url = "https://files.pythonhosted.org/packages/56/3e/6f39127f7027c75d130c0ba348d86a6150dff23761fbc6a5f71659f4521e/crc32c-2.7.1-cp311-cp311-win32.whl", hash = "sha256:f7786d219a1a1bf27d0aa1869821d11a6f8e90415cfffc1e37791690d4a848a1", size = 38370, upload-time = "2024-09-24T06:18:30.013Z" }, - { url = "https://files.pythonhosted.org/packages/c9/fb/1587c2705a3a47a3d0067eecf9a6fec510761c96dec45c7b038fb5c8ff46/crc32c-2.7.1-cp311-cp311-win_amd64.whl", hash = "sha256:887f6844bb3ad35f0778cd10793ad217f7123a5422e40041231b8c4c7329649d", size = 39795, upload-time = "2024-09-24T06:18:31.324Z" }, - { url = "https://files.pythonhosted.org/packages/1d/02/998dc21333413ce63fe4c1ca70eafe61ca26afc7eb353f20cecdb77d614e/crc32c-2.7.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:f7d1c4e761fe42bf856130daf8b2658df33fe0ced3c43dadafdfeaa42b57b950", size = 49568, upload-time = "2024-09-24T06:18:32.425Z" }, - { url = "https://files.pythonhosted.org/packages/9c/3e/e3656bfa76e50ef87b7136fef2dbf3c46e225629432fc9184fdd7fd187ff/crc32c-2.7.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:73361c79a6e4605204457f19fda18b042a94508a52e53d10a4239da5fb0f6a34", size = 37019, upload-time = "2024-09-24T06:18:34.097Z" }, - { url = "https://files.pythonhosted.org/packages/0b/7d/5ff9904046ad15a08772515db19df43107bf5e3901a89c36a577b5f40ba0/crc32c-2.7.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:afd778fc8ac0ed2ffbfb122a9aa6a0e409a8019b894a1799cda12c01534493e0", size = 35373, upload-time = "2024-09-24T06:18:35.02Z" }, - { url = "https://files.pythonhosted.org/packages/4d/41/4aedc961893f26858ab89fc772d0eaba91f9870f19eaa933999dcacb94ec/crc32c-2.7.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:56ef661b34e9f25991fface7f9ad85e81bbc1b3fe3b916fd58c893eabe2fa0b8", size = 54675, upload-time = "2024-09-24T06:18:35.954Z" }, - { url = "https://files.pythonhosted.org/packages/d6/63/8cabf09b7e39b9fec8f7010646c8b33057fc8d67e6093b3cc15563d23533/crc32c-2.7.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:571aa4429444b5d7f588e4377663592145d2d25eb1635abb530f1281794fc7c9", size = 52386, upload-time = "2024-09-24T06:18:36.896Z" }, - { url = "https://files.pythonhosted.org/packages/79/13/13576941bf7cf95026abae43d8427c812c0054408212bf8ed490eda846b0/crc32c-2.7.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c02a3bd67dea95cdb25844aaf44ca2e1b0c1fd70b287ad08c874a95ef4bb38db", size = 53495, upload-time = "2024-09-24T06:18:38.099Z" }, - { url = "https://files.pythonhosted.org/packages/3d/b6/55ffb26d0517d2d6c6f430ce2ad36ae7647c995c5bfd7abce7f32bb2bad1/crc32c-2.7.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:99d17637c4867672cb8adeea007294e3c3df9d43964369516cfe2c1f47ce500a", size = 54456, upload-time = "2024-09-24T06:18:39.051Z" }, - { url = "https://files.pythonhosted.org/packages/c2/1a/5562e54cb629ecc5543d3604dba86ddfc7c7b7bf31d64005b38a00d31d31/crc32c-2.7.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:f4a400ac3c69a32e180d8753fd7ec7bccb80ade7ab0812855dce8a208e72495f", size = 52647, upload-time = "2024-09-24T06:18:40.021Z" }, - { url = "https://files.pythonhosted.org/packages/48/ec/ce4138eaf356cd9aae60bbe931755e5e0151b3eca5f491fce6c01b97fd59/crc32c-2.7.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:588587772e55624dd9c7a906ec9e8773ae0b6ac5e270fc0bc84ee2758eba90d5", size = 53332, upload-time = "2024-09-24T06:18:40.925Z" }, - { url = "https://files.pythonhosted.org/packages/5e/b5/144b42cd838a901175a916078781cb2c3c9f977151c9ba085aebd6d15b22/crc32c-2.7.1-cp312-cp312-win32.whl", hash = "sha256:9f14b60e5a14206e8173dd617fa0c4df35e098a305594082f930dae5488da428", size = 38371, upload-time = "2024-09-24T06:18:42.711Z" }, - { url = "https://files.pythonhosted.org/packages/ae/c4/7929dcd5d9b57db0cce4fe6f6c191049380fc6d8c9b9f5581967f4ec018e/crc32c-2.7.1-cp312-cp312-win_amd64.whl", hash = "sha256:7c810a246660a24dc818047dc5f89c7ce7b2814e1e08a8e99993f4103f7219e8", size = 39805, upload-time = "2024-09-24T06:18:43.6Z" }, - { url = "https://files.pythonhosted.org/packages/bf/98/1a6d60d5b3b5edc8382777b64100343cb4aa6a7e172fae4a6cfcb8ebbbd9/crc32c-2.7.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:24949bffb06fc411cc18188d33357923cb935273642164d0bb37a5f375654169", size = 49567, upload-time = "2024-09-24T06:18:44.485Z" }, - { url = "https://files.pythonhosted.org/packages/4f/56/0dd652d4e950e6348bbf16b964b3325e4ad8220470774128fc0b0dd069cb/crc32c-2.7.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:2d5d326e7e118d4fa60187770d86b66af2fdfc63ce9eeb265f0d3e7d49bebe0b", size = 37018, upload-time = "2024-09-24T06:18:45.434Z" }, - { url = "https://files.pythonhosted.org/packages/47/02/2bd65fdef10139b6a802d83a7f966b7750fe5ffb1042f7cbe5dbb6403869/crc32c-2.7.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:ba110df60c64c8e2d77a9425b982a520ccdb7abe42f06604f4d98a45bb1fff62", size = 35374, upload-time = "2024-09-24T06:18:46.304Z" }, - { url = "https://files.pythonhosted.org/packages/a9/0d/3e797d1ed92d357a6a4c5b41cea15a538b27a8fdf18c7863747eb50b73ad/crc32c-2.7.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c277f9d16a3283e064d54854af0976b72abaa89824955579b2b3f37444f89aae", size = 54641, upload-time = "2024-09-24T06:18:47.207Z" }, - { url = "https://files.pythonhosted.org/packages/a7/d3/4ddeef755caaa75680c559562b6c71f5910fee4c4f3a2eb5ea8b57f0e48c/crc32c-2.7.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:881af0478a01331244e27197356929edbdeaef6a9f81b5c6bacfea18d2139289", size = 52338, upload-time = "2024-09-24T06:18:49.31Z" }, - { url = "https://files.pythonhosted.org/packages/01/cf/32f019be5de9f6e180926a50ee5f08648e686c7d9a59f2c5d0806a77b1c7/crc32c-2.7.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:724d5ff4d29ff093a983ae656be3307093706d850ea2a233bf29fcacc335d945", size = 53447, upload-time = "2024-09-24T06:18:50.296Z" }, - { url = "https://files.pythonhosted.org/packages/b2/8b/92f3f62f3bafe8f7ab4af7bfb7246dc683fd11ec0d6dfb73f91e09079f69/crc32c-2.7.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:b2416c4d88696ac322632555c0f81ab35e15f154bc96055da6cf110d642dbc10", size = 54484, upload-time = "2024-09-24T06:18:51.311Z" }, - { url = "https://files.pythonhosted.org/packages/98/b2/113a50f8781f76af5ac65ffdb907e72bddbe974de8e02247f0d58bc48040/crc32c-2.7.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:60254251b88ec9b9795215f0f9ec015a6b5eef8b2c5fba1267c672d83c78fc02", size = 52703, upload-time = "2024-09-24T06:18:52.488Z" }, - { url = "https://files.pythonhosted.org/packages/b4/6c/309229e9acda8cf36a8ff4061d70b54d905f79b7037e16883ce6590a24ab/crc32c-2.7.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:edefc0e46f3c37372183f70338e5bdee42f6789b62fcd36ec53aa933e9dfbeaf", size = 53367, upload-time = "2024-09-24T06:18:53.49Z" }, - { url = "https://files.pythonhosted.org/packages/b5/2a/6c6324d920396e1bd9f3efbe8753da071be0ca52bd22d6c82d446b8d6975/crc32c-2.7.1-cp313-cp313-win32.whl", hash = "sha256:813af8111218970fe2adb833c5e5239f091b9c9e76f03b4dd91aaba86e99b499", size = 38377, upload-time = "2024-09-24T06:18:54.487Z" }, - { url = "https://files.pythonhosted.org/packages/db/a0/f01ccfab538db07ef3f6b4ede46357ff147a81dd4f3c59ca6a34c791a549/crc32c-2.7.1-cp313-cp313-win_amd64.whl", hash = "sha256:7d9ede7be8e4ec1c9e90aaf6884decbeef10e3473e6ddac032706d710cab5888", size = 39803, upload-time = "2024-09-24T06:18:55.419Z" }, - { url = "https://files.pythonhosted.org/packages/1b/80/61dcae7568b33acfde70c9d651c7d891c0c578c39cc049107c1cf61f1367/crc32c-2.7.1-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:db9ac92294284b22521356715784b91cc9094eee42a5282ab281b872510d1831", size = 49386, upload-time = "2024-09-24T06:18:56.813Z" }, - { url = "https://files.pythonhosted.org/packages/1e/f1/80f17c089799ab2b4c247443bdd101d6ceda30c46d7f193e16b5ca29c5a0/crc32c-2.7.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:8fcd7f2f29a30dc92af64a9ee3d38bde0c82bd20ad939999427aac94bbd87373", size = 36937, upload-time = "2024-09-24T06:18:57.77Z" }, - { url = "https://files.pythonhosted.org/packages/63/42/5fcfc71a3de493d920fd2590843762a2749981ea56b802b380e5df82309d/crc32c-2.7.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:5c056ef043393085523e149276a7ce0cb534b872e04f3e20d74d9a94a75c0ad7", size = 35292, upload-time = "2024-09-24T06:18:58.676Z" }, - { url = "https://files.pythonhosted.org/packages/03/de/fef962e898a953558fe1c55141644553e84ef4190693a31244c59a0856c7/crc32c-2.7.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:03a92551a343702629af91f78d205801219692b6909f8fa126b830e332bfb0e0", size = 54223, upload-time = "2024-09-24T06:18:59.675Z" }, - { url = "https://files.pythonhosted.org/packages/21/14/fceca1a6f45c0a1814fe8602a65657b75c27425162445925ba87438cad6b/crc32c-2.7.1-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fb9424ec1a8ca54763155a703e763bcede82e6569fe94762614bb2de1412d4e1", size = 51588, upload-time = "2024-09-24T06:19:00.938Z" }, - { url = "https://files.pythonhosted.org/packages/13/3b/13d40a7dfbf9ef05c84a0da45544ee72080dca4ce090679e5105689984bd/crc32c-2.7.1-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:88732070f6175530db04e0bb36880ac45c33d49f8ac43fa0e50cfb1830049d23", size = 52678, upload-time = "2024-09-24T06:19:02.661Z" }, - { url = "https://files.pythonhosted.org/packages/36/09/65ffc4fb9fa60ff6714eeb50a92284a4525e5943f0b040b572c0c76368c1/crc32c-2.7.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:57a20dfc27995f568f64775eea2bbb58ae269f1a1144561df5e4a4955f79db32", size = 53847, upload-time = "2024-09-24T06:19:03.705Z" }, - { url = "https://files.pythonhosted.org/packages/24/71/938e926085b7288da052db7c84416f3ce25e71baf7ab5b63824c7bcb6f22/crc32c-2.7.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:f7186d098bfd2cff25eac6880b7c7ad80431b90610036131c1c7dd0eab42a332", size = 51860, upload-time = "2024-09-24T06:19:04.726Z" }, - { url = "https://files.pythonhosted.org/packages/3c/d8/4526d5380189d6f2fa27256c204100f30214fe402f47cf6e9fb9a91ab890/crc32c-2.7.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:55a77e29a265418fa34bef15bd0f2c60afae5348988aaf35ed163b4bbf93cf37", size = 52508, upload-time = "2024-09-24T06:19:05.731Z" }, - { url = "https://files.pythonhosted.org/packages/19/30/15f7e35176488b77e5b88751947d321d603fccac273099ace27c7b2d50a6/crc32c-2.7.1-cp313-cp313t-win32.whl", hash = "sha256:ae38a4b6aa361595d81cab441405fbee905c72273e80a1c010fb878ae77ac769", size = 38319, upload-time = "2024-09-24T06:19:07.233Z" }, - { url = "https://files.pythonhosted.org/packages/19/c4/0b3eee04dac195f4730d102d7a9fbea894ae7a32ce075f84336df96a385d/crc32c-2.7.1-cp313-cp313t-win_amd64.whl", hash = "sha256:eee2a43b663feb6c79a6c1c6e5eae339c2b72cfac31ee54ec0209fa736cf7ee5", size = 39781, upload-time = "2024-09-24T06:19:08.182Z" }, -] - -[[package]] -name = "cryptography" -version = "45.0.5" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "cffi", marker = "platform_python_implementation != 'PyPy'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/95/1e/49527ac611af559665f71cbb8f92b332b5ec9c6fbc4e88b0f8e92f5e85df/cryptography-45.0.5.tar.gz", hash = "sha256:72e76caa004ab63accdf26023fccd1d087f6d90ec6048ff33ad0445abf7f605a", size = 744903, upload-time = "2025-07-02T13:06:25.941Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/f0/fb/09e28bc0c46d2c547085e60897fea96310574c70fb21cd58a730a45f3403/cryptography-45.0.5-cp311-abi3-macosx_10_9_universal2.whl", hash = "sha256:101ee65078f6dd3e5a028d4f19c07ffa4dd22cce6a20eaa160f8b5219911e7d8", size = 7043092, upload-time = "2025-07-02T13:05:01.514Z" }, - { url = "https://files.pythonhosted.org/packages/b1/05/2194432935e29b91fb649f6149c1a4f9e6d3d9fc880919f4ad1bcc22641e/cryptography-45.0.5-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:3a264aae5f7fbb089dbc01e0242d3b67dffe3e6292e1f5182122bdf58e65215d", size = 4205926, upload-time = "2025-07-02T13:05:04.741Z" }, - { url = "https://files.pythonhosted.org/packages/07/8b/9ef5da82350175e32de245646b1884fc01124f53eb31164c77f95a08d682/cryptography-45.0.5-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:e74d30ec9c7cb2f404af331d5b4099a9b322a8a6b25c4632755c8757345baac5", size = 4429235, upload-time = "2025-07-02T13:05:07.084Z" }, - { url = "https://files.pythonhosted.org/packages/7c/e1/c809f398adde1994ee53438912192d92a1d0fc0f2d7582659d9ef4c28b0c/cryptography-45.0.5-cp311-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:3af26738f2db354aafe492fb3869e955b12b2ef2e16908c8b9cb928128d42c57", size = 4209785, upload-time = "2025-07-02T13:05:09.321Z" }, - { url = "https://files.pythonhosted.org/packages/d0/8b/07eb6bd5acff58406c5e806eff34a124936f41a4fb52909ffa4d00815f8c/cryptography-45.0.5-cp311-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:e6c00130ed423201c5bc5544c23359141660b07999ad82e34e7bb8f882bb78e0", size = 3893050, upload-time = "2025-07-02T13:05:11.069Z" }, - { url = "https://files.pythonhosted.org/packages/ec/ef/3333295ed58d900a13c92806b67e62f27876845a9a908c939f040887cca9/cryptography-45.0.5-cp311-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:dd420e577921c8c2d31289536c386aaa30140b473835e97f83bc71ea9d2baf2d", size = 4457379, upload-time = "2025-07-02T13:05:13.32Z" }, - { url = "https://files.pythonhosted.org/packages/d9/9d/44080674dee514dbb82b21d6fa5d1055368f208304e2ab1828d85c9de8f4/cryptography-45.0.5-cp311-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:d05a38884db2ba215218745f0781775806bde4f32e07b135348355fe8e4991d9", size = 4209355, upload-time = "2025-07-02T13:05:15.017Z" }, - { url = "https://files.pythonhosted.org/packages/c9/d8/0749f7d39f53f8258e5c18a93131919ac465ee1f9dccaf1b3f420235e0b5/cryptography-45.0.5-cp311-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:ad0caded895a00261a5b4aa9af828baede54638754b51955a0ac75576b831b27", size = 4456087, upload-time = "2025-07-02T13:05:16.945Z" }, - { url = "https://files.pythonhosted.org/packages/09/d7/92acac187387bf08902b0bf0699816f08553927bdd6ba3654da0010289b4/cryptography-45.0.5-cp311-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:9024beb59aca9d31d36fcdc1604dd9bbeed0a55bface9f1908df19178e2f116e", size = 4332873, upload-time = "2025-07-02T13:05:18.743Z" }, - { url = "https://files.pythonhosted.org/packages/03/c2/840e0710da5106a7c3d4153c7215b2736151bba60bf4491bdb421df5056d/cryptography-45.0.5-cp311-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:91098f02ca81579c85f66df8a588c78f331ca19089763d733e34ad359f474174", size = 4564651, upload-time = "2025-07-02T13:05:21.382Z" }, - { url = "https://files.pythonhosted.org/packages/2e/92/cc723dd6d71e9747a887b94eb3827825c6c24b9e6ce2bb33b847d31d5eaa/cryptography-45.0.5-cp311-abi3-win32.whl", hash = "sha256:926c3ea71a6043921050eaa639137e13dbe7b4ab25800932a8498364fc1abec9", size = 2929050, upload-time = "2025-07-02T13:05:23.39Z" }, - { url = "https://files.pythonhosted.org/packages/1f/10/197da38a5911a48dd5389c043de4aec4b3c94cb836299b01253940788d78/cryptography-45.0.5-cp311-abi3-win_amd64.whl", hash = "sha256:b85980d1e345fe769cfc57c57db2b59cff5464ee0c045d52c0df087e926fbe63", size = 3403224, upload-time = "2025-07-02T13:05:25.202Z" }, - { url = "https://files.pythonhosted.org/packages/fe/2b/160ce8c2765e7a481ce57d55eba1546148583e7b6f85514472b1d151711d/cryptography-45.0.5-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:f3562c2f23c612f2e4a6964a61d942f891d29ee320edb62ff48ffb99f3de9ae8", size = 7017143, upload-time = "2025-07-02T13:05:27.229Z" }, - { url = "https://files.pythonhosted.org/packages/c2/e7/2187be2f871c0221a81f55ee3105d3cf3e273c0a0853651d7011eada0d7e/cryptography-45.0.5-cp37-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:3fcfbefc4a7f332dece7272a88e410f611e79458fab97b5efe14e54fe476f4fd", size = 4197780, upload-time = "2025-07-02T13:05:29.299Z" }, - { url = "https://files.pythonhosted.org/packages/b9/cf/84210c447c06104e6be9122661159ad4ce7a8190011669afceeaea150524/cryptography-45.0.5-cp37-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:460f8c39ba66af7db0545a8c6f2eabcbc5a5528fc1cf6c3fa9a1e44cec33385e", size = 4420091, upload-time = "2025-07-02T13:05:31.221Z" }, - { url = "https://files.pythonhosted.org/packages/3e/6a/cb8b5c8bb82fafffa23aeff8d3a39822593cee6e2f16c5ca5c2ecca344f7/cryptography-45.0.5-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:9b4cf6318915dccfe218e69bbec417fdd7c7185aa7aab139a2c0beb7468c89f0", size = 4198711, upload-time = "2025-07-02T13:05:33.062Z" }, - { url = "https://files.pythonhosted.org/packages/04/f7/36d2d69df69c94cbb2473871926daf0f01ad8e00fe3986ac3c1e8c4ca4b3/cryptography-45.0.5-cp37-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:2089cc8f70a6e454601525e5bf2779e665d7865af002a5dec8d14e561002e135", size = 3883299, upload-time = "2025-07-02T13:05:34.94Z" }, - { url = "https://files.pythonhosted.org/packages/82/c7/f0ea40f016de72f81288e9fe8d1f6748036cb5ba6118774317a3ffc6022d/cryptography-45.0.5-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:0027d566d65a38497bc37e0dd7c2f8ceda73597d2ac9ba93810204f56f52ebc7", size = 4450558, upload-time = "2025-07-02T13:05:37.288Z" }, - { url = "https://files.pythonhosted.org/packages/06/ae/94b504dc1a3cdf642d710407c62e86296f7da9e66f27ab12a1ee6fdf005b/cryptography-45.0.5-cp37-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:be97d3a19c16a9be00edf79dca949c8fa7eff621763666a145f9f9535a5d7f42", size = 4198020, upload-time = "2025-07-02T13:05:39.102Z" }, - { url = "https://files.pythonhosted.org/packages/05/2b/aaf0adb845d5dabb43480f18f7ca72e94f92c280aa983ddbd0bcd6ecd037/cryptography-45.0.5-cp37-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:7760c1c2e1a7084153a0f68fab76e754083b126a47d0117c9ed15e69e2103492", size = 4449759, upload-time = "2025-07-02T13:05:41.398Z" }, - { url = "https://files.pythonhosted.org/packages/91/e4/f17e02066de63e0100a3a01b56f8f1016973a1d67551beaf585157a86b3f/cryptography-45.0.5-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:6ff8728d8d890b3dda5765276d1bc6fb099252915a2cd3aff960c4c195745dd0", size = 4319991, upload-time = "2025-07-02T13:05:43.64Z" }, - { url = "https://files.pythonhosted.org/packages/f2/2e/e2dbd629481b499b14516eed933f3276eb3239f7cee2dcfa4ee6b44d4711/cryptography-45.0.5-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:7259038202a47fdecee7e62e0fd0b0738b6daa335354396c6ddebdbe1206af2a", size = 4554189, upload-time = "2025-07-02T13:05:46.045Z" }, - { url = "https://files.pythonhosted.org/packages/f8/ea/a78a0c38f4c8736287b71c2ea3799d173d5ce778c7d6e3c163a95a05ad2a/cryptography-45.0.5-cp37-abi3-win32.whl", hash = "sha256:1e1da5accc0c750056c556a93c3e9cb828970206c68867712ca5805e46dc806f", size = 2911769, upload-time = "2025-07-02T13:05:48.329Z" }, - { url = "https://files.pythonhosted.org/packages/79/b3/28ac139109d9005ad3f6b6f8976ffede6706a6478e21c889ce36c840918e/cryptography-45.0.5-cp37-abi3-win_amd64.whl", hash = "sha256:90cb0a7bb35959f37e23303b7eed0a32280510030daba3f7fdfbb65defde6a97", size = 3390016, upload-time = "2025-07-02T13:05:50.811Z" }, - { url = "https://files.pythonhosted.org/packages/c0/71/9bdbcfd58d6ff5084687fe722c58ac718ebedbc98b9f8f93781354e6d286/cryptography-45.0.5-pp311-pypy311_pp73-macosx_10_9_x86_64.whl", hash = "sha256:8c4a6ff8a30e9e3d38ac0539e9a9e02540ab3f827a3394f8852432f6b0ea152e", size = 3587878, upload-time = "2025-07-02T13:06:06.339Z" }, - { url = "https://files.pythonhosted.org/packages/f0/63/83516cfb87f4a8756eaa4203f93b283fda23d210fc14e1e594bd5f20edb6/cryptography-45.0.5-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:bd4c45986472694e5121084c6ebbd112aa919a25e783b87eb95953c9573906d6", size = 4152447, upload-time = "2025-07-02T13:06:08.345Z" }, - { url = "https://files.pythonhosted.org/packages/22/11/d2823d2a5a0bd5802b3565437add16f5c8ce1f0778bf3822f89ad2740a38/cryptography-45.0.5-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:982518cd64c54fcada9d7e5cf28eabd3ee76bd03ab18e08a48cad7e8b6f31b18", size = 4386778, upload-time = "2025-07-02T13:06:10.263Z" }, - { url = "https://files.pythonhosted.org/packages/5f/38/6bf177ca6bce4fe14704ab3e93627c5b0ca05242261a2e43ef3168472540/cryptography-45.0.5-pp311-pypy311_pp73-manylinux_2_34_aarch64.whl", hash = "sha256:12e55281d993a793b0e883066f590c1ae1e802e3acb67f8b442e721e475e6463", size = 4151627, upload-time = "2025-07-02T13:06:13.097Z" }, - { url = "https://files.pythonhosted.org/packages/38/6a/69fc67e5266bff68a91bcb81dff8fb0aba4d79a78521a08812048913e16f/cryptography-45.0.5-pp311-pypy311_pp73-manylinux_2_34_x86_64.whl", hash = "sha256:5aa1e32983d4443e310f726ee4b071ab7569f58eedfdd65e9675484a4eb67bd1", size = 4385593, upload-time = "2025-07-02T13:06:15.689Z" }, - { url = "https://files.pythonhosted.org/packages/f6/34/31a1604c9a9ade0fdab61eb48570e09a796f4d9836121266447b0eaf7feb/cryptography-45.0.5-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:e357286c1b76403dd384d938f93c46b2b058ed4dfcdce64a770f0537ed3feb6f", size = 3331106, upload-time = "2025-07-02T13:06:18.058Z" }, -] - -[[package]] -name = "cupy-cuda12x" -version = "13.5.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "fastrlock" }, - { name = "numpy" }, -] -wheels = [ - { url = "https://files.pythonhosted.org/packages/42/52/95472c06adbb6d64c59c5caade65b0653195da1c78f39fbb0e7ac2ea6abe/cupy_cuda12x-13.5.1-cp311-cp311-manylinux2014_aarch64.whl", hash = "sha256:80d862db8b350505668fff9f5f539db35eef508776e4141984470e2bfde00dfe", size = 119311612, upload-time = "2025-07-11T04:38:16.85Z" }, - { url = "https://files.pythonhosted.org/packages/e4/1d/84140cb50b6cf417716cd58cdab86fcec743401336ad655bbae283ba52fc/cupy_cuda12x-13.5.1-cp311-cp311-manylinux2014_x86_64.whl", hash = "sha256:53ef54799fd72ea84ed152f0c862aa2b32383de1a989c0b4d047ff192b6b9a01", size = 113222422, upload-time = "2025-07-11T04:38:22.093Z" }, - { url = "https://files.pythonhosted.org/packages/1c/07/6a97107d2a2cf73001c5c67cf3149f0f9ada950840c3c7018c717d685e9f/cupy_cuda12x-13.5.1-cp311-cp311-win_amd64.whl", hash = "sha256:08a32dcd805c0ce119d6fe43b0d56cfa49ec3849fbe2f35b998b18344a6f3594", size = 90081981, upload-time = "2025-07-11T04:38:27.371Z" }, - { url = "https://files.pythonhosted.org/packages/88/4a/1f5346f610c55e63c296fedea9cf3a7283ba057ac19f18b3b201038c2598/cupy_cuda12x-13.5.1-cp312-cp312-manylinux2014_aarch64.whl", hash = "sha256:d841701470e7c3da63c751d1bdf5eca0cae3ff4f485923f419e21912fc8b25b1", size = 118630886, upload-time = "2025-07-11T04:38:32.735Z" }, - { url = "https://files.pythonhosted.org/packages/3a/01/f04662dccce0f40060b9fd2fe35eb8a42666312332c01cfe7fbae97f8e81/cupy_cuda12x-13.5.1-cp312-cp312-manylinux2014_x86_64.whl", hash = "sha256:09cfccd917d9ce96c7c457b80172f939c92ad1dfc923b9135c86b519c77e81a6", size = 113069415, upload-time = "2025-07-11T04:38:38.212Z" }, - { url = "https://files.pythonhosted.org/packages/82/1b/107b485a0d4caed85b2792fc8353b1708789216b6d22b15c0ee8d22142b1/cupy_cuda12x-13.5.1-cp312-cp312-win_amd64.whl", hash = "sha256:8e71d51782dc071118909872e069724479cdb0286e93a7b4ddf2acd21c892dd3", size = 89981695, upload-time = "2025-07-11T04:38:42.907Z" }, - { url = "https://files.pythonhosted.org/packages/99/96/d3d2f5473f55ebba17ec4bdf2c6e4e41ca231688ef8a531a952e8a471b35/cupy_cuda12x-13.5.1-cp313-cp313-manylinux2014_aarch64.whl", hash = "sha256:717f6f0886db432fdc7a1f5784e79d7de53bb89c0832bccd4653cd8dac82b273", size = 118204570, upload-time = "2025-07-11T04:38:47.78Z" }, - { url = "https://files.pythonhosted.org/packages/1e/7e/1e8dac49804a4b79b04f0e6966b417d570abf745d14c3e5b7a4c1cc047da/cupy_cuda12x-13.5.1-cp313-cp313-manylinux2014_x86_64.whl", hash = "sha256:a826d38cf2af66e182daaa8abf530f6c5523a297c7162d0fb6346a72005ed028", size = 112842113, upload-time = "2025-07-11T04:38:53.373Z" }, - { url = "https://files.pythonhosted.org/packages/ce/e6/0b2351cfb1ec731febceecb1196646951e0fca65a85bfd44fe2c1a4542f5/cupy_cuda12x-13.5.1-cp313-cp313-win_amd64.whl", hash = "sha256:c7ec943fc89450b2cca573990bf2f44d68476f44b2d20720aa0b421b245381a6", size = 89946916, upload-time = "2025-07-11T04:39:06.022Z" }, -] - -[[package]] -name = "debugpy" -version = "1.8.15" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/8c/8b/3a9a28ddb750a76eaec445c7f4d3147ea2c579a97dbd9e25d39001b92b21/debugpy-1.8.15.tar.gz", hash = "sha256:58d7a20b7773ab5ee6bdfb2e6cf622fdf1e40c9d5aef2857d85391526719ac00", size = 1643279, upload-time = "2025-07-15T16:43:29.135Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/d2/b3/1c44a2ed311199ab11c2299c9474a6c7cd80d19278defd333aeb7c287995/debugpy-1.8.15-cp311-cp311-macosx_14_0_universal2.whl", hash = "sha256:babc4fb1962dd6a37e94d611280e3d0d11a1f5e6c72ac9b3d87a08212c4b6dd3", size = 2183442, upload-time = "2025-07-15T16:43:36.733Z" }, - { url = "https://files.pythonhosted.org/packages/f6/69/e2dcb721491e1c294d348681227c9b44fb95218f379aa88e12a19d85528d/debugpy-1.8.15-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f778e68f2986a58479d0ac4f643e0b8c82fdd97c2e200d4d61e7c2d13838eb53", size = 3134215, upload-time = "2025-07-15T16:43:38.116Z" }, - { url = "https://files.pythonhosted.org/packages/17/76/4ce63b95d8294dcf2fd1820860b300a420d077df4e93afcaa25a984c2ca7/debugpy-1.8.15-cp311-cp311-win32.whl", hash = "sha256:f9d1b5abd75cd965e2deabb1a06b0e93a1546f31f9f621d2705e78104377c702", size = 5154037, upload-time = "2025-07-15T16:43:39.471Z" }, - { url = "https://files.pythonhosted.org/packages/c2/a7/e5a7c784465eb9c976d84408873d597dc7ce74a0fc69ed009548a1a94813/debugpy-1.8.15-cp311-cp311-win_amd64.whl", hash = "sha256:62954fb904bec463e2b5a415777f6d1926c97febb08ef1694da0e5d1463c5c3b", size = 5178133, upload-time = "2025-07-15T16:43:40.969Z" }, - { url = "https://files.pythonhosted.org/packages/ab/4a/4508d256e52897f5cdfee6a6d7580974811e911c6d01321df3264508a5ac/debugpy-1.8.15-cp312-cp312-macosx_14_0_universal2.whl", hash = "sha256:3dcc7225cb317469721ab5136cda9ff9c8b6e6fb43e87c9e15d5b108b99d01ba", size = 2511197, upload-time = "2025-07-15T16:43:42.343Z" }, - { url = "https://files.pythonhosted.org/packages/99/8d/7f6ef1097e7fecf26b4ef72338d08e41644a41b7ee958a19f494ffcffc29/debugpy-1.8.15-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:047a493ca93c85ccede1dbbaf4e66816794bdc214213dde41a9a61e42d27f8fc", size = 4229517, upload-time = "2025-07-15T16:43:44.14Z" }, - { url = "https://files.pythonhosted.org/packages/3f/e8/e8c6a9aa33a9c9c6dacbf31747384f6ed2adde4de2e9693c766bdf323aa3/debugpy-1.8.15-cp312-cp312-win32.whl", hash = "sha256:b08e9b0bc260cf324c890626961dad4ffd973f7568fbf57feb3c3a65ab6b6327", size = 5276132, upload-time = "2025-07-15T16:43:45.529Z" }, - { url = "https://files.pythonhosted.org/packages/e9/ad/231050c6177b3476b85fcea01e565dac83607b5233d003ff067e2ee44d8f/debugpy-1.8.15-cp312-cp312-win_amd64.whl", hash = "sha256:e2a4fe357c92334272eb2845fcfcdbec3ef9f22c16cf613c388ac0887aed15fa", size = 5317645, upload-time = "2025-07-15T16:43:46.968Z" }, - { url = "https://files.pythonhosted.org/packages/28/70/2928aad2310726d5920b18ed9f54b9f06df5aa4c10cf9b45fa18ff0ab7e8/debugpy-1.8.15-cp313-cp313-macosx_14_0_universal2.whl", hash = "sha256:f5e01291ad7d6649aed5773256c5bba7a1a556196300232de1474c3c372592bf", size = 2495538, upload-time = "2025-07-15T16:43:48.927Z" }, - { url = "https://files.pythonhosted.org/packages/9e/c6/9b8ffb4ca91fac8b2877eef63c9cc0e87dd2570b1120054c272815ec4cd0/debugpy-1.8.15-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94dc0f0d00e528d915e0ce1c78e771475b2335b376c49afcc7382ee0b146bab6", size = 4221874, upload-time = "2025-07-15T16:43:50.282Z" }, - { url = "https://files.pythonhosted.org/packages/55/8a/9b8d59674b4bf489318c7c46a1aab58e606e583651438084b7e029bf3c43/debugpy-1.8.15-cp313-cp313-win32.whl", hash = "sha256:fcf0748d4f6e25f89dc5e013d1129ca6f26ad4da405e0723a4f704583896a709", size = 5275949, upload-time = "2025-07-15T16:43:52.079Z" }, - { url = "https://files.pythonhosted.org/packages/72/83/9e58e6fdfa8710a5e6ec06c2401241b9ad48b71c0a7eb99570a1f1edb1d3/debugpy-1.8.15-cp313-cp313-win_amd64.whl", hash = "sha256:73c943776cb83e36baf95e8f7f8da765896fd94b05991e7bc162456d25500683", size = 5317720, upload-time = "2025-07-15T16:43:53.703Z" }, - { url = "https://files.pythonhosted.org/packages/07/d5/98748d9860e767a1248b5e31ffa7ce8cb7006e97bf8abbf3d891d0a8ba4e/debugpy-1.8.15-py2.py3-none-any.whl", hash = "sha256:bce2e6c5ff4f2e00b98d45e7e01a49c7b489ff6df5f12d881c67d2f1ac635f3d", size = 5282697, upload-time = "2025-07-15T16:44:07.996Z" }, -] - -[[package]] -name = "decorator" -version = "5.2.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/43/fa/6d96a0978d19e17b68d634497769987b16c8f4cd0a7a05048bec693caa6b/decorator-5.2.1.tar.gz", hash = "sha256:65f266143752f734b0a7cc83c46f4618af75b8c5911b00ccb61d0ac9b6da0360", size = 56711, upload-time = "2025-02-24T04:41:34.073Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/4e/8c/f3147f5c4b73e7550fe5f9352eaa956ae838d5c51eb58e7a25b9f3e2643b/decorator-5.2.1-py3-none-any.whl", hash = "sha256:d316bb415a2d9e2d2b3abcc4084c6502fc09240e292cd76a76afc106a1c8e04a", size = 9190, upload-time = "2025-02-24T04:41:32.565Z" }, -] - -[[package]] -name = "docker" -version = "7.1.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "pywin32", marker = "sys_platform == 'win32'" }, - { name = "requests" }, - { name = "urllib3" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/91/9b/4a2ea29aeba62471211598dac5d96825bb49348fa07e906ea930394a83ce/docker-7.1.0.tar.gz", hash = "sha256:ad8c70e6e3f8926cb8a92619b832b4ea5299e2831c14284663184e200546fa6c", size = 117834, upload-time = "2024-05-23T11:13:57.216Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e3/26/57c6fb270950d476074c087527a558ccb6f4436657314bfb6cdf484114c4/docker-7.1.0-py3-none-any.whl", hash = "sha256:c96b93b7f0a746f9e77d325bcfb87422a3d8bd4f03136ae8a85b37f1898d5fc0", size = 147774, upload-time = "2024-05-23T11:13:55.01Z" }, -] - -[[package]] -name = "docutils" -version = "0.21.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ae/ed/aefcc8cd0ba62a0560c3c18c33925362d46c6075480bfa4df87b28e169a9/docutils-0.21.2.tar.gz", hash = "sha256:3a6b18732edf182daa3cd12775bbb338cf5691468f91eeeb109deff6ebfa986f", size = 2204444, upload-time = "2024-04-23T18:57:18.24Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/8f/d7/9322c609343d929e75e7e5e6255e614fcc67572cfd083959cdef3b7aad79/docutils-0.21.2-py3-none-any.whl", hash = "sha256:dafca5b9e384f0e419294eb4d2ff9fa826435bf15f15b7bd45723e8ad76811b2", size = 587408, upload-time = "2024-04-23T18:57:14.835Z" }, -] - -[[package]] -name = "donfig" -version = "0.8.1.post1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "pyyaml" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/25/71/80cc718ff6d7abfbabacb1f57aaa42e9c1552bfdd01e64ddd704e4a03638/donfig-0.8.1.post1.tar.gz", hash = "sha256:3bef3413a4c1c601b585e8d297256d0c1470ea012afa6e8461dc28bfb7c23f52", size = 19506, upload-time = "2024-05-23T14:14:31.513Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/0c/d5/c5db1ea3394c6e1732fb3286b3bd878b59507a8f77d32a2cebda7d7b7cd4/donfig-0.8.1.post1-py3-none-any.whl", hash = "sha256:2a3175ce74a06109ff9307d90a230f81215cbac9a751f4d1c6194644b8204f9d", size = 21592, upload-time = "2024-05-23T14:13:55.283Z" }, -] - -[[package]] -name = "execnet" -version = "2.1.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/bb/ff/b4c0dc78fbe20c3e59c0c7334de0c27eb4001a2b2017999af398bf730817/execnet-2.1.1.tar.gz", hash = "sha256:5189b52c6121c24feae288166ab41b32549c7e2348652736540b9e6e7d4e72e3", size = 166524, upload-time = "2024-04-08T09:04:19.245Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/43/09/2aea36ff60d16dd8879bdb2f5b3ee0ba8d08cbbdcdfe870e695ce3784385/execnet-2.1.1-py3-none-any.whl", hash = "sha256:26dee51f1b80cebd6d0ca8e74dd8745419761d3bef34163928cbebbdc4749fdc", size = 40612, upload-time = "2024-04-08T09:04:17.414Z" }, -] - -[[package]] -name = "executing" -version = "2.2.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/91/50/a9d80c47ff289c611ff12e63f7c5d13942c65d68125160cefd768c73e6e4/executing-2.2.0.tar.gz", hash = "sha256:5d108c028108fe2551d1a7b2e8b713341e2cb4fc0aa7dcf966fa4327a5226755", size = 978693, upload-time = "2025-01-22T15:41:29.403Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/7b/8f/c4d9bafc34ad7ad5d8dc16dd1347ee0e507a52c3adb6bfa8887e1c6a26ba/executing-2.2.0-py2.py3-none-any.whl", hash = "sha256:11387150cad388d62750327a53d3339fad4888b39a6fe233c3afbb54ecffd3aa", size = 26702, upload-time = "2025-01-22T15:41:25.929Z" }, -] - -[[package]] -name = "fastrlock" -version = "0.8.3" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/73/b1/1c3d635d955f2b4bf34d45abf8f35492e04dbd7804e94ce65d9f928ef3ec/fastrlock-0.8.3.tar.gz", hash = "sha256:4af6734d92eaa3ab4373e6c9a1dd0d5ad1304e172b1521733c6c3b3d73c8fa5d", size = 79327, upload-time = "2024-12-17T11:03:39.638Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/90/9e/647951c579ef74b6541493d5ca786d21a0b2d330c9514ba2c39f0b0b0046/fastrlock-0.8.3-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:f68c551cf8a34b6460a3a0eba44bd7897ebfc820854e19970c52a76bf064a59f", size = 55233, upload-time = "2024-12-17T11:02:04.795Z" }, - { url = "https://files.pythonhosted.org/packages/be/91/5f3afba7d14b8b7d60ac651375f50fff9220d6ccc3bef233d2bd74b73ec7/fastrlock-0.8.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:55d42f6286b9d867370af4c27bc70d04ce2d342fe450c4a4fcce14440514e695", size = 48911, upload-time = "2024-12-17T11:02:06.173Z" }, - { url = "https://files.pythonhosted.org/packages/d5/7a/e37bd72d7d70a8a551b3b4610d028bd73ff5d6253201d5d3cf6296468bee/fastrlock-0.8.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_24_i686.whl", hash = "sha256:bbc3bf96dcbd68392366c477f78c9d5c47e5d9290cb115feea19f20a43ef6d05", size = 50357, upload-time = "2024-12-17T11:02:07.418Z" }, - { url = "https://files.pythonhosted.org/packages/0d/ef/a13b8bab8266840bf38831d7bf5970518c02603d00a548a678763322d5bf/fastrlock-0.8.3-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:77ab8a98417a1f467dafcd2226718f7ca0cf18d4b64732f838b8c2b3e4b55cb5", size = 50222, upload-time = "2024-12-17T11:02:08.745Z" }, - { url = "https://files.pythonhosted.org/packages/01/e2/5e5515562b2e9a56d84659377176aef7345da2c3c22909a1897fe27e14dd/fastrlock-0.8.3-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:04bb5eef8f460d13b8c0084ea5a9d3aab2c0573991c880c0a34a56bb14951d30", size = 54553, upload-time = "2024-12-17T11:02:10.925Z" }, - { url = "https://files.pythonhosted.org/packages/c0/8f/65907405a8cdb2fc8beaf7d09a9a07bb58deff478ff391ca95be4f130b70/fastrlock-0.8.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:8c9d459ce344c21ff03268212a1845aa37feab634d242131bc16c2a2355d5f65", size = 53362, upload-time = "2024-12-17T11:02:12.476Z" }, - { url = "https://files.pythonhosted.org/packages/ec/b9/ae6511e52738ba4e3a6adb7c6a20158573fbc98aab448992ece25abb0b07/fastrlock-0.8.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:33e6fa4af4f3af3e9c747ec72d1eadc0b7ba2035456c2afb51c24d9e8a56f8fd", size = 52836, upload-time = "2024-12-17T11:02:13.74Z" }, - { url = "https://files.pythonhosted.org/packages/88/3e/c26f8192c93e8e43b426787cec04bb46ac36e72b1033b7fe5a9267155fdf/fastrlock-0.8.3-cp311-cp311-win_amd64.whl", hash = "sha256:5e5f1665d8e70f4c5b4a67f2db202f354abc80a321ce5a26ac1493f055e3ae2c", size = 31046, upload-time = "2024-12-17T11:02:15.033Z" }, - { url = "https://files.pythonhosted.org/packages/00/df/56270f2e10c1428855c990e7a7e5baafa9e1262b8e789200bd1d047eb501/fastrlock-0.8.3-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:8cb2cf04352ea8575d496f31b3b88c42c7976e8e58cdd7d1550dfba80ca039da", size = 55727, upload-time = "2024-12-17T11:02:17.26Z" }, - { url = "https://files.pythonhosted.org/packages/57/21/ea1511b0ef0d5457efca3bf1823effb9c5cad4fc9dca86ce08e4d65330ce/fastrlock-0.8.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:85a49a1f1e020097d087e1963e42cea6f307897d5ebe2cb6daf4af47ffdd3eed", size = 52201, upload-time = "2024-12-17T11:02:19.512Z" }, - { url = "https://files.pythonhosted.org/packages/80/07/cdecb7aa976f34328372f1c4efd6c9dc1b039b3cc8d3f38787d640009a25/fastrlock-0.8.3-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5f13ec08f1adb1aa916c384b05ecb7dbebb8df9ea81abd045f60941c6283a670", size = 53924, upload-time = "2024-12-17T11:02:20.85Z" }, - { url = "https://files.pythonhosted.org/packages/88/6d/59c497f8db9a125066dd3a7442fab6aecbe90d6fec344c54645eaf311666/fastrlock-0.8.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0ea4e53a04980d646def0f5e4b5e8bd8c7884288464acab0b37ca0c65c482bfe", size = 52140, upload-time = "2024-12-17T11:02:22.263Z" }, - { url = "https://files.pythonhosted.org/packages/62/04/9138943c2ee803d62a48a3c17b69de2f6fa27677a6896c300369e839a550/fastrlock-0.8.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:38340f6635bd4ee2a4fb02a3a725759fe921f2ca846cb9ca44531ba739cc17b4", size = 53261, upload-time = "2024-12-17T11:02:24.418Z" }, - { url = "https://files.pythonhosted.org/packages/e2/4b/db35a52589764c7745a613b6943bbd018f128d42177ab92ee7dde88444f6/fastrlock-0.8.3-cp312-cp312-win_amd64.whl", hash = "sha256:da06d43e1625e2ffddd303edcd6d2cd068e1c486f5fd0102b3f079c44eb13e2c", size = 31235, upload-time = "2024-12-17T11:02:25.708Z" }, - { url = "https://files.pythonhosted.org/packages/92/74/7b13d836c3f221cff69d6f418f46c2a30c4b1fe09a8ce7db02eecb593185/fastrlock-0.8.3-cp313-cp313-macosx_11_0_universal2.whl", hash = "sha256:5264088185ca8e6bc83181dff521eee94d078c269c7d557cc8d9ed5952b7be45", size = 54157, upload-time = "2024-12-17T11:02:29.196Z" }, - { url = "https://files.pythonhosted.org/packages/06/77/f06a907f9a07d26d0cca24a4385944cfe70d549a2c9f1c3e3217332f4f12/fastrlock-0.8.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4a98ba46b3e14927550c4baa36b752d0d2f7387b8534864a8767f83cce75c160", size = 50954, upload-time = "2024-12-17T11:02:32.12Z" }, - { url = "https://files.pythonhosted.org/packages/f9/4e/94480fb3fd93991dd6f4e658b77698edc343f57caa2870d77b38c89c2e3b/fastrlock-0.8.3-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:dbdea6deeccea1917c6017d353987231c4e46c93d5338ca3e66d6cd88fbce259", size = 52535, upload-time = "2024-12-17T11:02:33.402Z" }, - { url = "https://files.pythonhosted.org/packages/7d/a7/ee82bb55b6c0ca30286dac1e19ee9417a17d2d1de3b13bb0f20cefb86086/fastrlock-0.8.3-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:c6e5bfecbc0d72ff07e43fed81671747914d6794e0926700677ed26d894d4f4f", size = 50942, upload-time = "2024-12-17T11:02:34.688Z" }, - { url = "https://files.pythonhosted.org/packages/63/1d/d4b7782ef59e57dd9dde69468cc245adafc3674281905e42fa98aac30a79/fastrlock-0.8.3-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:2a83d558470c520ed21462d304e77a12639859b205759221c8144dd2896b958a", size = 52044, upload-time = "2024-12-17T11:02:36.613Z" }, - { url = "https://files.pythonhosted.org/packages/28/a3/2ad0a0a69662fd4cf556ab8074f0de978ee9b56bff6ddb4e656df4aa9e8e/fastrlock-0.8.3-cp313-cp313-win_amd64.whl", hash = "sha256:8d1d6a28291b4ace2a66bd7b49a9ed9c762467617febdd9ab356b867ed901af8", size = 30472, upload-time = "2024-12-17T11:02:37.983Z" }, -] - -[[package]] -name = "flask" -version = "3.1.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "blinker" }, - { name = "click" }, - { name = "itsdangerous" }, - { name = "jinja2" }, - { name = "markupsafe" }, - { name = "werkzeug" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/c0/de/e47735752347f4128bcf354e0da07ef311a78244eba9e3dc1d4a5ab21a98/flask-3.1.1.tar.gz", hash = "sha256:284c7b8f2f58cb737f0cf1c30fd7eaf0ccfcde196099d24ecede3fc2005aa59e", size = 753440, upload-time = "2025-05-13T15:01:17.447Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/3d/68/9d4508e893976286d2ead7f8f571314af6c2037af34853a30fd769c02e9d/flask-3.1.1-py3-none-any.whl", hash = "sha256:07aae2bb5eaf77993ef57e357491839f5fd9f4dc281593a81a9e4d79a24f295c", size = 103305, upload-time = "2025-05-13T15:01:15.591Z" }, -] - -[[package]] -name = "flask-cors" -version = "6.0.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "flask" }, - { name = "werkzeug" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/76/37/bcfa6c7d5eec777c4c7cf45ce6b27631cebe5230caf88d85eadd63edd37a/flask_cors-6.0.1.tar.gz", hash = "sha256:d81bcb31f07b0985be7f48406247e9243aced229b7747219160a0559edd678db", size = 13463, upload-time = "2025-06-11T01:32:08.518Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/17/f8/01bf35a3afd734345528f98d0353f2a978a476528ad4d7e78b70c4d149dd/flask_cors-6.0.1-py3-none-any.whl", hash = "sha256:c7b2cbfb1a31aa0d2e5341eea03a6805349f7a61647daee1a15c46bbe981494c", size = 13244, upload-time = "2025-06-11T01:32:07.352Z" }, -] - -[[package]] -name = "frozenlist" -version = "1.7.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/79/b1/b64018016eeb087db503b038296fd782586432b9c077fc5c7839e9cb6ef6/frozenlist-1.7.0.tar.gz", hash = "sha256:2e310d81923c2437ea8670467121cc3e9b0f76d3043cc1d2331d56c7fb7a3a8f", size = 45078, upload-time = "2025-06-09T23:02:35.538Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/34/7e/803dde33760128acd393a27eb002f2020ddb8d99d30a44bfbaab31c5f08a/frozenlist-1.7.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:aa51e147a66b2d74de1e6e2cf5921890de6b0f4820b257465101d7f37b49fb5a", size = 82251, upload-time = "2025-06-09T23:00:16.279Z" }, - { url = "https://files.pythonhosted.org/packages/75/a9/9c2c5760b6ba45eae11334db454c189d43d34a4c0b489feb2175e5e64277/frozenlist-1.7.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:9b35db7ce1cd71d36ba24f80f0c9e7cff73a28d7a74e91fe83e23d27c7828750", size = 48183, upload-time = "2025-06-09T23:00:17.698Z" }, - { url = "https://files.pythonhosted.org/packages/47/be/4038e2d869f8a2da165f35a6befb9158c259819be22eeaf9c9a8f6a87771/frozenlist-1.7.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:34a69a85e34ff37791e94542065c8416c1afbf820b68f720452f636d5fb990cd", size = 47107, upload-time = "2025-06-09T23:00:18.952Z" }, - { url = "https://files.pythonhosted.org/packages/79/26/85314b8a83187c76a37183ceed886381a5f992975786f883472fcb6dc5f2/frozenlist-1.7.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4a646531fa8d82c87fe4bb2e596f23173caec9185bfbca5d583b4ccfb95183e2", size = 237333, upload-time = "2025-06-09T23:00:20.275Z" }, - { url = "https://files.pythonhosted.org/packages/1f/fd/e5b64f7d2c92a41639ffb2ad44a6a82f347787abc0c7df5f49057cf11770/frozenlist-1.7.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:79b2ffbba483f4ed36a0f236ccb85fbb16e670c9238313709638167670ba235f", size = 231724, upload-time = "2025-06-09T23:00:21.705Z" }, - { url = "https://files.pythonhosted.org/packages/20/fb/03395c0a43a5976af4bf7534759d214405fbbb4c114683f434dfdd3128ef/frozenlist-1.7.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a26f205c9ca5829cbf82bb2a84b5c36f7184c4316617d7ef1b271a56720d6b30", size = 245842, upload-time = "2025-06-09T23:00:23.148Z" }, - { url = "https://files.pythonhosted.org/packages/d0/15/c01c8e1dffdac5d9803507d824f27aed2ba76b6ed0026fab4d9866e82f1f/frozenlist-1.7.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bcacfad3185a623fa11ea0e0634aac7b691aa925d50a440f39b458e41c561d98", size = 239767, upload-time = "2025-06-09T23:00:25.103Z" }, - { url = "https://files.pythonhosted.org/packages/14/99/3f4c6fe882c1f5514b6848aa0a69b20cb5e5d8e8f51a339d48c0e9305ed0/frozenlist-1.7.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:72c1b0fe8fe451b34f12dce46445ddf14bd2a5bcad7e324987194dc8e3a74c86", size = 224130, upload-time = "2025-06-09T23:00:27.061Z" }, - { url = "https://files.pythonhosted.org/packages/4d/83/220a374bd7b2aeba9d0725130665afe11de347d95c3620b9b82cc2fcab97/frozenlist-1.7.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:61d1a5baeaac6c0798ff6edfaeaa00e0e412d49946c53fae8d4b8e8b3566c4ae", size = 235301, upload-time = "2025-06-09T23:00:29.02Z" }, - { url = "https://files.pythonhosted.org/packages/03/3c/3e3390d75334a063181625343e8daab61b77e1b8214802cc4e8a1bb678fc/frozenlist-1.7.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:7edf5c043c062462f09b6820de9854bf28cc6cc5b6714b383149745e287181a8", size = 234606, upload-time = "2025-06-09T23:00:30.514Z" }, - { url = "https://files.pythonhosted.org/packages/23/1e/58232c19608b7a549d72d9903005e2d82488f12554a32de2d5fb59b9b1ba/frozenlist-1.7.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:d50ac7627b3a1bd2dcef6f9da89a772694ec04d9a61b66cf87f7d9446b4a0c31", size = 248372, upload-time = "2025-06-09T23:00:31.966Z" }, - { url = "https://files.pythonhosted.org/packages/c0/a4/e4a567e01702a88a74ce8a324691e62a629bf47d4f8607f24bf1c7216e7f/frozenlist-1.7.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:ce48b2fece5aeb45265bb7a58259f45027db0abff478e3077e12b05b17fb9da7", size = 229860, upload-time = "2025-06-09T23:00:33.375Z" }, - { url = "https://files.pythonhosted.org/packages/73/a6/63b3374f7d22268b41a9db73d68a8233afa30ed164c46107b33c4d18ecdd/frozenlist-1.7.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:fe2365ae915a1fafd982c146754e1de6ab3478def8a59c86e1f7242d794f97d5", size = 245893, upload-time = "2025-06-09T23:00:35.002Z" }, - { url = "https://files.pythonhosted.org/packages/6d/eb/d18b3f6e64799a79673c4ba0b45e4cfbe49c240edfd03a68be20002eaeaa/frozenlist-1.7.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:45a6f2fdbd10e074e8814eb98b05292f27bad7d1883afbe009d96abdcf3bc898", size = 246323, upload-time = "2025-06-09T23:00:36.468Z" }, - { url = "https://files.pythonhosted.org/packages/5a/f5/720f3812e3d06cd89a1d5db9ff6450088b8f5c449dae8ffb2971a44da506/frozenlist-1.7.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:21884e23cffabb157a9dd7e353779077bf5b8f9a58e9b262c6caad2ef5f80a56", size = 233149, upload-time = "2025-06-09T23:00:37.963Z" }, - { url = "https://files.pythonhosted.org/packages/69/68/03efbf545e217d5db8446acfd4c447c15b7c8cf4dbd4a58403111df9322d/frozenlist-1.7.0-cp311-cp311-win32.whl", hash = "sha256:284d233a8953d7b24f9159b8a3496fc1ddc00f4db99c324bd5fb5f22d8698ea7", size = 39565, upload-time = "2025-06-09T23:00:39.753Z" }, - { url = "https://files.pythonhosted.org/packages/58/17/fe61124c5c333ae87f09bb67186d65038834a47d974fc10a5fadb4cc5ae1/frozenlist-1.7.0-cp311-cp311-win_amd64.whl", hash = "sha256:387cbfdcde2f2353f19c2f66bbb52406d06ed77519ac7ee21be0232147c2592d", size = 44019, upload-time = "2025-06-09T23:00:40.988Z" }, - { url = "https://files.pythonhosted.org/packages/ef/a2/c8131383f1e66adad5f6ecfcce383d584ca94055a34d683bbb24ac5f2f1c/frozenlist-1.7.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:3dbf9952c4bb0e90e98aec1bd992b3318685005702656bc6f67c1a32b76787f2", size = 81424, upload-time = "2025-06-09T23:00:42.24Z" }, - { url = "https://files.pythonhosted.org/packages/4c/9d/02754159955088cb52567337d1113f945b9e444c4960771ea90eb73de8db/frozenlist-1.7.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:1f5906d3359300b8a9bb194239491122e6cf1444c2efb88865426f170c262cdb", size = 47952, upload-time = "2025-06-09T23:00:43.481Z" }, - { url = "https://files.pythonhosted.org/packages/01/7a/0046ef1bd6699b40acd2067ed6d6670b4db2f425c56980fa21c982c2a9db/frozenlist-1.7.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3dabd5a8f84573c8d10d8859a50ea2dec01eea372031929871368c09fa103478", size = 46688, upload-time = "2025-06-09T23:00:44.793Z" }, - { url = "https://files.pythonhosted.org/packages/d6/a2/a910bafe29c86997363fb4c02069df4ff0b5bc39d33c5198b4e9dd42d8f8/frozenlist-1.7.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aa57daa5917f1738064f302bf2626281a1cb01920c32f711fbc7bc36111058a8", size = 243084, upload-time = "2025-06-09T23:00:46.125Z" }, - { url = "https://files.pythonhosted.org/packages/64/3e/5036af9d5031374c64c387469bfcc3af537fc0f5b1187d83a1cf6fab1639/frozenlist-1.7.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:c193dda2b6d49f4c4398962810fa7d7c78f032bf45572b3e04dd5249dff27e08", size = 233524, upload-time = "2025-06-09T23:00:47.73Z" }, - { url = "https://files.pythonhosted.org/packages/06/39/6a17b7c107a2887e781a48ecf20ad20f1c39d94b2a548c83615b5b879f28/frozenlist-1.7.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bfe2b675cf0aaa6d61bf8fbffd3c274b3c9b7b1623beb3809df8a81399a4a9c4", size = 248493, upload-time = "2025-06-09T23:00:49.742Z" }, - { url = "https://files.pythonhosted.org/packages/be/00/711d1337c7327d88c44d91dd0f556a1c47fb99afc060ae0ef66b4d24793d/frozenlist-1.7.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8fc5d5cda37f62b262405cf9652cf0856839c4be8ee41be0afe8858f17f4c94b", size = 244116, upload-time = "2025-06-09T23:00:51.352Z" }, - { url = "https://files.pythonhosted.org/packages/24/fe/74e6ec0639c115df13d5850e75722750adabdc7de24e37e05a40527ca539/frozenlist-1.7.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b0d5ce521d1dd7d620198829b87ea002956e4319002ef0bc8d3e6d045cb4646e", size = 224557, upload-time = "2025-06-09T23:00:52.855Z" }, - { url = "https://files.pythonhosted.org/packages/8d/db/48421f62a6f77c553575201e89048e97198046b793f4a089c79a6e3268bd/frozenlist-1.7.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:488d0a7d6a0008ca0db273c542098a0fa9e7dfaa7e57f70acef43f32b3f69dca", size = 241820, upload-time = "2025-06-09T23:00:54.43Z" }, - { url = "https://files.pythonhosted.org/packages/1d/fa/cb4a76bea23047c8462976ea7b7a2bf53997a0ca171302deae9d6dd12096/frozenlist-1.7.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:15a7eaba63983d22c54d255b854e8108e7e5f3e89f647fc854bd77a237e767df", size = 236542, upload-time = "2025-06-09T23:00:56.409Z" }, - { url = "https://files.pythonhosted.org/packages/5d/32/476a4b5cfaa0ec94d3f808f193301debff2ea42288a099afe60757ef6282/frozenlist-1.7.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:1eaa7e9c6d15df825bf255649e05bd8a74b04a4d2baa1ae46d9c2d00b2ca2cb5", size = 249350, upload-time = "2025-06-09T23:00:58.468Z" }, - { url = "https://files.pythonhosted.org/packages/8d/ba/9a28042f84a6bf8ea5dbc81cfff8eaef18d78b2a1ad9d51c7bc5b029ad16/frozenlist-1.7.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:e4389e06714cfa9d47ab87f784a7c5be91d3934cd6e9a7b85beef808297cc025", size = 225093, upload-time = "2025-06-09T23:01:00.015Z" }, - { url = "https://files.pythonhosted.org/packages/bc/29/3a32959e68f9cf000b04e79ba574527c17e8842e38c91d68214a37455786/frozenlist-1.7.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:73bd45e1488c40b63fe5a7df892baf9e2a4d4bb6409a2b3b78ac1c6236178e01", size = 245482, upload-time = "2025-06-09T23:01:01.474Z" }, - { url = "https://files.pythonhosted.org/packages/80/e8/edf2f9e00da553f07f5fa165325cfc302dead715cab6ac8336a5f3d0adc2/frozenlist-1.7.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:99886d98e1643269760e5fe0df31e5ae7050788dd288947f7f007209b8c33f08", size = 249590, upload-time = "2025-06-09T23:01:02.961Z" }, - { url = "https://files.pythonhosted.org/packages/1c/80/9a0eb48b944050f94cc51ee1c413eb14a39543cc4f760ed12657a5a3c45a/frozenlist-1.7.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:290a172aae5a4c278c6da8a96222e6337744cd9c77313efe33d5670b9f65fc43", size = 237785, upload-time = "2025-06-09T23:01:05.095Z" }, - { url = "https://files.pythonhosted.org/packages/f3/74/87601e0fb0369b7a2baf404ea921769c53b7ae00dee7dcfe5162c8c6dbf0/frozenlist-1.7.0-cp312-cp312-win32.whl", hash = "sha256:426c7bc70e07cfebc178bc4c2bf2d861d720c4fff172181eeb4a4c41d4ca2ad3", size = 39487, upload-time = "2025-06-09T23:01:06.54Z" }, - { url = "https://files.pythonhosted.org/packages/0b/15/c026e9a9fc17585a9d461f65d8593d281fedf55fbf7eb53f16c6df2392f9/frozenlist-1.7.0-cp312-cp312-win_amd64.whl", hash = "sha256:563b72efe5da92e02eb68c59cb37205457c977aa7a449ed1b37e6939e5c47c6a", size = 43874, upload-time = "2025-06-09T23:01:07.752Z" }, - { url = "https://files.pythonhosted.org/packages/24/90/6b2cebdabdbd50367273c20ff6b57a3dfa89bd0762de02c3a1eb42cb6462/frozenlist-1.7.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ee80eeda5e2a4e660651370ebffd1286542b67e268aa1ac8d6dbe973120ef7ee", size = 79791, upload-time = "2025-06-09T23:01:09.368Z" }, - { url = "https://files.pythonhosted.org/packages/83/2e/5b70b6a3325363293fe5fc3ae74cdcbc3e996c2a11dde2fd9f1fb0776d19/frozenlist-1.7.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:d1a81c85417b914139e3a9b995d4a1c84559afc839a93cf2cb7f15e6e5f6ed2d", size = 47165, upload-time = "2025-06-09T23:01:10.653Z" }, - { url = "https://files.pythonhosted.org/packages/f4/25/a0895c99270ca6966110f4ad98e87e5662eab416a17e7fd53c364bf8b954/frozenlist-1.7.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:cbb65198a9132ebc334f237d7b0df163e4de83fb4f2bdfe46c1e654bdb0c5d43", size = 45881, upload-time = "2025-06-09T23:01:12.296Z" }, - { url = "https://files.pythonhosted.org/packages/19/7c/71bb0bbe0832793c601fff68cd0cf6143753d0c667f9aec93d3c323f4b55/frozenlist-1.7.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dab46c723eeb2c255a64f9dc05b8dd601fde66d6b19cdb82b2e09cc6ff8d8b5d", size = 232409, upload-time = "2025-06-09T23:01:13.641Z" }, - { url = "https://files.pythonhosted.org/packages/c0/45/ed2798718910fe6eb3ba574082aaceff4528e6323f9a8570be0f7028d8e9/frozenlist-1.7.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:6aeac207a759d0dedd2e40745575ae32ab30926ff4fa49b1635def65806fddee", size = 225132, upload-time = "2025-06-09T23:01:15.264Z" }, - { url = "https://files.pythonhosted.org/packages/ba/e2/8417ae0f8eacb1d071d4950f32f229aa6bf68ab69aab797b72a07ea68d4f/frozenlist-1.7.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bd8c4e58ad14b4fa7802b8be49d47993182fdd4023393899632c88fd8cd994eb", size = 237638, upload-time = "2025-06-09T23:01:16.752Z" }, - { url = "https://files.pythonhosted.org/packages/f8/b7/2ace5450ce85f2af05a871b8c8719b341294775a0a6c5585d5e6170f2ce7/frozenlist-1.7.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:04fb24d104f425da3540ed83cbfc31388a586a7696142004c577fa61c6298c3f", size = 233539, upload-time = "2025-06-09T23:01:18.202Z" }, - { url = "https://files.pythonhosted.org/packages/46/b9/6989292c5539553dba63f3c83dc4598186ab2888f67c0dc1d917e6887db6/frozenlist-1.7.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6a5c505156368e4ea6b53b5ac23c92d7edc864537ff911d2fb24c140bb175e60", size = 215646, upload-time = "2025-06-09T23:01:19.649Z" }, - { url = "https://files.pythonhosted.org/packages/72/31/bc8c5c99c7818293458fe745dab4fd5730ff49697ccc82b554eb69f16a24/frozenlist-1.7.0-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8bd7eb96a675f18aa5c553eb7ddc24a43c8c18f22e1f9925528128c052cdbe00", size = 232233, upload-time = "2025-06-09T23:01:21.175Z" }, - { url = "https://files.pythonhosted.org/packages/59/52/460db4d7ba0811b9ccb85af996019f5d70831f2f5f255f7cc61f86199795/frozenlist-1.7.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:05579bf020096fe05a764f1f84cd104a12f78eaab68842d036772dc6d4870b4b", size = 227996, upload-time = "2025-06-09T23:01:23.098Z" }, - { url = "https://files.pythonhosted.org/packages/ba/c9/f4b39e904c03927b7ecf891804fd3b4df3db29b9e487c6418e37988d6e9d/frozenlist-1.7.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:376b6222d114e97eeec13d46c486facd41d4f43bab626b7c3f6a8b4e81a5192c", size = 242280, upload-time = "2025-06-09T23:01:24.808Z" }, - { url = "https://files.pythonhosted.org/packages/b8/33/3f8d6ced42f162d743e3517781566b8481322be321b486d9d262adf70bfb/frozenlist-1.7.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:0aa7e176ebe115379b5b1c95b4096fb1c17cce0847402e227e712c27bdb5a949", size = 217717, upload-time = "2025-06-09T23:01:26.28Z" }, - { url = "https://files.pythonhosted.org/packages/3e/e8/ad683e75da6ccef50d0ab0c2b2324b32f84fc88ceee778ed79b8e2d2fe2e/frozenlist-1.7.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:3fbba20e662b9c2130dc771e332a99eff5da078b2b2648153a40669a6d0e36ca", size = 236644, upload-time = "2025-06-09T23:01:27.887Z" }, - { url = "https://files.pythonhosted.org/packages/b2/14/8d19ccdd3799310722195a72ac94ddc677541fb4bef4091d8e7775752360/frozenlist-1.7.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:f3f4410a0a601d349dd406b5713fec59b4cee7e71678d5b17edda7f4655a940b", size = 238879, upload-time = "2025-06-09T23:01:29.524Z" }, - { url = "https://files.pythonhosted.org/packages/ce/13/c12bf657494c2fd1079a48b2db49fa4196325909249a52d8f09bc9123fd7/frozenlist-1.7.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e2cdfaaec6a2f9327bf43c933c0319a7c429058e8537c508964a133dffee412e", size = 232502, upload-time = "2025-06-09T23:01:31.287Z" }, - { url = "https://files.pythonhosted.org/packages/d7/8b/e7f9dfde869825489382bc0d512c15e96d3964180c9499efcec72e85db7e/frozenlist-1.7.0-cp313-cp313-win32.whl", hash = "sha256:5fc4df05a6591c7768459caba1b342d9ec23fa16195e744939ba5914596ae3e1", size = 39169, upload-time = "2025-06-09T23:01:35.503Z" }, - { url = "https://files.pythonhosted.org/packages/35/89/a487a98d94205d85745080a37860ff5744b9820a2c9acbcdd9440bfddf98/frozenlist-1.7.0-cp313-cp313-win_amd64.whl", hash = "sha256:52109052b9791a3e6b5d1b65f4b909703984b770694d3eb64fad124c835d7cba", size = 43219, upload-time = "2025-06-09T23:01:36.784Z" }, - { url = "https://files.pythonhosted.org/packages/56/d5/5c4cf2319a49eddd9dd7145e66c4866bdc6f3dbc67ca3d59685149c11e0d/frozenlist-1.7.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:a6f86e4193bb0e235ef6ce3dde5cbabed887e0b11f516ce8a0f4d3b33078ec2d", size = 84345, upload-time = "2025-06-09T23:01:38.295Z" }, - { url = "https://files.pythonhosted.org/packages/a4/7d/ec2c1e1dc16b85bc9d526009961953df9cec8481b6886debb36ec9107799/frozenlist-1.7.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:82d664628865abeb32d90ae497fb93df398a69bb3434463d172b80fc25b0dd7d", size = 48880, upload-time = "2025-06-09T23:01:39.887Z" }, - { url = "https://files.pythonhosted.org/packages/69/86/f9596807b03de126e11e7d42ac91e3d0b19a6599c714a1989a4e85eeefc4/frozenlist-1.7.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:912a7e8375a1c9a68325a902f3953191b7b292aa3c3fb0d71a216221deca460b", size = 48498, upload-time = "2025-06-09T23:01:41.318Z" }, - { url = "https://files.pythonhosted.org/packages/5e/cb/df6de220f5036001005f2d726b789b2c0b65f2363b104bbc16f5be8084f8/frozenlist-1.7.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9537c2777167488d539bc5de2ad262efc44388230e5118868e172dd4a552b146", size = 292296, upload-time = "2025-06-09T23:01:42.685Z" }, - { url = "https://files.pythonhosted.org/packages/83/1f/de84c642f17c8f851a2905cee2dae401e5e0daca9b5ef121e120e19aa825/frozenlist-1.7.0-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:f34560fb1b4c3e30ba35fa9a13894ba39e5acfc5f60f57d8accde65f46cc5e74", size = 273103, upload-time = "2025-06-09T23:01:44.166Z" }, - { url = "https://files.pythonhosted.org/packages/88/3c/c840bfa474ba3fa13c772b93070893c6e9d5c0350885760376cbe3b6c1b3/frozenlist-1.7.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:acd03d224b0175f5a850edc104ac19040d35419eddad04e7cf2d5986d98427f1", size = 292869, upload-time = "2025-06-09T23:01:45.681Z" }, - { url = "https://files.pythonhosted.org/packages/a6/1c/3efa6e7d5a39a1d5ef0abeb51c48fb657765794a46cf124e5aca2c7a592c/frozenlist-1.7.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f2038310bc582f3d6a09b3816ab01737d60bf7b1ec70f5356b09e84fb7408ab1", size = 291467, upload-time = "2025-06-09T23:01:47.234Z" }, - { url = "https://files.pythonhosted.org/packages/4f/00/d5c5e09d4922c395e2f2f6b79b9a20dab4b67daaf78ab92e7729341f61f6/frozenlist-1.7.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b8c05e4c8e5f36e5e088caa1bf78a687528f83c043706640a92cb76cd6999384", size = 266028, upload-time = "2025-06-09T23:01:48.819Z" }, - { url = "https://files.pythonhosted.org/packages/4e/27/72765be905619dfde25a7f33813ac0341eb6b076abede17a2e3fbfade0cb/frozenlist-1.7.0-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:765bb588c86e47d0b68f23c1bee323d4b703218037765dcf3f25c838c6fecceb", size = 284294, upload-time = "2025-06-09T23:01:50.394Z" }, - { url = "https://files.pythonhosted.org/packages/88/67/c94103a23001b17808eb7dd1200c156bb69fb68e63fcf0693dde4cd6228c/frozenlist-1.7.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:32dc2e08c67d86d0969714dd484fd60ff08ff81d1a1e40a77dd34a387e6ebc0c", size = 281898, upload-time = "2025-06-09T23:01:52.234Z" }, - { url = "https://files.pythonhosted.org/packages/42/34/a3e2c00c00f9e2a9db5653bca3fec306349e71aff14ae45ecc6d0951dd24/frozenlist-1.7.0-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:c0303e597eb5a5321b4de9c68e9845ac8f290d2ab3f3e2c864437d3c5a30cd65", size = 290465, upload-time = "2025-06-09T23:01:53.788Z" }, - { url = "https://files.pythonhosted.org/packages/bb/73/f89b7fbce8b0b0c095d82b008afd0590f71ccb3dee6eee41791cf8cd25fd/frozenlist-1.7.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:a47f2abb4e29b3a8d0b530f7c3598badc6b134562b1a5caee867f7c62fee51e3", size = 266385, upload-time = "2025-06-09T23:01:55.769Z" }, - { url = "https://files.pythonhosted.org/packages/cd/45/e365fdb554159462ca12df54bc59bfa7a9a273ecc21e99e72e597564d1ae/frozenlist-1.7.0-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:3d688126c242a6fabbd92e02633414d40f50bb6002fa4cf995a1d18051525657", size = 288771, upload-time = "2025-06-09T23:01:57.4Z" }, - { url = "https://files.pythonhosted.org/packages/00/11/47b6117002a0e904f004d70ec5194fe9144f117c33c851e3d51c765962d0/frozenlist-1.7.0-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:4e7e9652b3d367c7bd449a727dc79d5043f48b88d0cbfd4f9f1060cf2b414104", size = 288206, upload-time = "2025-06-09T23:01:58.936Z" }, - { url = "https://files.pythonhosted.org/packages/40/37/5f9f3c3fd7f7746082ec67bcdc204db72dad081f4f83a503d33220a92973/frozenlist-1.7.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:1a85e345b4c43db8b842cab1feb41be5cc0b10a1830e6295b69d7310f99becaf", size = 282620, upload-time = "2025-06-09T23:02:00.493Z" }, - { url = "https://files.pythonhosted.org/packages/0b/31/8fbc5af2d183bff20f21aa743b4088eac4445d2bb1cdece449ae80e4e2d1/frozenlist-1.7.0-cp313-cp313t-win32.whl", hash = "sha256:3a14027124ddb70dfcee5148979998066897e79f89f64b13328595c4bdf77c81", size = 43059, upload-time = "2025-06-09T23:02:02.072Z" }, - { url = "https://files.pythonhosted.org/packages/bb/ed/41956f52105b8dbc26e457c5705340c67c8cc2b79f394b79bffc09d0e938/frozenlist-1.7.0-cp313-cp313t-win_amd64.whl", hash = "sha256:3bf8010d71d4507775f658e9823210b7427be36625b387221642725b515dcf3e", size = 47516, upload-time = "2025-06-09T23:02:03.779Z" }, - { url = "https://files.pythonhosted.org/packages/ee/45/b82e3c16be2182bff01179db177fe144d58b5dc787a7d4492c6ed8b9317f/frozenlist-1.7.0-py3-none-any.whl", hash = "sha256:9a5af342e34f7e97caf8c995864c7a396418ae2859cc6fdf1b1073020d516a7e", size = 13106, upload-time = "2025-06-09T23:02:34.204Z" }, -] - -[[package]] -name = "fsspec" -version = "2025.7.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/8b/02/0835e6ab9cfc03916fe3f78c0956cfcdb6ff2669ffa6651065d5ebf7fc98/fsspec-2025.7.0.tar.gz", hash = "sha256:786120687ffa54b8283d942929540d8bc5ccfa820deb555a2b5d0ed2b737bf58", size = 304432, upload-time = "2025-07-15T16:05:21.19Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/2f/e0/014d5d9d7a4564cf1c40b5039bc882db69fd881111e03ab3657ac0b218e2/fsspec-2025.7.0-py3-none-any.whl", hash = "sha256:8b012e39f63c7d5f10474de957f3ab793b47b45ae7d39f2fb735f8bbe25c0e21", size = 199597, upload-time = "2025-07-15T16:05:19.529Z" }, -] - -[[package]] -name = "graphql-core" -version = "3.2.6" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/c4/16/7574029da84834349b60ed71614d66ca3afe46e9bf9c7b9562102acb7d4f/graphql_core-3.2.6.tar.gz", hash = "sha256:c08eec22f9e40f0bd61d805907e3b3b1b9a320bc606e23dc145eebca07c8fbab", size = 505353, upload-time = "2025-01-26T16:36:27.374Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ae/4f/7297663840621022bc73c22d7d9d80dbc78b4db6297f764b545cd5dd462d/graphql_core-3.2.6-py3-none-any.whl", hash = "sha256:78b016718c161a6fb20a7d97bbf107f331cd1afe53e45566c59f776ed7f0b45f", size = 203416, upload-time = "2025-01-26T16:36:24.868Z" }, -] - -[[package]] -name = "h11" -version = "0.16.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/01/ee/02a2c011bdab74c6fb3c75474d40b3052059d95df7e73351460c8588d963/h11-0.16.0.tar.gz", hash = "sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1", size = 101250, upload-time = "2025-04-24T03:35:25.427Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl", hash = "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86", size = 37515, upload-time = "2025-04-24T03:35:24.344Z" }, -] - -[[package]] -name = "hypothesis" -version = "6.136.8" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "attrs" }, - { name = "sortedcontainers" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/e1/7c/f3393509a4868b026df3460b5536a95c597ee3ac83394dc3472bc91b60e7/hypothesis-6.136.8.tar.gz", hash = "sha256:3c784eb48350f67b2aaee2af6d9d94cbae47ee00cf5e209bf778603c621652f1", size = 459283, upload-time = "2025-08-04T01:47:26.947Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ee/f5/ddd57ee3856d8d66cd2871895721c0bb12b3a6d67bca1552df6bc94a5be6/hypothesis-6.136.8-py3-none-any.whl", hash = "sha256:4fbb93248d630d05dab06c79b18af4c67726c2286ed9249d78c7ffebd013bb9f", size = 526122, upload-time = "2025-08-04T01:47:23.4Z" }, -] - -[[package]] -name = "idna" -version = "3.10" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f1/70/7703c29685631f5a7590aa73f1f1d3fa9a380e654b86af429e0934a32f7d/idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9", size = 190490, upload-time = "2024-09-15T18:07:39.745Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3", size = 70442, upload-time = "2024-09-15T18:07:37.964Z" }, -] - -[[package]] -name = "imagesize" -version = "1.4.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a7/84/62473fb57d61e31fef6e36d64a179c8781605429fd927b5dd608c997be31/imagesize-1.4.1.tar.gz", hash = "sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a", size = 1280026, upload-time = "2022-07-01T12:21:05.687Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ff/62/85c4c919272577931d407be5ba5d71c20f0b616d31a0befe0ae45bb79abd/imagesize-1.4.1-py2.py3-none-any.whl", hash = "sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b", size = 8769, upload-time = "2022-07-01T12:21:02.467Z" }, -] - -[[package]] -name = "iniconfig" -version = "2.1.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f2/97/ebf4da567aa6827c909642694d71c9fcf53e5b504f2d96afea02718862f3/iniconfig-2.1.0.tar.gz", hash = "sha256:3abbd2e30b36733fee78f9c7f7308f2d0050e88f0087fd25c2645f63c773e1c7", size = 4793, upload-time = "2025-03-19T20:09:59.721Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/2c/e1/e6716421ea10d38022b952c159d5161ca1193197fb744506875fbb87ea7b/iniconfig-2.1.0-py3-none-any.whl", hash = "sha256:9deba5723312380e77435581c6bf4935c94cbfab9b1ed33ef8d238ea168eb760", size = 6050, upload-time = "2025-03-19T20:10:01.071Z" }, -] - -[[package]] -name = "ipykernel" -version = "6.30.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "appnope", marker = "sys_platform == 'darwin'" }, - { name = "comm" }, - { name = "debugpy" }, - { name = "ipython" }, - { name = "jupyter-client" }, - { name = "jupyter-core" }, - { name = "matplotlib-inline" }, - { name = "nest-asyncio" }, - { name = "packaging" }, - { name = "psutil" }, - { name = "pyzmq" }, - { name = "tornado" }, - { name = "traitlets" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/38/27/9e6e30ed92f2ac53d29f70b09da8b2dc456e256148e289678fa0e825f46a/ipykernel-6.30.0.tar.gz", hash = "sha256:b7b808ddb2d261aae2df3a26ff3ff810046e6de3dfbc6f7de8c98ea0a6cb632c", size = 165125, upload-time = "2025-07-21T10:36:09.259Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/1f/3d/00813c3d9b46e3dcd88bd4530e0a3c63c0509e5d8c9eff34723ea243ab04/ipykernel-6.30.0-py3-none-any.whl", hash = "sha256:fd2936e55c4a1c2ee8b1e5fa6a372b8eecc0ab1338750dee76f48fa5cca1301e", size = 117264, upload-time = "2025-07-21T10:36:06.854Z" }, -] - -[[package]] -name = "ipython" -version = "9.4.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "colorama", marker = "sys_platform == 'win32'" }, - { name = "decorator" }, - { name = "ipython-pygments-lexers" }, - { name = "jedi" }, - { name = "matplotlib-inline" }, - { name = "pexpect", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, - { name = "prompt-toolkit" }, - { name = "pygments" }, - { name = "stack-data" }, - { name = "traitlets" }, - { name = "typing-extensions", marker = "python_full_version < '3.12'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/54/80/406f9e3bde1c1fd9bf5a0be9d090f8ae623e401b7670d8f6fdf2ab679891/ipython-9.4.0.tar.gz", hash = "sha256:c033c6d4e7914c3d9768aabe76bbe87ba1dc66a92a05db6bfa1125d81f2ee270", size = 4385338, upload-time = "2025-07-01T11:11:30.606Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/63/f8/0031ee2b906a15a33d6bfc12dd09c3dfa966b3cb5b284ecfb7549e6ac3c4/ipython-9.4.0-py3-none-any.whl", hash = "sha256:25850f025a446d9b359e8d296ba175a36aedd32e83ca9b5060430fe16801f066", size = 611021, upload-time = "2025-07-01T11:11:27.85Z" }, -] - -[[package]] -name = "ipython-pygments-lexers" -version = "1.1.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "pygments" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/ef/4c/5dd1d8af08107f88c7f741ead7a40854b8ac24ddf9ae850afbcf698aa552/ipython_pygments_lexers-1.1.1.tar.gz", hash = "sha256:09c0138009e56b6854f9535736f4171d855c8c08a563a0dcd8022f78355c7e81", size = 8393, upload-time = "2025-01-17T11:24:34.505Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/d9/33/1f075bf72b0b747cb3288d011319aaf64083cf2efef8354174e3ed4540e2/ipython_pygments_lexers-1.1.1-py3-none-any.whl", hash = "sha256:a9462224a505ade19a605f71f8fa63c2048833ce50abc86768a0d81d876dc81c", size = 8074, upload-time = "2025-01-17T11:24:33.271Z" }, -] - -[[package]] -name = "itsdangerous" -version = "2.2.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/9c/cb/8ac0172223afbccb63986cc25049b154ecfb5e85932587206f42317be31d/itsdangerous-2.2.0.tar.gz", hash = "sha256:e0050c0b7da1eea53ffaf149c0cfbb5c6e2e2b69c4bef22c81fa6eb73e5f6173", size = 54410, upload-time = "2024-04-16T21:28:15.614Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/04/96/92447566d16df59b2a776c0fb82dbc4d9e07cd95062562af01e408583fc4/itsdangerous-2.2.0-py3-none-any.whl", hash = "sha256:c6242fc49e35958c8b15141343aa660db5fc54d4f13a1db01a3f5891b98700ef", size = 16234, upload-time = "2024-04-16T21:28:14.499Z" }, -] - -[[package]] -name = "jedi" -version = "0.19.2" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "parso" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/72/3a/79a912fbd4d8dd6fbb02bf69afd3bb72cf0c729bb3063c6f4498603db17a/jedi-0.19.2.tar.gz", hash = "sha256:4770dc3de41bde3966b02eb84fbcf557fb33cce26ad23da12c742fb50ecb11f0", size = 1231287, upload-time = "2024-11-11T01:41:42.873Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/c0/5a/9cac0c82afec3d09ccd97c8b6502d48f165f9124db81b4bcb90b4af974ee/jedi-0.19.2-py2.py3-none-any.whl", hash = "sha256:a8ef22bde8490f57fe5c7681a3c83cb58874daf72b4784de3cce5b6ef6edb5b9", size = 1572278, upload-time = "2024-11-11T01:41:40.175Z" }, -] - -[[package]] -name = "jinja2" -version = "3.1.6" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "markupsafe" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/df/bf/f7da0350254c0ed7c72f3e33cef02e048281fec7ecec5f032d4aac52226b/jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d", size = 245115, upload-time = "2025-03-05T20:05:02.478Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67", size = 134899, upload-time = "2025-03-05T20:05:00.369Z" }, -] - -[[package]] -name = "jmespath" -version = "1.0.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/00/2a/e867e8531cf3e36b41201936b7fa7ba7b5702dbef42922193f05c8976cd6/jmespath-1.0.1.tar.gz", hash = "sha256:90261b206d6defd58fdd5e85f478bf633a2901798906be2ad389150c5c60edbe", size = 25843, upload-time = "2022-06-17T18:00:12.224Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/31/b4/b9b800c45527aadd64d5b442f9b932b00648617eb5d63d2c7a6587b7cafc/jmespath-1.0.1-py3-none-any.whl", hash = "sha256:02e2e4cc71b5bcab88332eebf907519190dd9e6e82107fa7f83b1003a6252980", size = 20256, upload-time = "2022-06-17T18:00:10.251Z" }, -] - -[[package]] -name = "joserfc" -version = "1.2.2" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "cryptography" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/00/f2/69000edacf874ea26f331398d28b0d9f58e40f2cb24851666359abf161fb/joserfc-1.2.2.tar.gz", hash = "sha256:0d2a84feecef96168635fd9bf288363fc75b4afef3d99691f77833c8e025d200", size = 192865, upload-time = "2025-07-14T02:57:48.661Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/11/7a/95ba6c5b478dee3528007e480706b39fcf782a270949855868c07a645203/joserfc-1.2.2-py3-none-any.whl", hash = "sha256:630cc36b2f11f749980401b0cd7305fab5735ee11d830d919bc207305d011358", size = 73275, upload-time = "2025-07-14T02:57:47.538Z" }, -] - -[[package]] -name = "jsonpatch" -version = "1.33" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "jsonpointer" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/42/78/18813351fe5d63acad16aec57f94ec2b70a09e53ca98145589e185423873/jsonpatch-1.33.tar.gz", hash = "sha256:9fcd4009c41e6d12348b4a0ff2563ba56a2923a7dfee731d004e212e1ee5030c", size = 21699, upload-time = "2023-06-26T12:07:29.144Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/73/07/02e16ed01e04a374e644b575638ec7987ae846d25ad97bcc9945a3ee4b0e/jsonpatch-1.33-py2.py3-none-any.whl", hash = "sha256:0ae28c0cd062bbd8b8ecc26d7d164fbbea9652a1a3693f3b956c1eae5145dade", size = 12898, upload-time = "2023-06-16T21:01:28.466Z" }, -] - -[[package]] -name = "jsonpath-ng" -version = "1.7.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "ply" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/6d/86/08646239a313f895186ff0a4573452038eed8c86f54380b3ebac34d32fb2/jsonpath-ng-1.7.0.tar.gz", hash = "sha256:f6f5f7fd4e5ff79c785f1573b394043b39849fb2bb47bcead935d12b00beab3c", size = 37838, upload-time = "2024-10-11T15:41:42.404Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/35/5a/73ecb3d82f8615f32ccdadeb9356726d6cae3a4bbc840b437ceb95708063/jsonpath_ng-1.7.0-py3-none-any.whl", hash = "sha256:f3d7f9e848cba1b6da28c55b1c26ff915dc9e0b1ba7e752a53d6da8d5cbd00b6", size = 30105, upload-time = "2024-11-20T17:58:30.418Z" }, -] - -[[package]] -name = "jsonpointer" -version = "3.0.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/6a/0a/eebeb1fa92507ea94016a2a790b93c2ae41a7e18778f85471dc54475ed25/jsonpointer-3.0.0.tar.gz", hash = "sha256:2b2d729f2091522d61c3b31f82e11870f60b68f43fbc705cb76bf4b832af59ef", size = 9114, upload-time = "2024-06-10T19:24:42.462Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/71/92/5e77f98553e9e75130c78900d000368476aed74276eb8ae8796f65f00918/jsonpointer-3.0.0-py2.py3-none-any.whl", hash = "sha256:13e088adc14fca8b6aa8177c044e12701e6ad4b28ff10e65f2267a90109c9942", size = 7595, upload-time = "2024-06-10T19:24:40.698Z" }, -] - -[[package]] -name = "jsonschema" -version = "4.25.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "attrs" }, - { name = "jsonschema-specifications" }, - { name = "referencing" }, - { name = "rpds-py" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/d5/00/a297a868e9d0784450faa7365c2172a7d6110c763e30ba861867c32ae6a9/jsonschema-4.25.0.tar.gz", hash = "sha256:e63acf5c11762c0e6672ffb61482bdf57f0876684d8d249c0fe2d730d48bc55f", size = 356830, upload-time = "2025-07-18T15:39:45.11Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/fe/54/c86cd8e011fe98803d7e382fd67c0df5ceab8d2b7ad8c5a81524f791551c/jsonschema-4.25.0-py3-none-any.whl", hash = "sha256:24c2e8da302de79c8b9382fee3e76b355e44d2a4364bb207159ce10b517bd716", size = 89184, upload-time = "2025-07-18T15:39:42.956Z" }, -] - -[[package]] -name = "jsonschema-path" -version = "0.3.4" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "pathable" }, - { name = "pyyaml" }, - { name = "referencing" }, - { name = "requests" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/6e/45/41ebc679c2a4fced6a722f624c18d658dee42612b83ea24c1caf7c0eb3a8/jsonschema_path-0.3.4.tar.gz", hash = "sha256:8365356039f16cc65fddffafda5f58766e34bebab7d6d105616ab52bc4297001", size = 11159, upload-time = "2025-01-24T14:33:16.547Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/cb/58/3485da8cb93d2f393bce453adeef16896751f14ba3e2024bc21dc9597646/jsonschema_path-0.3.4-py3-none-any.whl", hash = "sha256:f502191fdc2b22050f9a81c9237be9d27145b9001c55842bece5e94e382e52f8", size = 14810, upload-time = "2025-01-24T14:33:14.652Z" }, -] - -[[package]] -name = "jsonschema-specifications" -version = "2025.4.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "referencing" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/bf/ce/46fbd9c8119cfc3581ee5643ea49464d168028cfb5caff5fc0596d0cf914/jsonschema_specifications-2025.4.1.tar.gz", hash = "sha256:630159c9f4dbea161a6a2205c3011cc4f18ff381b189fff48bb39b9bf26ae608", size = 15513, upload-time = "2025-04-23T12:34:07.418Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/01/0e/b27cdbaccf30b890c40ed1da9fd4a3593a5cf94dae54fb34f8a4b74fcd3f/jsonschema_specifications-2025.4.1-py3-none-any.whl", hash = "sha256:4653bffbd6584f7de83a67e0d620ef16900b390ddc7939d56684d6c81e33f1af", size = 18437, upload-time = "2025-04-23T12:34:05.422Z" }, -] - -[[package]] -name = "jupyter-client" -version = "8.6.3" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "jupyter-core" }, - { name = "python-dateutil" }, - { name = "pyzmq" }, - { name = "tornado" }, - { name = "traitlets" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/71/22/bf9f12fdaeae18019a468b68952a60fe6dbab5d67cd2a103cac7659b41ca/jupyter_client-8.6.3.tar.gz", hash = "sha256:35b3a0947c4a6e9d589eb97d7d4cd5e90f910ee73101611f01283732bd6d9419", size = 342019, upload-time = "2024-09-17T10:44:17.613Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/11/85/b0394e0b6fcccd2c1eeefc230978a6f8cb0c5df1e4cd3e7625735a0d7d1e/jupyter_client-8.6.3-py3-none-any.whl", hash = "sha256:e8a19cc986cc45905ac3362915f410f3af85424b4c0905e94fa5f2cb08e8f23f", size = 106105, upload-time = "2024-09-17T10:44:15.218Z" }, -] - -[[package]] -name = "jupyter-core" -version = "5.8.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "platformdirs" }, - { name = "pywin32", marker = "platform_python_implementation != 'PyPy' and sys_platform == 'win32'" }, - { name = "traitlets" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/99/1b/72906d554acfeb588332eaaa6f61577705e9ec752ddb486f302dafa292d9/jupyter_core-5.8.1.tar.gz", hash = "sha256:0a5f9706f70e64786b75acba995988915ebd4601c8a52e534a40b51c95f59941", size = 88923, upload-time = "2025-05-27T07:38:16.655Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/2f/57/6bffd4b20b88da3800c5d691e0337761576ee688eb01299eae865689d2df/jupyter_core-5.8.1-py3-none-any.whl", hash = "sha256:c28d268fc90fb53f1338ded2eb410704c5449a358406e8a948b75706e24863d0", size = 28880, upload-time = "2025-05-27T07:38:15.137Z" }, -] - -[[package]] -name = "lazy-object-proxy" -version = "1.11.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/57/f9/1f56571ed82fb324f293661690635cf42c41deb8a70a6c9e6edc3e9bb3c8/lazy_object_proxy-1.11.0.tar.gz", hash = "sha256:18874411864c9fbbbaa47f9fc1dd7aea754c86cfde21278ef427639d1dd78e9c", size = 44736, upload-time = "2025-04-16T16:53:48.482Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/51/f6/eb645ca1ff7408bb69e9b1fe692cce1d74394efdbb40d6207096c0cd8381/lazy_object_proxy-1.11.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:090935756cc041e191f22f4f9c7fd4fe9a454717067adf5b1bbd2ce3046b556e", size = 28047, upload-time = "2025-04-16T16:53:34.679Z" }, - { url = "https://files.pythonhosted.org/packages/13/9c/aabbe1e8b99b8b0edb846b49a517edd636355ac97364419d9ba05b8fa19f/lazy_object_proxy-1.11.0-cp311-cp311-win_amd64.whl", hash = "sha256:76ec715017f06410f57df442c1a8d66e6b5f7035077785b129817f5ae58810a4", size = 28440, upload-time = "2025-04-16T16:53:36.113Z" }, - { url = "https://files.pythonhosted.org/packages/4d/24/dae4759469e9cd318fef145f7cfac7318261b47b23a4701aa477b0c3b42c/lazy_object_proxy-1.11.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9a9f39098e93a63618a79eef2889ae3cf0605f676cd4797fdfd49fcd7ddc318b", size = 28142, upload-time = "2025-04-16T16:53:37.663Z" }, - { url = "https://files.pythonhosted.org/packages/de/0c/645a881f5f27952a02f24584d96f9f326748be06ded2cee25f8f8d1cd196/lazy_object_proxy-1.11.0-cp312-cp312-win_amd64.whl", hash = "sha256:ee13f67f4fcd044ef27bfccb1c93d39c100046fec1fad6e9a1fcdfd17492aeb3", size = 28380, upload-time = "2025-04-16T16:53:39.07Z" }, - { url = "https://files.pythonhosted.org/packages/a8/0f/6e004f928f7ff5abae2b8e1f68835a3870252f886e006267702e1efc5c7b/lazy_object_proxy-1.11.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:fd4c84eafd8dd15ea16f7d580758bc5c2ce1f752faec877bb2b1f9f827c329cd", size = 28149, upload-time = "2025-04-16T16:53:40.135Z" }, - { url = "https://files.pythonhosted.org/packages/63/cb/b8363110e32cc1fd82dc91296315f775d37a39df1c1cfa976ec1803dac89/lazy_object_proxy-1.11.0-cp313-cp313-win_amd64.whl", hash = "sha256:d2503427bda552d3aefcac92f81d9e7ca631e680a2268cbe62cd6a58de6409b7", size = 28389, upload-time = "2025-04-16T16:53:43.612Z" }, - { url = "https://files.pythonhosted.org/packages/7b/89/68c50fcfd81e11480cd8ee7f654c9bd790a9053b9a0efe9983d46106f6a9/lazy_object_proxy-1.11.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:0613116156801ab3fccb9e2b05ed83b08ea08c2517fdc6c6bc0d4697a1a376e3", size = 28777, upload-time = "2025-04-16T16:53:41.371Z" }, - { url = "https://files.pythonhosted.org/packages/39/d0/7e967689e24de8ea6368ec33295f9abc94b9f3f0cd4571bfe148dc432190/lazy_object_proxy-1.11.0-cp313-cp313t-win_amd64.whl", hash = "sha256:bb03c507d96b65f617a6337dedd604399d35face2cdf01526b913fb50c4cb6e8", size = 29598, upload-time = "2025-04-16T16:53:42.513Z" }, - { url = "https://files.pythonhosted.org/packages/e7/1e/fb441c07b6662ec1fc92b249225ba6e6e5221b05623cb0131d082f782edc/lazy_object_proxy-1.11.0-py3-none-any.whl", hash = "sha256:a56a5093d433341ff7da0e89f9b486031ccd222ec8e52ec84d0ec1cdc819674b", size = 16635, upload-time = "2025-04-16T16:53:47.198Z" }, -] - -[[package]] -name = "markdown-it-py" -version = "3.0.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "mdurl" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/38/71/3b932df36c1a044d397a1f92d1cf91ee0a503d91e470cbd670aa66b07ed0/markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb", size = 74596, upload-time = "2023-06-03T06:41:14.443Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/42/d7/1ec15b46af6af88f19b8e5ffea08fa375d433c998b8a7639e76935c14f1f/markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1", size = 87528, upload-time = "2023-06-03T06:41:11.019Z" }, -] - -[[package]] -name = "markupsafe" -version = "3.0.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b2/97/5d42485e71dfc078108a86d6de8fa46db44a1a9295e89c5d6d4a06e23a62/markupsafe-3.0.2.tar.gz", hash = "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0", size = 20537, upload-time = "2024-10-18T15:21:54.129Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/6b/28/bbf83e3f76936960b850435576dd5e67034e200469571be53f69174a2dfd/MarkupSafe-3.0.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9025b4018f3a1314059769c7bf15441064b2207cb3f065e6ea1e7359cb46db9d", size = 14353, upload-time = "2024-10-18T15:21:02.187Z" }, - { url = "https://files.pythonhosted.org/packages/6c/30/316d194b093cde57d448a4c3209f22e3046c5bb2fb0820b118292b334be7/MarkupSafe-3.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:93335ca3812df2f366e80509ae119189886b0f3c2b81325d39efdb84a1e2ae93", size = 12392, upload-time = "2024-10-18T15:21:02.941Z" }, - { url = "https://files.pythonhosted.org/packages/f2/96/9cdafba8445d3a53cae530aaf83c38ec64c4d5427d975c974084af5bc5d2/MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2cb8438c3cbb25e220c2ab33bb226559e7afb3baec11c4f218ffa7308603c832", size = 23984, upload-time = "2024-10-18T15:21:03.953Z" }, - { url = "https://files.pythonhosted.org/packages/f1/a4/aefb044a2cd8d7334c8a47d3fb2c9f328ac48cb349468cc31c20b539305f/MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a123e330ef0853c6e822384873bef7507557d8e4a082961e1defa947aa59ba84", size = 23120, upload-time = "2024-10-18T15:21:06.495Z" }, - { url = "https://files.pythonhosted.org/packages/8d/21/5e4851379f88f3fad1de30361db501300d4f07bcad047d3cb0449fc51f8c/MarkupSafe-3.0.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e084f686b92e5b83186b07e8a17fc09e38fff551f3602b249881fec658d3eca", size = 23032, upload-time = "2024-10-18T15:21:07.295Z" }, - { url = "https://files.pythonhosted.org/packages/00/7b/e92c64e079b2d0d7ddf69899c98842f3f9a60a1ae72657c89ce2655c999d/MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d8213e09c917a951de9d09ecee036d5c7d36cb6cb7dbaece4c71a60d79fb9798", size = 24057, upload-time = "2024-10-18T15:21:08.073Z" }, - { url = "https://files.pythonhosted.org/packages/f9/ac/46f960ca323037caa0a10662ef97d0a4728e890334fc156b9f9e52bcc4ca/MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:5b02fb34468b6aaa40dfc198d813a641e3a63b98c2b05a16b9f80b7ec314185e", size = 23359, upload-time = "2024-10-18T15:21:09.318Z" }, - { url = "https://files.pythonhosted.org/packages/69/84/83439e16197337b8b14b6a5b9c2105fff81d42c2a7c5b58ac7b62ee2c3b1/MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0bff5e0ae4ef2e1ae4fdf2dfd5b76c75e5c2fa4132d05fc1b0dabcd20c7e28c4", size = 23306, upload-time = "2024-10-18T15:21:10.185Z" }, - { url = "https://files.pythonhosted.org/packages/9a/34/a15aa69f01e2181ed8d2b685c0d2f6655d5cca2c4db0ddea775e631918cd/MarkupSafe-3.0.2-cp311-cp311-win32.whl", hash = "sha256:6c89876f41da747c8d3677a2b540fb32ef5715f97b66eeb0c6b66f5e3ef6f59d", size = 15094, upload-time = "2024-10-18T15:21:11.005Z" }, - { url = "https://files.pythonhosted.org/packages/da/b8/3a3bd761922d416f3dc5d00bfbed11f66b1ab89a0c2b6e887240a30b0f6b/MarkupSafe-3.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:70a87b411535ccad5ef2f1df5136506a10775d267e197e4cf531ced10537bd6b", size = 15521, upload-time = "2024-10-18T15:21:12.911Z" }, - { url = "https://files.pythonhosted.org/packages/22/09/d1f21434c97fc42f09d290cbb6350d44eb12f09cc62c9476effdb33a18aa/MarkupSafe-3.0.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf", size = 14274, upload-time = "2024-10-18T15:21:13.777Z" }, - { url = "https://files.pythonhosted.org/packages/6b/b0/18f76bba336fa5aecf79d45dcd6c806c280ec44538b3c13671d49099fdd0/MarkupSafe-3.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225", size = 12348, upload-time = "2024-10-18T15:21:14.822Z" }, - { url = "https://files.pythonhosted.org/packages/e0/25/dd5c0f6ac1311e9b40f4af06c78efde0f3b5cbf02502f8ef9501294c425b/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028", size = 24149, upload-time = "2024-10-18T15:21:15.642Z" }, - { url = "https://files.pythonhosted.org/packages/f3/f0/89e7aadfb3749d0f52234a0c8c7867877876e0a20b60e2188e9850794c17/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8", size = 23118, upload-time = "2024-10-18T15:21:17.133Z" }, - { url = "https://files.pythonhosted.org/packages/d5/da/f2eeb64c723f5e3777bc081da884b414671982008c47dcc1873d81f625b6/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c", size = 22993, upload-time = "2024-10-18T15:21:18.064Z" }, - { url = "https://files.pythonhosted.org/packages/da/0e/1f32af846df486dce7c227fe0f2398dc7e2e51d4a370508281f3c1c5cddc/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557", size = 24178, upload-time = "2024-10-18T15:21:18.859Z" }, - { url = "https://files.pythonhosted.org/packages/c4/f6/bb3ca0532de8086cbff5f06d137064c8410d10779c4c127e0e47d17c0b71/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22", size = 23319, upload-time = "2024-10-18T15:21:19.671Z" }, - { url = "https://files.pythonhosted.org/packages/a2/82/8be4c96ffee03c5b4a034e60a31294daf481e12c7c43ab8e34a1453ee48b/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48", size = 23352, upload-time = "2024-10-18T15:21:20.971Z" }, - { url = "https://files.pythonhosted.org/packages/51/ae/97827349d3fcffee7e184bdf7f41cd6b88d9919c80f0263ba7acd1bbcb18/MarkupSafe-3.0.2-cp312-cp312-win32.whl", hash = "sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30", size = 15097, upload-time = "2024-10-18T15:21:22.646Z" }, - { url = "https://files.pythonhosted.org/packages/c1/80/a61f99dc3a936413c3ee4e1eecac96c0da5ed07ad56fd975f1a9da5bc630/MarkupSafe-3.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87", size = 15601, upload-time = "2024-10-18T15:21:23.499Z" }, - { url = "https://files.pythonhosted.org/packages/83/0e/67eb10a7ecc77a0c2bbe2b0235765b98d164d81600746914bebada795e97/MarkupSafe-3.0.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd", size = 14274, upload-time = "2024-10-18T15:21:24.577Z" }, - { url = "https://files.pythonhosted.org/packages/2b/6d/9409f3684d3335375d04e5f05744dfe7e9f120062c9857df4ab490a1031a/MarkupSafe-3.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430", size = 12352, upload-time = "2024-10-18T15:21:25.382Z" }, - { url = "https://files.pythonhosted.org/packages/d2/f5/6eadfcd3885ea85fe2a7c128315cc1bb7241e1987443d78c8fe712d03091/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094", size = 24122, upload-time = "2024-10-18T15:21:26.199Z" }, - { url = "https://files.pythonhosted.org/packages/0c/91/96cf928db8236f1bfab6ce15ad070dfdd02ed88261c2afafd4b43575e9e9/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396", size = 23085, upload-time = "2024-10-18T15:21:27.029Z" }, - { url = "https://files.pythonhosted.org/packages/c2/cf/c9d56af24d56ea04daae7ac0940232d31d5a8354f2b457c6d856b2057d69/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79", size = 22978, upload-time = "2024-10-18T15:21:27.846Z" }, - { url = "https://files.pythonhosted.org/packages/2a/9f/8619835cd6a711d6272d62abb78c033bda638fdc54c4e7f4272cf1c0962b/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a", size = 24208, upload-time = "2024-10-18T15:21:28.744Z" }, - { url = "https://files.pythonhosted.org/packages/f9/bf/176950a1792b2cd2102b8ffeb5133e1ed984547b75db47c25a67d3359f77/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca", size = 23357, upload-time = "2024-10-18T15:21:29.545Z" }, - { url = "https://files.pythonhosted.org/packages/ce/4f/9a02c1d335caabe5c4efb90e1b6e8ee944aa245c1aaaab8e8a618987d816/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c", size = 23344, upload-time = "2024-10-18T15:21:30.366Z" }, - { url = "https://files.pythonhosted.org/packages/ee/55/c271b57db36f748f0e04a759ace9f8f759ccf22b4960c270c78a394f58be/MarkupSafe-3.0.2-cp313-cp313-win32.whl", hash = "sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1", size = 15101, upload-time = "2024-10-18T15:21:31.207Z" }, - { url = "https://files.pythonhosted.org/packages/29/88/07df22d2dd4df40aba9f3e402e6dc1b8ee86297dddbad4872bd5e7b0094f/MarkupSafe-3.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f", size = 15603, upload-time = "2024-10-18T15:21:32.032Z" }, - { url = "https://files.pythonhosted.org/packages/62/6a/8b89d24db2d32d433dffcd6a8779159da109842434f1dd2f6e71f32f738c/MarkupSafe-3.0.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c", size = 14510, upload-time = "2024-10-18T15:21:33.625Z" }, - { url = "https://files.pythonhosted.org/packages/7a/06/a10f955f70a2e5a9bf78d11a161029d278eeacbd35ef806c3fd17b13060d/MarkupSafe-3.0.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb", size = 12486, upload-time = "2024-10-18T15:21:34.611Z" }, - { url = "https://files.pythonhosted.org/packages/34/cf/65d4a571869a1a9078198ca28f39fba5fbb910f952f9dbc5220afff9f5e6/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c", size = 25480, upload-time = "2024-10-18T15:21:35.398Z" }, - { url = "https://files.pythonhosted.org/packages/0c/e3/90e9651924c430b885468b56b3d597cabf6d72be4b24a0acd1fa0e12af67/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d", size = 23914, upload-time = "2024-10-18T15:21:36.231Z" }, - { url = "https://files.pythonhosted.org/packages/66/8c/6c7cf61f95d63bb866db39085150df1f2a5bd3335298f14a66b48e92659c/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe", size = 23796, upload-time = "2024-10-18T15:21:37.073Z" }, - { url = "https://files.pythonhosted.org/packages/bb/35/cbe9238ec3f47ac9a7c8b3df7a808e7cb50fe149dc7039f5f454b3fba218/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5", size = 25473, upload-time = "2024-10-18T15:21:37.932Z" }, - { url = "https://files.pythonhosted.org/packages/e6/32/7621a4382488aa283cc05e8984a9c219abad3bca087be9ec77e89939ded9/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a", size = 24114, upload-time = "2024-10-18T15:21:39.799Z" }, - { url = "https://files.pythonhosted.org/packages/0d/80/0985960e4b89922cb5a0bac0ed39c5b96cbc1a536a99f30e8c220a996ed9/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9", size = 24098, upload-time = "2024-10-18T15:21:40.813Z" }, - { url = "https://files.pythonhosted.org/packages/82/78/fedb03c7d5380df2427038ec8d973587e90561b2d90cd472ce9254cf348b/MarkupSafe-3.0.2-cp313-cp313t-win32.whl", hash = "sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6", size = 15208, upload-time = "2024-10-18T15:21:41.814Z" }, - { url = "https://files.pythonhosted.org/packages/4f/65/6079a46068dfceaeabb5dcad6d674f5f5c61a6fa5673746f42a9f4c233b3/MarkupSafe-3.0.2-cp313-cp313t-win_amd64.whl", hash = "sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f", size = 15739, upload-time = "2024-10-18T15:21:42.784Z" }, -] - -[[package]] -name = "matplotlib-inline" -version = "0.1.7" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "traitlets" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/99/5b/a36a337438a14116b16480db471ad061c36c3694df7c2084a0da7ba538b7/matplotlib_inline-0.1.7.tar.gz", hash = "sha256:8423b23ec666be3d16e16b60bdd8ac4e86e840ebd1dd11a30b9f117f2fa0ab90", size = 8159, upload-time = "2024-04-15T13:44:44.803Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/8f/8e/9ad090d3553c280a8060fbf6e24dc1c0c29704ee7d1c372f0c174aa59285/matplotlib_inline-0.1.7-py3-none-any.whl", hash = "sha256:df192d39a4ff8f21b1895d72e6a13f5fcc5099f00fa84384e0ea28c2cc0653ca", size = 9899, upload-time = "2024-04-15T13:44:43.265Z" }, -] - -[[package]] -name = "mdurl" -version = "0.1.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d6/54/cfe61301667036ec958cb99bd3efefba235e65cdeb9c84d24a8293ba1d90/mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba", size = 8729, upload-time = "2022-08-14T12:40:10.846Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979, upload-time = "2022-08-14T12:40:09.779Z" }, -] - -[[package]] -name = "moto" -version = "5.1.9" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "boto3" }, - { name = "botocore" }, - { name = "cryptography" }, - { name = "jinja2" }, - { name = "python-dateutil" }, - { name = "requests" }, - { name = "responses" }, - { name = "werkzeug" }, - { name = "xmltodict" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/33/62/767e0f65066489b50580a25182025fec19825cbed499ae2044da1e779ed6/moto-5.1.9.tar.gz", hash = "sha256:0c4f0387b06b5d24c0ce90f8f89f31a565cc05789189c5d59b5df02594f2e371", size = 7041662, upload-time = "2025-07-28T19:24:48.773Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/4e/0b/fd37926e3fd597df879d7c360f1641850023d30b1d67ba6686f4e33ab1fb/moto-5.1.9-py3-none-any.whl", hash = "sha256:e9ba7e4764a6088ccc34e3cc846ae719861ca202409fa865573de40a3e805b9b", size = 5216109, upload-time = "2025-07-28T19:24:45.997Z" }, -] - -[package.optional-dependencies] -s3 = [ - { name = "py-partiql-parser" }, - { name = "pyyaml" }, -] -server = [ - { name = "antlr4-python3-runtime" }, - { name = "aws-xray-sdk" }, - { name = "cfn-lint" }, - { name = "docker" }, - { name = "flask" }, - { name = "flask-cors" }, - { name = "graphql-core" }, - { name = "joserfc" }, - { name = "jsonpath-ng" }, - { name = "openapi-spec-validator" }, - { name = "py-partiql-parser" }, - { name = "pyparsing" }, - { name = "pyyaml" }, - { name = "setuptools" }, -] - -[[package]] -name = "mpmath" -version = "1.3.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e0/47/dd32fa426cc72114383ac549964eecb20ecfd886d1e5ccf5340b55b02f57/mpmath-1.3.0.tar.gz", hash = "sha256:7a28eb2a9774d00c7bc92411c19a89209d5da7c4c9a9e227be8330a23a25b91f", size = 508106, upload-time = "2023-03-07T16:47:11.061Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/43/e3/7d92a15f894aa0c9c4b49b8ee9ac9850d6e63b03c9c32c0367a13ae62209/mpmath-1.3.0-py3-none-any.whl", hash = "sha256:a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c", size = 536198, upload-time = "2023-03-07T16:47:09.197Z" }, -] - -[[package]] -name = "msgpack" -version = "1.1.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/45/b1/ea4f68038a18c77c9467400d166d74c4ffa536f34761f7983a104357e614/msgpack-1.1.1.tar.gz", hash = "sha256:77b79ce34a2bdab2594f490c8e80dd62a02d650b91a75159a63ec413b8d104cd", size = 173555, upload-time = "2025-06-13T06:52:51.324Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/7f/83/97f24bf9848af23fe2ba04380388216defc49a8af6da0c28cc636d722502/msgpack-1.1.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:71ef05c1726884e44f8b1d1773604ab5d4d17729d8491403a705e649116c9558", size = 82728, upload-time = "2025-06-13T06:51:50.68Z" }, - { url = "https://files.pythonhosted.org/packages/aa/7f/2eaa388267a78401f6e182662b08a588ef4f3de6f0eab1ec09736a7aaa2b/msgpack-1.1.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:36043272c6aede309d29d56851f8841ba907a1a3d04435e43e8a19928e243c1d", size = 79279, upload-time = "2025-06-13T06:51:51.72Z" }, - { url = "https://files.pythonhosted.org/packages/f8/46/31eb60f4452c96161e4dfd26dbca562b4ec68c72e4ad07d9566d7ea35e8a/msgpack-1.1.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a32747b1b39c3ac27d0670122b57e6e57f28eefb725e0b625618d1b59bf9d1e0", size = 423859, upload-time = "2025-06-13T06:51:52.749Z" }, - { url = "https://files.pythonhosted.org/packages/45/16/a20fa8c32825cc7ae8457fab45670c7a8996d7746ce80ce41cc51e3b2bd7/msgpack-1.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8a8b10fdb84a43e50d38057b06901ec9da52baac6983d3f709d8507f3889d43f", size = 429975, upload-time = "2025-06-13T06:51:53.97Z" }, - { url = "https://files.pythonhosted.org/packages/86/ea/6c958e07692367feeb1a1594d35e22b62f7f476f3c568b002a5ea09d443d/msgpack-1.1.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ba0c325c3f485dc54ec298d8b024e134acf07c10d494ffa24373bea729acf704", size = 413528, upload-time = "2025-06-13T06:51:55.507Z" }, - { url = "https://files.pythonhosted.org/packages/75/05/ac84063c5dae79722bda9f68b878dc31fc3059adb8633c79f1e82c2cd946/msgpack-1.1.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:88daaf7d146e48ec71212ce21109b66e06a98e5e44dca47d853cbfe171d6c8d2", size = 413338, upload-time = "2025-06-13T06:51:57.023Z" }, - { url = "https://files.pythonhosted.org/packages/69/e8/fe86b082c781d3e1c09ca0f4dacd457ede60a13119b6ce939efe2ea77b76/msgpack-1.1.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:d8b55ea20dc59b181d3f47103f113e6f28a5e1c89fd5b67b9140edb442ab67f2", size = 422658, upload-time = "2025-06-13T06:51:58.419Z" }, - { url = "https://files.pythonhosted.org/packages/3b/2b/bafc9924df52d8f3bb7c00d24e57be477f4d0f967c0a31ef5e2225e035c7/msgpack-1.1.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4a28e8072ae9779f20427af07f53bbb8b4aa81151054e882aee333b158da8752", size = 427124, upload-time = "2025-06-13T06:51:59.969Z" }, - { url = "https://files.pythonhosted.org/packages/a2/3b/1f717e17e53e0ed0b68fa59e9188f3f610c79d7151f0e52ff3cd8eb6b2dc/msgpack-1.1.1-cp311-cp311-win32.whl", hash = "sha256:7da8831f9a0fdb526621ba09a281fadc58ea12701bc709e7b8cbc362feabc295", size = 65016, upload-time = "2025-06-13T06:52:01.294Z" }, - { url = "https://files.pythonhosted.org/packages/48/45/9d1780768d3b249accecc5a38c725eb1e203d44a191f7b7ff1941f7df60c/msgpack-1.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:5fd1b58e1431008a57247d6e7cc4faa41c3607e8e7d4aaf81f7c29ea013cb458", size = 72267, upload-time = "2025-06-13T06:52:02.568Z" }, - { url = "https://files.pythonhosted.org/packages/e3/26/389b9c593eda2b8551b2e7126ad3a06af6f9b44274eb3a4f054d48ff7e47/msgpack-1.1.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:ae497b11f4c21558d95de9f64fff7053544f4d1a17731c866143ed6bb4591238", size = 82359, upload-time = "2025-06-13T06:52:03.909Z" }, - { url = "https://files.pythonhosted.org/packages/ab/65/7d1de38c8a22cf8b1551469159d4b6cf49be2126adc2482de50976084d78/msgpack-1.1.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:33be9ab121df9b6b461ff91baac6f2731f83d9b27ed948c5b9d1978ae28bf157", size = 79172, upload-time = "2025-06-13T06:52:05.246Z" }, - { url = "https://files.pythonhosted.org/packages/0f/bd/cacf208b64d9577a62c74b677e1ada005caa9b69a05a599889d6fc2ab20a/msgpack-1.1.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6f64ae8fe7ffba251fecb8408540c34ee9df1c26674c50c4544d72dbf792e5ce", size = 425013, upload-time = "2025-06-13T06:52:06.341Z" }, - { url = "https://files.pythonhosted.org/packages/4d/ec/fd869e2567cc9c01278a736cfd1697941ba0d4b81a43e0aa2e8d71dab208/msgpack-1.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a494554874691720ba5891c9b0b39474ba43ffb1aaf32a5dac874effb1619e1a", size = 426905, upload-time = "2025-06-13T06:52:07.501Z" }, - { url = "https://files.pythonhosted.org/packages/55/2a/35860f33229075bce803a5593d046d8b489d7ba2fc85701e714fc1aaf898/msgpack-1.1.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cb643284ab0ed26f6957d969fe0dd8bb17beb567beb8998140b5e38a90974f6c", size = 407336, upload-time = "2025-06-13T06:52:09.047Z" }, - { url = "https://files.pythonhosted.org/packages/8c/16/69ed8f3ada150bf92745fb4921bd621fd2cdf5a42e25eb50bcc57a5328f0/msgpack-1.1.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d275a9e3c81b1093c060c3837e580c37f47c51eca031f7b5fb76f7b8470f5f9b", size = 409485, upload-time = "2025-06-13T06:52:10.382Z" }, - { url = "https://files.pythonhosted.org/packages/c6/b6/0c398039e4c6d0b2e37c61d7e0e9d13439f91f780686deb8ee64ecf1ae71/msgpack-1.1.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:4fd6b577e4541676e0cc9ddc1709d25014d3ad9a66caa19962c4f5de30fc09ef", size = 412182, upload-time = "2025-06-13T06:52:11.644Z" }, - { url = "https://files.pythonhosted.org/packages/b8/d0/0cf4a6ecb9bc960d624c93effaeaae75cbf00b3bc4a54f35c8507273cda1/msgpack-1.1.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:bb29aaa613c0a1c40d1af111abf025f1732cab333f96f285d6a93b934738a68a", size = 419883, upload-time = "2025-06-13T06:52:12.806Z" }, - { url = "https://files.pythonhosted.org/packages/62/83/9697c211720fa71a2dfb632cad6196a8af3abea56eece220fde4674dc44b/msgpack-1.1.1-cp312-cp312-win32.whl", hash = "sha256:870b9a626280c86cff9c576ec0d9cbcc54a1e5ebda9cd26dab12baf41fee218c", size = 65406, upload-time = "2025-06-13T06:52:14.271Z" }, - { url = "https://files.pythonhosted.org/packages/c0/23/0abb886e80eab08f5e8c485d6f13924028602829f63b8f5fa25a06636628/msgpack-1.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:5692095123007180dca3e788bb4c399cc26626da51629a31d40207cb262e67f4", size = 72558, upload-time = "2025-06-13T06:52:15.252Z" }, - { url = "https://files.pythonhosted.org/packages/a1/38/561f01cf3577430b59b340b51329803d3a5bf6a45864a55f4ef308ac11e3/msgpack-1.1.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:3765afa6bd4832fc11c3749be4ba4b69a0e8d7b728f78e68120a157a4c5d41f0", size = 81677, upload-time = "2025-06-13T06:52:16.64Z" }, - { url = "https://files.pythonhosted.org/packages/09/48/54a89579ea36b6ae0ee001cba8c61f776451fad3c9306cd80f5b5c55be87/msgpack-1.1.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:8ddb2bcfd1a8b9e431c8d6f4f7db0773084e107730ecf3472f1dfe9ad583f3d9", size = 78603, upload-time = "2025-06-13T06:52:17.843Z" }, - { url = "https://files.pythonhosted.org/packages/a0/60/daba2699b308e95ae792cdc2ef092a38eb5ee422f9d2fbd4101526d8a210/msgpack-1.1.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:196a736f0526a03653d829d7d4c5500a97eea3648aebfd4b6743875f28aa2af8", size = 420504, upload-time = "2025-06-13T06:52:18.982Z" }, - { url = "https://files.pythonhosted.org/packages/20/22/2ebae7ae43cd8f2debc35c631172ddf14e2a87ffcc04cf43ff9df9fff0d3/msgpack-1.1.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d592d06e3cc2f537ceeeb23d38799c6ad83255289bb84c2e5792e5a8dea268a", size = 423749, upload-time = "2025-06-13T06:52:20.211Z" }, - { url = "https://files.pythonhosted.org/packages/40/1b/54c08dd5452427e1179a40b4b607e37e2664bca1c790c60c442c8e972e47/msgpack-1.1.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4df2311b0ce24f06ba253fda361f938dfecd7b961576f9be3f3fbd60e87130ac", size = 404458, upload-time = "2025-06-13T06:52:21.429Z" }, - { url = "https://files.pythonhosted.org/packages/2e/60/6bb17e9ffb080616a51f09928fdd5cac1353c9becc6c4a8abd4e57269a16/msgpack-1.1.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e4141c5a32b5e37905b5940aacbc59739f036930367d7acce7a64e4dec1f5e0b", size = 405976, upload-time = "2025-06-13T06:52:22.995Z" }, - { url = "https://files.pythonhosted.org/packages/ee/97/88983e266572e8707c1f4b99c8fd04f9eb97b43f2db40e3172d87d8642db/msgpack-1.1.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:b1ce7f41670c5a69e1389420436f41385b1aa2504c3b0c30620764b15dded2e7", size = 408607, upload-time = "2025-06-13T06:52:24.152Z" }, - { url = "https://files.pythonhosted.org/packages/bc/66/36c78af2efaffcc15a5a61ae0df53a1d025f2680122e2a9eb8442fed3ae4/msgpack-1.1.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4147151acabb9caed4e474c3344181e91ff7a388b888f1e19ea04f7e73dc7ad5", size = 424172, upload-time = "2025-06-13T06:52:25.704Z" }, - { url = "https://files.pythonhosted.org/packages/8c/87/a75eb622b555708fe0427fab96056d39d4c9892b0c784b3a721088c7ee37/msgpack-1.1.1-cp313-cp313-win32.whl", hash = "sha256:500e85823a27d6d9bba1d057c871b4210c1dd6fb01fbb764e37e4e8847376323", size = 65347, upload-time = "2025-06-13T06:52:26.846Z" }, - { url = "https://files.pythonhosted.org/packages/ca/91/7dc28d5e2a11a5ad804cf2b7f7a5fcb1eb5a4966d66a5d2b41aee6376543/msgpack-1.1.1-cp313-cp313-win_amd64.whl", hash = "sha256:6d489fba546295983abd142812bda76b57e33d0b9f5d5b71c09a583285506f69", size = 72341, upload-time = "2025-06-13T06:52:27.835Z" }, -] - -[[package]] -name = "multidict" -version = "6.6.3" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/3d/2c/5dad12e82fbdf7470f29bff2171484bf07cb3b16ada60a6589af8f376440/multidict-6.6.3.tar.gz", hash = "sha256:798a9eb12dab0a6c2e29c1de6f3468af5cb2da6053a20dfa3344907eed0937cc", size = 101006, upload-time = "2025-06-30T15:53:46.929Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/08/f0/1a39863ced51f639c81a5463fbfa9eb4df59c20d1a8769ab9ef4ca57ae04/multidict-6.6.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:18f4eba0cbac3546b8ae31e0bbc55b02c801ae3cbaf80c247fcdd89b456ff58c", size = 76445, upload-time = "2025-06-30T15:51:24.01Z" }, - { url = "https://files.pythonhosted.org/packages/c9/0e/a7cfa451c7b0365cd844e90b41e21fab32edaa1e42fc0c9f68461ce44ed7/multidict-6.6.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ef43b5dd842382329e4797c46f10748d8c2b6e0614f46b4afe4aee9ac33159df", size = 44610, upload-time = "2025-06-30T15:51:25.158Z" }, - { url = "https://files.pythonhosted.org/packages/c6/bb/a14a4efc5ee748cc1904b0748be278c31b9295ce5f4d2ef66526f410b94d/multidict-6.6.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:bf9bd1fd5eec01494e0f2e8e446a74a85d5e49afb63d75a9934e4a5423dba21d", size = 44267, upload-time = "2025-06-30T15:51:26.326Z" }, - { url = "https://files.pythonhosted.org/packages/c2/f8/410677d563c2d55e063ef74fe578f9d53fe6b0a51649597a5861f83ffa15/multidict-6.6.3-cp311-cp311-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:5bd8d6f793a787153956cd35e24f60485bf0651c238e207b9a54f7458b16d539", size = 230004, upload-time = "2025-06-30T15:51:27.491Z" }, - { url = "https://files.pythonhosted.org/packages/fd/df/2b787f80059314a98e1ec6a4cc7576244986df3e56b3c755e6fc7c99e038/multidict-6.6.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1bf99b4daf908c73856bd87ee0a2499c3c9a3d19bb04b9c6025e66af3fd07462", size = 247196, upload-time = "2025-06-30T15:51:28.762Z" }, - { url = "https://files.pythonhosted.org/packages/05/f2/f9117089151b9a8ab39f9019620d10d9718eec2ac89e7ca9d30f3ec78e96/multidict-6.6.3-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:0b9e59946b49dafaf990fd9c17ceafa62976e8471a14952163d10a7a630413a9", size = 225337, upload-time = "2025-06-30T15:51:30.025Z" }, - { url = "https://files.pythonhosted.org/packages/93/2d/7115300ec5b699faa152c56799b089a53ed69e399c3c2d528251f0aeda1a/multidict-6.6.3-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e2db616467070d0533832d204c54eea6836a5e628f2cb1e6dfd8cd6ba7277cb7", size = 257079, upload-time = "2025-06-30T15:51:31.716Z" }, - { url = "https://files.pythonhosted.org/packages/15/ea/ff4bab367623e39c20d3b07637225c7688d79e4f3cc1f3b9f89867677f9a/multidict-6.6.3-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:7394888236621f61dcdd25189b2768ae5cc280f041029a5bcf1122ac63df79f9", size = 255461, upload-time = "2025-06-30T15:51:33.029Z" }, - { url = "https://files.pythonhosted.org/packages/74/07/2c9246cda322dfe08be85f1b8739646f2c4c5113a1422d7a407763422ec4/multidict-6.6.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f114d8478733ca7388e7c7e0ab34b72547476b97009d643644ac33d4d3fe1821", size = 246611, upload-time = "2025-06-30T15:51:34.47Z" }, - { url = "https://files.pythonhosted.org/packages/a8/62/279c13d584207d5697a752a66ffc9bb19355a95f7659140cb1b3cf82180e/multidict-6.6.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:cdf22e4db76d323bcdc733514bf732e9fb349707c98d341d40ebcc6e9318ef3d", size = 243102, upload-time = "2025-06-30T15:51:36.525Z" }, - { url = "https://files.pythonhosted.org/packages/69/cc/e06636f48c6d51e724a8bc8d9e1db5f136fe1df066d7cafe37ef4000f86a/multidict-6.6.3-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:e995a34c3d44ab511bfc11aa26869b9d66c2d8c799fa0e74b28a473a692532d6", size = 238693, upload-time = "2025-06-30T15:51:38.278Z" }, - { url = "https://files.pythonhosted.org/packages/89/a4/66c9d8fb9acf3b226cdd468ed009537ac65b520aebdc1703dd6908b19d33/multidict-6.6.3-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:766a4a5996f54361d8d5a9050140aa5362fe48ce51c755a50c0bc3706460c430", size = 246582, upload-time = "2025-06-30T15:51:39.709Z" }, - { url = "https://files.pythonhosted.org/packages/cf/01/c69e0317be556e46257826d5449feb4e6aa0d18573e567a48a2c14156f1f/multidict-6.6.3-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:3893a0d7d28a7fe6ca7a1f760593bc13038d1d35daf52199d431b61d2660602b", size = 253355, upload-time = "2025-06-30T15:51:41.013Z" }, - { url = "https://files.pythonhosted.org/packages/c0/da/9cc1da0299762d20e626fe0042e71b5694f9f72d7d3f9678397cbaa71b2b/multidict-6.6.3-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:934796c81ea996e61914ba58064920d6cad5d99140ac3167901eb932150e2e56", size = 247774, upload-time = "2025-06-30T15:51:42.291Z" }, - { url = "https://files.pythonhosted.org/packages/e6/91/b22756afec99cc31105ddd4a52f95ab32b1a4a58f4d417979c570c4a922e/multidict-6.6.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9ed948328aec2072bc00f05d961ceadfd3e9bfc2966c1319aeaf7b7c21219183", size = 242275, upload-time = "2025-06-30T15:51:43.642Z" }, - { url = "https://files.pythonhosted.org/packages/be/f1/adcc185b878036a20399d5be5228f3cbe7f823d78985d101d425af35c800/multidict-6.6.3-cp311-cp311-win32.whl", hash = "sha256:9f5b28c074c76afc3e4c610c488e3493976fe0e596dd3db6c8ddfbb0134dcac5", size = 41290, upload-time = "2025-06-30T15:51:45.264Z" }, - { url = "https://files.pythonhosted.org/packages/e0/d4/27652c1c6526ea6b4f5ddd397e93f4232ff5de42bea71d339bc6a6cc497f/multidict-6.6.3-cp311-cp311-win_amd64.whl", hash = "sha256:bc7f6fbc61b1c16050a389c630da0b32fc6d4a3d191394ab78972bf5edc568c2", size = 45942, upload-time = "2025-06-30T15:51:46.377Z" }, - { url = "https://files.pythonhosted.org/packages/16/18/23f4932019804e56d3c2413e237f866444b774b0263bcb81df2fdecaf593/multidict-6.6.3-cp311-cp311-win_arm64.whl", hash = "sha256:d4e47d8faffaae822fb5cba20937c048d4f734f43572e7079298a6c39fb172cb", size = 42880, upload-time = "2025-06-30T15:51:47.561Z" }, - { url = "https://files.pythonhosted.org/packages/0e/a0/6b57988ea102da0623ea814160ed78d45a2645e4bbb499c2896d12833a70/multidict-6.6.3-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:056bebbeda16b2e38642d75e9e5310c484b7c24e3841dc0fb943206a72ec89d6", size = 76514, upload-time = "2025-06-30T15:51:48.728Z" }, - { url = "https://files.pythonhosted.org/packages/07/7a/d1e92665b0850c6c0508f101f9cf0410c1afa24973e1115fe9c6a185ebf7/multidict-6.6.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:e5f481cccb3c5c5e5de5d00b5141dc589c1047e60d07e85bbd7dea3d4580d63f", size = 45394, upload-time = "2025-06-30T15:51:49.986Z" }, - { url = "https://files.pythonhosted.org/packages/52/6f/dd104490e01be6ef8bf9573705d8572f8c2d2c561f06e3826b081d9e6591/multidict-6.6.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:10bea2ee839a759ee368b5a6e47787f399b41e70cf0c20d90dfaf4158dfb4e55", size = 43590, upload-time = "2025-06-30T15:51:51.331Z" }, - { url = "https://files.pythonhosted.org/packages/44/fe/06e0e01b1b0611e6581b7fd5a85b43dacc08b6cea3034f902f383b0873e5/multidict-6.6.3-cp312-cp312-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:2334cfb0fa9549d6ce2c21af2bfbcd3ac4ec3646b1b1581c88e3e2b1779ec92b", size = 237292, upload-time = "2025-06-30T15:51:52.584Z" }, - { url = "https://files.pythonhosted.org/packages/ce/71/4f0e558fb77696b89c233c1ee2d92f3e1d5459070a0e89153c9e9e804186/multidict-6.6.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b8fee016722550a2276ca2cb5bb624480e0ed2bd49125b2b73b7010b9090e888", size = 258385, upload-time = "2025-06-30T15:51:53.913Z" }, - { url = "https://files.pythonhosted.org/packages/e3/25/cca0e68228addad24903801ed1ab42e21307a1b4b6dd2cf63da5d3ae082a/multidict-6.6.3-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:e5511cb35f5c50a2db21047c875eb42f308c5583edf96bd8ebf7d770a9d68f6d", size = 242328, upload-time = "2025-06-30T15:51:55.672Z" }, - { url = "https://files.pythonhosted.org/packages/6e/a3/46f2d420d86bbcb8fe660b26a10a219871a0fbf4d43cb846a4031533f3e0/multidict-6.6.3-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:712b348f7f449948e0a6c4564a21c7db965af900973a67db432d724619b3c680", size = 268057, upload-time = "2025-06-30T15:51:57.037Z" }, - { url = "https://files.pythonhosted.org/packages/9e/73/1c743542fe00794a2ec7466abd3f312ccb8fad8dff9f36d42e18fb1ec33e/multidict-6.6.3-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:e4e15d2138ee2694e038e33b7c3da70e6b0ad8868b9f8094a72e1414aeda9c1a", size = 269341, upload-time = "2025-06-30T15:51:59.111Z" }, - { url = "https://files.pythonhosted.org/packages/a4/11/6ec9dcbe2264b92778eeb85407d1df18812248bf3506a5a1754bc035db0c/multidict-6.6.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8df25594989aebff8a130f7899fa03cbfcc5d2b5f4a461cf2518236fe6f15961", size = 256081, upload-time = "2025-06-30T15:52:00.533Z" }, - { url = "https://files.pythonhosted.org/packages/9b/2b/631b1e2afeb5f1696846d747d36cda075bfdc0bc7245d6ba5c319278d6c4/multidict-6.6.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:159ca68bfd284a8860f8d8112cf0521113bffd9c17568579e4d13d1f1dc76b65", size = 253581, upload-time = "2025-06-30T15:52:02.43Z" }, - { url = "https://files.pythonhosted.org/packages/bf/0e/7e3b93f79efeb6111d3bf9a1a69e555ba1d07ad1c11bceb56b7310d0d7ee/multidict-6.6.3-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:e098c17856a8c9ade81b4810888c5ad1914099657226283cab3062c0540b0643", size = 250750, upload-time = "2025-06-30T15:52:04.26Z" }, - { url = "https://files.pythonhosted.org/packages/ad/9e/086846c1d6601948e7de556ee464a2d4c85e33883e749f46b9547d7b0704/multidict-6.6.3-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:67c92ed673049dec52d7ed39f8cf9ebbadf5032c774058b4406d18c8f8fe7063", size = 251548, upload-time = "2025-06-30T15:52:06.002Z" }, - { url = "https://files.pythonhosted.org/packages/8c/7b/86ec260118e522f1a31550e87b23542294880c97cfbf6fb18cc67b044c66/multidict-6.6.3-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:bd0578596e3a835ef451784053cfd327d607fc39ea1a14812139339a18a0dbc3", size = 262718, upload-time = "2025-06-30T15:52:07.707Z" }, - { url = "https://files.pythonhosted.org/packages/8c/bd/22ce8f47abb0be04692c9fc4638508b8340987b18691aa7775d927b73f72/multidict-6.6.3-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:346055630a2df2115cd23ae271910b4cae40f4e336773550dca4889b12916e75", size = 259603, upload-time = "2025-06-30T15:52:09.58Z" }, - { url = "https://files.pythonhosted.org/packages/07/9c/91b7ac1691be95cd1f4a26e36a74b97cda6aa9820632d31aab4410f46ebd/multidict-6.6.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:555ff55a359302b79de97e0468e9ee80637b0de1fce77721639f7cd9440b3a10", size = 251351, upload-time = "2025-06-30T15:52:10.947Z" }, - { url = "https://files.pythonhosted.org/packages/6f/5c/4d7adc739884f7a9fbe00d1eac8c034023ef8bad71f2ebe12823ca2e3649/multidict-6.6.3-cp312-cp312-win32.whl", hash = "sha256:73ab034fb8d58ff85c2bcbadc470efc3fafeea8affcf8722855fb94557f14cc5", size = 41860, upload-time = "2025-06-30T15:52:12.334Z" }, - { url = "https://files.pythonhosted.org/packages/6a/a3/0fbc7afdf7cb1aa12a086b02959307848eb6bcc8f66fcb66c0cb57e2a2c1/multidict-6.6.3-cp312-cp312-win_amd64.whl", hash = "sha256:04cbcce84f63b9af41bad04a54d4cc4e60e90c35b9e6ccb130be2d75b71f8c17", size = 45982, upload-time = "2025-06-30T15:52:13.6Z" }, - { url = "https://files.pythonhosted.org/packages/b8/95/8c825bd70ff9b02462dc18d1295dd08d3e9e4eb66856d292ffa62cfe1920/multidict-6.6.3-cp312-cp312-win_arm64.whl", hash = "sha256:0f1130b896ecb52d2a1e615260f3ea2af55fa7dc3d7c3003ba0c3121a759b18b", size = 43210, upload-time = "2025-06-30T15:52:14.893Z" }, - { url = "https://files.pythonhosted.org/packages/52/1d/0bebcbbb4f000751fbd09957257903d6e002943fc668d841a4cf2fb7f872/multidict-6.6.3-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:540d3c06d48507357a7d57721e5094b4f7093399a0106c211f33540fdc374d55", size = 75843, upload-time = "2025-06-30T15:52:16.155Z" }, - { url = "https://files.pythonhosted.org/packages/07/8f/cbe241b0434cfe257f65c2b1bcf9e8d5fb52bc708c5061fb29b0fed22bdf/multidict-6.6.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:9c19cea2a690f04247d43f366d03e4eb110a0dc4cd1bbeee4d445435428ed35b", size = 45053, upload-time = "2025-06-30T15:52:17.429Z" }, - { url = "https://files.pythonhosted.org/packages/32/d2/0b3b23f9dbad5b270b22a3ac3ea73ed0a50ef2d9a390447061178ed6bdb8/multidict-6.6.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:7af039820cfd00effec86bda5d8debef711a3e86a1d3772e85bea0f243a4bd65", size = 43273, upload-time = "2025-06-30T15:52:19.346Z" }, - { url = "https://files.pythonhosted.org/packages/fd/fe/6eb68927e823999e3683bc49678eb20374ba9615097d085298fd5b386564/multidict-6.6.3-cp313-cp313-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:500b84f51654fdc3944e936f2922114349bf8fdcac77c3092b03449f0e5bc2b3", size = 237124, upload-time = "2025-06-30T15:52:20.773Z" }, - { url = "https://files.pythonhosted.org/packages/e7/ab/320d8507e7726c460cb77117848b3834ea0d59e769f36fdae495f7669929/multidict-6.6.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f3fc723ab8a5c5ed6c50418e9bfcd8e6dceba6c271cee6728a10a4ed8561520c", size = 256892, upload-time = "2025-06-30T15:52:22.242Z" }, - { url = "https://files.pythonhosted.org/packages/76/60/38ee422db515ac69834e60142a1a69111ac96026e76e8e9aa347fd2e4591/multidict-6.6.3-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:94c47ea3ade005b5976789baaed66d4de4480d0a0bf31cef6edaa41c1e7b56a6", size = 240547, upload-time = "2025-06-30T15:52:23.736Z" }, - { url = "https://files.pythonhosted.org/packages/27/fb/905224fde2dff042b030c27ad95a7ae744325cf54b890b443d30a789b80e/multidict-6.6.3-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:dbc7cf464cc6d67e83e136c9f55726da3a30176f020a36ead246eceed87f1cd8", size = 266223, upload-time = "2025-06-30T15:52:25.185Z" }, - { url = "https://files.pythonhosted.org/packages/76/35/dc38ab361051beae08d1a53965e3e1a418752fc5be4d3fb983c5582d8784/multidict-6.6.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:900eb9f9da25ada070f8ee4a23f884e0ee66fe4e1a38c3af644256a508ad81ca", size = 267262, upload-time = "2025-06-30T15:52:26.969Z" }, - { url = "https://files.pythonhosted.org/packages/1f/a3/0a485b7f36e422421b17e2bbb5a81c1af10eac1d4476f2ff92927c730479/multidict-6.6.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7c6df517cf177da5d47ab15407143a89cd1a23f8b335f3a28d57e8b0a3dbb884", size = 254345, upload-time = "2025-06-30T15:52:28.467Z" }, - { url = "https://files.pythonhosted.org/packages/b4/59/bcdd52c1dab7c0e0d75ff19cac751fbd5f850d1fc39172ce809a74aa9ea4/multidict-6.6.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4ef421045f13879e21c994b36e728d8e7d126c91a64b9185810ab51d474f27e7", size = 252248, upload-time = "2025-06-30T15:52:29.938Z" }, - { url = "https://files.pythonhosted.org/packages/bb/a4/2d96aaa6eae8067ce108d4acee6f45ced5728beda55c0f02ae1072c730d1/multidict-6.6.3-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:6c1e61bb4f80895c081790b6b09fa49e13566df8fbff817da3f85b3a8192e36b", size = 250115, upload-time = "2025-06-30T15:52:31.416Z" }, - { url = "https://files.pythonhosted.org/packages/25/d2/ed9f847fa5c7d0677d4f02ea2c163d5e48573de3f57bacf5670e43a5ffaa/multidict-6.6.3-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:e5e8523bb12d7623cd8300dbd91b9e439a46a028cd078ca695eb66ba31adee3c", size = 249649, upload-time = "2025-06-30T15:52:32.996Z" }, - { url = "https://files.pythonhosted.org/packages/1f/af/9155850372563fc550803d3f25373308aa70f59b52cff25854086ecb4a79/multidict-6.6.3-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:ef58340cc896219e4e653dade08fea5c55c6df41bcc68122e3be3e9d873d9a7b", size = 261203, upload-time = "2025-06-30T15:52:34.521Z" }, - { url = "https://files.pythonhosted.org/packages/36/2f/c6a728f699896252cf309769089568a33c6439626648843f78743660709d/multidict-6.6.3-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:fc9dc435ec8699e7b602b94fe0cd4703e69273a01cbc34409af29e7820f777f1", size = 258051, upload-time = "2025-06-30T15:52:35.999Z" }, - { url = "https://files.pythonhosted.org/packages/d0/60/689880776d6b18fa2b70f6cc74ff87dd6c6b9b47bd9cf74c16fecfaa6ad9/multidict-6.6.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9e864486ef4ab07db5e9cb997bad2b681514158d6954dd1958dfb163b83d53e6", size = 249601, upload-time = "2025-06-30T15:52:37.473Z" }, - { url = "https://files.pythonhosted.org/packages/75/5e/325b11f2222a549019cf2ef879c1f81f94a0d40ace3ef55cf529915ba6cc/multidict-6.6.3-cp313-cp313-win32.whl", hash = "sha256:5633a82fba8e841bc5c5c06b16e21529573cd654f67fd833650a215520a6210e", size = 41683, upload-time = "2025-06-30T15:52:38.927Z" }, - { url = "https://files.pythonhosted.org/packages/b1/ad/cf46e73f5d6e3c775cabd2a05976547f3f18b39bee06260369a42501f053/multidict-6.6.3-cp313-cp313-win_amd64.whl", hash = "sha256:e93089c1570a4ad54c3714a12c2cef549dc9d58e97bcded193d928649cab78e9", size = 45811, upload-time = "2025-06-30T15:52:40.207Z" }, - { url = "https://files.pythonhosted.org/packages/c5/c9/2e3fe950db28fb7c62e1a5f46e1e38759b072e2089209bc033c2798bb5ec/multidict-6.6.3-cp313-cp313-win_arm64.whl", hash = "sha256:c60b401f192e79caec61f166da9c924e9f8bc65548d4246842df91651e83d600", size = 43056, upload-time = "2025-06-30T15:52:41.575Z" }, - { url = "https://files.pythonhosted.org/packages/3a/58/aaf8114cf34966e084a8cc9517771288adb53465188843d5a19862cb6dc3/multidict-6.6.3-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:02fd8f32d403a6ff13864b0851f1f523d4c988051eea0471d4f1fd8010f11134", size = 82811, upload-time = "2025-06-30T15:52:43.281Z" }, - { url = "https://files.pythonhosted.org/packages/71/af/5402e7b58a1f5b987a07ad98f2501fdba2a4f4b4c30cf114e3ce8db64c87/multidict-6.6.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:f3aa090106b1543f3f87b2041eef3c156c8da2aed90c63a2fbed62d875c49c37", size = 48304, upload-time = "2025-06-30T15:52:45.026Z" }, - { url = "https://files.pythonhosted.org/packages/39/65/ab3c8cafe21adb45b24a50266fd747147dec7847425bc2a0f6934b3ae9ce/multidict-6.6.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:e924fb978615a5e33ff644cc42e6aa241effcf4f3322c09d4f8cebde95aff5f8", size = 46775, upload-time = "2025-06-30T15:52:46.459Z" }, - { url = "https://files.pythonhosted.org/packages/49/ba/9fcc1b332f67cc0c0c8079e263bfab6660f87fe4e28a35921771ff3eea0d/multidict-6.6.3-cp313-cp313t-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:b9fe5a0e57c6dbd0e2ce81ca66272282c32cd11d31658ee9553849d91289e1c1", size = 229773, upload-time = "2025-06-30T15:52:47.88Z" }, - { url = "https://files.pythonhosted.org/packages/a4/14/0145a251f555f7c754ce2dcbcd012939bbd1f34f066fa5d28a50e722a054/multidict-6.6.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b24576f208793ebae00280c59927c3b7c2a3b1655e443a25f753c4611bc1c373", size = 250083, upload-time = "2025-06-30T15:52:49.366Z" }, - { url = "https://files.pythonhosted.org/packages/9e/d4/d5c0bd2bbb173b586c249a151a26d2fb3ec7d53c96e42091c9fef4e1f10c/multidict-6.6.3-cp313-cp313t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:135631cb6c58eac37d7ac0df380294fecdc026b28837fa07c02e459c7fb9c54e", size = 228980, upload-time = "2025-06-30T15:52:50.903Z" }, - { url = "https://files.pythonhosted.org/packages/21/32/c9a2d8444a50ec48c4733ccc67254100c10e1c8ae8e40c7a2d2183b59b97/multidict-6.6.3-cp313-cp313t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:274d416b0df887aef98f19f21578653982cfb8a05b4e187d4a17103322eeaf8f", size = 257776, upload-time = "2025-06-30T15:52:52.764Z" }, - { url = "https://files.pythonhosted.org/packages/68/d0/14fa1699f4ef629eae08ad6201c6b476098f5efb051b296f4c26be7a9fdf/multidict-6.6.3-cp313-cp313t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:e252017a817fad7ce05cafbe5711ed40faeb580e63b16755a3a24e66fa1d87c0", size = 256882, upload-time = "2025-06-30T15:52:54.596Z" }, - { url = "https://files.pythonhosted.org/packages/da/88/84a27570fbe303c65607d517a5f147cd2fc046c2d1da02b84b17b9bdc2aa/multidict-6.6.3-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2e4cc8d848cd4fe1cdee28c13ea79ab0ed37fc2e89dd77bac86a2e7959a8c3bc", size = 247816, upload-time = "2025-06-30T15:52:56.175Z" }, - { url = "https://files.pythonhosted.org/packages/1c/60/dca352a0c999ce96a5d8b8ee0b2b9f729dcad2e0b0c195f8286269a2074c/multidict-6.6.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9e236a7094b9c4c1b7585f6b9cca34b9d833cf079f7e4c49e6a4a6ec9bfdc68f", size = 245341, upload-time = "2025-06-30T15:52:57.752Z" }, - { url = "https://files.pythonhosted.org/packages/50/ef/433fa3ed06028f03946f3993223dada70fb700f763f70c00079533c34578/multidict-6.6.3-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:e0cb0ab69915c55627c933f0b555a943d98ba71b4d1c57bc0d0a66e2567c7471", size = 235854, upload-time = "2025-06-30T15:52:59.74Z" }, - { url = "https://files.pythonhosted.org/packages/1b/1f/487612ab56fbe35715320905215a57fede20de7db40a261759690dc80471/multidict-6.6.3-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:81ef2f64593aba09c5212a3d0f8c906a0d38d710a011f2f42759704d4557d3f2", size = 243432, upload-time = "2025-06-30T15:53:01.602Z" }, - { url = "https://files.pythonhosted.org/packages/da/6f/ce8b79de16cd885c6f9052c96a3671373d00c59b3ee635ea93e6e81b8ccf/multidict-6.6.3-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:b9cbc60010de3562545fa198bfc6d3825df430ea96d2cc509c39bd71e2e7d648", size = 252731, upload-time = "2025-06-30T15:53:03.517Z" }, - { url = "https://files.pythonhosted.org/packages/bb/fe/a2514a6aba78e5abefa1624ca85ae18f542d95ac5cde2e3815a9fbf369aa/multidict-6.6.3-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:70d974eaaa37211390cd02ef93b7e938de564bbffa866f0b08d07e5e65da783d", size = 247086, upload-time = "2025-06-30T15:53:05.48Z" }, - { url = "https://files.pythonhosted.org/packages/8c/22/b788718d63bb3cce752d107a57c85fcd1a212c6c778628567c9713f9345a/multidict-6.6.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:3713303e4a6663c6d01d648a68f2848701001f3390a030edaaf3fc949c90bf7c", size = 243338, upload-time = "2025-06-30T15:53:07.522Z" }, - { url = "https://files.pythonhosted.org/packages/22/d6/fdb3d0670819f2228f3f7d9af613d5e652c15d170c83e5f1c94fbc55a25b/multidict-6.6.3-cp313-cp313t-win32.whl", hash = "sha256:639ecc9fe7cd73f2495f62c213e964843826f44505a3e5d82805aa85cac6f89e", size = 47812, upload-time = "2025-06-30T15:53:09.263Z" }, - { url = "https://files.pythonhosted.org/packages/b6/d6/a9d2c808f2c489ad199723197419207ecbfbc1776f6e155e1ecea9c883aa/multidict-6.6.3-cp313-cp313t-win_amd64.whl", hash = "sha256:9f97e181f344a0ef3881b573d31de8542cc0dbc559ec68c8f8b5ce2c2e91646d", size = 53011, upload-time = "2025-06-30T15:53:11.038Z" }, - { url = "https://files.pythonhosted.org/packages/f2/40/b68001cba8188dd267590a111f9661b6256debc327137667e832bf5d66e8/multidict-6.6.3-cp313-cp313t-win_arm64.whl", hash = "sha256:ce8b7693da41a3c4fde5871c738a81490cea5496c671d74374c8ab889e1834fb", size = 45254, upload-time = "2025-06-30T15:53:12.421Z" }, - { url = "https://files.pythonhosted.org/packages/d8/30/9aec301e9772b098c1f5c0ca0279237c9766d94b97802e9888010c64b0ed/multidict-6.6.3-py3-none-any.whl", hash = "sha256:8db10f29c7541fc5da4defd8cd697e1ca429db743fa716325f236079b96f775a", size = 12313, upload-time = "2025-06-30T15:53:45.437Z" }, -] - -[[package]] -name = "mypy" -version = "1.17.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "mypy-extensions" }, - { name = "pathspec" }, - { name = "typing-extensions" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/8e/22/ea637422dedf0bf36f3ef238eab4e455e2a0dcc3082b5cc067615347ab8e/mypy-1.17.1.tar.gz", hash = "sha256:25e01ec741ab5bb3eec8ba9cdb0f769230368a22c959c4937360efb89b7e9f01", size = 3352570, upload-time = "2025-07-31T07:54:19.204Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/46/cf/eadc80c4e0a70db1c08921dcc220357ba8ab2faecb4392e3cebeb10edbfa/mypy-1.17.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ad37544be07c5d7fba814eb370e006df58fed8ad1ef33ed1649cb1889ba6ff58", size = 10921009, upload-time = "2025-07-31T07:53:23.037Z" }, - { url = "https://files.pythonhosted.org/packages/5d/c1/c869d8c067829ad30d9bdae051046561552516cfb3a14f7f0347b7d973ee/mypy-1.17.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:064e2ff508e5464b4bd807a7c1625bc5047c5022b85c70f030680e18f37273a5", size = 10047482, upload-time = "2025-07-31T07:53:26.151Z" }, - { url = "https://files.pythonhosted.org/packages/98/b9/803672bab3fe03cee2e14786ca056efda4bb511ea02dadcedde6176d06d0/mypy-1.17.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:70401bbabd2fa1aa7c43bb358f54037baf0586f41e83b0ae67dd0534fc64edfd", size = 11832883, upload-time = "2025-07-31T07:53:47.948Z" }, - { url = "https://files.pythonhosted.org/packages/88/fb/fcdac695beca66800918c18697b48833a9a6701de288452b6715a98cfee1/mypy-1.17.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e92bdc656b7757c438660f775f872a669b8ff374edc4d18277d86b63edba6b8b", size = 12566215, upload-time = "2025-07-31T07:54:04.031Z" }, - { url = "https://files.pythonhosted.org/packages/7f/37/a932da3d3dace99ee8eb2043b6ab03b6768c36eb29a02f98f46c18c0da0e/mypy-1.17.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:c1fdf4abb29ed1cb091cf432979e162c208a5ac676ce35010373ff29247bcad5", size = 12751956, upload-time = "2025-07-31T07:53:36.263Z" }, - { url = "https://files.pythonhosted.org/packages/8c/cf/6438a429e0f2f5cab8bc83e53dbebfa666476f40ee322e13cac5e64b79e7/mypy-1.17.1-cp311-cp311-win_amd64.whl", hash = "sha256:ff2933428516ab63f961644bc49bc4cbe42bbffb2cd3b71cc7277c07d16b1a8b", size = 9507307, upload-time = "2025-07-31T07:53:59.734Z" }, - { url = "https://files.pythonhosted.org/packages/17/a2/7034d0d61af8098ec47902108553122baa0f438df8a713be860f7407c9e6/mypy-1.17.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:69e83ea6553a3ba79c08c6e15dbd9bfa912ec1e493bf75489ef93beb65209aeb", size = 11086295, upload-time = "2025-07-31T07:53:28.124Z" }, - { url = "https://files.pythonhosted.org/packages/14/1f/19e7e44b594d4b12f6ba8064dbe136505cec813549ca3e5191e40b1d3cc2/mypy-1.17.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1b16708a66d38abb1e6b5702f5c2c87e133289da36f6a1d15f6a5221085c6403", size = 10112355, upload-time = "2025-07-31T07:53:21.121Z" }, - { url = "https://files.pythonhosted.org/packages/5b/69/baa33927e29e6b4c55d798a9d44db5d394072eef2bdc18c3e2048c9ed1e9/mypy-1.17.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:89e972c0035e9e05823907ad5398c5a73b9f47a002b22359b177d40bdaee7056", size = 11875285, upload-time = "2025-07-31T07:53:55.293Z" }, - { url = "https://files.pythonhosted.org/packages/90/13/f3a89c76b0a41e19490b01e7069713a30949d9a6c147289ee1521bcea245/mypy-1.17.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:03b6d0ed2b188e35ee6d5c36b5580cffd6da23319991c49ab5556c023ccf1341", size = 12737895, upload-time = "2025-07-31T07:53:43.623Z" }, - { url = "https://files.pythonhosted.org/packages/23/a1/c4ee79ac484241301564072e6476c5a5be2590bc2e7bfd28220033d2ef8f/mypy-1.17.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c837b896b37cd103570d776bda106eabb8737aa6dd4f248451aecf53030cdbeb", size = 12931025, upload-time = "2025-07-31T07:54:17.125Z" }, - { url = "https://files.pythonhosted.org/packages/89/b8/7409477be7919a0608900e6320b155c72caab4fef46427c5cc75f85edadd/mypy-1.17.1-cp312-cp312-win_amd64.whl", hash = "sha256:665afab0963a4b39dff7c1fa563cc8b11ecff7910206db4b2e64dd1ba25aed19", size = 9584664, upload-time = "2025-07-31T07:54:12.842Z" }, - { url = "https://files.pythonhosted.org/packages/5b/82/aec2fc9b9b149f372850291827537a508d6c4d3664b1750a324b91f71355/mypy-1.17.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:93378d3203a5c0800c6b6d850ad2f19f7a3cdf1a3701d3416dbf128805c6a6a7", size = 11075338, upload-time = "2025-07-31T07:53:38.873Z" }, - { url = "https://files.pythonhosted.org/packages/07/ac/ee93fbde9d2242657128af8c86f5d917cd2887584cf948a8e3663d0cd737/mypy-1.17.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:15d54056f7fe7a826d897789f53dd6377ec2ea8ba6f776dc83c2902b899fee81", size = 10113066, upload-time = "2025-07-31T07:54:14.707Z" }, - { url = "https://files.pythonhosted.org/packages/5a/68/946a1e0be93f17f7caa56c45844ec691ca153ee8b62f21eddda336a2d203/mypy-1.17.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:209a58fed9987eccc20f2ca94afe7257a8f46eb5df1fb69958650973230f91e6", size = 11875473, upload-time = "2025-07-31T07:53:14.504Z" }, - { url = "https://files.pythonhosted.org/packages/9f/0f/478b4dce1cb4f43cf0f0d00fba3030b21ca04a01b74d1cd272a528cf446f/mypy-1.17.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:099b9a5da47de9e2cb5165e581f158e854d9e19d2e96b6698c0d64de911dd849", size = 12744296, upload-time = "2025-07-31T07:53:03.896Z" }, - { url = "https://files.pythonhosted.org/packages/ca/70/afa5850176379d1b303f992a828de95fc14487429a7139a4e0bdd17a8279/mypy-1.17.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fa6ffadfbe6994d724c5a1bb6123a7d27dd68fc9c059561cd33b664a79578e14", size = 12914657, upload-time = "2025-07-31T07:54:08.576Z" }, - { url = "https://files.pythonhosted.org/packages/53/f9/4a83e1c856a3d9c8f6edaa4749a4864ee98486e9b9dbfbc93842891029c2/mypy-1.17.1-cp313-cp313-win_amd64.whl", hash = "sha256:9a2b7d9180aed171f033c9f2fc6c204c1245cf60b0cb61cf2e7acc24eea78e0a", size = 9593320, upload-time = "2025-07-31T07:53:01.341Z" }, - { url = "https://files.pythonhosted.org/packages/38/56/79c2fac86da57c7d8c48622a05873eaab40b905096c33597462713f5af90/mypy-1.17.1-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:15a83369400454c41ed3a118e0cc58bd8123921a602f385cb6d6ea5df050c733", size = 11040037, upload-time = "2025-07-31T07:54:10.942Z" }, - { url = "https://files.pythonhosted.org/packages/4d/c3/adabe6ff53638e3cad19e3547268482408323b1e68bf082c9119000cd049/mypy-1.17.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:55b918670f692fc9fba55c3298d8a3beae295c5cded0a55dccdc5bbead814acd", size = 10131550, upload-time = "2025-07-31T07:53:41.307Z" }, - { url = "https://files.pythonhosted.org/packages/b8/c5/2e234c22c3bdeb23a7817af57a58865a39753bde52c74e2c661ee0cfc640/mypy-1.17.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:62761474061feef6f720149d7ba876122007ddc64adff5ba6f374fda35a018a0", size = 11872963, upload-time = "2025-07-31T07:53:16.878Z" }, - { url = "https://files.pythonhosted.org/packages/ab/26/c13c130f35ca8caa5f2ceab68a247775648fdcd6c9a18f158825f2bc2410/mypy-1.17.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c49562d3d908fd49ed0938e5423daed8d407774a479b595b143a3d7f87cdae6a", size = 12710189, upload-time = "2025-07-31T07:54:01.962Z" }, - { url = "https://files.pythonhosted.org/packages/82/df/c7d79d09f6de8383fe800521d066d877e54d30b4fb94281c262be2df84ef/mypy-1.17.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:397fba5d7616a5bc60b45c7ed204717eaddc38f826e3645402c426057ead9a91", size = 12900322, upload-time = "2025-07-31T07:53:10.551Z" }, - { url = "https://files.pythonhosted.org/packages/b8/98/3d5a48978b4f708c55ae832619addc66d677f6dc59f3ebad71bae8285ca6/mypy-1.17.1-cp314-cp314-win_amd64.whl", hash = "sha256:9d6b20b97d373f41617bd0708fd46aa656059af57f2ef72aa8c7d6a2b73b74ed", size = 9751879, upload-time = "2025-07-31T07:52:56.683Z" }, - { url = "https://files.pythonhosted.org/packages/1d/f3/8fcd2af0f5b806f6cf463efaffd3c9548a28f84220493ecd38d127b6b66d/mypy-1.17.1-py3-none-any.whl", hash = "sha256:a9f52c0351c21fe24c21d8c0eb1f62967b262d6729393397b6f443c3b773c3b9", size = 2283411, upload-time = "2025-07-31T07:53:24.664Z" }, -] - -[[package]] -name = "mypy-extensions" -version = "1.1.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a2/6e/371856a3fb9d31ca8dac321cda606860fa4548858c0cc45d9d1d4ca2628b/mypy_extensions-1.1.0.tar.gz", hash = "sha256:52e68efc3284861e772bbcd66823fde5ae21fd2fdb51c62a211403730b916558", size = 6343, upload-time = "2025-04-22T14:54:24.164Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/79/7b/2c79738432f5c924bef5071f933bcc9efd0473bac3b4aa584a6f7c1c8df8/mypy_extensions-1.1.0-py3-none-any.whl", hash = "sha256:1be4cccdb0f2482337c4743e60421de3a356cd97508abadd57d47403e94f5505", size = 4963, upload-time = "2025-04-22T14:54:22.983Z" }, -] - -[[package]] -name = "nest-asyncio" -version = "1.6.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/83/f8/51569ac65d696c8ecbee95938f89d4abf00f47d58d48f6fbabfe8f0baefe/nest_asyncio-1.6.0.tar.gz", hash = "sha256:6f172d5449aca15afd6c646851f4e31e02c598d553a667e38cafa997cfec55fe", size = 7418, upload-time = "2024-01-21T14:25:19.227Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a0/c4/c2971a3ba4c6103a3d10c4b0f24f461ddc027f0f09763220cf35ca1401b3/nest_asyncio-1.6.0-py3-none-any.whl", hash = "sha256:87af6efd6b5e897c81050477ef65c62e2b2f35d51703cae01aff2905b1852e1c", size = 5195, upload-time = "2024-01-21T14:25:17.223Z" }, -] - -[[package]] -name = "networkx" -version = "3.5" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/6c/4f/ccdb8ad3a38e583f214547fd2f7ff1fc160c43a75af88e6aec213404b96a/networkx-3.5.tar.gz", hash = "sha256:d4c6f9cf81f52d69230866796b82afbccdec3db7ae4fbd1b65ea750feed50037", size = 2471065, upload-time = "2025-05-29T11:35:07.804Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/eb/8d/776adee7bbf76365fdd7f2552710282c79a4ead5d2a46408c9043a2b70ba/networkx-3.5-py3-none-any.whl", hash = "sha256:0030d386a9a06dee3565298b4a734b68589749a544acbb6c412dc9e2489ec6ec", size = 2034406, upload-time = "2025-05-29T11:35:04.961Z" }, -] - -[[package]] -name = "numcodecs" -version = "0.16.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "numpy" }, - { name = "typing-extensions" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/00/35/49da850ce5371da3930d099da364a73ce9ae4fc64075e521674b48f4804d/numcodecs-0.16.1.tar.gz", hash = "sha256:c47f20d656454568c6b4697ce02081e6bbb512f198738c6a56fafe8029c97fb1", size = 6268134, upload-time = "2025-05-22T13:33:04.098Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/6c/82/8d6ca1166dc9b020f383073c1c604e004f0495d243647a83e5d5fff2b7ad/numcodecs-0.16.1-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:5348a25aefbce37ea7c00c3363d36176155233c95597e5905a932e9620df960d", size = 1623980, upload-time = "2025-05-22T13:32:37.718Z" }, - { url = "https://files.pythonhosted.org/packages/aa/4e/11258b7945c6cd3579f16228c803a13291d16ef7ef46f9551008090b6763/numcodecs-0.16.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2058b0a985470809c720d2457758b61e6c9495a49d5f20dfac9b5ebabd8848eb", size = 1153826, upload-time = "2025-05-22T13:32:39.737Z" }, - { url = "https://files.pythonhosted.org/packages/a1/24/4099ccb29754fc1d2e55dbd9b540f58a24cab6e844dc996e37812c3fb79d/numcodecs-0.16.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6b216b6d7bc207b85d41fddbc25b09fd00d76e265454db6e3fb09d5da0216397", size = 8263684, upload-time = "2025-05-22T13:32:41.252Z" }, - { url = "https://files.pythonhosted.org/packages/04/e3/816a82b984dd7fb7a0afadd16842260ccfee23cc5edbda48a92649ee161b/numcodecs-0.16.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2308d56c4f84a5b942f8668b4adedd3d9cdd6a22e6e6e20768ec356c77050f38", size = 8788927, upload-time = "2025-05-22T13:32:42.905Z" }, - { url = "https://files.pythonhosted.org/packages/6f/54/dbea8b17928670412db0efb20efc087b30c2a67b84b1605fa8a136e482af/numcodecs-0.16.1-cp311-cp311-win_amd64.whl", hash = "sha256:acd8d68b4b815e62cb91e6064a53dac51ee99849350784ee16dd52cdbb4bc70f", size = 790259, upload-time = "2025-05-22T13:32:45.398Z" }, - { url = "https://files.pythonhosted.org/packages/b7/ee/e2a903c88fed347dc74c70bbd7a8dab9aa22bb0dac68c5bc6393c2e9373b/numcodecs-0.16.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:1abe0651ecb6f207656ebfc802effa55c4ae3136cf172c295a067749a2699122", size = 1663434, upload-time = "2025-05-22T13:32:47.26Z" }, - { url = "https://files.pythonhosted.org/packages/f2/f0/37819d4f6896b1ac43a164ffd3ab99d7cbf63bf63cb375fef97aedaef4f0/numcodecs-0.16.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:abb39b7102d0816c8563669cdddca40392d34d0cbf31e3e996706b244586a458", size = 1150402, upload-time = "2025-05-22T13:32:48.574Z" }, - { url = "https://files.pythonhosted.org/packages/60/3c/5059a29750305b80b7428b1e6695878dea9ea3b537d7fba57875e4bbc2c7/numcodecs-0.16.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f3359a951f8b23317f12736a7ad1e7375ec3d735465f92049c76d032ebca4c40", size = 8237455, upload-time = "2025-05-22T13:32:50.052Z" }, - { url = "https://files.pythonhosted.org/packages/1b/f5/515f98d659ab0cbe3738da153eddae22186fd38f05a808511e10f04cf679/numcodecs-0.16.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:82cc70592ec18060786b1bfa0da23afd2a7807d7975d766e626954d6628ec609", size = 8770711, upload-time = "2025-05-22T13:32:52.198Z" }, - { url = "https://files.pythonhosted.org/packages/a2/3a/9fc6104f888af11bad804ebd32dffe0bcb83337f4525b4fe5b379942fefd/numcodecs-0.16.1-cp312-cp312-win_amd64.whl", hash = "sha256:4b48ddc8a7d132b7808bc53eb2705342de5c1e39289d725f988bd143c0fd86df", size = 788701, upload-time = "2025-05-22T13:32:54.28Z" }, - { url = "https://files.pythonhosted.org/packages/5e/1e/73ffb1074f03d52cb1c4f4deaba26a2008ca45262f3622ed26dbec7a7362/numcodecs-0.16.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:2ad8ee940315f59188accfc3f2d39726a4ca0d76b49bf8d0018e121f01c49028", size = 1659453, upload-time = "2025-05-22T13:32:55.558Z" }, - { url = "https://files.pythonhosted.org/packages/42/72/5affb1ce92b7a6becee17921de7c6b521a48fa61fc3d36d9f1eea2cf83f5/numcodecs-0.16.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:179ca7bf3525a0f7379df7767d87dd495253de44597cb7e511198b28b09da633", size = 1143932, upload-time = "2025-05-22T13:32:56.908Z" }, - { url = "https://files.pythonhosted.org/packages/e3/f1/b092679d84c67c6ed62e4df5781d89bbb089f24a0df4187cbab9db51cf6b/numcodecs-0.16.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6e2babbb50bf348ae982818d5560af330eab0dcd925fb0e49509785ad57d11db", size = 8187716, upload-time = "2025-05-22T13:32:58.421Z" }, - { url = "https://files.pythonhosted.org/packages/a8/e8/86e7741adb43261aff409b53c53c8bac2797bfca055d64dd65dc731d5141/numcodecs-0.16.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a4b29d8d3284b72bfad4fb83d672a17f497ae86ee1ef8087bac7222b620d3d91", size = 8728650, upload-time = "2025-05-22T13:33:00.337Z" }, - { url = "https://files.pythonhosted.org/packages/21/03/87c5c217232aa3515d350728c6dcefca252fa582246100ef68a51fbda456/numcodecs-0.16.1-cp313-cp313-win_amd64.whl", hash = "sha256:06489635f43e1a959aea73cb830d78cf3adb07ac5f34daccb92091e4d9ac6b07", size = 785553, upload-time = "2025-05-22T13:33:02.587Z" }, -] - -[package.optional-dependencies] -crc32c = [ - { name = "crc32c" }, -] -msgpack = [ - { name = "msgpack" }, -] - -[[package]] -name = "numpy" -version = "2.3.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/37/7d/3fec4199c5ffb892bed55cff901e4f39a58c81df9c44c280499e92cad264/numpy-2.3.2.tar.gz", hash = "sha256:e0486a11ec30cdecb53f184d496d1c6a20786c81e55e41640270130056f8ee48", size = 20489306, upload-time = "2025-07-24T21:32:07.553Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/96/26/1320083986108998bd487e2931eed2aeedf914b6e8905431487543ec911d/numpy-2.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:852ae5bed3478b92f093e30f785c98e0cb62fa0a939ed057c31716e18a7a22b9", size = 21259016, upload-time = "2025-07-24T20:24:35.214Z" }, - { url = "https://files.pythonhosted.org/packages/c4/2b/792b341463fa93fc7e55abbdbe87dac316c5b8cb5e94fb7a59fb6fa0cda5/numpy-2.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7a0e27186e781a69959d0230dd9909b5e26024f8da10683bd6344baea1885168", size = 14451158, upload-time = "2025-07-24T20:24:58.397Z" }, - { url = "https://files.pythonhosted.org/packages/b7/13/e792d7209261afb0c9f4759ffef6135b35c77c6349a151f488f531d13595/numpy-2.3.2-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:f0a1a8476ad77a228e41619af2fa9505cf69df928e9aaa165746584ea17fed2b", size = 5379817, upload-time = "2025-07-24T20:25:07.746Z" }, - { url = "https://files.pythonhosted.org/packages/49/ce/055274fcba4107c022b2113a213c7287346563f48d62e8d2a5176ad93217/numpy-2.3.2-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:cbc95b3813920145032412f7e33d12080f11dc776262df1712e1638207dde9e8", size = 6913606, upload-time = "2025-07-24T20:25:18.84Z" }, - { url = "https://files.pythonhosted.org/packages/17/f2/e4d72e6bc5ff01e2ab613dc198d560714971900c03674b41947e38606502/numpy-2.3.2-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f75018be4980a7324edc5930fe39aa391d5734531b1926968605416ff58c332d", size = 14589652, upload-time = "2025-07-24T20:25:40.356Z" }, - { url = "https://files.pythonhosted.org/packages/c8/b0/fbeee3000a51ebf7222016e2939b5c5ecf8000a19555d04a18f1e02521b8/numpy-2.3.2-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:20b8200721840f5621b7bd03f8dcd78de33ec522fc40dc2641aa09537df010c3", size = 16938816, upload-time = "2025-07-24T20:26:05.721Z" }, - { url = "https://files.pythonhosted.org/packages/a9/ec/2f6c45c3484cc159621ea8fc000ac5a86f1575f090cac78ac27193ce82cd/numpy-2.3.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1f91e5c028504660d606340a084db4b216567ded1056ea2b4be4f9d10b67197f", size = 16370512, upload-time = "2025-07-24T20:26:30.545Z" }, - { url = "https://files.pythonhosted.org/packages/b5/01/dd67cf511850bd7aefd6347aaae0956ed415abea741ae107834aae7d6d4e/numpy-2.3.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:fb1752a3bb9a3ad2d6b090b88a9a0ae1cd6f004ef95f75825e2f382c183b2097", size = 18884947, upload-time = "2025-07-24T20:26:58.24Z" }, - { url = "https://files.pythonhosted.org/packages/a7/17/2cf60fd3e6a61d006778735edf67a222787a8c1a7842aed43ef96d777446/numpy-2.3.2-cp311-cp311-win32.whl", hash = "sha256:4ae6863868aaee2f57503c7a5052b3a2807cf7a3914475e637a0ecd366ced220", size = 6599494, upload-time = "2025-07-24T20:27:09.786Z" }, - { url = "https://files.pythonhosted.org/packages/d5/03/0eade211c504bda872a594f045f98ddcc6caef2b7c63610946845e304d3f/numpy-2.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:240259d6564f1c65424bcd10f435145a7644a65a6811cfc3201c4a429ba79170", size = 13087889, upload-time = "2025-07-24T20:27:29.558Z" }, - { url = "https://files.pythonhosted.org/packages/13/32/2c7979d39dafb2a25087e12310fc7f3b9d3c7d960df4f4bc97955ae0ce1d/numpy-2.3.2-cp311-cp311-win_arm64.whl", hash = "sha256:4209f874d45f921bde2cff1ffcd8a3695f545ad2ffbef6d3d3c6768162efab89", size = 10459560, upload-time = "2025-07-24T20:27:46.803Z" }, - { url = "https://files.pythonhosted.org/packages/00/6d/745dd1c1c5c284d17725e5c802ca4d45cfc6803519d777f087b71c9f4069/numpy-2.3.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:bc3186bea41fae9d8e90c2b4fb5f0a1f5a690682da79b92574d63f56b529080b", size = 20956420, upload-time = "2025-07-24T20:28:18.002Z" }, - { url = "https://files.pythonhosted.org/packages/bc/96/e7b533ea5740641dd62b07a790af5d9d8fec36000b8e2d0472bd7574105f/numpy-2.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2f4f0215edb189048a3c03bd5b19345bdfa7b45a7a6f72ae5945d2a28272727f", size = 14184660, upload-time = "2025-07-24T20:28:39.522Z" }, - { url = "https://files.pythonhosted.org/packages/2b/53/102c6122db45a62aa20d1b18c9986f67e6b97e0d6fbc1ae13e3e4c84430c/numpy-2.3.2-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:8b1224a734cd509f70816455c3cffe13a4f599b1bf7130f913ba0e2c0b2006c0", size = 5113382, upload-time = "2025-07-24T20:28:48.544Z" }, - { url = "https://files.pythonhosted.org/packages/2b/21/376257efcbf63e624250717e82b4fae93d60178f09eb03ed766dbb48ec9c/numpy-2.3.2-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:3dcf02866b977a38ba3ec10215220609ab9667378a9e2150615673f3ffd6c73b", size = 6647258, upload-time = "2025-07-24T20:28:59.104Z" }, - { url = "https://files.pythonhosted.org/packages/91/ba/f4ebf257f08affa464fe6036e13f2bf9d4642a40228781dc1235da81be9f/numpy-2.3.2-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:572d5512df5470f50ada8d1972c5f1082d9a0b7aa5944db8084077570cf98370", size = 14281409, upload-time = "2025-07-24T20:40:30.298Z" }, - { url = "https://files.pythonhosted.org/packages/59/ef/f96536f1df42c668cbacb727a8c6da7afc9c05ece6d558927fb1722693e1/numpy-2.3.2-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8145dd6d10df13c559d1e4314df29695613575183fa2e2d11fac4c208c8a1f73", size = 16641317, upload-time = "2025-07-24T20:40:56.625Z" }, - { url = "https://files.pythonhosted.org/packages/f6/a7/af813a7b4f9a42f498dde8a4c6fcbff8100eed00182cc91dbaf095645f38/numpy-2.3.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:103ea7063fa624af04a791c39f97070bf93b96d7af7eb23530cd087dc8dbe9dc", size = 16056262, upload-time = "2025-07-24T20:41:20.797Z" }, - { url = "https://files.pythonhosted.org/packages/8b/5d/41c4ef8404caaa7f05ed1cfb06afe16a25895260eacbd29b4d84dff2920b/numpy-2.3.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:fc927d7f289d14f5e037be917539620603294454130b6de200091e23d27dc9be", size = 18579342, upload-time = "2025-07-24T20:41:50.753Z" }, - { url = "https://files.pythonhosted.org/packages/a1/4f/9950e44c5a11636f4a3af6e825ec23003475cc9a466edb7a759ed3ea63bd/numpy-2.3.2-cp312-cp312-win32.whl", hash = "sha256:d95f59afe7f808c103be692175008bab926b59309ade3e6d25009e9a171f7036", size = 6320610, upload-time = "2025-07-24T20:42:01.551Z" }, - { url = "https://files.pythonhosted.org/packages/7c/2f/244643a5ce54a94f0a9a2ab578189c061e4a87c002e037b0829dd77293b6/numpy-2.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:9e196ade2400c0c737d93465327d1ae7c06c7cb8a1756121ebf54b06ca183c7f", size = 12786292, upload-time = "2025-07-24T20:42:20.738Z" }, - { url = "https://files.pythonhosted.org/packages/54/cd/7b5f49d5d78db7badab22d8323c1b6ae458fbf86c4fdfa194ab3cd4eb39b/numpy-2.3.2-cp312-cp312-win_arm64.whl", hash = "sha256:ee807923782faaf60d0d7331f5e86da7d5e3079e28b291973c545476c2b00d07", size = 10194071, upload-time = "2025-07-24T20:42:36.657Z" }, - { url = "https://files.pythonhosted.org/packages/1c/c0/c6bb172c916b00700ed3bf71cb56175fd1f7dbecebf8353545d0b5519f6c/numpy-2.3.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:c8d9727f5316a256425892b043736d63e89ed15bbfe6556c5ff4d9d4448ff3b3", size = 20949074, upload-time = "2025-07-24T20:43:07.813Z" }, - { url = "https://files.pythonhosted.org/packages/20/4e/c116466d22acaf4573e58421c956c6076dc526e24a6be0903219775d862e/numpy-2.3.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:efc81393f25f14d11c9d161e46e6ee348637c0a1e8a54bf9dedc472a3fae993b", size = 14177311, upload-time = "2025-07-24T20:43:29.335Z" }, - { url = "https://files.pythonhosted.org/packages/78/45/d4698c182895af189c463fc91d70805d455a227261d950e4e0f1310c2550/numpy-2.3.2-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:dd937f088a2df683cbb79dda9a772b62a3e5a8a7e76690612c2737f38c6ef1b6", size = 5106022, upload-time = "2025-07-24T20:43:37.999Z" }, - { url = "https://files.pythonhosted.org/packages/9f/76/3e6880fef4420179309dba72a8c11f6166c431cf6dee54c577af8906f914/numpy-2.3.2-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:11e58218c0c46c80509186e460d79fbdc9ca1eb8d8aee39d8f2dc768eb781089", size = 6640135, upload-time = "2025-07-24T20:43:49.28Z" }, - { url = "https://files.pythonhosted.org/packages/34/fa/87ff7f25b3c4ce9085a62554460b7db686fef1e0207e8977795c7b7d7ba1/numpy-2.3.2-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5ad4ebcb683a1f99f4f392cc522ee20a18b2bb12a2c1c42c3d48d5a1adc9d3d2", size = 14278147, upload-time = "2025-07-24T20:44:10.328Z" }, - { url = "https://files.pythonhosted.org/packages/1d/0f/571b2c7a3833ae419fe69ff7b479a78d313581785203cc70a8db90121b9a/numpy-2.3.2-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:938065908d1d869c7d75d8ec45f735a034771c6ea07088867f713d1cd3bbbe4f", size = 16635989, upload-time = "2025-07-24T20:44:34.88Z" }, - { url = "https://files.pythonhosted.org/packages/24/5a/84ae8dca9c9a4c592fe11340b36a86ffa9fd3e40513198daf8a97839345c/numpy-2.3.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:66459dccc65d8ec98cc7df61307b64bf9e08101f9598755d42d8ae65d9a7a6ee", size = 16053052, upload-time = "2025-07-24T20:44:58.872Z" }, - { url = "https://files.pythonhosted.org/packages/57/7c/e5725d99a9133b9813fcf148d3f858df98511686e853169dbaf63aec6097/numpy-2.3.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a7af9ed2aa9ec5950daf05bb11abc4076a108bd3c7db9aa7251d5f107079b6a6", size = 18577955, upload-time = "2025-07-24T20:45:26.714Z" }, - { url = "https://files.pythonhosted.org/packages/ae/11/7c546fcf42145f29b71e4d6f429e96d8d68e5a7ba1830b2e68d7418f0bbd/numpy-2.3.2-cp313-cp313-win32.whl", hash = "sha256:906a30249315f9c8e17b085cc5f87d3f369b35fedd0051d4a84686967bdbbd0b", size = 6311843, upload-time = "2025-07-24T20:49:24.444Z" }, - { url = "https://files.pythonhosted.org/packages/aa/6f/a428fd1cb7ed39b4280d057720fed5121b0d7754fd2a9768640160f5517b/numpy-2.3.2-cp313-cp313-win_amd64.whl", hash = "sha256:c63d95dc9d67b676e9108fe0d2182987ccb0f11933c1e8959f42fa0da8d4fa56", size = 12782876, upload-time = "2025-07-24T20:49:43.227Z" }, - { url = "https://files.pythonhosted.org/packages/65/85/4ea455c9040a12595fb6c43f2c217257c7b52dd0ba332c6a6c1d28b289fe/numpy-2.3.2-cp313-cp313-win_arm64.whl", hash = "sha256:b05a89f2fb84d21235f93de47129dd4f11c16f64c87c33f5e284e6a3a54e43f2", size = 10192786, upload-time = "2025-07-24T20:49:59.443Z" }, - { url = "https://files.pythonhosted.org/packages/80/23/8278f40282d10c3f258ec3ff1b103d4994bcad78b0cba9208317f6bb73da/numpy-2.3.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:4e6ecfeddfa83b02318f4d84acf15fbdbf9ded18e46989a15a8b6995dfbf85ab", size = 21047395, upload-time = "2025-07-24T20:45:58.821Z" }, - { url = "https://files.pythonhosted.org/packages/1f/2d/624f2ce4a5df52628b4ccd16a4f9437b37c35f4f8a50d00e962aae6efd7a/numpy-2.3.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:508b0eada3eded10a3b55725b40806a4b855961040180028f52580c4729916a2", size = 14300374, upload-time = "2025-07-24T20:46:20.207Z" }, - { url = "https://files.pythonhosted.org/packages/f6/62/ff1e512cdbb829b80a6bd08318a58698867bca0ca2499d101b4af063ee97/numpy-2.3.2-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:754d6755d9a7588bdc6ac47dc4ee97867271b17cee39cb87aef079574366db0a", size = 5228864, upload-time = "2025-07-24T20:46:30.58Z" }, - { url = "https://files.pythonhosted.org/packages/7d/8e/74bc18078fff03192d4032cfa99d5a5ca937807136d6f5790ce07ca53515/numpy-2.3.2-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:a9f66e7d2b2d7712410d3bc5684149040ef5f19856f20277cd17ea83e5006286", size = 6737533, upload-time = "2025-07-24T20:46:46.111Z" }, - { url = "https://files.pythonhosted.org/packages/19/ea/0731efe2c9073ccca5698ef6a8c3667c4cf4eea53fcdcd0b50140aba03bc/numpy-2.3.2-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:de6ea4e5a65d5a90c7d286ddff2b87f3f4ad61faa3db8dabe936b34c2275b6f8", size = 14352007, upload-time = "2025-07-24T20:47:07.1Z" }, - { url = "https://files.pythonhosted.org/packages/cf/90/36be0865f16dfed20f4bc7f75235b963d5939707d4b591f086777412ff7b/numpy-2.3.2-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a3ef07ec8cbc8fc9e369c8dcd52019510c12da4de81367d8b20bc692aa07573a", size = 16701914, upload-time = "2025-07-24T20:47:32.459Z" }, - { url = "https://files.pythonhosted.org/packages/94/30/06cd055e24cb6c38e5989a9e747042b4e723535758e6153f11afea88c01b/numpy-2.3.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:27c9f90e7481275c7800dc9c24b7cc40ace3fdb970ae4d21eaff983a32f70c91", size = 16132708, upload-time = "2025-07-24T20:47:58.129Z" }, - { url = "https://files.pythonhosted.org/packages/9a/14/ecede608ea73e58267fd7cb78f42341b3b37ba576e778a1a06baffbe585c/numpy-2.3.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:07b62978075b67eee4065b166d000d457c82a1efe726cce608b9db9dd66a73a5", size = 18651678, upload-time = "2025-07-24T20:48:25.402Z" }, - { url = "https://files.pythonhosted.org/packages/40/f3/2fe6066b8d07c3685509bc24d56386534c008b462a488b7f503ba82b8923/numpy-2.3.2-cp313-cp313t-win32.whl", hash = "sha256:c771cfac34a4f2c0de8e8c97312d07d64fd8f8ed45bc9f5726a7e947270152b5", size = 6441832, upload-time = "2025-07-24T20:48:37.181Z" }, - { url = "https://files.pythonhosted.org/packages/0b/ba/0937d66d05204d8f28630c9c60bc3eda68824abde4cf756c4d6aad03b0c6/numpy-2.3.2-cp313-cp313t-win_amd64.whl", hash = "sha256:72dbebb2dcc8305c431b2836bcc66af967df91be793d63a24e3d9b741374c450", size = 12927049, upload-time = "2025-07-24T20:48:56.24Z" }, - { url = "https://files.pythonhosted.org/packages/e9/ed/13542dd59c104d5e654dfa2ac282c199ba64846a74c2c4bcdbc3a0f75df1/numpy-2.3.2-cp313-cp313t-win_arm64.whl", hash = "sha256:72c6df2267e926a6d5286b0a6d556ebe49eae261062059317837fda12ddf0c1a", size = 10262935, upload-time = "2025-07-24T20:49:13.136Z" }, - { url = "https://files.pythonhosted.org/packages/c9/7c/7659048aaf498f7611b783e000c7268fcc4dcf0ce21cd10aad7b2e8f9591/numpy-2.3.2-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:448a66d052d0cf14ce9865d159bfc403282c9bc7bb2a31b03cc18b651eca8b1a", size = 20950906, upload-time = "2025-07-24T20:50:30.346Z" }, - { url = "https://files.pythonhosted.org/packages/80/db/984bea9d4ddf7112a04cfdfb22b1050af5757864cfffe8e09e44b7f11a10/numpy-2.3.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:546aaf78e81b4081b2eba1d105c3b34064783027a06b3ab20b6eba21fb64132b", size = 14185607, upload-time = "2025-07-24T20:50:51.923Z" }, - { url = "https://files.pythonhosted.org/packages/e4/76/b3d6f414f4eca568f469ac112a3b510938d892bc5a6c190cb883af080b77/numpy-2.3.2-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:87c930d52f45df092f7578889711a0768094debf73cfcde105e2d66954358125", size = 5114110, upload-time = "2025-07-24T20:51:01.041Z" }, - { url = "https://files.pythonhosted.org/packages/9e/d2/6f5e6826abd6bca52392ed88fe44a4b52aacb60567ac3bc86c67834c3a56/numpy-2.3.2-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:8dc082ea901a62edb8f59713c6a7e28a85daddcb67454c839de57656478f5b19", size = 6642050, upload-time = "2025-07-24T20:51:11.64Z" }, - { url = "https://files.pythonhosted.org/packages/c4/43/f12b2ade99199e39c73ad182f103f9d9791f48d885c600c8e05927865baf/numpy-2.3.2-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:af58de8745f7fa9ca1c0c7c943616c6fe28e75d0c81f5c295810e3c83b5be92f", size = 14296292, upload-time = "2025-07-24T20:51:33.488Z" }, - { url = "https://files.pythonhosted.org/packages/5d/f9/77c07d94bf110a916b17210fac38680ed8734c236bfed9982fd8524a7b47/numpy-2.3.2-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fed5527c4cf10f16c6d0b6bee1f89958bccb0ad2522c8cadc2efd318bcd545f5", size = 16638913, upload-time = "2025-07-24T20:51:58.517Z" }, - { url = "https://files.pythonhosted.org/packages/9b/d1/9d9f2c8ea399cc05cfff8a7437453bd4e7d894373a93cdc46361bbb49a7d/numpy-2.3.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:095737ed986e00393ec18ec0b21b47c22889ae4b0cd2d5e88342e08b01141f58", size = 16071180, upload-time = "2025-07-24T20:52:22.827Z" }, - { url = "https://files.pythonhosted.org/packages/4c/41/82e2c68aff2a0c9bf315e47d61951099fed65d8cb2c8d9dc388cb87e947e/numpy-2.3.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:b5e40e80299607f597e1a8a247ff8d71d79c5b52baa11cc1cce30aa92d2da6e0", size = 18576809, upload-time = "2025-07-24T20:52:51.015Z" }, - { url = "https://files.pythonhosted.org/packages/14/14/4b4fd3efb0837ed252d0f583c5c35a75121038a8c4e065f2c259be06d2d8/numpy-2.3.2-cp314-cp314-win32.whl", hash = "sha256:7d6e390423cc1f76e1b8108c9b6889d20a7a1f59d9a60cac4a050fa734d6c1e2", size = 6366410, upload-time = "2025-07-24T20:56:44.949Z" }, - { url = "https://files.pythonhosted.org/packages/11/9e/b4c24a6b8467b61aced5c8dc7dcfce23621baa2e17f661edb2444a418040/numpy-2.3.2-cp314-cp314-win_amd64.whl", hash = "sha256:b9d0878b21e3918d76d2209c924ebb272340da1fb51abc00f986c258cd5e957b", size = 12918821, upload-time = "2025-07-24T20:57:06.479Z" }, - { url = "https://files.pythonhosted.org/packages/0e/0f/0dc44007c70b1007c1cef86b06986a3812dd7106d8f946c09cfa75782556/numpy-2.3.2-cp314-cp314-win_arm64.whl", hash = "sha256:2738534837c6a1d0c39340a190177d7d66fdf432894f469728da901f8f6dc910", size = 10477303, upload-time = "2025-07-24T20:57:22.879Z" }, - { url = "https://files.pythonhosted.org/packages/8b/3e/075752b79140b78ddfc9c0a1634d234cfdbc6f9bbbfa6b7504e445ad7d19/numpy-2.3.2-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:4d002ecf7c9b53240be3bb69d80f86ddbd34078bae04d87be81c1f58466f264e", size = 21047524, upload-time = "2025-07-24T20:53:22.086Z" }, - { url = "https://files.pythonhosted.org/packages/fe/6d/60e8247564a72426570d0e0ea1151b95ce5bd2f1597bb878a18d32aec855/numpy-2.3.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:293b2192c6bcce487dbc6326de5853787f870aeb6c43f8f9c6496db5b1781e45", size = 14300519, upload-time = "2025-07-24T20:53:44.053Z" }, - { url = "https://files.pythonhosted.org/packages/4d/73/d8326c442cd428d47a067070c3ac6cc3b651a6e53613a1668342a12d4479/numpy-2.3.2-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:0a4f2021a6da53a0d580d6ef5db29947025ae8b35b3250141805ea9a32bbe86b", size = 5228972, upload-time = "2025-07-24T20:53:53.81Z" }, - { url = "https://files.pythonhosted.org/packages/34/2e/e71b2d6dad075271e7079db776196829019b90ce3ece5c69639e4f6fdc44/numpy-2.3.2-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:9c144440db4bf3bb6372d2c3e49834cc0ff7bb4c24975ab33e01199e645416f2", size = 6737439, upload-time = "2025-07-24T20:54:04.742Z" }, - { url = "https://files.pythonhosted.org/packages/15/b0/d004bcd56c2c5e0500ffc65385eb6d569ffd3363cb5e593ae742749b2daa/numpy-2.3.2-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f92d6c2a8535dc4fe4419562294ff957f83a16ebdec66df0805e473ffaad8bd0", size = 14352479, upload-time = "2025-07-24T20:54:25.819Z" }, - { url = "https://files.pythonhosted.org/packages/11/e3/285142fcff8721e0c99b51686426165059874c150ea9ab898e12a492e291/numpy-2.3.2-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cefc2219baa48e468e3db7e706305fcd0c095534a192a08f31e98d83a7d45fb0", size = 16702805, upload-time = "2025-07-24T20:54:50.814Z" }, - { url = "https://files.pythonhosted.org/packages/33/c3/33b56b0e47e604af2c7cd065edca892d180f5899599b76830652875249a3/numpy-2.3.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:76c3e9501ceb50b2ff3824c3589d5d1ab4ac857b0ee3f8f49629d0de55ecf7c2", size = 16133830, upload-time = "2025-07-24T20:55:17.306Z" }, - { url = "https://files.pythonhosted.org/packages/6e/ae/7b1476a1f4d6a48bc669b8deb09939c56dd2a439db1ab03017844374fb67/numpy-2.3.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:122bf5ed9a0221b3419672493878ba4967121514b1d7d4656a7580cd11dddcbf", size = 18652665, upload-time = "2025-07-24T20:55:46.665Z" }, - { url = "https://files.pythonhosted.org/packages/14/ba/5b5c9978c4bb161034148ade2de9db44ec316fab89ce8c400db0e0c81f86/numpy-2.3.2-cp314-cp314t-win32.whl", hash = "sha256:6f1ae3dcb840edccc45af496f312528c15b1f79ac318169d094e85e4bb35fdf1", size = 6514777, upload-time = "2025-07-24T20:55:57.66Z" }, - { url = "https://files.pythonhosted.org/packages/eb/46/3dbaf0ae7c17cdc46b9f662c56da2054887b8d9e737c1476f335c83d33db/numpy-2.3.2-cp314-cp314t-win_amd64.whl", hash = "sha256:087ffc25890d89a43536f75c5fe8770922008758e8eeeef61733957041ed2f9b", size = 13111856, upload-time = "2025-07-24T20:56:17.318Z" }, - { url = "https://files.pythonhosted.org/packages/c1/9e/1652778bce745a67b5fe05adde60ed362d38eb17d919a540e813d30f6874/numpy-2.3.2-cp314-cp314t-win_arm64.whl", hash = "sha256:092aeb3449833ea9c0bf0089d70c29ae480685dd2377ec9cdbbb620257f84631", size = 10544226, upload-time = "2025-07-24T20:56:34.509Z" }, - { url = "https://files.pythonhosted.org/packages/cf/ea/50ebc91d28b275b23b7128ef25c3d08152bc4068f42742867e07a870a42a/numpy-2.3.2-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:14a91ebac98813a49bc6aa1a0dfc09513dcec1d97eaf31ca21a87221a1cdcb15", size = 21130338, upload-time = "2025-07-24T20:57:54.37Z" }, - { url = "https://files.pythonhosted.org/packages/9f/57/cdd5eac00dd5f137277355c318a955c0d8fb8aa486020c22afd305f8b88f/numpy-2.3.2-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:71669b5daae692189540cffc4c439468d35a3f84f0c88b078ecd94337f6cb0ec", size = 14375776, upload-time = "2025-07-24T20:58:16.303Z" }, - { url = "https://files.pythonhosted.org/packages/83/85/27280c7f34fcd305c2209c0cdca4d70775e4859a9eaa92f850087f8dea50/numpy-2.3.2-pp311-pypy311_pp73-macosx_14_0_arm64.whl", hash = "sha256:69779198d9caee6e547adb933941ed7520f896fd9656834c300bdf4dd8642712", size = 5304882, upload-time = "2025-07-24T20:58:26.199Z" }, - { url = "https://files.pythonhosted.org/packages/48/b4/6500b24d278e15dd796f43824e69939d00981d37d9779e32499e823aa0aa/numpy-2.3.2-pp311-pypy311_pp73-macosx_14_0_x86_64.whl", hash = "sha256:2c3271cc4097beb5a60f010bcc1cc204b300bb3eafb4399376418a83a1c6373c", size = 6818405, upload-time = "2025-07-24T20:58:37.341Z" }, - { url = "https://files.pythonhosted.org/packages/9b/c9/142c1e03f199d202da8e980c2496213509291b6024fd2735ad28ae7065c7/numpy-2.3.2-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8446acd11fe3dc1830568c941d44449fd5cb83068e5c70bd5a470d323d448296", size = 14419651, upload-time = "2025-07-24T20:58:59.048Z" }, - { url = "https://files.pythonhosted.org/packages/8b/95/8023e87cbea31a750a6c00ff9427d65ebc5fef104a136bfa69f76266d614/numpy-2.3.2-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:aa098a5ab53fa407fded5870865c6275a5cd4101cfdef8d6fafc48286a96e981", size = 16760166, upload-time = "2025-07-24T21:28:56.38Z" }, - { url = "https://files.pythonhosted.org/packages/78/e3/6690b3f85a05506733c7e90b577e4762517404ea78bab2ca3a5cb1aeb78d/numpy-2.3.2-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:6936aff90dda378c09bea075af0d9c675fe3a977a9d2402f95a87f440f59f619", size = 12977811, upload-time = "2025-07-24T21:29:18.234Z" }, -] - -[[package]] -name = "numpydoc" -version = "1.9.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "sphinx" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/2f/19/7721093e25804cc82c7c1cdab0cce6b9343451828fc2ce249cee10646db5/numpydoc-1.9.0.tar.gz", hash = "sha256:5fec64908fe041acc4b3afc2a32c49aab1540cf581876f5563d68bb129e27c5b", size = 91451, upload-time = "2025-06-24T12:22:55.283Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/26/62/5783d8924fca72529defb2c7dbe2070d49224d2dba03a85b20b37adb24d8/numpydoc-1.9.0-py3-none-any.whl", hash = "sha256:8a2983b2d62bfd0a8c470c7caa25e7e0c3d163875cdec12a8a1034020a9d1135", size = 64871, upload-time = "2025-06-24T12:22:53.701Z" }, -] - -[[package]] -name = "obstore" -version = "0.7.3" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "typing-extensions", marker = "python_full_version < '3.13'" }, -] -wheels = [ - { url = "https://files.pythonhosted.org/packages/44/e4/722ab931b8b2544f1d60bceceaa97d22d810f588f3a26ad64997213c2c4d/obstore-0.7.3-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:65ffe43fd63c9968172bed649fcaf6345b41a124be5d34f46adb94604e9ccef8", size = 3680639, upload-time = "2025-08-01T22:37:05.531Z" }, - { url = "https://files.pythonhosted.org/packages/f9/99/7f5efcc0110144f32152b23bd284927ee3f34b28962466b81aa98f8229fb/obstore-0.7.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2947609a1fab1f9b808235a8088e7e99814fbaf3b6000833d760fd90f68fa7cd", size = 3397505, upload-time = "2025-08-01T22:37:06.745Z" }, - { url = "https://files.pythonhosted.org/packages/15/84/0b21cb4fdeb1ca8aa256acb8cccabb7f0d450a36c03655512fcda308759e/obstore-0.7.3-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:15409f75acc4e10f924fe118f7018607d6d96a72330ac4cc1663d36b7c6847b1", size = 3554635, upload-time = "2025-08-01T22:37:08.27Z" }, - { url = "https://files.pythonhosted.org/packages/e5/eb/0e9ad4d31e49f8bed3d6f482261fcde5035667330d81348cc3ff041f6ef2/obstore-0.7.3-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5224d834bbe7a9f2592b130e4ddd86340fa172e5a3a51284e706f6515d95c036", size = 3703695, upload-time = "2025-08-01T22:37:09.51Z" }, - { url = "https://files.pythonhosted.org/packages/fa/f3/49e854c782076a2877d475089eebf3556a5658df0c0544f6182203af5eab/obstore-0.7.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7b1af6c1a33d98db9954f7ceab8eb5e543aea683a79a0ffd72b6c8d176834a9b", size = 3976486, upload-time = "2025-08-01T22:37:10.777Z" }, - { url = "https://files.pythonhosted.org/packages/38/16/518e9e47f0d486821a922e82fe7b1e382f8afb62468cd3129d06937d8403/obstore-0.7.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:708c27c4e5e85799fe7a2d2ae443fbd96c2ad36b561c815a9b01b5333ab536ad", size = 4011834, upload-time = "2025-08-01T22:37:12.136Z" }, - { url = "https://files.pythonhosted.org/packages/99/f8/585e3da7d1fc09965d78763ad68063a2fd7fe114e3953af26399db196e70/obstore-0.7.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7da327920bef8bbd02445f33947487fe4e94fcb9e084c810108e88be57d0877b", size = 3809352, upload-time = "2025-08-01T22:37:13.681Z" }, - { url = "https://files.pythonhosted.org/packages/d9/a2/4fa492ae67b0354f8415fec8b8ca928e94f4e07f8a12b4d7502a856915ce/obstore-0.7.3-cp311-cp311-manylinux_2_24_aarch64.whl", hash = "sha256:8f3b23a40ad374fe7a65fab4678a9978978ec83a597156a2a9d1dbeab433a469", size = 3579895, upload-time = "2025-08-01T22:37:15.243Z" }, - { url = "https://files.pythonhosted.org/packages/b4/35/a8034730b2f7d71268f5685fefc5b37eee589d404e5face79bc38ecd1698/obstore-0.7.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:9b3e7d0c7e85e4f67e479f7efab5dea26ceaace10897d639d38f77831ef0cdaf", size = 3742907, upload-time = "2025-08-01T22:37:16.429Z" }, - { url = "https://files.pythonhosted.org/packages/96/ca/3174ccc5d3d0f91ff1b6f0f258c795671d5a3bb64f8d72937b44733bdc78/obstore-0.7.3-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:dfee24c5e9d5b7e0f43e4bbf8cc15069e5c60bfdb86873ce97c0eb487afa5da8", size = 3778325, upload-time = "2025-08-01T22:37:17.669Z" }, - { url = "https://files.pythonhosted.org/packages/53/5c/0cba21607f2a294fc0b6fab3a4ddf5eafe94de384c0212cea6977a4bc3ee/obstore-0.7.3-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:99e187cee4a6e13605886b906b34fec7ae9902dd25b1e9aafae863a9d55c6e47", size = 3784247, upload-time = "2025-08-01T22:37:18.954Z" }, - { url = "https://files.pythonhosted.org/packages/f8/87/886402bf40643163a8042da602cdc8ce3b9355062e7c6930af8e5567f6d3/obstore-0.7.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a5de3b0859512b9ddbf57ac34db96ad41fb85fc9597e422916044d1bf550427d", size = 3983087, upload-time = "2025-08-01T22:37:20.194Z" }, - { url = "https://files.pythonhosted.org/packages/69/d5/95b9bfdbb449795d1a6e312dd6ac4469b31b3df5807d85321d6e6762f264/obstore-0.7.3-cp311-cp311-win_amd64.whl", hash = "sha256:35fdd1cd8856984de1b5a11fced83f6fd6623eb459736e57b9975400ff5baf5a", size = 4038939, upload-time = "2025-08-01T22:37:21.411Z" }, - { url = "https://files.pythonhosted.org/packages/98/29/1ba71bad5aa3cd01b6849490f4e8457b4253c60322b70014c5155bce0549/obstore-0.7.3-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:6cbe5dde68bf6ab5a88f3bb467ca8f123bcce3efc03e22fd8339688559d36199", size = 3676670, upload-time = "2025-08-01T22:37:22.904Z" }, - { url = "https://files.pythonhosted.org/packages/26/5f/abea8b6261c0117ff3f7b1da34185806cc7fb0958dd2eec5f25b43d4134c/obstore-0.7.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a6db23cbcb3aec10e09a31fd0883950cb9b7f77f4fcf1fb0e8a276e1d1961bf3", size = 3387707, upload-time = "2025-08-01T22:37:24.804Z" }, - { url = "https://files.pythonhosted.org/packages/ad/a7/6fe561c2dab64ce69ed05e76902c6eb9ce82c934bd3b3e6e796a2897dd62/obstore-0.7.3-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:00fde287770bdbdbb06379670d30c257b20e77a4a11b36f1e232b5bc6ef07b7a", size = 3558626, upload-time = "2025-08-01T22:37:26.058Z" }, - { url = "https://files.pythonhosted.org/packages/ed/83/f0c25dcce75e5297cba2a8ecb93198b01f4ff7af699fa1296207e30bf02e/obstore-0.7.3-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c420036356269666197f0704392c9495f255bb3ff9b667c69fb49bc65bd50dcd", size = 3706975, upload-time = "2025-08-01T22:37:27.306Z" }, - { url = "https://files.pythonhosted.org/packages/da/6d/029a65fa2c51443d27d5a6f57a76becc51793d0a53ea0efac2e4fbce3eda/obstore-0.7.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c28482626ca9481569ad16ba0c0c36947ce96e8147c64011dc0af6d58be8ff9c", size = 3973329, upload-time = "2025-08-01T22:37:28.592Z" }, - { url = "https://files.pythonhosted.org/packages/b1/d6/0e49f9d6c5e9d0021722c5e3ad7402d8457ffe2743fe245a1b16fc9caf72/obstore-0.7.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9cead20055221337ddf218098afe8138f8624395b0cf2a730da72a4523c11b2f", size = 4021499, upload-time = "2025-08-01T22:37:30.135Z" }, - { url = "https://files.pythonhosted.org/packages/f6/8e/daf5d23477c14cd52525b6e8d5046106e37fbf4f4e62fc0a4c0952c7e229/obstore-0.7.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c71017142a593022848f4af0ac1e39af1a56927981cc2c89542888edb206eb33", size = 3806108, upload-time = "2025-08-01T22:37:31.438Z" }, - { url = "https://files.pythonhosted.org/packages/23/a5/123bcc4b0762e479f9bc443b8a91885c90cc92e844543c2f87d48b1b674e/obstore-0.7.3-cp312-cp312-manylinux_2_24_aarch64.whl", hash = "sha256:8aebc2bf796a0d1525318a9ac69608a96d03abc621ca1e6d810e08a70bd695c1", size = 3576246, upload-time = "2025-08-01T22:37:32.698Z" }, - { url = "https://files.pythonhosted.org/packages/71/29/c2fc9ebdb84bddf25a644ee15d5855d8c5e29218dd6ee7877a3378b0094d/obstore-0.7.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:c0ebf03969b81ee559c377c5ebca9dcdffbef0e6650d43659676aeaeb302a272", size = 3739761, upload-time = "2025-08-01T22:37:33.961Z" }, - { url = "https://files.pythonhosted.org/packages/14/be/a04542e8f37b547fa8720d518c333760f90323cbd392e60bf48d1631e965/obstore-0.7.3-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:e0f5d97064ec35fdef3079f867afe6fa5e76ab2bb3e809855ab34a1aa34c9dcd", size = 3784232, upload-time = "2025-08-01T22:37:35.223Z" }, - { url = "https://files.pythonhosted.org/packages/05/d9/d164f871f9dd91fc5870171a3c60f5986d5f9f98a6e58da4663bbe16a662/obstore-0.7.3-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:3a80541671646c5e49493de61361a1851c8c172cf28981b76aa4248a9f02f5b1", size = 3788418, upload-time = "2025-08-01T22:37:36.418Z" }, - { url = "https://files.pythonhosted.org/packages/78/9e/59701156233d94b4654637424890188bb5e1154ea53260a93016084ce423/obstore-0.7.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a5ce6385ad89afad106d05d37296f724ba10f8f4e57ab8ad7f4ecce0aa226d3d", size = 3976968, upload-time = "2025-08-01T22:37:37.702Z" }, - { url = "https://files.pythonhosted.org/packages/a2/fe/d551a770ae10fe2ca5feb5c7256c777219614297c6e45d6714ade9b43fbf/obstore-0.7.3-cp312-cp312-win_amd64.whl", hash = "sha256:632522ba63a44768977defc0a93fc5dd59ea0455bfd6926cd3121971306da4e5", size = 4050093, upload-time = "2025-08-01T22:37:38.962Z" }, - { url = "https://files.pythonhosted.org/packages/2a/ef/491cf28be51301aa9695d8448c4e6489956c162564dbdf4f21836696e294/obstore-0.7.3-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:dcb71412dc8d2bd464b340d1f36d8c0ceb7894c01c2ceaaa5f2ac45376503fa2", size = 3676519, upload-time = "2025-08-01T22:37:40.194Z" }, - { url = "https://files.pythonhosted.org/packages/f0/12/41c51cca59784d2b6c60a99a2a010f8e73a089416d288db12d91cbcdbd02/obstore-0.7.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:6d486bb01438039d686401ce4207d82c02b8b639227baa5bdd578efdab388dea", size = 3387665, upload-time = "2025-08-01T22:37:41.431Z" }, - { url = "https://files.pythonhosted.org/packages/cb/27/9aac5a70c6d4a496a837748bc9368e7825dc58761711d5f65cc8bc9d3765/obstore-0.7.3-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fcaaf0c9223b5592658c131ff32a0574be995c7e237f406266f9a68ea2266769", size = 3558354, upload-time = "2025-08-01T22:37:42.678Z" }, - { url = "https://files.pythonhosted.org/packages/f2/04/70e6cf1931d56db2f86a359ea171aa403146c04faf20aeb025eeabe254dd/obstore-0.7.3-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e8ae6cde734df3cc542c14152029170d9ae70ce50b957831ed71073113bd3d60", size = 3706831, upload-time = "2025-08-01T22:37:44.415Z" }, - { url = "https://files.pythonhosted.org/packages/e9/a9/758920c8c7256f0cd366a3b0063247a197d9a1e2e189e2309400022787c5/obstore-0.7.3-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:30da82ae3bfdf24fa80af38967e323ae8da0bb7c36cce01f0dda7689faaf1272", size = 3973250, upload-time = "2025-08-01T22:37:45.631Z" }, - { url = "https://files.pythonhosted.org/packages/59/f8/5a6a831d7328a4351caab13ba7faf47cb1bdcb5afba2e46535386ccf1170/obstore-0.7.3-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b5daa9f912eac8cdf218161d34e13f38cbb594e934eaaf8a7c09dca5a394b231", size = 4030160, upload-time = "2025-08-01T22:37:47.208Z" }, - { url = "https://files.pythonhosted.org/packages/67/7d/698e4851049999b4a8ff9622ece0cba86e64c4242fa981e21f9832bdd378/obstore-0.7.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ef06cad4e8978d672357b328b4f61c48827b2b79d7eaf58b68ee31ac0e652b8", size = 3805594, upload-time = "2025-08-01T22:37:48.699Z" }, - { url = "https://files.pythonhosted.org/packages/b4/a6/4a9290cac8aaa16a7ce9aec6e8a001ed0d0ed42d1e49570c6770d31f693c/obstore-0.7.3-cp313-cp313-manylinux_2_24_aarch64.whl", hash = "sha256:d34920539a94da2b87195787b80004960638dfd0aa2f4369fc9239e0a41470a8", size = 3575482, upload-time = "2025-08-01T22:37:50.216Z" }, - { url = "https://files.pythonhosted.org/packages/e6/c9/87f7c88daf07a52b5d86a9de0664574ee0dea2f5e6cd26a91ad4688b53fb/obstore-0.7.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:6dfcdaa779f376745ff493cce7f19cbbe8d75f68304bf1062e757ab60bd62de1", size = 3739411, upload-time = "2025-08-01T22:37:51.483Z" }, - { url = "https://files.pythonhosted.org/packages/69/58/1163bcb48e80e220ef6010130880d24a75239025fde1092356ce71b6efee/obstore-0.7.3-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:ae095f679e4796b8f6ef80ed3813ddd14a477ae219a0c059c23cf294f9288ded", size = 3783914, upload-time = "2025-08-01T22:37:52.857Z" }, - { url = "https://files.pythonhosted.org/packages/75/a2/f5b68265a6ea248adbd4e2f9db2dae7d727ab6ac53a63dfebcf28f1aacea/obstore-0.7.3-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:6def59e79c19b8804743fec6407f542b387dc1630c2254412ae8bd3a0b98e7e4", size = 3787905, upload-time = "2025-08-01T22:37:54.414Z" }, - { url = "https://files.pythonhosted.org/packages/8b/2c/23b671c7eaf37097fe9c3c2cc925c466135d4866e2009444daf91f180fed/obstore-0.7.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f97797c42476ab19853ef4a161b903eaf96c2363a23b9e0187d66b0daee350cb", size = 3976888, upload-time = "2025-08-01T22:37:55.681Z" }, - { url = "https://files.pythonhosted.org/packages/42/10/5f352e6dd1388f5c8931261357e111a6923121d937a1ebad09f4cf391418/obstore-0.7.3-cp313-cp313-win_amd64.whl", hash = "sha256:8f0ecc01b1444bc08ff98e368b80ea2c085a7783621075298e86d3aba96f8e27", size = 4050018, upload-time = "2025-08-01T22:37:57.285Z" }, -] - -[[package]] -name = "openapi-schema-validator" -version = "0.6.3" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "jsonschema" }, - { name = "jsonschema-specifications" }, - { name = "rfc3339-validator" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/8b/f3/5507ad3325169347cd8ced61c232ff3df70e2b250c49f0fe140edb4973c6/openapi_schema_validator-0.6.3.tar.gz", hash = "sha256:f37bace4fc2a5d96692f4f8b31dc0f8d7400fd04f3a937798eaf880d425de6ee", size = 11550, upload-time = "2025-01-10T18:08:22.268Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/21/c6/ad0fba32775ae749016829dace42ed80f4407b171da41313d1a3a5f102e4/openapi_schema_validator-0.6.3-py3-none-any.whl", hash = "sha256:f3b9870f4e556b5a62a1c39da72a6b4b16f3ad9c73dc80084b1b11e74ba148a3", size = 8755, upload-time = "2025-01-10T18:08:19.758Z" }, -] - -[[package]] -name = "openapi-spec-validator" -version = "0.7.2" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "jsonschema" }, - { name = "jsonschema-path" }, - { name = "lazy-object-proxy" }, - { name = "openapi-schema-validator" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/82/af/fe2d7618d6eae6fb3a82766a44ed87cd8d6d82b4564ed1c7cfb0f6378e91/openapi_spec_validator-0.7.2.tar.gz", hash = "sha256:cc029309b5c5dbc7859df0372d55e9d1ff43e96d678b9ba087f7c56fc586f734", size = 36855, upload-time = "2025-06-07T14:48:56.299Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/27/dd/b3fd642260cb17532f66cc1e8250f3507d1e580483e209dc1e9d13bd980d/openapi_spec_validator-0.7.2-py3-none-any.whl", hash = "sha256:4bbdc0894ec85f1d1bea1d6d9c8b2c3c8d7ccaa13577ef40da9c006c9fd0eb60", size = 39713, upload-time = "2025-06-07T14:48:54.077Z" }, -] - -[[package]] -name = "packaging" -version = "25.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a1/d4/1fc4078c65507b51b96ca8f8c3ba19e6a61c8253c72794544580a7b6c24d/packaging-25.0.tar.gz", hash = "sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f", size = 165727, upload-time = "2025-04-19T11:48:59.673Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl", hash = "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484", size = 66469, upload-time = "2025-04-19T11:48:57.875Z" }, -] - -[[package]] -name = "parso" -version = "0.8.4" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/66/94/68e2e17afaa9169cf6412ab0f28623903be73d1b32e208d9e8e541bb086d/parso-0.8.4.tar.gz", hash = "sha256:eb3a7b58240fb99099a345571deecc0f9540ea5f4dd2fe14c2a99d6b281ab92d", size = 400609, upload-time = "2024-04-05T09:43:55.897Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/c6/ac/dac4a63f978e4dcb3c6d3a78c4d8e0192a113d288502a1216950c41b1027/parso-0.8.4-py2.py3-none-any.whl", hash = "sha256:a418670a20291dacd2dddc80c377c5c3791378ee1e8d12bffc35420643d43f18", size = 103650, upload-time = "2024-04-05T09:43:53.299Z" }, -] - -[[package]] -name = "pathable" -version = "0.4.4" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/67/93/8f2c2075b180c12c1e9f6a09d1a985bc2036906b13dff1d8917e395f2048/pathable-0.4.4.tar.gz", hash = "sha256:6905a3cd17804edfac7875b5f6c9142a218c7caef78693c2dbbbfbac186d88b2", size = 8124, upload-time = "2025-01-10T18:43:13.247Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/7d/eb/b6260b31b1a96386c0a880edebe26f89669098acea8e0318bff6adb378fd/pathable-0.4.4-py3-none-any.whl", hash = "sha256:5ae9e94793b6ef5a4cbe0a7ce9dbbefc1eec38df253763fd0aeeacf2762dbbc2", size = 9592, upload-time = "2025-01-10T18:43:11.88Z" }, -] - -[[package]] -name = "pathspec" -version = "0.12.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ca/bc/f35b8446f4531a7cb215605d100cd88b7ac6f44ab3fc94870c120ab3adbf/pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712", size = 51043, upload-time = "2023-12-10T22:30:45Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/cc/20/ff623b09d963f88bfde16306a54e12ee5ea43e9b597108672ff3a408aad6/pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08", size = 31191, upload-time = "2023-12-10T22:30:43.14Z" }, -] - -[[package]] -name = "pexpect" -version = "4.9.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "ptyprocess" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/42/92/cc564bf6381ff43ce1f4d06852fc19a2f11d180f23dc32d9588bee2f149d/pexpect-4.9.0.tar.gz", hash = "sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f", size = 166450, upload-time = "2023-11-25T09:07:26.339Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/9e/c3/059298687310d527a58bb01f3b1965787ee3b40dce76752eda8b44e9a2c5/pexpect-4.9.0-py2.py3-none-any.whl", hash = "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523", size = 63772, upload-time = "2023-11-25T06:56:14.81Z" }, -] - -[[package]] -name = "pip" -version = "25.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/20/16/650289cd3f43d5a2fadfd98c68bd1e1e7f2550a1a5326768cddfbcedb2c5/pip-25.2.tar.gz", hash = "sha256:578283f006390f85bb6282dffb876454593d637f5d1be494b5202ce4877e71f2", size = 1840021, upload-time = "2025-07-30T21:50:15.401Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/b7/3f/945ef7ab14dc4f9d7f40288d2df998d1837ee0888ec3659c813487572faa/pip-25.2-py3-none-any.whl", hash = "sha256:6d67a2b4e7f14d8b31b8b52648866fa717f45a1eb70e83002f4331d07e953717", size = 1752557, upload-time = "2025-07-30T21:50:13.323Z" }, -] - -[[package]] -name = "platformdirs" -version = "4.3.8" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/fe/8b/3c73abc9c759ecd3f1f7ceff6685840859e8070c4d947c93fae71f6a0bf2/platformdirs-4.3.8.tar.gz", hash = "sha256:3d512d96e16bcb959a814c9f348431070822a6496326a4be0911c40b5a74c2bc", size = 21362, upload-time = "2025-05-07T22:47:42.121Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/fe/39/979e8e21520d4e47a0bbe349e2713c0aac6f3d853d0e5b34d76206c439aa/platformdirs-4.3.8-py3-none-any.whl", hash = "sha256:ff7059bb7eb1179e2685604f4aaf157cfd9535242bd23742eadc3c13542139b4", size = 18567, upload-time = "2025-05-07T22:47:40.376Z" }, -] - -[[package]] -name = "pluggy" -version = "1.6.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f9/e2/3e91f31a7d2b083fe6ef3fa267035b518369d9511ffab804f839851d2779/pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3", size = 69412, upload-time = "2025-05-15T12:30:07.975Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746", size = 20538, upload-time = "2025-05-15T12:30:06.134Z" }, -] - -[[package]] -name = "ply" -version = "3.11" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e5/69/882ee5c9d017149285cab114ebeab373308ef0f874fcdac9beb90e0ac4da/ply-3.11.tar.gz", hash = "sha256:00c7c1aaa88358b9c765b6d3000c6eec0ba42abca5351b095321aef446081da3", size = 159130, upload-time = "2018-02-15T19:01:31.097Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a3/58/35da89ee790598a0700ea49b2a66594140f44dec458c07e8e3d4979137fc/ply-3.11-py2.py3-none-any.whl", hash = "sha256:096f9b8350b65ebd2fd1346b12452efe5b9607f7482813ffca50c22722a807ce", size = 49567, upload-time = "2018-02-15T19:01:27.172Z" }, -] - -[[package]] -name = "prompt-toolkit" -version = "3.0.51" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "wcwidth" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/bb/6e/9d084c929dfe9e3bfe0c6a47e31f78a25c54627d64a66e884a8bf5474f1c/prompt_toolkit-3.0.51.tar.gz", hash = "sha256:931a162e3b27fc90c86f1b48bb1fb2c528c2761475e57c9c06de13311c7b54ed", size = 428940, upload-time = "2025-04-15T09:18:47.731Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ce/4f/5249960887b1fbe561d9ff265496d170b55a735b76724f10ef19f9e40716/prompt_toolkit-3.0.51-py3-none-any.whl", hash = "sha256:52742911fde84e2d423e2f9a4cf1de7d7ac4e51958f648d9540e0fb8db077b07", size = 387810, upload-time = "2025-04-15T09:18:44.753Z" }, -] - -[[package]] -name = "propcache" -version = "0.3.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a6/16/43264e4a779dd8588c21a70f0709665ee8f611211bdd2c87d952cfa7c776/propcache-0.3.2.tar.gz", hash = "sha256:20d7d62e4e7ef05f221e0db2856b979540686342e7dd9973b815599c7057e168", size = 44139, upload-time = "2025-06-09T22:56:06.081Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/80/8d/e8b436717ab9c2cfc23b116d2c297305aa4cd8339172a456d61ebf5669b8/propcache-0.3.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0b8d2f607bd8f80ddc04088bc2a037fdd17884a6fcadc47a96e334d72f3717be", size = 74207, upload-time = "2025-06-09T22:54:05.399Z" }, - { url = "https://files.pythonhosted.org/packages/d6/29/1e34000e9766d112171764b9fa3226fa0153ab565d0c242c70e9945318a7/propcache-0.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:06766d8f34733416e2e34f46fea488ad5d60726bb9481d3cddf89a6fa2d9603f", size = 43648, upload-time = "2025-06-09T22:54:08.023Z" }, - { url = "https://files.pythonhosted.org/packages/46/92/1ad5af0df781e76988897da39b5f086c2bf0f028b7f9bd1f409bb05b6874/propcache-0.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a2dc1f4a1df4fecf4e6f68013575ff4af84ef6f478fe5344317a65d38a8e6dc9", size = 43496, upload-time = "2025-06-09T22:54:09.228Z" }, - { url = "https://files.pythonhosted.org/packages/b3/ce/e96392460f9fb68461fabab3e095cb00c8ddf901205be4eae5ce246e5b7e/propcache-0.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:be29c4f4810c5789cf10ddf6af80b041c724e629fa51e308a7a0fb19ed1ef7bf", size = 217288, upload-time = "2025-06-09T22:54:10.466Z" }, - { url = "https://files.pythonhosted.org/packages/c5/2a/866726ea345299f7ceefc861a5e782b045545ae6940851930a6adaf1fca6/propcache-0.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:59d61f6970ecbd8ff2e9360304d5c8876a6abd4530cb752c06586849ac8a9dc9", size = 227456, upload-time = "2025-06-09T22:54:11.828Z" }, - { url = "https://files.pythonhosted.org/packages/de/03/07d992ccb6d930398689187e1b3c718339a1c06b8b145a8d9650e4726166/propcache-0.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:62180e0b8dbb6b004baec00a7983e4cc52f5ada9cd11f48c3528d8cfa7b96a66", size = 225429, upload-time = "2025-06-09T22:54:13.823Z" }, - { url = "https://files.pythonhosted.org/packages/5d/e6/116ba39448753b1330f48ab8ba927dcd6cf0baea8a0ccbc512dfb49ba670/propcache-0.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c144ca294a204c470f18cf4c9d78887810d04a3e2fbb30eea903575a779159df", size = 213472, upload-time = "2025-06-09T22:54:15.232Z" }, - { url = "https://files.pythonhosted.org/packages/a6/85/f01f5d97e54e428885a5497ccf7f54404cbb4f906688a1690cd51bf597dc/propcache-0.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c5c2a784234c28854878d68978265617aa6dc0780e53d44b4d67f3651a17a9a2", size = 204480, upload-time = "2025-06-09T22:54:17.104Z" }, - { url = "https://files.pythonhosted.org/packages/e3/79/7bf5ab9033b8b8194cc3f7cf1aaa0e9c3256320726f64a3e1f113a812dce/propcache-0.3.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:5745bc7acdafa978ca1642891b82c19238eadc78ba2aaa293c6863b304e552d7", size = 214530, upload-time = "2025-06-09T22:54:18.512Z" }, - { url = "https://files.pythonhosted.org/packages/31/0b/bd3e0c00509b609317df4a18e6b05a450ef2d9a963e1d8bc9c9415d86f30/propcache-0.3.2-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:c0075bf773d66fa8c9d41f66cc132ecc75e5bb9dd7cce3cfd14adc5ca184cb95", size = 205230, upload-time = "2025-06-09T22:54:19.947Z" }, - { url = "https://files.pythonhosted.org/packages/7a/23/fae0ff9b54b0de4e819bbe559508da132d5683c32d84d0dc2ccce3563ed4/propcache-0.3.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:5f57aa0847730daceff0497f417c9de353c575d8da3579162cc74ac294c5369e", size = 206754, upload-time = "2025-06-09T22:54:21.716Z" }, - { url = "https://files.pythonhosted.org/packages/b7/7f/ad6a3c22630aaa5f618b4dc3c3598974a72abb4c18e45a50b3cdd091eb2f/propcache-0.3.2-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:eef914c014bf72d18efb55619447e0aecd5fb7c2e3fa7441e2e5d6099bddff7e", size = 218430, upload-time = "2025-06-09T22:54:23.17Z" }, - { url = "https://files.pythonhosted.org/packages/5b/2c/ba4f1c0e8a4b4c75910742f0d333759d441f65a1c7f34683b4a74c0ee015/propcache-0.3.2-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:2a4092e8549031e82facf3decdbc0883755d5bbcc62d3aea9d9e185549936dcf", size = 223884, upload-time = "2025-06-09T22:54:25.539Z" }, - { url = "https://files.pythonhosted.org/packages/88/e4/ebe30fc399e98572019eee82ad0caf512401661985cbd3da5e3140ffa1b0/propcache-0.3.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:85871b050f174bc0bfb437efbdb68aaf860611953ed12418e4361bc9c392749e", size = 211480, upload-time = "2025-06-09T22:54:26.892Z" }, - { url = "https://files.pythonhosted.org/packages/96/0a/7d5260b914e01d1d0906f7f38af101f8d8ed0dc47426219eeaf05e8ea7c2/propcache-0.3.2-cp311-cp311-win32.whl", hash = "sha256:36c8d9b673ec57900c3554264e630d45980fd302458e4ac801802a7fd2ef7897", size = 37757, upload-time = "2025-06-09T22:54:28.241Z" }, - { url = "https://files.pythonhosted.org/packages/e1/2d/89fe4489a884bc0da0c3278c552bd4ffe06a1ace559db5ef02ef24ab446b/propcache-0.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:e53af8cb6a781b02d2ea079b5b853ba9430fcbe18a8e3ce647d5982a3ff69f39", size = 41500, upload-time = "2025-06-09T22:54:29.4Z" }, - { url = "https://files.pythonhosted.org/packages/a8/42/9ca01b0a6f48e81615dca4765a8f1dd2c057e0540f6116a27dc5ee01dfb6/propcache-0.3.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:8de106b6c84506b31c27168582cd3cb3000a6412c16df14a8628e5871ff83c10", size = 73674, upload-time = "2025-06-09T22:54:30.551Z" }, - { url = "https://files.pythonhosted.org/packages/af/6e/21293133beb550f9c901bbece755d582bfaf2176bee4774000bd4dd41884/propcache-0.3.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:28710b0d3975117239c76600ea351934ac7b5ff56e60953474342608dbbb6154", size = 43570, upload-time = "2025-06-09T22:54:32.296Z" }, - { url = "https://files.pythonhosted.org/packages/0c/c8/0393a0a3a2b8760eb3bde3c147f62b20044f0ddac81e9d6ed7318ec0d852/propcache-0.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ce26862344bdf836650ed2487c3d724b00fbfec4233a1013f597b78c1cb73615", size = 43094, upload-time = "2025-06-09T22:54:33.929Z" }, - { url = "https://files.pythonhosted.org/packages/37/2c/489afe311a690399d04a3e03b069225670c1d489eb7b044a566511c1c498/propcache-0.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bca54bd347a253af2cf4544bbec232ab982f4868de0dd684246b67a51bc6b1db", size = 226958, upload-time = "2025-06-09T22:54:35.186Z" }, - { url = "https://files.pythonhosted.org/packages/9d/ca/63b520d2f3d418c968bf596839ae26cf7f87bead026b6192d4da6a08c467/propcache-0.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:55780d5e9a2ddc59711d727226bb1ba83a22dd32f64ee15594b9392b1f544eb1", size = 234894, upload-time = "2025-06-09T22:54:36.708Z" }, - { url = "https://files.pythonhosted.org/packages/11/60/1d0ed6fff455a028d678df30cc28dcee7af77fa2b0e6962ce1df95c9a2a9/propcache-0.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:035e631be25d6975ed87ab23153db6a73426a48db688070d925aa27e996fe93c", size = 233672, upload-time = "2025-06-09T22:54:38.062Z" }, - { url = "https://files.pythonhosted.org/packages/37/7c/54fd5301ef38505ab235d98827207176a5c9b2aa61939b10a460ca53e123/propcache-0.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ee6f22b6eaa39297c751d0e80c0d3a454f112f5c6481214fcf4c092074cecd67", size = 224395, upload-time = "2025-06-09T22:54:39.634Z" }, - { url = "https://files.pythonhosted.org/packages/ee/1a/89a40e0846f5de05fdc6779883bf46ba980e6df4d2ff8fb02643de126592/propcache-0.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7ca3aee1aa955438c4dba34fc20a9f390e4c79967257d830f137bd5a8a32ed3b", size = 212510, upload-time = "2025-06-09T22:54:41.565Z" }, - { url = "https://files.pythonhosted.org/packages/5e/33/ca98368586c9566a6b8d5ef66e30484f8da84c0aac3f2d9aec6d31a11bd5/propcache-0.3.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:7a4f30862869fa2b68380d677cc1c5fcf1e0f2b9ea0cf665812895c75d0ca3b8", size = 222949, upload-time = "2025-06-09T22:54:43.038Z" }, - { url = "https://files.pythonhosted.org/packages/ba/11/ace870d0aafe443b33b2f0b7efdb872b7c3abd505bfb4890716ad7865e9d/propcache-0.3.2-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:b77ec3c257d7816d9f3700013639db7491a434644c906a2578a11daf13176251", size = 217258, upload-time = "2025-06-09T22:54:44.376Z" }, - { url = "https://files.pythonhosted.org/packages/5b/d2/86fd6f7adffcfc74b42c10a6b7db721d1d9ca1055c45d39a1a8f2a740a21/propcache-0.3.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:cab90ac9d3f14b2d5050928483d3d3b8fb6b4018893fc75710e6aa361ecb2474", size = 213036, upload-time = "2025-06-09T22:54:46.243Z" }, - { url = "https://files.pythonhosted.org/packages/07/94/2d7d1e328f45ff34a0a284cf5a2847013701e24c2a53117e7c280a4316b3/propcache-0.3.2-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:0b504d29f3c47cf6b9e936c1852246c83d450e8e063d50562115a6be6d3a2535", size = 227684, upload-time = "2025-06-09T22:54:47.63Z" }, - { url = "https://files.pythonhosted.org/packages/b7/05/37ae63a0087677e90b1d14710e532ff104d44bc1efa3b3970fff99b891dc/propcache-0.3.2-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:ce2ac2675a6aa41ddb2a0c9cbff53780a617ac3d43e620f8fd77ba1c84dcfc06", size = 234562, upload-time = "2025-06-09T22:54:48.982Z" }, - { url = "https://files.pythonhosted.org/packages/a4/7c/3f539fcae630408d0bd8bf3208b9a647ccad10976eda62402a80adf8fc34/propcache-0.3.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:62b4239611205294cc433845b914131b2a1f03500ff3c1ed093ed216b82621e1", size = 222142, upload-time = "2025-06-09T22:54:50.424Z" }, - { url = "https://files.pythonhosted.org/packages/7c/d2/34b9eac8c35f79f8a962546b3e97e9d4b990c420ee66ac8255d5d9611648/propcache-0.3.2-cp312-cp312-win32.whl", hash = "sha256:df4a81b9b53449ebc90cc4deefb052c1dd934ba85012aa912c7ea7b7e38b60c1", size = 37711, upload-time = "2025-06-09T22:54:52.072Z" }, - { url = "https://files.pythonhosted.org/packages/19/61/d582be5d226cf79071681d1b46b848d6cb03d7b70af7063e33a2787eaa03/propcache-0.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:7046e79b989d7fe457bb755844019e10f693752d169076138abf17f31380800c", size = 41479, upload-time = "2025-06-09T22:54:53.234Z" }, - { url = "https://files.pythonhosted.org/packages/dc/d1/8c747fafa558c603c4ca19d8e20b288aa0c7cda74e9402f50f31eb65267e/propcache-0.3.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ca592ed634a73ca002967458187109265e980422116c0a107cf93d81f95af945", size = 71286, upload-time = "2025-06-09T22:54:54.369Z" }, - { url = "https://files.pythonhosted.org/packages/61/99/d606cb7986b60d89c36de8a85d58764323b3a5ff07770a99d8e993b3fa73/propcache-0.3.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:9ecb0aad4020e275652ba3975740f241bd12a61f1a784df044cf7477a02bc252", size = 42425, upload-time = "2025-06-09T22:54:55.642Z" }, - { url = "https://files.pythonhosted.org/packages/8c/96/ef98f91bbb42b79e9bb82bdd348b255eb9d65f14dbbe3b1594644c4073f7/propcache-0.3.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:7f08f1cc28bd2eade7a8a3d2954ccc673bb02062e3e7da09bc75d843386b342f", size = 41846, upload-time = "2025-06-09T22:54:57.246Z" }, - { url = "https://files.pythonhosted.org/packages/5b/ad/3f0f9a705fb630d175146cd7b1d2bf5555c9beaed54e94132b21aac098a6/propcache-0.3.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d1a342c834734edb4be5ecb1e9fb48cb64b1e2320fccbd8c54bf8da8f2a84c33", size = 208871, upload-time = "2025-06-09T22:54:58.975Z" }, - { url = "https://files.pythonhosted.org/packages/3a/38/2085cda93d2c8b6ec3e92af2c89489a36a5886b712a34ab25de9fbca7992/propcache-0.3.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8a544caaae1ac73f1fecfae70ded3e93728831affebd017d53449e3ac052ac1e", size = 215720, upload-time = "2025-06-09T22:55:00.471Z" }, - { url = "https://files.pythonhosted.org/packages/61/c1/d72ea2dc83ac7f2c8e182786ab0fc2c7bd123a1ff9b7975bee671866fe5f/propcache-0.3.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:310d11aa44635298397db47a3ebce7db99a4cc4b9bbdfcf6c98a60c8d5261cf1", size = 215203, upload-time = "2025-06-09T22:55:01.834Z" }, - { url = "https://files.pythonhosted.org/packages/af/81/b324c44ae60c56ef12007105f1460d5c304b0626ab0cc6b07c8f2a9aa0b8/propcache-0.3.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c1396592321ac83157ac03a2023aa6cc4a3cc3cfdecb71090054c09e5a7cce3", size = 206365, upload-time = "2025-06-09T22:55:03.199Z" }, - { url = "https://files.pythonhosted.org/packages/09/73/88549128bb89e66d2aff242488f62869014ae092db63ccea53c1cc75a81d/propcache-0.3.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8cabf5b5902272565e78197edb682017d21cf3b550ba0460ee473753f28d23c1", size = 196016, upload-time = "2025-06-09T22:55:04.518Z" }, - { url = "https://files.pythonhosted.org/packages/b9/3f/3bdd14e737d145114a5eb83cb172903afba7242f67c5877f9909a20d948d/propcache-0.3.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0a2f2235ac46a7aa25bdeb03a9e7060f6ecbd213b1f9101c43b3090ffb971ef6", size = 205596, upload-time = "2025-06-09T22:55:05.942Z" }, - { url = "https://files.pythonhosted.org/packages/0f/ca/2f4aa819c357d3107c3763d7ef42c03980f9ed5c48c82e01e25945d437c1/propcache-0.3.2-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:92b69e12e34869a6970fd2f3da91669899994b47c98f5d430b781c26f1d9f387", size = 200977, upload-time = "2025-06-09T22:55:07.792Z" }, - { url = "https://files.pythonhosted.org/packages/cd/4a/e65276c7477533c59085251ae88505caf6831c0e85ff8b2e31ebcbb949b1/propcache-0.3.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:54e02207c79968ebbdffc169591009f4474dde3b4679e16634d34c9363ff56b4", size = 197220, upload-time = "2025-06-09T22:55:09.173Z" }, - { url = "https://files.pythonhosted.org/packages/7c/54/fc7152e517cf5578278b242396ce4d4b36795423988ef39bb8cd5bf274c8/propcache-0.3.2-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:4adfb44cb588001f68c5466579d3f1157ca07f7504fc91ec87862e2b8e556b88", size = 210642, upload-time = "2025-06-09T22:55:10.62Z" }, - { url = "https://files.pythonhosted.org/packages/b9/80/abeb4a896d2767bf5f1ea7b92eb7be6a5330645bd7fb844049c0e4045d9d/propcache-0.3.2-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:fd3e6019dc1261cd0291ee8919dd91fbab7b169bb76aeef6c716833a3f65d206", size = 212789, upload-time = "2025-06-09T22:55:12.029Z" }, - { url = "https://files.pythonhosted.org/packages/b3/db/ea12a49aa7b2b6d68a5da8293dcf50068d48d088100ac016ad92a6a780e6/propcache-0.3.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4c181cad81158d71c41a2bce88edce078458e2dd5ffee7eddd6b05da85079f43", size = 205880, upload-time = "2025-06-09T22:55:13.45Z" }, - { url = "https://files.pythonhosted.org/packages/d1/e5/9076a0bbbfb65d1198007059c65639dfd56266cf8e477a9707e4b1999ff4/propcache-0.3.2-cp313-cp313-win32.whl", hash = "sha256:8a08154613f2249519e549de2330cf8e2071c2887309a7b07fb56098f5170a02", size = 37220, upload-time = "2025-06-09T22:55:15.284Z" }, - { url = "https://files.pythonhosted.org/packages/d3/f5/b369e026b09a26cd77aa88d8fffd69141d2ae00a2abaaf5380d2603f4b7f/propcache-0.3.2-cp313-cp313-win_amd64.whl", hash = "sha256:e41671f1594fc4ab0a6dec1351864713cb3a279910ae8b58f884a88a0a632c05", size = 40678, upload-time = "2025-06-09T22:55:16.445Z" }, - { url = "https://files.pythonhosted.org/packages/a4/3a/6ece377b55544941a08d03581c7bc400a3c8cd3c2865900a68d5de79e21f/propcache-0.3.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:9a3cf035bbaf035f109987d9d55dc90e4b0e36e04bbbb95af3055ef17194057b", size = 76560, upload-time = "2025-06-09T22:55:17.598Z" }, - { url = "https://files.pythonhosted.org/packages/0c/da/64a2bb16418740fa634b0e9c3d29edff1db07f56d3546ca2d86ddf0305e1/propcache-0.3.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:156c03d07dc1323d8dacaa221fbe028c5c70d16709cdd63502778e6c3ccca1b0", size = 44676, upload-time = "2025-06-09T22:55:18.922Z" }, - { url = "https://files.pythonhosted.org/packages/36/7b/f025e06ea51cb72c52fb87e9b395cced02786610b60a3ed51da8af017170/propcache-0.3.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:74413c0ba02ba86f55cf60d18daab219f7e531620c15f1e23d95563f505efe7e", size = 44701, upload-time = "2025-06-09T22:55:20.106Z" }, - { url = "https://files.pythonhosted.org/packages/a4/00/faa1b1b7c3b74fc277f8642f32a4c72ba1d7b2de36d7cdfb676db7f4303e/propcache-0.3.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f066b437bb3fa39c58ff97ab2ca351db465157d68ed0440abecb21715eb24b28", size = 276934, upload-time = "2025-06-09T22:55:21.5Z" }, - { url = "https://files.pythonhosted.org/packages/74/ab/935beb6f1756e0476a4d5938ff44bf0d13a055fed880caf93859b4f1baf4/propcache-0.3.2-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f1304b085c83067914721e7e9d9917d41ad87696bf70f0bc7dee450e9c71ad0a", size = 278316, upload-time = "2025-06-09T22:55:22.918Z" }, - { url = "https://files.pythonhosted.org/packages/f8/9d/994a5c1ce4389610838d1caec74bdf0e98b306c70314d46dbe4fcf21a3e2/propcache-0.3.2-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ab50cef01b372763a13333b4e54021bdcb291fc9a8e2ccb9c2df98be51bcde6c", size = 282619, upload-time = "2025-06-09T22:55:24.651Z" }, - { url = "https://files.pythonhosted.org/packages/2b/00/a10afce3d1ed0287cef2e09506d3be9822513f2c1e96457ee369adb9a6cd/propcache-0.3.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fad3b2a085ec259ad2c2842666b2a0a49dea8463579c606426128925af1ed725", size = 265896, upload-time = "2025-06-09T22:55:26.049Z" }, - { url = "https://files.pythonhosted.org/packages/2e/a8/2aa6716ffa566ca57c749edb909ad27884680887d68517e4be41b02299f3/propcache-0.3.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:261fa020c1c14deafd54c76b014956e2f86991af198c51139faf41c4d5e83892", size = 252111, upload-time = "2025-06-09T22:55:27.381Z" }, - { url = "https://files.pythonhosted.org/packages/36/4f/345ca9183b85ac29c8694b0941f7484bf419c7f0fea2d1e386b4f7893eed/propcache-0.3.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:46d7f8aa79c927e5f987ee3a80205c987717d3659f035c85cf0c3680526bdb44", size = 268334, upload-time = "2025-06-09T22:55:28.747Z" }, - { url = "https://files.pythonhosted.org/packages/3e/ca/fcd54f78b59e3f97b3b9715501e3147f5340167733d27db423aa321e7148/propcache-0.3.2-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:6d8f3f0eebf73e3c0ff0e7853f68be638b4043c65a70517bb575eff54edd8dbe", size = 255026, upload-time = "2025-06-09T22:55:30.184Z" }, - { url = "https://files.pythonhosted.org/packages/8b/95/8e6a6bbbd78ac89c30c225210a5c687790e532ba4088afb8c0445b77ef37/propcache-0.3.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:03c89c1b14a5452cf15403e291c0ccd7751d5b9736ecb2c5bab977ad6c5bcd81", size = 250724, upload-time = "2025-06-09T22:55:31.646Z" }, - { url = "https://files.pythonhosted.org/packages/ee/b0/0dd03616142baba28e8b2d14ce5df6631b4673850a3d4f9c0f9dd714a404/propcache-0.3.2-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:0cc17efde71e12bbaad086d679ce575268d70bc123a5a71ea7ad76f70ba30bba", size = 268868, upload-time = "2025-06-09T22:55:33.209Z" }, - { url = "https://files.pythonhosted.org/packages/c5/98/2c12407a7e4fbacd94ddd32f3b1e3d5231e77c30ef7162b12a60e2dd5ce3/propcache-0.3.2-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:acdf05d00696bc0447e278bb53cb04ca72354e562cf88ea6f9107df8e7fd9770", size = 271322, upload-time = "2025-06-09T22:55:35.065Z" }, - { url = "https://files.pythonhosted.org/packages/35/91/9cb56efbb428b006bb85db28591e40b7736847b8331d43fe335acf95f6c8/propcache-0.3.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:4445542398bd0b5d32df908031cb1b30d43ac848e20470a878b770ec2dcc6330", size = 265778, upload-time = "2025-06-09T22:55:36.45Z" }, - { url = "https://files.pythonhosted.org/packages/9a/4c/b0fe775a2bdd01e176b14b574be679d84fc83958335790f7c9a686c1f468/propcache-0.3.2-cp313-cp313t-win32.whl", hash = "sha256:f86e5d7cd03afb3a1db8e9f9f6eff15794e79e791350ac48a8c924e6f439f394", size = 41175, upload-time = "2025-06-09T22:55:38.436Z" }, - { url = "https://files.pythonhosted.org/packages/a4/ff/47f08595e3d9b5e149c150f88d9714574f1a7cbd89fe2817158a952674bf/propcache-0.3.2-cp313-cp313t-win_amd64.whl", hash = "sha256:9704bedf6e7cbe3c65eca4379a9b53ee6a83749f047808cbb5044d40d7d72198", size = 44857, upload-time = "2025-06-09T22:55:39.687Z" }, - { url = "https://files.pythonhosted.org/packages/cc/35/cc0aaecf278bb4575b8555f2b137de5ab821595ddae9da9d3cd1da4072c7/propcache-0.3.2-py3-none-any.whl", hash = "sha256:98f1ec44fb675f5052cccc8e609c46ed23a35a1cfd18545ad4e29002d858a43f", size = 12663, upload-time = "2025-06-09T22:56:04.484Z" }, -] - -[[package]] -name = "psutil" -version = "7.0.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/2a/80/336820c1ad9286a4ded7e845b2eccfcb27851ab8ac6abece774a6ff4d3de/psutil-7.0.0.tar.gz", hash = "sha256:7be9c3eba38beccb6495ea33afd982a44074b78f28c434a1f51cc07fd315c456", size = 497003, upload-time = "2025-02-13T21:54:07.946Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ed/e6/2d26234410f8b8abdbf891c9da62bee396583f713fb9f3325a4760875d22/psutil-7.0.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:101d71dc322e3cffd7cea0650b09b3d08b8e7c4109dd6809fe452dfd00e58b25", size = 238051, upload-time = "2025-02-13T21:54:12.36Z" }, - { url = "https://files.pythonhosted.org/packages/04/8b/30f930733afe425e3cbfc0e1468a30a18942350c1a8816acfade80c005c4/psutil-7.0.0-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:39db632f6bb862eeccf56660871433e111b6ea58f2caea825571951d4b6aa3da", size = 239535, upload-time = "2025-02-13T21:54:16.07Z" }, - { url = "https://files.pythonhosted.org/packages/2a/ed/d362e84620dd22876b55389248e522338ed1bf134a5edd3b8231d7207f6d/psutil-7.0.0-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1fcee592b4c6f146991ca55919ea3d1f8926497a713ed7faaf8225e174581e91", size = 275004, upload-time = "2025-02-13T21:54:18.662Z" }, - { url = "https://files.pythonhosted.org/packages/bf/b9/b0eb3f3cbcb734d930fdf839431606844a825b23eaf9a6ab371edac8162c/psutil-7.0.0-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b1388a4f6875d7e2aff5c4ca1cc16c545ed41dd8bb596cefea80111db353a34", size = 277986, upload-time = "2025-02-13T21:54:21.811Z" }, - { url = "https://files.pythonhosted.org/packages/eb/a2/709e0fe2f093556c17fbafda93ac032257242cabcc7ff3369e2cb76a97aa/psutil-7.0.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5f098451abc2828f7dc6b58d44b532b22f2088f4999a937557b603ce72b1993", size = 279544, upload-time = "2025-02-13T21:54:24.68Z" }, - { url = "https://files.pythonhosted.org/packages/50/e6/eecf58810b9d12e6427369784efe814a1eec0f492084ce8eb8f4d89d6d61/psutil-7.0.0-cp37-abi3-win32.whl", hash = "sha256:ba3fcef7523064a6c9da440fc4d6bd07da93ac726b5733c29027d7dc95b39d99", size = 241053, upload-time = "2025-02-13T21:54:34.31Z" }, - { url = "https://files.pythonhosted.org/packages/50/1b/6921afe68c74868b4c9fa424dad3be35b095e16687989ebbb50ce4fceb7c/psutil-7.0.0-cp37-abi3-win_amd64.whl", hash = "sha256:4cf3d4eb1aa9b348dec30105c55cd9b7d4629285735a102beb4441e38db90553", size = 244885, upload-time = "2025-02-13T21:54:37.486Z" }, -] - -[[package]] -name = "ptyprocess" -version = "0.7.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/20/e5/16ff212c1e452235a90aeb09066144d0c5a6a8c0834397e03f5224495c4e/ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220", size = 70762, upload-time = "2020-12-28T15:15:30.155Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/22/a6/858897256d0deac81a172289110f31629fc4cee19b6f01283303e18c8db3/ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35", size = 13993, upload-time = "2020-12-28T15:15:28.35Z" }, -] - -[[package]] -name = "pure-eval" -version = "0.2.3" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/cd/05/0a34433a064256a578f1783a10da6df098ceaa4a57bbeaa96a6c0352786b/pure_eval-0.2.3.tar.gz", hash = "sha256:5f4e983f40564c576c7c8635ae88db5956bb2229d7e9237d03b3c0b0190eaf42", size = 19752, upload-time = "2024-07-21T12:58:21.801Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/8e/37/efad0257dc6e593a18957422533ff0f87ede7c9c6ea010a2177d738fb82f/pure_eval-0.2.3-py3-none-any.whl", hash = "sha256:1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0", size = 11842, upload-time = "2024-07-21T12:58:20.04Z" }, -] - -[[package]] -name = "py-partiql-parser" -version = "0.6.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/58/a1/0a2867e48b232b4f82c4929ef7135f2a5d72c3886b957dccf63c70aa2fcb/py_partiql_parser-0.6.1.tar.gz", hash = "sha256:8583ff2a0e15560ef3bc3df109a7714d17f87d81d33e8c38b7fed4e58a63215d", size = 17120, upload-time = "2024-12-25T22:06:41.327Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/97/84/0e410c20bbe9a504fc56e97908f13261c2b313d16cbb3b738556166f044a/py_partiql_parser-0.6.1-py2.py3-none-any.whl", hash = "sha256:ff6a48067bff23c37e9044021bf1d949c83e195490c17e020715e927fe5b2456", size = 23520, upload-time = "2024-12-25T22:06:39.106Z" }, -] - -[[package]] -name = "pycparser" -version = "2.22" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/1d/b2/31537cf4b1ca988837256c910a668b553fceb8f069bedc4b1c826024b52c/pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6", size = 172736, upload-time = "2024-03-30T13:22:22.564Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/13/a3/a812df4e2dd5696d1f351d58b8fe16a405b234ad2886a0dab9183fb78109/pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc", size = 117552, upload-time = "2024-03-30T13:22:20.476Z" }, -] - -[[package]] -name = "pydantic" -version = "2.11.7" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "annotated-types" }, - { name = "pydantic-core" }, - { name = "typing-extensions" }, - { name = "typing-inspection" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/00/dd/4325abf92c39ba8623b5af936ddb36ffcfe0beae70405d456ab1fb2f5b8c/pydantic-2.11.7.tar.gz", hash = "sha256:d989c3c6cb79469287b1569f7447a17848c998458d49ebe294e975b9baf0f0db", size = 788350, upload-time = "2025-06-14T08:33:17.137Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/6a/c0/ec2b1c8712ca690e5d61979dee872603e92b8a32f94cc1b72d53beab008a/pydantic-2.11.7-py3-none-any.whl", hash = "sha256:dde5df002701f6de26248661f6835bbe296a47bf73990135c7d07ce741b9623b", size = 444782, upload-time = "2025-06-14T08:33:14.905Z" }, -] - -[[package]] -name = "pydantic-core" -version = "2.33.2" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "typing-extensions" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/ad/88/5f2260bdfae97aabf98f1778d43f69574390ad787afb646292a638c923d4/pydantic_core-2.33.2.tar.gz", hash = "sha256:7cb8bc3605c29176e1b105350d2e6474142d7c1bd1d9327c4a9bdb46bf827acc", size = 435195, upload-time = "2025-04-23T18:33:52.104Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/3f/8d/71db63483d518cbbf290261a1fc2839d17ff89fce7089e08cad07ccfce67/pydantic_core-2.33.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:4c5b0a576fb381edd6d27f0a85915c6daf2f8138dc5c267a57c08a62900758c7", size = 2028584, upload-time = "2025-04-23T18:31:03.106Z" }, - { url = "https://files.pythonhosted.org/packages/24/2f/3cfa7244ae292dd850989f328722d2aef313f74ffc471184dc509e1e4e5a/pydantic_core-2.33.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e799c050df38a639db758c617ec771fd8fb7a5f8eaaa4b27b101f266b216a246", size = 1855071, upload-time = "2025-04-23T18:31:04.621Z" }, - { url = "https://files.pythonhosted.org/packages/b3/d3/4ae42d33f5e3f50dd467761304be2fa0a9417fbf09735bc2cce003480f2a/pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dc46a01bf8d62f227d5ecee74178ffc448ff4e5197c756331f71efcc66dc980f", size = 1897823, upload-time = "2025-04-23T18:31:06.377Z" }, - { url = "https://files.pythonhosted.org/packages/f4/f3/aa5976e8352b7695ff808599794b1fba2a9ae2ee954a3426855935799488/pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a144d4f717285c6d9234a66778059f33a89096dfb9b39117663fd8413d582dcc", size = 1983792, upload-time = "2025-04-23T18:31:07.93Z" }, - { url = "https://files.pythonhosted.org/packages/d5/7a/cda9b5a23c552037717f2b2a5257e9b2bfe45e687386df9591eff7b46d28/pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:73cf6373c21bc80b2e0dc88444f41ae60b2f070ed02095754eb5a01df12256de", size = 2136338, upload-time = "2025-04-23T18:31:09.283Z" }, - { url = "https://files.pythonhosted.org/packages/2b/9f/b8f9ec8dd1417eb9da784e91e1667d58a2a4a7b7b34cf4af765ef663a7e5/pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3dc625f4aa79713512d1976fe9f0bc99f706a9dee21dfd1810b4bbbf228d0e8a", size = 2730998, upload-time = "2025-04-23T18:31:11.7Z" }, - { url = "https://files.pythonhosted.org/packages/47/bc/cd720e078576bdb8255d5032c5d63ee5c0bf4b7173dd955185a1d658c456/pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:881b21b5549499972441da4758d662aeea93f1923f953e9cbaff14b8b9565aef", size = 2003200, upload-time = "2025-04-23T18:31:13.536Z" }, - { url = "https://files.pythonhosted.org/packages/ca/22/3602b895ee2cd29d11a2b349372446ae9727c32e78a94b3d588a40fdf187/pydantic_core-2.33.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:bdc25f3681f7b78572699569514036afe3c243bc3059d3942624e936ec93450e", size = 2113890, upload-time = "2025-04-23T18:31:15.011Z" }, - { url = "https://files.pythonhosted.org/packages/ff/e6/e3c5908c03cf00d629eb38393a98fccc38ee0ce8ecce32f69fc7d7b558a7/pydantic_core-2.33.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:fe5b32187cbc0c862ee201ad66c30cf218e5ed468ec8dc1cf49dec66e160cc4d", size = 2073359, upload-time = "2025-04-23T18:31:16.393Z" }, - { url = "https://files.pythonhosted.org/packages/12/e7/6a36a07c59ebefc8777d1ffdaf5ae71b06b21952582e4b07eba88a421c79/pydantic_core-2.33.2-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:bc7aee6f634a6f4a95676fcb5d6559a2c2a390330098dba5e5a5f28a2e4ada30", size = 2245883, upload-time = "2025-04-23T18:31:17.892Z" }, - { url = "https://files.pythonhosted.org/packages/16/3f/59b3187aaa6cc0c1e6616e8045b284de2b6a87b027cce2ffcea073adf1d2/pydantic_core-2.33.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:235f45e5dbcccf6bd99f9f472858849f73d11120d76ea8707115415f8e5ebebf", size = 2241074, upload-time = "2025-04-23T18:31:19.205Z" }, - { url = "https://files.pythonhosted.org/packages/e0/ed/55532bb88f674d5d8f67ab121a2a13c385df382de2a1677f30ad385f7438/pydantic_core-2.33.2-cp311-cp311-win32.whl", hash = "sha256:6368900c2d3ef09b69cb0b913f9f8263b03786e5b2a387706c5afb66800efd51", size = 1910538, upload-time = "2025-04-23T18:31:20.541Z" }, - { url = "https://files.pythonhosted.org/packages/fe/1b/25b7cccd4519c0b23c2dd636ad39d381abf113085ce4f7bec2b0dc755eb1/pydantic_core-2.33.2-cp311-cp311-win_amd64.whl", hash = "sha256:1e063337ef9e9820c77acc768546325ebe04ee38b08703244c1309cccc4f1bab", size = 1952909, upload-time = "2025-04-23T18:31:22.371Z" }, - { url = "https://files.pythonhosted.org/packages/49/a9/d809358e49126438055884c4366a1f6227f0f84f635a9014e2deb9b9de54/pydantic_core-2.33.2-cp311-cp311-win_arm64.whl", hash = "sha256:6b99022f1d19bc32a4c2a0d544fc9a76e3be90f0b3f4af413f87d38749300e65", size = 1897786, upload-time = "2025-04-23T18:31:24.161Z" }, - { url = "https://files.pythonhosted.org/packages/18/8a/2b41c97f554ec8c71f2a8a5f85cb56a8b0956addfe8b0efb5b3d77e8bdc3/pydantic_core-2.33.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:a7ec89dc587667f22b6a0b6579c249fca9026ce7c333fc142ba42411fa243cdc", size = 2009000, upload-time = "2025-04-23T18:31:25.863Z" }, - { url = "https://files.pythonhosted.org/packages/a1/02/6224312aacb3c8ecbaa959897af57181fb6cf3a3d7917fd44d0f2917e6f2/pydantic_core-2.33.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3c6db6e52c6d70aa0d00d45cdb9b40f0433b96380071ea80b09277dba021ddf7", size = 1847996, upload-time = "2025-04-23T18:31:27.341Z" }, - { url = "https://files.pythonhosted.org/packages/d6/46/6dcdf084a523dbe0a0be59d054734b86a981726f221f4562aed313dbcb49/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e61206137cbc65e6d5256e1166f88331d3b6238e082d9f74613b9b765fb9025", size = 1880957, upload-time = "2025-04-23T18:31:28.956Z" }, - { url = "https://files.pythonhosted.org/packages/ec/6b/1ec2c03837ac00886ba8160ce041ce4e325b41d06a034adbef11339ae422/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eb8c529b2819c37140eb51b914153063d27ed88e3bdc31b71198a198e921e011", size = 1964199, upload-time = "2025-04-23T18:31:31.025Z" }, - { url = "https://files.pythonhosted.org/packages/2d/1d/6bf34d6adb9debd9136bd197ca72642203ce9aaaa85cfcbfcf20f9696e83/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c52b02ad8b4e2cf14ca7b3d918f3eb0ee91e63b3167c32591e57c4317e134f8f", size = 2120296, upload-time = "2025-04-23T18:31:32.514Z" }, - { url = "https://files.pythonhosted.org/packages/e0/94/2bd0aaf5a591e974b32a9f7123f16637776c304471a0ab33cf263cf5591a/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:96081f1605125ba0855dfda83f6f3df5ec90c61195421ba72223de35ccfb2f88", size = 2676109, upload-time = "2025-04-23T18:31:33.958Z" }, - { url = "https://files.pythonhosted.org/packages/f9/41/4b043778cf9c4285d59742281a769eac371b9e47e35f98ad321349cc5d61/pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f57a69461af2a5fa6e6bbd7a5f60d3b7e6cebb687f55106933188e79ad155c1", size = 2002028, upload-time = "2025-04-23T18:31:39.095Z" }, - { url = "https://files.pythonhosted.org/packages/cb/d5/7bb781bf2748ce3d03af04d5c969fa1308880e1dca35a9bd94e1a96a922e/pydantic_core-2.33.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:572c7e6c8bb4774d2ac88929e3d1f12bc45714ae5ee6d9a788a9fb35e60bb04b", size = 2100044, upload-time = "2025-04-23T18:31:41.034Z" }, - { url = "https://files.pythonhosted.org/packages/fe/36/def5e53e1eb0ad896785702a5bbfd25eed546cdcf4087ad285021a90ed53/pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:db4b41f9bd95fbe5acd76d89920336ba96f03e149097365afe1cb092fceb89a1", size = 2058881, upload-time = "2025-04-23T18:31:42.757Z" }, - { url = "https://files.pythonhosted.org/packages/01/6c/57f8d70b2ee57fc3dc8b9610315949837fa8c11d86927b9bb044f8705419/pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:fa854f5cf7e33842a892e5c73f45327760bc7bc516339fda888c75ae60edaeb6", size = 2227034, upload-time = "2025-04-23T18:31:44.304Z" }, - { url = "https://files.pythonhosted.org/packages/27/b9/9c17f0396a82b3d5cbea4c24d742083422639e7bb1d5bf600e12cb176a13/pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:5f483cfb75ff703095c59e365360cb73e00185e01aaea067cd19acffd2ab20ea", size = 2234187, upload-time = "2025-04-23T18:31:45.891Z" }, - { url = "https://files.pythonhosted.org/packages/b0/6a/adf5734ffd52bf86d865093ad70b2ce543415e0e356f6cacabbc0d9ad910/pydantic_core-2.33.2-cp312-cp312-win32.whl", hash = "sha256:9cb1da0f5a471435a7bc7e439b8a728e8b61e59784b2af70d7c169f8dd8ae290", size = 1892628, upload-time = "2025-04-23T18:31:47.819Z" }, - { url = "https://files.pythonhosted.org/packages/43/e4/5479fecb3606c1368d496a825d8411e126133c41224c1e7238be58b87d7e/pydantic_core-2.33.2-cp312-cp312-win_amd64.whl", hash = "sha256:f941635f2a3d96b2973e867144fde513665c87f13fe0e193c158ac51bfaaa7b2", size = 1955866, upload-time = "2025-04-23T18:31:49.635Z" }, - { url = "https://files.pythonhosted.org/packages/0d/24/8b11e8b3e2be9dd82df4b11408a67c61bb4dc4f8e11b5b0fc888b38118b5/pydantic_core-2.33.2-cp312-cp312-win_arm64.whl", hash = "sha256:cca3868ddfaccfbc4bfb1d608e2ccaaebe0ae628e1416aeb9c4d88c001bb45ab", size = 1888894, upload-time = "2025-04-23T18:31:51.609Z" }, - { url = "https://files.pythonhosted.org/packages/46/8c/99040727b41f56616573a28771b1bfa08a3d3fe74d3d513f01251f79f172/pydantic_core-2.33.2-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:1082dd3e2d7109ad8b7da48e1d4710c8d06c253cbc4a27c1cff4fbcaa97a9e3f", size = 2015688, upload-time = "2025-04-23T18:31:53.175Z" }, - { url = "https://files.pythonhosted.org/packages/3a/cc/5999d1eb705a6cefc31f0b4a90e9f7fc400539b1a1030529700cc1b51838/pydantic_core-2.33.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f517ca031dfc037a9c07e748cefd8d96235088b83b4f4ba8939105d20fa1dcd6", size = 1844808, upload-time = "2025-04-23T18:31:54.79Z" }, - { url = "https://files.pythonhosted.org/packages/6f/5e/a0a7b8885c98889a18b6e376f344da1ef323d270b44edf8174d6bce4d622/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a9f2c9dd19656823cb8250b0724ee9c60a82f3cdf68a080979d13092a3b0fef", size = 1885580, upload-time = "2025-04-23T18:31:57.393Z" }, - { url = "https://files.pythonhosted.org/packages/3b/2a/953581f343c7d11a304581156618c3f592435523dd9d79865903272c256a/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2b0a451c263b01acebe51895bfb0e1cc842a5c666efe06cdf13846c7418caa9a", size = 1973859, upload-time = "2025-04-23T18:31:59.065Z" }, - { url = "https://files.pythonhosted.org/packages/e6/55/f1a813904771c03a3f97f676c62cca0c0a4138654107c1b61f19c644868b/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ea40a64d23faa25e62a70ad163571c0b342b8bf66d5fa612ac0dec4f069d916", size = 2120810, upload-time = "2025-04-23T18:32:00.78Z" }, - { url = "https://files.pythonhosted.org/packages/aa/c3/053389835a996e18853ba107a63caae0b9deb4a276c6b472931ea9ae6e48/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0fb2d542b4d66f9470e8065c5469ec676978d625a8b7a363f07d9a501a9cb36a", size = 2676498, upload-time = "2025-04-23T18:32:02.418Z" }, - { url = "https://files.pythonhosted.org/packages/eb/3c/f4abd740877a35abade05e437245b192f9d0ffb48bbbbd708df33d3cda37/pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9fdac5d6ffa1b5a83bca06ffe7583f5576555e6c8b3a91fbd25ea7780f825f7d", size = 2000611, upload-time = "2025-04-23T18:32:04.152Z" }, - { url = "https://files.pythonhosted.org/packages/59/a7/63ef2fed1837d1121a894d0ce88439fe3e3b3e48c7543b2a4479eb99c2bd/pydantic_core-2.33.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:04a1a413977ab517154eebb2d326da71638271477d6ad87a769102f7c2488c56", size = 2107924, upload-time = "2025-04-23T18:32:06.129Z" }, - { url = "https://files.pythonhosted.org/packages/04/8f/2551964ef045669801675f1cfc3b0d74147f4901c3ffa42be2ddb1f0efc4/pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:c8e7af2f4e0194c22b5b37205bfb293d166a7344a5b0d0eaccebc376546d77d5", size = 2063196, upload-time = "2025-04-23T18:32:08.178Z" }, - { url = "https://files.pythonhosted.org/packages/26/bd/d9602777e77fc6dbb0c7db9ad356e9a985825547dce5ad1d30ee04903918/pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:5c92edd15cd58b3c2d34873597a1e20f13094f59cf88068adb18947df5455b4e", size = 2236389, upload-time = "2025-04-23T18:32:10.242Z" }, - { url = "https://files.pythonhosted.org/packages/42/db/0e950daa7e2230423ab342ae918a794964b053bec24ba8af013fc7c94846/pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:65132b7b4a1c0beded5e057324b7e16e10910c106d43675d9bd87d4f38dde162", size = 2239223, upload-time = "2025-04-23T18:32:12.382Z" }, - { url = "https://files.pythonhosted.org/packages/58/4d/4f937099c545a8a17eb52cb67fe0447fd9a373b348ccfa9a87f141eeb00f/pydantic_core-2.33.2-cp313-cp313-win32.whl", hash = "sha256:52fb90784e0a242bb96ec53f42196a17278855b0f31ac7c3cc6f5c1ec4811849", size = 1900473, upload-time = "2025-04-23T18:32:14.034Z" }, - { url = "https://files.pythonhosted.org/packages/a0/75/4a0a9bac998d78d889def5e4ef2b065acba8cae8c93696906c3a91f310ca/pydantic_core-2.33.2-cp313-cp313-win_amd64.whl", hash = "sha256:c083a3bdd5a93dfe480f1125926afcdbf2917ae714bdb80b36d34318b2bec5d9", size = 1955269, upload-time = "2025-04-23T18:32:15.783Z" }, - { url = "https://files.pythonhosted.org/packages/f9/86/1beda0576969592f1497b4ce8e7bc8cbdf614c352426271b1b10d5f0aa64/pydantic_core-2.33.2-cp313-cp313-win_arm64.whl", hash = "sha256:e80b087132752f6b3d714f041ccf74403799d3b23a72722ea2e6ba2e892555b9", size = 1893921, upload-time = "2025-04-23T18:32:18.473Z" }, - { url = "https://files.pythonhosted.org/packages/a4/7d/e09391c2eebeab681df2b74bfe6c43422fffede8dc74187b2b0bf6fd7571/pydantic_core-2.33.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:61c18fba8e5e9db3ab908620af374db0ac1baa69f0f32df4f61ae23f15e586ac", size = 1806162, upload-time = "2025-04-23T18:32:20.188Z" }, - { url = "https://files.pythonhosted.org/packages/f1/3d/847b6b1fed9f8ed3bb95a9ad04fbd0b212e832d4f0f50ff4d9ee5a9f15cf/pydantic_core-2.33.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95237e53bb015f67b63c91af7518a62a8660376a6a0db19b89acc77a4d6199f5", size = 1981560, upload-time = "2025-04-23T18:32:22.354Z" }, - { url = "https://files.pythonhosted.org/packages/6f/9a/e73262f6c6656262b5fdd723ad90f518f579b7bc8622e43a942eec53c938/pydantic_core-2.33.2-cp313-cp313t-win_amd64.whl", hash = "sha256:c2fc0a768ef76c15ab9238afa6da7f69895bb5d1ee83aeea2e3509af4472d0b9", size = 1935777, upload-time = "2025-04-23T18:32:25.088Z" }, - { url = "https://files.pythonhosted.org/packages/7b/27/d4ae6487d73948d6f20dddcd94be4ea43e74349b56eba82e9bdee2d7494c/pydantic_core-2.33.2-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:dd14041875d09cc0f9308e37a6f8b65f5585cf2598a53aa0123df8b129d481f8", size = 2025200, upload-time = "2025-04-23T18:33:14.199Z" }, - { url = "https://files.pythonhosted.org/packages/f1/b8/b3cb95375f05d33801024079b9392a5ab45267a63400bf1866e7ce0f0de4/pydantic_core-2.33.2-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:d87c561733f66531dced0da6e864f44ebf89a8fba55f31407b00c2f7f9449593", size = 1859123, upload-time = "2025-04-23T18:33:16.555Z" }, - { url = "https://files.pythonhosted.org/packages/05/bc/0d0b5adeda59a261cd30a1235a445bf55c7e46ae44aea28f7bd6ed46e091/pydantic_core-2.33.2-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f82865531efd18d6e07a04a17331af02cb7a651583c418df8266f17a63c6612", size = 1892852, upload-time = "2025-04-23T18:33:18.513Z" }, - { url = "https://files.pythonhosted.org/packages/3e/11/d37bdebbda2e449cb3f519f6ce950927b56d62f0b84fd9cb9e372a26a3d5/pydantic_core-2.33.2-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2bfb5112df54209d820d7bf9317c7a6c9025ea52e49f46b6a2060104bba37de7", size = 2067484, upload-time = "2025-04-23T18:33:20.475Z" }, - { url = "https://files.pythonhosted.org/packages/8c/55/1f95f0a05ce72ecb02a8a8a1c3be0579bbc29b1d5ab68f1378b7bebc5057/pydantic_core-2.33.2-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:64632ff9d614e5eecfb495796ad51b0ed98c453e447a76bcbeeb69615079fc7e", size = 2108896, upload-time = "2025-04-23T18:33:22.501Z" }, - { url = "https://files.pythonhosted.org/packages/53/89/2b2de6c81fa131f423246a9109d7b2a375e83968ad0800d6e57d0574629b/pydantic_core-2.33.2-pp311-pypy311_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:f889f7a40498cc077332c7ab6b4608d296d852182211787d4f3ee377aaae66e8", size = 2069475, upload-time = "2025-04-23T18:33:24.528Z" }, - { url = "https://files.pythonhosted.org/packages/b8/e9/1f7efbe20d0b2b10f6718944b5d8ece9152390904f29a78e68d4e7961159/pydantic_core-2.33.2-pp311-pypy311_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:de4b83bb311557e439b9e186f733f6c645b9417c84e2eb8203f3f820a4b988bf", size = 2239013, upload-time = "2025-04-23T18:33:26.621Z" }, - { url = "https://files.pythonhosted.org/packages/3c/b2/5309c905a93811524a49b4e031e9851a6b00ff0fb668794472ea7746b448/pydantic_core-2.33.2-pp311-pypy311_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:82f68293f055f51b51ea42fafc74b6aad03e70e191799430b90c13d643059ebb", size = 2238715, upload-time = "2025-04-23T18:33:28.656Z" }, - { url = "https://files.pythonhosted.org/packages/32/56/8a7ca5d2cd2cda1d245d34b1c9a942920a718082ae8e54e5f3e5a58b7add/pydantic_core-2.33.2-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:329467cecfb529c925cf2bbd4d60d2c509bc2fb52a20c1045bf09bb70971a9c1", size = 2066757, upload-time = "2025-04-23T18:33:30.645Z" }, -] - -[[package]] -name = "pydata-sphinx-theme" -version = "0.16.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "accessible-pygments" }, - { name = "babel" }, - { name = "beautifulsoup4" }, - { name = "docutils" }, - { name = "pygments" }, - { name = "sphinx" }, - { name = "typing-extensions" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/00/20/bb50f9de3a6de69e6abd6b087b52fa2418a0418b19597601605f855ad044/pydata_sphinx_theme-0.16.1.tar.gz", hash = "sha256:a08b7f0b7f70387219dc659bff0893a7554d5eb39b59d3b8ef37b8401b7642d7", size = 2412693, upload-time = "2024-12-17T10:53:39.537Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e2/0d/8ba33fa83a7dcde13eb3c1c2a0c1cc29950a048bfed6d9b0d8b6bd710b4c/pydata_sphinx_theme-0.16.1-py3-none-any.whl", hash = "sha256:225331e8ac4b32682c18fcac5a57a6f717c4e632cea5dd0e247b55155faeccde", size = 6723264, upload-time = "2024-12-17T10:53:35.645Z" }, -] - -[[package]] -name = "pygments" -version = "2.19.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b0/77/a5b8c569bf593b0140bde72ea885a803b82086995367bf2037de0159d924/pygments-2.19.2.tar.gz", hash = "sha256:636cb2477cec7f8952536970bc533bc43743542f70392ae026374600add5b887", size = 4968631, upload-time = "2025-06-21T13:39:12.283Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl", hash = "sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b", size = 1225217, upload-time = "2025-06-21T13:39:07.939Z" }, -] - -[[package]] -name = "pyparsing" -version = "3.2.3" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/bb/22/f1129e69d94ffff626bdb5c835506b3a5b4f3d070f17ea295e12c2c6f60f/pyparsing-3.2.3.tar.gz", hash = "sha256:b9c13f1ab8b3b542f72e28f634bad4de758ab3ce4546e4301970ad6fa77c38be", size = 1088608, upload-time = "2025-03-25T05:01:28.114Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/05/e7/df2285f3d08fee213f2d041540fa4fc9ca6c2d44cf36d3a035bf2a8d2bcc/pyparsing-3.2.3-py3-none-any.whl", hash = "sha256:a749938e02d6fd0b59b356ca504a24982314bb090c383e3cf201c95ef7e2bfcf", size = 111120, upload-time = "2025-03-25T05:01:24.908Z" }, -] - -[[package]] -name = "pytest" -version = "8.3.5" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "colorama", marker = "sys_platform == 'win32'" }, - { name = "iniconfig" }, - { name = "packaging" }, - { name = "pluggy" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/ae/3c/c9d525a414d506893f0cd8a8d0de7706446213181570cdbd766691164e40/pytest-8.3.5.tar.gz", hash = "sha256:f4efe70cc14e511565ac476b57c279e12a855b11f48f212af1080ef2263d3845", size = 1450891, upload-time = "2025-03-02T12:54:54.503Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/30/3d/64ad57c803f1fa1e963a7946b6e0fea4a70df53c1a7fed304586539c2bac/pytest-8.3.5-py3-none-any.whl", hash = "sha256:c69214aa47deac29fad6c2a4f590b9c4a9fdb16a403176fe154b79c0b4d4d820", size = 343634, upload-time = "2025-03-02T12:54:52.069Z" }, -] - -[[package]] -name = "pytest-accept" -version = "0.1.12" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "pytest" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/b5/a9/1ba09166e1bb7dc3db5c74e447e68ca0a72c799dce6b8745ca8ad64acd95/pytest-accept-0.1.12.tar.gz", hash = "sha256:0cbed8fafac4ab5ca4413f353c68ea51d99911d13656530ba8b49d0dae200f26", size = 17698, upload-time = "2024-12-08T22:57:00.211Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/23/4e/7677b01b773f9aa1b77ad1aa55c601cc8763966d691e7a341eaca1ffc09e/pytest_accept-0.1.12-py3-none-any.whl", hash = "sha256:189ccac80113920966c98ce4d6d1bfbe1b22f39b7e97a5c3a46c68db2ca84415", size = 15511, upload-time = "2024-12-08T22:57:01.785Z" }, -] - -[[package]] -name = "pytest-asyncio" -version = "1.1.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "pytest" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/4e/51/f8794af39eeb870e87a8c8068642fc07bce0c854d6865d7dd0f2a9d338c2/pytest_asyncio-1.1.0.tar.gz", hash = "sha256:796aa822981e01b68c12e4827b8697108f7205020f24b5793b3c41555dab68ea", size = 46652, upload-time = "2025-07-16T04:29:26.393Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/c7/9d/bf86eddabf8c6c9cb1ea9a869d6873b46f105a5d292d3a6f7071f5b07935/pytest_asyncio-1.1.0-py3-none-any.whl", hash = "sha256:5fe2d69607b0bd75c656d1211f969cadba035030156745ee09e7d71740e58ecf", size = 15157, upload-time = "2025-07-16T04:29:24.929Z" }, -] - -[[package]] -name = "pytest-cov" -version = "6.2.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "coverage", extra = ["toml"] }, - { name = "pluggy" }, - { name = "pytest" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/18/99/668cade231f434aaa59bbfbf49469068d2ddd945000621d3d165d2e7dd7b/pytest_cov-6.2.1.tar.gz", hash = "sha256:25cc6cc0a5358204b8108ecedc51a9b57b34cc6b8c967cc2c01a4e00d8a67da2", size = 69432, upload-time = "2025-06-12T10:47:47.684Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/bc/16/4ea354101abb1287856baa4af2732be351c7bee728065aed451b678153fd/pytest_cov-6.2.1-py3-none-any.whl", hash = "sha256:f5bc4c23f42f1cdd23c70b1dab1bbaef4fc505ba950d53e0081d0730dd7e86d5", size = 24644, upload-time = "2025-06-12T10:47:45.932Z" }, -] - -[[package]] -name = "pytest-xdist" -version = "3.8.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "execnet" }, - { name = "pytest" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/78/b4/439b179d1ff526791eb921115fca8e44e596a13efeda518b9d845a619450/pytest_xdist-3.8.0.tar.gz", hash = "sha256:7e578125ec9bc6050861aa93f2d59f1d8d085595d6551c2c90b6f4fad8d3a9f1", size = 88069, upload-time = "2025-07-01T13:30:59.346Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ca/31/d4e37e9e550c2b92a9cbc2e4d0b7420a27224968580b5a447f420847c975/pytest_xdist-3.8.0-py3-none-any.whl", hash = "sha256:202ca578cfeb7370784a8c33d6d05bc6e13b4f25b5053c30a152269fd10f0b88", size = 46396, upload-time = "2025-07-01T13:30:56.632Z" }, -] - -[[package]] -name = "python-dateutil" -version = "2.9.0.post0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "six" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/66/c0/0c8b6ad9f17a802ee498c46e004a0eb49bc148f2fd230864601a86dcf6db/python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", size = 342432, upload-time = "2024-03-01T18:36:20.211Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427", size = 229892, upload-time = "2024-03-01T18:36:18.57Z" }, -] - -[[package]] -name = "pywin32" -version = "311" -source = { registry = "https://pypi.org/simple" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/7c/af/449a6a91e5d6db51420875c54f6aff7c97a86a3b13a0b4f1a5c13b988de3/pywin32-311-cp311-cp311-win32.whl", hash = "sha256:184eb5e436dea364dcd3d2316d577d625c0351bf237c4e9a5fabbcfa5a58b151", size = 8697031, upload-time = "2025-07-14T20:13:13.266Z" }, - { url = "https://files.pythonhosted.org/packages/51/8f/9bb81dd5bb77d22243d33c8397f09377056d5c687aa6d4042bea7fbf8364/pywin32-311-cp311-cp311-win_amd64.whl", hash = "sha256:3ce80b34b22b17ccbd937a6e78e7225d80c52f5ab9940fe0506a1a16f3dab503", size = 9508308, upload-time = "2025-07-14T20:13:15.147Z" }, - { url = "https://files.pythonhosted.org/packages/44/7b/9c2ab54f74a138c491aba1b1cd0795ba61f144c711daea84a88b63dc0f6c/pywin32-311-cp311-cp311-win_arm64.whl", hash = "sha256:a733f1388e1a842abb67ffa8e7aad0e70ac519e09b0f6a784e65a136ec7cefd2", size = 8703930, upload-time = "2025-07-14T20:13:16.945Z" }, - { url = "https://files.pythonhosted.org/packages/e7/ab/01ea1943d4eba0f850c3c61e78e8dd59757ff815ff3ccd0a84de5f541f42/pywin32-311-cp312-cp312-win32.whl", hash = "sha256:750ec6e621af2b948540032557b10a2d43b0cee2ae9758c54154d711cc852d31", size = 8706543, upload-time = "2025-07-14T20:13:20.765Z" }, - { url = "https://files.pythonhosted.org/packages/d1/a8/a0e8d07d4d051ec7502cd58b291ec98dcc0c3fff027caad0470b72cfcc2f/pywin32-311-cp312-cp312-win_amd64.whl", hash = "sha256:b8c095edad5c211ff31c05223658e71bf7116daa0ecf3ad85f3201ea3190d067", size = 9495040, upload-time = "2025-07-14T20:13:22.543Z" }, - { url = "https://files.pythonhosted.org/packages/ba/3a/2ae996277b4b50f17d61f0603efd8253cb2d79cc7ae159468007b586396d/pywin32-311-cp312-cp312-win_arm64.whl", hash = "sha256:e286f46a9a39c4a18b319c28f59b61de793654af2f395c102b4f819e584b5852", size = 8710102, upload-time = "2025-07-14T20:13:24.682Z" }, - { url = "https://files.pythonhosted.org/packages/a5/be/3fd5de0979fcb3994bfee0d65ed8ca9506a8a1260651b86174f6a86f52b3/pywin32-311-cp313-cp313-win32.whl", hash = "sha256:f95ba5a847cba10dd8c4d8fefa9f2a6cf283b8b88ed6178fa8a6c1ab16054d0d", size = 8705700, upload-time = "2025-07-14T20:13:26.471Z" }, - { url = "https://files.pythonhosted.org/packages/e3/28/e0a1909523c6890208295a29e05c2adb2126364e289826c0a8bc7297bd5c/pywin32-311-cp313-cp313-win_amd64.whl", hash = "sha256:718a38f7e5b058e76aee1c56ddd06908116d35147e133427e59a3983f703a20d", size = 9494700, upload-time = "2025-07-14T20:13:28.243Z" }, - { url = "https://files.pythonhosted.org/packages/04/bf/90339ac0f55726dce7d794e6d79a18a91265bdf3aa70b6b9ca52f35e022a/pywin32-311-cp313-cp313-win_arm64.whl", hash = "sha256:7b4075d959648406202d92a2310cb990fea19b535c7f4a78d3f5e10b926eeb8a", size = 8709318, upload-time = "2025-07-14T20:13:30.348Z" }, - { url = "https://files.pythonhosted.org/packages/c9/31/097f2e132c4f16d99a22bfb777e0fd88bd8e1c634304e102f313af69ace5/pywin32-311-cp314-cp314-win32.whl", hash = "sha256:b7a2c10b93f8986666d0c803ee19b5990885872a7de910fc460f9b0c2fbf92ee", size = 8840714, upload-time = "2025-07-14T20:13:32.449Z" }, - { url = "https://files.pythonhosted.org/packages/90/4b/07c77d8ba0e01349358082713400435347df8426208171ce297da32c313d/pywin32-311-cp314-cp314-win_amd64.whl", hash = "sha256:3aca44c046bd2ed8c90de9cb8427f581c479e594e99b5c0bb19b29c10fd6cb87", size = 9656800, upload-time = "2025-07-14T20:13:34.312Z" }, - { url = "https://files.pythonhosted.org/packages/c0/d2/21af5c535501a7233e734b8af901574572da66fcc254cb35d0609c9080dd/pywin32-311-cp314-cp314-win_arm64.whl", hash = "sha256:a508e2d9025764a8270f93111a970e1d0fbfc33f4153b388bb649b7eec4f9b42", size = 8932540, upload-time = "2025-07-14T20:13:36.379Z" }, -] - -[[package]] -name = "pyyaml" -version = "6.0.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/54/ed/79a089b6be93607fa5cdaedf301d7dfb23af5f25c398d5ead2525b063e17/pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e", size = 130631, upload-time = "2024-08-06T20:33:50.674Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/f8/aa/7af4e81f7acba21a4c6be026da38fd2b872ca46226673c89a758ebdc4fd2/PyYAML-6.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774", size = 184612, upload-time = "2024-08-06T20:32:03.408Z" }, - { url = "https://files.pythonhosted.org/packages/8b/62/b9faa998fd185f65c1371643678e4d58254add437edb764a08c5a98fb986/PyYAML-6.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee", size = 172040, upload-time = "2024-08-06T20:32:04.926Z" }, - { url = "https://files.pythonhosted.org/packages/ad/0c/c804f5f922a9a6563bab712d8dcc70251e8af811fce4524d57c2c0fd49a4/PyYAML-6.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c", size = 736829, upload-time = "2024-08-06T20:32:06.459Z" }, - { url = "https://files.pythonhosted.org/packages/51/16/6af8d6a6b210c8e54f1406a6b9481febf9c64a3109c541567e35a49aa2e7/PyYAML-6.0.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317", size = 764167, upload-time = "2024-08-06T20:32:08.338Z" }, - { url = "https://files.pythonhosted.org/packages/75/e4/2c27590dfc9992f73aabbeb9241ae20220bd9452df27483b6e56d3975cc5/PyYAML-6.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85", size = 762952, upload-time = "2024-08-06T20:32:14.124Z" }, - { url = "https://files.pythonhosted.org/packages/9b/97/ecc1abf4a823f5ac61941a9c00fe501b02ac3ab0e373c3857f7d4b83e2b6/PyYAML-6.0.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4", size = 735301, upload-time = "2024-08-06T20:32:16.17Z" }, - { url = "https://files.pythonhosted.org/packages/45/73/0f49dacd6e82c9430e46f4a027baa4ca205e8b0a9dce1397f44edc23559d/PyYAML-6.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e", size = 756638, upload-time = "2024-08-06T20:32:18.555Z" }, - { url = "https://files.pythonhosted.org/packages/22/5f/956f0f9fc65223a58fbc14459bf34b4cc48dec52e00535c79b8db361aabd/PyYAML-6.0.2-cp311-cp311-win32.whl", hash = "sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5", size = 143850, upload-time = "2024-08-06T20:32:19.889Z" }, - { url = "https://files.pythonhosted.org/packages/ed/23/8da0bbe2ab9dcdd11f4f4557ccaf95c10b9811b13ecced089d43ce59c3c8/PyYAML-6.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44", size = 161980, upload-time = "2024-08-06T20:32:21.273Z" }, - { url = "https://files.pythonhosted.org/packages/86/0c/c581167fc46d6d6d7ddcfb8c843a4de25bdd27e4466938109ca68492292c/PyYAML-6.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab", size = 183873, upload-time = "2024-08-06T20:32:25.131Z" }, - { url = "https://files.pythonhosted.org/packages/a8/0c/38374f5bb272c051e2a69281d71cba6fdb983413e6758b84482905e29a5d/PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725", size = 173302, upload-time = "2024-08-06T20:32:26.511Z" }, - { url = "https://files.pythonhosted.org/packages/c3/93/9916574aa8c00aa06bbac729972eb1071d002b8e158bd0e83a3b9a20a1f7/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5", size = 739154, upload-time = "2024-08-06T20:32:28.363Z" }, - { url = "https://files.pythonhosted.org/packages/95/0f/b8938f1cbd09739c6da569d172531567dbcc9789e0029aa070856f123984/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425", size = 766223, upload-time = "2024-08-06T20:32:30.058Z" }, - { url = "https://files.pythonhosted.org/packages/b9/2b/614b4752f2e127db5cc206abc23a8c19678e92b23c3db30fc86ab731d3bd/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476", size = 767542, upload-time = "2024-08-06T20:32:31.881Z" }, - { url = "https://files.pythonhosted.org/packages/d4/00/dd137d5bcc7efea1836d6264f049359861cf548469d18da90cd8216cf05f/PyYAML-6.0.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48", size = 731164, upload-time = "2024-08-06T20:32:37.083Z" }, - { url = "https://files.pythonhosted.org/packages/c9/1f/4f998c900485e5c0ef43838363ba4a9723ac0ad73a9dc42068b12aaba4e4/PyYAML-6.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b", size = 756611, upload-time = "2024-08-06T20:32:38.898Z" }, - { url = "https://files.pythonhosted.org/packages/df/d1/f5a275fdb252768b7a11ec63585bc38d0e87c9e05668a139fea92b80634c/PyYAML-6.0.2-cp312-cp312-win32.whl", hash = "sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4", size = 140591, upload-time = "2024-08-06T20:32:40.241Z" }, - { url = "https://files.pythonhosted.org/packages/0c/e8/4f648c598b17c3d06e8753d7d13d57542b30d56e6c2dedf9c331ae56312e/PyYAML-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8", size = 156338, upload-time = "2024-08-06T20:32:41.93Z" }, - { url = "https://files.pythonhosted.org/packages/ef/e3/3af305b830494fa85d95f6d95ef7fa73f2ee1cc8ef5b495c7c3269fb835f/PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba", size = 181309, upload-time = "2024-08-06T20:32:43.4Z" }, - { url = "https://files.pythonhosted.org/packages/45/9f/3b1c20a0b7a3200524eb0076cc027a970d320bd3a6592873c85c92a08731/PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1", size = 171679, upload-time = "2024-08-06T20:32:44.801Z" }, - { url = "https://files.pythonhosted.org/packages/7c/9a/337322f27005c33bcb656c655fa78325b730324c78620e8328ae28b64d0c/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133", size = 733428, upload-time = "2024-08-06T20:32:46.432Z" }, - { url = "https://files.pythonhosted.org/packages/a3/69/864fbe19e6c18ea3cc196cbe5d392175b4cf3d5d0ac1403ec3f2d237ebb5/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484", size = 763361, upload-time = "2024-08-06T20:32:51.188Z" }, - { url = "https://files.pythonhosted.org/packages/04/24/b7721e4845c2f162d26f50521b825fb061bc0a5afcf9a386840f23ea19fa/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5", size = 759523, upload-time = "2024-08-06T20:32:53.019Z" }, - { url = "https://files.pythonhosted.org/packages/2b/b2/e3234f59ba06559c6ff63c4e10baea10e5e7df868092bf9ab40e5b9c56b6/PyYAML-6.0.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc", size = 726660, upload-time = "2024-08-06T20:32:54.708Z" }, - { url = "https://files.pythonhosted.org/packages/fe/0f/25911a9f080464c59fab9027482f822b86bf0608957a5fcc6eaac85aa515/PyYAML-6.0.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652", size = 751597, upload-time = "2024-08-06T20:32:56.985Z" }, - { url = "https://files.pythonhosted.org/packages/14/0d/e2c3b43bbce3cf6bd97c840b46088a3031085179e596d4929729d8d68270/PyYAML-6.0.2-cp313-cp313-win32.whl", hash = "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183", size = 140527, upload-time = "2024-08-06T20:33:03.001Z" }, - { url = "https://files.pythonhosted.org/packages/fa/de/02b54f42487e3d3c6efb3f89428677074ca7bf43aae402517bc7cca949f3/PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563", size = 156446, upload-time = "2024-08-06T20:33:04.33Z" }, -] - -[[package]] -name = "pyzmq" -version = "27.0.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "cffi", marker = "implementation_name == 'pypy'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/30/5f/557d2032a2f471edbcc227da724c24a1c05887b5cda1e3ae53af98b9e0a5/pyzmq-27.0.1.tar.gz", hash = "sha256:45c549204bc20e7484ffd2555f6cf02e572440ecf2f3bdd60d4404b20fddf64b", size = 281158, upload-time = "2025-08-03T05:05:40.352Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ae/18/a8e0da6ababbe9326116fb1c890bf1920eea880e8da621afb6bc0f39a262/pyzmq-27.0.1-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:9729190bd770314f5fbba42476abf6abe79a746eeda11d1d68fd56dd70e5c296", size = 1332721, upload-time = "2025-08-03T05:03:15.237Z" }, - { url = "https://files.pythonhosted.org/packages/75/a4/9431ba598651d60ebd50dc25755402b770322cf8432adcc07d2906e53a54/pyzmq-27.0.1-cp311-cp311-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:696900ef6bc20bef6a242973943574f96c3f97d2183c1bd3da5eea4f559631b1", size = 908249, upload-time = "2025-08-03T05:03:16.933Z" }, - { url = "https://files.pythonhosted.org/packages/f0/7a/e624e1793689e4e685d2ee21c40277dd4024d9d730af20446d88f69be838/pyzmq-27.0.1-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f96a63aecec22d3f7fdea3c6c98df9e42973f5856bb6812c3d8d78c262fee808", size = 668649, upload-time = "2025-08-03T05:03:18.49Z" }, - { url = "https://files.pythonhosted.org/packages/6c/29/0652a39d4e876e0d61379047ecf7752685414ad2e253434348246f7a2a39/pyzmq-27.0.1-cp311-cp311-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c512824360ea7490390566ce00bee880e19b526b312b25cc0bc30a0fe95cb67f", size = 856601, upload-time = "2025-08-03T05:03:20.194Z" }, - { url = "https://files.pythonhosted.org/packages/36/2d/8d5355d7fc55bb6e9c581dd74f58b64fa78c994079e3a0ea09b1b5627cde/pyzmq-27.0.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:dfb2bb5e0f7198eaacfb6796fb0330afd28f36d985a770745fba554a5903595a", size = 1657750, upload-time = "2025-08-03T05:03:22.055Z" }, - { url = "https://files.pythonhosted.org/packages/ab/f4/cd032352d5d252dc6f5ee272a34b59718ba3af1639a8a4ef4654f9535cf5/pyzmq-27.0.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:4f6886c59ba93ffde09b957d3e857e7950c8fe818bd5494d9b4287bc6d5bc7f1", size = 2034312, upload-time = "2025-08-03T05:03:23.578Z" }, - { url = "https://files.pythonhosted.org/packages/e4/1a/c050d8b6597200e97a4bd29b93c769d002fa0b03083858227e0376ad59bc/pyzmq-27.0.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b99ea9d330e86ce1ff7f2456b33f1bf81c43862a5590faf4ef4ed3a63504bdab", size = 1893632, upload-time = "2025-08-03T05:03:25.167Z" }, - { url = "https://files.pythonhosted.org/packages/6a/29/173ce21d5097e7fcf284a090e8beb64fc683c6582b1f00fa52b1b7e867ce/pyzmq-27.0.1-cp311-cp311-win32.whl", hash = "sha256:571f762aed89025ba8cdcbe355fea56889715ec06d0264fd8b6a3f3fa38154ed", size = 566587, upload-time = "2025-08-03T05:03:26.769Z" }, - { url = "https://files.pythonhosted.org/packages/53/ab/22bd33e7086f0a2cc03a5adabff4bde414288bb62a21a7820951ef86ec20/pyzmq-27.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:ee16906c8025fa464bea1e48128c048d02359fb40bebe5333103228528506530", size = 632873, upload-time = "2025-08-03T05:03:28.685Z" }, - { url = "https://files.pythonhosted.org/packages/90/14/3e59b4a28194285ceeff725eba9aa5ba8568d1cb78aed381dec1537c705a/pyzmq-27.0.1-cp311-cp311-win_arm64.whl", hash = "sha256:ba068f28028849da725ff9185c24f832ccf9207a40f9b28ac46ab7c04994bd41", size = 558918, upload-time = "2025-08-03T05:03:30.085Z" }, - { url = "https://files.pythonhosted.org/packages/0e/9b/c0957041067c7724b310f22c398be46399297c12ed834c3bc42200a2756f/pyzmq-27.0.1-cp312-abi3-macosx_10_15_universal2.whl", hash = "sha256:af7ebce2a1e7caf30c0bb64a845f63a69e76a2fadbc1cac47178f7bb6e657bdd", size = 1305432, upload-time = "2025-08-03T05:03:32.177Z" }, - { url = "https://files.pythonhosted.org/packages/8e/55/bd3a312790858f16b7def3897a0c3eb1804e974711bf7b9dcb5f47e7f82c/pyzmq-27.0.1-cp312-abi3-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:8f617f60a8b609a13099b313e7e525e67f84ef4524b6acad396d9ff153f6e4cd", size = 895095, upload-time = "2025-08-03T05:03:33.918Z" }, - { url = "https://files.pythonhosted.org/packages/20/50/fc384631d8282809fb1029a4460d2fe90fa0370a0e866a8318ed75c8d3bb/pyzmq-27.0.1-cp312-abi3-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1d59dad4173dc2a111f03e59315c7bd6e73da1a9d20a84a25cf08325b0582b1a", size = 651826, upload-time = "2025-08-03T05:03:35.818Z" }, - { url = "https://files.pythonhosted.org/packages/7e/0a/2356305c423a975000867de56888b79e44ec2192c690ff93c3109fd78081/pyzmq-27.0.1-cp312-abi3-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f5b6133c8d313bde8bd0d123c169d22525300ff164c2189f849de495e1344577", size = 839751, upload-time = "2025-08-03T05:03:37.265Z" }, - { url = "https://files.pythonhosted.org/packages/d7/1b/81e95ad256ca7e7ccd47f5294c1c6da6e2b64fbace65b84fe8a41470342e/pyzmq-27.0.1-cp312-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:58cca552567423f04d06a075f4b473e78ab5bdb906febe56bf4797633f54aa4e", size = 1641359, upload-time = "2025-08-03T05:03:38.799Z" }, - { url = "https://files.pythonhosted.org/packages/50/63/9f50ec965285f4e92c265c8f18344e46b12803666d8b73b65d254d441435/pyzmq-27.0.1-cp312-abi3-musllinux_1_2_i686.whl", hash = "sha256:4b9d8e26fb600d0d69cc9933e20af08552e97cc868a183d38a5c0d661e40dfbb", size = 2020281, upload-time = "2025-08-03T05:03:40.338Z" }, - { url = "https://files.pythonhosted.org/packages/02/4a/19e3398d0dc66ad2b463e4afa1fc541d697d7bc090305f9dfb948d3dfa29/pyzmq-27.0.1-cp312-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:2329f0c87f0466dce45bba32b63f47018dda5ca40a0085cc5c8558fea7d9fc55", size = 1877112, upload-time = "2025-08-03T05:03:42.012Z" }, - { url = "https://files.pythonhosted.org/packages/bf/42/c562e9151aa90ed1d70aac381ea22a929d6b3a2ce4e1d6e2e135d34fd9c6/pyzmq-27.0.1-cp312-abi3-win32.whl", hash = "sha256:57bb92abdb48467b89c2d21da1ab01a07d0745e536d62afd2e30d5acbd0092eb", size = 558177, upload-time = "2025-08-03T05:03:43.979Z" }, - { url = "https://files.pythonhosted.org/packages/40/96/5c50a7d2d2b05b19994bf7336b97db254299353dd9b49b565bb71b485f03/pyzmq-27.0.1-cp312-abi3-win_amd64.whl", hash = "sha256:ff3f8757570e45da7a5bedaa140489846510014f7a9d5ee9301c61f3f1b8a686", size = 618923, upload-time = "2025-08-03T05:03:45.438Z" }, - { url = "https://files.pythonhosted.org/packages/13/33/1ec89c8f21c89d21a2eaff7def3676e21d8248d2675705e72554fb5a6f3f/pyzmq-27.0.1-cp312-abi3-win_arm64.whl", hash = "sha256:df2c55c958d3766bdb3e9d858b911288acec09a9aab15883f384fc7180df5bed", size = 552358, upload-time = "2025-08-03T05:03:46.887Z" }, - { url = "https://files.pythonhosted.org/packages/6c/a0/f26e276211ec8090a4d11e4ec70eb8a8b15781e591c1d44ce62f372963a0/pyzmq-27.0.1-cp313-cp313-android_24_arm64_v8a.whl", hash = "sha256:497bd8af534ae55dc4ef67eebd1c149ff2a0b0f1e146db73c8b5a53d83c1a5f5", size = 1122287, upload-time = "2025-08-03T05:03:48.838Z" }, - { url = "https://files.pythonhosted.org/packages/9c/d8/af4b507e4f7eeea478cc8ee873995a6fd55582bfb99140593ed460e1db3c/pyzmq-27.0.1-cp313-cp313-android_24_x86_64.whl", hash = "sha256:a066ea6ad6218b4c233906adf0ae67830f451ed238419c0db609310dd781fbe7", size = 1155756, upload-time = "2025-08-03T05:03:50.907Z" }, - { url = "https://files.pythonhosted.org/packages/ac/55/37fae0013e11f88681da42698e550b08a316d608242551f65095cc99232a/pyzmq-27.0.1-cp313-cp313t-macosx_10_15_universal2.whl", hash = "sha256:72d235d6365ca73d8ce92f7425065d70f5c1e19baa458eb3f0d570e425b73a96", size = 1340826, upload-time = "2025-08-03T05:03:52.568Z" }, - { url = "https://files.pythonhosted.org/packages/f2/e4/3a87854c64b26fcf63a9d1b6f4382bd727d4797c772ceb334a97b7489be9/pyzmq-27.0.1-cp313-cp313t-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:313a7b374e3dc64848644ca348a51004b41726f768b02e17e689f1322366a4d9", size = 897283, upload-time = "2025-08-03T05:03:54.167Z" }, - { url = "https://files.pythonhosted.org/packages/17/3e/4296c6b0ad2d07be11ae1395dccf9cae48a0a655cf9be1c3733ad2b591d1/pyzmq-27.0.1-cp313-cp313t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:119ce8590409702394f959c159d048002cbed2f3c0645ec9d6a88087fc70f0f1", size = 660565, upload-time = "2025-08-03T05:03:56.152Z" }, - { url = "https://files.pythonhosted.org/packages/72/41/a33ba3aa48b45b23c4cd4ac49aafde46f3e0f81939f2bfb3b6171a437122/pyzmq-27.0.1-cp313-cp313t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:45c3e00ce16896ace2cd770ab9057a7cf97d4613ea5f2a13f815141d8b6894b9", size = 847680, upload-time = "2025-08-03T05:03:57.696Z" }, - { url = "https://files.pythonhosted.org/packages/3f/8c/bf2350bb25b3b58d2e5b5d2290ffab0e923f0cc6d02288d3fbf4baa6e4d1/pyzmq-27.0.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:678e50ec112bdc6df5a83ac259a55a4ba97a8b314c325ab26b3b5b071151bc61", size = 1650151, upload-time = "2025-08-03T05:03:59.387Z" }, - { url = "https://files.pythonhosted.org/packages/f7/1a/a5a07c54890891344a8ddc3d5ab320dd3c4e39febb6e4472546e456d5157/pyzmq-27.0.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:d0b96c30be9f9387b18b18b6133c75a7b1b0065da64e150fe1feb5ebf31ece1c", size = 2023766, upload-time = "2025-08-03T05:04:01.883Z" }, - { url = "https://files.pythonhosted.org/packages/62/5e/514dcff08f02c6c8a45a6e23621901139cf853be7ac5ccd0b9407c3aa3de/pyzmq-27.0.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:88dc92d9eb5ea4968123e74db146d770b0c8d48f0e2bfb1dbc6c50a8edb12d64", size = 1885195, upload-time = "2025-08-03T05:04:03.923Z" }, - { url = "https://files.pythonhosted.org/packages/c8/91/87f74f98a487fbef0b115f6025e4a295129fd56b2b633a03ba7d5816ecc2/pyzmq-27.0.1-cp313-cp313t-win32.whl", hash = "sha256:6dcbcb34f5c9b0cefdfc71ff745459241b7d3cda5b27c7ad69d45afc0821d1e1", size = 574213, upload-time = "2025-08-03T05:04:05.905Z" }, - { url = "https://files.pythonhosted.org/packages/e6/d7/07f7d0d7f4c81e08be7b60e52ff2591c557377c017f96204d33d5fca1b07/pyzmq-27.0.1-cp313-cp313t-win_amd64.whl", hash = "sha256:b9fd0fda730461f510cfd9a40fafa5355d65f5e3dbdd8d6dfa342b5b3f5d1949", size = 640202, upload-time = "2025-08-03T05:04:07.439Z" }, - { url = "https://files.pythonhosted.org/packages/ab/83/21d66bcef6fb803647a223cbde95111b099e2176277c0cbc8b099c485510/pyzmq-27.0.1-cp313-cp313t-win_arm64.whl", hash = "sha256:56a3b1853f3954ec1f0e91085f1350cc57d18f11205e4ab6e83e4b7c414120e0", size = 561514, upload-time = "2025-08-03T05:04:09.071Z" }, - { url = "https://files.pythonhosted.org/packages/5a/0b/d5ea75cf46b52cdce85a85200c963cb498932953df443892238be49b1a01/pyzmq-27.0.1-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:f98f6b7787bd2beb1f0dde03f23a0621a0c978edf673b7d8f5e7bc039cbe1b60", size = 1340836, upload-time = "2025-08-03T05:04:10.774Z" }, - { url = "https://files.pythonhosted.org/packages/be/4c/0dbce882550e17db6846b29e9dc242aea7590e7594e1ca5043e8e58fff2d/pyzmq-27.0.1-cp314-cp314t-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:351bf5d8ca0788ca85327fda45843b6927593ff4c807faee368cc5aaf9f809c2", size = 897236, upload-time = "2025-08-03T05:04:13.221Z" }, - { url = "https://files.pythonhosted.org/packages/1b/22/461e131cf16b8814f3c356fa1ea0912697dbc4c64cddf01f7756ec704c1e/pyzmq-27.0.1-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5268a5a9177afff53dc6d70dffe63114ba2a6e7b20d9411cc3adeba09eeda403", size = 660374, upload-time = "2025-08-03T05:04:15.032Z" }, - { url = "https://files.pythonhosted.org/packages/3f/0c/bbd65a814395bf4fc3e57c6c13af27601c07e4009bdfb75ebcf500537bbd/pyzmq-27.0.1-cp314-cp314t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a4aca06ba295aa78bec9b33ec028d1ca08744c36294338c41432b7171060c808", size = 847497, upload-time = "2025-08-03T05:04:16.967Z" }, - { url = "https://files.pythonhosted.org/packages/1e/df/3d1f4a03b561d824cbd491394f67591957e2f1acf6dc85d96f970312a76a/pyzmq-27.0.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:1c363c6dc66352331d5ad64bb838765c6692766334a6a02fdb05e76bd408ae18", size = 1650028, upload-time = "2025-08-03T05:04:19.398Z" }, - { url = "https://files.pythonhosted.org/packages/41/c9/a3987540f59a412bdaae3f362f78e00e6769557a598c63b7e32956aade5a/pyzmq-27.0.1-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:87aebf4acd7249bdff8d3df03aed4f09e67078e6762cfe0aecf8d0748ff94cde", size = 2023808, upload-time = "2025-08-03T05:04:21.145Z" }, - { url = "https://files.pythonhosted.org/packages/b0/a5/c388f4cd80498a8eaef7535f2a8eaca0a35b82b87a0b47fa1856fc135004/pyzmq-27.0.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:e4f22d67756518d71901edf73b38dc0eb4765cce22c8fe122cc81748d425262b", size = 1884970, upload-time = "2025-08-03T05:04:22.908Z" }, - { url = "https://files.pythonhosted.org/packages/9a/ac/b2a89a1ed90526a1b9a260cdc5cd42f055fd44ee8d2a59902b5ac35ddeb1/pyzmq-27.0.1-cp314-cp314t-win32.whl", hash = "sha256:8c62297bc7aea2147b472ca5ca2b4389377ad82898c87cabab2a94aedd75e337", size = 586905, upload-time = "2025-08-03T05:04:24.492Z" }, - { url = "https://files.pythonhosted.org/packages/68/62/7aa5ea04e836f7a788b2a67405f83011cef59ca76d7bac91d1fc9a0476da/pyzmq-27.0.1-cp314-cp314t-win_amd64.whl", hash = "sha256:bee5248d5ec9223545f8cc4f368c2d571477ae828c99409125c3911511d98245", size = 660503, upload-time = "2025-08-03T05:04:26.382Z" }, - { url = "https://files.pythonhosted.org/packages/89/32/3836ed85947b06f1d67c07ce16c00b0cf8c053ab0b249d234f9f81ff95ff/pyzmq-27.0.1-cp314-cp314t-win_arm64.whl", hash = "sha256:0fc24bf45e4a454e55ef99d7f5c8b8712539200ce98533af25a5bfa954b6b390", size = 575098, upload-time = "2025-08-03T05:04:27.974Z" }, - { url = "https://files.pythonhosted.org/packages/b4/1a/49f66fe0bc2b2568dd4280f1f520ac8fafd73f8d762140e278d48aeaf7b9/pyzmq-27.0.1-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:7fb0ee35845bef1e8c4a152d766242164e138c239e3182f558ae15cb4a891f94", size = 835949, upload-time = "2025-08-03T05:05:13.798Z" }, - { url = "https://files.pythonhosted.org/packages/49/94/443c1984b397eab59b14dd7ae8bc2ac7e8f32dbc646474453afcaa6508c4/pyzmq-27.0.1-pp311-pypy311_pp73-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:f379f11e138dfd56c3f24a04164f871a08281194dd9ddf656a278d7d080c8ad0", size = 799875, upload-time = "2025-08-03T05:05:15.632Z" }, - { url = "https://files.pythonhosted.org/packages/30/f1/fd96138a0f152786a2ba517e9c6a8b1b3516719e412a90bb5d8eea6b660c/pyzmq-27.0.1-pp311-pypy311_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b978c0678cffbe8860ec9edc91200e895c29ae1ac8a7085f947f8e8864c489fb", size = 567403, upload-time = "2025-08-03T05:05:17.326Z" }, - { url = "https://files.pythonhosted.org/packages/16/57/34e53ef2b55b1428dac5aabe3a974a16c8bda3bf20549ba500e3ff6cb426/pyzmq-27.0.1-pp311-pypy311_pp73-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7ebccf0d760bc92a4a7c751aeb2fef6626144aace76ee8f5a63abeb100cae87f", size = 747032, upload-time = "2025-08-03T05:05:19.074Z" }, - { url = "https://files.pythonhosted.org/packages/81/b7/769598c5ae336fdb657946950465569cf18803140fe89ce466d7f0a57c11/pyzmq-27.0.1-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:77fed80e30fa65708546c4119840a46691290efc231f6bfb2ac2a39b52e15811", size = 544566, upload-time = "2025-08-03T05:05:20.798Z" }, -] - -[[package]] -name = "referencing" -version = "0.36.2" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "attrs" }, - { name = "rpds-py" }, - { name = "typing-extensions", marker = "python_full_version < '3.13'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/2f/db/98b5c277be99dd18bfd91dd04e1b759cad18d1a338188c936e92f921c7e2/referencing-0.36.2.tar.gz", hash = "sha256:df2e89862cd09deabbdba16944cc3f10feb6b3e6f18e902f7cc25609a34775aa", size = 74744, upload-time = "2025-01-25T08:48:16.138Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/c1/b1/3baf80dc6d2b7bc27a95a67752d0208e410351e3feb4eb78de5f77454d8d/referencing-0.36.2-py3-none-any.whl", hash = "sha256:e8699adbbf8b5c7de96d8ffa0eb5c158b3beafce084968e2ea8bb08c6794dcd0", size = 26775, upload-time = "2025-01-25T08:48:14.241Z" }, -] - -[[package]] -name = "regex" -version = "2025.7.34" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/0b/de/e13fa6dc61d78b30ba47481f99933a3b49a57779d625c392d8036770a60d/regex-2025.7.34.tar.gz", hash = "sha256:9ead9765217afd04a86822dfcd4ed2747dfe426e887da413b15ff0ac2457e21a", size = 400714, upload-time = "2025-07-31T00:21:16.262Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/0d/85/f497b91577169472f7c1dc262a5ecc65e39e146fc3a52c571e5daaae4b7d/regex-2025.7.34-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:da304313761b8500b8e175eb2040c4394a875837d5635f6256d6fa0377ad32c8", size = 484594, upload-time = "2025-07-31T00:19:13.927Z" }, - { url = "https://files.pythonhosted.org/packages/1c/c5/ad2a5c11ce9e6257fcbfd6cd965d07502f6054aaa19d50a3d7fd991ec5d1/regex-2025.7.34-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:35e43ebf5b18cd751ea81455b19acfdec402e82fe0dc6143edfae4c5c4b3909a", size = 289294, upload-time = "2025-07-31T00:19:15.395Z" }, - { url = "https://files.pythonhosted.org/packages/8e/01/83ffd9641fcf5e018f9b51aa922c3e538ac9439424fda3df540b643ecf4f/regex-2025.7.34-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:96bbae4c616726f4661fe7bcad5952e10d25d3c51ddc388189d8864fbc1b3c68", size = 285933, upload-time = "2025-07-31T00:19:16.704Z" }, - { url = "https://files.pythonhosted.org/packages/77/20/5edab2e5766f0259bc1da7381b07ce6eb4401b17b2254d02f492cd8a81a8/regex-2025.7.34-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9feab78a1ffa4f2b1e27b1bcdaad36f48c2fed4870264ce32f52a393db093c78", size = 792335, upload-time = "2025-07-31T00:19:18.561Z" }, - { url = "https://files.pythonhosted.org/packages/30/bd/744d3ed8777dce8487b2606b94925e207e7c5931d5870f47f5b643a4580a/regex-2025.7.34-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f14b36e6d4d07f1a5060f28ef3b3561c5d95eb0651741474ce4c0a4c56ba8719", size = 858605, upload-time = "2025-07-31T00:19:20.204Z" }, - { url = "https://files.pythonhosted.org/packages/99/3d/93754176289718d7578c31d151047e7b8acc7a8c20e7706716f23c49e45e/regex-2025.7.34-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:85c3a958ef8b3d5079c763477e1f09e89d13ad22198a37e9d7b26b4b17438b33", size = 905780, upload-time = "2025-07-31T00:19:21.876Z" }, - { url = "https://files.pythonhosted.org/packages/ee/2e/c689f274a92deffa03999a430505ff2aeace408fd681a90eafa92fdd6930/regex-2025.7.34-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:37555e4ae0b93358fa7c2d240a4291d4a4227cc7c607d8f85596cdb08ec0a083", size = 798868, upload-time = "2025-07-31T00:19:23.222Z" }, - { url = "https://files.pythonhosted.org/packages/0d/9e/39673688805d139b33b4a24851a71b9978d61915c4d72b5ffda324d0668a/regex-2025.7.34-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:ee38926f31f1aa61b0232a3a11b83461f7807661c062df9eb88769d86e6195c3", size = 781784, upload-time = "2025-07-31T00:19:24.59Z" }, - { url = "https://files.pythonhosted.org/packages/18/bd/4c1cab12cfabe14beaa076523056b8ab0c882a8feaf0a6f48b0a75dab9ed/regex-2025.7.34-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:a664291c31cae9c4a30589bd8bc2ebb56ef880c9c6264cb7643633831e606a4d", size = 852837, upload-time = "2025-07-31T00:19:25.911Z" }, - { url = "https://files.pythonhosted.org/packages/cb/21/663d983cbb3bba537fc213a579abbd0f263fb28271c514123f3c547ab917/regex-2025.7.34-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:f3e5c1e0925e77ec46ddc736b756a6da50d4df4ee3f69536ffb2373460e2dafd", size = 844240, upload-time = "2025-07-31T00:19:27.688Z" }, - { url = "https://files.pythonhosted.org/packages/8e/2d/9beeeb913bc5d32faa913cf8c47e968da936af61ec20af5d269d0f84a100/regex-2025.7.34-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:d428fc7731dcbb4e2ffe43aeb8f90775ad155e7db4347a639768bc6cd2df881a", size = 787139, upload-time = "2025-07-31T00:19:29.475Z" }, - { url = "https://files.pythonhosted.org/packages/eb/f5/9b9384415fdc533551be2ba805dd8c4621873e5df69c958f403bfd3b2b6e/regex-2025.7.34-cp311-cp311-win32.whl", hash = "sha256:e154a7ee7fa18333ad90b20e16ef84daaeac61877c8ef942ec8dfa50dc38b7a1", size = 264019, upload-time = "2025-07-31T00:19:31.129Z" }, - { url = "https://files.pythonhosted.org/packages/18/9d/e069ed94debcf4cc9626d652a48040b079ce34c7e4fb174f16874958d485/regex-2025.7.34-cp311-cp311-win_amd64.whl", hash = "sha256:24257953d5c1d6d3c129ab03414c07fc1a47833c9165d49b954190b2b7f21a1a", size = 276047, upload-time = "2025-07-31T00:19:32.497Z" }, - { url = "https://files.pythonhosted.org/packages/fd/cf/3bafbe9d1fd1db77355e7fbbbf0d0cfb34501a8b8e334deca14f94c7b315/regex-2025.7.34-cp311-cp311-win_arm64.whl", hash = "sha256:3157aa512b9e606586900888cd469a444f9b898ecb7f8931996cb715f77477f0", size = 268362, upload-time = "2025-07-31T00:19:34.094Z" }, - { url = "https://files.pythonhosted.org/packages/ff/f0/31d62596c75a33f979317658e8d261574785c6cd8672c06741ce2e2e2070/regex-2025.7.34-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:7f7211a746aced993bef487de69307a38c5ddd79257d7be83f7b202cb59ddb50", size = 485492, upload-time = "2025-07-31T00:19:35.57Z" }, - { url = "https://files.pythonhosted.org/packages/d8/16/b818d223f1c9758c3434be89aa1a01aae798e0e0df36c1f143d1963dd1ee/regex-2025.7.34-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:fb31080f2bd0681484b275461b202b5ad182f52c9ec606052020fe13eb13a72f", size = 290000, upload-time = "2025-07-31T00:19:37.175Z" }, - { url = "https://files.pythonhosted.org/packages/cd/70/69506d53397b4bd6954061bae75677ad34deb7f6ca3ba199660d6f728ff5/regex-2025.7.34-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0200a5150c4cf61e407038f4b4d5cdad13e86345dac29ff9dab3d75d905cf130", size = 286072, upload-time = "2025-07-31T00:19:38.612Z" }, - { url = "https://files.pythonhosted.org/packages/b0/73/536a216d5f66084fb577bb0543b5cb7de3272eb70a157f0c3a542f1c2551/regex-2025.7.34-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:739a74970e736df0773788377969c9fea3876c2fc13d0563f98e5503e5185f46", size = 797341, upload-time = "2025-07-31T00:19:40.119Z" }, - { url = "https://files.pythonhosted.org/packages/26/af/733f8168449e56e8f404bb807ea7189f59507cbea1b67a7bbcd92f8bf844/regex-2025.7.34-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:4fef81b2f7ea6a2029161ed6dea9ae13834c28eb5a95b8771828194a026621e4", size = 862556, upload-time = "2025-07-31T00:19:41.556Z" }, - { url = "https://files.pythonhosted.org/packages/19/dd/59c464d58c06c4f7d87de4ab1f590e430821345a40c5d345d449a636d15f/regex-2025.7.34-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:ea74cf81fe61a7e9d77989050d0089a927ab758c29dac4e8e1b6c06fccf3ebf0", size = 910762, upload-time = "2025-07-31T00:19:43Z" }, - { url = "https://files.pythonhosted.org/packages/37/a8/b05ccf33ceca0815a1e253693b2c86544932ebcc0049c16b0fbdf18b688b/regex-2025.7.34-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e4636a7f3b65a5f340ed9ddf53585c42e3ff37101d383ed321bfe5660481744b", size = 801892, upload-time = "2025-07-31T00:19:44.645Z" }, - { url = "https://files.pythonhosted.org/packages/5f/9a/b993cb2e634cc22810afd1652dba0cae156c40d4864285ff486c73cd1996/regex-2025.7.34-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6cef962d7834437fe8d3da6f9bfc6f93f20f218266dcefec0560ed7765f5fe01", size = 786551, upload-time = "2025-07-31T00:19:46.127Z" }, - { url = "https://files.pythonhosted.org/packages/2d/79/7849d67910a0de4e26834b5bb816e028e35473f3d7ae563552ea04f58ca2/regex-2025.7.34-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:cbe1698e5b80298dbce8df4d8d1182279fbdaf1044e864cbc9d53c20e4a2be77", size = 856457, upload-time = "2025-07-31T00:19:47.562Z" }, - { url = "https://files.pythonhosted.org/packages/91/c6/de516bc082524b27e45cb4f54e28bd800c01efb26d15646a65b87b13a91e/regex-2025.7.34-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:32b9f9bcf0f605eb094b08e8da72e44badabb63dde6b83bd530580b488d1c6da", size = 848902, upload-time = "2025-07-31T00:19:49.312Z" }, - { url = "https://files.pythonhosted.org/packages/7d/22/519ff8ba15f732db099b126f039586bd372da6cd4efb810d5d66a5daeda1/regex-2025.7.34-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:524c868ba527eab4e8744a9287809579f54ae8c62fbf07d62aacd89f6026b282", size = 788038, upload-time = "2025-07-31T00:19:50.794Z" }, - { url = "https://files.pythonhosted.org/packages/3f/7d/aabb467d8f57d8149895d133c88eb809a1a6a0fe262c1d508eb9dfabb6f9/regex-2025.7.34-cp312-cp312-win32.whl", hash = "sha256:d600e58ee6d036081c89696d2bdd55d507498a7180df2e19945c6642fac59588", size = 264417, upload-time = "2025-07-31T00:19:52.292Z" }, - { url = "https://files.pythonhosted.org/packages/3b/39/bd922b55a4fc5ad5c13753274e5b536f5b06ec8eb9747675668491c7ab7a/regex-2025.7.34-cp312-cp312-win_amd64.whl", hash = "sha256:9a9ab52a466a9b4b91564437b36417b76033e8778e5af8f36be835d8cb370d62", size = 275387, upload-time = "2025-07-31T00:19:53.593Z" }, - { url = "https://files.pythonhosted.org/packages/f7/3c/c61d2fdcecb754a40475a3d1ef9a000911d3e3fc75c096acf44b0dfb786a/regex-2025.7.34-cp312-cp312-win_arm64.whl", hash = "sha256:c83aec91af9c6fbf7c743274fd952272403ad9a9db05fe9bfc9df8d12b45f176", size = 268482, upload-time = "2025-07-31T00:19:55.183Z" }, - { url = "https://files.pythonhosted.org/packages/15/16/b709b2119975035169a25aa8e4940ca177b1a2e25e14f8d996d09130368e/regex-2025.7.34-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:c3c9740a77aeef3f5e3aaab92403946a8d34437db930a0280e7e81ddcada61f5", size = 485334, upload-time = "2025-07-31T00:19:56.58Z" }, - { url = "https://files.pythonhosted.org/packages/94/a6/c09136046be0595f0331bc58a0e5f89c2d324cf734e0b0ec53cf4b12a636/regex-2025.7.34-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:69ed3bc611540f2ea70a4080f853741ec698be556b1df404599f8724690edbcd", size = 289942, upload-time = "2025-07-31T00:19:57.943Z" }, - { url = "https://files.pythonhosted.org/packages/36/91/08fc0fd0f40bdfb0e0df4134ee37cfb16e66a1044ac56d36911fd01c69d2/regex-2025.7.34-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:d03c6f9dcd562c56527c42b8530aad93193e0b3254a588be1f2ed378cdfdea1b", size = 285991, upload-time = "2025-07-31T00:19:59.837Z" }, - { url = "https://files.pythonhosted.org/packages/be/2f/99dc8f6f756606f0c214d14c7b6c17270b6bbe26d5c1f05cde9dbb1c551f/regex-2025.7.34-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6164b1d99dee1dfad33f301f174d8139d4368a9fb50bf0a3603b2eaf579963ad", size = 797415, upload-time = "2025-07-31T00:20:01.668Z" }, - { url = "https://files.pythonhosted.org/packages/62/cf/2fcdca1110495458ba4e95c52ce73b361cf1cafd8a53b5c31542cde9a15b/regex-2025.7.34-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:1e4f4f62599b8142362f164ce776f19d79bdd21273e86920a7b604a4275b4f59", size = 862487, upload-time = "2025-07-31T00:20:03.142Z" }, - { url = "https://files.pythonhosted.org/packages/90/38/899105dd27fed394e3fae45607c1983e138273ec167e47882fc401f112b9/regex-2025.7.34-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:72a26dcc6a59c057b292f39d41465d8233a10fd69121fa24f8f43ec6294e5415", size = 910717, upload-time = "2025-07-31T00:20:04.727Z" }, - { url = "https://files.pythonhosted.org/packages/ee/f6/4716198dbd0bcc9c45625ac4c81a435d1c4d8ad662e8576dac06bab35b17/regex-2025.7.34-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d5273fddf7a3e602695c92716c420c377599ed3c853ea669c1fe26218867002f", size = 801943, upload-time = "2025-07-31T00:20:07.1Z" }, - { url = "https://files.pythonhosted.org/packages/40/5d/cff8896d27e4e3dd11dd72ac78797c7987eb50fe4debc2c0f2f1682eb06d/regex-2025.7.34-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c1844be23cd40135b3a5a4dd298e1e0c0cb36757364dd6cdc6025770363e06c1", size = 786664, upload-time = "2025-07-31T00:20:08.818Z" }, - { url = "https://files.pythonhosted.org/packages/10/29/758bf83cf7b4c34f07ac3423ea03cee3eb3176941641e4ccc05620f6c0b8/regex-2025.7.34-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:dde35e2afbbe2272f8abee3b9fe6772d9b5a07d82607b5788e8508974059925c", size = 856457, upload-time = "2025-07-31T00:20:10.328Z" }, - { url = "https://files.pythonhosted.org/packages/d7/30/c19d212b619963c5b460bfed0ea69a092c6a43cba52a973d46c27b3e2975/regex-2025.7.34-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:f3f6e8e7af516a7549412ce57613e859c3be27d55341a894aacaa11703a4c31a", size = 849008, upload-time = "2025-07-31T00:20:11.823Z" }, - { url = "https://files.pythonhosted.org/packages/9e/b8/3c35da3b12c87e3cc00010ef6c3a4ae787cff0bc381aa3d251def219969a/regex-2025.7.34-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:469142fb94a869beb25b5f18ea87646d21def10fbacb0bcb749224f3509476f0", size = 788101, upload-time = "2025-07-31T00:20:13.729Z" }, - { url = "https://files.pythonhosted.org/packages/47/80/2f46677c0b3c2b723b2c358d19f9346e714113865da0f5f736ca1a883bde/regex-2025.7.34-cp313-cp313-win32.whl", hash = "sha256:da7507d083ee33ccea1310447410c27ca11fb9ef18c95899ca57ff60a7e4d8f1", size = 264401, upload-time = "2025-07-31T00:20:15.233Z" }, - { url = "https://files.pythonhosted.org/packages/be/fa/917d64dd074682606a003cba33585c28138c77d848ef72fc77cbb1183849/regex-2025.7.34-cp313-cp313-win_amd64.whl", hash = "sha256:9d644de5520441e5f7e2db63aec2748948cc39ed4d7a87fd5db578ea4043d997", size = 275368, upload-time = "2025-07-31T00:20:16.711Z" }, - { url = "https://files.pythonhosted.org/packages/65/cd/f94383666704170a2154a5df7b16be28f0c27a266bffcd843e58bc84120f/regex-2025.7.34-cp313-cp313-win_arm64.whl", hash = "sha256:7bf1c5503a9f2cbd2f52d7e260acb3131b07b6273c470abb78568174fe6bde3f", size = 268482, upload-time = "2025-07-31T00:20:18.189Z" }, - { url = "https://files.pythonhosted.org/packages/ac/23/6376f3a23cf2f3c00514b1cdd8c990afb4dfbac3cb4a68b633c6b7e2e307/regex-2025.7.34-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:8283afe7042d8270cecf27cca558873168e771183d4d593e3c5fe5f12402212a", size = 485385, upload-time = "2025-07-31T00:20:19.692Z" }, - { url = "https://files.pythonhosted.org/packages/73/5b/6d4d3a0b4d312adbfd6d5694c8dddcf1396708976dd87e4d00af439d962b/regex-2025.7.34-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:6c053f9647e3421dd2f5dff8172eb7b4eec129df9d1d2f7133a4386319b47435", size = 289788, upload-time = "2025-07-31T00:20:21.941Z" }, - { url = "https://files.pythonhosted.org/packages/92/71/5862ac9913746e5054d01cb9fb8125b3d0802c0706ef547cae1e7f4428fa/regex-2025.7.34-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:a16dd56bbcb7d10e62861c3cd000290ddff28ea142ffb5eb3470f183628011ac", size = 286136, upload-time = "2025-07-31T00:20:26.146Z" }, - { url = "https://files.pythonhosted.org/packages/27/df/5b505dc447eb71278eba10d5ec940769ca89c1af70f0468bfbcb98035dc2/regex-2025.7.34-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:69c593ff5a24c0d5c1112b0df9b09eae42b33c014bdca7022d6523b210b69f72", size = 797753, upload-time = "2025-07-31T00:20:27.919Z" }, - { url = "https://files.pythonhosted.org/packages/86/38/3e3dc953d13998fa047e9a2414b556201dbd7147034fbac129392363253b/regex-2025.7.34-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:98d0ce170fcde1a03b5df19c5650db22ab58af375aaa6ff07978a85c9f250f0e", size = 863263, upload-time = "2025-07-31T00:20:29.803Z" }, - { url = "https://files.pythonhosted.org/packages/68/e5/3ff66b29dde12f5b874dda2d9dec7245c2051f2528d8c2a797901497f140/regex-2025.7.34-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d72765a4bff8c43711d5b0f5b452991a9947853dfa471972169b3cc0ba1d0751", size = 910103, upload-time = "2025-07-31T00:20:31.313Z" }, - { url = "https://files.pythonhosted.org/packages/9e/fe/14176f2182125977fba3711adea73f472a11f3f9288c1317c59cd16ad5e6/regex-2025.7.34-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4494f8fd95a77eb434039ad8460e64d57baa0434f1395b7da44015bef650d0e4", size = 801709, upload-time = "2025-07-31T00:20:33.323Z" }, - { url = "https://files.pythonhosted.org/packages/5a/0d/80d4e66ed24f1ba876a9e8e31b709f9fd22d5c266bf5f3ab3c1afe683d7d/regex-2025.7.34-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:4f42b522259c66e918a0121a12429b2abcf696c6f967fa37bdc7b72e61469f98", size = 786726, upload-time = "2025-07-31T00:20:35.252Z" }, - { url = "https://files.pythonhosted.org/packages/12/75/c3ebb30e04a56c046f5c85179dc173818551037daae2c0c940c7b19152cb/regex-2025.7.34-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:aaef1f056d96a0a5d53ad47d019d5b4c66fe4be2da87016e0d43b7242599ffc7", size = 857306, upload-time = "2025-07-31T00:20:37.12Z" }, - { url = "https://files.pythonhosted.org/packages/b1/b2/a4dc5d8b14f90924f27f0ac4c4c4f5e195b723be98adecc884f6716614b6/regex-2025.7.34-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:656433e5b7dccc9bc0da6312da8eb897b81f5e560321ec413500e5367fcd5d47", size = 848494, upload-time = "2025-07-31T00:20:38.818Z" }, - { url = "https://files.pythonhosted.org/packages/0d/21/9ac6e07a4c5e8646a90b56b61f7e9dac11ae0747c857f91d3d2bc7c241d9/regex-2025.7.34-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:e91eb2c62c39705e17b4d42d4b86c4e86c884c0d15d9c5a47d0835f8387add8e", size = 787850, upload-time = "2025-07-31T00:20:40.478Z" }, - { url = "https://files.pythonhosted.org/packages/be/6c/d51204e28e7bc54f9a03bb799b04730d7e54ff2718862b8d4e09e7110a6a/regex-2025.7.34-cp314-cp314-win32.whl", hash = "sha256:f978ddfb6216028c8f1d6b0f7ef779949498b64117fc35a939022f67f810bdcb", size = 269730, upload-time = "2025-07-31T00:20:42.253Z" }, - { url = "https://files.pythonhosted.org/packages/74/52/a7e92d02fa1fdef59d113098cb9f02c5d03289a0e9f9e5d4d6acccd10677/regex-2025.7.34-cp314-cp314-win_amd64.whl", hash = "sha256:4b7dc33b9b48fb37ead12ffc7bdb846ac72f99a80373c4da48f64b373a7abeae", size = 278640, upload-time = "2025-07-31T00:20:44.42Z" }, - { url = "https://files.pythonhosted.org/packages/d1/78/a815529b559b1771080faa90c3ab401730661f99d495ab0071649f139ebd/regex-2025.7.34-cp314-cp314-win_arm64.whl", hash = "sha256:4b8c4d39f451e64809912c82392933d80fe2e4a87eeef8859fcc5380d0173c64", size = 271757, upload-time = "2025-07-31T00:20:46.355Z" }, -] - -[[package]] -name = "requests" -version = "2.32.4" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "certifi" }, - { name = "charset-normalizer" }, - { name = "idna" }, - { name = "urllib3" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/e1/0a/929373653770d8a0d7ea76c37de6e41f11eb07559b103b1c02cafb3f7cf8/requests-2.32.4.tar.gz", hash = "sha256:27d0316682c8a29834d3264820024b62a36942083d52caf2f14c0591336d3422", size = 135258, upload-time = "2025-06-09T16:43:07.34Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/7c/e4/56027c4a6b4ae70ca9de302488c5ca95ad4a39e190093d6c1a8ace08341b/requests-2.32.4-py3-none-any.whl", hash = "sha256:27babd3cda2a6d50b30443204ee89830707d396671944c998b5975b031ac2b2c", size = 64847, upload-time = "2025-06-09T16:43:05.728Z" }, -] - -[[package]] -name = "responses" -version = "0.25.7" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "pyyaml" }, - { name = "requests" }, - { name = "urllib3" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/81/7e/2345ac3299bd62bd7163216702bbc88976c099cfceba5b889f2a457727a1/responses-0.25.7.tar.gz", hash = "sha256:8ebae11405d7a5df79ab6fd54277f6f2bc29b2d002d0dd2d5c632594d1ddcedb", size = 79203, upload-time = "2025-03-11T15:36:16.624Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e4/fc/1d20b64fa90e81e4fa0a34c9b0240a6cfb1326b7e06d18a5432a9917c316/responses-0.25.7-py3-none-any.whl", hash = "sha256:92ca17416c90fe6b35921f52179bff29332076bb32694c0df02dcac2c6bc043c", size = 34732, upload-time = "2025-03-11T15:36:14.589Z" }, -] - -[[package]] -name = "rfc3339-validator" -version = "0.1.4" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "six" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/28/ea/a9387748e2d111c3c2b275ba970b735e04e15cdb1eb30693b6b5708c4dbd/rfc3339_validator-0.1.4.tar.gz", hash = "sha256:138a2abdf93304ad60530167e51d2dfb9549521a836871b88d7f4695d0022f6b", size = 5513, upload-time = "2021-05-12T16:37:54.178Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/7b/44/4e421b96b67b2daff264473f7465db72fbdf36a07e05494f50300cc7b0c6/rfc3339_validator-0.1.4-py2.py3-none-any.whl", hash = "sha256:24f6ec1eda14ef823da9e36ec7113124b39c04d50a4d3d3a3c2859577e7791fa", size = 3490, upload-time = "2021-05-12T16:37:52.536Z" }, -] - -[[package]] -name = "rich" -version = "14.1.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "markdown-it-py" }, - { name = "pygments" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/fe/75/af448d8e52bf1d8fa6a9d089ca6c07ff4453d86c65c145d0a300bb073b9b/rich-14.1.0.tar.gz", hash = "sha256:e497a48b844b0320d45007cdebfeaeed8db2a4f4bcf49f15e455cfc4af11eaa8", size = 224441, upload-time = "2025-07-25T07:32:58.125Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e3/30/3c4d035596d3cf444529e0b2953ad0466f6049528a879d27534700580395/rich-14.1.0-py3-none-any.whl", hash = "sha256:536f5f1785986d6dbdea3c75205c473f970777b4a0d6c6dd1b696aa05a3fa04f", size = 243368, upload-time = "2025-07-25T07:32:56.73Z" }, -] - -[[package]] -name = "rpds-py" -version = "0.26.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a5/aa/4456d84bbb54adc6a916fb10c9b374f78ac840337644e4a5eda229c81275/rpds_py-0.26.0.tar.gz", hash = "sha256:20dae58a859b0906f0685642e591056f1e787f3a8b39c8e8749a45dc7d26bdb0", size = 27385, upload-time = "2025-07-01T15:57:13.958Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/09/4c/4ee8f7e512030ff79fda1df3243c88d70fc874634e2dbe5df13ba4210078/rpds_py-0.26.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:9e8cb77286025bdb21be2941d64ac6ca016130bfdcd228739e8ab137eb4406ed", size = 372610, upload-time = "2025-07-01T15:53:58.844Z" }, - { url = "https://files.pythonhosted.org/packages/fa/9d/3dc16be00f14fc1f03c71b1d67c8df98263ab2710a2fbd65a6193214a527/rpds_py-0.26.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5e09330b21d98adc8ccb2dbb9fc6cb434e8908d4c119aeaa772cb1caab5440a0", size = 358032, upload-time = "2025-07-01T15:53:59.985Z" }, - { url = "https://files.pythonhosted.org/packages/e7/5a/7f1bf8f045da2866324a08ae80af63e64e7bfaf83bd31f865a7b91a58601/rpds_py-0.26.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c9c1b92b774b2e68d11193dc39620d62fd8ab33f0a3c77ecdabe19c179cdbc1", size = 381525, upload-time = "2025-07-01T15:54:01.162Z" }, - { url = "https://files.pythonhosted.org/packages/45/8a/04479398c755a066ace10e3d158866beb600867cacae194c50ffa783abd0/rpds_py-0.26.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:824e6d3503ab990d7090768e4dfd9e840837bae057f212ff9f4f05ec6d1975e7", size = 397089, upload-time = "2025-07-01T15:54:02.319Z" }, - { url = "https://files.pythonhosted.org/packages/72/88/9203f47268db488a1b6d469d69c12201ede776bb728b9d9f29dbfd7df406/rpds_py-0.26.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8ad7fd2258228bf288f2331f0a6148ad0186b2e3643055ed0db30990e59817a6", size = 514255, upload-time = "2025-07-01T15:54:03.38Z" }, - { url = "https://files.pythonhosted.org/packages/f5/b4/01ce5d1e853ddf81fbbd4311ab1eff0b3cf162d559288d10fd127e2588b5/rpds_py-0.26.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0dc23bbb3e06ec1ea72d515fb572c1fea59695aefbffb106501138762e1e915e", size = 402283, upload-time = "2025-07-01T15:54:04.923Z" }, - { url = "https://files.pythonhosted.org/packages/34/a2/004c99936997bfc644d590a9defd9e9c93f8286568f9c16cdaf3e14429a7/rpds_py-0.26.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d80bf832ac7b1920ee29a426cdca335f96a2b5caa839811803e999b41ba9030d", size = 383881, upload-time = "2025-07-01T15:54:06.482Z" }, - { url = "https://files.pythonhosted.org/packages/05/1b/ef5fba4a8f81ce04c427bfd96223f92f05e6cd72291ce9d7523db3b03a6c/rpds_py-0.26.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0919f38f5542c0a87e7b4afcafab6fd2c15386632d249e9a087498571250abe3", size = 415822, upload-time = "2025-07-01T15:54:07.605Z" }, - { url = "https://files.pythonhosted.org/packages/16/80/5c54195aec456b292f7bd8aa61741c8232964063fd8a75fdde9c1e982328/rpds_py-0.26.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d422b945683e409000c888e384546dbab9009bb92f7c0b456e217988cf316107", size = 558347, upload-time = "2025-07-01T15:54:08.591Z" }, - { url = "https://files.pythonhosted.org/packages/f2/1c/1845c1b1fd6d827187c43afe1841d91678d7241cbdb5420a4c6de180a538/rpds_py-0.26.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:77a7711fa562ba2da1aa757e11024ad6d93bad6ad7ede5afb9af144623e5f76a", size = 587956, upload-time = "2025-07-01T15:54:09.963Z" }, - { url = "https://files.pythonhosted.org/packages/2e/ff/9e979329dd131aa73a438c077252ddabd7df6d1a7ad7b9aacf6261f10faa/rpds_py-0.26.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:238e8c8610cb7c29460e37184f6799547f7e09e6a9bdbdab4e8edb90986a2318", size = 554363, upload-time = "2025-07-01T15:54:11.073Z" }, - { url = "https://files.pythonhosted.org/packages/00/8b/d78cfe034b71ffbe72873a136e71acc7a831a03e37771cfe59f33f6de8a2/rpds_py-0.26.0-cp311-cp311-win32.whl", hash = "sha256:893b022bfbdf26d7bedb083efeea624e8550ca6eb98bf7fea30211ce95b9201a", size = 220123, upload-time = "2025-07-01T15:54:12.382Z" }, - { url = "https://files.pythonhosted.org/packages/94/c1/3c8c94c7dd3905dbfde768381ce98778500a80db9924731d87ddcdb117e9/rpds_py-0.26.0-cp311-cp311-win_amd64.whl", hash = "sha256:87a5531de9f71aceb8af041d72fc4cab4943648d91875ed56d2e629bef6d4c03", size = 231732, upload-time = "2025-07-01T15:54:13.434Z" }, - { url = "https://files.pythonhosted.org/packages/67/93/e936fbed1b734eabf36ccb5d93c6a2e9246fbb13c1da011624b7286fae3e/rpds_py-0.26.0-cp311-cp311-win_arm64.whl", hash = "sha256:de2713f48c1ad57f89ac25b3cb7daed2156d8e822cf0eca9b96a6f990718cc41", size = 221917, upload-time = "2025-07-01T15:54:14.559Z" }, - { url = "https://files.pythonhosted.org/packages/ea/86/90eb87c6f87085868bd077c7a9938006eb1ce19ed4d06944a90d3560fce2/rpds_py-0.26.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:894514d47e012e794f1350f076c427d2347ebf82f9b958d554d12819849a369d", size = 363933, upload-time = "2025-07-01T15:54:15.734Z" }, - { url = "https://files.pythonhosted.org/packages/63/78/4469f24d34636242c924626082b9586f064ada0b5dbb1e9d096ee7a8e0c6/rpds_py-0.26.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:fc921b96fa95a097add244da36a1d9e4f3039160d1d30f1b35837bf108c21136", size = 350447, upload-time = "2025-07-01T15:54:16.922Z" }, - { url = "https://files.pythonhosted.org/packages/ad/91/c448ed45efdfdade82348d5e7995e15612754826ea640afc20915119734f/rpds_py-0.26.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e1157659470aa42a75448b6e943c895be8c70531c43cb78b9ba990778955582", size = 384711, upload-time = "2025-07-01T15:54:18.101Z" }, - { url = "https://files.pythonhosted.org/packages/ec/43/e5c86fef4be7f49828bdd4ecc8931f0287b1152c0bb0163049b3218740e7/rpds_py-0.26.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:521ccf56f45bb3a791182dc6b88ae5f8fa079dd705ee42138c76deb1238e554e", size = 400865, upload-time = "2025-07-01T15:54:19.295Z" }, - { url = "https://files.pythonhosted.org/packages/55/34/e00f726a4d44f22d5c5fe2e5ddd3ac3d7fd3f74a175607781fbdd06fe375/rpds_py-0.26.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9def736773fd56b305c0eef698be5192c77bfa30d55a0e5885f80126c4831a15", size = 517763, upload-time = "2025-07-01T15:54:20.858Z" }, - { url = "https://files.pythonhosted.org/packages/52/1c/52dc20c31b147af724b16104500fba13e60123ea0334beba7b40e33354b4/rpds_py-0.26.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cdad4ea3b4513b475e027be79e5a0ceac8ee1c113a1a11e5edc3c30c29f964d8", size = 406651, upload-time = "2025-07-01T15:54:22.508Z" }, - { url = "https://files.pythonhosted.org/packages/2e/77/87d7bfabfc4e821caa35481a2ff6ae0b73e6a391bb6b343db2c91c2b9844/rpds_py-0.26.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:82b165b07f416bdccf5c84546a484cc8f15137ca38325403864bfdf2b5b72f6a", size = 386079, upload-time = "2025-07-01T15:54:23.987Z" }, - { url = "https://files.pythonhosted.org/packages/e3/d4/7f2200c2d3ee145b65b3cddc4310d51f7da6a26634f3ac87125fd789152a/rpds_py-0.26.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d04cab0a54b9dba4d278fe955a1390da3cf71f57feb78ddc7cb67cbe0bd30323", size = 421379, upload-time = "2025-07-01T15:54:25.073Z" }, - { url = "https://files.pythonhosted.org/packages/ae/13/9fdd428b9c820869924ab62236b8688b122baa22d23efdd1c566938a39ba/rpds_py-0.26.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:79061ba1a11b6a12743a2b0f72a46aa2758613d454aa6ba4f5a265cc48850158", size = 562033, upload-time = "2025-07-01T15:54:26.225Z" }, - { url = "https://files.pythonhosted.org/packages/f3/e1/b69686c3bcbe775abac3a4c1c30a164a2076d28df7926041f6c0eb5e8d28/rpds_py-0.26.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:f405c93675d8d4c5ac87364bb38d06c988e11028a64b52a47158a355079661f3", size = 591639, upload-time = "2025-07-01T15:54:27.424Z" }, - { url = "https://files.pythonhosted.org/packages/5c/c9/1e3d8c8863c84a90197ac577bbc3d796a92502124c27092413426f670990/rpds_py-0.26.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:dafd4c44b74aa4bed4b250f1aed165b8ef5de743bcca3b88fc9619b6087093d2", size = 557105, upload-time = "2025-07-01T15:54:29.93Z" }, - { url = "https://files.pythonhosted.org/packages/9f/c5/90c569649057622959f6dcc40f7b516539608a414dfd54b8d77e3b201ac0/rpds_py-0.26.0-cp312-cp312-win32.whl", hash = "sha256:3da5852aad63fa0c6f836f3359647870e21ea96cf433eb393ffa45263a170d44", size = 223272, upload-time = "2025-07-01T15:54:31.128Z" }, - { url = "https://files.pythonhosted.org/packages/7d/16/19f5d9f2a556cfed454eebe4d354c38d51c20f3db69e7b4ce6cff904905d/rpds_py-0.26.0-cp312-cp312-win_amd64.whl", hash = "sha256:cf47cfdabc2194a669dcf7a8dbba62e37a04c5041d2125fae0233b720da6f05c", size = 234995, upload-time = "2025-07-01T15:54:32.195Z" }, - { url = "https://files.pythonhosted.org/packages/83/f0/7935e40b529c0e752dfaa7880224771b51175fce08b41ab4a92eb2fbdc7f/rpds_py-0.26.0-cp312-cp312-win_arm64.whl", hash = "sha256:20ab1ae4fa534f73647aad289003f1104092890849e0266271351922ed5574f8", size = 223198, upload-time = "2025-07-01T15:54:33.271Z" }, - { url = "https://files.pythonhosted.org/packages/6a/67/bb62d0109493b12b1c6ab00de7a5566aa84c0e44217c2d94bee1bd370da9/rpds_py-0.26.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:696764a5be111b036256c0b18cd29783fab22154690fc698062fc1b0084b511d", size = 363917, upload-time = "2025-07-01T15:54:34.755Z" }, - { url = "https://files.pythonhosted.org/packages/4b/f3/34e6ae1925a5706c0f002a8d2d7f172373b855768149796af87bd65dcdb9/rpds_py-0.26.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:1e6c15d2080a63aaed876e228efe4f814bc7889c63b1e112ad46fdc8b368b9e1", size = 350073, upload-time = "2025-07-01T15:54:36.292Z" }, - { url = "https://files.pythonhosted.org/packages/75/83/1953a9d4f4e4de7fd0533733e041c28135f3c21485faaef56a8aadbd96b5/rpds_py-0.26.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:390e3170babf42462739a93321e657444f0862c6d722a291accc46f9d21ed04e", size = 384214, upload-time = "2025-07-01T15:54:37.469Z" }, - { url = "https://files.pythonhosted.org/packages/48/0e/983ed1b792b3322ea1d065e67f4b230f3b96025f5ce3878cc40af09b7533/rpds_py-0.26.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7da84c2c74c0f5bc97d853d9e17bb83e2dcafcff0dc48286916001cc114379a1", size = 400113, upload-time = "2025-07-01T15:54:38.954Z" }, - { url = "https://files.pythonhosted.org/packages/69/7f/36c0925fff6f660a80be259c5b4f5e53a16851f946eb080351d057698528/rpds_py-0.26.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4c5fe114a6dd480a510b6d3661d09d67d1622c4bf20660a474507aaee7eeeee9", size = 515189, upload-time = "2025-07-01T15:54:40.57Z" }, - { url = "https://files.pythonhosted.org/packages/13/45/cbf07fc03ba7a9b54662c9badb58294ecfb24f828b9732970bd1a431ed5c/rpds_py-0.26.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3100b3090269f3a7ea727b06a6080d4eb7439dca4c0e91a07c5d133bb1727ea7", size = 406998, upload-time = "2025-07-01T15:54:43.025Z" }, - { url = "https://files.pythonhosted.org/packages/6c/b0/8fa5e36e58657997873fd6a1cf621285ca822ca75b4b3434ead047daa307/rpds_py-0.26.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2c03c9b0c64afd0320ae57de4c982801271c0c211aa2d37f3003ff5feb75bb04", size = 385903, upload-time = "2025-07-01T15:54:44.752Z" }, - { url = "https://files.pythonhosted.org/packages/4b/f7/b25437772f9f57d7a9fbd73ed86d0dcd76b4c7c6998348c070d90f23e315/rpds_py-0.26.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5963b72ccd199ade6ee493723d18a3f21ba7d5b957017607f815788cef50eaf1", size = 419785, upload-time = "2025-07-01T15:54:46.043Z" }, - { url = "https://files.pythonhosted.org/packages/a7/6b/63ffa55743dfcb4baf2e9e77a0b11f7f97ed96a54558fcb5717a4b2cd732/rpds_py-0.26.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:9da4e873860ad5bab3291438525cae80169daecbfafe5657f7f5fb4d6b3f96b9", size = 561329, upload-time = "2025-07-01T15:54:47.64Z" }, - { url = "https://files.pythonhosted.org/packages/2f/07/1f4f5e2886c480a2346b1e6759c00278b8a69e697ae952d82ae2e6ee5db0/rpds_py-0.26.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:5afaddaa8e8c7f1f7b4c5c725c0070b6eed0228f705b90a1732a48e84350f4e9", size = 590875, upload-time = "2025-07-01T15:54:48.9Z" }, - { url = "https://files.pythonhosted.org/packages/cc/bc/e6639f1b91c3a55f8c41b47d73e6307051b6e246254a827ede730624c0f8/rpds_py-0.26.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4916dc96489616a6f9667e7526af8fa693c0fdb4f3acb0e5d9f4400eb06a47ba", size = 556636, upload-time = "2025-07-01T15:54:50.619Z" }, - { url = "https://files.pythonhosted.org/packages/05/4c/b3917c45566f9f9a209d38d9b54a1833f2bb1032a3e04c66f75726f28876/rpds_py-0.26.0-cp313-cp313-win32.whl", hash = "sha256:2a343f91b17097c546b93f7999976fd6c9d5900617aa848c81d794e062ab302b", size = 222663, upload-time = "2025-07-01T15:54:52.023Z" }, - { url = "https://files.pythonhosted.org/packages/e0/0b/0851bdd6025775aaa2365bb8de0697ee2558184c800bfef8d7aef5ccde58/rpds_py-0.26.0-cp313-cp313-win_amd64.whl", hash = "sha256:0a0b60701f2300c81b2ac88a5fb893ccfa408e1c4a555a77f908a2596eb875a5", size = 234428, upload-time = "2025-07-01T15:54:53.692Z" }, - { url = "https://files.pythonhosted.org/packages/ed/e8/a47c64ed53149c75fb581e14a237b7b7cd18217e969c30d474d335105622/rpds_py-0.26.0-cp313-cp313-win_arm64.whl", hash = "sha256:257d011919f133a4746958257f2c75238e3ff54255acd5e3e11f3ff41fd14256", size = 222571, upload-time = "2025-07-01T15:54:54.822Z" }, - { url = "https://files.pythonhosted.org/packages/89/bf/3d970ba2e2bcd17d2912cb42874107390f72873e38e79267224110de5e61/rpds_py-0.26.0-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:529c8156d7506fba5740e05da8795688f87119cce330c244519cf706a4a3d618", size = 360475, upload-time = "2025-07-01T15:54:56.228Z" }, - { url = "https://files.pythonhosted.org/packages/82/9f/283e7e2979fc4ec2d8ecee506d5a3675fce5ed9b4b7cb387ea5d37c2f18d/rpds_py-0.26.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:f53ec51f9d24e9638a40cabb95078ade8c99251945dad8d57bf4aabe86ecee35", size = 346692, upload-time = "2025-07-01T15:54:58.561Z" }, - { url = "https://files.pythonhosted.org/packages/e3/03/7e50423c04d78daf391da3cc4330bdb97042fc192a58b186f2d5deb7befd/rpds_py-0.26.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ab504c4d654e4a29558eaa5bb8cea5fdc1703ea60a8099ffd9c758472cf913f", size = 379415, upload-time = "2025-07-01T15:54:59.751Z" }, - { url = "https://files.pythonhosted.org/packages/57/00/d11ee60d4d3b16808432417951c63df803afb0e0fc672b5e8d07e9edaaae/rpds_py-0.26.0-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fd0641abca296bc1a00183fe44f7fced8807ed49d501f188faa642d0e4975b83", size = 391783, upload-time = "2025-07-01T15:55:00.898Z" }, - { url = "https://files.pythonhosted.org/packages/08/b3/1069c394d9c0d6d23c5b522e1f6546b65793a22950f6e0210adcc6f97c3e/rpds_py-0.26.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:69b312fecc1d017b5327afa81d4da1480f51c68810963a7336d92203dbb3d4f1", size = 512844, upload-time = "2025-07-01T15:55:02.201Z" }, - { url = "https://files.pythonhosted.org/packages/08/3b/c4fbf0926800ed70b2c245ceca99c49f066456755f5d6eb8863c2c51e6d0/rpds_py-0.26.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c741107203954f6fc34d3066d213d0a0c40f7bb5aafd698fb39888af277c70d8", size = 402105, upload-time = "2025-07-01T15:55:03.698Z" }, - { url = "https://files.pythonhosted.org/packages/1c/b0/db69b52ca07413e568dae9dc674627a22297abb144c4d6022c6d78f1e5cc/rpds_py-0.26.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc3e55a7db08dc9a6ed5fb7103019d2c1a38a349ac41901f9f66d7f95750942f", size = 383440, upload-time = "2025-07-01T15:55:05.398Z" }, - { url = "https://files.pythonhosted.org/packages/4c/e1/c65255ad5b63903e56b3bb3ff9dcc3f4f5c3badde5d08c741ee03903e951/rpds_py-0.26.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9e851920caab2dbcae311fd28f4313c6953993893eb5c1bb367ec69d9a39e7ed", size = 412759, upload-time = "2025-07-01T15:55:08.316Z" }, - { url = "https://files.pythonhosted.org/packages/e4/22/bb731077872377a93c6e93b8a9487d0406c70208985831034ccdeed39c8e/rpds_py-0.26.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:dfbf280da5f876d0b00c81f26bedce274e72a678c28845453885a9b3c22ae632", size = 556032, upload-time = "2025-07-01T15:55:09.52Z" }, - { url = "https://files.pythonhosted.org/packages/e0/8b/393322ce7bac5c4530fb96fc79cc9ea2f83e968ff5f6e873f905c493e1c4/rpds_py-0.26.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:1cc81d14ddfa53d7f3906694d35d54d9d3f850ef8e4e99ee68bc0d1e5fed9a9c", size = 585416, upload-time = "2025-07-01T15:55:11.216Z" }, - { url = "https://files.pythonhosted.org/packages/49/ae/769dc372211835bf759319a7aae70525c6eb523e3371842c65b7ef41c9c6/rpds_py-0.26.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:dca83c498b4650a91efcf7b88d669b170256bf8017a5db6f3e06c2bf031f57e0", size = 554049, upload-time = "2025-07-01T15:55:13.004Z" }, - { url = "https://files.pythonhosted.org/packages/6b/f9/4c43f9cc203d6ba44ce3146246cdc38619d92c7bd7bad4946a3491bd5b70/rpds_py-0.26.0-cp313-cp313t-win32.whl", hash = "sha256:4d11382bcaf12f80b51d790dee295c56a159633a8e81e6323b16e55d81ae37e9", size = 218428, upload-time = "2025-07-01T15:55:14.486Z" }, - { url = "https://files.pythonhosted.org/packages/7e/8b/9286b7e822036a4a977f2f1e851c7345c20528dbd56b687bb67ed68a8ede/rpds_py-0.26.0-cp313-cp313t-win_amd64.whl", hash = "sha256:ff110acded3c22c033e637dd8896e411c7d3a11289b2edf041f86663dbc791e9", size = 231524, upload-time = "2025-07-01T15:55:15.745Z" }, - { url = "https://files.pythonhosted.org/packages/55/07/029b7c45db910c74e182de626dfdae0ad489a949d84a468465cd0ca36355/rpds_py-0.26.0-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:da619979df60a940cd434084355c514c25cf8eb4cf9a508510682f6c851a4f7a", size = 364292, upload-time = "2025-07-01T15:55:17.001Z" }, - { url = "https://files.pythonhosted.org/packages/13/d1/9b3d3f986216b4d1f584878dca15ce4797aaf5d372d738974ba737bf68d6/rpds_py-0.26.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:ea89a2458a1a75f87caabefe789c87539ea4e43b40f18cff526052e35bbb4fdf", size = 350334, upload-time = "2025-07-01T15:55:18.922Z" }, - { url = "https://files.pythonhosted.org/packages/18/98/16d5e7bc9ec715fa9668731d0cf97f6b032724e61696e2db3d47aeb89214/rpds_py-0.26.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:feac1045b3327a45944e7dcbeb57530339f6b17baff154df51ef8b0da34c8c12", size = 384875, upload-time = "2025-07-01T15:55:20.399Z" }, - { url = "https://files.pythonhosted.org/packages/f9/13/aa5e2b1ec5ab0e86a5c464d53514c0467bec6ba2507027d35fc81818358e/rpds_py-0.26.0-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b818a592bd69bfe437ee8368603d4a2d928c34cffcdf77c2e761a759ffd17d20", size = 399993, upload-time = "2025-07-01T15:55:21.729Z" }, - { url = "https://files.pythonhosted.org/packages/17/03/8021810b0e97923abdbab6474c8b77c69bcb4b2c58330777df9ff69dc559/rpds_py-0.26.0-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1a8b0dd8648709b62d9372fc00a57466f5fdeefed666afe3fea5a6c9539a0331", size = 516683, upload-time = "2025-07-01T15:55:22.918Z" }, - { url = "https://files.pythonhosted.org/packages/dc/b1/da8e61c87c2f3d836954239fdbbfb477bb7b54d74974d8f6fcb34342d166/rpds_py-0.26.0-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6d3498ad0df07d81112aa6ec6c95a7e7b1ae00929fb73e7ebee0f3faaeabad2f", size = 408825, upload-time = "2025-07-01T15:55:24.207Z" }, - { url = "https://files.pythonhosted.org/packages/38/bc/1fc173edaaa0e52c94b02a655db20697cb5fa954ad5a8e15a2c784c5cbdd/rpds_py-0.26.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:24a4146ccb15be237fdef10f331c568e1b0e505f8c8c9ed5d67759dac58ac246", size = 387292, upload-time = "2025-07-01T15:55:25.554Z" }, - { url = "https://files.pythonhosted.org/packages/7c/eb/3a9bb4bd90867d21916f253caf4f0d0be7098671b6715ad1cead9fe7bab9/rpds_py-0.26.0-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a9a63785467b2d73635957d32a4f6e73d5e4df497a16a6392fa066b753e87387", size = 420435, upload-time = "2025-07-01T15:55:27.798Z" }, - { url = "https://files.pythonhosted.org/packages/cd/16/e066dcdb56f5632713445271a3f8d3d0b426d51ae9c0cca387799df58b02/rpds_py-0.26.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:de4ed93a8c91debfd5a047be327b7cc8b0cc6afe32a716bbbc4aedca9e2a83af", size = 562410, upload-time = "2025-07-01T15:55:29.057Z" }, - { url = "https://files.pythonhosted.org/packages/60/22/ddbdec7eb82a0dc2e455be44c97c71c232983e21349836ce9f272e8a3c29/rpds_py-0.26.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:caf51943715b12af827696ec395bfa68f090a4c1a1d2509eb4e2cb69abbbdb33", size = 590724, upload-time = "2025-07-01T15:55:30.719Z" }, - { url = "https://files.pythonhosted.org/packages/2c/b4/95744085e65b7187d83f2fcb0bef70716a1ea0a9e5d8f7f39a86e5d83424/rpds_py-0.26.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:4a59e5bc386de021f56337f757301b337d7ab58baa40174fb150accd480bc953", size = 558285, upload-time = "2025-07-01T15:55:31.981Z" }, - { url = "https://files.pythonhosted.org/packages/37/37/6309a75e464d1da2559446f9c811aa4d16343cebe3dbb73701e63f760caa/rpds_py-0.26.0-cp314-cp314-win32.whl", hash = "sha256:92c8db839367ef16a662478f0a2fe13e15f2227da3c1430a782ad0f6ee009ec9", size = 223459, upload-time = "2025-07-01T15:55:33.312Z" }, - { url = "https://files.pythonhosted.org/packages/d9/6f/8e9c11214c46098b1d1391b7e02b70bb689ab963db3b19540cba17315291/rpds_py-0.26.0-cp314-cp314-win_amd64.whl", hash = "sha256:b0afb8cdd034150d4d9f53926226ed27ad15b7f465e93d7468caaf5eafae0d37", size = 236083, upload-time = "2025-07-01T15:55:34.933Z" }, - { url = "https://files.pythonhosted.org/packages/47/af/9c4638994dd623d51c39892edd9d08e8be8220a4b7e874fa02c2d6e91955/rpds_py-0.26.0-cp314-cp314-win_arm64.whl", hash = "sha256:ca3f059f4ba485d90c8dc75cb5ca897e15325e4e609812ce57f896607c1c0867", size = 223291, upload-time = "2025-07-01T15:55:36.202Z" }, - { url = "https://files.pythonhosted.org/packages/4d/db/669a241144460474aab03e254326b32c42def83eb23458a10d163cb9b5ce/rpds_py-0.26.0-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:5afea17ab3a126006dc2f293b14ffc7ef3c85336cf451564a0515ed7648033da", size = 361445, upload-time = "2025-07-01T15:55:37.483Z" }, - { url = "https://files.pythonhosted.org/packages/3b/2d/133f61cc5807c6c2fd086a46df0eb8f63a23f5df8306ff9f6d0fd168fecc/rpds_py-0.26.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:69f0c0a3df7fd3a7eec50a00396104bb9a843ea6d45fcc31c2d5243446ffd7a7", size = 347206, upload-time = "2025-07-01T15:55:38.828Z" }, - { url = "https://files.pythonhosted.org/packages/05/bf/0e8fb4c05f70273469eecf82f6ccf37248558526a45321644826555db31b/rpds_py-0.26.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:801a71f70f9813e82d2513c9a96532551fce1e278ec0c64610992c49c04c2dad", size = 380330, upload-time = "2025-07-01T15:55:40.175Z" }, - { url = "https://files.pythonhosted.org/packages/d4/a8/060d24185d8b24d3923322f8d0ede16df4ade226a74e747b8c7c978e3dd3/rpds_py-0.26.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:df52098cde6d5e02fa75c1f6244f07971773adb4a26625edd5c18fee906fa84d", size = 392254, upload-time = "2025-07-01T15:55:42.015Z" }, - { url = "https://files.pythonhosted.org/packages/b9/7b/7c2e8a9ee3e6bc0bae26bf29f5219955ca2fbb761dca996a83f5d2f773fe/rpds_py-0.26.0-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9bc596b30f86dc6f0929499c9e574601679d0341a0108c25b9b358a042f51bca", size = 516094, upload-time = "2025-07-01T15:55:43.603Z" }, - { url = "https://files.pythonhosted.org/packages/75/d6/f61cafbed8ba1499b9af9f1777a2a199cd888f74a96133d8833ce5eaa9c5/rpds_py-0.26.0-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9dfbe56b299cf5875b68eb6f0ebaadc9cac520a1989cac0db0765abfb3709c19", size = 402889, upload-time = "2025-07-01T15:55:45.275Z" }, - { url = "https://files.pythonhosted.org/packages/92/19/c8ac0a8a8df2dd30cdec27f69298a5c13e9029500d6d76718130f5e5be10/rpds_py-0.26.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ac64f4b2bdb4ea622175c9ab7cf09444e412e22c0e02e906978b3b488af5fde8", size = 384301, upload-time = "2025-07-01T15:55:47.098Z" }, - { url = "https://files.pythonhosted.org/packages/41/e1/6b1859898bc292a9ce5776016c7312b672da00e25cec74d7beced1027286/rpds_py-0.26.0-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:181ef9b6bbf9845a264f9aa45c31836e9f3c1f13be565d0d010e964c661d1e2b", size = 412891, upload-time = "2025-07-01T15:55:48.412Z" }, - { url = "https://files.pythonhosted.org/packages/ef/b9/ceb39af29913c07966a61367b3c08b4f71fad841e32c6b59a129d5974698/rpds_py-0.26.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:49028aa684c144ea502a8e847d23aed5e4c2ef7cadfa7d5eaafcb40864844b7a", size = 557044, upload-time = "2025-07-01T15:55:49.816Z" }, - { url = "https://files.pythonhosted.org/packages/2f/27/35637b98380731a521f8ec4f3fd94e477964f04f6b2f8f7af8a2d889a4af/rpds_py-0.26.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:e5d524d68a474a9688336045bbf76cb0def88549c1b2ad9dbfec1fb7cfbe9170", size = 585774, upload-time = "2025-07-01T15:55:51.192Z" }, - { url = "https://files.pythonhosted.org/packages/52/d9/3f0f105420fecd18551b678c9a6ce60bd23986098b252a56d35781b3e7e9/rpds_py-0.26.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:c1851f429b822831bd2edcbe0cfd12ee9ea77868f8d3daf267b189371671c80e", size = 554886, upload-time = "2025-07-01T15:55:52.541Z" }, - { url = "https://files.pythonhosted.org/packages/6b/c5/347c056a90dc8dd9bc240a08c527315008e1b5042e7a4cf4ac027be9d38a/rpds_py-0.26.0-cp314-cp314t-win32.whl", hash = "sha256:7bdb17009696214c3b66bb3590c6d62e14ac5935e53e929bcdbc5a495987a84f", size = 219027, upload-time = "2025-07-01T15:55:53.874Z" }, - { url = "https://files.pythonhosted.org/packages/75/04/5302cea1aa26d886d34cadbf2dc77d90d7737e576c0065f357b96dc7a1a6/rpds_py-0.26.0-cp314-cp314t-win_amd64.whl", hash = "sha256:f14440b9573a6f76b4ee4770c13f0b5921f71dde3b6fcb8dabbefd13b7fe05d7", size = 232821, upload-time = "2025-07-01T15:55:55.167Z" }, - { url = "https://files.pythonhosted.org/packages/51/f2/b5c85b758a00c513bb0389f8fc8e61eb5423050c91c958cdd21843faa3e6/rpds_py-0.26.0-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:f61a9326f80ca59214d1cceb0a09bb2ece5b2563d4e0cd37bfd5515c28510674", size = 373505, upload-time = "2025-07-01T15:56:34.716Z" }, - { url = "https://files.pythonhosted.org/packages/23/e0/25db45e391251118e915e541995bb5f5ac5691a3b98fb233020ba53afc9b/rpds_py-0.26.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:183f857a53bcf4b1b42ef0f57ca553ab56bdd170e49d8091e96c51c3d69ca696", size = 359468, upload-time = "2025-07-01T15:56:36.219Z" }, - { url = "https://files.pythonhosted.org/packages/0b/73/dd5ee6075bb6491be3a646b301dfd814f9486d924137a5098e61f0487e16/rpds_py-0.26.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:941c1cfdf4799d623cf3aa1d326a6b4fdb7a5799ee2687f3516738216d2262fb", size = 382680, upload-time = "2025-07-01T15:56:37.644Z" }, - { url = "https://files.pythonhosted.org/packages/2f/10/84b522ff58763a5c443f5bcedc1820240e454ce4e620e88520f04589e2ea/rpds_py-0.26.0-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:72a8d9564a717ee291f554eeb4bfeafe2309d5ec0aa6c475170bdab0f9ee8e88", size = 397035, upload-time = "2025-07-01T15:56:39.241Z" }, - { url = "https://files.pythonhosted.org/packages/06/ea/8667604229a10a520fcbf78b30ccc278977dcc0627beb7ea2c96b3becef0/rpds_py-0.26.0-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:511d15193cbe013619dd05414c35a7dedf2088fcee93c6bbb7c77859765bd4e8", size = 514922, upload-time = "2025-07-01T15:56:40.645Z" }, - { url = "https://files.pythonhosted.org/packages/24/e6/9ed5b625c0661c4882fc8cdf302bf8e96c73c40de99c31e0b95ed37d508c/rpds_py-0.26.0-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aea1f9741b603a8d8fedb0ed5502c2bc0accbc51f43e2ad1337fe7259c2b77a5", size = 402822, upload-time = "2025-07-01T15:56:42.137Z" }, - { url = "https://files.pythonhosted.org/packages/8a/58/212c7b6fd51946047fb45d3733da27e2fa8f7384a13457c874186af691b1/rpds_py-0.26.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4019a9d473c708cf2f16415688ef0b4639e07abaa569d72f74745bbeffafa2c7", size = 384336, upload-time = "2025-07-01T15:56:44.239Z" }, - { url = "https://files.pythonhosted.org/packages/aa/f5/a40ba78748ae8ebf4934d4b88e77b98497378bc2c24ba55ebe87a4e87057/rpds_py-0.26.0-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:093d63b4b0f52d98ebae33b8c50900d3d67e0666094b1be7a12fffd7f65de74b", size = 416871, upload-time = "2025-07-01T15:56:46.284Z" }, - { url = "https://files.pythonhosted.org/packages/d5/a6/33b1fc0c9f7dcfcfc4a4353daa6308b3ece22496ceece348b3e7a7559a09/rpds_py-0.26.0-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:2abe21d8ba64cded53a2a677e149ceb76dcf44284202d737178afe7ba540c1eb", size = 559439, upload-time = "2025-07-01T15:56:48.549Z" }, - { url = "https://files.pythonhosted.org/packages/71/2d/ceb3f9c12f8cfa56d34995097f6cd99da1325642c60d1b6680dd9df03ed8/rpds_py-0.26.0-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:4feb7511c29f8442cbbc28149a92093d32e815a28aa2c50d333826ad2a20fdf0", size = 588380, upload-time = "2025-07-01T15:56:50.086Z" }, - { url = "https://files.pythonhosted.org/packages/c8/ed/9de62c2150ca8e2e5858acf3f4f4d0d180a38feef9fdab4078bea63d8dba/rpds_py-0.26.0-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:e99685fc95d386da368013e7fb4269dd39c30d99f812a8372d62f244f662709c", size = 555334, upload-time = "2025-07-01T15:56:51.703Z" }, -] - -[[package]] -name = "s3fs" -version = "2025.7.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "aiobotocore" }, - { name = "aiohttp" }, - { name = "fsspec" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/bf/13/37438c4672ba1d23ec46df0e4b57e98469e5c5f4f98313cf6842b631652b/s3fs-2025.7.0.tar.gz", hash = "sha256:5e7f9ec0cad7745155e3eb86fae15b1481fa29946bf5b3a4ce3a60701ce6022d", size = 77795, upload-time = "2025-07-15T16:35:22.177Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/ff/c7/30d13b7fd4f866ca3f30e9a6e7ae038f0c45226f6e26b3cc98d6d197f93b/s3fs-2025.7.0-py3-none-any.whl", hash = "sha256:b6b2d3f84b6aa1c2ba5e62e39dd9410cf54f10a2cce1ea6db1ba0d1a6bcce685", size = 30315, upload-time = "2025-07-15T16:35:20.734Z" }, -] - -[[package]] -name = "s3transfer" -version = "0.13.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "botocore" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/6d/05/d52bf1e65044b4e5e27d4e63e8d1579dbdec54fce685908ae09bc3720030/s3transfer-0.13.1.tar.gz", hash = "sha256:c3fdba22ba1bd367922f27ec8032d6a1cf5f10c934fb5d68cf60fd5a23d936cf", size = 150589, upload-time = "2025-07-18T19:22:42.31Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/6d/4f/d073e09df851cfa251ef7840007d04db3293a0482ce607d2b993926089be/s3transfer-0.13.1-py3-none-any.whl", hash = "sha256:a981aa7429be23fe6dfc13e80e4020057cbab622b08c0315288758d67cabc724", size = 85308, upload-time = "2025-07-18T19:22:40.947Z" }, -] - -[[package]] -name = "setuptools" -version = "80.9.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/18/5d/3bf57dcd21979b887f014ea83c24ae194cfcd12b9e0fda66b957c69d1fca/setuptools-80.9.0.tar.gz", hash = "sha256:f36b47402ecde768dbfafc46e8e4207b4360c654f1f3bb84475f0a28628fb19c", size = 1319958, upload-time = "2025-05-27T00:56:51.443Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a3/dc/17031897dae0efacfea57dfd3a82fdd2a2aeb58e0ff71b77b87e44edc772/setuptools-80.9.0-py3-none-any.whl", hash = "sha256:062d34222ad13e0cc312a4c02d73f059e86a4acbfbdea8f8f76b28c99f306922", size = 1201486, upload-time = "2025-05-27T00:56:49.664Z" }, -] - -[[package]] -name = "six" -version = "1.17.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/94/e7/b2c673351809dca68a0e064b6af791aa332cf192da575fd474ed7d6f16a2/six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81", size = 34031, upload-time = "2024-12-04T17:35:28.174Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050, upload-time = "2024-12-04T17:35:26.475Z" }, -] - -[[package]] -name = "sniffio" -version = "1.3.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a2/87/a6771e1546d97e7e041b6ae58d80074f81b7d5121207425c964ddf5cfdbd/sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc", size = 20372, upload-time = "2024-02-25T23:20:04.057Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2", size = 10235, upload-time = "2024-02-25T23:20:01.196Z" }, -] - -[[package]] -name = "snowballstemmer" -version = "3.0.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/75/a7/9810d872919697c9d01295633f5d574fb416d47e535f258272ca1f01f447/snowballstemmer-3.0.1.tar.gz", hash = "sha256:6d5eeeec8e9f84d4d56b847692bacf79bc2c8e90c7f80ca4444ff8b6f2e52895", size = 105575, upload-time = "2025-05-09T16:34:51.843Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/c8/78/3565d011c61f5a43488987ee32b6f3f656e7f107ac2782dd57bdd7d91d9a/snowballstemmer-3.0.1-py3-none-any.whl", hash = "sha256:6cd7b3897da8d6c9ffb968a6781fa6532dce9c3618a4b127d920dab764a19064", size = 103274, upload-time = "2025-05-09T16:34:50.371Z" }, -] - -[[package]] -name = "sortedcontainers" -version = "2.4.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e8/c4/ba2f8066cceb6f23394729afe52f3bf7adec04bf9ed2c820b39e19299111/sortedcontainers-2.4.0.tar.gz", hash = "sha256:25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88", size = 30594, upload-time = "2021-05-16T22:03:42.897Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl", hash = "sha256:a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0", size = 29575, upload-time = "2021-05-16T22:03:41.177Z" }, -] - -[[package]] -name = "soupsieve" -version = "2.7" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/3f/f4/4a80cd6ef364b2e8b65b15816a843c0980f7a5a2b4dc701fc574952aa19f/soupsieve-2.7.tar.gz", hash = "sha256:ad282f9b6926286d2ead4750552c8a6142bc4c783fd66b0293547c8fe6ae126a", size = 103418, upload-time = "2025-04-20T18:50:08.518Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e7/9c/0e6afc12c269578be5c0c1c9f4b49a8d32770a080260c333ac04cc1c832d/soupsieve-2.7-py3-none-any.whl", hash = "sha256:6e60cc5c1ffaf1cebcc12e8188320b72071e922c2e897f737cadce79ad5d30c4", size = 36677, upload-time = "2025-04-20T18:50:07.196Z" }, -] - -[[package]] -name = "sphinx" -version = "8.1.3" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "alabaster" }, - { name = "babel" }, - { name = "colorama", marker = "sys_platform == 'win32'" }, - { name = "docutils" }, - { name = "imagesize" }, - { name = "jinja2" }, - { name = "packaging" }, - { name = "pygments" }, - { name = "requests" }, - { name = "snowballstemmer" }, - { name = "sphinxcontrib-applehelp" }, - { name = "sphinxcontrib-devhelp" }, - { name = "sphinxcontrib-htmlhelp" }, - { name = "sphinxcontrib-jsmath" }, - { name = "sphinxcontrib-qthelp" }, - { name = "sphinxcontrib-serializinghtml" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/6f/6d/be0b61178fe2cdcb67e2a92fc9ebb488e3c51c4f74a36a7824c0adf23425/sphinx-8.1.3.tar.gz", hash = "sha256:43c1911eecb0d3e161ad78611bc905d1ad0e523e4ddc202a58a821773dc4c927", size = 8184611, upload-time = "2024-10-13T20:27:13.93Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/26/60/1ddff83a56d33aaf6f10ec8ce84b4c007d9368b21008876fceda7e7381ef/sphinx-8.1.3-py3-none-any.whl", hash = "sha256:09719015511837b76bf6e03e42eb7595ac8c2e41eeb9c29c5b755c6b677992a2", size = 3487125, upload-time = "2024-10-13T20:27:10.448Z" }, -] - -[[package]] -name = "sphinx-autoapi" -version = "3.4.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "astroid" }, - { name = "jinja2" }, - { name = "pyyaml" }, - { name = "sphinx" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/4a/eb/cc243583bb1d518ca3b10998c203d919a8ed90affd4831f2b61ad09043d2/sphinx_autoapi-3.4.0.tar.gz", hash = "sha256:e6d5371f9411bbb9fca358c00a9e57aef3ac94cbfc5df4bab285946462f69e0c", size = 29292, upload-time = "2024-11-30T01:09:40.956Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/de/d6/f2acdc2567337fd5f5dc091a4e58d8a0fb14927b9779fc1e5ecee96d9824/sphinx_autoapi-3.4.0-py3-none-any.whl", hash = "sha256:4027fef2875a22c5f2a57107c71641d82f6166bf55beb407a47aaf3ef14e7b92", size = 34095, upload-time = "2024-11-30T01:09:17.272Z" }, -] - -[[package]] -name = "sphinx-autobuild" -version = "2024.10.3" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "colorama" }, - { name = "sphinx" }, - { name = "starlette" }, - { name = "uvicorn" }, - { name = "watchfiles" }, - { name = "websockets" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/a5/2c/155e1de2c1ba96a72e5dba152c509a8b41e047ee5c2def9e9f0d812f8be7/sphinx_autobuild-2024.10.3.tar.gz", hash = "sha256:248150f8f333e825107b6d4b86113ab28fa51750e5f9ae63b59dc339be951fb1", size = 14023, upload-time = "2024-10-02T23:15:30.172Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/18/c0/eba125db38c84d3c74717008fd3cb5000b68cd7e2cbafd1349c6a38c3d3b/sphinx_autobuild-2024.10.3-py3-none-any.whl", hash = "sha256:158e16c36f9d633e613c9aaf81c19b0fc458ca78b112533b20dafcda430d60fa", size = 11908, upload-time = "2024-10-02T23:15:28.739Z" }, -] - -[[package]] -name = "sphinx-copybutton" -version = "0.5.2" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "sphinx" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/fc/2b/a964715e7f5295f77509e59309959f4125122d648f86b4fe7d70ca1d882c/sphinx-copybutton-0.5.2.tar.gz", hash = "sha256:4cf17c82fb9646d1bc9ca92ac280813a3b605d8c421225fd9913154103ee1fbd", size = 23039, upload-time = "2023-04-14T08:10:22.998Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/9e/48/1ea60e74949eecb12cdd6ac43987f9fd331156388dcc2319b45e2ebb81bf/sphinx_copybutton-0.5.2-py3-none-any.whl", hash = "sha256:fb543fd386d917746c9a2c50360c7905b605726b9355cd26e9974857afeae06e", size = 13343, upload-time = "2023-04-14T08:10:20.844Z" }, -] - -[[package]] -name = "sphinx-design" -version = "0.6.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "sphinx" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/2b/69/b34e0cb5336f09c6866d53b4a19d76c227cdec1bbc7ac4de63ca7d58c9c7/sphinx_design-0.6.1.tar.gz", hash = "sha256:b44eea3719386d04d765c1a8257caca2b3e6f8421d7b3a5e742c0fd45f84e632", size = 2193689, upload-time = "2024-08-02T13:48:44.277Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/c6/43/65c0acbd8cc6f50195a3a1fc195c404988b15c67090e73c7a41a9f57d6bd/sphinx_design-0.6.1-py3-none-any.whl", hash = "sha256:b11f37db1a802a183d61b159d9a202314d4d2fe29c163437001324fe2f19549c", size = 2215338, upload-time = "2024-08-02T13:48:42.106Z" }, -] - -[[package]] -name = "sphinx-issues" -version = "5.0.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "sphinx" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/3a/62/b55f1c482ce20acee71185dbebf0497a48d23b325b48925d95d5ce0e4666/sphinx_issues-5.0.1.tar.gz", hash = "sha256:6da131d4545af00be4b48ec7c4086ea82c1371a05116bbe5779f57cff34bf16a", size = 14370, upload-time = "2025-04-10T13:41:41.945Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e9/22/497d11c8198e00f45bffa6edc275066938dcec76c346facf40a72ff94222/sphinx_issues-5.0.1-py3-none-any.whl", hash = "sha256:58cdd94df25546fa96a224afc9df17063deffaf38336c4a694d2bf478aec75a4", size = 8229, upload-time = "2025-04-10T13:41:40.655Z" }, -] - -[[package]] -name = "sphinx-reredirects" -version = "1.0.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "sphinx" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/72/61/d3039bc2b688c73e81f515afe771b7cc9631dfef63b3e3ac3aab3d73c685/sphinx_reredirects-1.0.0.tar.gz", hash = "sha256:7c9bada9f1330489fcf4c7297a2d6da2a49ca4877d3f42d1388ae1de1019bf5c", size = 711970, upload-time = "2025-05-31T14:45:55.428Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/2a/7f/adb886a3db417a2ccea6a13dcb4b88d08f82104aed17e347346f79480a5f/sphinx_reredirects-1.0.0-py3-none-any.whl", hash = "sha256:1d0102710a8f633c6c885f940f440f7195ada675c1739976f0135790747dea06", size = 6173, upload-time = "2025-05-31T14:45:53.014Z" }, -] - -[[package]] -name = "sphinxcontrib-applehelp" -version = "2.0.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ba/6e/b837e84a1a704953c62ef8776d45c3e8d759876b4a84fe14eba2859106fe/sphinxcontrib_applehelp-2.0.0.tar.gz", hash = "sha256:2f29ef331735ce958efa4734873f084941970894c6090408b079c61b2e1c06d1", size = 20053, upload-time = "2024-07-29T01:09:00.465Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/5d/85/9ebeae2f76e9e77b952f4b274c27238156eae7979c5421fba91a28f4970d/sphinxcontrib_applehelp-2.0.0-py3-none-any.whl", hash = "sha256:4cd3f0ec4ac5dd9c17ec65e9ab272c9b867ea77425228e68ecf08d6b28ddbdb5", size = 119300, upload-time = "2024-07-29T01:08:58.99Z" }, -] - -[[package]] -name = "sphinxcontrib-devhelp" -version = "2.0.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f6/d2/5beee64d3e4e747f316bae86b55943f51e82bb86ecd325883ef65741e7da/sphinxcontrib_devhelp-2.0.0.tar.gz", hash = "sha256:411f5d96d445d1d73bb5d52133377b4248ec79db5c793ce7dbe59e074b4dd1ad", size = 12967, upload-time = "2024-07-29T01:09:23.417Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/35/7a/987e583882f985fe4d7323774889ec58049171828b58c2217e7f79cdf44e/sphinxcontrib_devhelp-2.0.0-py3-none-any.whl", hash = "sha256:aefb8b83854e4b0998877524d1029fd3e6879210422ee3780459e28a1f03a8a2", size = 82530, upload-time = "2024-07-29T01:09:21.945Z" }, -] - -[[package]] -name = "sphinxcontrib-htmlhelp" -version = "2.1.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/43/93/983afd9aa001e5201eab16b5a444ed5b9b0a7a010541e0ddfbbfd0b2470c/sphinxcontrib_htmlhelp-2.1.0.tar.gz", hash = "sha256:c9e2916ace8aad64cc13a0d233ee22317f2b9025b9cf3295249fa985cc7082e9", size = 22617, upload-time = "2024-07-29T01:09:37.889Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/0a/7b/18a8c0bcec9182c05a0b3ec2a776bba4ead82750a55ff798e8d406dae604/sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl", hash = "sha256:166759820b47002d22914d64a075ce08f4c46818e17cfc9470a9786b759b19f8", size = 98705, upload-time = "2024-07-29T01:09:36.407Z" }, -] - -[[package]] -name = "sphinxcontrib-jsmath" -version = "1.0.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b2/e8/9ed3830aeed71f17c026a07a5097edcf44b692850ef215b161b8ad875729/sphinxcontrib-jsmath-1.0.1.tar.gz", hash = "sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8", size = 5787, upload-time = "2019-01-21T16:10:16.347Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/c2/42/4c8646762ee83602e3fb3fbe774c2fac12f317deb0b5dbeeedd2d3ba4b77/sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl", hash = "sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178", size = 5071, upload-time = "2019-01-21T16:10:14.333Z" }, -] - -[[package]] -name = "sphinxcontrib-qthelp" -version = "2.0.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/68/bc/9104308fc285eb3e0b31b67688235db556cd5b0ef31d96f30e45f2e51cae/sphinxcontrib_qthelp-2.0.0.tar.gz", hash = "sha256:4fe7d0ac8fc171045be623aba3e2a8f613f8682731f9153bb2e40ece16b9bbab", size = 17165, upload-time = "2024-07-29T01:09:56.435Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/27/83/859ecdd180cacc13b1f7e857abf8582a64552ea7a061057a6c716e790fce/sphinxcontrib_qthelp-2.0.0-py3-none-any.whl", hash = "sha256:b18a828cdba941ccd6ee8445dbe72ffa3ef8cbe7505d8cd1fa0d42d3f2d5f3eb", size = 88743, upload-time = "2024-07-29T01:09:54.885Z" }, -] - -[[package]] -name = "sphinxcontrib-serializinghtml" -version = "2.0.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/3b/44/6716b257b0aa6bfd51a1b31665d1c205fb12cb5ad56de752dfa15657de2f/sphinxcontrib_serializinghtml-2.0.0.tar.gz", hash = "sha256:e9d912827f872c029017a53f0ef2180b327c3f7fd23c87229f7a8e8b70031d4d", size = 16080, upload-time = "2024-07-29T01:10:09.332Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/52/a7/d2782e4e3f77c8450f727ba74a8f12756d5ba823d81b941f1b04da9d033a/sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl", hash = "sha256:6e2cb0eef194e10c27ec0023bfeb25badbbb5868244cf5bc5bdc04e4464bf331", size = 92072, upload-time = "2024-07-29T01:10:08.203Z" }, -] - -[[package]] -name = "stack-data" -version = "0.6.3" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "asttokens" }, - { name = "executing" }, - { name = "pure-eval" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/28/e3/55dcc2cfbc3ca9c29519eb6884dd1415ecb53b0e934862d3559ddcb7e20b/stack_data-0.6.3.tar.gz", hash = "sha256:836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9", size = 44707, upload-time = "2023-09-30T13:58:05.479Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/f1/7b/ce1eafaf1a76852e2ec9b22edecf1daa58175c090266e9f6c64afcd81d91/stack_data-0.6.3-py3-none-any.whl", hash = "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695", size = 24521, upload-time = "2023-09-30T13:58:03.53Z" }, -] - -[[package]] -name = "starlette" -version = "0.47.2" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "anyio" }, - { name = "typing-extensions", marker = "python_full_version < '3.13'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/04/57/d062573f391d062710d4088fa1369428c38d51460ab6fedff920efef932e/starlette-0.47.2.tar.gz", hash = "sha256:6ae9aa5db235e4846decc1e7b79c4f346adf41e9777aebeb49dfd09bbd7023d8", size = 2583948, upload-time = "2025-07-20T17:31:58.522Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/f7/1f/b876b1f83aef204198a42dc101613fefccb32258e5428b5f9259677864b4/starlette-0.47.2-py3-none-any.whl", hash = "sha256:c5847e96134e5c5371ee9fac6fdf1a67336d5815e09eb2a01fdb57a351ef915b", size = 72984, upload-time = "2025-07-20T17:31:56.738Z" }, -] - -[[package]] -name = "sympy" -version = "1.14.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "mpmath" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/83/d3/803453b36afefb7c2bb238361cd4ae6125a569b4db67cd9e79846ba2d68c/sympy-1.14.0.tar.gz", hash = "sha256:d3d3fe8df1e5a0b42f0e7bdf50541697dbe7d23746e894990c030e2b05e72517", size = 7793921, upload-time = "2025-04-27T18:05:01.611Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a2/09/77d55d46fd61b4a135c444fc97158ef34a095e5681d0a6c10b75bf356191/sympy-1.14.0-py3-none-any.whl", hash = "sha256:e091cc3e99d2141a0ba2847328f5479b05d94a6635cb96148ccb3f34671bd8f5", size = 6299353, upload-time = "2025-04-27T18:04:59.103Z" }, -] - -[[package]] -name = "tomli" -version = "2.2.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/18/87/302344fed471e44a87289cf4967697d07e532f2421fdaf868a303cbae4ff/tomli-2.2.1.tar.gz", hash = "sha256:cd45e1dc79c835ce60f7404ec8119f2eb06d38b1deba146f07ced3bbc44505ff", size = 17175, upload-time = "2024-11-27T22:38:36.873Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/43/ca/75707e6efa2b37c77dadb324ae7d9571cb424e61ea73fad7c56c2d14527f/tomli-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:678e4fa69e4575eb77d103de3df8a895e1591b48e740211bd1067378c69e8249", size = 131077, upload-time = "2024-11-27T22:37:54.956Z" }, - { url = "https://files.pythonhosted.org/packages/c7/16/51ae563a8615d472fdbffc43a3f3d46588c264ac4f024f63f01283becfbb/tomli-2.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:023aa114dd824ade0100497eb2318602af309e5a55595f76b626d6d9f3b7b0a6", size = 123429, upload-time = "2024-11-27T22:37:56.698Z" }, - { url = "https://files.pythonhosted.org/packages/f1/dd/4f6cd1e7b160041db83c694abc78e100473c15d54620083dbd5aae7b990e/tomli-2.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ece47d672db52ac607a3d9599a9d48dcb2f2f735c6c2d1f34130085bb12b112a", size = 226067, upload-time = "2024-11-27T22:37:57.63Z" }, - { url = "https://files.pythonhosted.org/packages/a9/6b/c54ede5dc70d648cc6361eaf429304b02f2871a345bbdd51e993d6cdf550/tomli-2.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6972ca9c9cc9f0acaa56a8ca1ff51e7af152a9f87fb64623e31d5c83700080ee", size = 236030, upload-time = "2024-11-27T22:37:59.344Z" }, - { url = "https://files.pythonhosted.org/packages/1f/47/999514fa49cfaf7a92c805a86c3c43f4215621855d151b61c602abb38091/tomli-2.2.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c954d2250168d28797dd4e3ac5cf812a406cd5a92674ee4c8f123c889786aa8e", size = 240898, upload-time = "2024-11-27T22:38:00.429Z" }, - { url = "https://files.pythonhosted.org/packages/73/41/0a01279a7ae09ee1573b423318e7934674ce06eb33f50936655071d81a24/tomli-2.2.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8dd28b3e155b80f4d54beb40a441d366adcfe740969820caf156c019fb5c7ec4", size = 229894, upload-time = "2024-11-27T22:38:02.094Z" }, - { url = "https://files.pythonhosted.org/packages/55/18/5d8bc5b0a0362311ce4d18830a5d28943667599a60d20118074ea1b01bb7/tomli-2.2.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e59e304978767a54663af13c07b3d1af22ddee3bb2fb0618ca1593e4f593a106", size = 245319, upload-time = "2024-11-27T22:38:03.206Z" }, - { url = "https://files.pythonhosted.org/packages/92/a3/7ade0576d17f3cdf5ff44d61390d4b3febb8a9fc2b480c75c47ea048c646/tomli-2.2.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:33580bccab0338d00994d7f16f4c4ec25b776af3ffaac1ed74e0b3fc95e885a8", size = 238273, upload-time = "2024-11-27T22:38:04.217Z" }, - { url = "https://files.pythonhosted.org/packages/72/6f/fa64ef058ac1446a1e51110c375339b3ec6be245af9d14c87c4a6412dd32/tomli-2.2.1-cp311-cp311-win32.whl", hash = "sha256:465af0e0875402f1d226519c9904f37254b3045fc5084697cefb9bdde1ff99ff", size = 98310, upload-time = "2024-11-27T22:38:05.908Z" }, - { url = "https://files.pythonhosted.org/packages/6a/1c/4a2dcde4a51b81be3530565e92eda625d94dafb46dbeb15069df4caffc34/tomli-2.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:2d0f2fdd22b02c6d81637a3c95f8cd77f995846af7414c5c4b8d0545afa1bc4b", size = 108309, upload-time = "2024-11-27T22:38:06.812Z" }, - { url = "https://files.pythonhosted.org/packages/52/e1/f8af4c2fcde17500422858155aeb0d7e93477a0d59a98e56cbfe75070fd0/tomli-2.2.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4a8f6e44de52d5e6c657c9fe83b562f5f4256d8ebbfe4ff922c495620a7f6cea", size = 132762, upload-time = "2024-11-27T22:38:07.731Z" }, - { url = "https://files.pythonhosted.org/packages/03/b8/152c68bb84fc00396b83e7bbddd5ec0bd3dd409db4195e2a9b3e398ad2e3/tomli-2.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8d57ca8095a641b8237d5b079147646153d22552f1c637fd3ba7f4b0b29167a8", size = 123453, upload-time = "2024-11-27T22:38:09.384Z" }, - { url = "https://files.pythonhosted.org/packages/c8/d6/fc9267af9166f79ac528ff7e8c55c8181ded34eb4b0e93daa767b8841573/tomli-2.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e340144ad7ae1533cb897d406382b4b6fede8890a03738ff1683af800d54192", size = 233486, upload-time = "2024-11-27T22:38:10.329Z" }, - { url = "https://files.pythonhosted.org/packages/5c/51/51c3f2884d7bab89af25f678447ea7d297b53b5a3b5730a7cb2ef6069f07/tomli-2.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db2b95f9de79181805df90bedc5a5ab4c165e6ec3fe99f970d0e302f384ad222", size = 242349, upload-time = "2024-11-27T22:38:11.443Z" }, - { url = "https://files.pythonhosted.org/packages/ab/df/bfa89627d13a5cc22402e441e8a931ef2108403db390ff3345c05253935e/tomli-2.2.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:40741994320b232529c802f8bc86da4e1aa9f413db394617b9a256ae0f9a7f77", size = 252159, upload-time = "2024-11-27T22:38:13.099Z" }, - { url = "https://files.pythonhosted.org/packages/9e/6e/fa2b916dced65763a5168c6ccb91066f7639bdc88b48adda990db10c8c0b/tomli-2.2.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:400e720fe168c0f8521520190686ef8ef033fb19fc493da09779e592861b78c6", size = 237243, upload-time = "2024-11-27T22:38:14.766Z" }, - { url = "https://files.pythonhosted.org/packages/b4/04/885d3b1f650e1153cbb93a6a9782c58a972b94ea4483ae4ac5cedd5e4a09/tomli-2.2.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:02abe224de6ae62c19f090f68da4e27b10af2b93213d36cf44e6e1c5abd19fdd", size = 259645, upload-time = "2024-11-27T22:38:15.843Z" }, - { url = "https://files.pythonhosted.org/packages/9c/de/6b432d66e986e501586da298e28ebeefd3edc2c780f3ad73d22566034239/tomli-2.2.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b82ebccc8c8a36f2094e969560a1b836758481f3dc360ce9a3277c65f374285e", size = 244584, upload-time = "2024-11-27T22:38:17.645Z" }, - { url = "https://files.pythonhosted.org/packages/1c/9a/47c0449b98e6e7d1be6cbac02f93dd79003234ddc4aaab6ba07a9a7482e2/tomli-2.2.1-cp312-cp312-win32.whl", hash = "sha256:889f80ef92701b9dbb224e49ec87c645ce5df3fa2cc548664eb8a25e03127a98", size = 98875, upload-time = "2024-11-27T22:38:19.159Z" }, - { url = "https://files.pythonhosted.org/packages/ef/60/9b9638f081c6f1261e2688bd487625cd1e660d0a85bd469e91d8db969734/tomli-2.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:7fc04e92e1d624a4a63c76474610238576942d6b8950a2d7f908a340494e67e4", size = 109418, upload-time = "2024-11-27T22:38:20.064Z" }, - { url = "https://files.pythonhosted.org/packages/04/90/2ee5f2e0362cb8a0b6499dc44f4d7d48f8fff06d28ba46e6f1eaa61a1388/tomli-2.2.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f4039b9cbc3048b2416cc57ab3bda989a6fcf9b36cf8937f01a6e731b64f80d7", size = 132708, upload-time = "2024-11-27T22:38:21.659Z" }, - { url = "https://files.pythonhosted.org/packages/c0/ec/46b4108816de6b385141f082ba99e315501ccd0a2ea23db4a100dd3990ea/tomli-2.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:286f0ca2ffeeb5b9bd4fcc8d6c330534323ec51b2f52da063b11c502da16f30c", size = 123582, upload-time = "2024-11-27T22:38:22.693Z" }, - { url = "https://files.pythonhosted.org/packages/a0/bd/b470466d0137b37b68d24556c38a0cc819e8febe392d5b199dcd7f578365/tomli-2.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a92ef1a44547e894e2a17d24e7557a5e85a9e1d0048b0b5e7541f76c5032cb13", size = 232543, upload-time = "2024-11-27T22:38:24.367Z" }, - { url = "https://files.pythonhosted.org/packages/d9/e5/82e80ff3b751373f7cead2815bcbe2d51c895b3c990686741a8e56ec42ab/tomli-2.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9316dc65bed1684c9a98ee68759ceaed29d229e985297003e494aa825ebb0281", size = 241691, upload-time = "2024-11-27T22:38:26.081Z" }, - { url = "https://files.pythonhosted.org/packages/05/7e/2a110bc2713557d6a1bfb06af23dd01e7dde52b6ee7dadc589868f9abfac/tomli-2.2.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e85e99945e688e32d5a35c1ff38ed0b3f41f43fad8df0bdf79f72b2ba7bc5272", size = 251170, upload-time = "2024-11-27T22:38:27.921Z" }, - { url = "https://files.pythonhosted.org/packages/64/7b/22d713946efe00e0adbcdfd6d1aa119ae03fd0b60ebed51ebb3fa9f5a2e5/tomli-2.2.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ac065718db92ca818f8d6141b5f66369833d4a80a9d74435a268c52bdfa73140", size = 236530, upload-time = "2024-11-27T22:38:29.591Z" }, - { url = "https://files.pythonhosted.org/packages/38/31/3a76f67da4b0cf37b742ca76beaf819dca0ebef26d78fc794a576e08accf/tomli-2.2.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:d920f33822747519673ee656a4b6ac33e382eca9d331c87770faa3eef562aeb2", size = 258666, upload-time = "2024-11-27T22:38:30.639Z" }, - { url = "https://files.pythonhosted.org/packages/07/10/5af1293da642aded87e8a988753945d0cf7e00a9452d3911dd3bb354c9e2/tomli-2.2.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a198f10c4d1b1375d7687bc25294306e551bf1abfa4eace6650070a5c1ae2744", size = 243954, upload-time = "2024-11-27T22:38:31.702Z" }, - { url = "https://files.pythonhosted.org/packages/5b/b9/1ed31d167be802da0fc95020d04cd27b7d7065cc6fbefdd2f9186f60d7bd/tomli-2.2.1-cp313-cp313-win32.whl", hash = "sha256:d3f5614314d758649ab2ab3a62d4f2004c825922f9e370b29416484086b264ec", size = 98724, upload-time = "2024-11-27T22:38:32.837Z" }, - { url = "https://files.pythonhosted.org/packages/c7/32/b0963458706accd9afcfeb867c0f9175a741bf7b19cd424230714d722198/tomli-2.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:a38aa0308e754b0e3c67e344754dff64999ff9b513e691d0e786265c93583c69", size = 109383, upload-time = "2024-11-27T22:38:34.455Z" }, - { url = "https://files.pythonhosted.org/packages/6e/c2/61d3e0f47e2b74ef40a68b9e6ad5984f6241a942f7cd3bbfbdbd03861ea9/tomli-2.2.1-py3-none-any.whl", hash = "sha256:cb55c73c5f4408779d0cf3eef9f762b9c9f147a77de7b258bef0a5628adc85cc", size = 14257, upload-time = "2024-11-27T22:38:35.385Z" }, -] - -[[package]] -name = "tomlkit" -version = "0.13.3" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/cc/18/0bbf3884e9eaa38819ebe46a7bd25dcd56b67434402b66a58c4b8e552575/tomlkit-0.13.3.tar.gz", hash = "sha256:430cf247ee57df2b94ee3fbe588e71d362a941ebb545dec29b53961d61add2a1", size = 185207, upload-time = "2025-06-05T07:13:44.947Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/bd/75/8539d011f6be8e29f339c42e633aae3cb73bffa95dd0f9adec09b9c58e85/tomlkit-0.13.3-py3-none-any.whl", hash = "sha256:c89c649d79ee40629a9fda55f8ace8c6a1b42deb912b2a8fd8d942ddadb606b0", size = 38901, upload-time = "2025-06-05T07:13:43.546Z" }, -] - -[[package]] -name = "tornado" -version = "6.5.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/51/89/c72771c81d25d53fe33e3dca61c233b665b2780f21820ba6fd2c6793c12b/tornado-6.5.1.tar.gz", hash = "sha256:84ceece391e8eb9b2b95578db65e920d2a61070260594819589609ba9bc6308c", size = 509934, upload-time = "2025-05-22T18:15:38.788Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/77/89/f4532dee6843c9e0ebc4e28d4be04c67f54f60813e4bf73d595fe7567452/tornado-6.5.1-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:d50065ba7fd11d3bd41bcad0825227cc9a95154bad83239357094c36708001f7", size = 441948, upload-time = "2025-05-22T18:15:20.862Z" }, - { url = "https://files.pythonhosted.org/packages/15/9a/557406b62cffa395d18772e0cdcf03bed2fff03b374677348eef9f6a3792/tornado-6.5.1-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:9e9ca370f717997cb85606d074b0e5b247282cf5e2e1611568b8821afe0342d6", size = 440112, upload-time = "2025-05-22T18:15:22.591Z" }, - { url = "https://files.pythonhosted.org/packages/55/82/7721b7319013a3cf881f4dffa4f60ceff07b31b394e459984e7a36dc99ec/tornado-6.5.1-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b77e9dfa7ed69754a54c89d82ef746398be82f749df69c4d3abe75c4d1ff4888", size = 443672, upload-time = "2025-05-22T18:15:24.027Z" }, - { url = "https://files.pythonhosted.org/packages/7d/42/d11c4376e7d101171b94e03cef0cbce43e823ed6567ceda571f54cf6e3ce/tornado-6.5.1-cp39-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:253b76040ee3bab8bcf7ba9feb136436a3787208717a1fb9f2c16b744fba7331", size = 443019, upload-time = "2025-05-22T18:15:25.735Z" }, - { url = "https://files.pythonhosted.org/packages/7d/f7/0c48ba992d875521ac761e6e04b0a1750f8150ae42ea26df1852d6a98942/tornado-6.5.1-cp39-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:308473f4cc5a76227157cdf904de33ac268af770b2c5f05ca6c1161d82fdd95e", size = 443252, upload-time = "2025-05-22T18:15:27.499Z" }, - { url = "https://files.pythonhosted.org/packages/89/46/d8d7413d11987e316df4ad42e16023cd62666a3c0dfa1518ffa30b8df06c/tornado-6.5.1-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:caec6314ce8a81cf69bd89909f4b633b9f523834dc1a352021775d45e51d9401", size = 443930, upload-time = "2025-05-22T18:15:29.299Z" }, - { url = "https://files.pythonhosted.org/packages/78/b2/f8049221c96a06df89bed68260e8ca94beca5ea532ffc63b1175ad31f9cc/tornado-6.5.1-cp39-abi3-musllinux_1_2_i686.whl", hash = "sha256:13ce6e3396c24e2808774741331638ee6c2f50b114b97a55c5b442df65fd9692", size = 443351, upload-time = "2025-05-22T18:15:31.038Z" }, - { url = "https://files.pythonhosted.org/packages/76/ff/6a0079e65b326cc222a54720a748e04a4db246870c4da54ece4577bfa702/tornado-6.5.1-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:5cae6145f4cdf5ab24744526cc0f55a17d76f02c98f4cff9daa08ae9a217448a", size = 443328, upload-time = "2025-05-22T18:15:32.426Z" }, - { url = "https://files.pythonhosted.org/packages/49/18/e3f902a1d21f14035b5bc6246a8c0f51e0eef562ace3a2cea403c1fb7021/tornado-6.5.1-cp39-abi3-win32.whl", hash = "sha256:e0a36e1bc684dca10b1aa75a31df8bdfed656831489bc1e6a6ebed05dc1ec365", size = 444396, upload-time = "2025-05-22T18:15:34.205Z" }, - { url = "https://files.pythonhosted.org/packages/7b/09/6526e32bf1049ee7de3bebba81572673b19a2a8541f795d887e92af1a8bc/tornado-6.5.1-cp39-abi3-win_amd64.whl", hash = "sha256:908e7d64567cecd4c2b458075589a775063453aeb1d2a1853eedb806922f568b", size = 444840, upload-time = "2025-05-22T18:15:36.1Z" }, - { url = "https://files.pythonhosted.org/packages/55/a7/535c44c7bea4578e48281d83c615219f3ab19e6abc67625ef637c73987be/tornado-6.5.1-cp39-abi3-win_arm64.whl", hash = "sha256:02420a0eb7bf617257b9935e2b754d1b63897525d8a289c9d65690d580b4dcf7", size = 443596, upload-time = "2025-05-22T18:15:37.433Z" }, -] - -[[package]] -name = "towncrier" -version = "24.8.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "click" }, - { name = "jinja2" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/69/d7/a5183f788cf4fabf03f7c767ae0b968249b0c737eb64b4d87a07ae01fea7/towncrier-24.8.0.tar.gz", hash = "sha256:013423ee7eed102b2f393c287d22d95f66f1a3ea10a4baa82d298001a7f18af3", size = 61635, upload-time = "2024-08-23T14:52:28.197Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/93/1b/2f7b88506e22d9798c139261af4946865c0787cfa345514ca3c70173a9cc/towncrier-24.8.0-py3-none-any.whl", hash = "sha256:9343209592b839209cdf28c339ba45792fbfe9775b5f9c177462fd693e127d8d", size = 56981, upload-time = "2024-08-23T14:52:26.659Z" }, -] - -[[package]] -name = "traitlets" -version = "5.14.3" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/eb/79/72064e6a701c2183016abbbfedaba506d81e30e232a68c9f0d6f6fcd1574/traitlets-5.14.3.tar.gz", hash = "sha256:9ed0579d3502c94b4b3732ac120375cda96f923114522847de4b3bb98b96b6b7", size = 161621, upload-time = "2024-04-19T11:11:49.746Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/00/c0/8f5d070730d7836adc9c9b6408dec68c6ced86b304a9b26a14df072a6e8c/traitlets-5.14.3-py3-none-any.whl", hash = "sha256:b74e89e397b1ed28cc831db7aea759ba6640cb3de13090ca145426688ff1ac4f", size = 85359, upload-time = "2024-04-19T11:11:46.763Z" }, -] - -[[package]] -name = "typing-extensions" -version = "4.14.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/98/5a/da40306b885cc8c09109dc2e1abd358d5684b1425678151cdaed4731c822/typing_extensions-4.14.1.tar.gz", hash = "sha256:38b39f4aeeab64884ce9f74c94263ef78f3c22467c8724005483154c26648d36", size = 107673, upload-time = "2025-07-04T13:28:34.16Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/b5/00/d631e67a838026495268c2f6884f3711a15a9a2a96cd244fdaea53b823fb/typing_extensions-4.14.1-py3-none-any.whl", hash = "sha256:d1e1e3b58374dc93031d6eda2420a48ea44a36c2b4766a4fdeb3710755731d76", size = 43906, upload-time = "2025-07-04T13:28:32.743Z" }, -] - -[[package]] -name = "typing-inspection" -version = "0.4.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "typing-extensions" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/f8/b1/0c11f5058406b3af7609f121aaa6b609744687f1d158b3c3a5bf4cc94238/typing_inspection-0.4.1.tar.gz", hash = "sha256:6ae134cc0203c33377d43188d4064e9b357dba58cff3185f22924610e70a9d28", size = 75726, upload-time = "2025-05-21T18:55:23.885Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/17/69/cd203477f944c353c31bade965f880aa1061fd6bf05ded0726ca845b6ff7/typing_inspection-0.4.1-py3-none-any.whl", hash = "sha256:389055682238f53b04f7badcb49b989835495a96700ced5dab2d8feae4b26f51", size = 14552, upload-time = "2025-05-21T18:55:22.152Z" }, -] - -[[package]] -name = "universal-pathlib" -version = "0.2.6" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "fsspec" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/eb/21/dd871495af3933e585261adce42678dcdf1168c9d6fa0a8f7b6565e54472/universal_pathlib-0.2.6.tar.gz", hash = "sha256:50817aaeaa9f4163cb1e76f5bdf84207fa05ce728b23fd779479b3462e5430ac", size = 175427, upload-time = "2024-12-13T00:58:27.514Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e5/4d/2e577f6db7aa0f932d19f799c18f604b2b302c65f733419b900ec07dbade/universal_pathlib-0.2.6-py3-none-any.whl", hash = "sha256:700dec2b58ef34b87998513de6d2ae153b22f083197dfafb8544744edabd1b18", size = 50087, upload-time = "2024-12-13T00:58:24.582Z" }, -] - -[[package]] -name = "urllib3" -version = "2.5.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/15/22/9ee70a2574a4f4599c47dd506532914ce044817c7752a79b6a51286319bc/urllib3-2.5.0.tar.gz", hash = "sha256:3fc47733c7e419d4bc3f6b3dc2b4f890bb743906a30d56ba4a5bfa4bbff92760", size = 393185, upload-time = "2025-06-18T14:07:41.644Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a7/c2/fe1e52489ae3122415c51f387e221dd0773709bad6c6cdaa599e8a2c5185/urllib3-2.5.0-py3-none-any.whl", hash = "sha256:e6b01673c0fa6a13e374b50871808eb3bf7046c4b125b216f6bf1cc604cff0dc", size = 129795, upload-time = "2025-06-18T14:07:40.39Z" }, -] - -[[package]] -name = "uv" -version = "0.8.4" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/71/05/779581d8e5cd8d12dc3e2297280a03293f7b465bb5f53308479e508c5c44/uv-0.8.4.tar.gz", hash = "sha256:2ab21c32a28dbe434c9074f899ed8084955f7b09ac5e7ffac548d3454f77516f", size = 3442716, upload-time = "2025-07-30T17:10:56.404Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/96/10/4d52b081defca3cfb4a11d6af3af4314fe7f289ba19e40d6cfab778f9257/uv-0.8.4-py3-none-linux_armv6l.whl", hash = "sha256:f9a5da616ca0d2bbe79367db9cf339cbaf1affee5d6b130a3be2779a917c14fa", size = 18077025, upload-time = "2025-07-30T17:10:13.016Z" }, - { url = "https://files.pythonhosted.org/packages/36/fa/7847373d214de987e96ef6b820a4ed2fa5e1c392ecc73cd53e94013d6074/uv-0.8.4-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:4d8422b3058998d87fee46d4d1a437e202407cafca8b8ac69e01c6479fbe0271", size = 18143542, upload-time = "2025-07-30T17:10:18.006Z" }, - { url = "https://files.pythonhosted.org/packages/16/39/7d4b68132868c550ae97c3b2c348c55db47a987dff05ab0e5f577bf0e197/uv-0.8.4-py3-none-macosx_11_0_arm64.whl", hash = "sha256:edc813645348665a3b4716a7d5e961cf7c8d1d3bfb9d907a4f18cf87c712a430", size = 16860749, upload-time = "2025-07-30T17:10:20.417Z" }, - { url = "https://files.pythonhosted.org/packages/e3/8f/f703e4ba41aae195d4958b701c2ee6cdbbbb8cdccb082845d6abfe834cf9/uv-0.8.4-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.musllinux_1_1_aarch64.whl", hash = "sha256:c2323e915ae562db4ebcdf5e20d3dd37a14959d07cc54939d86ab0dcdbf08f58", size = 17469507, upload-time = "2025-07-30T17:10:22.779Z" }, - { url = "https://files.pythonhosted.org/packages/59/f8/9366ceeb63f9dd6aa11375047762c1033d36521722e748b65a24e435f459/uv-0.8.4-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:96d7a68c360383d638c283811d57558fbf7b5f769ff4bdbc99ee2a3bf9a6e574", size = 17766700, upload-time = "2025-07-30T17:10:24.903Z" }, - { url = "https://files.pythonhosted.org/packages/f2/e3/190eb0ca91b8a0e5f80f93aeb7924b12be89656066170d6e1244e90c5e80/uv-0.8.4-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:385dec5a0c0909d5a24af5b02db24b49b025cbed59c6225e4c794ff40069d9aa", size = 18432996, upload-time = "2025-07-30T17:10:27.239Z" }, - { url = "https://files.pythonhosted.org/packages/ab/f6/b5fc5fe6e93e0294cbd8ba228d10b12e46a5e27b143565e868da758e0209/uv-0.8.4-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:b2230310ca303328c9fd351044fb81349f3ccfaa2863f135d37bfcee707adfd1", size = 19842168, upload-time = "2025-07-30T17:10:29.958Z" }, - { url = "https://files.pythonhosted.org/packages/f5/f0/d01779df4ac2ae39bf440c97f53346f1b9eef17cc84a45ed66206e348650/uv-0.8.4-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:86d64c66993eb0d9821caea27920175a27cd24df1eba8a340d8b3ae4074fac77", size = 19497445, upload-time = "2025-07-30T17:10:32.064Z" }, - { url = "https://files.pythonhosted.org/packages/80/ca/48c78393cb3a73940e768b74f74c30ca7719de6f83457a125b9cfa0c37e0/uv-0.8.4-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:624cf5b7bdc5cc0253115fefaad40008205d4acf34b77b294479dfe4eacb9697", size = 18852025, upload-time = "2025-07-30T17:10:34.34Z" }, - { url = "https://files.pythonhosted.org/packages/42/e2/5cf11c85fb48276b49979ea06e92c1e95524e1e4c5bccbd591a334c8de68/uv-0.8.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f9cd287982f62419f98ca7182fbbc2fd0fad1a04008b956a88eb85ce1d522611", size = 18806944, upload-time = "2025-07-30T17:10:36.819Z" }, - { url = "https://files.pythonhosted.org/packages/1c/b1/773dcd5ef4947a5bd7c183f1cc8afb9e761488ff1b48b46cb0d95bc5c8cf/uv-0.8.4-py3-none-manylinux_2_28_aarch64.whl", hash = "sha256:e6fa3754a2b965dceecfce8c38cacf7cd6b76a2787b9e189cf33acdb64a7472a", size = 17706599, upload-time = "2025-07-30T17:10:38.976Z" }, - { url = "https://files.pythonhosted.org/packages/e6/8f/20dcb6aaa9c9d7e16320b5143b1fdaa5fd1ebc42a99e2d5f4283aafc59f1/uv-0.8.4-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:9f2a7042553e85c66884a6a3c1b88e116bc5fe5e5d1c9b62f025b1de41534734", size = 18564686, upload-time = "2025-07-30T17:10:41.163Z" }, - { url = "https://files.pythonhosted.org/packages/8a/19/9f9df99259d6725fc269d5394606919f32c3e0d21f486277c040cb7c5dad/uv-0.8.4-py3-none-musllinux_1_1_armv7l.whl", hash = "sha256:2c80470d7253bd26c5990f4914cfddc68a6bb4da7c7da316a29e99feafe272a1", size = 17722213, upload-time = "2025-07-30T17:10:43.354Z" }, - { url = "https://files.pythonhosted.org/packages/00/f4/358576eea98eb4ba58135690a60f8052dbd8b50173a5c0e93e59c8797c2c/uv-0.8.4-py3-none-musllinux_1_1_i686.whl", hash = "sha256:b90eb86019ff92922dea54b8772074909ce7ab3359b2e8f8f3fe4d0658d3a898", size = 17997363, upload-time = "2025-07-30T17:10:45.631Z" }, - { url = "https://files.pythonhosted.org/packages/51/0f/9e5ff7d73846d8c924a5ef262dee247b453b7b2bd2ba5db1a819c72bd176/uv-0.8.4-py3-none-musllinux_1_1_x86_64.whl", hash = "sha256:cad63a02a735ba591679d713376767fc7649ad1e7097a95d0d267a68c2e803fc", size = 18954586, upload-time = "2025-07-30T17:10:47.789Z" }, - { url = "https://files.pythonhosted.org/packages/3c/fa/58c416c634253bdd7ec50baa5d79010f887453425a62e6a23f9668a75305/uv-0.8.4-py3-none-win32.whl", hash = "sha256:b83cd9eeb4c63ab69c6e8d0e26e57b5a9a8b1dca4015f4ddf088ed4a234e7018", size = 17907610, upload-time = "2025-07-30T17:10:49.966Z" }, - { url = "https://files.pythonhosted.org/packages/76/8e/2d6f5bce0f41074122caed1672f90f7ed5df2bd9827c8723c73a657bea7b/uv-0.8.4-py3-none-win_amd64.whl", hash = "sha256:ad056c8f6568d9f495e402753e79a092f28d513e6b5146d1c8dc2bdea668adb1", size = 19704945, upload-time = "2025-07-30T17:10:52.145Z" }, - { url = "https://files.pythonhosted.org/packages/58/de/196e862af4c3b2ff8cb4a7a3ad38ecf0306fa87d03ec9275f16e2f5dc416/uv-0.8.4-py3-none-win_arm64.whl", hash = "sha256:41f3a22550811bf7a0980b3d4dfce09e2c93aec7c42c92313ae3d3d0b97e1054", size = 18316402, upload-time = "2025-07-30T17:10:54.507Z" }, -] - -[[package]] -name = "uvicorn" -version = "0.35.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "click" }, - { name = "h11" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/5e/42/e0e305207bb88c6b8d3061399c6a961ffe5fbb7e2aa63c9234df7259e9cd/uvicorn-0.35.0.tar.gz", hash = "sha256:bc662f087f7cf2ce11a1d7fd70b90c9f98ef2e2831556dd078d131b96cc94a01", size = 78473, upload-time = "2025-06-28T16:15:46.058Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/d2/e2/dc81b1bd1dcfe91735810265e9d26bc8ec5da45b4c0f6237e286819194c3/uvicorn-0.35.0-py3-none-any.whl", hash = "sha256:197535216b25ff9b785e29a0b79199f55222193d47f820816e7da751e9bc8d4a", size = 66406, upload-time = "2025-06-28T16:15:44.816Z" }, -] - -[[package]] -name = "watchfiles" -version = "1.1.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "anyio" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/2a/9a/d451fcc97d029f5812e898fd30a53fd8c15c7bbd058fd75cfc6beb9bd761/watchfiles-1.1.0.tar.gz", hash = "sha256:693ed7ec72cbfcee399e92c895362b6e66d63dac6b91e2c11ae03d10d503e575", size = 94406, upload-time = "2025-06-15T19:06:59.42Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/8b/78/7401154b78ab484ccaaeef970dc2af0cb88b5ba8a1b415383da444cdd8d3/watchfiles-1.1.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:c9649dfc57cc1f9835551deb17689e8d44666315f2e82d337b9f07bd76ae3aa2", size = 405751, upload-time = "2025-06-15T19:05:07.679Z" }, - { url = "https://files.pythonhosted.org/packages/76/63/e6c3dbc1f78d001589b75e56a288c47723de28c580ad715eb116639152b5/watchfiles-1.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:406520216186b99374cdb58bc48e34bb74535adec160c8459894884c983a149c", size = 397313, upload-time = "2025-06-15T19:05:08.764Z" }, - { url = "https://files.pythonhosted.org/packages/6c/a2/8afa359ff52e99af1632f90cbf359da46184207e893a5f179301b0c8d6df/watchfiles-1.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb45350fd1dc75cd68d3d72c47f5b513cb0578da716df5fba02fff31c69d5f2d", size = 450792, upload-time = "2025-06-15T19:05:09.869Z" }, - { url = "https://files.pythonhosted.org/packages/1d/bf/7446b401667f5c64972a57a0233be1104157fc3abf72c4ef2666c1bd09b2/watchfiles-1.1.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:11ee4444250fcbeb47459a877e5e80ed994ce8e8d20283857fc128be1715dac7", size = 458196, upload-time = "2025-06-15T19:05:11.91Z" }, - { url = "https://files.pythonhosted.org/packages/58/2f/501ddbdfa3fa874ea5597c77eeea3d413579c29af26c1091b08d0c792280/watchfiles-1.1.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bda8136e6a80bdea23e5e74e09df0362744d24ffb8cd59c4a95a6ce3d142f79c", size = 484788, upload-time = "2025-06-15T19:05:13.373Z" }, - { url = "https://files.pythonhosted.org/packages/61/1e/9c18eb2eb5c953c96bc0e5f626f0e53cfef4bd19bd50d71d1a049c63a575/watchfiles-1.1.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b915daeb2d8c1f5cee4b970f2e2c988ce6514aace3c9296e58dd64dc9aa5d575", size = 597879, upload-time = "2025-06-15T19:05:14.725Z" }, - { url = "https://files.pythonhosted.org/packages/8b/6c/1467402e5185d89388b4486745af1e0325007af0017c3384cc786fff0542/watchfiles-1.1.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ed8fc66786de8d0376f9f913c09e963c66e90ced9aa11997f93bdb30f7c872a8", size = 477447, upload-time = "2025-06-15T19:05:15.775Z" }, - { url = "https://files.pythonhosted.org/packages/2b/a1/ec0a606bde4853d6c4a578f9391eeb3684a9aea736a8eb217e3e00aa89a1/watchfiles-1.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fe4371595edf78c41ef8ac8df20df3943e13defd0efcb732b2e393b5a8a7a71f", size = 453145, upload-time = "2025-06-15T19:05:17.17Z" }, - { url = "https://files.pythonhosted.org/packages/90/b9/ef6f0c247a6a35d689fc970dc7f6734f9257451aefb30def5d100d6246a5/watchfiles-1.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b7c5f6fe273291f4d414d55b2c80d33c457b8a42677ad14b4b47ff025d0893e4", size = 626539, upload-time = "2025-06-15T19:05:18.557Z" }, - { url = "https://files.pythonhosted.org/packages/34/44/6ffda5537085106ff5aaa762b0d130ac6c75a08015dd1621376f708c94de/watchfiles-1.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:7738027989881e70e3723c75921f1efa45225084228788fc59ea8c6d732eb30d", size = 624472, upload-time = "2025-06-15T19:05:19.588Z" }, - { url = "https://files.pythonhosted.org/packages/c3/e3/71170985c48028fa3f0a50946916a14055e741db11c2e7bc2f3b61f4d0e3/watchfiles-1.1.0-cp311-cp311-win32.whl", hash = "sha256:622d6b2c06be19f6e89b1d951485a232e3b59618def88dbeda575ed8f0d8dbf2", size = 279348, upload-time = "2025-06-15T19:05:20.856Z" }, - { url = "https://files.pythonhosted.org/packages/89/1b/3e39c68b68a7a171070f81fc2561d23ce8d6859659406842a0e4bebf3bba/watchfiles-1.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:48aa25e5992b61debc908a61ab4d3f216b64f44fdaa71eb082d8b2de846b7d12", size = 292607, upload-time = "2025-06-15T19:05:21.937Z" }, - { url = "https://files.pythonhosted.org/packages/61/9f/2973b7539f2bdb6ea86d2c87f70f615a71a1fc2dba2911795cea25968aea/watchfiles-1.1.0-cp311-cp311-win_arm64.whl", hash = "sha256:00645eb79a3faa70d9cb15c8d4187bb72970b2470e938670240c7998dad9f13a", size = 285056, upload-time = "2025-06-15T19:05:23.12Z" }, - { url = "https://files.pythonhosted.org/packages/f6/b8/858957045a38a4079203a33aaa7d23ea9269ca7761c8a074af3524fbb240/watchfiles-1.1.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:9dc001c3e10de4725c749d4c2f2bdc6ae24de5a88a339c4bce32300a31ede179", size = 402339, upload-time = "2025-06-15T19:05:24.516Z" }, - { url = "https://files.pythonhosted.org/packages/80/28/98b222cca751ba68e88521fabd79a4fab64005fc5976ea49b53fa205d1fa/watchfiles-1.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d9ba68ec283153dead62cbe81872d28e053745f12335d037de9cbd14bd1877f5", size = 394409, upload-time = "2025-06-15T19:05:25.469Z" }, - { url = "https://files.pythonhosted.org/packages/86/50/dee79968566c03190677c26f7f47960aff738d32087087bdf63a5473e7df/watchfiles-1.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:130fc497b8ee68dce163e4254d9b0356411d1490e868bd8790028bc46c5cc297", size = 450939, upload-time = "2025-06-15T19:05:26.494Z" }, - { url = "https://files.pythonhosted.org/packages/40/45/a7b56fb129700f3cfe2594a01aa38d033b92a33dddce86c8dfdfc1247b72/watchfiles-1.1.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:50a51a90610d0845a5931a780d8e51d7bd7f309ebc25132ba975aca016b576a0", size = 457270, upload-time = "2025-06-15T19:05:27.466Z" }, - { url = "https://files.pythonhosted.org/packages/b5/c8/fa5ef9476b1d02dc6b5e258f515fcaaecf559037edf8b6feffcbc097c4b8/watchfiles-1.1.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dc44678a72ac0910bac46fa6a0de6af9ba1355669b3dfaf1ce5f05ca7a74364e", size = 483370, upload-time = "2025-06-15T19:05:28.548Z" }, - { url = "https://files.pythonhosted.org/packages/98/68/42cfcdd6533ec94f0a7aab83f759ec11280f70b11bfba0b0f885e298f9bd/watchfiles-1.1.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a543492513a93b001975ae283a51f4b67973662a375a403ae82f420d2c7205ee", size = 598654, upload-time = "2025-06-15T19:05:29.997Z" }, - { url = "https://files.pythonhosted.org/packages/d3/74/b2a1544224118cc28df7e59008a929e711f9c68ce7d554e171b2dc531352/watchfiles-1.1.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8ac164e20d17cc285f2b94dc31c384bc3aa3dd5e7490473b3db043dd70fbccfd", size = 478667, upload-time = "2025-06-15T19:05:31.172Z" }, - { url = "https://files.pythonhosted.org/packages/8c/77/e3362fe308358dc9f8588102481e599c83e1b91c2ae843780a7ded939a35/watchfiles-1.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f7590d5a455321e53857892ab8879dce62d1f4b04748769f5adf2e707afb9d4f", size = 452213, upload-time = "2025-06-15T19:05:32.299Z" }, - { url = "https://files.pythonhosted.org/packages/6e/17/c8f1a36540c9a1558d4faf08e909399e8133599fa359bf52ec8fcee5be6f/watchfiles-1.1.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:37d3d3f7defb13f62ece99e9be912afe9dd8a0077b7c45ee5a57c74811d581a4", size = 626718, upload-time = "2025-06-15T19:05:33.415Z" }, - { url = "https://files.pythonhosted.org/packages/26/45/fb599be38b4bd38032643783d7496a26a6f9ae05dea1a42e58229a20ac13/watchfiles-1.1.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:7080c4bb3efd70a07b1cc2df99a7aa51d98685be56be6038c3169199d0a1c69f", size = 623098, upload-time = "2025-06-15T19:05:34.534Z" }, - { url = "https://files.pythonhosted.org/packages/a1/e7/fdf40e038475498e160cd167333c946e45d8563ae4dd65caf757e9ffe6b4/watchfiles-1.1.0-cp312-cp312-win32.whl", hash = "sha256:cbcf8630ef4afb05dc30107bfa17f16c0896bb30ee48fc24bf64c1f970f3b1fd", size = 279209, upload-time = "2025-06-15T19:05:35.577Z" }, - { url = "https://files.pythonhosted.org/packages/3f/d3/3ae9d5124ec75143bdf088d436cba39812122edc47709cd2caafeac3266f/watchfiles-1.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:cbd949bdd87567b0ad183d7676feb98136cde5bb9025403794a4c0db28ed3a47", size = 292786, upload-time = "2025-06-15T19:05:36.559Z" }, - { url = "https://files.pythonhosted.org/packages/26/2f/7dd4fc8b5f2b34b545e19629b4a018bfb1de23b3a496766a2c1165ca890d/watchfiles-1.1.0-cp312-cp312-win_arm64.whl", hash = "sha256:0a7d40b77f07be87c6faa93d0951a0fcd8cbca1ddff60a1b65d741bac6f3a9f6", size = 284343, upload-time = "2025-06-15T19:05:37.5Z" }, - { url = "https://files.pythonhosted.org/packages/d3/42/fae874df96595556a9089ade83be34a2e04f0f11eb53a8dbf8a8a5e562b4/watchfiles-1.1.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:5007f860c7f1f8df471e4e04aaa8c43673429047d63205d1630880f7637bca30", size = 402004, upload-time = "2025-06-15T19:05:38.499Z" }, - { url = "https://files.pythonhosted.org/packages/fa/55/a77e533e59c3003d9803c09c44c3651224067cbe7fb5d574ddbaa31e11ca/watchfiles-1.1.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:20ecc8abbd957046f1fe9562757903f5eaf57c3bce70929fda6c7711bb58074a", size = 393671, upload-time = "2025-06-15T19:05:39.52Z" }, - { url = "https://files.pythonhosted.org/packages/05/68/b0afb3f79c8e832e6571022611adbdc36e35a44e14f129ba09709aa4bb7a/watchfiles-1.1.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f2f0498b7d2a3c072766dba3274fe22a183dbea1f99d188f1c6c72209a1063dc", size = 449772, upload-time = "2025-06-15T19:05:40.897Z" }, - { url = "https://files.pythonhosted.org/packages/ff/05/46dd1f6879bc40e1e74c6c39a1b9ab9e790bf1f5a2fe6c08b463d9a807f4/watchfiles-1.1.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:239736577e848678e13b201bba14e89718f5c2133dfd6b1f7846fa1b58a8532b", size = 456789, upload-time = "2025-06-15T19:05:42.045Z" }, - { url = "https://files.pythonhosted.org/packages/8b/ca/0eeb2c06227ca7f12e50a47a3679df0cd1ba487ea19cf844a905920f8e95/watchfiles-1.1.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eff4b8d89f444f7e49136dc695599a591ff769300734446c0a86cba2eb2f9895", size = 482551, upload-time = "2025-06-15T19:05:43.781Z" }, - { url = "https://files.pythonhosted.org/packages/31/47/2cecbd8694095647406645f822781008cc524320466ea393f55fe70eed3b/watchfiles-1.1.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:12b0a02a91762c08f7264e2e79542f76870c3040bbc847fb67410ab81474932a", size = 597420, upload-time = "2025-06-15T19:05:45.244Z" }, - { url = "https://files.pythonhosted.org/packages/d9/7e/82abc4240e0806846548559d70f0b1a6dfdca75c1b4f9fa62b504ae9b083/watchfiles-1.1.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:29e7bc2eee15cbb339c68445959108803dc14ee0c7b4eea556400131a8de462b", size = 477950, upload-time = "2025-06-15T19:05:46.332Z" }, - { url = "https://files.pythonhosted.org/packages/25/0d/4d564798a49bf5482a4fa9416dea6b6c0733a3b5700cb8a5a503c4b15853/watchfiles-1.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d9481174d3ed982e269c090f780122fb59cee6c3796f74efe74e70f7780ed94c", size = 451706, upload-time = "2025-06-15T19:05:47.459Z" }, - { url = "https://files.pythonhosted.org/packages/81/b5/5516cf46b033192d544102ea07c65b6f770f10ed1d0a6d388f5d3874f6e4/watchfiles-1.1.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:80f811146831c8c86ab17b640801c25dc0a88c630e855e2bef3568f30434d52b", size = 625814, upload-time = "2025-06-15T19:05:48.654Z" }, - { url = "https://files.pythonhosted.org/packages/0c/dd/7c1331f902f30669ac3e754680b6edb9a0dd06dea5438e61128111fadd2c/watchfiles-1.1.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:60022527e71d1d1fda67a33150ee42869042bce3d0fcc9cc49be009a9cded3fb", size = 622820, upload-time = "2025-06-15T19:05:50.088Z" }, - { url = "https://files.pythonhosted.org/packages/1b/14/36d7a8e27cd128d7b1009e7715a7c02f6c131be9d4ce1e5c3b73d0e342d8/watchfiles-1.1.0-cp313-cp313-win32.whl", hash = "sha256:32d6d4e583593cb8576e129879ea0991660b935177c0f93c6681359b3654bfa9", size = 279194, upload-time = "2025-06-15T19:05:51.186Z" }, - { url = "https://files.pythonhosted.org/packages/25/41/2dd88054b849aa546dbeef5696019c58f8e0774f4d1c42123273304cdb2e/watchfiles-1.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:f21af781a4a6fbad54f03c598ab620e3a77032c5878f3d780448421a6e1818c7", size = 292349, upload-time = "2025-06-15T19:05:52.201Z" }, - { url = "https://files.pythonhosted.org/packages/c8/cf/421d659de88285eb13941cf11a81f875c176f76a6d99342599be88e08d03/watchfiles-1.1.0-cp313-cp313-win_arm64.whl", hash = "sha256:5366164391873ed76bfdf618818c82084c9db7fac82b64a20c44d335eec9ced5", size = 283836, upload-time = "2025-06-15T19:05:53.265Z" }, - { url = "https://files.pythonhosted.org/packages/45/10/6faf6858d527e3599cc50ec9fcae73590fbddc1420bd4fdccfebffeedbc6/watchfiles-1.1.0-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:17ab167cca6339c2b830b744eaf10803d2a5b6683be4d79d8475d88b4a8a4be1", size = 400343, upload-time = "2025-06-15T19:05:54.252Z" }, - { url = "https://files.pythonhosted.org/packages/03/20/5cb7d3966f5e8c718006d0e97dfe379a82f16fecd3caa7810f634412047a/watchfiles-1.1.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:328dbc9bff7205c215a7807da7c18dce37da7da718e798356212d22696404339", size = 392916, upload-time = "2025-06-15T19:05:55.264Z" }, - { url = "https://files.pythonhosted.org/packages/8c/07/d8f1176328fa9e9581b6f120b017e286d2a2d22ae3f554efd9515c8e1b49/watchfiles-1.1.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f7208ab6e009c627b7557ce55c465c98967e8caa8b11833531fdf95799372633", size = 449582, upload-time = "2025-06-15T19:05:56.317Z" }, - { url = "https://files.pythonhosted.org/packages/66/e8/80a14a453cf6038e81d072a86c05276692a1826471fef91df7537dba8b46/watchfiles-1.1.0-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a8f6f72974a19efead54195bc9bed4d850fc047bb7aa971268fd9a8387c89011", size = 456752, upload-time = "2025-06-15T19:05:57.359Z" }, - { url = "https://files.pythonhosted.org/packages/5a/25/0853b3fe0e3c2f5af9ea60eb2e781eade939760239a72c2d38fc4cc335f6/watchfiles-1.1.0-cp313-cp313t-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d181ef50923c29cf0450c3cd47e2f0557b62218c50b2ab8ce2ecaa02bd97e670", size = 481436, upload-time = "2025-06-15T19:05:58.447Z" }, - { url = "https://files.pythonhosted.org/packages/fe/9e/4af0056c258b861fbb29dcb36258de1e2b857be4a9509e6298abcf31e5c9/watchfiles-1.1.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:adb4167043d3a78280d5d05ce0ba22055c266cf8655ce942f2fb881262ff3cdf", size = 596016, upload-time = "2025-06-15T19:05:59.59Z" }, - { url = "https://files.pythonhosted.org/packages/c5/fa/95d604b58aa375e781daf350897aaaa089cff59d84147e9ccff2447c8294/watchfiles-1.1.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8c5701dc474b041e2934a26d31d39f90fac8a3dee2322b39f7729867f932b1d4", size = 476727, upload-time = "2025-06-15T19:06:01.086Z" }, - { url = "https://files.pythonhosted.org/packages/65/95/fe479b2664f19be4cf5ceeb21be05afd491d95f142e72d26a42f41b7c4f8/watchfiles-1.1.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b067915e3c3936966a8607f6fe5487df0c9c4afb85226613b520890049deea20", size = 451864, upload-time = "2025-06-15T19:06:02.144Z" }, - { url = "https://files.pythonhosted.org/packages/d3/8a/3c4af14b93a15ce55901cd7a92e1a4701910f1768c78fb30f61d2b79785b/watchfiles-1.1.0-cp313-cp313t-musllinux_1_1_aarch64.whl", hash = "sha256:9c733cda03b6d636b4219625a4acb5c6ffb10803338e437fb614fef9516825ef", size = 625626, upload-time = "2025-06-15T19:06:03.578Z" }, - { url = "https://files.pythonhosted.org/packages/da/f5/cf6aa047d4d9e128f4b7cde615236a915673775ef171ff85971d698f3c2c/watchfiles-1.1.0-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:cc08ef8b90d78bfac66f0def80240b0197008e4852c9f285907377b2947ffdcb", size = 622744, upload-time = "2025-06-15T19:06:05.066Z" }, - { url = "https://files.pythonhosted.org/packages/2c/00/70f75c47f05dea6fd30df90f047765f6fc2d6eb8b5a3921379b0b04defa2/watchfiles-1.1.0-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:9974d2f7dc561cce3bb88dfa8eb309dab64c729de85fba32e98d75cf24b66297", size = 402114, upload-time = "2025-06-15T19:06:06.186Z" }, - { url = "https://files.pythonhosted.org/packages/53/03/acd69c48db4a1ed1de26b349d94077cca2238ff98fd64393f3e97484cae6/watchfiles-1.1.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c68e9f1fcb4d43798ad8814c4c1b61547b014b667216cb754e606bfade587018", size = 393879, upload-time = "2025-06-15T19:06:07.369Z" }, - { url = "https://files.pythonhosted.org/packages/2f/c8/a9a2a6f9c8baa4eceae5887fecd421e1b7ce86802bcfc8b6a942e2add834/watchfiles-1.1.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:95ab1594377effac17110e1352989bdd7bdfca9ff0e5eeccd8c69c5389b826d0", size = 450026, upload-time = "2025-06-15T19:06:08.476Z" }, - { url = "https://files.pythonhosted.org/packages/fe/51/d572260d98388e6e2b967425c985e07d47ee6f62e6455cefb46a6e06eda5/watchfiles-1.1.0-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fba9b62da882c1be1280a7584ec4515d0a6006a94d6e5819730ec2eab60ffe12", size = 457917, upload-time = "2025-06-15T19:06:09.988Z" }, - { url = "https://files.pythonhosted.org/packages/c6/2d/4258e52917bf9f12909b6ec314ff9636276f3542f9d3807d143f27309104/watchfiles-1.1.0-cp314-cp314-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3434e401f3ce0ed6b42569128b3d1e3af773d7ec18751b918b89cd49c14eaafb", size = 483602, upload-time = "2025-06-15T19:06:11.088Z" }, - { url = "https://files.pythonhosted.org/packages/84/99/bee17a5f341a4345fe7b7972a475809af9e528deba056f8963d61ea49f75/watchfiles-1.1.0-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fa257a4d0d21fcbca5b5fcba9dca5a78011cb93c0323fb8855c6d2dfbc76eb77", size = 596758, upload-time = "2025-06-15T19:06:12.197Z" }, - { url = "https://files.pythonhosted.org/packages/40/76/e4bec1d59b25b89d2b0716b41b461ed655a9a53c60dc78ad5771fda5b3e6/watchfiles-1.1.0-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7fd1b3879a578a8ec2076c7961076df540b9af317123f84569f5a9ddee64ce92", size = 477601, upload-time = "2025-06-15T19:06:13.391Z" }, - { url = "https://files.pythonhosted.org/packages/1f/fa/a514292956f4a9ce3c567ec0c13cce427c158e9f272062685a8a727d08fc/watchfiles-1.1.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:62cc7a30eeb0e20ecc5f4bd113cd69dcdb745a07c68c0370cea919f373f65d9e", size = 451936, upload-time = "2025-06-15T19:06:14.656Z" }, - { url = "https://files.pythonhosted.org/packages/32/5d/c3bf927ec3bbeb4566984eba8dd7a8eb69569400f5509904545576741f88/watchfiles-1.1.0-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:891c69e027748b4a73847335d208e374ce54ca3c335907d381fde4e41661b13b", size = 626243, upload-time = "2025-06-15T19:06:16.232Z" }, - { url = "https://files.pythonhosted.org/packages/e6/65/6e12c042f1a68c556802a84d54bb06d35577c81e29fba14019562479159c/watchfiles-1.1.0-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:12fe8eaffaf0faa7906895b4f8bb88264035b3f0243275e0bf24af0436b27259", size = 623073, upload-time = "2025-06-15T19:06:17.457Z" }, - { url = "https://files.pythonhosted.org/packages/89/ab/7f79d9bf57329e7cbb0a6fd4c7bd7d0cee1e4a8ef0041459f5409da3506c/watchfiles-1.1.0-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:bfe3c517c283e484843cb2e357dd57ba009cff351edf45fb455b5fbd1f45b15f", size = 400872, upload-time = "2025-06-15T19:06:18.57Z" }, - { url = "https://files.pythonhosted.org/packages/df/d5/3f7bf9912798e9e6c516094db6b8932df53b223660c781ee37607030b6d3/watchfiles-1.1.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:a9ccbf1f129480ed3044f540c0fdbc4ee556f7175e5ab40fe077ff6baf286d4e", size = 392877, upload-time = "2025-06-15T19:06:19.55Z" }, - { url = "https://files.pythonhosted.org/packages/0d/c5/54ec7601a2798604e01c75294770dbee8150e81c6e471445d7601610b495/watchfiles-1.1.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ba0e3255b0396cac3cc7bbace76404dd72b5438bf0d8e7cefa2f79a7f3649caa", size = 449645, upload-time = "2025-06-15T19:06:20.66Z" }, - { url = "https://files.pythonhosted.org/packages/0a/04/c2f44afc3b2fce21ca0b7802cbd37ed90a29874f96069ed30a36dfe57c2b/watchfiles-1.1.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4281cd9fce9fc0a9dbf0fc1217f39bf9cf2b4d315d9626ef1d4e87b84699e7e8", size = 457424, upload-time = "2025-06-15T19:06:21.712Z" }, - { url = "https://files.pythonhosted.org/packages/9f/b0/eec32cb6c14d248095261a04f290636da3df3119d4040ef91a4a50b29fa5/watchfiles-1.1.0-cp314-cp314t-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6d2404af8db1329f9a3c9b79ff63e0ae7131986446901582067d9304ae8aaf7f", size = 481584, upload-time = "2025-06-15T19:06:22.777Z" }, - { url = "https://files.pythonhosted.org/packages/d1/e2/ca4bb71c68a937d7145aa25709e4f5d68eb7698a25ce266e84b55d591bbd/watchfiles-1.1.0-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e78b6ed8165996013165eeabd875c5dfc19d41b54f94b40e9fff0eb3193e5e8e", size = 596675, upload-time = "2025-06-15T19:06:24.226Z" }, - { url = "https://files.pythonhosted.org/packages/a1/dd/b0e4b7fb5acf783816bc950180a6cd7c6c1d2cf7e9372c0ea634e722712b/watchfiles-1.1.0-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:249590eb75ccc117f488e2fabd1bfa33c580e24b96f00658ad88e38844a040bb", size = 477363, upload-time = "2025-06-15T19:06:25.42Z" }, - { url = "https://files.pythonhosted.org/packages/69/c4/088825b75489cb5b6a761a4542645718893d395d8c530b38734f19da44d2/watchfiles-1.1.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d05686b5487cfa2e2c28ff1aa370ea3e6c5accfe6435944ddea1e10d93872147", size = 452240, upload-time = "2025-06-15T19:06:26.552Z" }, - { url = "https://files.pythonhosted.org/packages/10/8c/22b074814970eeef43b7c44df98c3e9667c1f7bf5b83e0ff0201b0bd43f9/watchfiles-1.1.0-cp314-cp314t-musllinux_1_1_aarch64.whl", hash = "sha256:d0e10e6f8f6dc5762adee7dece33b722282e1f59aa6a55da5d493a97282fedd8", size = 625607, upload-time = "2025-06-15T19:06:27.606Z" }, - { url = "https://files.pythonhosted.org/packages/32/fa/a4f5c2046385492b2273213ef815bf71a0d4c1943b784fb904e184e30201/watchfiles-1.1.0-cp314-cp314t-musllinux_1_1_x86_64.whl", hash = "sha256:af06c863f152005c7592df1d6a7009c836a247c9d8adb78fef8575a5a98699db", size = 623315, upload-time = "2025-06-15T19:06:29.076Z" }, - { url = "https://files.pythonhosted.org/packages/8c/6b/686dcf5d3525ad17b384fd94708e95193529b460a1b7bf40851f1328ec6e/watchfiles-1.1.0-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:0ece16b563b17ab26eaa2d52230c9a7ae46cf01759621f4fbbca280e438267b3", size = 406910, upload-time = "2025-06-15T19:06:49.335Z" }, - { url = "https://files.pythonhosted.org/packages/f3/d3/71c2dcf81dc1edcf8af9f4d8d63b1316fb0a2dd90cbfd427e8d9dd584a90/watchfiles-1.1.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:51b81e55d40c4b4aa8658427a3ee7ea847c591ae9e8b81ef94a90b668999353c", size = 398816, upload-time = "2025-06-15T19:06:50.433Z" }, - { url = "https://files.pythonhosted.org/packages/b8/fa/12269467b2fc006f8fce4cd6c3acfa77491dd0777d2a747415f28ccc8c60/watchfiles-1.1.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f2bcdc54ea267fe72bfc7d83c041e4eb58d7d8dc6f578dfddb52f037ce62f432", size = 451584, upload-time = "2025-06-15T19:06:51.834Z" }, - { url = "https://files.pythonhosted.org/packages/bd/d3/254cea30f918f489db09d6a8435a7de7047f8cb68584477a515f160541d6/watchfiles-1.1.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:923fec6e5461c42bd7e3fd5ec37492c6f3468be0499bc0707b4bbbc16ac21792", size = 454009, upload-time = "2025-06-15T19:06:52.896Z" }, -] - -[[package]] -name = "wcwidth" -version = "0.2.13" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/6c/63/53559446a878410fc5a5974feb13d31d78d752eb18aeba59c7fef1af7598/wcwidth-0.2.13.tar.gz", hash = "sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5", size = 101301, upload-time = "2024-01-06T02:10:57.829Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/fd/84/fd2ba7aafacbad3c4201d395674fc6348826569da3c0937e75505ead3528/wcwidth-0.2.13-py2.py3-none-any.whl", hash = "sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859", size = 34166, upload-time = "2024-01-06T02:10:55.763Z" }, -] - -[[package]] -name = "websockets" -version = "15.0.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/21/e6/26d09fab466b7ca9c7737474c52be4f76a40301b08362eb2dbc19dcc16c1/websockets-15.0.1.tar.gz", hash = "sha256:82544de02076bafba038ce055ee6412d68da13ab47f0c60cab827346de828dee", size = 177016, upload-time = "2025-03-05T20:03:41.606Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/9f/32/18fcd5919c293a398db67443acd33fde142f283853076049824fc58e6f75/websockets-15.0.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:823c248b690b2fd9303ba00c4f66cd5e2d8c3ba4aa968b2779be9532a4dad431", size = 175423, upload-time = "2025-03-05T20:01:56.276Z" }, - { url = "https://files.pythonhosted.org/packages/76/70/ba1ad96b07869275ef42e2ce21f07a5b0148936688c2baf7e4a1f60d5058/websockets-15.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:678999709e68425ae2593acf2e3ebcbcf2e69885a5ee78f9eb80e6e371f1bf57", size = 173082, upload-time = "2025-03-05T20:01:57.563Z" }, - { url = "https://files.pythonhosted.org/packages/86/f2/10b55821dd40eb696ce4704a87d57774696f9451108cff0d2824c97e0f97/websockets-15.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d50fd1ee42388dcfb2b3676132c78116490976f1300da28eb629272d5d93e905", size = 173330, upload-time = "2025-03-05T20:01:59.063Z" }, - { url = "https://files.pythonhosted.org/packages/a5/90/1c37ae8b8a113d3daf1065222b6af61cc44102da95388ac0018fcb7d93d9/websockets-15.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d99e5546bf73dbad5bf3547174cd6cb8ba7273062a23808ffea025ecb1cf8562", size = 182878, upload-time = "2025-03-05T20:02:00.305Z" }, - { url = "https://files.pythonhosted.org/packages/8e/8d/96e8e288b2a41dffafb78e8904ea7367ee4f891dafc2ab8d87e2124cb3d3/websockets-15.0.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:66dd88c918e3287efc22409d426c8f729688d89a0c587c88971a0faa2c2f3792", size = 181883, upload-time = "2025-03-05T20:02:03.148Z" }, - { url = "https://files.pythonhosted.org/packages/93/1f/5d6dbf551766308f6f50f8baf8e9860be6182911e8106da7a7f73785f4c4/websockets-15.0.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8dd8327c795b3e3f219760fa603dcae1dcc148172290a8ab15158cf85a953413", size = 182252, upload-time = "2025-03-05T20:02:05.29Z" }, - { url = "https://files.pythonhosted.org/packages/d4/78/2d4fed9123e6620cbf1706c0de8a1632e1a28e7774d94346d7de1bba2ca3/websockets-15.0.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8fdc51055e6ff4adeb88d58a11042ec9a5eae317a0a53d12c062c8a8865909e8", size = 182521, upload-time = "2025-03-05T20:02:07.458Z" }, - { url = "https://files.pythonhosted.org/packages/e7/3b/66d4c1b444dd1a9823c4a81f50231b921bab54eee2f69e70319b4e21f1ca/websockets-15.0.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:693f0192126df6c2327cce3baa7c06f2a117575e32ab2308f7f8216c29d9e2e3", size = 181958, upload-time = "2025-03-05T20:02:09.842Z" }, - { url = "https://files.pythonhosted.org/packages/08/ff/e9eed2ee5fed6f76fdd6032ca5cd38c57ca9661430bb3d5fb2872dc8703c/websockets-15.0.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:54479983bd5fb469c38f2f5c7e3a24f9a4e70594cd68cd1fa6b9340dadaff7cf", size = 181918, upload-time = "2025-03-05T20:02:11.968Z" }, - { url = "https://files.pythonhosted.org/packages/d8/75/994634a49b7e12532be6a42103597b71098fd25900f7437d6055ed39930a/websockets-15.0.1-cp311-cp311-win32.whl", hash = "sha256:16b6c1b3e57799b9d38427dda63edcbe4926352c47cf88588c0be4ace18dac85", size = 176388, upload-time = "2025-03-05T20:02:13.32Z" }, - { url = "https://files.pythonhosted.org/packages/98/93/e36c73f78400a65f5e236cd376713c34182e6663f6889cd45a4a04d8f203/websockets-15.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:27ccee0071a0e75d22cb35849b1db43f2ecd3e161041ac1ee9d2352ddf72f065", size = 176828, upload-time = "2025-03-05T20:02:14.585Z" }, - { url = "https://files.pythonhosted.org/packages/51/6b/4545a0d843594f5d0771e86463606a3988b5a09ca5123136f8a76580dd63/websockets-15.0.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:3e90baa811a5d73f3ca0bcbf32064d663ed81318ab225ee4f427ad4e26e5aff3", size = 175437, upload-time = "2025-03-05T20:02:16.706Z" }, - { url = "https://files.pythonhosted.org/packages/f4/71/809a0f5f6a06522af902e0f2ea2757f71ead94610010cf570ab5c98e99ed/websockets-15.0.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:592f1a9fe869c778694f0aa806ba0374e97648ab57936f092fd9d87f8bc03665", size = 173096, upload-time = "2025-03-05T20:02:18.832Z" }, - { url = "https://files.pythonhosted.org/packages/3d/69/1a681dd6f02180916f116894181eab8b2e25b31e484c5d0eae637ec01f7c/websockets-15.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0701bc3cfcb9164d04a14b149fd74be7347a530ad3bbf15ab2c678a2cd3dd9a2", size = 173332, upload-time = "2025-03-05T20:02:20.187Z" }, - { url = "https://files.pythonhosted.org/packages/a6/02/0073b3952f5bce97eafbb35757f8d0d54812b6174ed8dd952aa08429bcc3/websockets-15.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8b56bdcdb4505c8078cb6c7157d9811a85790f2f2b3632c7d1462ab5783d215", size = 183152, upload-time = "2025-03-05T20:02:22.286Z" }, - { url = "https://files.pythonhosted.org/packages/74/45/c205c8480eafd114b428284840da0b1be9ffd0e4f87338dc95dc6ff961a1/websockets-15.0.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0af68c55afbd5f07986df82831c7bff04846928ea8d1fd7f30052638788bc9b5", size = 182096, upload-time = "2025-03-05T20:02:24.368Z" }, - { url = "https://files.pythonhosted.org/packages/14/8f/aa61f528fba38578ec553c145857a181384c72b98156f858ca5c8e82d9d3/websockets-15.0.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:64dee438fed052b52e4f98f76c5790513235efaa1ef7f3f2192c392cd7c91b65", size = 182523, upload-time = "2025-03-05T20:02:25.669Z" }, - { url = "https://files.pythonhosted.org/packages/ec/6d/0267396610add5bc0d0d3e77f546d4cd287200804fe02323797de77dbce9/websockets-15.0.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d5f6b181bb38171a8ad1d6aa58a67a6aa9d4b38d0f8c5f496b9e42561dfc62fe", size = 182790, upload-time = "2025-03-05T20:02:26.99Z" }, - { url = "https://files.pythonhosted.org/packages/02/05/c68c5adbf679cf610ae2f74a9b871ae84564462955d991178f95a1ddb7dd/websockets-15.0.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:5d54b09eba2bada6011aea5375542a157637b91029687eb4fdb2dab11059c1b4", size = 182165, upload-time = "2025-03-05T20:02:30.291Z" }, - { url = "https://files.pythonhosted.org/packages/29/93/bb672df7b2f5faac89761cb5fa34f5cec45a4026c383a4b5761c6cea5c16/websockets-15.0.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3be571a8b5afed347da347bfcf27ba12b069d9d7f42cb8c7028b5e98bbb12597", size = 182160, upload-time = "2025-03-05T20:02:31.634Z" }, - { url = "https://files.pythonhosted.org/packages/ff/83/de1f7709376dc3ca9b7eeb4b9a07b4526b14876b6d372a4dc62312bebee0/websockets-15.0.1-cp312-cp312-win32.whl", hash = "sha256:c338ffa0520bdb12fbc527265235639fb76e7bc7faafbb93f6ba80d9c06578a9", size = 176395, upload-time = "2025-03-05T20:02:33.017Z" }, - { url = "https://files.pythonhosted.org/packages/7d/71/abf2ebc3bbfa40f391ce1428c7168fb20582d0ff57019b69ea20fa698043/websockets-15.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:fcd5cf9e305d7b8338754470cf69cf81f420459dbae8a3b40cee57417f4614a7", size = 176841, upload-time = "2025-03-05T20:02:34.498Z" }, - { url = "https://files.pythonhosted.org/packages/cb/9f/51f0cf64471a9d2b4d0fc6c534f323b664e7095640c34562f5182e5a7195/websockets-15.0.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ee443ef070bb3b6ed74514f5efaa37a252af57c90eb33b956d35c8e9c10a1931", size = 175440, upload-time = "2025-03-05T20:02:36.695Z" }, - { url = "https://files.pythonhosted.org/packages/8a/05/aa116ec9943c718905997412c5989f7ed671bc0188ee2ba89520e8765d7b/websockets-15.0.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:5a939de6b7b4e18ca683218320fc67ea886038265fd1ed30173f5ce3f8e85675", size = 173098, upload-time = "2025-03-05T20:02:37.985Z" }, - { url = "https://files.pythonhosted.org/packages/ff/0b/33cef55ff24f2d92924923c99926dcce78e7bd922d649467f0eda8368923/websockets-15.0.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:746ee8dba912cd6fc889a8147168991d50ed70447bf18bcda7039f7d2e3d9151", size = 173329, upload-time = "2025-03-05T20:02:39.298Z" }, - { url = "https://files.pythonhosted.org/packages/31/1d/063b25dcc01faa8fada1469bdf769de3768b7044eac9d41f734fd7b6ad6d/websockets-15.0.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:595b6c3969023ecf9041b2936ac3827e4623bfa3ccf007575f04c5a6aa318c22", size = 183111, upload-time = "2025-03-05T20:02:40.595Z" }, - { url = "https://files.pythonhosted.org/packages/93/53/9a87ee494a51bf63e4ec9241c1ccc4f7c2f45fff85d5bde2ff74fcb68b9e/websockets-15.0.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3c714d2fc58b5ca3e285461a4cc0c9a66bd0e24c5da9911e30158286c9b5be7f", size = 182054, upload-time = "2025-03-05T20:02:41.926Z" }, - { url = "https://files.pythonhosted.org/packages/ff/b2/83a6ddf56cdcbad4e3d841fcc55d6ba7d19aeb89c50f24dd7e859ec0805f/websockets-15.0.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0f3c1e2ab208db911594ae5b4f79addeb3501604a165019dd221c0bdcabe4db8", size = 182496, upload-time = "2025-03-05T20:02:43.304Z" }, - { url = "https://files.pythonhosted.org/packages/98/41/e7038944ed0abf34c45aa4635ba28136f06052e08fc2168520bb8b25149f/websockets-15.0.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:229cf1d3ca6c1804400b0a9790dc66528e08a6a1feec0d5040e8b9eb14422375", size = 182829, upload-time = "2025-03-05T20:02:48.812Z" }, - { url = "https://files.pythonhosted.org/packages/e0/17/de15b6158680c7623c6ef0db361da965ab25d813ae54fcfeae2e5b9ef910/websockets-15.0.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:756c56e867a90fb00177d530dca4b097dd753cde348448a1012ed6c5131f8b7d", size = 182217, upload-time = "2025-03-05T20:02:50.14Z" }, - { url = "https://files.pythonhosted.org/packages/33/2b/1f168cb6041853eef0362fb9554c3824367c5560cbdaad89ac40f8c2edfc/websockets-15.0.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:558d023b3df0bffe50a04e710bc87742de35060580a293c2a984299ed83bc4e4", size = 182195, upload-time = "2025-03-05T20:02:51.561Z" }, - { url = "https://files.pythonhosted.org/packages/86/eb/20b6cdf273913d0ad05a6a14aed4b9a85591c18a987a3d47f20fa13dcc47/websockets-15.0.1-cp313-cp313-win32.whl", hash = "sha256:ba9e56e8ceeeedb2e080147ba85ffcd5cd0711b89576b83784d8605a7df455fa", size = 176393, upload-time = "2025-03-05T20:02:53.814Z" }, - { url = "https://files.pythonhosted.org/packages/1b/6c/c65773d6cab416a64d191d6ee8a8b1c68a09970ea6909d16965d26bfed1e/websockets-15.0.1-cp313-cp313-win_amd64.whl", hash = "sha256:e09473f095a819042ecb2ab9465aee615bd9c2028e4ef7d933600a8401c79561", size = 176837, upload-time = "2025-03-05T20:02:55.237Z" }, - { url = "https://files.pythonhosted.org/packages/fa/a8/5b41e0da817d64113292ab1f8247140aac61cbf6cfd085d6a0fa77f4984f/websockets-15.0.1-py3-none-any.whl", hash = "sha256:f7a866fbc1e97b5c617ee4116daaa09b722101d4a3c170c787450ba409f9736f", size = 169743, upload-time = "2025-03-05T20:03:39.41Z" }, -] - -[[package]] -name = "werkzeug" -version = "3.1.3" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "markupsafe" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/9f/69/83029f1f6300c5fb2471d621ab06f6ec6b3324685a2ce0f9777fd4a8b71e/werkzeug-3.1.3.tar.gz", hash = "sha256:60723ce945c19328679790e3282cc758aa4a6040e4bb330f53d30fa546d44746", size = 806925, upload-time = "2024-11-08T15:52:18.093Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/52/24/ab44c871b0f07f491e5d2ad12c9bd7358e527510618cb1b803a88e986db1/werkzeug-3.1.3-py3-none-any.whl", hash = "sha256:54b78bf3716d19a65be4fceccc0d1d7b89e608834989dfae50ea87564639213e", size = 224498, upload-time = "2024-11-08T15:52:16.132Z" }, -] - -[[package]] -name = "wrapt" -version = "1.17.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/c3/fc/e91cc220803d7bc4db93fb02facd8461c37364151b8494762cc88b0fbcef/wrapt-1.17.2.tar.gz", hash = "sha256:41388e9d4d1522446fe79d3213196bd9e3b301a336965b9e27ca2788ebd122f3", size = 55531, upload-time = "2025-01-14T10:35:45.465Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/cd/f7/a2aab2cbc7a665efab072344a8949a71081eed1d2f451f7f7d2b966594a2/wrapt-1.17.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ff04ef6eec3eee8a5efef2401495967a916feaa353643defcc03fc74fe213b58", size = 53308, upload-time = "2025-01-14T10:33:33.992Z" }, - { url = "https://files.pythonhosted.org/packages/50/ff/149aba8365fdacef52b31a258c4dc1c57c79759c335eff0b3316a2664a64/wrapt-1.17.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4db983e7bca53819efdbd64590ee96c9213894272c776966ca6306b73e4affda", size = 38488, upload-time = "2025-01-14T10:33:35.264Z" }, - { url = "https://files.pythonhosted.org/packages/65/46/5a917ce85b5c3b490d35c02bf71aedaa9f2f63f2d15d9949cc4ba56e8ba9/wrapt-1.17.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9abc77a4ce4c6f2a3168ff34b1da9b0f311a8f1cfd694ec96b0603dff1c79438", size = 38776, upload-time = "2025-01-14T10:33:38.28Z" }, - { url = "https://files.pythonhosted.org/packages/ca/74/336c918d2915a4943501c77566db41d1bd6e9f4dbc317f356b9a244dfe83/wrapt-1.17.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0b929ac182f5ace000d459c59c2c9c33047e20e935f8e39371fa6e3b85d56f4a", size = 83776, upload-time = "2025-01-14T10:33:40.678Z" }, - { url = "https://files.pythonhosted.org/packages/09/99/c0c844a5ccde0fe5761d4305485297f91d67cf2a1a824c5f282e661ec7ff/wrapt-1.17.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f09b286faeff3c750a879d336fb6d8713206fc97af3adc14def0cdd349df6000", size = 75420, upload-time = "2025-01-14T10:33:41.868Z" }, - { url = "https://files.pythonhosted.org/packages/b4/b0/9fc566b0fe08b282c850063591a756057c3247b2362b9286429ec5bf1721/wrapt-1.17.2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1a7ed2d9d039bd41e889f6fb9364554052ca21ce823580f6a07c4ec245c1f5d6", size = 83199, upload-time = "2025-01-14T10:33:43.598Z" }, - { url = "https://files.pythonhosted.org/packages/9d/4b/71996e62d543b0a0bd95dda485219856def3347e3e9380cc0d6cf10cfb2f/wrapt-1.17.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:129a150f5c445165ff941fc02ee27df65940fcb8a22a61828b1853c98763a64b", size = 82307, upload-time = "2025-01-14T10:33:48.499Z" }, - { url = "https://files.pythonhosted.org/packages/39/35/0282c0d8789c0dc9bcc738911776c762a701f95cfe113fb8f0b40e45c2b9/wrapt-1.17.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:1fb5699e4464afe5c7e65fa51d4f99e0b2eadcc176e4aa33600a3df7801d6662", size = 75025, upload-time = "2025-01-14T10:33:51.191Z" }, - { url = "https://files.pythonhosted.org/packages/4f/6d/90c9fd2c3c6fee181feecb620d95105370198b6b98a0770cba090441a828/wrapt-1.17.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9a2bce789a5ea90e51a02dfcc39e31b7f1e662bc3317979aa7e5538e3a034f72", size = 81879, upload-time = "2025-01-14T10:33:52.328Z" }, - { url = "https://files.pythonhosted.org/packages/8f/fa/9fb6e594f2ce03ef03eddbdb5f4f90acb1452221a5351116c7c4708ac865/wrapt-1.17.2-cp311-cp311-win32.whl", hash = "sha256:4afd5814270fdf6380616b321fd31435a462019d834f83c8611a0ce7484c7317", size = 36419, upload-time = "2025-01-14T10:33:53.551Z" }, - { url = "https://files.pythonhosted.org/packages/47/f8/fb1773491a253cbc123c5d5dc15c86041f746ed30416535f2a8df1f4a392/wrapt-1.17.2-cp311-cp311-win_amd64.whl", hash = "sha256:acc130bc0375999da18e3d19e5a86403667ac0c4042a094fefb7eec8ebac7cf3", size = 38773, upload-time = "2025-01-14T10:33:56.323Z" }, - { url = "https://files.pythonhosted.org/packages/a1/bd/ab55f849fd1f9a58ed7ea47f5559ff09741b25f00c191231f9f059c83949/wrapt-1.17.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:d5e2439eecc762cd85e7bd37161d4714aa03a33c5ba884e26c81559817ca0925", size = 53799, upload-time = "2025-01-14T10:33:57.4Z" }, - { url = "https://files.pythonhosted.org/packages/53/18/75ddc64c3f63988f5a1d7e10fb204ffe5762bc663f8023f18ecaf31a332e/wrapt-1.17.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:3fc7cb4c1c744f8c05cd5f9438a3caa6ab94ce8344e952d7c45a8ed59dd88392", size = 38821, upload-time = "2025-01-14T10:33:59.334Z" }, - { url = "https://files.pythonhosted.org/packages/48/2a/97928387d6ed1c1ebbfd4efc4133a0633546bec8481a2dd5ec961313a1c7/wrapt-1.17.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8fdbdb757d5390f7c675e558fd3186d590973244fab0c5fe63d373ade3e99d40", size = 38919, upload-time = "2025-01-14T10:34:04.093Z" }, - { url = "https://files.pythonhosted.org/packages/73/54/3bfe5a1febbbccb7a2f77de47b989c0b85ed3a6a41614b104204a788c20e/wrapt-1.17.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5bb1d0dbf99411f3d871deb6faa9aabb9d4e744d67dcaaa05399af89d847a91d", size = 88721, upload-time = "2025-01-14T10:34:07.163Z" }, - { url = "https://files.pythonhosted.org/packages/25/cb/7262bc1b0300b4b64af50c2720ef958c2c1917525238d661c3e9a2b71b7b/wrapt-1.17.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d18a4865f46b8579d44e4fe1e2bcbc6472ad83d98e22a26c963d46e4c125ef0b", size = 80899, upload-time = "2025-01-14T10:34:09.82Z" }, - { url = "https://files.pythonhosted.org/packages/2a/5a/04cde32b07a7431d4ed0553a76fdb7a61270e78c5fd5a603e190ac389f14/wrapt-1.17.2-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc570b5f14a79734437cb7b0500376b6b791153314986074486e0b0fa8d71d98", size = 89222, upload-time = "2025-01-14T10:34:11.258Z" }, - { url = "https://files.pythonhosted.org/packages/09/28/2e45a4f4771fcfb109e244d5dbe54259e970362a311b67a965555ba65026/wrapt-1.17.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6d9187b01bebc3875bac9b087948a2bccefe464a7d8f627cf6e48b1bbae30f82", size = 86707, upload-time = "2025-01-14T10:34:12.49Z" }, - { url = "https://files.pythonhosted.org/packages/c6/d2/dcb56bf5f32fcd4bd9aacc77b50a539abdd5b6536872413fd3f428b21bed/wrapt-1.17.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:9e8659775f1adf02eb1e6f109751268e493c73716ca5761f8acb695e52a756ae", size = 79685, upload-time = "2025-01-14T10:34:15.043Z" }, - { url = "https://files.pythonhosted.org/packages/80/4e/eb8b353e36711347893f502ce91c770b0b0929f8f0bed2670a6856e667a9/wrapt-1.17.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e8b2816ebef96d83657b56306152a93909a83f23994f4b30ad4573b00bd11bb9", size = 87567, upload-time = "2025-01-14T10:34:16.563Z" }, - { url = "https://files.pythonhosted.org/packages/17/27/4fe749a54e7fae6e7146f1c7d914d28ef599dacd4416566c055564080fe2/wrapt-1.17.2-cp312-cp312-win32.whl", hash = "sha256:468090021f391fe0056ad3e807e3d9034e0fd01adcd3bdfba977b6fdf4213ea9", size = 36672, upload-time = "2025-01-14T10:34:17.727Z" }, - { url = "https://files.pythonhosted.org/packages/15/06/1dbf478ea45c03e78a6a8c4be4fdc3c3bddea5c8de8a93bc971415e47f0f/wrapt-1.17.2-cp312-cp312-win_amd64.whl", hash = "sha256:ec89ed91f2fa8e3f52ae53cd3cf640d6feff92ba90d62236a81e4e563ac0e991", size = 38865, upload-time = "2025-01-14T10:34:19.577Z" }, - { url = "https://files.pythonhosted.org/packages/ce/b9/0ffd557a92f3b11d4c5d5e0c5e4ad057bd9eb8586615cdaf901409920b14/wrapt-1.17.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:6ed6ffac43aecfe6d86ec5b74b06a5be33d5bb9243d055141e8cabb12aa08125", size = 53800, upload-time = "2025-01-14T10:34:21.571Z" }, - { url = "https://files.pythonhosted.org/packages/c0/ef/8be90a0b7e73c32e550c73cfb2fa09db62234227ece47b0e80a05073b375/wrapt-1.17.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:35621ae4c00e056adb0009f8e86e28eb4a41a4bfa8f9bfa9fca7d343fe94f998", size = 38824, upload-time = "2025-01-14T10:34:22.999Z" }, - { url = "https://files.pythonhosted.org/packages/36/89/0aae34c10fe524cce30fe5fc433210376bce94cf74d05b0d68344c8ba46e/wrapt-1.17.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a604bf7a053f8362d27eb9fefd2097f82600b856d5abe996d623babd067b1ab5", size = 38920, upload-time = "2025-01-14T10:34:25.386Z" }, - { url = "https://files.pythonhosted.org/packages/3b/24/11c4510de906d77e0cfb5197f1b1445d4fec42c9a39ea853d482698ac681/wrapt-1.17.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5cbabee4f083b6b4cd282f5b817a867cf0b1028c54d445b7ec7cfe6505057cf8", size = 88690, upload-time = "2025-01-14T10:34:28.058Z" }, - { url = "https://files.pythonhosted.org/packages/71/d7/cfcf842291267bf455b3e266c0c29dcb675b5540ee8b50ba1699abf3af45/wrapt-1.17.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:49703ce2ddc220df165bd2962f8e03b84c89fee2d65e1c24a7defff6f988f4d6", size = 80861, upload-time = "2025-01-14T10:34:29.167Z" }, - { url = "https://files.pythonhosted.org/packages/d5/66/5d973e9f3e7370fd686fb47a9af3319418ed925c27d72ce16b791231576d/wrapt-1.17.2-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8112e52c5822fc4253f3901b676c55ddf288614dc7011634e2719718eaa187dc", size = 89174, upload-time = "2025-01-14T10:34:31.702Z" }, - { url = "https://files.pythonhosted.org/packages/a7/d3/8e17bb70f6ae25dabc1aaf990f86824e4fd98ee9cadf197054e068500d27/wrapt-1.17.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:9fee687dce376205d9a494e9c121e27183b2a3df18037f89d69bd7b35bcf59e2", size = 86721, upload-time = "2025-01-14T10:34:32.91Z" }, - { url = "https://files.pythonhosted.org/packages/6f/54/f170dfb278fe1c30d0ff864513cff526d624ab8de3254b20abb9cffedc24/wrapt-1.17.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:18983c537e04d11cf027fbb60a1e8dfd5190e2b60cc27bc0808e653e7b218d1b", size = 79763, upload-time = "2025-01-14T10:34:34.903Z" }, - { url = "https://files.pythonhosted.org/packages/4a/98/de07243751f1c4a9b15c76019250210dd3486ce098c3d80d5f729cba029c/wrapt-1.17.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:703919b1633412ab54bcf920ab388735832fdcb9f9a00ae49387f0fe67dad504", size = 87585, upload-time = "2025-01-14T10:34:36.13Z" }, - { url = "https://files.pythonhosted.org/packages/f9/f0/13925f4bd6548013038cdeb11ee2cbd4e37c30f8bfd5db9e5a2a370d6e20/wrapt-1.17.2-cp313-cp313-win32.whl", hash = "sha256:abbb9e76177c35d4e8568e58650aa6926040d6a9f6f03435b7a522bf1c487f9a", size = 36676, upload-time = "2025-01-14T10:34:37.962Z" }, - { url = "https://files.pythonhosted.org/packages/bf/ae/743f16ef8c2e3628df3ddfd652b7d4c555d12c84b53f3d8218498f4ade9b/wrapt-1.17.2-cp313-cp313-win_amd64.whl", hash = "sha256:69606d7bb691b50a4240ce6b22ebb319c1cfb164e5f6569835058196e0f3a845", size = 38871, upload-time = "2025-01-14T10:34:39.13Z" }, - { url = "https://files.pythonhosted.org/packages/3d/bc/30f903f891a82d402ffb5fda27ec1d621cc97cb74c16fea0b6141f1d4e87/wrapt-1.17.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:4a721d3c943dae44f8e243b380cb645a709ba5bd35d3ad27bc2ed947e9c68192", size = 56312, upload-time = "2025-01-14T10:34:40.604Z" }, - { url = "https://files.pythonhosted.org/packages/8a/04/c97273eb491b5f1c918857cd26f314b74fc9b29224521f5b83f872253725/wrapt-1.17.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:766d8bbefcb9e00c3ac3b000d9acc51f1b399513f44d77dfe0eb026ad7c9a19b", size = 40062, upload-time = "2025-01-14T10:34:45.011Z" }, - { url = "https://files.pythonhosted.org/packages/4e/ca/3b7afa1eae3a9e7fefe499db9b96813f41828b9fdb016ee836c4c379dadb/wrapt-1.17.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:e496a8ce2c256da1eb98bd15803a79bee00fc351f5dfb9ea82594a3f058309e0", size = 40155, upload-time = "2025-01-14T10:34:47.25Z" }, - { url = "https://files.pythonhosted.org/packages/89/be/7c1baed43290775cb9030c774bc53c860db140397047cc49aedaf0a15477/wrapt-1.17.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40d615e4fe22f4ad3528448c193b218e077656ca9ccb22ce2cb20db730f8d306", size = 113471, upload-time = "2025-01-14T10:34:50.934Z" }, - { url = "https://files.pythonhosted.org/packages/32/98/4ed894cf012b6d6aae5f5cc974006bdeb92f0241775addad3f8cd6ab71c8/wrapt-1.17.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a5aaeff38654462bc4b09023918b7f21790efb807f54c000a39d41d69cf552cb", size = 101208, upload-time = "2025-01-14T10:34:52.297Z" }, - { url = "https://files.pythonhosted.org/packages/ea/fd/0c30f2301ca94e655e5e057012e83284ce8c545df7661a78d8bfca2fac7a/wrapt-1.17.2-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9a7d15bbd2bc99e92e39f49a04653062ee6085c0e18b3b7512a4f2fe91f2d681", size = 109339, upload-time = "2025-01-14T10:34:53.489Z" }, - { url = "https://files.pythonhosted.org/packages/75/56/05d000de894c4cfcb84bcd6b1df6214297b8089a7bd324c21a4765e49b14/wrapt-1.17.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:e3890b508a23299083e065f435a492b5435eba6e304a7114d2f919d400888cc6", size = 110232, upload-time = "2025-01-14T10:34:55.327Z" }, - { url = "https://files.pythonhosted.org/packages/53/f8/c3f6b2cf9b9277fb0813418e1503e68414cd036b3b099c823379c9575e6d/wrapt-1.17.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:8c8b293cd65ad716d13d8dd3624e42e5a19cc2a2f1acc74b30c2c13f15cb61a6", size = 100476, upload-time = "2025-01-14T10:34:58.055Z" }, - { url = "https://files.pythonhosted.org/packages/a7/b1/0bb11e29aa5139d90b770ebbfa167267b1fc548d2302c30c8f7572851738/wrapt-1.17.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:4c82b8785d98cdd9fed4cac84d765d234ed3251bd6afe34cb7ac523cb93e8b4f", size = 106377, upload-time = "2025-01-14T10:34:59.3Z" }, - { url = "https://files.pythonhosted.org/packages/6a/e1/0122853035b40b3f333bbb25f1939fc1045e21dd518f7f0922b60c156f7c/wrapt-1.17.2-cp313-cp313t-win32.whl", hash = "sha256:13e6afb7fe71fe7485a4550a8844cc9ffbe263c0f1a1eea569bc7091d4898555", size = 37986, upload-time = "2025-01-14T10:35:00.498Z" }, - { url = "https://files.pythonhosted.org/packages/09/5e/1655cf481e079c1f22d0cabdd4e51733679932718dc23bf2db175f329b76/wrapt-1.17.2-cp313-cp313t-win_amd64.whl", hash = "sha256:eaf675418ed6b3b31c7a989fd007fa7c3be66ce14e5c3b27336383604c9da85c", size = 40750, upload-time = "2025-01-14T10:35:03.378Z" }, - { url = "https://files.pythonhosted.org/packages/2d/82/f56956041adef78f849db6b289b282e72b55ab8045a75abad81898c28d19/wrapt-1.17.2-py3-none-any.whl", hash = "sha256:b18f2d1533a71f069c7f82d524a52599053d4c7166e9dd374ae2136b7f40f7c8", size = 23594, upload-time = "2025-01-14T10:35:44.018Z" }, -] - -[[package]] -name = "xmltodict" -version = "0.14.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/50/05/51dcca9a9bf5e1bce52582683ce50980bcadbc4fa5143b9f2b19ab99958f/xmltodict-0.14.2.tar.gz", hash = "sha256:201e7c28bb210e374999d1dde6382923ab0ed1a8a5faeece48ab525b7810a553", size = 51942, upload-time = "2024-10-16T06:10:29.683Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/d6/45/fc303eb433e8a2a271739c98e953728422fa61a3c1f36077a49e395c972e/xmltodict-0.14.2-py2.py3-none-any.whl", hash = "sha256:20cc7d723ed729276e808f26fb6b3599f786cbc37e06c65e192ba77c40f20aac", size = 9981, upload-time = "2024-10-16T06:10:27.649Z" }, -] - -[[package]] -name = "yarl" -version = "1.20.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "idna" }, - { name = "multidict" }, - { name = "propcache" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/3c/fb/efaa23fa4e45537b827620f04cf8f3cd658b76642205162e072703a5b963/yarl-1.20.1.tar.gz", hash = "sha256:d017a4997ee50c91fd5466cef416231bb82177b93b029906cefc542ce14c35ac", size = 186428, upload-time = "2025-06-10T00:46:09.923Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/b1/18/893b50efc2350e47a874c5c2d67e55a0ea5df91186b2a6f5ac52eff887cd/yarl-1.20.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:47ee6188fea634bdfaeb2cc420f5b3b17332e6225ce88149a17c413c77ff269e", size = 133833, upload-time = "2025-06-10T00:43:07.393Z" }, - { url = "https://files.pythonhosted.org/packages/89/ed/b8773448030e6fc47fa797f099ab9eab151a43a25717f9ac043844ad5ea3/yarl-1.20.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d0f6500f69e8402d513e5eedb77a4e1818691e8f45e6b687147963514d84b44b", size = 91070, upload-time = "2025-06-10T00:43:09.538Z" }, - { url = "https://files.pythonhosted.org/packages/e3/e3/409bd17b1e42619bf69f60e4f031ce1ccb29bd7380117a55529e76933464/yarl-1.20.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7a8900a42fcdaad568de58887c7b2f602962356908eedb7628eaf6021a6e435b", size = 89818, upload-time = "2025-06-10T00:43:11.575Z" }, - { url = "https://files.pythonhosted.org/packages/f8/77/64d8431a4d77c856eb2d82aa3de2ad6741365245a29b3a9543cd598ed8c5/yarl-1.20.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bad6d131fda8ef508b36be3ece16d0902e80b88ea7200f030a0f6c11d9e508d4", size = 347003, upload-time = "2025-06-10T00:43:14.088Z" }, - { url = "https://files.pythonhosted.org/packages/8d/d2/0c7e4def093dcef0bd9fa22d4d24b023788b0a33b8d0088b51aa51e21e99/yarl-1.20.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:df018d92fe22aaebb679a7f89fe0c0f368ec497e3dda6cb81a567610f04501f1", size = 336537, upload-time = "2025-06-10T00:43:16.431Z" }, - { url = "https://files.pythonhosted.org/packages/f0/f3/fc514f4b2cf02cb59d10cbfe228691d25929ce8f72a38db07d3febc3f706/yarl-1.20.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8f969afbb0a9b63c18d0feecf0db09d164b7a44a053e78a7d05f5df163e43833", size = 362358, upload-time = "2025-06-10T00:43:18.704Z" }, - { url = "https://files.pythonhosted.org/packages/ea/6d/a313ac8d8391381ff9006ac05f1d4331cee3b1efaa833a53d12253733255/yarl-1.20.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:812303eb4aa98e302886ccda58d6b099e3576b1b9276161469c25803a8db277d", size = 357362, upload-time = "2025-06-10T00:43:20.888Z" }, - { url = "https://files.pythonhosted.org/packages/00/70/8f78a95d6935a70263d46caa3dd18e1f223cf2f2ff2037baa01a22bc5b22/yarl-1.20.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:98c4a7d166635147924aa0bf9bfe8d8abad6fffa6102de9c99ea04a1376f91e8", size = 348979, upload-time = "2025-06-10T00:43:23.169Z" }, - { url = "https://files.pythonhosted.org/packages/cb/05/42773027968968f4f15143553970ee36ead27038d627f457cc44bbbeecf3/yarl-1.20.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:12e768f966538e81e6e7550f9086a6236b16e26cd964cf4df35349970f3551cf", size = 337274, upload-time = "2025-06-10T00:43:27.111Z" }, - { url = "https://files.pythonhosted.org/packages/05/be/665634aa196954156741ea591d2f946f1b78ceee8bb8f28488bf28c0dd62/yarl-1.20.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:fe41919b9d899661c5c28a8b4b0acf704510b88f27f0934ac7a7bebdd8938d5e", size = 363294, upload-time = "2025-06-10T00:43:28.96Z" }, - { url = "https://files.pythonhosted.org/packages/eb/90/73448401d36fa4e210ece5579895731f190d5119c4b66b43b52182e88cd5/yarl-1.20.1-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:8601bc010d1d7780592f3fc1bdc6c72e2b6466ea34569778422943e1a1f3c389", size = 358169, upload-time = "2025-06-10T00:43:30.701Z" }, - { url = "https://files.pythonhosted.org/packages/c3/b0/fce922d46dc1eb43c811f1889f7daa6001b27a4005587e94878570300881/yarl-1.20.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:daadbdc1f2a9033a2399c42646fbd46da7992e868a5fe9513860122d7fe7a73f", size = 362776, upload-time = "2025-06-10T00:43:32.51Z" }, - { url = "https://files.pythonhosted.org/packages/f1/0d/b172628fce039dae8977fd22caeff3eeebffd52e86060413f5673767c427/yarl-1.20.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:03aa1e041727cb438ca762628109ef1333498b122e4c76dd858d186a37cec845", size = 381341, upload-time = "2025-06-10T00:43:34.543Z" }, - { url = "https://files.pythonhosted.org/packages/6b/9b/5b886d7671f4580209e855974fe1cecec409aa4a89ea58b8f0560dc529b1/yarl-1.20.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:642980ef5e0fa1de5fa96d905c7e00cb2c47cb468bfcac5a18c58e27dbf8d8d1", size = 379988, upload-time = "2025-06-10T00:43:36.489Z" }, - { url = "https://files.pythonhosted.org/packages/73/be/75ef5fd0fcd8f083a5d13f78fd3f009528132a1f2a1d7c925c39fa20aa79/yarl-1.20.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:86971e2795584fe8c002356d3b97ef6c61862720eeff03db2a7c86b678d85b3e", size = 371113, upload-time = "2025-06-10T00:43:38.592Z" }, - { url = "https://files.pythonhosted.org/packages/50/4f/62faab3b479dfdcb741fe9e3f0323e2a7d5cd1ab2edc73221d57ad4834b2/yarl-1.20.1-cp311-cp311-win32.whl", hash = "sha256:597f40615b8d25812f14562699e287f0dcc035d25eb74da72cae043bb884d773", size = 81485, upload-time = "2025-06-10T00:43:41.038Z" }, - { url = "https://files.pythonhosted.org/packages/f0/09/d9c7942f8f05c32ec72cd5c8e041c8b29b5807328b68b4801ff2511d4d5e/yarl-1.20.1-cp311-cp311-win_amd64.whl", hash = "sha256:26ef53a9e726e61e9cd1cda6b478f17e350fb5800b4bd1cd9fe81c4d91cfeb2e", size = 86686, upload-time = "2025-06-10T00:43:42.692Z" }, - { url = "https://files.pythonhosted.org/packages/5f/9a/cb7fad7d73c69f296eda6815e4a2c7ed53fc70c2f136479a91c8e5fbdb6d/yarl-1.20.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:bdcc4cd244e58593a4379fe60fdee5ac0331f8eb70320a24d591a3be197b94a9", size = 133667, upload-time = "2025-06-10T00:43:44.369Z" }, - { url = "https://files.pythonhosted.org/packages/67/38/688577a1cb1e656e3971fb66a3492501c5a5df56d99722e57c98249e5b8a/yarl-1.20.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:b29a2c385a5f5b9c7d9347e5812b6f7ab267193c62d282a540b4fc528c8a9d2a", size = 91025, upload-time = "2025-06-10T00:43:46.295Z" }, - { url = "https://files.pythonhosted.org/packages/50/ec/72991ae51febeb11a42813fc259f0d4c8e0507f2b74b5514618d8b640365/yarl-1.20.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1112ae8154186dfe2de4732197f59c05a83dc814849a5ced892b708033f40dc2", size = 89709, upload-time = "2025-06-10T00:43:48.22Z" }, - { url = "https://files.pythonhosted.org/packages/99/da/4d798025490e89426e9f976702e5f9482005c548c579bdae792a4c37769e/yarl-1.20.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:90bbd29c4fe234233f7fa2b9b121fb63c321830e5d05b45153a2ca68f7d310ee", size = 352287, upload-time = "2025-06-10T00:43:49.924Z" }, - { url = "https://files.pythonhosted.org/packages/1a/26/54a15c6a567aac1c61b18aa0f4b8aa2e285a52d547d1be8bf48abe2b3991/yarl-1.20.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:680e19c7ce3710ac4cd964e90dad99bf9b5029372ba0c7cbfcd55e54d90ea819", size = 345429, upload-time = "2025-06-10T00:43:51.7Z" }, - { url = "https://files.pythonhosted.org/packages/d6/95/9dcf2386cb875b234353b93ec43e40219e14900e046bf6ac118f94b1e353/yarl-1.20.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4a979218c1fdb4246a05efc2cc23859d47c89af463a90b99b7c56094daf25a16", size = 365429, upload-time = "2025-06-10T00:43:53.494Z" }, - { url = "https://files.pythonhosted.org/packages/91/b2/33a8750f6a4bc224242a635f5f2cff6d6ad5ba651f6edcccf721992c21a0/yarl-1.20.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:255b468adf57b4a7b65d8aad5b5138dce6a0752c139965711bdcb81bc370e1b6", size = 363862, upload-time = "2025-06-10T00:43:55.766Z" }, - { url = "https://files.pythonhosted.org/packages/98/28/3ab7acc5b51f4434b181b0cee8f1f4b77a65919700a355fb3617f9488874/yarl-1.20.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a97d67108e79cfe22e2b430d80d7571ae57d19f17cda8bb967057ca8a7bf5bfd", size = 355616, upload-time = "2025-06-10T00:43:58.056Z" }, - { url = "https://files.pythonhosted.org/packages/36/a3/f666894aa947a371724ec7cd2e5daa78ee8a777b21509b4252dd7bd15e29/yarl-1.20.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8570d998db4ddbfb9a590b185a0a33dbf8aafb831d07a5257b4ec9948df9cb0a", size = 339954, upload-time = "2025-06-10T00:43:59.773Z" }, - { url = "https://files.pythonhosted.org/packages/f1/81/5f466427e09773c04219d3450d7a1256138a010b6c9f0af2d48565e9ad13/yarl-1.20.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:97c75596019baae7c71ccf1d8cc4738bc08134060d0adfcbe5642f778d1dca38", size = 365575, upload-time = "2025-06-10T00:44:02.051Z" }, - { url = "https://files.pythonhosted.org/packages/2e/e3/e4b0ad8403e97e6c9972dd587388940a032f030ebec196ab81a3b8e94d31/yarl-1.20.1-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:1c48912653e63aef91ff988c5432832692ac5a1d8f0fb8a33091520b5bbe19ef", size = 365061, upload-time = "2025-06-10T00:44:04.196Z" }, - { url = "https://files.pythonhosted.org/packages/ac/99/b8a142e79eb86c926f9f06452eb13ecb1bb5713bd01dc0038faf5452e544/yarl-1.20.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:4c3ae28f3ae1563c50f3d37f064ddb1511ecc1d5584e88c6b7c63cf7702a6d5f", size = 364142, upload-time = "2025-06-10T00:44:06.527Z" }, - { url = "https://files.pythonhosted.org/packages/34/f2/08ed34a4a506d82a1a3e5bab99ccd930a040f9b6449e9fd050320e45845c/yarl-1.20.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:c5e9642f27036283550f5f57dc6156c51084b458570b9d0d96100c8bebb186a8", size = 381894, upload-time = "2025-06-10T00:44:08.379Z" }, - { url = "https://files.pythonhosted.org/packages/92/f8/9a3fbf0968eac704f681726eff595dce9b49c8a25cd92bf83df209668285/yarl-1.20.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:2c26b0c49220d5799f7b22c6838409ee9bc58ee5c95361a4d7831f03cc225b5a", size = 383378, upload-time = "2025-06-10T00:44:10.51Z" }, - { url = "https://files.pythonhosted.org/packages/af/85/9363f77bdfa1e4d690957cd39d192c4cacd1c58965df0470a4905253b54f/yarl-1.20.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:564ab3d517e3d01c408c67f2e5247aad4019dcf1969982aba3974b4093279004", size = 374069, upload-time = "2025-06-10T00:44:12.834Z" }, - { url = "https://files.pythonhosted.org/packages/35/99/9918c8739ba271dcd935400cff8b32e3cd319eaf02fcd023d5dcd487a7c8/yarl-1.20.1-cp312-cp312-win32.whl", hash = "sha256:daea0d313868da1cf2fac6b2d3a25c6e3a9e879483244be38c8e6a41f1d876a5", size = 81249, upload-time = "2025-06-10T00:44:14.731Z" }, - { url = "https://files.pythonhosted.org/packages/eb/83/5d9092950565481b413b31a23e75dd3418ff0a277d6e0abf3729d4d1ce25/yarl-1.20.1-cp312-cp312-win_amd64.whl", hash = "sha256:48ea7d7f9be0487339828a4de0360d7ce0efc06524a48e1810f945c45b813698", size = 86710, upload-time = "2025-06-10T00:44:16.716Z" }, - { url = "https://files.pythonhosted.org/packages/8a/e1/2411b6d7f769a07687acee88a062af5833cf1966b7266f3d8dfb3d3dc7d3/yarl-1.20.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:0b5ff0fbb7c9f1b1b5ab53330acbfc5247893069e7716840c8e7d5bb7355038a", size = 131811, upload-time = "2025-06-10T00:44:18.933Z" }, - { url = "https://files.pythonhosted.org/packages/b2/27/584394e1cb76fb771371770eccad35de400e7b434ce3142c2dd27392c968/yarl-1.20.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:14f326acd845c2b2e2eb38fb1346c94f7f3b01a4f5c788f8144f9b630bfff9a3", size = 90078, upload-time = "2025-06-10T00:44:20.635Z" }, - { url = "https://files.pythonhosted.org/packages/bf/9a/3246ae92d4049099f52d9b0fe3486e3b500e29b7ea872d0f152966fc209d/yarl-1.20.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f60e4ad5db23f0b96e49c018596707c3ae89f5d0bd97f0ad3684bcbad899f1e7", size = 88748, upload-time = "2025-06-10T00:44:22.34Z" }, - { url = "https://files.pythonhosted.org/packages/a3/25/35afe384e31115a1a801fbcf84012d7a066d89035befae7c5d4284df1e03/yarl-1.20.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:49bdd1b8e00ce57e68ba51916e4bb04461746e794e7c4d4bbc42ba2f18297691", size = 349595, upload-time = "2025-06-10T00:44:24.314Z" }, - { url = "https://files.pythonhosted.org/packages/28/2d/8aca6cb2cabc8f12efcb82749b9cefecbccfc7b0384e56cd71058ccee433/yarl-1.20.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:66252d780b45189975abfed839616e8fd2dbacbdc262105ad7742c6ae58f3e31", size = 342616, upload-time = "2025-06-10T00:44:26.167Z" }, - { url = "https://files.pythonhosted.org/packages/0b/e9/1312633d16b31acf0098d30440ca855e3492d66623dafb8e25b03d00c3da/yarl-1.20.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:59174e7332f5d153d8f7452a102b103e2e74035ad085f404df2e40e663a22b28", size = 361324, upload-time = "2025-06-10T00:44:27.915Z" }, - { url = "https://files.pythonhosted.org/packages/bc/a0/688cc99463f12f7669eec7c8acc71ef56a1521b99eab7cd3abb75af887b0/yarl-1.20.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e3968ec7d92a0c0f9ac34d5ecfd03869ec0cab0697c91a45db3fbbd95fe1b653", size = 359676, upload-time = "2025-06-10T00:44:30.041Z" }, - { url = "https://files.pythonhosted.org/packages/af/44/46407d7f7a56e9a85a4c207724c9f2c545c060380718eea9088f222ba697/yarl-1.20.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d1a4fbb50e14396ba3d375f68bfe02215d8e7bc3ec49da8341fe3157f59d2ff5", size = 352614, upload-time = "2025-06-10T00:44:32.171Z" }, - { url = "https://files.pythonhosted.org/packages/b1/91/31163295e82b8d5485d31d9cf7754d973d41915cadce070491778d9c9825/yarl-1.20.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:11a62c839c3a8eac2410e951301309426f368388ff2f33799052787035793b02", size = 336766, upload-time = "2025-06-10T00:44:34.494Z" }, - { url = "https://files.pythonhosted.org/packages/b4/8e/c41a5bc482121f51c083c4c2bcd16b9e01e1cf8729e380273a952513a21f/yarl-1.20.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:041eaa14f73ff5a8986b4388ac6bb43a77f2ea09bf1913df7a35d4646db69e53", size = 364615, upload-time = "2025-06-10T00:44:36.856Z" }, - { url = "https://files.pythonhosted.org/packages/e3/5b/61a3b054238d33d70ea06ebba7e58597891b71c699e247df35cc984ab393/yarl-1.20.1-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:377fae2fef158e8fd9d60b4c8751387b8d1fb121d3d0b8e9b0be07d1b41e83dc", size = 360982, upload-time = "2025-06-10T00:44:39.141Z" }, - { url = "https://files.pythonhosted.org/packages/df/a3/6a72fb83f8d478cb201d14927bc8040af901811a88e0ff2da7842dd0ed19/yarl-1.20.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:1c92f4390e407513f619d49319023664643d3339bd5e5a56a3bebe01bc67ec04", size = 369792, upload-time = "2025-06-10T00:44:40.934Z" }, - { url = "https://files.pythonhosted.org/packages/7c/af/4cc3c36dfc7c077f8dedb561eb21f69e1e9f2456b91b593882b0b18c19dc/yarl-1.20.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:d25ddcf954df1754ab0f86bb696af765c5bfaba39b74095f27eececa049ef9a4", size = 382049, upload-time = "2025-06-10T00:44:42.854Z" }, - { url = "https://files.pythonhosted.org/packages/19/3a/e54e2c4752160115183a66dc9ee75a153f81f3ab2ba4bf79c3c53b33de34/yarl-1.20.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:909313577e9619dcff8c31a0ea2aa0a2a828341d92673015456b3ae492e7317b", size = 384774, upload-time = "2025-06-10T00:44:45.275Z" }, - { url = "https://files.pythonhosted.org/packages/9c/20/200ae86dabfca89060ec6447649f219b4cbd94531e425e50d57e5f5ac330/yarl-1.20.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:793fd0580cb9664548c6b83c63b43c477212c0260891ddf86809e1c06c8b08f1", size = 374252, upload-time = "2025-06-10T00:44:47.31Z" }, - { url = "https://files.pythonhosted.org/packages/83/75/11ee332f2f516b3d094e89448da73d557687f7d137d5a0f48c40ff211487/yarl-1.20.1-cp313-cp313-win32.whl", hash = "sha256:468f6e40285de5a5b3c44981ca3a319a4b208ccc07d526b20b12aeedcfa654b7", size = 81198, upload-time = "2025-06-10T00:44:49.164Z" }, - { url = "https://files.pythonhosted.org/packages/ba/ba/39b1ecbf51620b40ab402b0fc817f0ff750f6d92712b44689c2c215be89d/yarl-1.20.1-cp313-cp313-win_amd64.whl", hash = "sha256:495b4ef2fea40596bfc0affe3837411d6aa3371abcf31aac0ccc4bdd64d4ef5c", size = 86346, upload-time = "2025-06-10T00:44:51.182Z" }, - { url = "https://files.pythonhosted.org/packages/43/c7/669c52519dca4c95153c8ad96dd123c79f354a376346b198f438e56ffeb4/yarl-1.20.1-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:f60233b98423aab21d249a30eb27c389c14929f47be8430efa7dbd91493a729d", size = 138826, upload-time = "2025-06-10T00:44:52.883Z" }, - { url = "https://files.pythonhosted.org/packages/6a/42/fc0053719b44f6ad04a75d7f05e0e9674d45ef62f2d9ad2c1163e5c05827/yarl-1.20.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:6f3eff4cc3f03d650d8755c6eefc844edde99d641d0dcf4da3ab27141a5f8ddf", size = 93217, upload-time = "2025-06-10T00:44:54.658Z" }, - { url = "https://files.pythonhosted.org/packages/4f/7f/fa59c4c27e2a076bba0d959386e26eba77eb52ea4a0aac48e3515c186b4c/yarl-1.20.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:69ff8439d8ba832d6bed88af2c2b3445977eba9a4588b787b32945871c2444e3", size = 92700, upload-time = "2025-06-10T00:44:56.784Z" }, - { url = "https://files.pythonhosted.org/packages/2f/d4/062b2f48e7c93481e88eff97a6312dca15ea200e959f23e96d8ab898c5b8/yarl-1.20.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3cf34efa60eb81dd2645a2e13e00bb98b76c35ab5061a3989c7a70f78c85006d", size = 347644, upload-time = "2025-06-10T00:44:59.071Z" }, - { url = "https://files.pythonhosted.org/packages/89/47/78b7f40d13c8f62b499cc702fdf69e090455518ae544c00a3bf4afc9fc77/yarl-1.20.1-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:8e0fe9364ad0fddab2688ce72cb7a8e61ea42eff3c7caeeb83874a5d479c896c", size = 323452, upload-time = "2025-06-10T00:45:01.605Z" }, - { url = "https://files.pythonhosted.org/packages/eb/2b/490d3b2dc66f52987d4ee0d3090a147ea67732ce6b4d61e362c1846d0d32/yarl-1.20.1-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8f64fbf81878ba914562c672024089e3401974a39767747691c65080a67b18c1", size = 346378, upload-time = "2025-06-10T00:45:03.946Z" }, - { url = "https://files.pythonhosted.org/packages/66/ad/775da9c8a94ce925d1537f939a4f17d782efef1f973039d821cbe4bcc211/yarl-1.20.1-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f6342d643bf9a1de97e512e45e4b9560a043347e779a173250824f8b254bd5ce", size = 353261, upload-time = "2025-06-10T00:45:05.992Z" }, - { url = "https://files.pythonhosted.org/packages/4b/23/0ed0922b47a4f5c6eb9065d5ff1e459747226ddce5c6a4c111e728c9f701/yarl-1.20.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:56dac5f452ed25eef0f6e3c6a066c6ab68971d96a9fb441791cad0efba6140d3", size = 335987, upload-time = "2025-06-10T00:45:08.227Z" }, - { url = "https://files.pythonhosted.org/packages/3e/49/bc728a7fe7d0e9336e2b78f0958a2d6b288ba89f25a1762407a222bf53c3/yarl-1.20.1-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c7d7f497126d65e2cad8dc5f97d34c27b19199b6414a40cb36b52f41b79014be", size = 329361, upload-time = "2025-06-10T00:45:10.11Z" }, - { url = "https://files.pythonhosted.org/packages/93/8f/b811b9d1f617c83c907e7082a76e2b92b655400e61730cd61a1f67178393/yarl-1.20.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:67e708dfb8e78d8a19169818eeb5c7a80717562de9051bf2413aca8e3696bf16", size = 346460, upload-time = "2025-06-10T00:45:12.055Z" }, - { url = "https://files.pythonhosted.org/packages/70/fd/af94f04f275f95da2c3b8b5e1d49e3e79f1ed8b6ceb0f1664cbd902773ff/yarl-1.20.1-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:595c07bc79af2494365cc96ddeb772f76272364ef7c80fb892ef9d0649586513", size = 334486, upload-time = "2025-06-10T00:45:13.995Z" }, - { url = "https://files.pythonhosted.org/packages/84/65/04c62e82704e7dd0a9b3f61dbaa8447f8507655fd16c51da0637b39b2910/yarl-1.20.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:7bdd2f80f4a7df852ab9ab49484a4dee8030023aa536df41f2d922fd57bf023f", size = 342219, upload-time = "2025-06-10T00:45:16.479Z" }, - { url = "https://files.pythonhosted.org/packages/91/95/459ca62eb958381b342d94ab9a4b6aec1ddec1f7057c487e926f03c06d30/yarl-1.20.1-cp313-cp313t-musllinux_1_2_ppc64le.whl", hash = "sha256:c03bfebc4ae8d862f853a9757199677ab74ec25424d0ebd68a0027e9c639a390", size = 350693, upload-time = "2025-06-10T00:45:18.399Z" }, - { url = "https://files.pythonhosted.org/packages/a6/00/d393e82dd955ad20617abc546a8f1aee40534d599ff555ea053d0ec9bf03/yarl-1.20.1-cp313-cp313t-musllinux_1_2_s390x.whl", hash = "sha256:344d1103e9c1523f32a5ed704d576172d2cabed3122ea90b1d4e11fe17c66458", size = 355803, upload-time = "2025-06-10T00:45:20.677Z" }, - { url = "https://files.pythonhosted.org/packages/9e/ed/c5fb04869b99b717985e244fd93029c7a8e8febdfcffa06093e32d7d44e7/yarl-1.20.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:88cab98aa4e13e1ade8c141daeedd300a4603b7132819c484841bb7af3edce9e", size = 341709, upload-time = "2025-06-10T00:45:23.221Z" }, - { url = "https://files.pythonhosted.org/packages/24/fd/725b8e73ac2a50e78a4534ac43c6addf5c1c2d65380dd48a9169cc6739a9/yarl-1.20.1-cp313-cp313t-win32.whl", hash = "sha256:b121ff6a7cbd4abc28985b6028235491941b9fe8fe226e6fdc539c977ea1739d", size = 86591, upload-time = "2025-06-10T00:45:25.793Z" }, - { url = "https://files.pythonhosted.org/packages/94/c3/b2e9f38bc3e11191981d57ea08cab2166e74ea770024a646617c9cddd9f6/yarl-1.20.1-cp313-cp313t-win_amd64.whl", hash = "sha256:541d050a355bbbc27e55d906bc91cb6fe42f96c01413dd0f4ed5a5240513874f", size = 93003, upload-time = "2025-06-10T00:45:27.752Z" }, - { url = "https://files.pythonhosted.org/packages/b4/2d/2345fce04cfd4bee161bf1e7d9cdc702e3e16109021035dbb24db654a622/yarl-1.20.1-py3-none-any.whl", hash = "sha256:83b8eb083fe4683c6115795d9fc1cfaf2cbbefb19b3a1cb68f6527460f483a77", size = 46542, upload-time = "2025-06-10T00:46:07.521Z" }, -] - -[[package]] -name = "zarr" -source = { editable = "." } -dependencies = [ - { name = "donfig" }, - { name = "numcodecs", extra = ["crc32c"] }, - { name = "numpy" }, - { name = "packaging" }, - { name = "typing-extensions" }, -] - -[package.optional-dependencies] -docs = [ - { name = "astroid" }, - { name = "numcodecs", extra = ["msgpack"] }, - { name = "numpydoc" }, - { name = "pydata-sphinx-theme" }, - { name = "pytest" }, - { name = "rich" }, - { name = "s3fs" }, - { name = "sphinx" }, - { name = "sphinx-autoapi" }, - { name = "sphinx-autobuild" }, - { name = "sphinx-copybutton" }, - { name = "sphinx-design" }, - { name = "sphinx-issues" }, - { name = "sphinx-reredirects" }, - { name = "towncrier" }, -] -gpu = [ - { name = "cupy-cuda12x" }, -] -optional = [ - { name = "rich" }, - { name = "universal-pathlib" }, -] -remote = [ - { name = "fsspec" }, - { name = "obstore" }, -] -remote-tests = [ - { name = "botocore" }, - { name = "fsspec" }, - { name = "moto", extra = ["s3", "server"] }, - { name = "obstore" }, - { name = "requests" }, - { name = "s3fs" }, -] -test = [ - { name = "coverage" }, - { name = "hypothesis" }, - { name = "mypy" }, - { name = "packaging" }, - { name = "pytest" }, - { name = "pytest-accept" }, - { name = "pytest-asyncio" }, - { name = "pytest-cov" }, - { name = "pytest-xdist" }, - { name = "rich" }, - { name = "tomlkit" }, - { name = "uv" }, -] - -[package.dev-dependencies] -dev = [ - { name = "ipykernel" }, - { name = "pip" }, -] - -[package.metadata] -requires-dist = [ - { name = "astroid", marker = "extra == 'docs'", specifier = "<4" }, - { name = "botocore", marker = "extra == 'remote-tests'" }, - { name = "coverage", marker = "extra == 'test'", specifier = ">=7.10" }, - { name = "cupy-cuda12x", marker = "extra == 'gpu'" }, - { name = "donfig", specifier = ">=0.8" }, - { name = "fsspec", marker = "extra == 'remote'", specifier = ">=2023.10.0" }, - { name = "fsspec", marker = "extra == 'remote-tests'", specifier = ">=2023.10.0" }, - { name = "hypothesis", marker = "extra == 'test'" }, - { name = "moto", extras = ["s3", "server"], marker = "extra == 'remote-tests'" }, - { name = "mypy", marker = "extra == 'test'" }, - { name = "numcodecs", extras = ["crc32c"], specifier = ">=0.14" }, - { name = "numcodecs", extras = ["msgpack"], marker = "extra == 'docs'" }, - { name = "numpy", specifier = ">=1.26" }, - { name = "numpydoc", marker = "extra == 'docs'" }, - { name = "obstore", marker = "extra == 'remote'", specifier = ">=0.5.1" }, - { name = "obstore", marker = "extra == 'remote-tests'", specifier = ">=0.5.1" }, - { name = "packaging", specifier = ">=22.0" }, - { name = "packaging", marker = "extra == 'test'" }, - { name = "pydata-sphinx-theme", marker = "extra == 'docs'" }, - { name = "pytest", marker = "extra == 'docs'" }, - { name = "pytest", marker = "extra == 'test'", specifier = "<8.4" }, - { name = "pytest-accept", marker = "extra == 'test'" }, - { name = "pytest-asyncio", marker = "extra == 'test'" }, - { name = "pytest-cov", marker = "extra == 'test'" }, - { name = "pytest-xdist", marker = "extra == 'test'" }, - { name = "requests", marker = "extra == 'remote-tests'" }, - { name = "rich", marker = "extra == 'docs'" }, - { name = "rich", marker = "extra == 'optional'" }, - { name = "rich", marker = "extra == 'test'" }, - { name = "s3fs", marker = "extra == 'docs'", specifier = ">=2023.10.0" }, - { name = "s3fs", marker = "extra == 'remote-tests'", specifier = ">=2023.10.0" }, - { name = "sphinx", marker = "extra == 'docs'", specifier = "==8.1.3" }, - { name = "sphinx-autoapi", marker = "extra == 'docs'", specifier = "==3.4.0" }, - { name = "sphinx-autobuild", marker = "extra == 'docs'", specifier = ">=2021.3.14" }, - { name = "sphinx-copybutton", marker = "extra == 'docs'" }, - { name = "sphinx-design", marker = "extra == 'docs'" }, - { name = "sphinx-issues", marker = "extra == 'docs'" }, - { name = "sphinx-reredirects", marker = "extra == 'docs'" }, - { name = "tomlkit", marker = "extra == 'test'" }, - { name = "towncrier", marker = "extra == 'docs'" }, - { name = "typing-extensions", specifier = ">=4.9" }, - { name = "universal-pathlib", marker = "extra == 'optional'" }, - { name = "uv", marker = "extra == 'test'" }, -] -provides-extras = ["docs", "gpu", "optional", "remote", "remote-tests", "test"] - -[package.metadata.requires-dev] -dev = [ - { name = "ipykernel", specifier = ">=6.29.5" }, - { name = "pip", specifier = ">=25.0.1" }, -]