diff --git a/.github/actions/install-aiida-core/action.yml b/.github/actions/install-aiida-core/action.yml index f787aa8070..10f07e8889 100644 --- a/.github/actions/install-aiida-core/action.yml +++ b/.github/actions/install-aiida-core/action.yml @@ -4,7 +4,7 @@ description: Install aiida-core package and its Python dependencies inputs: python-version: description: Python version - default: '3.9' # Lowest supported version + default: '3.10' # Lowest supported version required: false extras: description: list of optional dependencies diff --git a/.github/workflows/ci-code.yml b/.github/workflows/ci-code.yml index 5feace91e3..31cb7a4cbe 100644 --- a/.github/workflows/ci-code.yml +++ b/.github/workflows/ci-code.yml @@ -26,7 +26,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: ['3.9', '3.13'] + python-version: ['3.10', '3.14'] database-backend: [psql] services: @@ -72,14 +72,14 @@ jobs: AIIDA_TEST_PROFILE: test_aiida AIIDA_WARN_v3: 1 run: | - pytest -n auto --db-backend ${{ matrix.database-backend }} -m 'not nightly' tests/ ${{ matrix.python-version == '3.13' && '--cov aiida' || '' }} + pytest -n auto --db-backend ${{ matrix.database-backend }} -m 'not nightly' tests/ ${{ matrix.python-version == '3.14' && '--cov aiida' || '' }} - name: Upload coverage report - if: matrix.python-version == 3.13 && github.repository == 'aiidateam/aiida-core' + if: matrix.python-version == 3.14 && github.repository == 'aiidateam/aiida-core' uses: codecov/codecov-action@v5 with: token: ${{ secrets.CODECOV_TOKEN }} - name: aiida-pytests-py3.13 + name: aiida-pytests-py3.14 files: ./coverage.xml fail_ci_if_error: false # don't fail job, if coverage upload fails @@ -90,7 +90,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: ['3.9'] + python-version: ['3.10'] database-backend: [sqlite] services: @@ -137,7 +137,7 @@ jobs: - name: Install aiida-core uses: ./.github/actions/install-aiida-core with: - python-version: '3.13' + python-version: '3.14' - name: Setup SSH on localhost run: .github/workflows/setup_ssh.sh @@ -159,7 +159,7 @@ jobs: - name: Install aiida-core uses: ./.github/actions/install-aiida-core with: - python-version: '3.13' + python-version: '3.14' from-lock: 'true' extras: '' @@ -202,7 +202,7 @@ jobs: - name: Install aiida-core uses: ./.github/actions/install-aiida-core with: - python-version: '3.9' + python-version: '3.10' from-lock: 'true' extras: tests diff --git a/.github/workflows/docs-build.yml b/.github/workflows/docs-build.yml index 91fc1b187d..6190bcae88 100644 --- a/.github/workflows/docs-build.yml +++ b/.github/workflows/docs-build.yml @@ -23,7 +23,7 @@ jobs: - name: Install aiida-core and docs deps uses: ./.github/actions/install-aiida-core with: - python-version: '3.9' + python-version: '3.10' extras: docs,tests,rest,atomic_tools from-lock: 'false' diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index b64e788765..76079bda42 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -30,10 +30,10 @@ jobs: - name: Checkout repo uses: actions/checkout@v6 - - name: Set up Python 3.9 + - name: Set up Python 3.10 uses: actions/setup-python@v6 with: - python-version: '3.9' + python-version: '3.10' - name: Check tag run: python .github/workflows/check_release_tag.py $GITHUB_REF @@ -95,10 +95,10 @@ jobs: steps: - name: Checkout source uses: actions/checkout@v6 - - name: Set up Python 3.9 + - name: Set up Python 3.10 uses: actions/setup-python@v6 with: - python-version: '3.9' + python-version: '3.10' - name: Install flit run: pip install flit~=3.4 - name: Build @@ -123,10 +123,10 @@ jobs: steps: - name: Checkout source uses: actions/checkout@v6 - - name: Set up Python 3.9 + - name: Set up Python 3.10 uses: actions/setup-python@v6 with: - python-version: '3.9' + python-version: '3.10' - name: Install flit run: pip install flit~=3.4 - name: Build diff --git a/.github/workflows/test-install.yml b/.github/workflows/test-install.yml index 098f589092..4304bd80d7 100644 --- a/.github/workflows/test-install.yml +++ b/.github/workflows/test-install.yml @@ -84,10 +84,10 @@ jobs: steps: - uses: actions/checkout@v6 - - name: Set up Python 3.9 + - name: Set up Python 3.10 uses: actions/setup-python@v6 with: - python-version: '3.9' + python-version: '3.10' - name: Pip install id: pip_install @@ -111,7 +111,7 @@ jobs: fail-fast: false matrix: - python-version: ['3.9', '3.10', '3.11', '3.12', '3.13'] + python-version: ['3.10', '3.11', '3.12', '3.13', '3.14'] # Not being able to install with conda on a specific Python version is # not sufficient to fail the run, but something we want to be aware of. @@ -165,7 +165,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: ['3.9', '3.10', '3.11', '3.12', '3.13'] + python-version: ['3.10', '3.11', '3.12', '3.13', '3.14'] services: postgres: diff --git a/.molecule/default/setup_python.yml b/.molecule/default/setup_python.yml index eb03064ec5..6cccd0e2b9 100644 --- a/.molecule/default/setup_python.yml +++ b/.molecule/default/setup_python.yml @@ -13,7 +13,7 @@ pip: chdir: '{{ aiida_core_dir }}' # TODO dynamically change for python version - requirements: requirements/requirements-py-3.9.txt + requirements: requirements/requirements-py-3.10.txt executable: '{{ venv_bin }}/pip' extra_args: --cache-dir {{ aiida_pip_cache }} register: pip_install_deps diff --git a/environment.yml b/environment.yml index 62aa69f83f..761397754b 100644 --- a/environment.yml +++ b/environment.yml @@ -5,16 +5,15 @@ channels: - conda-forge - defaults dependencies: -- python~=3.9 +- python~=3.10 - alembic~=1.8 - archive-path~=0.4.2 -- asyncssh~=2.19.0 +- asyncssh~=2.22.0 - circus~=0.19.0 - click-spinner~=0.1.8 - click<8.3,>=8.1.0 - disk-objectstore~=1.4.0 - docstring_parser -- get-annotations~=0.1 - python-graphviz~=0.19 - plumpy~=0.25.0 - ipython>=7.6 diff --git a/pyproject.toml b/pyproject.toml index 5c9d205c87..ad171b08fd 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -18,11 +18,11 @@ classifiers = [ 'Operating System :: POSIX :: Linux', 'Operating System :: MacOS :: MacOS X', 'Programming Language :: Python', - 'Programming Language :: Python :: 3.9', 'Programming Language :: Python :: 3.10', 'Programming Language :: Python :: 3.11', 'Programming Language :: Python :: 3.12', 'Programming Language :: Python :: 3.13', + 'Programming Language :: Python :: 3.14', 'Topic :: Scientific/Engineering' ] # NOTE: When updating versions of some packages, such as requests or paramiko, @@ -31,13 +31,12 @@ classifiers = [ dependencies = [ 'alembic~=1.8', 'archive-path~=0.4.2', - "asyncssh~=2.19.0", + "asyncssh~=2.22.0", 'circus~=0.19.0', 'click-spinner~=0.1.8', 'click>=8.1.0,<8.3', 'disk-objectstore~=1.4.0', 'docstring-parser', - 'get-annotations~=0.1;python_version<"3.10"', 'graphviz~=0.19', 'plumpy~=0.25.0', 'ipython>=7.6', @@ -68,7 +67,7 @@ keywords = ['aiida', 'workflows'] license = {file = 'LICENSE.txt'} name = 'aiida-core' readme = 'README.md' -requires-python = '>=3.9' +requires-python = '>=3.10' [project.entry-points.'aiida.brokers'] 'core.rabbitmq' = 'aiida.brokers.rabbitmq.broker:RabbitmqBroker' @@ -260,7 +259,7 @@ pre-commit = [ 'types-requests~=2.0' ] rest = [ - 'flask-cors~=3.0', + 'flask-cors~=3.0,>=3.0.8', 'flask-restful~=0.3.10', 'flask~=2.3.3', 'pyparsing~=3.1', @@ -378,7 +377,6 @@ module = [ 'bs4.*', 'circus.*', 'flask_restful.*', - 'get_annotations.*', 'graphviz.*', 'kiwipy.*', 'mayavi.*', @@ -487,38 +485,39 @@ extend-generics = ["aiida.orm.entities.Entity", "aiida.orm.entities.Collection"] legacy_tox_ini = """ [tox] minversion = 3.18.0 -envlist = py39 +envlist = py310 [testenv] usedevelop=True deps = - py39: -rrequirements/requirements-py-3.9.txt py310: -rrequirements/requirements-py-3.10.txt py311: -rrequirements/requirements-py-3.11.txt py312: -rrequirements/requirements-py-3.12.txt + py313: -rrequirements/requirements-py-3.13.txt + py314: -rrequirements/requirements-py-3.14.txt -[testenv:py{39,310,311,312}-presto] +[testenv:py{310,311,312,313,314}-presto] passenv = PYTHONASYNCIODEBUG setenv = AIIDA_WARN_v3 = commands = pytest -m 'presto' {posargs} -[testenv:py{39,310,311,312}] +[testenv:py{310,311,312,313,314}] passenv = PYTHONASYNCIODEBUG setenv = AIIDA_WARN_v3 = commands = pytest {posargs} -[testenv:py{39,310,311,312}-verdi] +[testenv:py{310,311,312,313,314}-verdi] passenv = AIIDA_TEST_BACKEND setenv = AIIDA_PATH = {toxinidir}/.tox/.aiida commands = verdi {posargs} -[testenv:py{39,310,311,312}-docs-{clean,update}] +[testenv:py{310,311,312,313,314}-docs-{clean,update}] description = clean: Build the documentation (remove any existing build) update: Build the documentation (modify any existing build) @@ -531,14 +530,15 @@ commands = clean: make clean make debug -[testenv:py{39,310,311,312}-docs-live] +[testenv:py{310,311,312,313,314}-docs-live] # tip: remove apidocs before using this feature (`cd docs; make clean`) description = Build the documentation and launch browser (with live updates) deps = - py39: -rrequirements/requirements-py-3.9.txt py310: -rrequirements/requirements-py-3.10.txt py311: -rrequirements/requirements-py-3.11.txt py312: -rrequirements/requirements-py-3.12.txt + py313: -rrequirements/requirements-py-3.13.txt + py314: -rrequirements/requirements-py-3.14.txt sphinx-autobuild setenv = RUN_APIDOC = False @@ -548,7 +548,7 @@ commands = --port 0 --open-browser \ -n -b {posargs:html} docs/source/ docs/build/{posargs:html} -[testenv:py{39,310,311,312}-pre-commit] +[testenv:py{310,311,312,313,314}-pre-commit] description = Run the pre-commit checks extras = pre-commit commands = pre-commit run {posargs} diff --git a/src/aiida/calculations/importers/arithmetic/add.py b/src/aiida/calculations/importers/arithmetic/add.py index 69a84a1757..93da6963a9 100644 --- a/src/aiida/calculations/importers/arithmetic/add.py +++ b/src/aiida/calculations/importers/arithmetic/add.py @@ -3,7 +3,7 @@ from pathlib import Path from re import match from tempfile import NamedTemporaryFile -from typing import Dict, Union +from typing import Dict from aiida.engine import CalcJobImporter from aiida.orm import Int, Node, RemoteData @@ -13,7 +13,7 @@ class ArithmeticAddCalculationImporter(CalcJobImporter): """Importer for the :class:`aiida.calculations.arithmetic.add.ArithmeticAddCalculation` plugin.""" @staticmethod - def parse_remote_data(remote_data: RemoteData, **kwargs) -> Dict[str, Union[Node, Dict]]: + def parse_remote_data(remote_data: RemoteData, **kwargs) -> Dict[str, Node | Dict]: """Parse the input nodes from the files in the provided ``RemoteData``. :param remote_data: the remote data node containing the raw input files. diff --git a/src/aiida/calculations/stash.py b/src/aiida/calculations/stash.py index 1197351dea..1eb34653b7 100644 --- a/src/aiida/calculations/stash.py +++ b/src/aiida/calculations/stash.py @@ -11,7 +11,7 @@ from __future__ import annotations import json -from typing import Any, Optional +from typing import Any from aiida import orm from aiida.common import AIIDA_LOGGER @@ -21,7 +21,7 @@ EXEC_LOGGER = AIIDA_LOGGER.getChild('StashCalculation') -def validate_source_node(source_node: Any, _: Any) -> Optional[str]: +def validate_source_node(source_node: Any, _: Any) -> str | None: """Validate the ``source_node`` input. Checks that the creator of the source_node (i.e., the CalcJob that produced this RemoteData) diff --git a/src/aiida/cmdline/params/options/callable.py b/src/aiida/cmdline/params/options/callable.py index a29e930563..ebfd2b64f6 100644 --- a/src/aiida/cmdline/params/options/callable.py +++ b/src/aiida/cmdline/params/options/callable.py @@ -22,7 +22,7 @@ class CallableDefaultOption(click.Option): https://github.com/pallets/click/issues/2614 """ - def get_default(self, ctx: click.Context, call: bool = True) -> t.Optional[t.Union[t.Any, t.Callable[[], t.Any]]]: + def get_default(self, ctx: click.Context, call: bool = True) -> t.Any | t.Callable[[], t.Any] | None: """Return default unless in tab-completion context.""" if ctx.resilient_parsing: return None diff --git a/src/aiida/cmdline/params/types/path.py b/src/aiida/cmdline/params/types/path.py index ba63ac5fb1..975fb0e415 100644 --- a/src/aiida/cmdline/params/types/path.py +++ b/src/aiida/cmdline/params/types/path.py @@ -20,7 +20,7 @@ URL_TIMEOUT_SECONDS = 10 -PathType = t.Union[str, bytes, os.PathLike[str]] +PathType = str | bytes | os.PathLike[str] def check_timeout_seconds(timeout_seconds: float) -> int: diff --git a/src/aiida/cmdline/params/types/plugin.py b/src/aiida/cmdline/params/types/plugin.py index c6cfd555f7..713c344373 100644 --- a/src/aiida/cmdline/params/types/plugin.py +++ b/src/aiida/cmdline/params/types/plugin.py @@ -180,7 +180,7 @@ def shell_complete( return results @shim_add_ctx - def get_missing_message(self, param: click.Parameter, ctx: click.Context | None) -> str: + def get_missing_message(self, param: click.Parameter, ctx: click.Context | None) -> str: # type: ignore[override] return 'Possible arguments are:\n\n' + '\n'.join(self.get_valid_arguments()) def get_entry_point_from_string(self, entry_point_string: str) -> EntryPoint: @@ -235,7 +235,7 @@ def validate_entry_point_group(self, group: str) -> None: def convert( # type: ignore[override] self, value: t.Any, param: click.Parameter | None, ctx: click.Context | None - ) -> t.Union[EntryPoint, t.Any]: + ) -> EntryPoint | t.Any: """Convert the string value to an entry point instance, if the value can be successfully parsed into an actual entry point. Will raise click.BadParameter if validation fails. """ diff --git a/src/aiida/cmdline/utils/echo.py b/src/aiida/cmdline/utils/echo.py index 86eade87d4..183c7ef536 100644 --- a/src/aiida/cmdline/utils/echo.py +++ b/src/aiida/cmdline/utils/echo.py @@ -16,7 +16,7 @@ import logging import sys from collections.abc import Sequence -from typing import Any, Callable, NoReturn, Optional +from typing import Any, Callable, NoReturn import click @@ -71,7 +71,7 @@ def highlight_string(string: str, color: str = 'highlight') -> str: return click.style(string, fg=COLORS[color]) -def echo(message: Any, fg: Optional[str] = None, bold: bool = False, nl: bool = True, err: bool = False) -> None: +def echo(message: Any, fg: str | None = None, bold: bool = False, nl: bool = True, err: bool = False) -> None: """Log a message to the cmdline logger. .. note:: The message will be logged at the ``REPORT`` level but always without the log level prefix. diff --git a/src/aiida/common/progress_reporter.py b/src/aiida/common/progress_reporter.py index 2acf1a625e..5c6c67bdc0 100644 --- a/src/aiida/common/progress_reporter.py +++ b/src/aiida/common/progress_reporter.py @@ -20,7 +20,13 @@ from functools import partial from types import TracebackType -from typing import TYPE_CHECKING, Any, Callable, Literal, Optional, Type +from typing import ( + TYPE_CHECKING, + Any, + Callable, + Literal, + Type, +) if TYPE_CHECKING: from tqdm import tqdm @@ -51,7 +57,7 @@ class ProgressReporterAbstract: """ - def __init__(self, *, total: int, desc: Optional[str] = None, **kwargs: Any): + def __init__(self, *, total: int, desc: str | None = None, **kwargs: Any): """Initialise the progress reporting contextmanager. :param total: The number of expected iterations. @@ -68,7 +74,7 @@ def total(self) -> int: return self._total @property - def desc(self) -> Optional[str]: + def desc(self) -> str | None: """Return the description of the process.""" return self._desc @@ -83,12 +89,12 @@ def __enter__(self) -> 'ProgressReporterAbstract': return self def __exit__( - self, exctype: Optional[Type[BaseException]], excinst: Optional[BaseException], exctb: Optional[TracebackType] + self, exctype: Type[BaseException] | None, excinst: BaseException | None, exctb: TracebackType | None ) -> Literal[False]: """Exit the contextmanager.""" return False - def set_description_str(self, text: Optional[str] = None, refresh: bool = True) -> None: + def set_description_str(self, text: str | None = None, refresh: bool = True) -> None: """Set the text shown by the progress reporter. :param text: The text to show @@ -105,7 +111,7 @@ def update(self, n: int = 1) -> None: """ self._increment += n - def reset(self, total: Optional[int] = None) -> None: + def reset(self, total: int | None = None) -> None: """Resets current iterations to 0. :param total: If not None, update number of expected iterations. @@ -171,9 +177,7 @@ def set_progress_reporter( PROGRESS_REPORTER = reporter -def set_progress_bar_tqdm( - bar_format: Optional[str] = TQDM_BAR_FORMAT, leave: Optional[bool] = False, **kwargs: Any -) -> None: +def set_progress_bar_tqdm(bar_format: str | None = TQDM_BAR_FORMAT, leave: bool | None = False, **kwargs: Any) -> None: """Set a `tqdm `__ implementation of the progress reporter interface. See :func:`~aiida.common.progress_reporter.set_progress_reporter` for details. diff --git a/src/aiida/common/timezone.py b/src/aiida/common/timezone.py index 6fa991609c..7bab5010ec 100644 --- a/src/aiida/common/timezone.py +++ b/src/aiida/common/timezone.py @@ -9,7 +9,6 @@ """Utility functions to operate on datetime objects.""" from datetime import datetime, timedelta, timezone, tzinfo -from typing import Optional utc = timezone.utc # Simply forward this attribute from the :mod:`datetime.timezone` built in library @@ -22,7 +21,7 @@ def now() -> datetime: return datetime.now().astimezone() -def make_aware(value: datetime, tz: Optional[tzinfo] = None) -> datetime: +def make_aware(value: datetime, tz: tzinfo | None = None) -> datetime: """Make the given datetime object timezone aware. :param value: The datetime object to make aware. @@ -57,7 +56,7 @@ def timezone_from_name(name: str) -> tzinfo: raise ValueError(f'unknown timezone: {name}') from exception -def delta(from_time: datetime, to_time: Optional[datetime] = None) -> timedelta: +def delta(from_time: datetime, to_time: datetime | None = None) -> timedelta: """Return the datetime object representing the different between two datetime objects. :param from_time: The starting datetime object. diff --git a/src/aiida/common/typing.py b/src/aiida/common/typing.py index 1cdc637b8b..93d5ac1bb9 100644 --- a/src/aiida/common/typing.py +++ b/src/aiida/common/typing.py @@ -11,6 +11,5 @@ from __future__ import annotations import pathlib -from typing import Union -FilePath = Union[str, pathlib.PurePath] +FilePath = str | pathlib.PurePath diff --git a/src/aiida/engine/daemon/execmanager.py b/src/aiida/engine/daemon/execmanager.py index c661b92bea..85589d1c26 100644 --- a/src/aiida/engine/daemon/execmanager.py +++ b/src/aiida/engine/daemon/execmanager.py @@ -20,7 +20,7 @@ from logging import LoggerAdapter from pathlib import Path from tempfile import NamedTemporaryFile, TemporaryDirectory -from typing import TYPE_CHECKING, Any, List, Optional, Tuple, Union +from typing import TYPE_CHECKING, Any, List, Tuple from typing import Mapping as MappingType # typing.assert_never available since 3.11 @@ -47,7 +47,7 @@ EXEC_LOGGER = AIIDA_LOGGER.getChild('execmanager') -def _find_data_node(inputs: MappingType[str, Any], uuid: str) -> Optional[Node]: +def _find_data_node(inputs: MappingType[str, Any], uuid: str) -> Node | None: """Find and return the node with the given UUID from a nested mapping of input nodes. :param inputs: (nested) mapping of nodes @@ -72,7 +72,7 @@ async def upload_calculation( transport: Transport, calc_info: CalcInfo, folder: Folder, - inputs: Optional[MappingType[str, Any]] = None, + inputs: MappingType[str, Any] | None = None, dry_run: bool = False, ) -> RemoteData | None: """Upload a `CalcJob` instance @@ -828,7 +828,7 @@ async def retrieve_files_from_list( calculation: CalcJobNode, transport: Transport, folder: str, - retrieve_list: List[Union[str, Tuple[str, str, int], list]], + retrieve_list: List[str | Tuple[str, str, int] | list], ) -> None: """Retrieve all the files in the retrieve_list from the remote into the local folder instance through the transport. The entries in the retrieve_list diff --git a/src/aiida/engine/daemon/worker.py b/src/aiida/engine/daemon/worker.py index dd16f1b559..cd25a1631d 100644 --- a/src/aiida/engine/daemon/worker.py +++ b/src/aiida/engine/daemon/worker.py @@ -12,7 +12,6 @@ import logging import signal import sys -from typing import Union from aiida.common.log import configure_logging from aiida.engine.daemon.client import get_daemon_client @@ -39,7 +38,7 @@ async def shutdown_worker(runner: Runner) -> None: LOGGER.info('Daemon worker stopped') -def start_daemon_worker(foreground: bool = False, profile_name: Union[str, None] = None) -> None: +def start_daemon_worker(foreground: bool = False, profile_name: str | None = None) -> None: """Start a daemon worker for the currently configured profile. :param foreground: If true, the logging will be configured to write to stdout, otherwise it will be configured to diff --git a/src/aiida/engine/launch.py b/src/aiida/engine/launch.py index 78e42df19b..943fc3230e 100644 --- a/src/aiida/engine/launch.py +++ b/src/aiida/engine/launch.py @@ -27,9 +27,9 @@ __all__ = ('await_processes', 'run', 'run_get_node', 'run_get_pk', 'submit') -TYPE_RUN_PROCESS = t.Union[Process, t.Type[Process], ProcessBuilder] +TYPE_RUN_PROCESS = Process | t.Type[Process] | ProcessBuilder # run can also be process function, but it is not clear what type this should be -TYPE_SUBMIT_PROCESS = t.Union[Process, t.Type[Process], ProcessBuilder] +TYPE_SUBMIT_PROCESS = Process | t.Type[Process] | ProcessBuilder LOGGER = AIIDA_LOGGER.getChild('engine.launch') diff --git a/src/aiida/engine/persistence.py b/src/aiida/engine/persistence.py index dc22f8f64c..d009ecd090 100644 --- a/src/aiida/engine/persistence.py +++ b/src/aiida/engine/persistence.py @@ -11,7 +11,7 @@ import importlib import logging import traceback -from typing import TYPE_CHECKING, Any, Hashable, Optional +from typing import TYPE_CHECKING, Any, Hashable import plumpy.loaders import plumpy.persistence @@ -68,7 +68,7 @@ def get_object_loader() -> ObjectLoader: class AiiDAPersister(plumpy.persistence.Persister): """Persister to take saved process instance states and persisting them to the database.""" - def save_checkpoint(self, process: 'Process', tag: Optional[str] = None): # type: ignore[override] + def save_checkpoint(self, process: 'Process', tag: str | None = None): # type: ignore[override] """Persist a Process instance. :param process: :class:`aiida.engine.Process` @@ -93,7 +93,7 @@ def save_checkpoint(self, process: 'Process', tag: Optional[str] = None): # typ return bundle - def load_checkpoint(self, pid: Hashable, tag: Optional[str] = None) -> plumpy.persistence.Bundle: + def load_checkpoint(self, pid: Hashable, tag: str | None = None) -> plumpy.persistence.Bundle: """Load a process from a persisted checkpoint by its process id. :param pid: the process id of the :class:`plumpy.Process` @@ -138,7 +138,7 @@ def get_process_checkpoints(self, pid: Hashable): :return: list of PersistedCheckpoint tuples with element containing the process id and optional checkpoint tag. """ - def delete_checkpoint(self, pid: Hashable, tag: Optional[str] = None) -> None: + def delete_checkpoint(self, pid: Hashable, tag: str | None = None) -> None: """Delete a persisted process checkpoint, where no error will be raised if the checkpoint does not exist. :param pid: the process id of the :class:`plumpy.Process` diff --git a/src/aiida/engine/processes/calcjobs/calcjob.py b/src/aiida/engine/processes/calcjobs/calcjob.py index eb2526185c..e915d6bd9a 100644 --- a/src/aiida/engine/processes/calcjobs/calcjob.py +++ b/src/aiida/engine/processes/calcjobs/calcjob.py @@ -15,7 +15,12 @@ import json import os import shutil -from typing import Any, Dict, Hashable, Optional, Type, Union +from typing import ( + Any, + Dict, + Hashable, + Type, +) import plumpy.ports import plumpy.process_states @@ -39,7 +44,7 @@ __all__ = ('CalcJob',) -def validate_calc_job(inputs: Any, ctx: PortNamespace) -> Optional[str]: +def validate_calc_job(inputs: Any, ctx: PortNamespace) -> str | None: """Validate the entire set of inputs passed to the `CalcJob` constructor. Reasons that will cause this validation to raise an `InputValidationError`: @@ -114,7 +119,7 @@ def validate_calc_job(inputs: Any, ctx: PortNamespace) -> Optional[str]: return None -def validate_unstash_options(unstash_options: Any, _: Any) -> Optional[str]: +def validate_unstash_options(unstash_options: Any, _: Any) -> str | None: """Validate the ``unstash`` options.""" from aiida.common.datastructures import UnstashTargetMode @@ -138,7 +143,7 @@ def validate_unstash_options(unstash_options: Any, _: Any) -> Optional[str]: return None -def validate_stash_options(stash_options: Any, _: Any) -> Optional[str]: +def validate_stash_options(stash_options: Any, _: Any) -> str | None: """Validate the ``stash`` options.""" from aiida.common.datastructures import StashMode from aiida.transports.transport import has_magic @@ -196,7 +201,7 @@ def validate_stash_options(stash_options: Any, _: Any) -> Optional[str]: return None -def validate_monitors(monitors: Any, _: PortNamespace) -> Optional[str]: +def validate_monitors(monitors: Any, _: PortNamespace) -> str | None: """Validate the ``monitors`` input namespace.""" for key, monitor_node in monitors.items(): try: @@ -206,7 +211,7 @@ def validate_monitors(monitors: Any, _: PortNamespace) -> Optional[str]: return None -def validate_parser(parser_name: Any, _: PortNamespace) -> Optional[str]: +def validate_parser(parser_name: Any, _: PortNamespace) -> str | None: """Validate the parser. :return: string with error message in case the inputs are invalid @@ -221,7 +226,7 @@ def validate_parser(parser_name: Any, _: PortNamespace) -> Optional[str]: return None -def validate_additional_retrieve_list(additional_retrieve_list: Any, _: Any) -> Optional[str]: +def validate_additional_retrieve_list(additional_retrieve_list: Any, _: Any) -> str | None: """Validate the additional retrieve list. :return: string with error message in case the input is invalid. @@ -618,7 +623,7 @@ def on_terminated(self) -> None: super().on_terminated() @override - async def run(self) -> Union[plumpy.process_states.Stop, int, plumpy.process_states.Wait]: + async def run(self) -> plumpy.process_states.Stop | int | plumpy.process_states.Wait: """Run the calculation job. This means invoking the `presubmit` and storing the temporary folder in the node's repository. Then we move the @@ -810,7 +815,7 @@ def parse( self.logger.warning(msg) # The final exit code is that of the scheduler, unless the output parser returned one - exit_code: Optional[ExitCode] + exit_code: ExitCode | None if exit_code_retrieved is not None: exit_code = exit_code_retrieved else: @@ -834,7 +839,7 @@ def terminate(exit_code: ExitCode) -> ExitCode: """ return exit_code - def parse_scheduler_output(self, retrieved: orm.Node) -> Optional[ExitCode]: + def parse_scheduler_output(self, retrieved: orm.Node) -> ExitCode | None: """Parse the output of the scheduler if that functionality has been implemented for the plugin.""" computer = self.node.computer @@ -894,7 +899,7 @@ def parse_scheduler_output(self, retrieved: orm.Node) -> Optional[ExitCode]: return exit_code - def parse_retrieved_output(self, retrieved_temporary_folder: Optional[str] = None) -> Optional[ExitCode]: + def parse_retrieved_output(self, retrieved_temporary_folder: str | None = None) -> ExitCode | None: """Parse the retrieved data by calling the parser plugin if it was defined in the inputs.""" parser_class = self.node.get_parser_class() diff --git a/src/aiida/engine/processes/calcjobs/importer.py b/src/aiida/engine/processes/calcjobs/importer.py index f9012a6a87..b23ea39d2f 100644 --- a/src/aiida/engine/processes/calcjobs/importer.py +++ b/src/aiida/engine/processes/calcjobs/importer.py @@ -1,7 +1,7 @@ """Abstract utility class that helps to import calculation jobs completed outside of AiiDA.""" from abc import ABC, abstractmethod -from typing import Dict, Union +from typing import Dict from aiida.orm import Node, RemoteData @@ -18,7 +18,7 @@ class CalcJobImporter(ABC): @staticmethod @abstractmethod - def parse_remote_data(remote_data: RemoteData, **kwargs) -> Dict[str, Union[Node, Dict]]: + def parse_remote_data(remote_data: RemoteData, **kwargs) -> Dict[str, Node | Dict]: """Parse the input nodes from the files in the provided ``RemoteData``. :param remote_data: the remote data node containing the raw input files. diff --git a/src/aiida/engine/processes/calcjobs/manager.py b/src/aiida/engine/processes/calcjobs/manager.py index 21c77ff958..4682e8ad36 100644 --- a/src/aiida/engine/processes/calcjobs/manager.py +++ b/src/aiida/engine/processes/calcjobs/manager.py @@ -15,7 +15,13 @@ import contextvars import logging import time -from typing import TYPE_CHECKING, Dict, Hashable, Iterator, Optional, cast +from typing import ( + TYPE_CHECKING, + Dict, + Hashable, + Iterator, + cast, +) from aiida.common import lang from aiida.orm import AuthInfo @@ -44,7 +50,7 @@ class JobsList: See the :py:class:`~aiida.engine.processes.calcjobs.manager.JobManager` for example usage. """ - def __init__(self, authinfo: AuthInfo, transport_queue: 'TransportQueue', last_updated: Optional[float] = None): + def __init__(self, authinfo: AuthInfo, transport_queue: 'TransportQueue', last_updated: float | None = None): """Construct an instance for the given authinfo and transport queue. :param authinfo: The authinfo used to check the jobs list @@ -62,7 +68,7 @@ def __init__(self, authinfo: AuthInfo, transport_queue: 'TransportQueue', last_u self._jobs_cache: Dict[str, 'JobInfo'] = {} self._job_update_requests: Dict[str, asyncio.Future] = {} # Mapping: {job_id: Future} self._last_updated = last_updated - self._update_handle: Optional[asyncio.TimerHandle] = None + self._update_handle: asyncio.TimerHandle | None = None self._polling_jobs: frozenset[str] = frozenset() @property @@ -82,7 +88,7 @@ def get_minimum_update_interval(self) -> float: return self._authinfo.computer.get_minimum_job_poll_interval() @property - def last_updated(self) -> Optional[float]: + def last_updated(self) -> float | None: """Get the timestamp of when the list was last updated as produced by `time.time()` :return: The last update point @@ -215,7 +221,7 @@ async def updating() -> None: ) @staticmethod - def _has_job_state_changed(old: Optional['JobInfo'], new: Optional['JobInfo']) -> bool: + def _has_job_state_changed(old: 'JobInfo' | None, new: 'JobInfo' | None) -> bool: """Return whether the states `old` and `new` are different.""" if old is None and new is None: return False diff --git a/src/aiida/engine/processes/calcjobs/tasks.py b/src/aiida/engine/processes/calcjobs/tasks.py index ce6569961e..afb42ab14e 100644 --- a/src/aiida/engine/processes/calcjobs/tasks.py +++ b/src/aiida/engine/processes/calcjobs/tasks.py @@ -14,7 +14,7 @@ import functools import logging import tempfile -from typing import TYPE_CHECKING, Any, Callable, Optional +from typing import TYPE_CHECKING, Any, Callable import plumpy import plumpy.futures @@ -479,9 +479,9 @@ class Waiting(plumpy.process_states.Waiting): def __init__( self, process: 'CalcJob', - done_callback: Optional[Callable[..., Any]], - msg: Optional[str] = None, - data: Optional[Any] = None, + done_callback: Callable[..., Any] | None, + msg: str | None = None, + data: Any | None = None, ): """:param process: The process this state belongs to""" super().__init__(process, done_callback, msg, data) @@ -739,7 +739,7 @@ def parse( ProcessState.RUNNING, self.process.parse, retrieved_temporary_folder, exit_code ) - def interrupt(self, reason: Any) -> Optional[plumpy.futures.Future]: # type: ignore[override] + def interrupt(self, reason: Any) -> plumpy.futures.Future | None: # type: ignore[override] """Interrupt the `Waiting` state by calling interrupt on the transport task `InterruptableFuture`.""" if self._task is not None: self._task.interrupt(reason) diff --git a/src/aiida/engine/processes/control.py b/src/aiida/engine/processes/control.py index 447dbf4f3c..a9bcc0e44b 100644 --- a/src/aiida/engine/processes/control.py +++ b/src/aiida/engine/processes/control.py @@ -206,7 +206,7 @@ def _perform_actions( action: t.Callable, infinitive: str, present: str, - timeout: t.Optional[float] = None, + timeout: float | None = None, **kwargs: t.Any, ) -> None: """Perform an action on a list of processes. @@ -242,7 +242,7 @@ def _resolve_futures( futures: dict[concurrent.futures.Future, ProcessNode], infinitive: str, present: str, - timeout: t.Optional[float] = None, + timeout: float | None = None, ) -> None: """Process a mapping of futures representing an action on an active process. diff --git a/src/aiida/engine/processes/exit_code.py b/src/aiida/engine/processes/exit_code.py index 637ea59f70..2fd7078e4e 100644 --- a/src/aiida/engine/processes/exit_code.py +++ b/src/aiida/engine/processes/exit_code.py @@ -8,7 +8,7 @@ ########################################################################### """A namedtuple and namespace for ExitCodes that can be used to exit from Processes.""" -from typing import NamedTuple, Optional, Union +from typing import NamedTuple from aiida.common.extendeddicts import AttributeDict @@ -28,7 +28,7 @@ class ExitCode(NamedTuple): """ status: int = 0 - message: Optional[str] = None + message: str | None = None invalidates_cache: bool = False def format(self, **kwargs: str) -> 'ExitCode': @@ -55,7 +55,7 @@ class ExitCodesNamespace(AttributeDict): `ExitCode` that needs to be retrieved or the key in the collection. """ - def __call__(self, identifier: Union[int, str]) -> ExitCode: + def __call__(self, identifier: int | str) -> ExitCode: """Return a specific exit code identified by either its exit status or label. :param identifier: the identifier of the exit code. If the type is integer, it will be interpreted as the exit diff --git a/src/aiida/engine/processes/functions.py b/src/aiida/engine/processes/functions.py index 08441cddcc..2fc7535378 100644 --- a/src/aiida/engine/processes/functions.py +++ b/src/aiida/engine/processes/functions.py @@ -22,6 +22,7 @@ from typing import TYPE_CHECKING import docstring_parser +from typing_extensions import ParamSpec from aiida.common.lang import override from aiida.manage import get_manager @@ -43,20 +44,8 @@ from .process import Process from .process_spec import ProcessSpec -try: - UnionType = types.UnionType -except AttributeError: - # This type is not available for Python 3.9 and older - UnionType = None # type: ignore[assignment,misc] - -# Fallback for Python 3.9 and older -from typing_extensions import ParamSpec - -try: - get_annotations = inspect.get_annotations -except AttributeError: - # This is the backport for Python 3.9 and older - from get_annotations import get_annotations # type: ignore[no-redef] +UnionType = types.UnionType +get_annotations = inspect.get_annotations if TYPE_CHECKING: from .exit_code import ExitCode @@ -316,8 +305,6 @@ def get_type_from_annotation(annotation): inferred_valid_type = (get_type_from_annotation(annotation),) elif t.get_origin(annotation) is t.Union or t.get_origin(annotation) is UnionType: inferred_valid_type = tuple(get_type_from_annotation(valid_type) for valid_type in t.get_args(annotation)) - elif t.get_origin(annotation) is t.Optional: - inferred_valid_type = (t.get_args(annotation),) return tuple(valid_type for valid_type in inferred_valid_type if valid_type is not None) diff --git a/src/aiida/engine/processes/futures.py b/src/aiida/engine/processes/futures.py index 096c11b277..36ab2f2a9e 100644 --- a/src/aiida/engine/processes/futures.py +++ b/src/aiida/engine/processes/futures.py @@ -9,7 +9,6 @@ """Futures that can poll or receive broadcasted messages while waiting for a task to be completed.""" import asyncio -from typing import Optional, Union import kiwipy @@ -26,9 +25,9 @@ class ProcessFuture(asyncio.Future): def __init__( self, pk: int, - loop: Optional[asyncio.AbstractEventLoop] = None, - poll_interval: Union[None, int, float] = None, - communicator: Optional[kiwipy.Communicator] = None, + loop: asyncio.AbstractEventLoop | None = None, + poll_interval: None | int | float = None, + communicator: kiwipy.Communicator | None = None, ): """Construct a future for a process node being finished. @@ -79,7 +78,7 @@ def cleanup(self) -> None: self._communicator = None self._broadcast_identifier = None - async def _poll_process(self, node: Node, poll_interval: Union[int, float]) -> None: + async def _poll_process(self, node: Node, poll_interval: int | float) -> None: """Poll whether the process node has reached a terminal state.""" print('polling', node) while not self.done() and not node.is_terminated: diff --git a/src/aiida/engine/processes/ports.py b/src/aiida/engine/processes/ports.py index 915859f6bb..4203391872 100644 --- a/src/aiida/engine/processes/ports.py +++ b/src/aiida/engine/processes/ports.py @@ -13,7 +13,7 @@ import re import warnings from collections.abc import Mapping -from typing import Any, Callable, Dict, Optional, Sequence +from typing import Any, Callable, Dict, Sequence from plumpy import ports from plumpy.ports import breadcrumbs_to_port @@ -258,7 +258,7 @@ def validate_port_name(port_name: str) -> None: if any(len(entry) > PORT_NAME_MAX_CONSECUTIVE_UNDERSCORES for entry in consecutive_underscores): raise ValueError(f'invalid port name `{port_name}`: more than two consecutive underscores') - def serialize(self, mapping: Optional[Dict[str, Any]], breadcrumbs: Sequence[str] = ()) -> Optional[Dict[str, Any]]: + def serialize(self, mapping: Dict[str, Any] | None, breadcrumbs: Sequence[str] = ()) -> Dict[str, Any] | None: """Serialize the given mapping onto this `Portnamespace`. It will recursively call this function on any nested `PortNamespace` or the serialize function on any `Ports`. diff --git a/src/aiida/engine/processes/process.py b/src/aiida/engine/processes/process.py index b16bd95826..54500c075c 100644 --- a/src/aiida/engine/processes/process.py +++ b/src/aiida/engine/processes/process.py @@ -27,10 +27,8 @@ Iterator, List, MutableMapping, - Optional, Tuple, Type, - Union, cast, ) from uuid import UUID @@ -157,10 +155,10 @@ def get_or_create_db_record(cls) -> orm.ProcessNode: def __init__( self, - inputs: Optional[Dict[str, Any]] = None, - logger: Optional[logging.Logger] = None, - runner: Optional['Runner'] = None, - parent_pid: Optional[int] = None, + inputs: Dict[str, Any] | None = None, + logger: logging.Logger | None = None, + runner: 'Runner' | None = None, + parent_pid: int | None = None, enable_persistence: bool = True, ) -> None: """Process constructor. @@ -184,7 +182,7 @@ def __init__( communicator=self._runner.communicator, ) - self._node: Optional[orm.ProcessNode] = None + self._node: orm.ProcessNode | None = None self._parent_pid = parent_pid self._enable_persistence = enable_persistence if self._enable_persistence and self.runner.persister is None: @@ -284,7 +282,7 @@ def _save_checkpoint(self) -> None: @override def save_instance_state( - self, out_state: MutableMapping[str, Any], save_context: Optional[plumpy.persistence.LoadSaveContext] + self, out_state: MutableMapping[str, Any], save_context: plumpy.persistence.LoadSaveContext | None ) -> None: """Save instance state. @@ -297,7 +295,7 @@ def save_instance_state( out_state[self.SaveKeys.CALC_ID.value] = self.pid - def get_provenance_inputs_iterator(self) -> Iterator[Tuple[str, Union[InputPort, PortNamespace]]]: + def get_provenance_inputs_iterator(self) -> Iterator[Tuple[str, InputPort | PortNamespace]]: """Get provenance input iterator. :rtype: filter @@ -332,7 +330,7 @@ def load_instance_state( self.node.logger.info(f'Loaded process<{self.node.pk}> from saved state') - def kill(self, msg_text: str | None = None, force_kill: bool = False) -> Union[bool, plumpy.futures.Future]: + def kill(self, msg_text: str | None = None, force_kill: bool = False) -> bool | plumpy.futures.Future: """Kill the process and all the children calculations it called :param msg: message @@ -410,7 +408,7 @@ async def _launch_task(self, coro, *args, **kwargs): from aiida.engine.utils import interruptable_task - self._task: Union[InterruptableFuture, None] + self._task: InterruptableFuture | None task_fn = functools.partial(coro, *args, **kwargs) try: @@ -459,7 +457,7 @@ def on_create(self) -> None: self._pid = self._create_and_setup_db_record() @override - def on_entered(self, from_state: Optional[plumpy.process_states.State]) -> None: + def on_entered(self, from_state: plumpy.process_states.State | None) -> None: """After entering a new state, save a checkpoint and update the latest process state change timestamp.""" from plumpy import ProcessState @@ -520,7 +518,7 @@ def on_except(self, exc_info: Tuple[Any, Exception, TracebackType]) -> None: self.report(''.join(traceback.format_exception(*exc_info))) @override - def on_finish(self, result: Union[int, ExitCode, None], successful: bool) -> None: + def on_finish(self, result: int | ExitCode | None, successful: bool) -> None: """Set the finish status on the process node. :param result: result of the process @@ -546,7 +544,7 @@ def on_finish(self, result: Union[int, ExitCode, None], successful: bool) -> Non ) @override - def on_paused(self, msg: Optional[str] = None) -> None: + def on_paused(self, msg: str | None = None) -> None: """The Process was paused so set the paused attribute on the process node :param msg: message @@ -576,7 +574,7 @@ def on_output_emitting(self, output_port: str, value: Any) -> None: if isinstance(output_port, OutputPort) and not isinstance(value, orm.Data): raise TypeError(f'Processes can only return `orm.Data` instances as output, got {value.__class__}') - def set_status(self, status: Optional[str]) -> None: + def set_status(self, status: str | None) -> None: """The status of the Process is about to be changed, so we reflect this is in node's attribute proxy. :param status: the status message @@ -599,7 +597,7 @@ def runner(self) -> 'Runner': """Get process runner.""" return self._runner - def get_parent_calc(self) -> Optional[orm.ProcessNode]: + def get_parent_calc(self) -> orm.ProcessNode | None: """Get the parent process node :return: the parent process node if there is one @@ -647,7 +645,7 @@ def report(self, msg: str, *args, **kwargs) -> None: message = f'[{self.node.pk}|{self.__class__.__name__}|{inspect.stack()[1][3]}]: {msg}' self.logger.log(LOG_LEVEL_REPORT, message, *args, **kwargs) - def _create_and_setup_db_record(self) -> Union[int, UUID]: + def _create_and_setup_db_record(self) -> int | UUID: """Create and setup the database record for this process :return: the uuid or pk of the process @@ -815,9 +813,9 @@ def _setup_inputs(self) -> None: def _filter_serializable_metadata( self, - port: Union[None, InputPort, PortNamespace], + port: None | InputPort | PortNamespace, port_value: Any, - ) -> Union[Any, None]: + ) -> Any | None: """Return the inputs that correspond to ports with ``is_metadata=True`` and that are JSON serializable. The function is called recursively for any port namespaces. @@ -880,7 +878,7 @@ def _flat_outputs(self) -> Dict[str, Any]: def _flatten_inputs( self, - port: Union[None, InputPort, PortNamespace], + port: None | InputPort | PortNamespace, port_value: Any, parent_name: str = '', separator: str = PORT_NAMESPACE_SEPARATOR, @@ -906,7 +904,7 @@ def _flatten_inputs( prefixed_key = parent_name + separator + name if parent_name else name try: - nested_port = cast(Union[InputPort, PortNamespace], port[name]) if port else None + nested_port = cast(InputPort | PortNamespace, port[name]) if port else None except (KeyError, TypeError): nested_port = None @@ -923,7 +921,7 @@ def _flatten_inputs( def _flatten_outputs( self, - port: Union[None, OutputPort, PortNamespace], + port: None | OutputPort | PortNamespace, port_value: Any, parent_name: str = '', separator: str = PORT_NAMESPACE_SEPARATOR, @@ -947,7 +945,7 @@ def _flatten_outputs( prefixed_key = parent_name + separator + name if parent_name else name try: - nested_port = cast(Union[OutputPort, PortNamespace], port[name]) if port else None + nested_port = cast(OutputPort | PortNamespace, port[name]) if port else None except (KeyError, TypeError): nested_port = None @@ -961,7 +959,7 @@ def _flatten_outputs( return [] def exposed_inputs( - self, process_class: Type['Process'], namespace: Optional[str] = None, agglomerate: bool = True + self, process_class: Type['Process'], namespace: str | None = None, agglomerate: bool = True ) -> AttributeDict: """Gather a dictionary of the inputs that were exposed for a given Process class under an optional namespace. @@ -1003,7 +1001,7 @@ def exposed_outputs( self, node: orm.ProcessNode, process_class: Type['Process'], - namespace: Optional[str] = None, + namespace: str | None = None, agglomerate: bool = True, ) -> AttributeDict: """Return the outputs which were exposed from the ``process_class`` and emitted by the specific ``node`` @@ -1049,7 +1047,7 @@ def exposed_outputs( return AttributeDict(result) @staticmethod - def _get_namespace_list(namespace: Optional[str] = None, agglomerate: bool = True) -> List[Optional[str]]: + def _get_namespace_list(namespace: str | None = None, agglomerate: bool = True) -> List[str | None]: """Get the list of namespaces in a given namespace. :param namespace: name space @@ -1062,7 +1060,7 @@ def _get_namespace_list(namespace: Optional[str] = None, agglomerate: bool = Tru if not agglomerate: return [namespace] - namespace_list: List[Optional[str]] = [None] + namespace_list: List[str | None] = [None] if namespace is not None: split_ns = namespace.split('.') namespace_list.extend(['.'.join(split_ns[:i]) for i in range(1, len(split_ns) + 1)]) diff --git a/src/aiida/engine/processes/process_spec.py b/src/aiida/engine/processes/process_spec.py index 4d1464f076..03de816cb4 100644 --- a/src/aiida/engine/processes/process_spec.py +++ b/src/aiida/engine/processes/process_spec.py @@ -8,8 +8,6 @@ ########################################################################### """AiiDA specific implementation of plumpy's ProcessSpec.""" -from typing import Optional - import plumpy.process_spec from aiida.orm import Dict @@ -100,10 +98,10 @@ class CalcJobProcessSpec(ProcessSpec): def __init__(self) -> None: super().__init__() - self._default_output_node: Optional[str] = None + self._default_output_node: str | None = None @property - def default_output_node(self) -> Optional[str]: + def default_output_node(self) -> str | None: return self._default_output_node @default_output_node.setter diff --git a/src/aiida/engine/processes/workchains/awaitable.py b/src/aiida/engine/processes/workchains/awaitable.py index 044627a5c2..ea01480ed3 100644 --- a/src/aiida/engine/processes/workchains/awaitable.py +++ b/src/aiida/engine/processes/workchains/awaitable.py @@ -9,7 +9,6 @@ """Enums and function for the awaitables of Processes.""" from enum import Enum -from typing import Union from plumpy.utils import AttributesDict @@ -35,7 +34,7 @@ class AwaitableAction(Enum): APPEND = 'append' -def construct_awaitable(target: Union[Awaitable, ProcessNode]) -> Awaitable: +def construct_awaitable(target: Awaitable | ProcessNode) -> Awaitable: """Construct an instance of the Awaitable class that will contain the information related to the action to be taken with respect to the context once the awaitable object is completed. diff --git a/src/aiida/engine/processes/workchains/context.py b/src/aiida/engine/processes/workchains/context.py index e837ad8c18..97ada22363 100644 --- a/src/aiida/engine/processes/workchains/context.py +++ b/src/aiida/engine/processes/workchains/context.py @@ -8,8 +8,6 @@ ########################################################################### """Convenience functions to add awaitables to the Context of a WorkChain.""" -from typing import Union - from aiida.orm import ProcessNode from .awaitable import Awaitable, AwaitableAction, construct_awaitable @@ -19,7 +17,7 @@ ToContext = dict -def assign_(target: Union[Awaitable, ProcessNode]) -> Awaitable: +def assign_(target: Awaitable | ProcessNode) -> Awaitable: """Convenience function that will construct an Awaitable for a given class instance with the context action set to ASSIGN. When the awaitable target is completed it will be assigned to the context for a key that is to be defined later @@ -34,7 +32,7 @@ def assign_(target: Union[Awaitable, ProcessNode]) -> Awaitable: return awaitable -def append_(target: Union[Awaitable, ProcessNode]) -> Awaitable: +def append_(target: Awaitable | ProcessNode) -> Awaitable: """Convenience function that will construct an Awaitable for a given class instance with the context action set to APPEND. When the awaitable target is completed it will be appended to a list in the context for a key that is to be defined later diff --git a/src/aiida/engine/processes/workchains/restart.py b/src/aiida/engine/processes/workchains/restart.py index b62c059130..43cef8d13b 100644 --- a/src/aiida/engine/processes/workchains/restart.py +++ b/src/aiida/engine/processes/workchains/restart.py @@ -13,7 +13,15 @@ import functools from inspect import getmembers from types import FunctionType -from typing import TYPE_CHECKING, Any, Dict, List, Mapping, Optional, Tuple, Type, Union +from typing import ( + TYPE_CHECKING, + Any, + Dict, + List, + Mapping, + Tuple, + Type, +) from aiida import orm from aiida.common import AttributeDict @@ -46,8 +54,8 @@ def validate_on_unhandled_failure(value: None | orm.Str, _) -> None | str: def validate_handler_overrides( - process_class: type['BaseRestartWorkChain'], handler_overrides: Optional[orm.Dict], ctx: 'PortNamespace' -) -> Optional[str]: + process_class: type['BaseRestartWorkChain'], handler_overrides: orm.Dict | None, ctx: 'PortNamespace' +) -> str | None: """Validator for the ``handler_overrides`` input port of the ``BaseRestartWorkChain``. The ``handler_overrides`` should be a dictionary where keys are strings that are the name of a process handler, i.e. @@ -142,7 +150,7 @@ def handle_problem(self, node): `inspect_process`. Refer to their respective documentation for details. """ - _process_class: Optional[Type['Process']] = None + _process_class: Type['Process'] | None = None _considered_handlers_extra = 'considered_handlers' @property @@ -251,7 +259,7 @@ def run_process(self) -> ToContext: return ToContext(children=append_(node)) - def inspect_process(self) -> Optional['ExitCode']: + def inspect_process(self) -> 'ExitCode' | None: """Analyse the results of the previous process and call the handlers when necessary. If the process is excepted or killed, the work chain will abort. Otherwise any attached handlers will be called @@ -430,7 +438,7 @@ def get_outputs(self, node) -> Mapping[str, orm.Node]: """ return self.exposed_outputs(node, self.process_class) - def results(self) -> Optional['ExitCode']: + def results(self) -> 'ExitCode' | None: """Attach the outputs specified in the output specification from the last completed process.""" node = self.ctx.children[self.ctx.iteration - 1] @@ -472,7 +480,7 @@ def __init__(self, *args, **kwargs) -> None: self.process_class @classmethod - def is_process_handler(cls, process_handler_name: Union[str, FunctionType]) -> bool: + def is_process_handler(cls, process_handler_name: str | FunctionType) -> bool: """Return whether the given method name corresponds to a process handler of this class. :param process_handler_name: string name of the instance method diff --git a/src/aiida/engine/processes/workchains/utils.py b/src/aiida/engine/processes/workchains/utils.py index 44bc47304e..63e01e6a18 100644 --- a/src/aiida/engine/processes/workchains/utils.py +++ b/src/aiida/engine/processes/workchains/utils.py @@ -11,7 +11,7 @@ from functools import partial from inspect import getfullargspec from types import FunctionType -from typing import List, NamedTuple, Optional, Union +from typing import List, NamedTuple from wrapt import decorator @@ -43,10 +43,10 @@ class ProcessHandlerReport(NamedTuple): def process_handler( - wrapped: Optional[FunctionType] = None, + wrapped: FunctionType | None = None, *, priority: int = 0, - exit_codes: Union[None, ExitCode, List[ExitCode]] = None, + exit_codes: None | ExitCode | List[ExitCode] = None, enabled: bool = True, ) -> FunctionType: """Decorator to register a :class:`~aiida.engine.BaseRestartWorkChain` instance method as a process handler. diff --git a/src/aiida/engine/runners.py b/src/aiida/engine/runners.py index b19821b2e7..403bd1b025 100644 --- a/src/aiida/engine/runners.py +++ b/src/aiida/engine/runners.py @@ -16,7 +16,14 @@ import signal import threading import uuid -from typing import Any, Callable, Dict, NamedTuple, Optional, Tuple, Type, Union +from typing import ( + Any, + Callable, + Dict, + NamedTuple, + Tuple, + Type, +) import kiwipy from plumpy.communications import wrap_communicator @@ -47,26 +54,26 @@ class ResultAndPk(NamedTuple): pk: int | None -TYPE_RUN_PROCESS = Union[Process, Type[Process], ProcessBuilder] +TYPE_RUN_PROCESS = Process | Type[Process] | ProcessBuilder # run can also be process function, but it is not clear what type this should be -TYPE_SUBMIT_PROCESS = Union[Process, Type[Process], ProcessBuilder] +TYPE_SUBMIT_PROCESS = Process | Type[Process] | ProcessBuilder class Runner: """Class that can launch processes by running in the current interpreter or by submitting them to the daemon.""" - _persister: Optional[Persister] = None - _communicator: Optional[kiwipy.Communicator] = None - _controller: Optional[RemoteProcessThreadController] = None + _persister: Persister | None = None + _communicator: kiwipy.Communicator | None = None + _controller: RemoteProcessThreadController | None = None _closed: bool = False def __init__( self, - poll_interval: Union[int, float] = 0, - loop: Optional[asyncio.AbstractEventLoop] = None, - communicator: Optional[kiwipy.Communicator] = None, + poll_interval: int | float = 0, + loop: asyncio.AbstractEventLoop | None = None, + communicator: kiwipy.Communicator | None = None, broker_submit: bool = False, - persister: Optional[Persister] = None, + persister: Persister | None = None, ): """Construct a new runner. @@ -113,12 +120,12 @@ def transport(self) -> transports.TransportQueue: return self._transport @property - def persister(self) -> Optional[Persister]: + def persister(self) -> Persister | None: """Get the persister used by this runner.""" return self._persister @property - def communicator(self) -> Optional[kiwipy.Communicator]: + def communicator(self) -> kiwipy.Communicator | None: """Get the communicator used by this runner.""" return self._communicator @@ -131,7 +138,7 @@ def job_manager(self) -> manager.JobManager: return self._job_manager @property - def controller(self) -> Optional[RemoteProcessThreadController]: + def controller(self) -> RemoteProcessThreadController | None: """Get the controller used by this runner.""" return self._controller diff --git a/src/aiida/engine/transports.py b/src/aiida/engine/transports.py index e71b4ab102..f9da89a28d 100644 --- a/src/aiida/engine/transports.py +++ b/src/aiida/engine/transports.py @@ -13,7 +13,15 @@ import contextvars import logging import traceback -from typing import TYPE_CHECKING, AsyncIterator, Awaitable, Dict, Hashable, Optional +from typing import ( + TYPE_CHECKING, + AsyncIterator, + Awaitable, + Dict, + Hashable, +) + +from plumpy import get_or_create_event_loop from aiida.orm import AuthInfo @@ -43,9 +51,9 @@ class TransportQueue: be minimised. """ - def __init__(self, loop: Optional[asyncio.AbstractEventLoop] = None): - """:param loop: An asyncio event, will use `asyncio.get_event_loop()` if not supplied""" - self._loop = loop if loop is not None else asyncio.get_event_loop() + def __init__(self, loop: asyncio.AbstractEventLoop | None = None): + """:param loop: An asyncio event, will use `get_or_create_event_loop()` if not supplied""" + self._loop = loop if loop else get_or_create_event_loop() self._transport_requests: Dict[Hashable, TransportRequest] = {} @property diff --git a/src/aiida/engine/utils.py b/src/aiida/engine/utils.py index 5fc4335aa4..43123b82c5 100644 --- a/src/aiida/engine/utils.py +++ b/src/aiida/engine/utils.py @@ -15,7 +15,16 @@ import inspect import logging from datetime import datetime -from typing import TYPE_CHECKING, Any, Awaitable, Callable, Iterator, List, Optional, Tuple, Type, Union +from typing import ( + TYPE_CHECKING, + Any, + Awaitable, + Callable, + Iterator, + List, + Tuple, + Type, +) if TYPE_CHECKING: from aiida.orm import ProcessNode @@ -51,7 +60,7 @@ def prepare_inputs(inputs: dict[str, Any] | None = None, **kwargs: Any) -> dict[ def instantiate_process( - runner: 'Runner', process: Union['Process', Type['Process'], 'ProcessBuilder'], **inputs + runner: 'Runner', process: 'Process' | Type['Process'] | 'ProcessBuilder', **inputs ) -> 'Process': """Return an instance of the process with the given inputs. The function can deal with various types of the `process`: @@ -120,7 +129,7 @@ async def with_interrupt(self, coro: Awaitable[Any]) -> Any: def interruptable_task( - coro: Callable[[InterruptableFuture], Awaitable[Any]], loop: Optional[asyncio.AbstractEventLoop] = None + coro: Callable[[InterruptableFuture], Awaitable[Any]], loop: asyncio.AbstractEventLoop | None = None ) -> InterruptableFuture: """Turn the given coroutine into an interruptable task by turning it into an InterruptableFuture and returning it. @@ -175,10 +184,10 @@ async def wrapper(*args, **kwargs): async def exponential_backoff_retry( fct: Callable[..., Any], - initial_interval: Union[int, float] = 10.0, + initial_interval: int | float = 10.0, max_attempts: int = 5, - logger: Optional[logging.Logger] = None, - ignore_exceptions: Union[None, Type[Exception], Tuple[Type[Exception], ...]] = None, + logger: logging.Logger | None = None, + ignore_exceptions: None | Type[Exception] | Tuple[Type[Exception], ...] = None, ) -> Any: """Coroutine to call a function, recalling it with an exponential backoff in the case of an exception @@ -302,7 +311,7 @@ def set_process_state_change_timestamp(node: 'ProcessNode') -> None: ) -def get_process_state_change_timestamp(process_type: Optional[str] = None) -> Optional[datetime]: +def get_process_state_change_timestamp(process_type: str | None = None) -> datetime | None: """Get the global setting that reflects the last time a process of the given process type changed its state. The returned value will be the corresponding timestamp or None if the setting does not exist. diff --git a/src/aiida/manage/configuration/__init__.py b/src/aiida/manage/configuration/__init__.py index f4bbc263c6..6d94b6f655 100644 --- a/src/aiida/manage/configuration/__init__.py +++ b/src/aiida/manage/configuration/__init__.py @@ -6,9 +6,11 @@ # For further information on the license, see the LICENSE.txt file # # For further information please visit http://www.aiida.net # ########################################################################### -# ruff: noqa: E402 +# ruff: noqa: E402, I001 """Modules related to the configuration of an AiiDA instance.""" +from __future__ import annotations + # AUTO-GENERATED # fmt: off @@ -54,7 +56,7 @@ import os import warnings from contextlib import contextmanager -from typing import TYPE_CHECKING, Any, Optional +from typing import TYPE_CHECKING, Any from aiida.common.warnings import AiidaDeprecationWarning @@ -64,7 +66,7 @@ from .config import Config # global variables for aiida -CONFIG: Optional['Config'] = None +CONFIG: 'Config' | None = None def get_config_path(): @@ -151,7 +153,7 @@ def _merge_deprecated_cache_yaml(config, filepath): shutil.move(cache_path, cache_path_backup) -def load_profile(profile: Optional[str] = None, allow_switch=False) -> 'Profile': +def load_profile(profile: str | None = None, allow_switch=False) -> 'Profile': """Load a global profile, unloading any previously loaded profile. .. note:: if a profile is already loaded and no explicit profile is specified, nothing will be done @@ -168,7 +170,7 @@ def load_profile(profile: Optional[str] = None, allow_switch=False) -> 'Profile' return get_manager().load_profile(profile, allow_switch) -def get_profile() -> Optional['Profile']: +def get_profile() -> 'Profile' | None: """Return the currently loaded profile. :return: the globally loaded `Profile` instance or `None` @@ -201,9 +203,9 @@ def profile_context(profile: 'Profile | str | None' = None, allow_switch=False) def create_default_user( profile: Profile, email: str, - first_name: Optional[str] = None, - last_name: Optional[str] = None, - institution: Optional[str] = None, + first_name: str | None = None, + last_name: str | None = None, + institution: str | None = None, ) -> 'User': """Create a default user for the given profile. @@ -248,9 +250,9 @@ def create_profile( broker_config: 'dict[str, Any] | None' = None, name: str, email: str, - first_name: Optional[str] = None, - last_name: Optional[str] = None, - institution: Optional[str] = None, + first_name: str | None = None, + last_name: str | None = None, + institution: str | None = None, is_test_profile: bool = False, ) -> Profile: """Create a new profile, initialise its storage and create a default user. diff --git a/src/aiida/manage/configuration/config.py b/src/aiida/manage/configuration/config.py index 0aabe1eb3d..fe9f4540bd 100644 --- a/src/aiida/manage/configuration/config.py +++ b/src/aiida/manage/configuration/config.py @@ -9,8 +9,8 @@ """Module that defines the configuration file of an AiiDA instance and functions to create and load it. Despite the import of the annotations backport below which enables postponed type annotation evaluation as implemented -with PEP 563 (https://peps.python.org/pep-0563/), this is not compatible with ``pydantic`` for Python 3.9 and older ( -See https://github.com/pydantic/pydantic/issues/2678 for details). +with PEP 563 (https://peps.python.org/pep-0563/), this is not fully compatible with ``pydantic`` (see +https://github.com/pydantic/pydantic/issues/2678 for details). """ from __future__ import annotations @@ -21,7 +21,7 @@ import shutil import uuid from pathlib import Path -from typing import Any, Dict, List, Optional, Tuple +from typing import Any, Dict, List, Tuple from pydantic import ( BaseModel, @@ -116,9 +116,7 @@ class ProfileOptionsSchema(BaseModel, defer_build=True): 5, description='Maximum number of transport task attempts before a Process is Paused.' ) rmq__task_timeout: int = Field(10, description='Timeout in seconds for communications with RabbitMQ.') - storage__sandbox: Optional[str] = Field( - None, description='Absolute path to the directory to store sandbox folders.' - ) + storage__sandbox: str | None = Field(None, description='Absolute path to the directory to store sandbox folders.') caching__default_enabled: bool = Field(False, description='Enable calculation caching by default.') caching__enabled_for: List[str] = Field([], description='Calculation entry points to enable caching on.') caching__disabled_for: List[str] = Field([], description='Calculation entry points to disable caching on.') @@ -137,16 +135,14 @@ def validate_caching_identifier_pattern(cls, value: List[str]) -> List[str]: class GlobalOptionsSchema(ProfileOptionsSchema, defer_build=True): """Schema for the global options of an AiiDA instance.""" - autofill__user__email: Optional[str] = Field( - None, description='Default user email to use when creating new profiles.' - ) - autofill__user__first_name: Optional[str] = Field( + autofill__user__email: str | None = Field(None, description='Default user email to use when creating new profiles.') + autofill__user__first_name: str | None = Field( None, description='Default user first name to use when creating new profiles.' ) - autofill__user__last_name: Optional[str] = Field( + autofill__user__last_name: str | None = Field( None, description='Default user last name to use when creating new profiles.' ) - autofill__user__institution: Optional[str] = Field( + autofill__user__institution: str | None = Field( None, description='Default user institution to use when creating new profiles.' ) rest_api__profile_switching: bool = Field( @@ -185,9 +181,9 @@ class ProfileSchema(BaseModel, defer_build=True): uuid: str = Field(description='A UUID that uniquely identifies the profile.', default_factory=uuid.uuid4) storage: ProfileStorageConfig process_control: ProcessControlConfig - default_user_email: Optional[str] = None + default_user_email: str | None = None test_profile: bool = False - options: Optional[ProfileOptionsSchema] = None + options: ProfileOptionsSchema | None = None @field_serializer('uuid') def serialize_dt(self, value: uuid.UUID, _info): @@ -197,10 +193,10 @@ def serialize_dt(self, value: uuid.UUID, _info): class ConfigSchema(BaseModel, defer_build=True): """Schema for the configuration of an AiiDA instance.""" - CONFIG_VERSION: Optional[ConfigVersionSchema] = None - profiles: Optional[dict[str, ProfileSchema]] = None - options: Optional[GlobalOptionsSchema] = None - default_profile: Optional[str] = None + CONFIG_VERSION: ConfigVersionSchema | None = None + profiles: dict[str, ProfileSchema] | None = None + options: GlobalOptionsSchema | None = None + default_profile: str | None = None class Config: @@ -274,7 +270,7 @@ def _backup(cls, filepath): return filepath_backup @staticmethod - def validate(config: dict, filepath: Optional[str] = None): + def validate(config: dict, filepath: str | None = None): """Validate a configuration dictionary.""" try: ConfigSchema(**config) @@ -433,7 +429,7 @@ def validate_profile(self, name): if name not in self.profile_names: raise exceptions.ProfileConfigurationError(f'profile `{name}` does not exist') - def get_profile(self, name: Optional[str] = None) -> Profile: + def get_profile(self, name: str | None = None) -> Profile: """Return the profile for the given name or the default one if not specified. :return: the profile instance or None if it does not exist @@ -712,7 +708,7 @@ def get_option(self, option_name, scope=None, default=True): return value - def get_options(self, scope: Optional[str] = None) -> Dict[str, Tuple[Option, str, Any]]: + def get_options(self, scope: str | None = None) -> Dict[str, Tuple[Option, str, Any]]: """Return a dictionary of all option values and their source ('profile', 'global', or 'default'). :param scope: the profile name or globally if not specified diff --git a/src/aiida/manage/configuration/migrations/migrations.py b/src/aiida/manage/configuration/migrations/migrations.py index 0b2a316c6d..0774d638aa 100644 --- a/src/aiida/manage/configuration/migrations/migrations.py +++ b/src/aiida/manage/configuration/migrations/migrations.py @@ -8,7 +8,13 @@ ########################################################################### """Define the current configuration version and migrations.""" -from typing import Any, Dict, Iterable, Optional, Protocol, Type +from typing import ( + Any, + Dict, + Iterable, + Protocol, + Type, +) from aiida.common import exceptions from aiida.common.log import AIIDA_LOGGER @@ -475,7 +481,7 @@ def downgrade_config( return config -def check_and_migrate_config(config, filepath: Optional[str] = None): +def check_and_migrate_config(config, filepath: str | None = None): """Checks if the config needs to be migrated, and performs the migration if needed. :param config: the configuration dictionary @@ -488,7 +494,7 @@ def check_and_migrate_config(config, filepath: Optional[str] = None): return config -def config_needs_migrating(config, filepath: Optional[str] = None): +def config_needs_migrating(config, filepath: str | None = None): """Checks if the config needs to be migrated. If the oldest compatible version of the configuration is higher than the current configuration version defined diff --git a/src/aiida/manage/configuration/profile.py b/src/aiida/manage/configuration/profile.py index 5dc459a823..42c319ae8f 100644 --- a/src/aiida/manage/configuration/profile.py +++ b/src/aiida/manage/configuration/profile.py @@ -16,7 +16,14 @@ from copy import deepcopy from datetime import datetime from pathlib import Path -from typing import TYPE_CHECKING, Any, Dict, List, Mapping, Optional, Type, Union +from typing import ( + TYPE_CHECKING, + Any, + Dict, + List, + Mapping, + Type, +) from aiida.common import exceptions @@ -87,12 +94,12 @@ def uuid(self, value: str) -> None: self._attributes[self.KEY_UUID] = value @property - def default_user_email(self) -> Optional[str]: + def default_user_email(self) -> str | None: """Return the default user email.""" return self._attributes.get(self.KEY_DEFAULT_USER_EMAIL, None) @default_user_email.setter - def default_user_email(self, value: Optional[str]) -> None: + def default_user_email(self, value: str | None) -> None: """Set the default user email.""" self._attributes[self.KEY_DEFAULT_USER_EMAIL] = value @@ -213,8 +220,7 @@ def repository_path(self) -> pathlib.Path: :return: absolute filepath of the profile's file repository """ - from urllib.parse import urlparse - from urllib.request import url2pathname + from urllib.parse import unquote, urlparse from aiida.common.warnings import warn_deprecation @@ -228,10 +234,10 @@ def repository_path(self) -> pathlib.Path: if parts.scheme != 'file': raise exceptions.ConfigurationError('invalid repository protocol, only the local `file://` is supported') - if not os.path.isabs(url2pathname(parts.path)): + if not os.path.isabs(unquote(parts.path)): raise exceptions.ConfigurationError('invalid repository URI: the path has to be absolute') - return pathlib.Path(os.path.expanduser(url2pathname(parts.path))) + return pathlib.Path(os.path.expanduser(unquote(parts.path))) @property def filepaths(self): @@ -267,20 +273,20 @@ def filepaths(self): def dump( self, - output_path: Optional[Union[str, Path]] = None, + output_path: str | Path | None = None, # Dump mode options dry_run: bool = False, overwrite: bool = False, # Scope options all_entries: bool = False, - groups: Optional[Union[List[str], List[Group]]] = None, - user: Optional[Union[List[str], List[User]]] = None, - computers: Optional[Union[List[str], List[Computer]]] = None, - codes: Optional[Union[List[str], List[Code]]] = None, + groups: List[str] | List[Group] | None = None, + user: List[str] | List[User] | None = None, + computers: List[str] | List[Computer] | None = None, + codes: List[str] | List[Code] | None = None, # Time filtering options - past_days: Optional[int] = None, - start_date: Optional[datetime] = None, - end_date: Optional[datetime] = None, + past_days: int | None = None, + start_date: datetime | None = None, + end_date: datetime | None = None, filter_by_last_dump_time: bool = True, # Node collection options only_top_level_calcs: bool = True, diff --git a/src/aiida/manage/manager.py b/src/aiida/manage/manager.py index 26655a51f6..d9fec405d3 100644 --- a/src/aiida/manage/manager.py +++ b/src/aiida/manage/manager.py @@ -10,7 +10,7 @@ from __future__ import annotations -from typing import TYPE_CHECKING, Any, Optional, Union +from typing import TYPE_CHECKING, Any if TYPE_CHECKING: import asyncio @@ -28,7 +28,7 @@ __all__ = ('get_manager',) -MANAGER: Optional['Manager'] = None +MANAGER: 'Manager' | None = None def get_manager() -> 'Manager': @@ -71,13 +71,13 @@ def __init__(self) -> None: from aiida.common.log import AIIDA_LOGGER # note: the config currently references the global variables - self._broker: Optional['Broker'] = None - self._profile: Optional['Profile'] = None - self._profile_storage: Optional['StorageBackend'] = None - self._daemon_client: Optional['DaemonClient'] = None - self._process_controller: Optional['RemoteProcessThreadController'] = None - self._persister: Optional['AiiDAPersister'] = None - self._runner: Optional['Runner'] = None + self._broker: 'Broker' | None = None + self._profile: 'Profile' | None = None + self._profile_storage: 'StorageBackend' | None = None + self._daemon_client: 'DaemonClient' | None = None + self._process_controller: 'RemoteProcessThreadController' | None = None + self._persister: 'AiiDAPersister' | None = None + self._runner: 'Runner' | None = None self.logger = AIIDA_LOGGER.getChild(__name__) @staticmethod @@ -92,14 +92,14 @@ def get_config(create=False) -> 'Config': return get_config(create=create) - def get_profile(self) -> Optional['Profile']: + def get_profile(self) -> 'Profile' | None: """Return the current loaded profile, if any :return: current loaded profile instance """ return self._profile - def load_profile(self, profile: Union[None, str, 'Profile'] = None, allow_switch=False) -> 'Profile': + def load_profile(self, profile: None | str | 'Profile' = None, allow_switch=False) -> 'Profile': """Load a global profile, unloading any previously loaded profile. .. note:: If a profile is already loaded and no explicit profile is specified, nothing will be done. @@ -432,7 +432,7 @@ def create_runner(self, with_persistence: bool = True, **kwargs: Any) -> 'Runner return runners.Runner(**settings) # type: ignore[arg-type] - def create_daemon_runner(self, loop: Optional['asyncio.AbstractEventLoop'] = None) -> 'Runner': + def create_daemon_runner(self, loop: 'asyncio.AbstractEventLoop' | None = None) -> 'Runner': """Create and return a new daemon runner. This is used by workers when the daemon is running and in testing. diff --git a/src/aiida/manage/tests/pytest_fixtures.py b/src/aiida/manage/tests/pytest_fixtures.py index 8af0fe0350..c26b81ee27 100644 --- a/src/aiida/manage/tests/pytest_fixtures.py +++ b/src/aiida/manage/tests/pytest_fixtures.py @@ -551,10 +551,10 @@ def aiida_computer(tmp_path) -> t.Callable[[], Computer]: """Factory to return a :class:`aiida.orm.computers.Computer` instance.""" def factory( - label: t.Optional[str] = None, + label: str | None = None, minimum_job_poll_interval: int = 0, default_mpiprocs_per_machine: int = 1, - configuration_kwargs: t.Optional[dict[t.Any, t.Any]] = None, + configuration_kwargs: dict[t.Any, t.Any] | None = None, **kwargs, ) -> Computer: """Return a :class:`aiida.orm.computers.Computer` instance. @@ -600,7 +600,7 @@ def factory( def aiida_computer_local(aiida_computer) -> t.Callable[[], Computer]: """Factory to return a :class:`aiida.orm.computers.Computer` instance with ``core.local`` transport.""" - def factory(label: t.Optional[str] = None, configure: bool = True) -> Computer: + def factory(label: str | None = None, configure: bool = True) -> Computer: """Return a :class:`aiida.orm.computers.Computer` instance representing localhost with ``core.local`` transport. The database is queried for an existing computer with the given label. If it exists, it is returned, otherwise a @@ -627,7 +627,7 @@ def factory(label: t.Optional[str] = None, configure: bool = True) -> Computer: def aiida_computer_ssh(aiida_computer, ssh_key) -> t.Callable[[], Computer]: """Factory to return a :class:`aiida.orm.computers.Computer` instance with ``core.ssh`` transport.""" - def factory(label: t.Optional[str] = None, configure: bool = True) -> Computer: + def factory(label: str | None = None, configure: bool = True) -> Computer: """Return a :class:`aiida.orm.computers.Computer` instance representing localhost with ``core.ssh`` transport. The database is queried for an existing computer with the given label. If it exists, it is returned, otherwise a diff --git a/src/aiida/orm/authinfos.py b/src/aiida/orm/authinfos.py index 8282e944fb..67f26c5412 100644 --- a/src/aiida/orm/authinfos.py +++ b/src/aiida/orm/authinfos.py @@ -10,7 +10,7 @@ from __future__ import annotations -from typing import TYPE_CHECKING, Any, Dict, Optional, Type +from typing import TYPE_CHECKING, Any, Dict, Type from aiida.common import exceptions from aiida.common.pydantic import MetadataField @@ -86,7 +86,7 @@ def __init__( enabled: bool = True, auth_params: Dict[str, Any] | None = None, metadata: Dict[str, Any] | None = None, - backend: Optional['StorageBackend'] = None, + backend: 'StorageBackend' | None = None, ) -> None: """Create an `AuthInfo` instance for the given computer and user. diff --git a/src/aiida/orm/comments.py b/src/aiida/orm/comments.py index 8d6614de38..77daebc948 100644 --- a/src/aiida/orm/comments.py +++ b/src/aiida/orm/comments.py @@ -8,8 +8,10 @@ ########################################################################### """Comment objects and functions""" +from __future__ import annotations + from datetime import datetime -from typing import TYPE_CHECKING, List, Optional, Type, cast +from typing import TYPE_CHECKING, List, Type, cast from aiida.common.pydantic import MetadataField from aiida.manage import get_manager @@ -68,13 +70,11 @@ class Comment(entities.Entity['BackendComment', CommentCollection]): _CLS_COLLECTION = CommentCollection class Model(entities.Entity.Model): - uuid: Optional[str] = MetadataField( - description='The UUID of the comment', is_attribute=False, exclude_to_orm=True - ) - ctime: Optional[datetime] = MetadataField( + uuid: str | None = MetadataField(description='The UUID of the comment', is_attribute=False, exclude_to_orm=True) + ctime: datetime | None = MetadataField( description='Creation time of the comment', is_attribute=False, exclude_to_orm=True ) - mtime: Optional[datetime] = MetadataField( + mtime: datetime | None = MetadataField( description='Modified time of the comment', is_attribute=False, exclude_to_orm=True ) node: int = MetadataField( @@ -91,9 +91,7 @@ class Model(entities.Entity.Model): ) content: str = MetadataField(description='Content of the comment', is_attribute=False) - def __init__( - self, node: 'Node', user: 'User', content: Optional[str] = None, backend: Optional['StorageBackend'] = None - ): + def __init__(self, node: 'Node', user: 'User', content: str | None = None, backend: 'StorageBackend' | None = None): """Create a Comment for a given node and user :param node: a Node instance diff --git a/src/aiida/orm/computers.py b/src/aiida/orm/computers.py index e8afea0b65..367c3b4231 100644 --- a/src/aiida/orm/computers.py +++ b/src/aiida/orm/computers.py @@ -8,8 +8,17 @@ ########################################################################### """Module for Computer entities""" +from __future__ import annotations + import os -from typing import TYPE_CHECKING, Any, Dict, List, Optional, Tuple, Type, Union +from typing import ( + TYPE_CHECKING, + Any, + Dict, + List, + Tuple, + Type, +) from aiida.common import exceptions from aiida.common.log import AIIDA_LOGGER, AiidaLoggerType @@ -84,14 +93,14 @@ class Model(entities.Entity.Model): def __init__( self, - label: Optional[str] = None, + label: str | None = None, hostname: str = '', description: str = '', transport_type: str = '', scheduler_type: str = '', - workdir: Optional[str] = None, - metadata: Optional[Dict[str, Any]] = None, - backend: Optional['StorageBackend'] = None, + workdir: str | None = None, + metadata: Dict[str, Any] | None = None, + backend: 'StorageBackend' | None = None, ) -> None: """Construct a new computer.""" backend = backend or get_manager().get_profile_storage() @@ -186,7 +195,7 @@ def _workdir_validator(cls, workdir: str) -> None: if not os.path.isabs(convertedwd): raise exceptions.ValidationError('The workdir must be an absolute path') - def _mpirun_command_validator(self, mpirun_cmd: Union[List[str], Tuple[str, ...]]) -> None: + def _mpirun_command_validator(self, mpirun_cmd: List[str] | Tuple[str, ...]) -> None: """Validates the mpirun_command variable. MUST be called after properly checking for a valid scheduler. """ @@ -239,7 +248,7 @@ def validate(self) -> None: self._mpirun_command_validator(mpirun_cmd) @classmethod - def _default_mpiprocs_per_machine_validator(cls, def_cpus_per_machine: Optional[int]) -> None: + def _default_mpiprocs_per_machine_validator(cls, def_cpus_per_machine: int | None) -> None: """Validates the default number of CPUs per machine (node)""" if def_cpus_per_machine is None: return @@ -251,7 +260,7 @@ def _default_mpiprocs_per_machine_validator(cls, def_cpus_per_machine: Optional[ ) @classmethod - def default_memory_per_machine_validator(cls, def_memory_per_machine: Optional[int]) -> None: + def default_memory_per_machine_validator(cls, def_memory_per_machine: int | None) -> None: """Validates the default amount of memory (kB) per machine (node)""" if def_memory_per_machine is None: return @@ -449,7 +458,7 @@ def get_mpirun_command(self) -> List[str]: """ return self.get_property('mpirun_command', ['mpirun', '-np', '{tot_num_mpiprocs}']) - def set_mpirun_command(self, val: Union[List[str], Tuple[str, ...]]) -> None: + def set_mpirun_command(self, val: List[str] | Tuple[str, ...]) -> None: """Set the mpirun command. It must be a list of strings (you can use string.split() if you have a single, space-separated string). """ @@ -457,13 +466,13 @@ def set_mpirun_command(self, val: Union[List[str], Tuple[str, ...]]) -> None: raise TypeError('the mpirun_command must be a list of strings') self.set_property('mpirun_command', val) - def get_default_mpiprocs_per_machine(self) -> Optional[int]: + def get_default_mpiprocs_per_machine(self) -> int | None: """Return the default number of CPUs per machine (node) for this computer, or None if it was not set. """ return self.get_property('default_mpiprocs_per_machine', None) - def set_default_mpiprocs_per_machine(self, def_cpus_per_machine: Optional[int]) -> None: + def set_default_mpiprocs_per_machine(self, def_cpus_per_machine: int | None) -> None: """Set the default number of CPUs per machine (node) for this computer. Accepts None if you do not want to set this value. """ @@ -473,13 +482,13 @@ def set_default_mpiprocs_per_machine(self, def_cpus_per_machine: Optional[int]) raise TypeError('def_cpus_per_machine must be an integer (or None)') self.set_property('default_mpiprocs_per_machine', def_cpus_per_machine) - def get_default_memory_per_machine(self) -> Optional[int]: + def get_default_memory_per_machine(self) -> int | None: """Return the default amount of memory (kB) per machine (node) for this computer, or None if it was not set. """ return self.get_property('default_memory_per_machine', None) - def set_default_memory_per_machine(self, def_memory_per_machine: Optional[int]) -> None: + def set_default_memory_per_machine(self, def_memory_per_machine: int | None) -> None: """Set the default amount of memory (kB) per machine (node) for this computer. Accepts None if you do not want to set this value. """ @@ -590,7 +599,7 @@ def is_user_enabled(self, user: 'User') -> bool: # Return False if the user is not configured (in a sense, it is disabled for that user) return False - def get_transport(self, user: Optional['User'] = None) -> 'Transport': + def get_transport(self, user: 'User' | None = None) -> 'Transport': """Return a Transport class, configured with all correct parameters. The Transport is closed (meaning that if you want to run any operation with it, you have to open it first (i.e., e.g. for a SSH transport, you have @@ -635,7 +644,7 @@ def get_scheduler(self) -> 'Scheduler': f'No scheduler found for {self.label} [type {self.scheduler_type}], message: {exception}' ) - def configure(self, user: Optional['User'] = None, **kwargs: Any) -> 'AuthInfo': + def configure(self, user: 'User' | None = None, **kwargs: Any) -> 'AuthInfo': """Configure a computer for a user with valid auth params passed via kwargs :param user: the user to configure the computer for @@ -667,7 +676,7 @@ def configure(self, user: Optional['User'] = None, **kwargs: Any) -> 'AuthInfo': return authinfo - def get_configuration(self, user: Optional['User'] = None) -> Dict[str, Any]: + def get_configuration(self, user: 'User' | None = None) -> Dict[str, Any]: """Get the configuration of computer for the given user as a dictionary :param user: the user to to get the configuration for, otherwise default user diff --git a/src/aiida/orm/entities.py b/src/aiida/orm/entities.py index 172f982c15..2acd9d9388 100644 --- a/src/aiida/orm/entities.py +++ b/src/aiida/orm/entities.py @@ -14,7 +14,15 @@ import pathlib from enum import Enum from functools import lru_cache -from typing import TYPE_CHECKING, Any, Generic, List, NoReturn, Optional, Type, TypeVar, Union +from typing import ( + TYPE_CHECKING, + Any, + Generic, + List, + NoReturn, + Type, + TypeVar, +) from plumpy.base.utils import call_with_super_check, super_check from pydantic import BaseModel @@ -75,7 +83,7 @@ def get_cached(cls, entity_class: Type[EntityType], backend: 'StorageBackend') - type_check(backend, StorageBackend) return cls(entity_class, backend=backend) - def __init__(self, entity_class: Type[EntityType], backend: Optional['StorageBackend'] = None) -> None: + def __init__(self, entity_class: Type[EntityType], backend: 'StorageBackend' | None = None) -> None: """Construct a new entity collection. :param entity_class: the entity type e.g. User, Computer, etc @@ -106,11 +114,11 @@ def backend(self) -> 'StorageBackend': def query( self, - filters: Optional['FilterType'] = None, - order_by: Optional['OrderByType'] = None, - project: Optional[Union[list[str], str]] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, + filters: 'FilterType' | None = None, + order_by: 'OrderByType' | None = None, + project: list[str] | str | None = None, + limit: int | None = None, + offset: int | None = None, subclassing: bool = True, ) -> 'QueryBuilder': """Get a query builder for the objects of this collection. @@ -144,10 +152,10 @@ def get(self, **filters: Any) -> EntityType: def find( self, - filters: Optional['FilterType'] = None, - order_by: Optional['OrderByType'] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, + filters: 'FilterType' | None = None, + order_by: 'OrderByType' | None = None, + limit: int | None = None, + offset: int | None = None, ) -> List[EntityType]: """Find collection entries matching the filter criteria. @@ -168,7 +176,7 @@ def all(self) -> List[EntityType]: """ return self.query().all(flat=True) - def count(self, filters: Optional['FilterType'] = None) -> int: + def count(self, filters: 'FilterType' | None = None) -> int: """Count entities in this collection according to criteria. :param filters: the keyword value pair filters to match @@ -185,7 +193,7 @@ class Entity(abc.ABC, Generic[BackendEntityType, CollectionType], metaclass=Enti _logger = log.AIIDA_LOGGER.getChild('orm.entities') class Model(BaseModel, defer_build=True): - pk: Optional[int] = MetadataField( + pk: int | None = MetadataField( None, description='The primary key of the entity. Can be `None` if the entity is not yet stored.', is_attribute=False, @@ -248,7 +256,7 @@ def _from_model(cls, model: Model) -> Self: fields = cls.model_to_orm_field_values(model) return cls(**fields) - def serialize(self, repository_path: Union[pathlib.Path, None] = None) -> dict[str, Any]: + def serialize(self, repository_path: pathlib.Path | None = None) -> dict[str, Any]: """Serialize the entity instance to JSON. :param repository_path: If the orm node has files in the repository, this path is used to dump the repostiory diff --git a/src/aiida/orm/extras.py b/src/aiida/orm/extras.py index 0c4177fb1c..174afcb42d 100644 --- a/src/aiida/orm/extras.py +++ b/src/aiida/orm/extras.py @@ -8,8 +8,17 @@ ########################################################################### """Interface to the extras of a node instance.""" +from __future__ import annotations + import copy -from typing import TYPE_CHECKING, Any, Dict, Iterable, List, Tuple, Union +from typing import ( + TYPE_CHECKING, + Any, + Dict, + Iterable, + List, + Tuple, +) if TYPE_CHECKING: from .groups import Group @@ -30,7 +39,7 @@ class EntityExtras: and as such are not deemed a core part of the provenance graph. """ - def __init__(self, entity: Union['Node', 'Group']) -> None: + def __init__(self, entity: 'Node' | 'Group') -> None: """Initialize the interface.""" self._entity = entity self._backend_entity = entity.backend_entity diff --git a/src/aiida/orm/fields.py b/src/aiida/orm/fields.py index f0e8ca390b..5c0647f92b 100644 --- a/src/aiida/orm/fields.py +++ b/src/aiida/orm/fields.py @@ -8,6 +8,8 @@ ########################################################################### """Module which provides decorators for AiiDA ORM entity -> DB field mappings.""" +from __future__ import annotations + import datetime import typing as t from abc import ABCMeta @@ -30,15 +32,22 @@ def extract_root_type(dtype: t.Any) -> t.Any: """Recursively search for the primitive root type. - >>> extract_root_type(List[str]) -> list - >>> extract_root_type(Optional[List[str]]) -> list + >>> extract_root_type(list[str]) -> list + >>> extract_root_type(int | None) -> int """ + from types import NoneType, UnionType + origin = t.get_origin(dtype) if origin: - if origin is t.Union: - return extract_root_type(t.get_args(dtype)[0]) + if origin is t.Union or origin is UnionType: + # For Union/optional types, get the first non-None argument + args = [a for a in t.get_args(dtype) if a is not NoneType] + return extract_root_type(args[0]) if args else dtype else: return origin + elif isinstance(dtype, UnionType): + args = [a for a in t.get_args(dtype) if a is not NoneType] + return extract_root_type(args[0]) if args else dtype else: return dtype @@ -58,9 +67,9 @@ class QbField: def __init__( self, key: str, - alias: t.Optional[str] = None, + alias: str | None = None, *, - dtype: t.Optional[t.Any] = None, + dtype: t.Any | None = None, doc: str = '', is_attribute: bool = True, is_subscriptable: bool = False, @@ -96,12 +105,12 @@ def doc(self) -> str: return self._doc @property - def dtype(self) -> t.Optional[t.Any]: + def dtype(self) -> t.Any | None: """Return the primitive root type.""" return extract_root_type(self._dtype) @property - def annotation(self) -> t.Optional[t.Any]: + def annotation(self) -> t.Any | None: """Return the full type annotation.""" return self._dtype @@ -249,7 +258,7 @@ class QbFieldFilters: def __init__( self, - filters: t.Union[t.Sequence[t.Tuple[QbField, str, t.Any]], dict], + filters: t.Sequence[t.Tuple[QbField, str, t.Any]] | dict, ): self.filters: t.Dict[str, t.Any] = {} self.add_filters(filters) @@ -321,7 +330,7 @@ def __invert__(self) -> 'QbFieldFilters': filters[key] = {operator: value} return QbFieldFilters(filters) - def _resolve_redundancy(self, other: 'QbFieldFilters', logical: str) -> t.Optional['QbFieldFilters']: + def _resolve_redundancy(self, other: 'QbFieldFilters', logical: str) -> 'QbFieldFilters' | None: """Resolve redundant filters and nested logical operators.""" if not isinstance(other, QbFieldFilters): @@ -351,7 +360,7 @@ class QbFields: __isabstractmethod__ = False - def __init__(self, fields: t.Optional[t.Dict[str, QbField]] = None): + def __init__(self, fields: t.Dict[str, QbField] | None = None): self._fields = fields or {} def __repr__(self) -> str: @@ -476,8 +485,8 @@ def __init__(cls, name, bases, classdict): class QbFieldArguments(t.TypedDict): key: str - alias: t.Optional[str] - dtype: t.Optional[t.Any] + alias: str | None + dtype: t.Any | None doc: str is_attribute: bool is_subscriptable: bool @@ -485,9 +494,9 @@ class QbFieldArguments(t.TypedDict): def add_field( key: str, - alias: t.Optional[str] = None, + alias: str | None = None, *, - dtype: t.Optional[t.Any] = None, + dtype: t.Any | None = None, doc: str = '', is_attribute: bool = True, is_subscriptable: bool = False, diff --git a/src/aiida/orm/groups.py b/src/aiida/orm/groups.py index 8582ee56b9..b9b9942e57 100644 --- a/src/aiida/orm/groups.py +++ b/src/aiida/orm/groups.py @@ -8,11 +8,22 @@ ########################################################################### """AiiDA Group entites""" +from __future__ import annotations + import datetime import warnings from functools import cached_property from pathlib import Path -from typing import TYPE_CHECKING, Any, ClassVar, Dict, Optional, Sequence, Tuple, Type, Union, cast +from typing import ( + TYPE_CHECKING, + Any, + ClassVar, + Dict, + Sequence, + Tuple, + Type, + cast, +) from typing_extensions import Self @@ -62,7 +73,7 @@ class GroupCollection(entities.Collection['Group']): def _entity_base_cls() -> Type['Group']: return Group - def get_or_create(self, label: Optional[str] = None, **kwargs) -> Tuple['Group', bool]: + def get_or_create(self, label: str | None = None, **kwargs) -> Tuple['Group', bool]: """Try to retrieve a group from the DB with the given arguments; create (and store) a new group if such a group was not present yet. @@ -108,7 +119,7 @@ def extras(self) -> extras.EntityExtras: class Group(entities.Entity['BackendGroup', GroupCollection]): """An AiiDA ORM implementation of group of nodes.""" - __type_string: ClassVar[Optional[str]] + __type_string: ClassVar[str | None] class Model(entities.Entity.Model): uuid: str = MetadataField(description='The UUID of the group', is_attribute=False, exclude_to_orm=True) @@ -119,12 +130,10 @@ class Model(entities.Entity.Model): orm_class='core.user', orm_to_model=lambda group, _: group.user.pk, # type: ignore[attr-defined] ) - time: Optional[datetime.datetime] = MetadataField( - description='The creation time of the node', is_attribute=False - ) + time: datetime.datetime | None = MetadataField(description='The creation time of the node', is_attribute=False) label: str = MetadataField(description='The group label', is_attribute=False) - description: Optional[str] = MetadataField(description='The group description', is_attribute=False) - extras: Optional[Dict[str, Any]] = MetadataField( + description: str | None = MetadataField(description='The group description', is_attribute=False) + extras: Dict[str, Any] | None = MetadataField( description='The group extras', is_attribute=False, is_subscriptable=True, @@ -135,13 +144,13 @@ class Model(entities.Entity.Model): def __init__( self, - label: Optional[str] = None, - user: Optional['User'] = None, + label: str | None = None, + user: 'User' | None = None, description: str = '', - type_string: Optional[str] = None, - time: Optional[datetime.datetime] = None, - extras: Optional[Dict[str, Any]] = None, - backend: Optional['StorageBackend'] = None, + type_string: str | None = None, + time: datetime.datetime | None = None, + extras: Dict[str, Any] | None = None, + backend: 'StorageBackend' | None = None, ): """Create a new group. Either pass a dbgroup parameter, to reload a group from the DB (and then, no further parameters are allowed), @@ -171,7 +180,7 @@ def __init__( self.base.extras.set_many(extras) @classproperty - def _type_string(cls) -> Optional[str]: # noqa: N805 + def _type_string(cls) -> str | None: # noqa: N805 from aiida.plugins.entry_point import get_entry_point_from_class if hasattr(cls, '__type_string'): @@ -211,7 +220,7 @@ def store(self) -> Self: return super().store() @classproperty - def entry_point(cls) -> Optional['EntryPoint']: # noqa: N805 + def entry_point(cls) -> 'EntryPoint' | None: # noqa: N805 """Return the entry point associated this group type. :return: the associated entry point or ``None`` if it isn't known. @@ -313,7 +322,7 @@ def clear(self) -> None: """Remove all the nodes from this group.""" return self._backend_entity.clear() - def add_nodes(self, nodes: Union['Node', Sequence['Node']]) -> None: + def add_nodes(self, nodes: 'Node' | Sequence['Node']) -> None: """Add a node or a set of nodes to the group. :note: all the nodes *and* the group itself have to be stored. @@ -334,7 +343,7 @@ def add_nodes(self, nodes: Union['Node', Sequence['Node']]) -> None: self._backend_entity.add_nodes([node.backend_entity for node in nodes]) - def remove_nodes(self, nodes: Union['Node', Sequence['Node']]) -> None: + def remove_nodes(self, nodes: 'Node' | Sequence['Node']) -> None: """Remove a node or a set of nodes to the group. :note: all the nodes *and* the group itself have to be stored. @@ -361,14 +370,14 @@ def is_user_defined(self) -> bool: def dump( self, - output_path: Optional[Union[str, Path]] = None, + output_path: str | Path | None = None, # Dump mode options dry_run: bool = False, overwrite: bool = False, # Time filtering options - past_days: Optional[int] = None, - start_date: Optional[datetime.datetime] = None, - end_date: Optional[datetime.datetime] = None, + past_days: int | None = None, + start_date: datetime.datetime | None = None, + end_date: datetime.datetime | None = None, filter_by_last_dump_time: bool = True, # Node collection options only_top_level_calcs: bool = True, diff --git a/src/aiida/orm/implementation/comments.py b/src/aiida/orm/implementation/comments.py index 02ee34511c..efa99b6618 100644 --- a/src/aiida/orm/implementation/comments.py +++ b/src/aiida/orm/implementation/comments.py @@ -10,7 +10,7 @@ import abc from datetime import datetime -from typing import TYPE_CHECKING, Any, List, Optional +from typing import TYPE_CHECKING, Any, List from .entities import BackendCollection, BackendEntity @@ -77,7 +77,7 @@ class BackendCommentCollection(BackendCollection[BackendComment]): @abc.abstractmethod def create( # type: ignore[override] - self, node: 'BackendNode', user: 'BackendUser', content: Optional[str] = None, **kwargs: Any + self, node: 'BackendNode', user: 'BackendUser', content: str | None = None, **kwargs: Any ) -> BackendComment: """Create a Comment for a given node and user diff --git a/src/aiida/orm/implementation/groups.py b/src/aiida/orm/implementation/groups.py index 3be75c2050..769f67741d 100644 --- a/src/aiida/orm/implementation/groups.py +++ b/src/aiida/orm/implementation/groups.py @@ -10,7 +10,7 @@ import abc import datetime -from typing import TYPE_CHECKING, List, Optional, Protocol, Sequence, Union +from typing import TYPE_CHECKING, List, Protocol, Sequence from .entities import BackendCollection, BackendEntity, BackendEntityExtrasMixin from .nodes import BackendNode @@ -30,7 +30,7 @@ def __iter__(self) -> 'NodeIterator': def __next__(self) -> BackendNode: """Return the next node in the group.""" - def __getitem__(self, value: Union[int, slice]) -> Union[BackendNode, List[BackendNode]]: + def __getitem__(self, value: int | slice) -> BackendNode | List[BackendNode]: """Index node(s) from the group.""" def __len__(self) -> int: @@ -61,12 +61,12 @@ def label(self, name: str) -> None: @property @abc.abstractmethod - def description(self) -> Optional[str]: + def description(self) -> str | None: """Return the description of the group as a string.""" @description.setter @abc.abstractmethod - def description(self, value: Optional[str]): + def description(self, value: str | None): """Return the description of the group as a string.""" @property diff --git a/src/aiida/orm/implementation/nodes.py b/src/aiida/orm/implementation/nodes.py index d16268b1e1..6dad99991b 100644 --- a/src/aiida/orm/implementation/nodes.py +++ b/src/aiida/orm/implementation/nodes.py @@ -8,9 +8,20 @@ ########################################################################### """Abstract BackendNode and BackendNodeCollection implementation.""" +from __future__ import annotations + import abc from datetime import datetime -from typing import TYPE_CHECKING, Any, Dict, Iterable, List, Optional, Sequence, Tuple, TypeVar +from typing import ( + TYPE_CHECKING, + Any, + Dict, + Iterable, + List, + Sequence, + Tuple, + TypeVar, +) from .entities import BackendCollection, BackendEntity, BackendEntityExtrasMixin @@ -55,7 +66,7 @@ def node_type(self) -> str: @property @abc.abstractmethod - def process_type(self) -> Optional[str]: + def process_type(self) -> str | None: """Return the node process type. :return: the process type @@ -63,7 +74,7 @@ def process_type(self) -> Optional[str]: @process_type.setter @abc.abstractmethod - def process_type(self, value: Optional[str]) -> None: + def process_type(self, value: str | None) -> None: """Set the process type. :param value: the new value to set @@ -119,7 +130,7 @@ def repository_metadata(self, value: Dict[str, Any]) -> None: @property @abc.abstractmethod - def computer(self) -> Optional['BackendComputer']: + def computer(self) -> 'BackendComputer' | None: """Return the computer of this node. :return: the computer or None @@ -127,7 +138,7 @@ def computer(self) -> Optional['BackendComputer']: @computer.setter @abc.abstractmethod - def computer(self, computer: Optional['BackendComputer']) -> None: + def computer(self, computer: 'BackendComputer' | None) -> None: """Set the computer of this node. :param computer: a `BackendComputer` @@ -180,7 +191,7 @@ def add_incoming(self, source: 'BackendNode', link_type, link_label): @abc.abstractmethod def store( - self: BackendNodeType, links: Optional[Sequence['LinkTriple']] = None, clean: bool = True + self: BackendNodeType, links: Sequence['LinkTriple'] | None = None, clean: bool = True ) -> BackendNodeType: """Store the node in the database. diff --git a/src/aiida/orm/implementation/querybuilder.py b/src/aiida/orm/implementation/querybuilder.py index 6cc83f58b1..21e896d6dd 100644 --- a/src/aiida/orm/implementation/querybuilder.py +++ b/src/aiida/orm/implementation/querybuilder.py @@ -8,8 +8,19 @@ ########################################################################### """Abstract `QueryBuilder` definition.""" +from __future__ import annotations + import abc -from typing import TYPE_CHECKING, Any, Dict, Iterable, List, Literal, Optional, Set, TypedDict, Union +from typing import ( + TYPE_CHECKING, + Any, + Dict, + Iterable, + List, + Literal, + Set, + TypedDict, +) from aiida.common.lang import type_check from aiida.common.log import AIIDA_LOGGER @@ -47,7 +58,7 @@ class PathItemType(TypedDict): """An item on the query path""" - entity_type: Union[str, List[str]] + entity_type: str | List[str] # this can be derived from the entity_type, but it is more efficient to store orm_base: Literal['node', 'group', 'authinfo', 'comment', 'computer', 'log', 'user'] tag: str @@ -63,7 +74,7 @@ class QueryDictType(TypedDict): path: List[PathItemType] # mapping: tag -> 'and' | 'or' | '~or' | '~and' | '!and' | '!or' -> [] -> operator -> value # -> operator -> value - filters: Dict[str, Dict[str, Union[Dict[str, List[Dict[str, Any]]], Dict[str, Any]]]] + filters: Dict[str, Dict[str, Dict[str, List[Dict[str, Any]]] | Dict[str, Any]]] # mapping: tag -> [] -> field -> 'func' -> 'max' | 'min' | 'count' # 'cast' -> 'b' | 'd' | 'f' | 'i' | 'j' | 't' project: Dict[str, List[Dict[str, Dict[str, Any]]]] @@ -72,8 +83,8 @@ class QueryDictType(TypedDict): # list of mappings: tag -> [] -> field -> 'order' -> 'asc' | 'desc' # 'cast' -> 'b' | 'd' | 'f' | 'i' | 'j' | 't' order_by: List[Dict[str, List[Dict[str, Dict[str, str]]]]] - offset: Optional[int] - limit: Optional[int] + offset: int | None + limit: int | None distinct: bool @@ -101,18 +112,18 @@ def count(self, data: QueryDictType) -> int: """Return the number of results of the query""" @abc.abstractmethod - def first(self, data: QueryDictType) -> Optional[List[Any]]: + def first(self, data: QueryDictType) -> List[Any] | None: """Executes query, asking for one instance. :returns: One row of aiida results """ @abc.abstractmethod - def iterall(self, data: QueryDictType, batch_size: Optional[int]) -> Iterable[List[Any]]: + def iterall(self, data: QueryDictType, batch_size: int | None) -> Iterable[List[Any]]: """Return an iterator over all the results of a list of lists.""" @abc.abstractmethod - def iterdict(self, data: QueryDictType, batch_size: Optional[int]) -> Iterable[Dict[str, Dict[str, Any]]]: + def iterdict(self, data: QueryDictType, batch_size: int | None) -> Iterable[Dict[str, Dict[str, Any]]]: """Return an iterator over all the results of a list of dictionaries.""" def as_sql(self, data: QueryDictType, inline: bool = False) -> str: @@ -138,7 +149,7 @@ def analyze_query(self, data: QueryDictType, execute: bool = True, verbose: bool raise NotImplementedError @abc.abstractmethod - def get_creation_statistics(self, user_pk: Optional[int] = None) -> Dict[str, Any]: + def get_creation_statistics(self, user_pk: int | None = None) -> Dict[str, Any]: """Return a dictionary with the statistics of node creation, summarized by day. :note: Days when no nodes were created are not present in the returned `ctime_by_day` dictionary. diff --git a/src/aiida/orm/implementation/storage_backend.py b/src/aiida/orm/implementation/storage_backend.py index ed7c6da5b1..9131b055b1 100644 --- a/src/aiida/orm/implementation/storage_backend.py +++ b/src/aiida/orm/implementation/storage_backend.py @@ -12,7 +12,13 @@ import abc from collections.abc import Iterable -from typing import TYPE_CHECKING, Any, ContextManager, List, Optional, TypeVar, Union +from typing import ( + TYPE_CHECKING, + Any, + ContextManager, + List, + TypeVar, +) if TYPE_CHECKING: from disk_objectstore.backup_utils import BackupManager @@ -64,7 +70,7 @@ def version_head(cls) -> str: @classmethod @abc.abstractmethod - def version_profile(cls, profile: 'Profile') -> Optional[str]: + def version_profile(cls, profile: 'Profile') -> str | None: """Return the schema version of the given profile's storage, or None for empty/uninitialised storage. :raises: `~aiida.common.exceptions.UnreachableStorage` if the storage cannot be accessed @@ -108,7 +114,7 @@ def __init__(self, profile: 'Profile') -> None: from aiida.orm.autogroup import AutogroupManager self._profile = profile - self._default_user: Optional['User'] = None + self._default_user: 'User' | None = None self._autogroup = AutogroupManager(self) @abc.abstractmethod @@ -195,7 +201,7 @@ def users(self) -> 'BackendUserCollection': """Return the collection of users""" @property - def default_user(self) -> Optional['User']: + def default_user(self) -> 'User' | None: """Return the default user for the profile, if it has been created. This is cached, since it is a frequently used operation, for creating other entities. @@ -272,7 +278,7 @@ def get_repository(self) -> 'AbstractRepositoryBackend': @abc.abstractmethod def set_global_variable( - self, key: str, value: Union[None, str, int, float], description: Optional[str] = None, overwrite: bool = True + self, key: str, value: None | str | int | float, description: str | None = None, overwrite: bool = True ) -> None: """Set a global variable in the storage. @@ -285,7 +291,7 @@ def set_global_variable( """ @abc.abstractmethod - def get_global_variable(self, key: str) -> Union[None, str, int, float]: + def get_global_variable(self, key: str) -> None | str | int | float: """Return a global variable from the storage. :param key: the key of the setting @@ -311,7 +317,7 @@ def maintain(self, full: bool = False, dry_run: bool = False, **kwargs: Any) -> def _backup( self, dest: str, - keep: Optional[int] = None, + keep: int | None = None, ) -> None: raise NotImplementedError @@ -398,7 +404,7 @@ def _validate_or_init_backup_folder(self, dest: str, keep: int | None) -> Backup def backup( self, dest: str, - keep: Optional[int] = None, + keep: int | None = None, ) -> None: """Create a backup of the storage contents. diff --git a/src/aiida/orm/logs.py b/src/aiida/orm/logs.py index ed07deb847..3b5a555c63 100644 --- a/src/aiida/orm/logs.py +++ b/src/aiida/orm/logs.py @@ -8,9 +8,17 @@ ########################################################################### """Module for orm logging abstract classes""" +from __future__ import annotations + import logging from datetime import datetime -from typing import TYPE_CHECKING, Any, Dict, List, Optional, Type +from typing import ( + TYPE_CHECKING, + Any, + Dict, + List, + Type, +) from aiida.common import timezone from aiida.common.pydantic import MetadataField @@ -43,7 +51,7 @@ class LogCollection(entities.Collection['Log']): def _entity_base_cls() -> Type['Log']: return Log - def create_entry_from_record(self, record: logging.LogRecord) -> Optional['Log']: + def create_entry_from_record(self, record: logging.LogRecord) -> 'Log' | None: """Helper function to create a log entry from a record created as by the python logging library :param record: The record created by the logging module @@ -81,7 +89,7 @@ def create_entry_from_record(self, record: logging.LogRecord) -> Optional['Log'] backend=self.backend, ) - def get_logs_for(self, entity: 'Node', order_by: Optional['OrderByType'] = None) -> List['Log']: + def get_logs_for(self, entity: 'Node', order_by: 'OrderByType' | None = None) -> List['Log']: """Get all the log messages for a given node and optionally sort :param entity: the entity to get logs for @@ -145,8 +153,8 @@ def __init__( levelname: str, dbnode_id: int, message: str = '', - metadata: Optional[Dict[str, Any]] = None, - backend: Optional['StorageBackend'] = None, + metadata: Dict[str, Any] | None = None, + backend: 'StorageBackend' | None = None, ): """Construct a new log diff --git a/src/aiida/orm/nodes/comments.py b/src/aiida/orm/nodes/comments.py index 7e2a6300ea..db88a569e5 100644 --- a/src/aiida/orm/nodes/comments.py +++ b/src/aiida/orm/nodes/comments.py @@ -18,7 +18,7 @@ def __init__(self, node: 'Node') -> None: """Initialize the comments interface.""" self._node = node - def add(self, content: str, user: t.Optional[User] = None) -> Comment: + def add(self, content: str, user: User | None = None) -> Comment: """Add a new comment. :param content: string with comment diff --git a/src/aiida/orm/nodes/data/array/array.py b/src/aiida/orm/nodes/data/array/array.py index 9118187b0c..7adc8efbb8 100644 --- a/src/aiida/orm/nodes/data/array/array.py +++ b/src/aiida/orm/nodes/data/array/array.py @@ -12,7 +12,7 @@ import base64 import io -from typing import Any, Iterator, Optional +from typing import Any, Iterator import numpy as np from pydantic import ConfigDict @@ -49,7 +49,7 @@ class ArrayData(Data): class Model(Data.Model): model_config = ConfigDict(arbitrary_types_allowed=True) - arrays: Optional[dict[str, bytes]] = MetadataField( + arrays: dict[str, bytes] | None = MetadataField( None, description='The dictionary of numpy arrays.', orm_to_model=lambda node, _: ArrayData.save_arrays(node.arrays), # type: ignore[attr-defined] diff --git a/src/aiida/orm/nodes/data/array/bands.py b/src/aiida/orm/nodes/data/array/bands.py index f104d9222e..1e3867f917 100644 --- a/src/aiida/orm/nodes/data/array/bands.py +++ b/src/aiida/orm/nodes/data/array/bands.py @@ -10,6 +10,9 @@ in a Brillouin zone, and how to operate on them. """ +from __future__ import annotations + +import itertools import json import typing as t from string import Template @@ -214,7 +217,7 @@ class BandsData(KpointsData): """Class to handle bands data""" class Model(KpointsData.Model): - array_labels: t.Optional[t.List[str]] = MetadataField(description='Labels associated with the band arrays') + array_labels: t.List[str] | None = MetadataField(description='Labels associated with the band arrays') units: str = MetadataField(description='Units in which the data in bands were stored') def set_kpointsdata(self, kpointsdata): @@ -493,7 +496,7 @@ def _get_bandplot_data(self, cartesian, prettify_format=None, join_symbol=None, # I add an empty label that points to the last band if the last label does not do it if labels[-1][0] != len(bands) - 1: labels.append((len(bands) - 1, '')) - for (position_from, label_from), (position_to, label_to) in zip(labels[:-1], labels[1:]): + for (position_from, label_from), (position_to, label_to) in itertools.pairwise(labels): if position_to - position_from > 1: # Create a new path line only if there are at least two points, # otherwise it is probably just a discontinuity point in the band diff --git a/src/aiida/orm/nodes/data/cif.py b/src/aiida/orm/nodes/data/cif.py index 8421a617eb..49fee52ea9 100644 --- a/src/aiida/orm/nodes/data/cif.py +++ b/src/aiida/orm/nodes/data/cif.py @@ -251,15 +251,13 @@ class CifData(SinglefileData): _ase = None class Model(SinglefileData.Model): - formulae: t.Optional[t.List[str]] = MetadataField( + formulae: t.List[str] | None = MetadataField( None, description='List of formulae contained in the CIF file.', exclude_to_orm=True ) - spacegroup_numbers: t.Optional[t.List[str]] = MetadataField( + spacegroup_numbers: t.List[str] | None = MetadataField( None, description='List of space group numbers of the structure.', exclude_to_orm=True ) - md5: t.Optional[str] = MetadataField( - None, description='MD5 checksum of the file contents.', exclude_to_orm=True - ) + md5: str | None = MetadataField(None, description='MD5 checksum of the file contents.', exclude_to_orm=True) def __init__(self, ase=None, file=None, filename=None, values=None, scan_type=None, parse_policy=None, **kwargs): """Construct a new instance and set the contents to that of the file. diff --git a/src/aiida/orm/nodes/data/code/abstract.py b/src/aiida/orm/nodes/data/code/abstract.py index eb72649b9c..08c07ceb32 100644 --- a/src/aiida/orm/nodes/data/code/abstract.py +++ b/src/aiida/orm/nodes/data/code/abstract.py @@ -58,7 +58,7 @@ class Model(Data.Model, defer_build=True): description='Human-readable description, ideally including version and compilation environment.', short_name='-D', ) - default_calc_job_plugin: t.Optional[str] = MetadataField( + default_calc_job_plugin: str | None = MetadataField( None, title='Default `CalcJob` plugin', description='Entry point name of the default plugin (as listed in `verdi plugin list aiida.calculations`).', @@ -70,7 +70,7 @@ class Model(Data.Model, defer_build=True): description='Whether the executable and arguments of the code in the submission script should be escaped ' 'with single or double quotes.', ) - with_mpi: t.Optional[bool] = MetadataField( + with_mpi: bool | None = MetadataField( None, title='Run with MPI', description='Whether the executable should be run as an MPI program. This option can be left unspecified ' diff --git a/src/aiida/orm/nodes/data/code/legacy.py b/src/aiida/orm/nodes/data/code/legacy.py index b462d8ad7c..0fa083f41e 100644 --- a/src/aiida/orm/nodes/data/code/legacy.py +++ b/src/aiida/orm/nodes/data/code/legacy.py @@ -10,7 +10,6 @@ import os import pathlib -import typing as t from aiida.common import exceptions from aiida.common.log import override_log_level @@ -48,12 +47,10 @@ class Model(AbstractCode.Model): '', description='The code that will be put in the scheduler script after the execution of the code', ) - input_plugin: t.Optional[str] = MetadataField( - description='The name of the input plugin to be used for this code' - ) - local_executable: t.Optional[str] = MetadataField(description='Path to a local executable') - remote_exec_path: t.Optional[str] = MetadataField(description='Remote path to executable') - is_local: t.Optional[bool] = MetadataField(description='Whether the code is local or remote') + input_plugin: str | None = MetadataField(description='The name of the input plugin to be used for this code') + local_executable: str | None = MetadataField(description='Path to a local executable') + remote_exec_path: str | None = MetadataField(description='Remote path to executable') + is_local: bool | None = MetadataField(description='Whether the code is local or remote') def __init__(self, remote_computer_exec=None, local_executable=None, input_plugin_name=None, files=None, **kwargs): super().__init__(**kwargs) diff --git a/src/aiida/orm/nodes/data/data.py b/src/aiida/orm/nodes/data/data.py index 56b3dcbdbb..903ce354a7 100644 --- a/src/aiida/orm/nodes/data/data.py +++ b/src/aiida/orm/nodes/data/data.py @@ -8,7 +8,7 @@ ########################################################################### """Module with `Node` sub class `Data` to be used as a base class for data structures.""" -from typing import Dict, Optional +from typing import Dict from aiida.common import exceptions from aiida.common.lang import override @@ -47,7 +47,7 @@ class Data(Node): _unstorable_message = 'storing for this node has been disabled' class Model(Node.Model): - source: Optional[dict] = MetadataField( + source: dict | None = MetadataField( None, description='Source of the data.', is_subscriptable=True, exclude_from_cli=True ) @@ -83,7 +83,7 @@ def clone(self): return clone @property - def source(self) -> Optional[dict]: + def source(self) -> dict | None: """Gets the dictionary describing the source of Data object. Possible fields: * **db_name**: name of the source database. diff --git a/src/aiida/orm/nodes/data/remote/base.py b/src/aiida/orm/nodes/data/remote/base.py index 8bae0fed02..fa8e7b67f8 100644 --- a/src/aiida/orm/nodes/data/remote/base.py +++ b/src/aiida/orm/nodes/data/remote/base.py @@ -13,7 +13,6 @@ import logging import os from pathlib import Path -from typing import Union from aiida.common.pydantic import MetadataField from aiida.orm import AuthInfo @@ -35,13 +34,13 @@ class RemoteData(Data): KEY_EXTRA_CLEANED = 'cleaned' class Model(Data.Model): - remote_path: Union[str, None] = MetadataField( + remote_path: str | None = MetadataField( title='Remote path', description='Filepath on the remote computer.', orm_to_model=lambda node, _: node.get_remote_path(), ) - def __init__(self, remote_path: Union[str, None] = None, **kwargs): + def __init__(self, remote_path: str | None = None, **kwargs): super().__init__(**kwargs) if remote_path is not None: self.set_remote_path(remote_path) diff --git a/src/aiida/orm/nodes/data/remote/stash/compress.py b/src/aiida/orm/nodes/data/remote/stash/compress.py index 89b16bd005..f2420236d1 100644 --- a/src/aiida/orm/nodes/data/remote/stash/compress.py +++ b/src/aiida/orm/nodes/data/remote/stash/compress.py @@ -8,7 +8,7 @@ ########################################################################### """Data plugin that models a stashed folder on a remote computer.""" -from typing import List, Tuple, Union +from typing import List, Tuple from aiida.common.datastructures import StashMode from aiida.common.lang import type_check @@ -109,7 +109,7 @@ def target_basepath(self, value: str): self.base.attributes.set('target_basepath', value) @property - def source_list(self) -> Union[List, Tuple]: + def source_list(self) -> List | Tuple: """Return the list of source files that were stashed. :return: the list of source files. @@ -117,7 +117,7 @@ def source_list(self) -> Union[List, Tuple]: return self.base.attributes.get('source_list') @source_list.setter - def source_list(self, value: Union[List, Tuple]): + def source_list(self, value: List | Tuple): """Set the list of source files that were stashed. :param value: the list of source files. diff --git a/src/aiida/orm/nodes/data/remote/stash/custom.py b/src/aiida/orm/nodes/data/remote/stash/custom.py index d46cbc7ae1..010e6efdeb 100644 --- a/src/aiida/orm/nodes/data/remote/stash/custom.py +++ b/src/aiida/orm/nodes/data/remote/stash/custom.py @@ -8,7 +8,7 @@ ########################################################################### """Data plugin that models a stashed folder on a remote computer.""" -from typing import List, Tuple, Union +from typing import List, Tuple from aiida.common.datastructures import StashMode from aiida.common.lang import type_check @@ -65,7 +65,7 @@ def target_basepath(self, value: str): self.base.attributes.set('target_basepath', value) @property - def source_list(self) -> Union[List, Tuple]: + def source_list(self) -> List | Tuple: """Return the list of source files that were stashed. :return: the list of source files. @@ -73,7 +73,7 @@ def source_list(self) -> Union[List, Tuple]: return self.base.attributes.get('source_list') @source_list.setter - def source_list(self, value: Union[List, Tuple]): + def source_list(self, value: List | Tuple): """Set the list of source files that were stashed. :param value: the list of source files. diff --git a/src/aiida/orm/nodes/data/remote/stash/folder.py b/src/aiida/orm/nodes/data/remote/stash/folder.py index 2f2deec2e0..e1af084553 100644 --- a/src/aiida/orm/nodes/data/remote/stash/folder.py +++ b/src/aiida/orm/nodes/data/remote/stash/folder.py @@ -8,7 +8,7 @@ ########################################################################### """Data plugin that models a stashed folder on a remote computer.""" -from typing import List, Tuple, Union +from typing import List, Tuple from aiida.common.datastructures import StashMode from aiida.common.lang import type_check @@ -70,7 +70,7 @@ def target_basepath(self, value: str): self.base.attributes.set('target_basepath', value) @property - def source_list(self) -> Union[List, Tuple]: + def source_list(self) -> List | Tuple: """Return the list of source files that were stashed. :return: the list of source files. @@ -78,7 +78,7 @@ def source_list(self) -> Union[List, Tuple]: return self.base.attributes.get('source_list') @source_list.setter - def source_list(self, value: Union[List, Tuple]): + def source_list(self, value: List | Tuple): """Set the list of source files that were stashed. :param value: the list of source files. diff --git a/src/aiida/orm/nodes/data/singlefile.py b/src/aiida/orm/nodes/data/singlefile.py index 742a5702c6..2534148690 100644 --- a/src/aiida/orm/nodes/data/singlefile.py +++ b/src/aiida/orm/nodes/data/singlefile.py @@ -35,7 +35,7 @@ class Model(Data.Model): description='The file content.', model_to_orm=lambda model: io.BytesIO(model.content), # type: ignore[attr-defined] ) - filename: t.Optional[str] = MetadataField(None, description='The filename. Defaults to `file.txt`.') + filename: str | None = MetadataField(None, description='The filename. Defaults to `file.txt`.') @classmethod def from_string(cls, content: str, filename: str | pathlib.Path | None = None, **kwargs: t.Any) -> 'SinglefileData': diff --git a/src/aiida/orm/nodes/data/structure.py b/src/aiida/orm/nodes/data/structure.py index 0e3e09ef5b..e9dcf0ee47 100644 --- a/src/aiida/orm/nodes/data/structure.py +++ b/src/aiida/orm/nodes/data/structure.py @@ -689,8 +689,8 @@ class Model(Data.Model): pbc2: bool = MetadataField(description='Whether periodic in the b direction') pbc3: bool = MetadataField(description='Whether periodic in the c direction') cell: t.List[t.List[float]] = MetadataField(description='The cell parameters') - kinds: t.Optional[t.List[dict]] = MetadataField(description='The kinds of atoms') - sites: t.Optional[t.List[dict]] = MetadataField(description='The atomic sites') + kinds: t.List[dict] | None = MetadataField(description='The kinds of atoms') + sites: t.List[dict] | None = MetadataField(description='The atomic sites') def __init__( self, diff --git a/src/aiida/orm/nodes/links.py b/src/aiida/orm/nodes/links.py index 2297792d53..06526eb065 100644 --- a/src/aiida/orm/nodes/links.py +++ b/src/aiida/orm/nodes/links.py @@ -3,7 +3,7 @@ from __future__ import annotations import typing as t -from typing import Optional, cast +from typing import cast from aiida.common import exceptions from aiida.common.escaping import sql_string_match @@ -113,9 +113,9 @@ def validate_outgoing(self, target: 'Node', link_type: LinkType, link_label: str def get_stored_link_triples( self, - node_class: Optional[t.Type['Node']] = None, - link_type: t.Union[LinkType, t.Sequence[LinkType]] = (), - link_label_filter: t.Optional[str] = None, + node_class: t.Type['Node'] | None = None, + link_type: LinkType | t.Sequence[LinkType] = (), + link_label_filter: str | None = None, link_direction: str = 'incoming', only_uuid: bool = False, ) -> list[LinkTriple]: @@ -173,9 +173,9 @@ def get_stored_link_triples( def get_incoming( self, - node_class: Optional[t.Type['Node']] = None, - link_type: t.Union[LinkType, t.Sequence[LinkType]] = (), - link_label_filter: t.Optional[str] = None, + node_class: t.Type['Node'] | None = None, + link_type: LinkType | t.Sequence[LinkType] = (), + link_label_filter: str | None = None, only_uuid: bool = False, ) -> LinkManager: """Return a list of link triples that are (directly) incoming into this node. @@ -223,9 +223,9 @@ def get_incoming( def get_outgoing( self, - node_class: Optional[t.Type['Node']] = None, - link_type: t.Union[LinkType, t.Sequence[LinkType]] = (), - link_label_filter: t.Optional[str] = None, + node_class: t.Type['Node'] | None = None, + link_type: LinkType | t.Sequence[LinkType] = (), + link_label_filter: str | None = None, only_uuid: bool = False, ) -> LinkManager: """Return a list of link triples that are (directly) outgoing of this node. diff --git a/src/aiida/orm/nodes/node.py b/src/aiida/orm/nodes/node.py index 129a059d89..450e0b92bc 100644 --- a/src/aiida/orm/nodes/node.py +++ b/src/aiida/orm/nodes/node.py @@ -13,7 +13,19 @@ import base64 import datetime from functools import cached_property -from typing import TYPE_CHECKING, Any, ClassVar, Dict, Generic, Iterator, List, NoReturn, Optional, Tuple, Type, TypeVar +from typing import ( + TYPE_CHECKING, + Any, + ClassVar, + Dict, + Generic, + Iterator, + List, + NoReturn, + Tuple, + Type, + TypeVar, +) from uuid import UUID from typing_extensions import Self @@ -82,7 +94,7 @@ def delete(self, pk: int) -> None: self._backend.nodes.delete(pk) def iter_repo_keys( - self, filters: Optional[dict] = None, subclassing: bool = True, batch_size: int = 100 + self, filters: dict | None = None, subclassing: bool = True, batch_size: int = 100 ) -> Iterator[str]: """Iterate over all repository object keys for this ``Node`` class @@ -196,20 +208,20 @@ def _query_type_string(cls) -> str: # noqa: N805 _unstorable_message = 'only Data, WorkflowNode, CalculationNode or their subclasses can be stored' class Model(Entity.Model): - uuid: Optional[str] = MetadataField( + uuid: str | None = MetadataField( None, description='The UUID of the node', is_attribute=False, exclude_to_orm=True, exclude_from_cli=True ) - node_type: Optional[str] = MetadataField( + node_type: str | None = MetadataField( None, description='The type of the node', is_attribute=False, exclude_to_orm=True, exclude_from_cli=True ) - process_type: Optional[str] = MetadataField( + process_type: str | None = MetadataField( None, description='The process type of the node', is_attribute=False, exclude_to_orm=True, exclude_from_cli=True, ) - repository_metadata: Optional[Dict[str, Any]] = MetadataField( + repository_metadata: Dict[str, Any] | None = MetadataField( None, description='Virtual hierarchy of the file repository.', is_attribute=False, @@ -217,27 +229,25 @@ class Model(Entity.Model): exclude_to_orm=True, exclude_from_cli=True, ) - ctime: Optional[datetime.datetime] = MetadataField( + ctime: datetime.datetime | None = MetadataField( None, description='The creation time of the node', is_attribute=False, exclude_to_orm=True, exclude_from_cli=True, ) - mtime: Optional[datetime.datetime] = MetadataField( + mtime: datetime.datetime | None = MetadataField( None, description='The modification time of the node', is_attribute=False, exclude_to_orm=True, exclude_from_cli=True, ) - label: Optional[str] = MetadataField( - None, description='The node label', is_attribute=False, exclude_from_cli=True - ) - description: Optional[str] = MetadataField( + label: str | None = MetadataField(None, description='The node label', is_attribute=False, exclude_from_cli=True) + description: str | None = MetadataField( None, description='The node description', is_attribute=False, exclude_from_cli=True ) - attributes: Optional[Dict[str, Any]] = MetadataField( + attributes: Dict[str, Any] | None = MetadataField( None, description='The node attributes', is_attribute=False, @@ -246,7 +256,7 @@ class Model(Entity.Model): exclude_from_cli=True, exclude_to_orm=True, ) - extras: Optional[Dict[str, Any]] = MetadataField( + extras: Dict[str, Any] | None = MetadataField( None, description='The node extras', is_attribute=False, @@ -255,7 +265,7 @@ class Model(Entity.Model): exclude_from_cli=True, exclude_to_orm=True, ) - computer: Optional[int] = MetadataField( + computer: int | None = MetadataField( None, description='The PK of the computer', is_attribute=False, @@ -263,7 +273,7 @@ class Model(Entity.Model): orm_class=Computer, exclude_from_cli=True, ) - user: Optional[int] = MetadataField( + user: int | None = MetadataField( None, description='The PK of the user who owns the node', is_attribute=False, @@ -271,7 +281,7 @@ class Model(Entity.Model): orm_class=User, exclude_from_cli=True, ) - repository_content: Optional[dict[str, bytes]] = MetadataField( + repository_content: dict[str, bytes] | None = MetadataField( None, description='Dictionary of file repository content. Keys are relative filepaths and values are binary file ' 'contents encoded as base64.', @@ -286,10 +296,10 @@ class Model(Entity.Model): def __init__( self, - backend: Optional['StorageBackend'] = None, - user: Optional[User] = None, - computer: Optional[Computer] = None, - extras: Optional[Dict[str, Any]] = None, + backend: 'StorageBackend' | None = None, + user: User | None = None, + computer: Computer | None = None, + extras: Dict[str, Any] | None = None, **kwargs: Any, ) -> None: backend = backend or get_manager().get_profile_storage() @@ -328,7 +338,7 @@ def base(self) -> NodeBase: """Return the node base namespace.""" return NodeBase(self) - def _check_mutability_attributes(self, keys: Optional[List[str]] = None) -> None: + def _check_mutability_attributes(self, keys: List[str] | None = None) -> None: """Check if the entity is mutable and raise an exception if not. This is called from `NodeAttributes` methods that modify the attributes. @@ -401,7 +411,7 @@ def class_node_type(cls) -> str: # noqa: N805 return cls._plugin_type_string @classproperty - def entry_point(cls) -> Optional['EntryPoint']: # noqa: N805 + def entry_point(cls) -> 'EntryPoint' | None: # noqa: N805 """Return the entry point associated this node class. :return: the associated entry point or ``None`` if it isn't known. @@ -435,7 +445,7 @@ def node_type(self) -> str: return self.backend_entity.node_type @property - def process_type(self) -> Optional[str]: + def process_type(self) -> str | None: """Return the node process type. :return: the process type @@ -483,7 +493,7 @@ def description(self, value: str) -> None: self.backend_entity.description = value @property - def computer(self) -> Optional[Computer]: + def computer(self) -> Computer | None: """Return the computer of this node.""" if self.backend_entity.computer: return from_backend_entity(Computer, self.backend_entity.computer) @@ -491,7 +501,7 @@ def computer(self) -> Optional[Computer]: return None @computer.setter - def computer(self, computer: Optional[Computer]) -> None: + def computer(self, computer: Computer | None) -> None: """Set the computer of this node. :param computer: a `Computer` diff --git a/src/aiida/orm/nodes/process/calculation/calcjob.py b/src/aiida/orm/nodes/process/calculation/calcjob.py index a526fc3b9c..e806f5e995 100644 --- a/src/aiida/orm/nodes/process/calculation/calcjob.py +++ b/src/aiida/orm/nodes/process/calculation/calcjob.py @@ -8,8 +8,19 @@ ########################################################################### """Module with `Node` sub class for calculation job processes.""" +from __future__ import annotations + import datetime -from typing import TYPE_CHECKING, Any, AnyStr, Dict, List, Optional, Sequence, Tuple, Type, Union +from typing import ( + TYPE_CHECKING, + Any, + AnyStr, + Dict, + List, + Sequence, + Tuple, + Type, +) from aiida.common import exceptions from aiida.common.datastructures import CalcJobState @@ -65,40 +76,40 @@ class CalcJobNode(CalculationNode): SCHEDULER_DETAILED_JOB_INFO_KEY = 'detailed_job_info' class Model(CalculationNode.Model): - scheduler_state: Optional[str] = MetadataField( + scheduler_state: str | None = MetadataField( description='The state of the scheduler', orm_to_model=lambda node, _: node.get_scheduler_state() ) - state: Optional[str] = MetadataField( + state: str | None = MetadataField( description='The active state of the calculation job', orm_to_model=lambda node, _: node.get_state() ) - remote_workdir: Optional[str] = MetadataField( + remote_workdir: str | None = MetadataField( description='The path to the remote (on cluster) scratch folder', orm_to_model=lambda node, _: node.get_remote_workdir(), ) - job_id: Optional[str] = MetadataField( + job_id: str | None = MetadataField( description='The scheduler job id', orm_to_model=lambda node, _: node.get_job_id() ) - scheduler_lastchecktime: Optional[datetime.datetime] = MetadataField( + scheduler_lastchecktime: datetime.datetime | None = MetadataField( description='The last time the scheduler was checked, in isoformat', orm_to_model=lambda node, _: node.get_scheduler_lastchecktime(), ) - last_job_info: Optional[dict] = MetadataField( + last_job_info: dict | None = MetadataField( description='The last job info returned by the scheduler', orm_to_model=lambda node, _: dict(node.get_last_job_info() or {}), ) - detailed_job_info: Optional[dict] = MetadataField( + detailed_job_info: dict | None = MetadataField( description='The detailed job info returned by the scheduler', orm_to_model=lambda node, _: node.get_detailed_job_info(), ) - retrieve_list: Optional[List[str]] = MetadataField( + retrieve_list: List[str] | None = MetadataField( description='The list of files to retrieve from the remote cluster', orm_to_model=lambda node, _: node.get_retrieve_list(), ) - retrieve_temporary_list: Optional[List[str]] = MetadataField( + retrieve_temporary_list: List[str] | None = MetadataField( description='The list of temporary files to retrieve from the remote cluster', orm_to_model=lambda node, _: node.get_retrieve_temporary_list(), ) - imported: Optional[bool] = MetadataField( + imported: bool | None = MetadataField( description='Whether the node has been migrated', orm_to_model=lambda node, _: node.is_imported ) @@ -168,7 +179,7 @@ def is_imported(self) -> bool: """Return whether the calculation job was imported instead of being an actual run.""" return self.base.attributes.get(self.IMMIGRATED_KEY, None) is True - def get_option(self, name: str) -> Optional[Any]: + def get_option(self, name: str) -> Any | None: """Return the value of an option that was set for this CalcJobNode. :param name: the option name @@ -208,7 +219,7 @@ def set_options(self, options: Dict[str, Any]) -> None: for name, value in options.items(): self.set_option(name, value) - def get_state(self) -> Optional[CalcJobState]: + def get_state(self) -> CalcJobState | None: """Return the calculation job active sub state. The calculation job state serves to give more granular state information to `CalcJobs`, in addition to the @@ -251,7 +262,7 @@ def set_remote_workdir(self, remote_workdir: str) -> None: """ self.base.attributes.set(self.REMOTE_WORKDIR_KEY, remote_workdir) - def get_remote_workdir(self) -> Optional[str]: + def get_remote_workdir(self) -> str | None: """Return the path to the remote (on cluster) scratch folder of the calculation. :return: a string with the remote path @@ -259,7 +270,7 @@ def get_remote_workdir(self) -> Optional[str]: return self.base.attributes.get(self.REMOTE_WORKDIR_KEY, None) @staticmethod - def _validate_retrieval_directive(directives: Sequence[Union[str, Tuple[str, str, str]]]) -> None: + def _validate_retrieval_directive(directives: Sequence[str | Tuple[str, str, str]]) -> None: """Validate a list or tuple of file retrieval directives. :param directives: a list or tuple of file retrieval directives @@ -286,7 +297,7 @@ def _validate_retrieval_directive(directives: Sequence[Union[str, Tuple[str, str if not isinstance(directive[2], (int, type(None))): raise ValueError('invalid directive, third element has to be an integer representing the depth') - def set_retrieve_list(self, retrieve_list: Sequence[Union[str, Tuple[str, str, str]]]) -> None: + def set_retrieve_list(self, retrieve_list: Sequence[str | Tuple[str, str, str]]) -> None: """Set the retrieve list. This list of directives will instruct the daemon what files to retrieve after the calculation has completed. @@ -297,14 +308,14 @@ def set_retrieve_list(self, retrieve_list: Sequence[Union[str, Tuple[str, str, s self._validate_retrieval_directive(retrieve_list) self.base.attributes.set(self.RETRIEVE_LIST_KEY, retrieve_list) - def get_retrieve_list(self) -> Optional[Sequence[Union[str, Tuple[str, str, str]]]]: + def get_retrieve_list(self) -> Sequence[str | Tuple[str, str, str]] | None: """Return the list of files/directories to be retrieved on the cluster after the calculation has completed. :return: a list of file directives """ return self.base.attributes.get(self.RETRIEVE_LIST_KEY, None) - def set_retrieve_temporary_list(self, retrieve_temporary_list: Sequence[Union[str, Tuple[str, str, str]]]) -> None: + def set_retrieve_temporary_list(self, retrieve_temporary_list: Sequence[str | Tuple[str, str, str]]) -> None: """Set the retrieve temporary list. The retrieve temporary list stores files that are retrieved after completion and made available during parsing @@ -315,14 +326,14 @@ def set_retrieve_temporary_list(self, retrieve_temporary_list: Sequence[Union[st self._validate_retrieval_directive(retrieve_temporary_list) self.base.attributes.set(self.RETRIEVE_TEMPORARY_LIST_KEY, retrieve_temporary_list) - def get_retrieve_temporary_list(self) -> Optional[Sequence[Union[str, Tuple[str, str, str]]]]: + def get_retrieve_temporary_list(self) -> Sequence[str | Tuple[str, str, str]] | None: """Return list of files to be retrieved from the cluster which will be available during parsing. :return: a list of file directives """ return self.base.attributes.get(self.RETRIEVE_TEMPORARY_LIST_KEY, None) - def set_job_id(self, job_id: Union[int, str]) -> None: + def set_job_id(self, job_id: int | str) -> None: """Set the job id that was assigned to the calculation by the scheduler. .. note:: the id will always be stored as a string @@ -331,7 +342,7 @@ def set_job_id(self, job_id: Union[int, str]) -> None: """ return self.base.attributes.set(self.SCHEDULER_JOB_ID_KEY, str(job_id)) - def get_job_id(self) -> Optional[str]: + def get_job_id(self) -> str | None: """Return job id that was assigned to the calculation by the scheduler. :return: the string representation of the scheduler job id @@ -352,7 +363,7 @@ def set_scheduler_state(self, state: 'JobState') -> None: self.base.attributes.set(self.SCHEDULER_STATE_KEY, state.value) self.base.attributes.set(self.SCHEDULER_LAST_CHECK_TIME_KEY, timezone.now().isoformat()) - def get_scheduler_state(self) -> Optional['JobState']: + def get_scheduler_state(self) -> 'JobState' | None: """Return the status of the calculation according to the cluster scheduler. :return: a JobState enum instance. @@ -366,7 +377,7 @@ def get_scheduler_state(self) -> Optional['JobState']: return JobState(state) - def get_scheduler_lastchecktime(self) -> Optional[datetime.datetime]: + def get_scheduler_lastchecktime(self) -> datetime.datetime | None: """Return the time of the last update of the scheduler state by the daemon or None if it was never set. :return: a datetime object or None @@ -378,14 +389,14 @@ def get_scheduler_lastchecktime(self) -> Optional[datetime.datetime]: return value - def set_detailed_job_info(self, detailed_job_info: Optional[dict]) -> None: + def set_detailed_job_info(self, detailed_job_info: dict | None) -> None: """Set the detailed job info dictionary. :param detailed_job_info: a dictionary with metadata with the accounting of a completed job """ self.base.attributes.set(self.SCHEDULER_DETAILED_JOB_INFO_KEY, detailed_job_info) - def get_detailed_job_info(self) -> Optional[dict]: + def get_detailed_job_info(self) -> dict | None: """Return the detailed job info dictionary. The scheduler is polled for the detailed job info after the job is completed and ready to be retrieved. @@ -401,7 +412,7 @@ def set_last_job_info(self, last_job_info: 'JobInfo') -> None: """ self.base.attributes.set(self.SCHEDULER_LAST_JOB_INFO_KEY, last_job_info.get_dict()) - def get_last_job_info(self) -> Optional['JobInfo']: + def get_last_job_info(self) -> 'JobInfo' | None: """Return the last information asked to the scheduler about the status of the job. The last job info is updated on every poll of the scheduler, except for the final poll when the job drops from @@ -443,7 +454,7 @@ def get_transport(self) -> 'Transport': """ return self.get_authinfo().get_transport() - def get_parser_class(self) -> Optional[Type['Parser']]: + def get_parser_class(self) -> Type['Parser'] | None: """Return the output parser object for this calculation or None if no parser is set. :return: a `Parser` class. @@ -463,7 +474,7 @@ def link_label_retrieved(self) -> str: """Return the link label used for the retrieved FolderData node.""" return 'retrieved' - def get_retrieved_node(self) -> Optional['FolderData']: + def get_retrieved_node(self) -> 'FolderData' | None: """Return the retrieved data folder. :return: the retrieved FolderData node or None if not found @@ -493,7 +504,7 @@ def res(self) -> 'CalcJobResultManager': return CalcJobResultManager(self) - def get_scheduler_stdout(self) -> Optional[AnyStr]: + def get_scheduler_stdout(self) -> AnyStr | None: """Return the scheduler stderr output if the calculation has finished and been retrieved, None otherwise. :return: scheduler stderr output or None @@ -511,7 +522,7 @@ def get_scheduler_stdout(self) -> Optional[AnyStr]: return stdout - def get_scheduler_stderr(self) -> Optional[AnyStr]: + def get_scheduler_stderr(self) -> AnyStr | None: """Return the scheduler stdout output if the calculation has finished and been retrieved, None otherwise. :return: scheduler stdout output or None diff --git a/src/aiida/orm/nodes/process/process.py b/src/aiida/orm/nodes/process/process.py index 37369d14f6..063747cecc 100644 --- a/src/aiida/orm/nodes/process/process.py +++ b/src/aiida/orm/nodes/process/process.py @@ -8,9 +8,18 @@ ########################################################################### """Module with `Node` sub class for processes.""" +from __future__ import annotations + import enum from pathlib import Path -from typing import TYPE_CHECKING, Any, Dict, List, Optional, Tuple, Type, Union +from typing import ( + TYPE_CHECKING, + Any, + Dict, + List, + Tuple, + Type, +) from plumpy.process_states import ProcessState @@ -189,19 +198,19 @@ def _updatable_attributes(cls) -> Tuple[str, ...]: # noqa: N805 ) class Model(Node.Model, Sealable.Model): - process_label: Optional[str] = MetadataField(description='The process label') - process_state: Optional[str] = MetadataField(description='The process state enum') - process_status: Optional[str] = MetadataField(description='The process status is a generic status message') - exit_status: Optional[int] = MetadataField(description='The process exit status') - exit_message: Optional[str] = MetadataField(description='The process exit message') - exception: Optional[str] = MetadataField(description='The process exception message') + process_label: str | None = MetadataField(description='The process label') + process_state: str | None = MetadataField(description='The process state enum') + process_status: str | None = MetadataField(description='The process status is a generic status message') + exit_status: int | None = MetadataField(description='The process exit status') + exit_message: str | None = MetadataField(description='The process exit message') + exception: str | None = MetadataField(description='The process exception message') paused: bool = MetadataField(description='Whether the process is paused') def set_metadata_inputs(self, value: Dict[str, Any]) -> None: """Set the mapping of inputs corresponding to ``metadata`` ports that were passed to the process.""" return self.base.attributes.set(self.METADATA_INPUTS_KEY, value) - def get_metadata_inputs(self) -> Optional[Dict[str, Any]]: + def get_metadata_inputs(self) -> Dict[str, Any] | None: """Return the mapping of inputs corresponding to ``metadata`` ports that were passed to the process.""" return self.base.attributes.get(self.METADATA_INPUTS_KEY, None) @@ -303,7 +312,7 @@ def set_process_type(self, process_type_string: str) -> None: self.process_type = process_type_string @property - def process_label(self) -> Optional[str]: + def process_label(self) -> str | None: """Return the process label :returns: the process label @@ -318,7 +327,7 @@ def set_process_label(self, label: str) -> None: self.base.attributes.set(self.PROCESS_LABEL_KEY, label) @property - def process_state(self) -> Optional[ProcessState]: + def process_state(self) -> ProcessState | None: """Return the process state :returns: the process state instance of ProcessState enum @@ -330,7 +339,7 @@ def process_state(self) -> Optional[ProcessState]: return ProcessState(state) - def set_process_state(self, state: Union[str, ProcessState, None]): + def set_process_state(self, state: str | ProcessState | None): """Set the process state :param state: value or instance of ProcessState enum @@ -340,7 +349,7 @@ def set_process_state(self, state: Union[str, ProcessState, None]): return self.base.attributes.set(self.PROCESS_STATE_KEY, state) @property - def process_status(self) -> Optional[str]: + def process_status(self) -> str | None: """Return the process status The process status is a generic status message e.g. the reason it might be paused or when it is being killed @@ -349,7 +358,7 @@ def process_status(self) -> Optional[str]: """ return self.base.attributes.get(self.PROCESS_STATUS_KEY, None) - def set_process_status(self, status: Optional[str]) -> None: + def set_process_status(self, status: str | None) -> None: """Set the process status The process status is a generic status message e.g. the reason it might be paused or when it is being killed. @@ -437,7 +446,7 @@ def is_failed(self) -> bool: return self.is_finished and self.exit_status != 0 @property - def exit_code(self) -> Optional['ExitCode']: + def exit_code(self) -> 'ExitCode' | None: """Return the exit code of the process. It is reconstituted from the ``exit_status`` and ``exit_message`` attributes if both of those are defined. @@ -455,14 +464,14 @@ def exit_code(self) -> Optional['ExitCode']: return ExitCode(exit_status, exit_message) @property - def exit_status(self) -> Optional[int]: + def exit_status(self) -> int | None: """Return the exit status of the process :returns: the exit status, an integer exit code or None """ return self.base.attributes.get(self.EXIT_STATUS_KEY, None) - def set_exit_status(self, status: Union[None, enum.Enum, int]) -> None: + def set_exit_status(self, status: None | enum.Enum | int) -> None: """Set the exit status of the process :param state: an integer exit code or None, which will be interpreted as zero @@ -479,14 +488,14 @@ def set_exit_status(self, status: Union[None, enum.Enum, int]) -> None: return self.base.attributes.set(self.EXIT_STATUS_KEY, status) @property - def exit_message(self) -> Optional[str]: + def exit_message(self) -> str | None: """Return the exit message of the process :returns: the exit message """ return self.base.attributes.get(self.EXIT_MESSAGE_KEY, None) - def set_exit_message(self, message: Optional[str]) -> None: + def set_exit_message(self, message: str | None) -> None: """Set the exit message of the process, if None nothing will be done :param message: a string message @@ -500,7 +509,7 @@ def set_exit_message(self, message: Optional[str]) -> None: return self.base.attributes.set(self.EXIT_MESSAGE_KEY, message) @property - def exception(self) -> Optional[str]: + def exception(self) -> str | None: """Return the exception of the process or None if the process is not excepted. If the process is marked as excepted yet there is no exception attribute, an empty string will be returned. @@ -523,7 +532,7 @@ def set_exception(self, exception: str) -> None: return self.base.attributes.set(self.EXCEPTION_KEY, exception) @property - def checkpoint(self) -> Optional[str]: + def checkpoint(self) -> str | None: """Return the checkpoint bundle set for the process :returns: checkpoint bundle if it exists, None otherwise @@ -594,7 +603,7 @@ def called_descendants(self) -> List['ProcessNode']: return descendants @property - def caller(self) -> Optional['ProcessNode']: + def caller(self) -> 'ProcessNode' | None: """Return the process node that called this process node, or None if it does not have a caller :returns: process node that called this process node instance or None @@ -607,7 +616,7 @@ def caller(self) -> Optional['ProcessNode']: def dump( self, - output_path: Optional[Union[str, Path]] = None, + output_path: str | Path | None = None, # Dump mode options dry_run: bool = False, overwrite: bool = False, diff --git a/src/aiida/orm/nodes/process/workflow/workchain.py b/src/aiida/orm/nodes/process/workflow/workchain.py index 711942706b..185612ee4b 100644 --- a/src/aiida/orm/nodes/process/workflow/workchain.py +++ b/src/aiida/orm/nodes/process/workflow/workchain.py @@ -8,7 +8,7 @@ ########################################################################### """Module with `Node` sub class for workchain processes.""" -from typing import Optional, Tuple +from typing import Tuple from aiida.common.lang import classproperty @@ -27,7 +27,7 @@ def _updatable_attributes(cls) -> Tuple[str, ...]: # noqa: N805 return super()._updatable_attributes + (cls.STEPPER_STATE_INFO_KEY,) @property - def stepper_state_info(self) -> Optional[str]: + def stepper_state_info(self) -> str | None: """Return the stepper state info :returns: string representation of the stepper state info diff --git a/src/aiida/orm/querybuilder.py b/src/aiida/orm/querybuilder.py index 2587636bb2..7565c8b73b 100644 --- a/src/aiida/orm/querybuilder.py +++ b/src/aiida/orm/querybuilder.py @@ -30,12 +30,11 @@ List, Literal, NamedTuple, - Optional, Sequence, Set, Tuple, Type, - Union, + TypeAlias, cast, overload, ) @@ -61,10 +60,10 @@ __all__ = ('QueryBuilder',) # re-usable type annotations -EntityClsType = Type[Union[entities.Entity, 'Process']] -ProjectType = Union[str, dict, Sequence[Union[str, dict]]] -FilterType = Union[Dict[str, Any], fields.QbFieldFilters] -OrderByType = Union[dict, List[dict], Tuple[dict, ...]] +EntityClsType: TypeAlias = 'Type[entities.Entity | Process]' +ProjectType: TypeAlias = 'str | dict | Sequence[str | dict]' +FilterType: TypeAlias = 'Dict[str, Any] | fields.QbFieldFilters' +OrderByType: TypeAlias = 'dict | List[dict] | Tuple[dict, ...]' LOGGER = AIIDA_LOGGER.getChild('querybuilder') @@ -73,7 +72,7 @@ class Classifier(NamedTuple): """A classifier for an entity.""" ormclass_type_string: str - process_type_string: Optional[str] = None + process_type_string: str | None = None class QueryBuilder: @@ -97,17 +96,17 @@ class QueryBuilder: def __init__( self, - backend: Optional['StorageBackend'] = None, + backend: 'StorageBackend' | None = None, *, debug: bool | None = None, - path: Optional[Sequence[Union[str, Dict[str, Any], EntityClsType]]] = (), - filters: Optional[Dict[str, FilterType]] = None, - project: Optional[Dict[str, ProjectType]] = None, - limit: Optional[int] = None, - offset: Optional[int] = None, - order_by: Optional[OrderByType] = None, + path: Sequence[str | Dict[str, Any] | EntityClsType] | None = (), + filters: Dict[str, FilterType] | None = None, + project: Dict[str, ProjectType] | None = None, + limit: int | None = None, + offset: int | None = None, + order_by: OrderByType | None = None, distinct: bool = False, - project_map: Optional[Dict[str, Dict[str, str]]] = None, + project_map: Dict[str, Dict[str, str]] | None = None, ) -> None: """Instantiates a QueryBuilder instance. @@ -154,8 +153,8 @@ def __init__( self._project_map: Dict[str, Dict[str, str]] = {} # list of mappings: tag -> list(fields) -> 'order' | 'cast' -> value (str('asc' | 'desc'), str(cast_key)) self._order_by: List[Dict[str, List[Dict[str, Dict[str, str]]]]] = [] - self._limit: Optional[int] = None - self._offset: Optional[int] = None + self._limit: int | None = None + self._offset: int | None = None self._distinct: bool = distinct # cache of tag mappings, populated during appends @@ -290,19 +289,19 @@ def _get_unique_tag(self, classifiers: List[Classifier]) -> str: def append( self, - cls: Optional[Union[EntityClsType, Sequence[EntityClsType]]] = None, - entity_type: Optional[Union[str, Sequence[str]]] = None, - tag: Optional[str] = None, - filters: Optional[FilterType] = None, - project: Optional[ProjectType] = None, + cls: EntityClsType | Sequence[EntityClsType] | None = None, + entity_type: str | Sequence[str] | None = None, + tag: str | None = None, + filters: FilterType | None = None, + project: ProjectType | None = None, subclassing: bool = True, - edge_tag: Optional[str] = None, - edge_filters: Optional[FilterType] = None, - edge_project: Optional[ProjectType] = None, + edge_tag: str | None = None, + edge_filters: FilterType | None = None, + edge_project: ProjectType | None = None, outerjoin: bool = False, - joining_keyword: Optional[str] = None, - joining_value: Optional[Any] = None, - orm_base: Optional[str] = None, + joining_keyword: str | None = None, + joining_value: Any | None = None, + orm_base: str | None = None, **kwargs: Any, ) -> 'QueryBuilder': """Any iterative procedure to build the path for a graph query @@ -551,7 +550,7 @@ def append( # EXTENDING THE PATH ################################# # Note: 'type' being a list is a relict of an earlier implementation # Could simply pass all classifiers here. - path_type: Union[List[str], str] + path_type: List[str] | str if len(classifiers) > 1: path_type = [c.ormclass_type_string for c in classifiers] else: @@ -691,7 +690,7 @@ def order_by(self, order_by: OrderByType) -> 'QueryBuilder': self._order_by.append(_order_spec) return self - def add_filter(self, tagspec: Union[str, EntityClsType], filter_spec: FilterType) -> 'QueryBuilder': + def add_filter(self, tagspec: str | EntityClsType, filter_spec: FilterType) -> 'QueryBuilder': """Adding a filter to my filters. :param tagspec: A tag string or an ORM class which maps to an existing tag @@ -790,7 +789,7 @@ def _add_group_type_filter(self, tagspec: str, classifiers: List[Classifier], su self.add_filter(tagspec, {'type_string': type_string_filter}) - def add_projection(self, tag_spec: Union[str, EntityClsType], projection_spec: ProjectType) -> None: + def add_projection(self, tag_spec: str | EntityClsType, projection_spec: ProjectType) -> None: r"""Adds a projection :param tag_spec: A tag string or an ORM class which maps to an existing tag @@ -902,7 +901,7 @@ def debug(self, msg: str, *objects: Any) -> None: if self._debug: print(f'DEBUG: {msg}' % objects) - def limit(self, limit: Optional[int]) -> 'QueryBuilder': + def limit(self, limit: int | None) -> 'QueryBuilder': """Set the limit (nr of rows to return) :param limit: integers of number of rows of rows to return @@ -912,7 +911,7 @@ def limit(self, limit: Optional[int]) -> 'QueryBuilder': self._limit = limit return self - def offset(self, offset: Optional[int]) -> 'QueryBuilder': + def offset(self, offset: int | None) -> 'QueryBuilder': """Set the offset. If offset is set, that many rows are skipped before returning. *offset* = 0 is the same as omitting setting the offset. If both offset and limit appear, @@ -1068,7 +1067,7 @@ def count(self) -> int: """ return self._impl.count(self.as_dict()) - def iterall(self, batch_size: Optional[int] = 100) -> Iterable[List[Any]]: + def iterall(self, batch_size: int | None = 100) -> Iterable[List[Any]]: """Same as :meth:`.all`, but returns a generator. Be aware that this is only safe if no commit will take place during this transaction. You might also want to read the SQLAlchemy documentation on @@ -1087,7 +1086,7 @@ def iterall(self, batch_size: Optional[int] = 100) -> Iterable[List[Any]]: yield item - def iterdict(self, batch_size: Optional[int] = 100) -> Iterable[Dict[str, Dict[str, Any]]]: + def iterdict(self, batch_size: int | None = 100) -> Iterable[Dict[str, Dict[str, Any]]]: """Same as :meth:`.dict`, but returns a generator. Be aware that this is only safe if no commit will take place during this transaction. You might also want to read the SQLAlchemy documentation on @@ -1152,7 +1151,7 @@ def one(self) -> List[Any]: raise NotExistent('No result was found') return res[0] - def dict(self, batch_size: Optional[int] = None) -> List[Dict[str, Dict[str, Any]]]: + def dict(self, batch_size: int | None = None) -> List[Dict[str, Dict[str, Any]]]: """Executes the full query with the order of the rows as returned by the backend. the order inside each row is given by the order of the vertices in the path and the order of the projections for each vertice in the path. @@ -1201,7 +1200,7 @@ def dict(self, batch_size: Optional[int] = None) -> List[Dict[str, Dict[str, Any def _get_ormclass( - cls: Union[None, EntityClsType, Sequence[EntityClsType]], entity_type: Union[None, str, Sequence[str]] + cls: None | EntityClsType | Sequence[EntityClsType], entity_type: None | str | Sequence[str] ) -> Tuple[EntityTypes, List[Classifier]]: """Get ORM classifiers from either class(es) or ormclass_type_string(s). @@ -1425,7 +1424,7 @@ class _QueryTagMap: def __init__(self): """Construct a new instance.""" - self._tag_to_type: Dict[str, Union[None, EntityTypes]] = {} + self._tag_to_type: Dict[str, None | EntityTypes] = {} # A dictionary for classes passed to the tag given to them # Everything is specified with unique tags, which are strings. # But somebody might not care about giving tags, so to do @@ -1452,8 +1451,8 @@ def __iter__(self): def add( self, tag: str, - etype: Union[None, EntityTypes] = None, - klasses: Union[None, EntityClsType, Sequence[EntityClsType]] = None, + etype: None | EntityTypes = None, + klasses: None | EntityClsType | Sequence[EntityClsType] = None, ) -> None: """Add a tag.""" self._tag_to_type[tag] = etype @@ -1468,7 +1467,7 @@ def remove(self, tag: str) -> None: for tags in self._cls_to_tag_map.values(): tags.discard(tag) - def get(self, tag_or_cls: Union[str, EntityClsType]) -> str: + def get(self, tag_or_cls: str | EntityClsType) -> str: """Return the tag or, given a class(es), map to a tag. :raises ValueError: if the tag is not found, or the class(es) does not map to a single tag diff --git a/src/aiida/orm/users.py b/src/aiida/orm/users.py index bb091b9fa0..5f4e6f6be0 100644 --- a/src/aiida/orm/users.py +++ b/src/aiida/orm/users.py @@ -8,7 +8,9 @@ ########################################################################### """Module for the ORM user class.""" -from typing import TYPE_CHECKING, Optional, Tuple, Type +from __future__ import annotations + +from typing import TYPE_CHECKING, Tuple, Type from aiida.common import exceptions from aiida.common.pydantic import MetadataField @@ -43,7 +45,7 @@ def get_or_create(self, email: str, **kwargs) -> Tuple[bool, 'User']: except exceptions.NotExistent: return True, User(backend=self.backend, email=email, **kwargs) - def get_default(self) -> Optional['User']: + def get_default(self) -> 'User' | None: """Get the current default user""" return self.backend.default_user @@ -65,7 +67,7 @@ def __init__( first_name: str = '', last_name: str = '', institution: str = '', - backend: Optional['StorageBackend'] = None, + backend: 'StorageBackend' | None = None, ): """Create a new `User`.""" backend = backend or get_manager().get_profile_storage() diff --git a/src/aiida/orm/utils/links.py b/src/aiida/orm/utils/links.py index 4129fd8774..d562e78563 100644 --- a/src/aiida/orm/utils/links.py +++ b/src/aiida/orm/utils/links.py @@ -8,9 +8,17 @@ ########################################################################### """Utilities for dealing with links between nodes.""" +from __future__ import annotations + from collections import OrderedDict from collections.abc import Mapping -from typing import TYPE_CHECKING, Generator, Iterator, List, NamedTuple, Optional +from typing import ( + TYPE_CHECKING, + Generator, + Iterator, + List, + NamedTuple, +) from aiida.common import exceptions from aiida.common.lang import type_check @@ -42,7 +50,7 @@ class LinkQuadruple(NamedTuple): def link_triple_exists( - source: 'Node', target: 'Node', link_type: 'LinkType', link_label: str, backend: Optional['StorageBackend'] = None + source: 'Node', target: 'Node', link_type: 'LinkType', link_label: str, backend: 'StorageBackend' | None = None ) -> bool: """Return whether a link with the given type and label exists between the given source and target node. @@ -75,7 +83,7 @@ def link_triple_exists( def validate_link( - source: 'Node', target: 'Node', link_type: 'LinkType', link_label: str, backend: Optional['StorageBackend'] = None + source: 'Node', target: 'Node', link_type: 'LinkType', link_label: str, backend: 'StorageBackend' | None = None ) -> None: """Validate adding a link of the given type and label from a given node to ourself. @@ -280,7 +288,7 @@ def one(self) -> LinkTriple: raise ValueError('no entries found') - def first(self) -> Optional[LinkTriple]: + def first(self) -> LinkTriple | None: """Return the first entry from the iterator. :return: LinkTriple instance or None if no entries were matched diff --git a/src/aiida/parsers/parser.py b/src/aiida/parsers/parser.py index 08e1402501..44724479a8 100644 --- a/src/aiida/parsers/parser.py +++ b/src/aiida/parsers/parser.py @@ -13,7 +13,7 @@ from __future__ import annotations from abc import ABC, abstractmethod -from typing import TYPE_CHECKING, Any, Dict, Optional, Tuple +from typing import TYPE_CHECKING, Any, Dict, Tuple from aiida.common import exceptions, extendeddicts, log from aiida.engine import ExitCode, ExitCodesNamespace, calcfunction @@ -118,7 +118,7 @@ def get_outputs_for_parsing(self): @classmethod def parse_from_node( cls, node: 'CalcJobNode', store_provenance=True, retrieved_temporary_folder=None - ) -> Tuple[Optional[Dict[str, Any]], 'orm.CalcFunctionNode']: + ) -> Tuple[Dict[str, Any] | None, 'orm.CalcFunctionNode']: """Parse the outputs directly from the `CalcJobNode`. If `store_provenance` is set to False, a `CalcFunctionNode` will still be generated, but it will not be stored. @@ -186,7 +186,7 @@ def parse_calcfunction(**kwargs): return parse_calcfunction.run_get_node(**inputs) @abstractmethod - def parse(self, **kwargs) -> Optional[ExitCode]: + def parse(self, **kwargs) -> ExitCode | None: """Parse the contents of the output files retrieved in the `FolderData`. This method should be implemented in the sub class. Outputs can be registered through the `out` method. diff --git a/src/aiida/plugins/entry_point.py b/src/aiida/plugins/entry_point.py index 7ec26a4c34..798012a15d 100644 --- a/src/aiida/plugins/entry_point.py +++ b/src/aiida/plugins/entry_point.py @@ -13,7 +13,14 @@ import enum import functools import traceback -from typing import TYPE_CHECKING, Any, List, Optional, Sequence, Set, Tuple +from typing import ( + TYPE_CHECKING, + Any, + List, + Sequence, + Set, + Tuple, +) from aiida.common.exceptions import LoadingEntryPointError, MissingEntryPointError, MultipleEntryPointError from aiida.common.warnings import warn_deprecation @@ -355,7 +362,7 @@ def convert_potentially_deprecated_entry_point(group: str, name: str) -> str: @functools.lru_cache(maxsize=100) -def get_entry_point_from_class(class_module: str, class_name: str) -> Tuple[Optional[str], Optional[EntryPoint]]: +def get_entry_point_from_class(class_module: str, class_name: str) -> Tuple[str | None, EntryPoint | None]: """Given the module and name of a class, attempt to obtain the corresponding entry point if it exists :param class_module: module of the class @@ -368,7 +375,7 @@ def get_entry_point_from_class(class_module: str, class_name: str) -> Tuple[Opti return None, None -def get_entry_point_string_from_class(class_module: str, class_name: str) -> Optional[str]: +def get_entry_point_string_from_class(class_module: str, class_name: str) -> str | None: """Given the module and name of a class, attempt to obtain the corresponding entry point if it exists and return the entry point string which will be the entry point group and entry point name concatenated by the entry point string separator @@ -410,7 +417,7 @@ def is_valid_entry_point_string(entry_point_string: str) -> bool: @functools.lru_cache(maxsize=100) -def is_registered_entry_point(class_module: str, class_name: str, groups: Optional[Sequence[str]] = None) -> bool: +def is_registered_entry_point(class_module: str, class_name: str, groups: Sequence[str] | None = None) -> bool: """Verify whether the class with the given module and class name is a registered entry point. .. note:: this function only checks whether the class has a registered entry point. It does explicitly not verify diff --git a/src/aiida/plugins/factories.py b/src/aiida/plugins/factories.py index 925b400672..01ba6c9014 100644 --- a/src/aiida/plugins/factories.py +++ b/src/aiida/plugins/factories.py @@ -11,7 +11,16 @@ from __future__ import annotations -from typing import TYPE_CHECKING, Any, Callable, Literal, NoReturn, Tuple, Type, Union, overload +from typing import ( + TYPE_CHECKING, + Any, + Callable, + Literal, + NoReturn, + Tuple, + Type, + overload, +) from aiida.common.exceptions import InvalidEntryPointTypeError @@ -58,7 +67,7 @@ def raise_invalid_type_error(entry_point_name: str, entry_point_group: str, vali raise InvalidEntryPointTypeError(template.format(*args)) -def BaseFactory(group: str, name: str, load: bool = True) -> Union[EntryPoint, Any]: +def BaseFactory(group: str, name: str, load: bool = True) -> EntryPoint | Any: """Return the plugin class registered under a given entry point group and name. :param group: entry point group @@ -85,7 +94,7 @@ def BrokerFactory(entry_point_name: str, load: Literal[True] = True) -> Type['Br def BrokerFactory(entry_point_name: str, load: Literal[False]) -> EntryPoint: ... -def BrokerFactory(entry_point_name: str, load: bool = True) -> Union[EntryPoint, Type['Broker'], Callable]: +def BrokerFactory(entry_point_name: str, load: bool = True) -> EntryPoint | Type['Broker'] | Callable: """Return the `Broker` sub class registered under the given entry point. :param entry_point_name: the entry point name. @@ -111,14 +120,14 @@ def BrokerFactory(entry_point_name: str, load: bool = True) -> Union[EntryPoint, @overload -def CalculationFactory(entry_point_name: str, load: Literal[True] = True) -> Union[Type['CalcJob'], Callable]: ... +def CalculationFactory(entry_point_name: str, load: Literal[True] = True) -> Type['CalcJob'] | Callable: ... @overload def CalculationFactory(entry_point_name: str, load: Literal[False]) -> EntryPoint: ... -def CalculationFactory(entry_point_name: str, load: bool = True) -> Union[EntryPoint, Type['CalcJob'], Callable]: +def CalculationFactory(entry_point_name: str, load: bool = True) -> EntryPoint | Type['CalcJob'] | Callable: """Return the `CalcJob` sub class registered under the given entry point. :param entry_point_name: the entry point name. @@ -154,7 +163,7 @@ def CalcJobImporterFactory(entry_point_name: str, load: Literal[True] = True) -> def CalcJobImporterFactory(entry_point_name: str, load: Literal[False]) -> EntryPoint: ... -def CalcJobImporterFactory(entry_point_name: str, load: bool = True) -> Union[EntryPoint, Type['CalcJobImporter']]: +def CalcJobImporterFactory(entry_point_name: str, load: bool = True) -> EntryPoint | Type['CalcJobImporter']: """Return the plugin registered under the given entry point. :param entry_point_name: the entry point name. @@ -186,7 +195,7 @@ def DataFactory(entry_point_name: str, load: Literal[True] = True) -> Type['Data def DataFactory(entry_point_name: str, load: Literal[False]) -> EntryPoint: ... -def DataFactory(entry_point_name: str, load: bool = True) -> Union[EntryPoint, Type['Data']]: +def DataFactory(entry_point_name: str, load: bool = True) -> EntryPoint | Type['Data']: """Return the `Data` sub class registered under the given entry point. :param entry_point_name: the entry point name. @@ -219,7 +228,7 @@ def DbImporterFactory(entry_point_name: str, load: Literal[True] = True) -> Type def DbImporterFactory(entry_point_name: str, load: Literal[False]) -> EntryPoint: ... -def DbImporterFactory(entry_point_name: str, load: bool = True) -> Union[EntryPoint, Type['DbImporter']]: +def DbImporterFactory(entry_point_name: str, load: bool = True) -> EntryPoint | Type['DbImporter']: """Return the `DbImporter` sub class registered under the given entry point. :param entry_point_name: the entry point name. @@ -252,7 +261,7 @@ def GroupFactory(entry_point_name: str, load: Literal[True] = True) -> Type['Gro def GroupFactory(entry_point_name: str, load: Literal[False]) -> EntryPoint: ... -def GroupFactory(entry_point_name: str, load: bool = True) -> Union[EntryPoint, Type['Group']]: +def GroupFactory(entry_point_name: str, load: bool = True) -> EntryPoint | Type['Group']: """Return the `Group` sub class registered under the given entry point. :param entry_point_name: the entry point name. @@ -285,7 +294,7 @@ def OrbitalFactory(entry_point_name: str, load: Literal[True] = True) -> Type['O def OrbitalFactory(entry_point_name: str, load: Literal[False]) -> EntryPoint: ... -def OrbitalFactory(entry_point_name: str, load: bool = True) -> Union[EntryPoint, Type['Orbital']]: +def OrbitalFactory(entry_point_name: str, load: bool = True) -> EntryPoint | Type['Orbital']: """Return the `Orbital` sub class registered under the given entry point. :param entry_point_name: the entry point name. @@ -318,7 +327,7 @@ def ParserFactory(entry_point_name: str, load: Literal[True] = True) -> Type['Pa def ParserFactory(entry_point_name: str, load: Literal[False]) -> EntryPoint: ... -def ParserFactory(entry_point_name: str, load: bool = True) -> Union[EntryPoint, Type['Parser']]: +def ParserFactory(entry_point_name: str, load: bool = True) -> EntryPoint | Type['Parser']: """Return the `Parser` sub class registered under the given entry point. :param entry_point_name: the entry point name. @@ -351,7 +360,7 @@ def SchedulerFactory(entry_point_name: str, load: Literal[True] = True) -> Type[ def SchedulerFactory(entry_point_name: str, load: Literal[False]) -> EntryPoint: ... -def SchedulerFactory(entry_point_name: str, load: bool = True) -> Union[EntryPoint, Type['Scheduler']]: +def SchedulerFactory(entry_point_name: str, load: bool = True) -> EntryPoint | Type['Scheduler']: """Return the `Scheduler` sub class registered under the given entry point. :param entry_point_name: the entry point name. @@ -384,7 +393,7 @@ def StorageFactory(entry_point_name: str, load: Literal[True] = True) -> Type['S def StorageFactory(entry_point_name: str, load: Literal[False]) -> EntryPoint: ... -def StorageFactory(entry_point_name: str, load: bool = True) -> Union[EntryPoint, Type['StorageBackend']]: +def StorageFactory(entry_point_name: str, load: bool = True) -> EntryPoint | Type['StorageBackend']: """Return the ``StorageBackend`` sub class registered under the given entry point. :param entry_point_name: the entry point name. @@ -417,7 +426,7 @@ def TransportFactory(entry_point_name: str, load: Literal[True] = True) -> Type[ def TransportFactory(entry_point_name: str, load: Literal[False]) -> EntryPoint: ... -def TransportFactory(entry_point_name: str, load: bool = True) -> Union[EntryPoint, Type['Transport']]: +def TransportFactory(entry_point_name: str, load: bool = True) -> EntryPoint | Type['Transport']: """Return the Transport sub class registered under the given entry point. :param entry_point_name: the entry point name. @@ -442,14 +451,14 @@ def TransportFactory(entry_point_name: str, load: bool = True) -> Union[EntryPoi @overload -def WorkflowFactory(entry_point_name: str, load: Literal[True] = True) -> Union[Type['WorkChain'], Callable]: ... +def WorkflowFactory(entry_point_name: str, load: Literal[True] = True) -> Type['WorkChain'] | Callable: ... @overload def WorkflowFactory(entry_point_name: str, load: Literal[False]) -> EntryPoint: ... -def WorkflowFactory(entry_point_name: str, load: bool = True) -> Union[EntryPoint, Type['WorkChain'], Callable]: +def WorkflowFactory(entry_point_name: str, load: bool = True) -> EntryPoint | Type['WorkChain'] | Callable: """Return the `WorkChain` sub class registered under the given entry point. :param entry_point_name: the entry point name. diff --git a/src/aiida/repository/backend/abstract.py b/src/aiida/repository/backend/abstract.py index 786681117b..dd9683635e 100644 --- a/src/aiida/repository/backend/abstract.py +++ b/src/aiida/repository/backend/abstract.py @@ -11,13 +11,13 @@ import io import pathlib from collections.abc import Iterable, Iterator -from typing import Any, BinaryIO, List, Optional, Tuple, Union +from typing import Any, BinaryIO, List, Tuple from aiida.common.hashing import chunked_file_hash __all__ = ('AbstractRepositoryBackend',) -InfoDictType = dict[str, Union[int, str, dict[str, int], dict[str, float]]] +InfoDictType = dict[str, int | str | dict[str, int] | dict[str, float]] class AbstractRepositoryBackend(metaclass=abc.ABCMeta): @@ -33,12 +33,12 @@ class AbstractRepositoryBackend(metaclass=abc.ABCMeta): @property @abc.abstractmethod - def uuid(self) -> Optional[str]: + def uuid(self) -> str | None: """Return the unique identifier of the repository.""" @property @abc.abstractmethod - def key_format(self) -> Optional[str]: + def key_format(self) -> str | None: """Return the format for the keys of the repository. Important for when migrating between backends (e.g. archive -> main), as if they are not equal then it is @@ -86,7 +86,7 @@ def put_object_from_filelike(self, handle: BinaryIO) -> str: def _put_object_from_filelike(self, handle: BinaryIO) -> str: pass - def put_object_from_file(self, filepath: Union[str, pathlib.Path]) -> str: + def put_object_from_file(self, filepath: str | pathlib.Path) -> str: """Store a new object with contents of the file located at `filepath` on this file system. :param filepath: absolute path of file whose contents to copy to the repository. diff --git a/src/aiida/repository/backend/disk_object_store.py b/src/aiida/repository/backend/disk_object_store.py index 9f9eaafc37..4c383482b1 100644 --- a/src/aiida/repository/backend/disk_object_store.py +++ b/src/aiida/repository/backend/disk_object_store.py @@ -46,7 +46,7 @@ def __str__(self) -> str: return 'DiskObjectStoreRepository: ' @property - def uuid(self) -> t.Optional[str]: + def uuid(self) -> str | None: """Return the unique identifier of the repository.""" if not self.is_initialised: return None @@ -54,7 +54,7 @@ def uuid(self) -> t.Optional[str]: return container.container_id @property - def key_format(self) -> t.Optional[str]: + def key_format(self) -> str | None: with self._container as container: return container.hash_type @@ -150,10 +150,10 @@ def maintain( self, dry_run: bool = False, live: bool = True, - pack_loose: t.Optional[bool] = None, - do_repack: t.Optional[bool] = None, - clean_storage: t.Optional[bool] = None, - do_vacuum: t.Optional[bool] = None, + pack_loose: bool | None = None, + do_repack: bool | None = None, + clean_storage: bool | None = None, + do_vacuum: bool | None = None, compress: bool = False, ) -> None: """Performs maintenance operations. diff --git a/src/aiida/repository/common.py b/src/aiida/repository/common.py index 20948d129c..9dee75e6b4 100644 --- a/src/aiida/repository/common.py +++ b/src/aiida/repository/common.py @@ -28,8 +28,8 @@ def __init__( self, name: str = '', file_type: FileType = FileType.DIRECTORY, - key: typing.Union[str, None] = None, - objects: typing.Optional[typing.Dict[str, 'File']] = None, + key: str | None = None, + objects: typing.Dict[str, 'File'] | None = None, ) -> None: """Construct a new instance. @@ -114,7 +114,7 @@ def is_dir(self) -> bool: return self.file_type == FileType.DIRECTORY @property - def key(self) -> typing.Union[str, None]: + def key(self) -> str | None: """Return the key of the file object.""" return self._key diff --git a/src/aiida/repository/repository.py b/src/aiida/repository/repository.py index 9cece50338..250153a679 100644 --- a/src/aiida/repository/repository.py +++ b/src/aiida/repository/repository.py @@ -2,7 +2,15 @@ import contextlib import pathlib -from typing import Any, BinaryIO, Dict, Iterable, Iterator, List, Optional, Tuple, Union +from typing import ( + Any, + BinaryIO, + Dict, + Iterable, + Iterator, + List, + Tuple, +) from aiida.common.hashing import make_hash from aiida.common.lang import type_check @@ -30,7 +38,7 @@ class keeps a reference of the virtual file hierarchy. This means that through t _file_cls = File - def __init__(self, backend: Optional[AbstractRepositoryBackend] = None): + def __init__(self, backend: AbstractRepositoryBackend | None = None): """Construct a new instance with empty metadata. :param backend: instance of repository backend to use to actually store the file objects. By default, an @@ -47,7 +55,7 @@ def __str__(self) -> str: return f'Repository<{self.backend!s}>' @property - def uuid(self) -> Optional[str]: + def uuid(self) -> str | None: """Return the unique identifier of the repository backend or ``None`` if it doesn't have one.""" return self.backend.uuid @@ -82,7 +90,7 @@ def serialize(self) -> Dict[str, Any]: return self._directory.serialize() @classmethod - def flatten(cls, serialized: Optional[Dict[str, Any]], delimiter: str = '/') -> Dict[str, Optional[str]]: + def flatten(cls, serialized: Dict[str, Any] | None, delimiter: str = '/') -> Dict[str, str | None]: """Flatten the serialized content of a repository into a mapping of path -> key or None (if folder). Note, all folders are represented in the flattened output, and their path is suffixed with the delimiter. @@ -93,7 +101,7 @@ def flatten(cls, serialized: Optional[Dict[str, Any]], delimiter: str = '/') -> """ if serialized is None: return {} - items: Dict[str, Optional[str]] = {} + items: Dict[str, str | None] = {} stack = [('', serialized)] while stack: path, sub_dict = stack.pop() @@ -126,7 +134,7 @@ def hash(self) -> str: return make_hash(objects) @staticmethod - def _pre_process_path(path: Optional[FilePath] = None) -> pathlib.PurePath: + def _pre_process_path(path: FilePath | None = None) -> pathlib.PurePath: """Validate and convert the path to instance of ``pathlib.PurePath``. This should be called by every method of this class before doing anything, such that it can safely assume that @@ -220,7 +228,7 @@ def _add_file_keys(keys: list[str], objects: dict[str, File]) -> None: return file_keys - def get_object(self, path: Optional[FilePath] = None) -> File: + def get_object(self, path: FilePath | None = None) -> File: """Return the object at the given path. :param path: the relative path where to store the object in the repository. @@ -242,7 +250,7 @@ def get_object(self, path: Optional[FilePath] = None) -> File: return file_object - def get_directory(self, path: Optional[FilePath] = None) -> File: + def get_directory(self, path: FilePath | None = None) -> File: """Return the directory object at the given path. :param path: the relative path of the directory. @@ -279,7 +287,7 @@ def get_file(self, path: FilePath) -> File: return file_object - def list_objects(self, path: Optional[FilePath] = None) -> List[File]: + def list_objects(self, path: FilePath | None = None) -> List[File]: """Return a list of the objects contained in this repository sorted by name, optionally in given sub directory. :param path: the relative path of the directory. @@ -291,7 +299,7 @@ def list_objects(self, path: Optional[FilePath] = None) -> List[File]: directory = self.get_directory(path) return sorted(directory.objects.values(), key=lambda obj: obj.name) - def list_object_names(self, path: Optional[FilePath] = None) -> List[str]: + def list_object_names(self, path: FilePath | None = None) -> List[str]: """Return a sorted list of the object names contained in this repository, optionally in the given sub directory. :param path: the relative path of the directory. @@ -323,7 +331,7 @@ def put_object_from_file(self, filepath: FilePath, path: FilePath) -> None: with open(filepath, 'rb') as handle: self.put_object_from_filelike(handle, path) - def put_object_from_tree(self, filepath: FilePath, path: Optional[FilePath] = None) -> None: + def put_object_from_tree(self, filepath: FilePath, path: FilePath | None = None) -> None: """Store the entire contents of `filepath` on the local file system in the repository with under given `path`. :param filepath: absolute path of the directory whose contents to copy to the repository. @@ -459,7 +467,7 @@ def clone(self, source: 'Repository') -> None: with source.open(root / filename) as handle: self.put_object_from_filelike(handle, root / filename) - def walk(self, path: Optional[FilePath] = None) -> Iterable[Tuple[pathlib.PurePath, List[str], List[str]]]: + def walk(self, path: FilePath | None = None) -> Iterable[Tuple[pathlib.PurePath, List[str], List[str]]]: """Walk over the directories and files contained within this repository. .. note:: the order of the dirname and filename lists that are returned is not necessarily sorted. This is in @@ -482,7 +490,7 @@ def walk(self, path: Optional[FilePath] = None) -> Iterable[Tuple[pathlib.PurePa yield path, dirnames, filenames - def copy_tree(self, target: Union[str, pathlib.Path], path: Optional[FilePath] = None) -> None: + def copy_tree(self, target: str | pathlib.Path, path: FilePath | None = None) -> None: """Copy the contents of the entire node repository to another location on the local file system. .. note:: If ``path`` is specified, only its contents are copied, and the relative path with respect to the diff --git a/src/aiida/restapi/common/identifiers.py b/src/aiida/restapi/common/identifiers.py index f2f6f94435..b56a2e5342 100644 --- a/src/aiida/restapi/common/identifiers.py +++ b/src/aiida/restapi/common/identifiers.py @@ -31,6 +31,8 @@ """ +from __future__ import annotations + from collections.abc import MutableMapping from typing import Any diff --git a/src/aiida/schedulers/plugins/direct.py b/src/aiida/schedulers/plugins/direct.py index 0bed55bda4..bd0ab03f32 100644 --- a/src/aiida/schedulers/plugins/direct.py +++ b/src/aiida/schedulers/plugins/direct.py @@ -8,7 +8,7 @@ ########################################################################### """Plugin for direct execution.""" -from typing import Union +from __future__ import annotations import aiida.schedulers from aiida.common.escaping import escape_for_bash @@ -356,7 +356,7 @@ def _parse_submit_output(self, retval, stdout, stderr): return stdout.strip() - def _get_kill_command(self, jobid: Union[int, str]) -> str: + def _get_kill_command(self, jobid: int | str) -> str: """Return the command to kill the process with specified id and all its descendants. :param jobid: The job id is in the case of the diff --git a/src/aiida/schedulers/plugins/lsf.py b/src/aiida/schedulers/plugins/lsf.py index 33512ba944..1bf6e5ba7b 100644 --- a/src/aiida/schedulers/plugins/lsf.py +++ b/src/aiida/schedulers/plugins/lsf.py @@ -10,6 +10,8 @@ This has been tested on the CERN lxplus cluster (LSF 9.1.3) """ +from __future__ import annotations + import aiida.schedulers from aiida.common.escaping import escape_for_bash from aiida.common.extendeddicts import AttributeDict diff --git a/src/aiida/schedulers/plugins/slurm.py b/src/aiida/schedulers/plugins/slurm.py index c779c89cdb..45dff3b798 100644 --- a/src/aiida/schedulers/plugins/slurm.py +++ b/src/aiida/schedulers/plugins/slurm.py @@ -10,6 +10,8 @@ This has been tested on SLURM 14.03.7 on the CSCS.ch machines. """ +from __future__ import annotations + import re from aiida.common.lang import type_check diff --git a/src/aiida/storage/psql_dos/backend.py b/src/aiida/storage/psql_dos/backend.py index 7b7a4c5be4..091edce9e2 100644 --- a/src/aiida/storage/psql_dos/backend.py +++ b/src/aiida/storage/psql_dos/backend.py @@ -13,7 +13,7 @@ import pathlib from collections.abc import Iterable, Iterator from contextlib import contextmanager, nullcontext -from typing import TYPE_CHECKING, List, Optional, Set, Union +from typing import TYPE_CHECKING, List, Set from disk_objectstore import Container, backup_utils from pydantic import BaseModel, Field @@ -48,8 +48,7 @@ def get_filepath_container(profile: Profile) -> pathlib.Path: """Return the filepath of the disk-object store container.""" - from urllib.parse import urlparse - from urllib.request import url2pathname + from urllib.parse import unquote, urlparse try: parts = urlparse(profile.storage_config['repository_uri']) @@ -61,7 +60,7 @@ def get_filepath_container(profile: Profile) -> pathlib.Path: f'invalid profile {profile.name}: `storage.config.repository_uri` does not start with `file://`.' ) - filepath = pathlib.Path(url2pathname(parts.path)) + filepath = pathlib.Path(unquote(parts.path)) if not filepath.is_absolute(): raise ConfigurationError(f'invalid profile {profile.name}: `storage.config.repository_uri` is not absolute') @@ -111,7 +110,7 @@ def version_head(cls) -> str: return cls.migrator.get_schema_version_head() @classmethod - def version_profile(cls, profile: Profile) -> Optional[str]: + def version_profile(cls, profile: Profile) -> str | None: with cls.migrator_context(profile) as migrator: return migrator.get_schema_version_profile(check_legacy=True) @@ -141,7 +140,7 @@ def __init__(self, profile: Profile) -> None: with self.migrator_context(profile) as migrator: migrator.validate_storage() - self._session_factory: Optional[scoped_session] = None + self._session_factory: scoped_session | None = None self._initialise_session() # save the URL of the database, for use in the __str__ method self._db_url = self.get_session().get_bind().url # type: ignore[union-attr] @@ -407,7 +406,7 @@ def get_backend_entity(self, model: base.Base) -> BackendEntity: return convert.get_backend_entity(model, self) def set_global_variable( - self, key: str, value: Union[None, str, int, float], description: Optional[str] = None, overwrite=True + self, key: str, value: None | str | int | float, description: str | None = None, overwrite=True ) -> None: from aiida.storage.psql_dos.models.settings import DbSetting @@ -421,7 +420,7 @@ def set_global_variable( else: session.add(DbSetting(key=key, val=value, description=description or '')) - def get_global_variable(self, key: str) -> Union[None, str, int, float]: + def get_global_variable(self, key: str) -> None | str | int | float: from aiida.storage.psql_dos.models.settings import DbSetting session = self.get_session() @@ -533,7 +532,7 @@ def _backup_storage( self, manager: backup_utils.BackupManager, path: pathlib.Path, - prev_backup: Optional[pathlib.Path] = None, + prev_backup: pathlib.Path | None = None, ) -> None: """Create a backup of the postgres database and disk-objectstore to the provided path. @@ -606,7 +605,7 @@ def _backup_storage( def _backup( self, dest: str, - keep: Optional[int] = None, + keep: int | None = None, ): try: backup_manager = backup_utils.BackupManager(dest, keep=keep) diff --git a/src/aiida/storage/psql_dos/migrations/utils/utils.py b/src/aiida/storage/psql_dos/migrations/utils/utils.py index d7b90937c6..47020f9250 100644 --- a/src/aiida/storage/psql_dos/migrations/utils/utils.py +++ b/src/aiida/storage/psql_dos/migrations/utils/utils.py @@ -16,7 +16,7 @@ import os import pathlib import re -from typing import Dict, Iterable, Iterator, List, Optional, Union +from typing import Dict, Iterable, Iterator, List import numpy from disk_objectstore import Container @@ -44,8 +44,8 @@ def __init__( self, name: str = '', file_type: FileType = FileType.DIRECTORY, - key: Union[str, None, LazyOpener] = None, - objects: Optional[Dict[str, 'File']] = None, + key: str | None | LazyOpener = None, + objects: Dict[str, 'File'] | None = None, ): if not isinstance(name, str): raise TypeError('name should be a string.') @@ -87,7 +87,7 @@ class NoopRepositoryBackend(AbstractRepositoryBackend): """ @property - def uuid(self) -> Optional[str]: + def uuid(self) -> str | None: """Return the unique identifier of the repository. .. note:: A sandbox folder does not have the concept of a unique identifier and so always returns ``None``. @@ -95,7 +95,7 @@ def uuid(self) -> Optional[str]: return None @property - def key_format(self) -> Optional[str]: + def key_format(self) -> str | None: return None def initialise(self, **kwargs) -> None: diff --git a/src/aiida/storage/psql_dos/migrations/versions/26d561acd560_data_migration_legacy_job_calculations.py b/src/aiida/storage/psql_dos/migrations/versions/26d561acd560_data_migration_legacy_job_calculations.py index 53cc6124fa..8a43d57a89 100644 --- a/src/aiida/storage/psql_dos/migrations/versions/26d561acd560_data_migration_legacy_job_calculations.py +++ b/src/aiida/storage/psql_dos/migrations/versions/26d561acd560_data_migration_legacy_job_calculations.py @@ -47,6 +47,8 @@ """ +from __future__ import annotations + from alembic import op from sqlalchemy.sql import text diff --git a/src/aiida/storage/psql_dos/migrations/versions/django_0038_data_migration_legacy_job_calculations.py b/src/aiida/storage/psql_dos/migrations/versions/django_0038_data_migration_legacy_job_calculations.py index 959277f8a1..e886fe87b3 100644 --- a/src/aiida/storage/psql_dos/migrations/versions/django_0038_data_migration_legacy_job_calculations.py +++ b/src/aiida/storage/psql_dos/migrations/versions/django_0038_data_migration_legacy_job_calculations.py @@ -46,6 +46,8 @@ """ +from __future__ import annotations + import sqlalchemy as sa from alembic import op diff --git a/src/aiida/storage/psql_dos/migrator.py b/src/aiida/storage/psql_dos/migrator.py index 5251fd49de..460e2047cb 100644 --- a/src/aiida/storage/psql_dos/migrator.py +++ b/src/aiida/storage/psql_dos/migrator.py @@ -18,7 +18,12 @@ import contextlib import pathlib -from typing import TYPE_CHECKING, Any, Dict, Iterator, Optional +from typing import ( + TYPE_CHECKING, + Any, + Dict, + Iterator, +) from alembic.command import downgrade, upgrade from alembic.config import Config @@ -108,7 +113,7 @@ def get_schema_version_head(cls) -> str: """Return the head schema version for this storage, i.e. the latest schema this storage can be migrated to.""" return cls._alembic_script().revision_map.get_current_head('main') - def get_schema_version_profile(self, check_legacy=False) -> Optional[str]: + def get_schema_version_profile(self, check_legacy=False) -> str | None: """Return the schema version of the backend instance for this profile. Note, the version will be None if the database is empty or is a legacy django database. diff --git a/src/aiida/storage/psql_dos/orm/querybuilder/joiner.py b/src/aiida/storage/psql_dos/orm/querybuilder/joiner.py index 5a8db19feb..0dec16b61f 100644 --- a/src/aiida/storage/psql_dos/orm/querybuilder/joiner.py +++ b/src/aiida/storage/psql_dos/orm/querybuilder/joiner.py @@ -10,7 +10,13 @@ """A module containing the logic for creating joined queries.""" from dataclasses import dataclass -from typing import Any, Callable, Dict, Optional, Protocol, Type +from typing import ( + Any, + Callable, + Dict, + Protocol, + Type, +) from sqlalchemy import and_, join, select from sqlalchemy.dialects.postgresql import array @@ -59,7 +65,7 @@ def table_groups_nodes(self) -> Type[Table]: ... @dataclass class JoinReturn: join: Callable[[Query], Query] - aliased_edge: Optional[AliasedClass] = None + aliased_edge: AliasedClass | None = None edge_tag: str = '' @@ -73,7 +79,7 @@ class SqlaJoiner: def __init__( self, entity_mapper: _EntityMapper, - filter_builder: Callable[[AliasedClass, FilterType], Optional[ColumnElement[bool]]], + filter_builder: Callable[[AliasedClass, FilterType], ColumnElement[bool] | None], ): """Initialise the class""" self._entities = entity_mapper diff --git a/src/aiida/storage/psql_dos/orm/querybuilder/main.py b/src/aiida/storage/psql_dos/orm/querybuilder/main.py index eb5305b6c3..43eadee927 100644 --- a/src/aiida/storage/psql_dos/orm/querybuilder/main.py +++ b/src/aiida/storage/psql_dos/orm/querybuilder/main.py @@ -15,7 +15,13 @@ import warnings from contextlib import contextmanager, nullcontext from dataclasses import dataclass -from typing import TYPE_CHECKING, Any, Dict, List, Optional, Tuple, Union +from typing import ( + TYPE_CHECKING, + Any, + Dict, + List, + Tuple, +) from sqlalchemy import and_, not_, or_, select from sqlalchemy import func as sa_func @@ -84,7 +90,7 @@ class BuiltQuery: """A class to store the query and the corresponding projections.""" query: Query - tag_to_alias: Dict[str, Optional[AliasedClass]] + tag_to_alias: Dict[str, AliasedClass | None] tag_to_projected: Dict[str, Dict[str, int]] @@ -124,8 +130,8 @@ def __init__(self, backend): } # Hashing the internal query representation avoids rebuilding a query - self._query_cache: Optional[BuiltQuery] = None - self._query_hash: Optional[str] = None + self._query_cache: BuiltQuery | None = None + self._query_hash: str | None = None @property def Node(self): @@ -190,7 +196,7 @@ def count(self, data: QueryDictType) -> int: result = build.query.count() return result - def first(self, data: QueryDictType) -> Optional[List[Any]]: + def first(self, data: QueryDictType) -> List[Any] | None: with self.query_session(data) as build: result = build.query.first() @@ -204,7 +210,7 @@ def first(self, data: QueryDictType) -> Optional[List[Any]]: return [self.to_backend(r) for r in result] - def iterall(self, data: QueryDictType, batch_size: Optional[int]) -> Iterable[List[Any]]: + def iterall(self, data: QueryDictType, batch_size: int | None) -> Iterable[List[Any]]: """Return an iterator over all the results of a list of lists.""" with self.query_session(data) as build: stmt = build.query.statement.execution_options(yield_per=batch_size) @@ -217,7 +223,7 @@ def iterall(self, data: QueryDictType, batch_size: Optional[int]) -> Iterable[Li for resultrow in session.execute(stmt): yield [self.to_backend(rowitem) for rowitem in resultrow] - def iterdict(self, data: QueryDictType, batch_size: Optional[int]) -> Iterable[Dict[str, Dict[str, Any]]]: + def iterdict(self, data: QueryDictType, batch_size: int | None) -> Iterable[Dict[str, Dict[str, Any]]]: """Return an iterator over all the results of a list of dictionaries.""" with self.query_session(data) as build: stmt = build.query.statement.execution_options(yield_per=batch_size) @@ -277,7 +283,7 @@ def query_session(self, data: QueryDictType) -> Iterator[BuiltQuery]: def _build(self, data: QueryDictType) -> BuiltQuery: """Build the query and return.""" # generate aliases for tags - tag_to_alias: Dict[str, Optional[AliasedClass]] = {} + tag_to_alias: Dict[str, AliasedClass | None] = {} cls_map = { EntityTypes.AUTHINFO.value: self.AuthInfo, EntityTypes.COMMENT.value: self.Comment, @@ -359,7 +365,7 @@ def _build(self, data: QueryDictType) -> BuiltQuery: def _create_order_by( self, alias: AliasedClass, field_key: str, entityspec: dict - ) -> Union[ColumnElement, InstrumentedAttribute]: + ) -> ColumnElement | InstrumentedAttribute: """Build the order_by parameter of the query.""" column_name = field_key.split('.')[0] attrpath = field_key.split('.')[1:] @@ -381,8 +387,8 @@ def _get_projectable_entity( alias: AliasedClass, column_name: str, attrpath: List[str], - cast: Optional[str] = None, - ) -> Union[ColumnElement, InstrumentedAttribute]: + cast: str | None = None, + ) -> ColumnElement | InstrumentedAttribute: """Return projectable entity for a given alias and column name.""" if not (attrpath or column_name in ('attributes', 'extras')): return get_column(column_name, alias) @@ -436,7 +442,7 @@ def build_filters(self, alias: AliasedClass, filter_spec: dict[str, Any]) -> Col attr_key = path_spec.split('.')[1:] is_jsonb = bool(attr_key) or column_name in ('dict', 'attributes', 'extras') - column: Optional[InstrumentedAttribute] + column: InstrumentedAttribute | None try: column = get_column(column_name, alias) except (ValueError, TypeError): @@ -897,7 +903,7 @@ def analyze_query(self, data: QueryDictType, execute: bool = True, verbose: bool rows = self.get_session().execute(text(f'EXPLAIN{options} {compiled.string}')).fetchall() return '\n'.join(row[0] for row in rows) - def get_creation_statistics(self, user_pk: Optional[int] = None) -> Dict[str, Any]: + def get_creation_statistics(self, user_pk: int | None = None) -> Dict[str, Any]: session = self.get_session() retdict: Dict[Any, Any] = {} @@ -1060,7 +1066,7 @@ def render_literal_value(self, value, type_): def generate_joins( - data: QueryDictType, aliases: Dict[str, Optional[AliasedClass]], joiner: SqlaJoiner + data: QueryDictType, aliases: Dict[str, AliasedClass | None], joiner: SqlaJoiner ) -> List[JoinReturn]: """Generate the joins for the query.""" joins: List[JoinReturn] = [] @@ -1109,12 +1115,12 @@ def generate_joins( def generate_projections( - data: QueryDictType, aliases: Dict[str, Optional[AliasedClass]], outer_to_inner_schema, get_projectable_entity + data: QueryDictType, aliases: Dict[str, AliasedClass | None], outer_to_inner_schema, get_projectable_entity ): """Generate the projections for the query.""" # mapping of tag -> field -> projection_index tag_to_projected_fields: Dict[str, Dict[str, int]] = {} - projections: List[Tuple[Union[AliasedClass, ColumnElement], bool]] = [] + projections: List[Tuple[AliasedClass | ColumnElement, bool]] = [] QUERYBUILD_LOGGER.debug('projections data: %s', data['project']) @@ -1181,13 +1187,13 @@ def generate_projections( def _create_projections( tag: str, - aliases: Dict[str, Optional[AliasedClass]], + aliases: Dict[str, AliasedClass | None], projection_count: int, project_dict: List[Dict[str, dict]], get_projectable_entity, tag_to_projected_fields, outer_to_inner_schema, -) -> List[Tuple[Union[AliasedClass, ColumnElement], bool]]: +) -> List[Tuple[AliasedClass | ColumnElement, bool]]: """Build the projections for a given tag. :param tag: the tag of the node for which to build the projections @@ -1229,10 +1235,10 @@ def _get_projection( alias: AliasedClass, projectable_entity_name: str, get_projectable_entity, - cast: Optional[str] = None, - func: Optional[str] = None, + cast: str | None = None, + func: str | None = None, **_kw: Any, -) -> Tuple[Union[AliasedClass, ColumnElement], bool]: +) -> Tuple[AliasedClass | ColumnElement, bool]: """:param alias: An alias for an ormclass :param projectable_entity_name: User specification of what to project. diff --git a/src/aiida/storage/sqlite_dos/backend.py b/src/aiida/storage/sqlite_dos/backend.py index 1aab7aa14c..90bcb75ba9 100644 --- a/src/aiida/storage/sqlite_dos/backend.py +++ b/src/aiida/storage/sqlite_dos/backend.py @@ -14,7 +14,7 @@ from functools import cached_property, lru_cache from pathlib import Path from shutil import rmtree -from typing import TYPE_CHECKING, Optional +from typing import TYPE_CHECKING from uuid import uuid4 from alembic.config import Config @@ -108,7 +108,7 @@ def initialise_database(self) -> None: context.stamp(context.script, 'main@head') # type: ignore[arg-type] self.connection.commit() - def get_schema_version_profile(self) -> Optional[str]: # type: ignore[override] + def get_schema_version_profile(self) -> str | None: # type: ignore[override] """Return the schema version of the backend instance for this profile. Note, the version will be None if the database is empty or is a legacy django database. @@ -280,7 +280,7 @@ def get_repository(self) -> 'DiskObjectStoreRepositoryBackend': return DiskObjectStoreRepositoryBackend(container=self.get_container()) @classmethod - def version_profile(cls, profile: Profile) -> Optional[str]: + def version_profile(cls, profile: Profile) -> str | None: with cls.migrator_context(profile) as migrator: return migrator.get_schema_version_profile() @@ -338,7 +338,7 @@ def _get_mapper_from_entity(entity_type: 'EntityTypes', with_pk: bool): def _backup( self, dest: str, - keep: Optional[int] = None, + keep: int | None = None, ): """Create a backup of the storage. diff --git a/src/aiida/storage/sqlite_zip/backend.py b/src/aiida/storage/sqlite_zip/backend.py index 68e53901ee..5c3fae97f2 100644 --- a/src/aiida/storage/sqlite_zip/backend.py +++ b/src/aiida/storage/sqlite_zip/backend.py @@ -20,7 +20,7 @@ from datetime import datetime from functools import cached_property from pathlib import Path -from typing import BinaryIO, Optional, Tuple, Union, cast +from typing import BinaryIO, Tuple, cast from zipfile import ZipFile, is_zipfile from pydantic import BaseModel, Field, field_validator @@ -122,7 +122,7 @@ def create_profile(filepath: str | Path, options: dict | None = None) -> Profile ) @classmethod - def version_profile(cls, profile: Profile) -> Optional[str]: + def version_profile(cls, profile: Profile) -> str | None: return read_version(profile.storage_config['filepath'], search_limit=None) @classmethod @@ -209,9 +209,9 @@ def __init__(self, profile: Profile): self._path = Path(profile.storage_config['filepath']) validate_storage(self._path) # lazy open the archive zipfile and extract the database file - self._db_file: Optional[Path] = None - self._session: Optional[Session] = None - self._repo: Optional[_RoBackendRepository] = None + self._db_file: Path | None = None + self._session: Session | None = None + self._repo: _RoBackendRepository | None = None self._closed = False def __str__(self) -> str: @@ -344,7 +344,7 @@ def delete_nodes_and_connections(self, pks_to_delete: Iterable[int]) -> None: def get_global_variable(self, key: str): raise NotImplementedError - def set_global_variable(self, key: str, value, description: Optional[str] = None, overwrite=True) -> None: + def set_global_variable(self, key: str, value, description: str | None = None, overwrite=True) -> None: raise ReadOnlyError() def maintain(self, dry_run: bool = False, live: bool = True, **kwargs) -> None: @@ -378,7 +378,7 @@ def get_info(self, detailed: bool = False) -> dict: return results @staticmethod - def get_current_archive_version(inpath: Union[str, Path]) -> str: + def get_current_archive_version(inpath: str | Path) -> str: """Return the current version from metadata, raising if invalid/corrupt.""" inpath = Path(inpath) @@ -427,11 +427,11 @@ def close(self) -> None: self._closed = True @property - def uuid(self) -> Optional[str]: + def uuid(self) -> str | None: return None @property - def key_format(self) -> Optional[str]: + def key_format(self) -> str | None: return 'sha256' def initialise(self, **kwargs) -> None: diff --git a/src/aiida/storage/sqlite_zip/migrations/legacy/v05_to_v06.py b/src/aiida/storage/sqlite_zip/migrations/legacy/v05_to_v06.py index 6dc30f7353..a6f06ca9ee 100644 --- a/src/aiida/storage/sqlite_zip/migrations/legacy/v05_to_v06.py +++ b/src/aiida/storage/sqlite_zip/migrations/legacy/v05_to_v06.py @@ -23,8 +23,6 @@ Where id is a SQLA id and migration-name is the name of the particular migration. """ -from typing import Union - from ..utils import update_metadata, verify_metadata_version @@ -32,7 +30,7 @@ def migrate_deserialized_datetime(data, conversion): """Deserialize datetime strings from export archives, meaning to reattach the UTC timezone information.""" from aiida.common.exceptions import StorageMigrationError - ret_data: Union[str, dict, list] + ret_data: str | dict | list if isinstance(data, dict): ret_data = {} diff --git a/src/aiida/storage/sqlite_zip/migrations/legacy_to_main.py b/src/aiida/storage/sqlite_zip/migrations/legacy_to_main.py index 1e657dae06..df127d104c 100644 --- a/src/aiida/storage/sqlite_zip/migrations/legacy_to_main.py +++ b/src/aiida/storage/sqlite_zip/migrations/legacy_to_main.py @@ -14,7 +14,15 @@ from datetime import datetime from hashlib import sha256 from pathlib import Path, PurePath -from typing import Any, Callable, ContextManager, Dict, Iterator, List, Optional, Tuple, Union +from typing import ( + Any, + Callable, + ContextManager, + Dict, + Iterator, + List, + Tuple, +) from archive_path import ZipPath from sqlalchemy import insert, select @@ -69,8 +77,8 @@ def perform_v1_migration( :returns:the path to the sqlite database file """ MIGRATE_LOGGER.report('Initialising new archive...') - node_repos: Dict[str, List[Tuple[str, Optional[str]]]] = {} - in_archive_context: Callable[[Path], ContextManager[Union[Path, ZipPath]]] = ZipPath + node_repos: Dict[str, List[Tuple[str, str | None]]] = {} + in_archive_context: Callable[[Path], ContextManager[Path | ZipPath]] = ZipPath if is_tar: # we cannot stream from a tar file performantly, so we extract it to disk first @contextmanager @@ -128,7 +136,7 @@ def _in_archive_context(_inpath): def _json_to_sqlite( - outpath: Path, data: dict, node_repos: Dict[str, List[Tuple[str, Optional[str]]]], batch_size: int = 100 + outpath: Path, data: dict, node_repos: Dict[str, List[Tuple[str, str | None]]], batch_size: int = 100 ) -> None: """Convert a JSON archive format to SQLite.""" from aiida.common.utils import batch_iter @@ -238,7 +246,7 @@ def _convert_datetime(key, value): def _iter_entity_fields( data, name: str, - node_repos: Dict[str, List[Tuple[str, Optional[str]]]], + node_repos: Dict[str, List[Tuple[str, str | None]]], ) -> Iterator[Dict[str, Any]]: """Iterate through entity fields.""" keys = file_fields_to_model_fields.get(name, {}) @@ -267,7 +275,7 @@ def _iter_entity_fields( yield {**{keys.get(key, key): _convert_datetime(key, val) for key, val in all_fields.items()}, **{'id': pk}} -def _create_repo_metadata(paths: List[Tuple[str, Optional[str]]]) -> Dict[str, Any]: +def _create_repo_metadata(paths: List[Tuple[str, str | None]]) -> Dict[str, Any]: """Create the repository metadata. :param paths: list of (path, hashkey) tuples diff --git a/src/aiida/storage/sqlite_zip/migrator.py b/src/aiida/storage/sqlite_zip/migrator.py index dc8adf2735..9ac7f59543 100644 --- a/src/aiida/storage/sqlite_zip/migrator.py +++ b/src/aiida/storage/sqlite_zip/migrator.py @@ -17,7 +17,7 @@ import zipfile from datetime import datetime from pathlib import Path -from typing import Any, Dict, Iterator, List, Optional, Union +from typing import Any, Dict, Iterator, List from alembic.command import upgrade from alembic.config import Config @@ -70,7 +70,7 @@ def validate_storage(inpath: Path) -> None: def migrate( - inpath: Union[str, Path], outpath: Union[str, Path], version: str, *, force: bool = False, compression: int = 6 + inpath: str | Path, outpath: str | Path, version: str, *, force: bool = False, compression: int = 6 ) -> None: """Migrate an `sqlite_zip` storage file to a specific version. @@ -136,7 +136,7 @@ def migrate( metadata['compression'] = compression # if the archive is a "legacy" format, i.e. has a data.json file, migrate it to the target/final legacy schema - data: Optional[Dict[str, Any]] = None + data: Dict[str, Any] | None = None if current_version in LEGACY_MIGRATE_FUNCTIONS: MIGRATE_LOGGER.report(f'Legacy migrations required from {"tar" if is_tar else "zip"} format') MIGRATE_LOGGER.report('Extracting data.json ...') diff --git a/src/aiida/storage/sqlite_zip/models.py b/src/aiida/storage/sqlite_zip/models.py index 6358d60d26..2504967a11 100644 --- a/src/aiida/storage/sqlite_zip/models.py +++ b/src/aiida/storage/sqlite_zip/models.py @@ -20,7 +20,7 @@ import functools from datetime import datetime, timezone -from typing import Any, Optional, Set, Tuple +from typing import Any, Set, Tuple import sqlalchemy as sa from sqlalchemy import ColumnDefault @@ -60,7 +60,7 @@ class TZDateTime(sa.TypeDecorator): impl = sa.DateTime cache_ok = True - def process_bind_param(self, value: Optional[datetime], dialect): + def process_bind_param(self, value: datetime | None, dialect): """Process before writing to database.""" if value is None: return value @@ -69,7 +69,7 @@ def process_bind_param(self, value: Optional[datetime], dialect): value = value.astimezone(timezone.utc).replace(tzinfo=None) return value - def process_result_value(self, value: Optional[datetime], dialect): + def process_result_value(self, value: datetime | None, dialect): """Process when returning from database.""" if value is None: return value diff --git a/src/aiida/storage/sqlite_zip/orm.py b/src/aiida/storage/sqlite_zip/orm.py index 074700c8c0..c5fa12c644 100644 --- a/src/aiida/storage/sqlite_zip/orm.py +++ b/src/aiida/storage/sqlite_zip/orm.py @@ -15,7 +15,7 @@ import json from functools import singledispatch -from typing import Any, List, Optional, Tuple, Union +from typing import Any, List, Tuple from sqlalchemy import JSON, case, func, select from sqlalchemy.orm.util import AliasedClass @@ -183,8 +183,8 @@ def _get_projectable_entity( alias: AliasedClass, column_name: str, attrpath: List[str], - cast: Optional[str] = None, - ) -> Union[ColumnElement, InstrumentedAttribute]: + cast: str | None = None, + ) -> ColumnElement | InstrumentedAttribute: if not (attrpath or column_name in ('attributes', 'extras')): return get_column(column_name, alias) diff --git a/src/aiida/storage/sqlite_zip/utils.py b/src/aiida/storage/sqlite_zip/utils.py index 9f21f47684..1e664da072 100644 --- a/src/aiida/storage/sqlite_zip/utils.py +++ b/src/aiida/storage/sqlite_zip/utils.py @@ -11,7 +11,7 @@ import json import zipfile from pathlib import Path -from typing import Any, Dict, Optional, Union +from typing import Any, Dict from sqlalchemy import event from sqlalchemy.future.engine import Engine, create_engine @@ -48,7 +48,7 @@ def sqlite_case_sensitive_like(dbapi_connection, _): cursor.close() -def _contains(lhs: Union[dict, list], rhs: Union[dict, list]): +def _contains(lhs: dict | list, rhs: dict | list): if isinstance(lhs, dict) and isinstance(rhs, dict): for key in rhs: if key not in lhs or not _contains(lhs[key], rhs[key]): @@ -64,7 +64,7 @@ def _contains(lhs: Union[dict, list], rhs: Union[dict, list]): return lhs == rhs -def _json_contains(lhs: Union[str, bytes, bytearray, dict, list], rhs: Union[str, bytes, bytearray, dict, list]): +def _json_contains(lhs: str | bytes | bytearray | dict | list, rhs: str | bytes | bytearray | dict | list): try: if isinstance(lhs, (str, bytes, bytearray)): lhs = json.loads(lhs) @@ -79,7 +79,7 @@ def register_json_contains(dbapi_connection, _): dbapi_connection.create_function('json_contains', 2, _json_contains) -def create_sqla_engine(path: Union[str, Path], *, enforce_foreign_keys: bool = True, **kwargs) -> Engine: +def create_sqla_engine(path: str | Path, *, enforce_foreign_keys: bool = True, **kwargs) -> Engine: """Create a new engine instance.""" engine = create_engine(f'sqlite:///{path}', json_serializer=json.dumps, json_deserializer=json.loads, **kwargs) event.listen(engine, 'connect', sqlite_case_sensitive_like) @@ -89,7 +89,7 @@ def create_sqla_engine(path: Union[str, Path], *, enforce_foreign_keys: bool = T return engine -def extract_metadata(path: Union[str, Path], *, search_limit: Optional[int] = 10) -> Dict[str, Any]: +def extract_metadata(path: str | Path, *, search_limit: int | None = 10) -> Dict[str, Any]: """Extract the metadata dictionary from the archive. :param search_limit: the maximum number of records to search for the metadata file in a zip file. @@ -128,7 +128,7 @@ def extract_metadata(path: Union[str, Path], *, search_limit: Optional[int] = 10 return metadata -def read_version(path: Union[str, Path], *, search_limit: Optional[int] = None) -> str: +def read_version(path: str | Path, *, search_limit: int | None = None) -> str: """Read the version of the storage instance from the path. This is intended to work for all versions of the storage format. diff --git a/src/aiida/tools/_dumping/config.py b/src/aiida/tools/_dumping/config.py index 50cf075fa3..938bb4af1f 100644 --- a/src/aiida/tools/_dumping/config.py +++ b/src/aiida/tools/_dumping/config.py @@ -12,7 +12,7 @@ from datetime import datetime from enum import Enum, auto -from typing import Any, Dict, List, Optional, Union +from typing import Any, Dict, List from pydantic import BaseModel, ConfigDict, Field, computed_field, field_validator, model_validator @@ -31,7 +31,7 @@ class GroupDumpScope(Enum): NO_GROUP = auto() -def _load_computer_validator(value: Union[int, str, orm.Computer]) -> orm.Computer: +def _load_computer_validator(value: int | str | orm.Computer) -> orm.Computer: """Pydantic validator to load an ``orm.Computer`` from identifier.""" if isinstance(value, orm.Computer): return value @@ -39,7 +39,7 @@ def _load_computer_validator(value: Union[int, str, orm.Computer]) -> orm.Comput return orm.load_computer(identifier=value) -def _load_code_validator(value: Union[int, str, orm.Code]) -> orm.Code: +def _load_code_validator(value: int | str | orm.Code) -> orm.Code: """Pydantic validator to load an ``orm.Code`` from identifier.""" if isinstance(value, orm.Code): return value @@ -47,7 +47,7 @@ def _load_code_validator(value: Union[int, str, orm.Code]) -> orm.Code: return orm.load_code(identifier=value) -def _validate_user_input(value: Optional[Union[orm.User, str]]) -> orm.User | None: +def _validate_user_input(value: orm.User | str | None) -> orm.User | None: """Load User object from email string.""" if value is None or isinstance(value, orm.User): return value @@ -55,7 +55,7 @@ def _validate_user_input(value: Optional[Union[orm.User, str]]) -> orm.User | No return orm.User.collection.get(email=value) -def _validate_computers_input(value: Optional[Union[List[orm.Computer], List[str]]]) -> Optional[List[orm.Computer]]: +def _validate_computers_input(value: List[orm.Computer] | List[str] | None) -> List[orm.Computer] | None: """Load Computer objects from identifiers.""" if not value: return None @@ -64,7 +64,7 @@ def _validate_computers_input(value: Optional[Union[List[orm.Computer], List[str return [_load_computer_validator(item) for item in value] -def _validate_codes_input(value: Optional[Union[List[orm.Code], List[str]]]) -> Optional[List[orm.Code]]: +def _validate_codes_input(value: List[orm.Code] | List[str] | None) -> List[orm.Code] | None: """Load Code objects from identifiers.""" if not value: return None @@ -88,7 +88,7 @@ def _validate_codes_input(value: Optional[Union[List[orm.Code], List[str]]]) -> raise ValueError(msg) -def _validate_groups_input(value: Optional[Union[List[orm.Group], List[str]]]) -> Optional[List[orm.Group]]: +def _validate_groups_input(value: List[orm.Group] | List[str] | None) -> List[orm.Group] | None: """Utility function to validate groups input - must be either all strings OR all Group objects.""" if not value: return None @@ -151,9 +151,9 @@ def _resolve_dump_mode_from_flags(cls, values: Dict[str, Any]) -> Dict[str, Any] class TimeFilterMixin(BaseModel): """Mixin for time-based filtering options.""" - start_date: Optional[datetime] = Field(default=None, description='Start date/time for modification time filter') - end_date: Optional[datetime] = Field(default=None, description='End date/time for modification time filter') - past_days: Optional[int] = Field(default=None, description='Number of past days to include based on mtime') + start_date: datetime | None = Field(default=None, description='Start date/time for modification time filter') + end_date: datetime | None = Field(default=None, description='End date/time for modification time filter') + past_days: int | None = Field(default=None, description='Number of past days to include based on mtime') filter_by_last_dump_time: bool = Field(default=True, description='Filter nodes by mtime since last dump') @model_validator(mode='after') @@ -173,13 +173,11 @@ class EntityFilterMixin(BaseModel): arbitrary_types_allowed=True, validate_assignment=True, ) - user: Optional[orm.User] = Field(default=None, description='User object or email to filter by') - computers: Optional[List[orm.Computer]] = Field( + user: orm.User | None = Field(default=None, description='User object or email to filter by') + computers: List[orm.Computer] | None = Field( default=None, description='List of Computer objects or UUIDs/labels to filter by' ) - codes: Optional[List[orm.Code]] = Field( - default=None, description='List of Code objects or UUIDs/labels to filter by' - ) + codes: List[orm.Code] | None = Field(default=None, description='List of Code objects or UUIDs/labels to filter by') @field_validator('user', mode='before') @classmethod @@ -223,7 +221,7 @@ class ProcessDumpConfig(BaseDumpConfig, ProcessHandlingMixin): class GroupDumpConfig(BaseDumpConfig, ProcessHandlingMixin, TimeFilterMixin, EntityFilterMixin, GroupManagementMixin): """Configuration for dumping groups.""" - groups: Optional[Union[List[orm.Group], List[str], List[int]]] = Field( + groups: List[orm.Group] | List[str] | List[int] | None = Field( default=None, description='Groups to dump (either list of PKs/UUIDs/labels OR list of Group objects)' ) @@ -256,7 +254,7 @@ def filters_set(self) -> bool: class ProfileDumpConfig(BaseDumpConfig, ProcessHandlingMixin, TimeFilterMixin, EntityFilterMixin, GroupManagementMixin): """Configuration for dumping entire profiles.""" - groups: Optional[Union[List[orm.Group], List[str], List[int]]] = Field( + groups: List[orm.Group] | List[str] | List[int] | None = Field( default=None, description='Groups to dump (either list of UUIDs/labels OR list of Group objects)' ) diff --git a/src/aiida/tools/_dumping/detect.py b/src/aiida/tools/_dumping/detect.py index ccec6bd501..0d0ddb8ff1 100644 --- a/src/aiida/tools/_dumping/detect.py +++ b/src/aiida/tools/_dumping/detect.py @@ -11,7 +11,15 @@ from __future__ import annotations from datetime import datetime, timedelta -from typing import TYPE_CHECKING, Any, Dict, List, Optional, Tuple, Type, Union, cast +from typing import ( + TYPE_CHECKING, + Any, + Dict, + List, + Tuple, + Type, + cast, +) import click @@ -52,19 +60,19 @@ class DumpChangeDetector: def __init__( self, - config: Union[GroupDumpConfig, ProfileDumpConfig], + config: GroupDumpConfig | ProfileDumpConfig, dump_tracker: DumpTracker, dump_paths: DumpPaths, dump_times: DumpTimes, current_mapping: GroupNodeMapping, ) -> None: """Initializes the DumpChangeDetector.""" - self.config: Union[GroupDumpConfig, ProfileDumpConfig] = config + self.config: GroupDumpConfig | ProfileDumpConfig = config self.dump_tracker: DumpTracker = dump_tracker self.dump_paths: DumpPaths = dump_paths self.dump_times: DumpTimes = dump_times self._current_mapping: GroupNodeMapping = current_mapping - self._grouped_node_uuids_cache: Optional[set[str]] = None + self._grouped_node_uuids_cache: set[str] | None = None @property def grouped_node_uuids(self) -> set[str]: @@ -80,7 +88,7 @@ def grouped_node_uuids(self) -> set[str]: def get_nodes( self, group_scope: GroupDumpScope = GroupDumpScope.ANY, - group: Optional[orm.Group] = None, + group: orm.Group | None = None, apply_filters: bool = True, ignore_time_filters: bool = False, exclude_tracked: bool = True, @@ -139,7 +147,7 @@ def _query_single_type( self, orm_type: Type[orm.ProcessNode], group_scope: GroupDumpScope, - group: Optional[orm.Group], + group: orm.Group | None, base_filters: Dict[str, Any], ) -> List[orm.ProcessNode]: """Query nodes of a single ORM type with the given scope and filters. @@ -257,7 +265,7 @@ def _apply_behavioral_filters(self, nodes: list[orm.ProcessNode], store_type: st return filtered_nodes - def _detect_new_nodes(self, group: Optional[orm.Group] = None) -> ProcessingQueue: + def _detect_new_nodes(self, group: orm.Group | None = None) -> ProcessingQueue: """Detect new/modified nodes for dumping. :param group: Specific group to detect changes for, or None for general detection @@ -286,7 +294,7 @@ def _get_ungrouped_nodes(self) -> ProcessingQueue: group_scope=GroupDumpScope.NO_GROUP, apply_filters=True, ignore_time_filters=True, exclude_tracked=False ) - def _detect_node_changes(self, group: Optional[orm.Group] = None) -> NodeChanges: + def _detect_node_changes(self, group: orm.Group | None = None) -> NodeChanges: """Detect node changes (main orchestration method). :param group: The specific group to filter by when scope is IN_GROUP @@ -454,7 +462,7 @@ def _resolve_time_filters(self) -> Dict[str, Any]: time_filters['<='] = upper_bound # Lower bound (priority: past_days > start_date > last_dump_time) - lower_bound: Optional[datetime] = None + lower_bound: datetime | None = None if self.config.past_days is not None: days = int(self.config.past_days) diff --git a/src/aiida/tools/_dumping/engine.py b/src/aiida/tools/_dumping/engine.py index ae482005ef..b0bd2b2206 100644 --- a/src/aiida/tools/_dumping/engine.py +++ b/src/aiida/tools/_dumping/engine.py @@ -11,7 +11,6 @@ from __future__ import annotations from pathlib import Path -from typing import Union from aiida import orm from aiida.common import AIIDA_LOGGER @@ -36,9 +35,9 @@ class DumpEngine: def __init__( self, - dump_target_entity: Union[orm.ProcessNode, orm.Group, Profile], + dump_target_entity: orm.ProcessNode | orm.Group | Profile, base_output_path: Path, - config: Union[ProcessDumpConfig, GroupDumpConfig, ProfileDumpConfig], + config: ProcessDumpConfig | GroupDumpConfig | ProfileDumpConfig, ): """Engine constructor that initializes all entities needed for dumping. @@ -47,7 +46,7 @@ def __init__( :param config: Populated config instance, defaults to None """ - self.config: Union[ProcessDumpConfig, GroupDumpConfig, ProfileDumpConfig] = config + self.config: ProcessDumpConfig | GroupDumpConfig | ProfileDumpConfig = config self.dump_target_entity = dump_target_entity self.dump_paths = DumpPaths( diff --git a/src/aiida/tools/_dumping/executors/collection.py b/src/aiida/tools/_dumping/executors/collection.py index c8a3b319b3..ae37e05fab 100644 --- a/src/aiida/tools/_dumping/executors/collection.py +++ b/src/aiida/tools/_dumping/executors/collection.py @@ -12,7 +12,7 @@ import os from pathlib import Path -from typing import TYPE_CHECKING, Optional, Union +from typing import TYPE_CHECKING import click @@ -35,13 +35,13 @@ class CollectionDumpExecutor: def __init__( self, - config: Union[GroupDumpConfig, ProfileDumpConfig], + config: GroupDumpConfig | ProfileDumpConfig, dump_paths: DumpPaths, dump_tracker: DumpTracker, process_dump_executor: ProcessDumpExecutor, current_mapping: GroupNodeMapping, ) -> None: - self.config: Union[GroupDumpConfig, ProfileDumpConfig] = config + self.config: GroupDumpConfig | ProfileDumpConfig = config self.dump_paths: DumpPaths = dump_paths self.process_dump_executor: ProcessDumpExecutor = process_dump_executor self.dump_tracker: DumpTracker = dump_tracker @@ -122,8 +122,8 @@ def _dump_group_descendant_calcs( def _dump_nodes( self, processing_queue: ProcessingQueue, - group_context: Optional[orm.Group] = None, - current_dump_root_for_nodes: Optional[Path] = None, + group_context: orm.Group | None = None, + current_dump_root_for_nodes: Path | None = None, ): """Dumps a collection of nodes. Nodes are placed relative to 'current_dump_root_for_nodes'. diff --git a/src/aiida/tools/_dumping/executors/deletion.py b/src/aiida/tools/_dumping/executors/deletion.py index f648eb6d34..f58e39abdf 100644 --- a/src/aiida/tools/_dumping/executors/deletion.py +++ b/src/aiida/tools/_dumping/executors/deletion.py @@ -10,7 +10,7 @@ from __future__ import annotations -from typing import TYPE_CHECKING, Union +from typing import TYPE_CHECKING from aiida.common.log import AIIDA_LOGGER from aiida.tools._dumping.config import GroupDumpConfig, ProcessDumpConfig, ProfileDumpConfig @@ -29,7 +29,7 @@ class DeletionExecutor: def __init__( self, - config: Union[ProcessDumpConfig, GroupDumpConfig, ProfileDumpConfig], + config: ProcessDumpConfig | GroupDumpConfig | ProfileDumpConfig, dump_paths: DumpPaths, dump_tracker: DumpTracker, dump_changes: DumpChanges, @@ -44,7 +44,7 @@ def __init__( :param previous_mapping: Instance of ``GroupNodeMapping`` if exists from a previous dump """ - self.config: Union[ProcessDumpConfig, GroupDumpConfig, ProfileDumpConfig] = config + self.config: ProcessDumpConfig | GroupDumpConfig | ProfileDumpConfig = config self.dump_paths: DumpPaths = dump_paths self.dump_tracker: DumpTracker = dump_tracker self.dump_changes: DumpChanges = dump_changes diff --git a/src/aiida/tools/_dumping/executors/process.py b/src/aiida/tools/_dumping/executors/process.py index 5b4745b382..9585f51ad7 100644 --- a/src/aiida/tools/_dumping/executors/process.py +++ b/src/aiida/tools/_dumping/executors/process.py @@ -15,7 +15,7 @@ from enum import Enum, auto from pathlib import Path from types import SimpleNamespace -from typing import TYPE_CHECKING, Callable, Optional, Tuple, Union, cast +from typing import TYPE_CHECKING, Callable, Tuple, cast import yaml @@ -55,12 +55,12 @@ class ProcessDumpExecutor: def __init__( self, - config: Union[ProcessDumpConfig, GroupDumpConfig, ProfileDumpConfig], + config: ProcessDumpConfig | GroupDumpConfig | ProfileDumpConfig, dump_paths: DumpPaths, dump_tracker: DumpTracker, dump_times: DumpTimes, ): - self.config: Union[ProcessDumpConfig, GroupDumpConfig, ProfileDumpConfig] = config + self.config: ProcessDumpConfig | GroupDumpConfig | ProfileDumpConfig = config self.dump_paths: DumpPaths = dump_paths self.dump_tracker: DumpTracker = dump_tracker self.dump_times: DumpTimes = dump_times @@ -166,7 +166,7 @@ def _check_log_and_determine_action( self, process_node: orm.ProcessNode, output_path: Path, - ) -> Tuple[NodeDumpAction, Optional[DumpRecord]]: + ) -> Tuple[NodeDumpAction, DumpRecord | None]: """Checks the logger and node status to determine the appropriate dump action. :param node: The ``orm.ProcessNode`` to be evaluated @@ -403,8 +403,8 @@ def generate_child_node_label(index: int, link_triple: LinkTriple, append_pk: bo class NodeMetadataWriter: """Handles writing the aiida_node_metadata.yaml file.""" - def __init__(self, config: Union[ProcessDumpConfig, GroupDumpConfig, ProfileDumpConfig]): - self.config: Union[ProcessDumpConfig, GroupDumpConfig, ProfileDumpConfig] = config + def __init__(self, config: ProcessDumpConfig | GroupDumpConfig | ProfileDumpConfig): + self.config: ProcessDumpConfig | GroupDumpConfig | ProfileDumpConfig = config def _write( self, @@ -475,8 +475,8 @@ def _write( class NodeRepoIoDumper: """Handles dumping repository contents and linked I/O Data nodes.""" - def __init__(self, config: Union[ProcessDumpConfig, GroupDumpConfig, ProfileDumpConfig]): - self.config: Union[ProcessDumpConfig, GroupDumpConfig, ProfileDumpConfig] = config + def __init__(self, config: ProcessDumpConfig | GroupDumpConfig | ProfileDumpConfig): + self.config: ProcessDumpConfig | GroupDumpConfig | ProfileDumpConfig = config def _dump_calculation_content(self, calculation_node: orm.CalculationNode, output_path: Path) -> None: """Dump repository and I/O file contents for a CalculationNode. diff --git a/src/aiida/tools/_dumping/mapping.py b/src/aiida/tools/_dumping/mapping.py index 399804d1c9..a65f0693d9 100644 --- a/src/aiida/tools/_dumping/mapping.py +++ b/src/aiida/tools/_dumping/mapping.py @@ -11,7 +11,7 @@ from __future__ import annotations from dataclasses import dataclass, field -from typing import Dict, List, Optional, Set, Union, cast +from typing import Dict, List, Set, cast from aiida import orm from aiida.common.log import AIIDA_LOGGER @@ -72,7 +72,7 @@ def from_dict(cls, data: Dict) -> 'GroupNodeMapping': return mapping @classmethod - def build_from_db(cls, groups: Optional[Union[List[orm.Group], List[str], List[int]]] = None) -> 'GroupNodeMapping': + def build_from_db(cls, groups: List[orm.Group] | List[str] | List[int] | None = None) -> 'GroupNodeMapping': """Build a mapping from the current database state. :param groups: If provided, only build mapping for these specific groups. diff --git a/src/aiida/tools/_dumping/tracking.py b/src/aiida/tools/_dumping/tracking.py index d944b3a4dd..c1f54254aa 100644 --- a/src/aiida/tools/_dumping/tracking.py +++ b/src/aiida/tools/_dumping/tracking.py @@ -15,7 +15,13 @@ from dataclasses import dataclass, field from datetime import datetime from pathlib import Path -from typing import Any, Dict, Generator, List, Literal, Optional +from typing import ( + Any, + Dict, + Generator, + List, + Literal, +) from aiida.common import AIIDA_LOGGER, timezone from aiida.tools._dumping.mapping import GroupNodeMapping @@ -31,8 +37,8 @@ class DumpRecord: path: Path symlinks: List[Path] = field(default_factory=list) duplicates: List[Path] = field(default_factory=list) - dir_mtime: Optional[datetime] = None - dir_size: Optional[int] = None + dir_mtime: datetime | None = None + dir_size: int | None = None def to_dict(self) -> dict: """Returns a serialized dictionary representation of the entry.""" @@ -117,7 +123,7 @@ def remove_duplicate(self, path: Path) -> None: if path in self.duplicates: self.duplicates.remove(path) - def update_stats(self, path: Optional[Path]) -> None: + def update_stats(self, path: Path | None) -> None: """Update directory stats from the path of the ``DumpRecord`` or an optional given path. :param path: An optional path. If not given, the path of the ``DumpRecord`` instance is used @@ -216,9 +222,9 @@ class DumpTracker: def __init__( self, dump_paths: DumpPaths, - dump_times: Optional[DumpTimes] = None, - previous_mapping: Optional[GroupNodeMapping] = None, - current_mapping: Optional[GroupNodeMapping] = None, + dump_times: DumpTimes | None = None, + previous_mapping: GroupNodeMapping | None = None, + current_mapping: GroupNodeMapping | None = None, ) -> None: """Initialize the DumpTracker. Typically be instantiated via `load`. diff --git a/src/aiida/tools/_dumping/utils.py b/src/aiida/tools/_dumping/utils.py index e0d258ab4d..0e6676e968 100644 --- a/src/aiida/tools/_dumping/utils.py +++ b/src/aiida/tools/_dumping/utils.py @@ -14,7 +14,13 @@ from dataclasses import dataclass, field from datetime import datetime from pathlib import Path -from typing import Dict, List, Literal, Optional, Set, Type, Union +from typing import ( + Dict, + List, + Literal, + Set, + Type, +) # typing.assert_never available since 3.11 from typing_extensions import assert_never @@ -29,7 +35,7 @@ # Progress bar format for dump operations - wider description field to avoid truncation DUMP_PROGRESS_BAR_FORMAT = '{desc:60.60}{percentage:6.1f}%|{bar}| {n_fmt}/{total_fmt}' -REGISTRY_TO_ORM_TYPE: dict[str, Type[Union[orm.CalculationNode, orm.WorkflowNode, orm.Group]]] = { +REGISTRY_TO_ORM_TYPE: dict[str, Type[orm.CalculationNode | orm.WorkflowNode | orm.Group]] = { 'calculations': orm.CalculationNode, 'workflows': orm.WorkflowNode, 'groups': orm.Group, @@ -54,7 +60,7 @@ class DumpTimes: """Holds relevant timestamps for a dump operation.""" current: datetime = field(default_factory=lambda: timezone.now()) - last: Optional[datetime] = None + last: datetime | None = None @classmethod def from_last_log_time(cls, last_log_time: str | None) -> 'DumpTimes': @@ -94,7 +100,7 @@ class GroupInfo: uuid: str node_count: int = 0 - label: Optional[str] = None + label: str | None = None @dataclass @@ -237,8 +243,8 @@ class DumpPaths: def __init__( self, base_output_path: Path, - config: Union[ProcessDumpConfig, GroupDumpConfig, ProfileDumpConfig], - dump_target_entity: Union[orm.Node, orm.Group, Profile], + config: ProcessDumpConfig | GroupDumpConfig | ProfileDumpConfig, + dump_target_entity: orm.Node | orm.Group | Profile, ): """ Initializes the DumpPaths object for centralized path handling during the dumping. @@ -249,8 +255,8 @@ def __init__( This helps in contextual path decisions. """ self.base_output_path: Path = base_output_path.resolve() - self.config: Union[ProcessDumpConfig, GroupDumpConfig, ProfileDumpConfig] = config - self.dump_target_entity: Union[orm.Node, orm.Group, Profile] = dump_target_entity + self.config: ProcessDumpConfig | GroupDumpConfig | ProfileDumpConfig = config + self.dump_target_entity: orm.Node | orm.Group | Profile = dump_target_entity @property def tracking_log_file_path(self) -> Path: @@ -388,7 +394,7 @@ def _safe_delete_directory(path: Path) -> None: shutil.rmtree(path) @staticmethod - def get_directory_stats(path: Path) -> tuple[Optional[datetime], Optional[int]]: + def get_directory_stats(path: Path) -> tuple[datetime | None, int | None]: """Calculates the last modification time and total size of a directory. :param path: The directory to be analyzed @@ -423,9 +429,9 @@ def get_directory_stats(path: Path) -> tuple[Optional[datetime], Optional[int]]: @staticmethod def get_default_dump_path( - entity: Union[orm.ProcessNode, Profile, orm.Group], - prefix: Optional[str] = None, - appendix: Optional[str] = None, + entity: orm.ProcessNode | Profile | orm.Group, + prefix: str | None = None, + appendix: str | None = None, ) -> Path: """Generate default dump path for any supported entity type. :param entity: The entity to be dumped @@ -444,7 +450,7 @@ def get_default_dump_path( assert_never(entity) @staticmethod - def _get_process_node_path(process_node: orm.ProcessNode, prefix: Optional[str], appendix: Optional[str]) -> Path: + def _get_process_node_path(process_node: orm.ProcessNode, prefix: str | None, appendix: str | None) -> Path: """Generate the default dump path for ``orm.ProcessNode``. :param process_node: The ``orm.ProcessNode`` to be dumped @@ -470,7 +476,7 @@ def _get_process_node_path(process_node: orm.ProcessNode, prefix: Optional[str], return Path('-'.join(path_entities)) @staticmethod - def _get_profile_path(profile: Profile, prefix: Optional[str], appendix: Optional[str]) -> Path: + def _get_profile_path(profile: Profile, prefix: str | None, appendix: str | None) -> Path: """Generate the default dump path for a ``Profile``. :param profile: The ``Profile`` to be dumped @@ -489,7 +495,7 @@ def _get_profile_path(profile: Profile, prefix: Optional[str], appendix: Optiona return Path('-'.join(label_elements)) @staticmethod - def _get_group_path(group: orm.Group, prefix: Optional[str], appendix: Optional[str]) -> Path: + def _get_group_path(group: orm.Group, prefix: str | None, appendix: str | None) -> Path: """Generate the default dump path for an ``orm.Group``. :param group: The ``orm.Group`` to be dumped diff --git a/src/aiida/tools/archive/abstract.py b/src/aiida/tools/archive/abstract.py index 7d5b9452b5..05a93852c3 100644 --- a/src/aiida/tools/archive/abstract.py +++ b/src/aiida/tools/archive/abstract.py @@ -10,7 +10,17 @@ from abc import ABC, abstractmethod from pathlib import Path -from typing import TYPE_CHECKING, Any, BinaryIO, Dict, List, Literal, Optional, Type, TypeVar, Union, overload +from typing import ( + TYPE_CHECKING, + Any, + BinaryIO, + Dict, + List, + Literal, + Type, + TypeVar, + overload, +) from typing_extensions import Self @@ -28,7 +38,7 @@ class ArchiveWriterAbstract(ABC): def __init__( self, - path: Union[str, Path], + path: str | Path, fmt: 'ArchiveFormatAbstract', *, mode: Literal['x', 'w', 'a'] = 'x', @@ -96,7 +106,7 @@ def bulk_insert( """ @abstractmethod - def put_object(self, stream: BinaryIO, *, buffer_size: Optional[int] = None, key: Optional[str] = None) -> str: + def put_object(self, stream: BinaryIO, *, buffer_size: int | None = None, key: str | None = None) -> str: """Add an object to the archive. :param stream: byte stream to read the object from @@ -117,7 +127,7 @@ def delete_object(self, key: str) -> None: class ArchiveReaderAbstract(ABC): """Reader of an archive, that will be used as a context manager.""" - def __init__(self, path: Union[str, Path], **kwargs: Any): + def __init__(self, path: str | Path, **kwargs: Any): """Initialise the reader. :param path: archive path @@ -190,7 +200,7 @@ def key_format(self) -> str: """Return the format of repository keys.""" @abstractmethod - def read_version(self, path: Union[str, Path]) -> str: + def read_version(self, path: str | Path) -> str: """Read the version of the archive from a file. This method should account for reading all versions of the archive format. @@ -204,25 +214,25 @@ def read_version(self, path: Union[str, Path]) -> str: @overload @abstractmethod def open( - self, path: Union[str, Path], mode: Literal['r'], *, compression: int = 6, **kwargs: Any + self, path: str | Path, mode: Literal['r'], *, compression: int = 6, **kwargs: Any ) -> ArchiveReaderAbstract: ... @overload @abstractmethod def open( - self, path: Union[str, Path], mode: Literal['x', 'w'], *, compression: int = 6, **kwargs: Any + self, path: str | Path, mode: Literal['x', 'w'], *, compression: int = 6, **kwargs: Any ) -> ArchiveWriterAbstract: ... @overload @abstractmethod def open( - self, path: Union[str, Path], mode: Literal['a'], *, compression: int = 6, **kwargs: Any + self, path: str | Path, mode: Literal['a'], *, compression: int = 6, **kwargs: Any ) -> ArchiveWriterAbstract: ... @abstractmethod def open( - self, path: Union[str, Path], mode: Literal['r', 'x', 'w', 'a'] = 'r', *, compression: int = 6, **kwargs: Any - ) -> Union[ArchiveReaderAbstract, ArchiveWriterAbstract]: + self, path: str | Path, mode: Literal['r', 'x', 'w', 'a'] = 'r', *, compression: int = 6, **kwargs: Any + ) -> ArchiveReaderAbstract | ArchiveWriterAbstract: """Open an archive (latest version only). :param path: archive path @@ -235,8 +245,8 @@ def open( @abstractmethod def migrate( self, - inpath: Union[str, Path], - outpath: Union[str, Path], + inpath: str | Path, + outpath: str | Path, version: str, *, force: bool = False, diff --git a/src/aiida/tools/archive/create.py b/src/aiida/tools/archive/create.py index b06fc4ea88..fb546e547c 100644 --- a/src/aiida/tools/archive/create.py +++ b/src/aiida/tools/archive/create.py @@ -17,7 +17,7 @@ from collections.abc import Sequence from datetime import datetime from pathlib import Path -from typing import Any, Callable, Iterable, Optional, Union +from typing import Any, Callable, Iterable from tabulate import tabulate @@ -45,22 +45,22 @@ def create_archive( - entities: Optional[Iterable[Union[orm.Computer, orm.Node, orm.Group, orm.User]]], - filename: Union[None, str, Path] = None, + entities: Iterable[orm.Computer | orm.Node | orm.Group | orm.User] | None, + filename: None | str | Path = None, *, - archive_format: Optional[ArchiveFormatAbstract] = None, + archive_format: ArchiveFormatAbstract | None = None, overwrite: bool = False, include_comments: bool = True, include_logs: bool = True, include_authinfos: bool = False, - allowed_licenses: Optional[Union[list, Callable]] = None, - forbidden_licenses: Optional[Union[list, Callable]] = None, + allowed_licenses: list | Callable | None = None, + forbidden_licenses: list | Callable | None = None, strip_checkpoints: bool = True, batch_size: int = DEFAULT_BATCH_SIZE, filter_size: int = DEFAULT_FILTER_SIZE, compression: int = 6, test_run: bool = False, - backend: Optional[StorageBackend] = None, + backend: StorageBackend | None = None, **traversal_rules: bool, ) -> Path: """Export AiiDA data to an archive file. @@ -687,8 +687,8 @@ def _check_unsealed_nodes(querybuilder: QbType, node_ids: set[int], batch_size: def _check_node_licenses( querybuilder: QbType, node_ids: set[int], - allowed_licenses: Union[None, Sequence[str], Callable], - forbidden_licenses: Union[None, Sequence[str], Callable], + allowed_licenses: None | Sequence[str] | Callable, + forbidden_licenses: None | Sequence[str] | Callable, batch_size: int, filter_size: int, ) -> None: diff --git a/src/aiida/tools/archive/implementations/sqlite_zip/main.py b/src/aiida/tools/archive/implementations/sqlite_zip/main.py index b794e0a412..38801db5ba 100644 --- a/src/aiida/tools/archive/implementations/sqlite_zip/main.py +++ b/src/aiida/tools/archive/implementations/sqlite_zip/main.py @@ -9,7 +9,7 @@ """The file format implementation""" from pathlib import Path -from typing import Any, Literal, Union, overload +from typing import Any, Literal, overload from aiida.storage.sqlite_zip.migrator import get_schema_version_head, migrate from aiida.storage.sqlite_zip.utils import read_version @@ -38,7 +38,7 @@ class ArchiveFormatSqlZip(ArchiveFormatAbstract): def latest_version(self) -> str: return get_schema_version_head() - def read_version(self, path: Union[str, Path]) -> str: + def read_version(self, path: str | Path) -> str: return read_version(path) @property @@ -47,22 +47,22 @@ def key_format(self) -> str: @overload def open( - self, path: Union[str, Path], mode: Literal['r'], *, compression: int = 6, **kwargs: Any + self, path: str | Path, mode: Literal['r'], *, compression: int = 6, **kwargs: Any ) -> ArchiveReaderSqlZip: ... @overload def open( - self, path: Union[str, Path], mode: Literal['x', 'w'], *, compression: int = 6, **kwargs: Any + self, path: str | Path, mode: Literal['x', 'w'], *, compression: int = 6, **kwargs: Any ) -> ArchiveWriterSqlZip: ... @overload def open( - self, path: Union[str, Path], mode: Literal['a'], *, compression: int = 6, **kwargs: Any + self, path: str | Path, mode: Literal['a'], *, compression: int = 6, **kwargs: Any ) -> ArchiveAppenderSqlZip: ... def open( - self, path: Union[str, Path], mode: Literal['r', 'x', 'w', 'a'] = 'r', *, compression: int = 6, **kwargs: Any - ) -> Union[ArchiveReaderSqlZip, ArchiveWriterSqlZip, ArchiveAppenderSqlZip]: + self, path: str | Path, mode: Literal['r', 'x', 'w', 'a'] = 'r', *, compression: int = 6, **kwargs: Any + ) -> ArchiveReaderSqlZip | ArchiveWriterSqlZip | ArchiveAppenderSqlZip: if mode == 'r': return ArchiveReaderSqlZip(path, **kwargs) if mode == 'a': @@ -71,8 +71,8 @@ def open( def migrate( self, - inpath: Union[str, Path], - outpath: Union[str, Path], + inpath: str | Path, + outpath: str | Path, version: str, *, force: bool = False, diff --git a/src/aiida/tools/archive/implementations/sqlite_zip/reader.py b/src/aiida/tools/archive/implementations/sqlite_zip/reader.py index f01fee6622..a06d41250f 100644 --- a/src/aiida/tools/archive/implementations/sqlite_zip/reader.py +++ b/src/aiida/tools/archive/implementations/sqlite_zip/reader.py @@ -9,7 +9,7 @@ """AiiDA archive reader implementation.""" from pathlib import Path -from typing import Any, Dict, Optional, Union +from typing import Any, Dict from aiida.common.exceptions import CorruptStorage from aiida.storage.sqlite_zip.backend import SqliteZipBackend @@ -20,11 +20,11 @@ class ArchiveReaderSqlZip(ArchiveReaderAbstract): """An archive reader for the SQLite format.""" - def __init__(self, path: Union[str, Path], **kwargs: Any): + def __init__(self, path: str | Path, **kwargs: Any): super().__init__(path, **kwargs) self._in_context = False # we lazily create the storage backend, then clean up on exit - self._backend: Optional[SqliteZipBackend] = None + self._backend: SqliteZipBackend | None = None def __enter__(self) -> 'ArchiveReaderSqlZip': self._in_context = True diff --git a/src/aiida/tools/archive/implementations/sqlite_zip/writer.py b/src/aiida/tools/archive/implementations/sqlite_zip/writer.py index 3be03192d5..6255c6b17e 100644 --- a/src/aiida/tools/archive/implementations/sqlite_zip/writer.py +++ b/src/aiida/tools/archive/implementations/sqlite_zip/writer.py @@ -17,7 +17,14 @@ from datetime import datetime from io import BytesIO from pathlib import Path -from typing import Any, BinaryIO, Dict, List, Literal, Optional, Set, Union +from typing import ( + Any, + BinaryIO, + Dict, + List, + Literal, + Set, +) from archive_path import NOTSET, ZipPath, extract_file_in_zip, read_file_in_zip from sqlalchemy import insert @@ -41,12 +48,12 @@ class ArchiveWriterSqlZip(ArchiveWriterAbstract): def __init__( self, - path: Union[str, Path], + path: str | Path, fmt: ArchiveFormatAbstract, *, mode: Literal['x', 'w', 'a'] = 'x', compression: int = 6, - work_dir: Optional[Path] = None, + work_dir: Path | None = None, _debug: bool = False, _enforce_foreign_keys: bool = True, ): @@ -58,9 +65,9 @@ def __init__( self._metadata: Dict[str, Any] = {} self._central_dir: Dict[str, Any] = {} self._deleted_paths: Set[str] = set() - self._zip_path: Optional[ZipPath] = None - self._work_dir: Optional[Path] = None - self._conn: Optional[Connection] = None + self._zip_path: ZipPath | None = None + self._work_dir: Path | None = None + self._conn: Connection | None = None def _assert_in_context(self): if not self._in_context: @@ -149,9 +156,9 @@ def _stream_binary( name: str, handle: BinaryIO, *, - buffer_size: Optional[int] = None, - compression: Optional[int] = None, - comment: Optional[bytes] = None, + buffer_size: int | None = None, + compression: int | None = None, + comment: bytes | None = None, ) -> None: """Add a binary stream to the archive. @@ -183,7 +190,7 @@ def _stream_binary( else: shutil.copyfileobj(handle, zip_handle, length=buffer_size) - def put_object(self, stream: BinaryIO, *, buffer_size: Optional[int] = None, key: Optional[str] = None) -> str: + def put_object(self, stream: BinaryIO, *, buffer_size: int | None = None, key: str | None = None) -> str: if key is None: key = chunked_file_hash(stream, hashlib.sha256) stream.seek(0) diff --git a/src/aiida/tools/archive/imports.py b/src/aiida/tools/archive/imports.py index fbf90ecf81..2fee0a1f56 100644 --- a/src/aiida/tools/archive/imports.py +++ b/src/aiida/tools/archive/imports.py @@ -9,7 +9,14 @@ """Import an archive.""" from pathlib import Path -from typing import Any, Callable, Dict, Literal, Optional, Set, Tuple, Union +from typing import ( + Any, + Callable, + Dict, + Literal, + Set, + Tuple, +) from tabulate import tabulate @@ -49,20 +56,20 @@ def import_archive( - path: Union[str, Path], + path: str | Path, *, - archive_format: Optional[ArchiveFormatAbstract] = None, + archive_format: ArchiveFormatAbstract | None = None, import_new_extras: bool = True, merge_extras: MergeExtrasType = ('k', 'n', 'l'), merge_comments: MergeCommentsType = 'leave', include_authinfos: bool = False, create_group: bool = True, - group: Optional[orm.Group] = None, + group: orm.Group | None = None, test_run: bool = False, - backend: Optional[StorageBackend] = None, + backend: StorageBackend | None = None, filter_size: int = DEFAULT_FILTER_SIZE, batch_size: int = DEFAULT_BATCH_SIZE, -) -> Optional[int]: +) -> int | None: """Import an archive into the AiiDA backend. :param path: the path to the archive @@ -1108,12 +1115,12 @@ def group_node_transform(row): def _make_import_group( - group: Optional[orm.Group], + group: orm.Group | None, labels: Set[str], node_ids_archive_backend: Dict[int, int], backend_to: StorageBackend, batch_size: int, -) -> Optional[int]: +) -> int | None: """Make an import group containing all imported nodes. :param group: Use an existing group diff --git a/src/aiida/tools/dbimporters/baseclasses.py b/src/aiida/tools/dbimporters/baseclasses.py index 1448e30a46..25564b0df8 100644 --- a/src/aiida/tools/dbimporters/baseclasses.py +++ b/src/aiida/tools/dbimporters/baseclasses.py @@ -9,7 +9,6 @@ """Base class implementation for an external database importer.""" import io -from typing import Optional class DbImporter: @@ -173,7 +172,7 @@ def _get_url(self, result_dict): class DbEntry: """Represents an entry from external database.""" - _license: Optional[str] = None + _license: str | None = None def __init__(self, db_name=None, db_uri=None, id=None, version=None, extras=None, uri=None): """Sets the basic parameters for the database entry: diff --git a/src/aiida/tools/graph/graph_traversers.py b/src/aiida/tools/graph/graph_traversers.py index c6b5cdb120..1ae1189717 100644 --- a/src/aiida/tools/graph/graph_traversers.py +++ b/src/aiida/tools/graph/graph_traversers.py @@ -10,7 +10,16 @@ from __future__ import annotations -from typing import TYPE_CHECKING, Any, Callable, Dict, Iterable, List, Optional, TypedDict, cast +from typing import ( + TYPE_CHECKING, + Any, + Callable, + Dict, + Iterable, + List, + TypedDict, + cast, +) from aiida import orm from aiida.common import exceptions @@ -33,8 +42,8 @@ class TraverseGraphOutput(TypedDict, total=False): def get_nodes_delete( starting_pks: Iterable[int], get_links: bool = False, - missing_callback: Optional[Callable[[Iterable[int]], None]] = None, - backend: Optional['StorageBackend'] = None, + missing_callback: Callable[[Iterable[int]], None] | None = None, + backend: 'StorageBackend' | None = None, **traversal_rules: bool, ) -> TraverseGraphOutput: """This function will return the set of all nodes that can be connected @@ -76,7 +85,7 @@ def get_nodes_delete( def get_nodes_export( starting_pks: Iterable[int], get_links: bool = False, - backend: Optional['StorageBackend'] = None, + backend: 'StorageBackend' | None = None, **traversal_rules: bool, ) -> TraverseGraphOutput: """This function will return the set of all nodes that can be connected @@ -181,12 +190,12 @@ def validate_traversal_rules( def traverse_graph( starting_pks: Iterable[int], - max_iterations: Optional[int] = None, + max_iterations: int | None = None, get_links: bool = False, links_forward: Iterable[LinkType] = (), links_backward: Iterable[LinkType] = (), - missing_callback: Optional[Callable[[Iterable[int]], None]] = None, - backend: Optional['StorageBackend'] = None, + missing_callback: Callable[[Iterable[int]], None] | None = None, + backend: 'StorageBackend' | None = None, ) -> TraverseGraphOutput: """This function will return the set of all nodes that can be connected to a list of initial nodes through any sequence of specified links. diff --git a/src/aiida/transports/plugins/async_backend.py b/src/aiida/transports/plugins/async_backend.py index 09e7a5cd23..a6adc7d304 100644 --- a/src/aiida/transports/plugins/async_backend.py +++ b/src/aiida/transports/plugins/async_backend.py @@ -15,13 +15,14 @@ while the `_OpenSSH` class uses the `ssh` command line client. """ +from __future__ import annotations + import abc import asyncio import logging import posixpath import re import subprocess -from typing import Optional import asyncssh from asyncssh import SFTPFileAlreadyExists @@ -33,7 +34,7 @@ ) -def get_openssh_version() -> Optional[int]: +def get_openssh_version() -> int | None: """Get the major version of the local OpenSSH client. Returns the major version number (e.g., 9 for OpenSSH_9.0), or None if detection fails. @@ -96,7 +97,7 @@ async def put(self, localpath: str, remotepath: str, dereference: bool, preserve """ @abc.abstractmethod - async def run(self, command: str, stdin: Optional[str] = None, timeout: Optional[int] = None): + async def run(self, command: str, stdin: str | None = None, timeout: int | None = None): """Run a command on the remote machine. :param command: The command to run :param stdin: The input to send to the command @@ -262,7 +263,7 @@ async def put(self, localpath: str, remotepath: str, dereference: bool, preserve except asyncssh.Error as exc: raise OSError from exc - async def run(self, command: str, stdin: Optional[str] = None, timeout: Optional[int] = None): + async def run(self, command: str, stdin: str | None = None, timeout: int | None = None): result = await self._conn.run( self.bash_command + escape_for_bash(command), input=stdin, @@ -473,7 +474,7 @@ def __init__(self, machine: str, logger: logging.LoggerAdapter, bash_command: st self.logger.debug(f'Detected OpenSSH version {openssh_version}, using RCP mode for scp commands.') self.is_openssh_9_or_higher = False - async def openssh_execute(self, commands, stdin: Optional[str] = None, timeout: Optional[float] = None): + async def openssh_execute(self, commands, stdin: str | None = None, timeout: float | None = None): """ Execute a command using the _OpenSSH command line client. :param commands: The list of commands to execute @@ -534,7 +535,7 @@ def _escape_for_scp(self, path: str) -> str: else: return f'{self._escape_for_rcp(path)}' - def ssh_command_generator(self, command_template: str, paths: Optional[list[str]] = None): + def ssh_command_generator(self, command_template: str, paths: list[str] | None = None): """Generate an SSH command with properly quoted paths. :param command_template: The command template with {} placeholders for paths @@ -691,7 +692,7 @@ async def lstat(self, path: str): # order matters return Stat(*stdout.split()) - async def run(self, command: str, stdin: Optional[str] = None, timeout: Optional[float] = None): + async def run(self, command: str, stdin: str | None = None, timeout: float | None = None): commands = self.ssh_command_generator(command) returncode, stdout, stderr = await self.openssh_execute(commands, stdin, timeout) return returncode, stdout, stderr diff --git a/src/aiida/transports/plugins/local.py b/src/aiida/transports/plugins/local.py index 3fa452e739..b947702162 100644 --- a/src/aiida/transports/plugins/local.py +++ b/src/aiida/transports/plugins/local.py @@ -16,7 +16,6 @@ import shutil import subprocess import sys -from typing import Optional from aiida.common.warnings import warn_deprecation from aiida.transports import cli as transport_cli @@ -739,7 +738,7 @@ def isfile(self, path: TransportPath): return os.path.isfile(os.path.join(self.curdir, path)) @contextlib.contextmanager - def _exec_command_internal(self, command, workdir: Optional[TransportPath] = None, **kwargs): + def _exec_command_internal(self, command, workdir: TransportPath | None = None, **kwargs): """Executes the specified command in bash login shell. @@ -792,7 +791,7 @@ def _exec_command_internal(self, command, workdir: Optional[TransportPath] = Non ) as process: yield process - def exec_command_wait_bytes(self, command, stdin=None, workdir: Optional[TransportPath] = None, **kwargs): + def exec_command_wait_bytes(self, command, stdin=None, workdir: TransportPath | None = None, **kwargs): """Executes the specified command and waits for it to finish. :param command: the command to execute @@ -848,7 +847,7 @@ def line_encoder(iterator, encoding='utf-8'): return retval, output_text, stderr_text - def gotocomputer_command(self, remotedir: Optional[TransportPath] = None): + def gotocomputer_command(self, remotedir: TransportPath | None = None): """Return a string to be run using os.system in order to connect via the transport to the remote directory. diff --git a/src/aiida/transports/plugins/ssh.py b/src/aiida/transports/plugins/ssh.py index 6bbd60b85d..c5139d3f3b 100644 --- a/src/aiida/transports/plugins/ssh.py +++ b/src/aiida/transports/plugins/ssh.py @@ -13,7 +13,6 @@ import os import re from stat import S_ISDIR, S_ISREG -from typing import Optional import click @@ -1556,7 +1555,7 @@ def exec_command_wait_bytes( return (retval, b''.join(stdout_bytes), b''.join(stderr_bytes)) - def gotocomputer_command(self, remotedir: Optional[TransportPath] = None): + def gotocomputer_command(self, remotedir: TransportPath | None = None): """Specific gotocomputer string to connect to a given remote computer via ssh and directly go to the calculation folder. """ diff --git a/src/aiida/transports/plugins/ssh_async.py b/src/aiida/transports/plugins/ssh_async.py index 41960e81cb..6f1e366df5 100644 --- a/src/aiida/transports/plugins/ssh_async.py +++ b/src/aiida/transports/plugins/ssh_async.py @@ -14,7 +14,6 @@ import glob import os from pathlib import Path, PurePath -from typing import Optional, Union import click @@ -710,7 +709,7 @@ async def copytree_async( async def compress_async( self, format: str, - remotesources: Union[TransportPath, list[TransportPath]], + remotesources: TransportPath | list[TransportPath], remotedestination: TransportPath, root_dir: TransportPath, overwrite: bool = True, @@ -838,10 +837,10 @@ async def extract_async( async def exec_command_wait_async( self, command: str, - stdin: Optional[str] = None, + stdin: str | None = None, encoding: str = 'utf-8', - workdir: Optional[TransportPath] = None, - timeout: Optional[float] = None, + workdir: TransportPath | None = None, + timeout: float | None = None, **kwargs, ): """Execute a command on the remote machine and wait for it to finish. @@ -992,7 +991,7 @@ async def listdir_async(self, path: TransportPath, pattern=None): return list_ - async def listdir_withattributes_async(self, path: TransportPath, pattern: Optional[str] = None): + async def listdir_withattributes_async(self, path: TransportPath, pattern: str | None = None): """Return a list of the names of the entries in the given path. The list is in arbitrary order. It does not include the special entries '.' and '..' even if they are present in the directory. @@ -1282,7 +1281,7 @@ async def copy_from_remote_to_remote_async( os.path.join(sandbox.abspath, filename), remotedestination, **kwargs_put ) - def gotocomputer_command(self, remotedir: Optional[TransportPath] = None): + def gotocomputer_command(self, remotedir: TransportPath | None = None): """Return a string to be used to connect to the remote computer. :param remotedir: the remote directory to connect to diff --git a/src/aiida/transports/transport.py b/src/aiida/transports/transport.py index e60034bf33..b1585061ff 100644 --- a/src/aiida/transports/transport.py +++ b/src/aiida/transports/transport.py @@ -16,7 +16,6 @@ import sys from collections import OrderedDict from pathlib import Path, PurePosixPath -from typing import Optional, Union from aiida.common.exceptions import InternalError from aiida.common.lang import classproperty @@ -24,7 +23,7 @@ __all__ = ('AsyncTransport', 'BlockingTransport', 'Transport', 'TransportPath') -TransportPath = Union[str, Path, PurePosixPath] +TransportPath = str | Path | PurePosixPath _MAGIC_CHECK = re.compile('[*?[]') @@ -318,7 +317,7 @@ def get_safe_open_interval(self): """ return self._safe_open_interval - def _gotocomputer_string(self, remotedir: Optional[TransportPath] = None): + def _gotocomputer_string(self, remotedir: TransportPath | None = None): """Command executed when goto computer.""" if remotedir is None: return self._bash_command_str @@ -486,7 +485,7 @@ def copy_from_remote_to_remote( transportdestination.put(os.path.join(sandbox.abspath, filename), remotedestination, **kwargs_put) @abc.abstractmethod - def _exec_command_internal(self, command: str, workdir: Optional[TransportPath] = None, **kwargs): + def _exec_command_internal(self, command: str, workdir: TransportPath | None = None, **kwargs): """Execute the command on the shell, similarly to os.system. Enforce the execution to be run from `workdir`. @@ -506,7 +505,7 @@ def _exec_command_internal(self, command: str, workdir: Optional[TransportPath] """ @abc.abstractmethod - def exec_command_wait_bytes(self, command: str, stdin=None, workdir: Optional[TransportPath] = None, **kwargs): + def exec_command_wait_bytes(self, command: str, stdin=None, workdir: TransportPath | None = None, **kwargs): """Execute the command on the shell, waits for it to finish, and return the retcode, the stdout and the stderr as bytes. @@ -525,9 +524,7 @@ def exec_command_wait_bytes(self, command: str, stdin=None, workdir: Optional[Tr :return: a tuple: the retcode (int), stdout (bytes) and stderr (bytes). """ - def exec_command_wait( - self, command, stdin=None, encoding='utf-8', workdir: Optional[TransportPath] = None, **kwargs - ): + def exec_command_wait(self, command, stdin=None, encoding='utf-8', workdir: TransportPath | None = None, **kwargs): """Executes the specified command and waits for it to finish. :note: this function also decodes the bytes received into a string with the specified encoding, @@ -700,7 +697,7 @@ def listdir(self, path: TransportPath = '.', pattern=None): :return: a list of strings """ - def listdir_withattributes(self, path: TransportPath = '.', pattern: Optional[str] = None): + def listdir_withattributes(self, path: TransportPath = '.', pattern: str | None = None): """Return a list of the names of the entries in the given path. The list is in arbitrary order. It does not include the special entries '.' and '..' even if they are present in the directory. @@ -870,7 +867,7 @@ def rmtree(self, path: TransportPath): """ @abc.abstractmethod - def gotocomputer_command(self, remotedir: Optional[TransportPath] = None): + def gotocomputer_command(self, remotedir: TransportPath | None = None): """Return a string to be run using os.system in order to connect via the transport to the remote directory. @@ -1027,7 +1024,7 @@ def glob0(self, dirname, basename): def compress( self, format: str, - remotesources: Union[TransportPath, list[TransportPath]], + remotesources: TransportPath | list[TransportPath], remotedestination: TransportPath, root_dir: TransportPath, overwrite: bool = True, @@ -1196,9 +1193,9 @@ async def copy_from_remote_to_remote_async( async def exec_command_wait_async( self, command: str, - stdin: Optional[str] = None, + stdin: str | None = None, encoding: str = 'utf-8', - workdir: Optional[TransportPath] = None, + workdir: TransportPath | None = None, **kwargs, ): """Executes the specified command and waits for it to finish. @@ -1320,7 +1317,7 @@ async def isfile_async(self, path: TransportPath): """ @abc.abstractmethod - async def listdir_async(self, path: TransportPath, pattern: Optional[str] = None): + async def listdir_async(self, path: TransportPath, pattern: str | None = None): """Return a list of the names of the entries in the given path. The list is in arbitrary order. It does not include the special entries '.' and '..' even if they are present in the directory. @@ -1338,7 +1335,7 @@ async def listdir_async(self, path: TransportPath, pattern: Optional[str] = None async def listdir_withattributes_async( self, path: TransportPath, - pattern: Optional[str] = None, + pattern: str | None = None, ): """Return a list of the names of the entries in the given path. The list is in arbitrary order. It does not include the special @@ -1538,7 +1535,7 @@ async def glob_async(self, pathname: TransportPath): async def compress_async( self, format: str, - remotesources: Union[TransportPath, list[TransportPath]], + remotesources: TransportPath | list[TransportPath], remotedestination: TransportPath, root_dir: TransportPath, overwrite: bool = True, @@ -1597,7 +1594,7 @@ class BlockingTransport(Transport): def compress( self, format: str, - remotesources: Union[TransportPath, list[TransportPath]], + remotesources: TransportPath | list[TransportPath], remotedestination: TransportPath, root_dir: TransportPath, overwrite: bool = True, diff --git a/tests/cmdline/groups/test_dynamic.py b/tests/cmdline/groups/test_dynamic.py index f66c0ee4fa..cf4c98e2ec 100644 --- a/tests/cmdline/groups/test_dynamic.py +++ b/tests/cmdline/groups/test_dynamic.py @@ -14,8 +14,8 @@ class CustomClass: class Model(BaseModel): """Model configuration.""" - optional_type: t.Union[int, float] = Field(title='Optional type') - union_type: t.Union[int, float] = Field(title='Union type') + optional_type: int | float = Field(title='Optional type') + union_type: int | float = Field(title='Union type') without_default: str = Field(title='Without default') with_default: str = Field(title='With default', default='default') with_default_factory: str = Field(title='With default factory', default_factory=lambda: True) # type: ignore[assignment] diff --git a/tests/conftest.py b/tests/conftest.py index b93feaf99f..5f63dc0417 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1007,7 +1007,7 @@ def create_file_hierarchy(): :param target: the target where the hierarchy should be created. """ - def _create_file_hierarchy(hierarchy: t.Dict, target: t.Union[pathlib.Path, Folder]) -> None: + def _create_file_hierarchy(hierarchy: t.Dict, target: pathlib.Path | Folder) -> None: for filename, value in hierarchy.items(): if isinstance(value, dict): if isinstance(target, pathlib.Path): diff --git a/tests/engine/test_process_function.py b/tests/engine/test_process_function.py index 33581868aa..3c3a9f60ef 100644 --- a/tests/engine/test_process_function.py +++ b/tests/engine/test_process_function.py @@ -676,9 +676,9 @@ def function( b: str, c: bool, d: orm.Str, - e: t.Union[orm.Str, orm.Int], - f: t.Union[str, int], - g: t.Optional[t.Dict] = None, + e: orm.Str | orm.Int, + f: str | int, + g: t.Dict | None = None, ): pass @@ -745,7 +745,7 @@ def test_type_hinting_validation(): """Test that type hints are converted to automatic type checking through the process specification.""" @calcfunction # type: ignore[misc] - def function_type_hinting(a: t.Union[int, float]): + def function_type_hinting(a: int | float): return a + 1 with pytest.raises(ValueError, match=r'.*value \'a\' is not of the right type.*'): diff --git a/tests/orm/test_fields.py b/tests/orm/test_fields.py index f22fdc3c73..352f11b700 100644 --- a/tests/orm/test_fields.py +++ b/tests/orm/test_fields.py @@ -8,6 +8,8 @@ ########################################################################### """Test for entity fields""" +from __future__ import annotations + import pytest from importlib_metadata import entry_points diff --git a/tests/orm/test_fields/fields_AuthInfo.yml b/tests/orm/test_fields/fields_AuthInfo.yml index 505c96da91..9806e5d815 100644 --- a/tests/orm/test_fields/fields_AuthInfo.yml +++ b/tests/orm/test_fields/fields_AuthInfo.yml @@ -2,5 +2,5 @@ auth_params: QbDictField('auth_params', dtype=typing.Dict[str, typing.Any], is_a computer: QbNumericField('computer', dtype=, is_attribute=False) enabled: QbField('enabled', dtype=, is_attribute=False) metadata: QbDictField('metadata', dtype=typing.Dict[str, typing.Any], is_attribute=False) -pk: QbNumericField('pk', dtype=typing.Optional[int], is_attribute=False) +pk: QbNumericField('pk', dtype=int | None, is_attribute=False) user: QbNumericField('user', dtype=, is_attribute=False) diff --git a/tests/orm/test_fields/fields_Comment.yml b/tests/orm/test_fields/fields_Comment.yml index 30aedcef79..5c0075d9b9 100644 --- a/tests/orm/test_fields/fields_Comment.yml +++ b/tests/orm/test_fields/fields_Comment.yml @@ -1,7 +1,7 @@ content: QbStrField('content', dtype=, is_attribute=False) -ctime: QbNumericField('ctime', dtype=typing.Optional[datetime.datetime], is_attribute=False) -mtime: QbNumericField('mtime', dtype=typing.Optional[datetime.datetime], is_attribute=False) +ctime: QbNumericField('ctime', dtype=datetime.datetime | None, is_attribute=False) +mtime: QbNumericField('mtime', dtype=datetime.datetime | None, is_attribute=False) node: QbNumericField('node', dtype=, is_attribute=False) -pk: QbNumericField('pk', dtype=typing.Optional[int], is_attribute=False) +pk: QbNumericField('pk', dtype=int | None, is_attribute=False) user: QbNumericField('user', dtype=, is_attribute=False) -uuid: QbStrField('uuid', dtype=typing.Optional[str], is_attribute=False) +uuid: QbStrField('uuid', dtype=str | None, is_attribute=False) diff --git a/tests/orm/test_fields/fields_Computer.yml b/tests/orm/test_fields/fields_Computer.yml index 7d4e37168b..90367d2a76 100644 --- a/tests/orm/test_fields/fields_Computer.yml +++ b/tests/orm/test_fields/fields_Computer.yml @@ -2,7 +2,7 @@ description: QbStrField('description', dtype=, is_attribute=False) hostname: QbStrField('hostname', dtype=, is_attribute=False) label: QbStrField('label', dtype=, is_attribute=False) metadata: QbDictField('metadata', dtype=typing.Dict[str, typing.Any], is_attribute=False) -pk: QbNumericField('pk', dtype=typing.Optional[int], is_attribute=False) +pk: QbNumericField('pk', dtype=int | None, is_attribute=False) scheduler_type: QbStrField('scheduler_type', dtype=, is_attribute=False) transport_type: QbStrField('transport_type', dtype=, is_attribute=False) uuid: QbStrField('uuid', dtype=, is_attribute=False) diff --git a/tests/orm/test_fields/fields_Group.yml b/tests/orm/test_fields/fields_Group.yml index 537c76a11d..ac7586b441 100644 --- a/tests/orm/test_fields/fields_Group.yml +++ b/tests/orm/test_fields/fields_Group.yml @@ -1,9 +1,9 @@ -description: QbStrField('description', dtype=typing.Optional[str], is_attribute=False) +description: QbStrField('description', dtype=str | None, is_attribute=False) extras: QbDictField('extras', dtype=typing.Optional[typing.Dict[str, typing.Any]], is_attribute=False, is_subscriptable=True) label: QbStrField('label', dtype=, is_attribute=False) -pk: QbNumericField('pk', dtype=typing.Optional[int], is_attribute=False) -time: QbNumericField('time', dtype=typing.Optional[datetime.datetime], is_attribute=False) +pk: QbNumericField('pk', dtype=int | None, is_attribute=False) +time: QbNumericField('time', dtype=datetime.datetime | None, is_attribute=False) type_string: QbStrField('type_string', dtype=, is_attribute=False) user: QbNumericField('user', dtype=, is_attribute=False) uuid: QbStrField('uuid', dtype=, is_attribute=False) diff --git a/tests/orm/test_fields/fields_Log.yml b/tests/orm/test_fields/fields_Log.yml index 90bf0a5b0b..a911b85b57 100644 --- a/tests/orm/test_fields/fields_Log.yml +++ b/tests/orm/test_fields/fields_Log.yml @@ -3,6 +3,6 @@ levelname: QbStrField('levelname', dtype=, is_attribute=False) loggername: QbStrField('loggername', dtype=, is_attribute=False) message: QbStrField('message', dtype=, is_attribute=False) metadata: QbDictField('metadata', dtype=typing.Dict[str, typing.Any], is_attribute=False) -pk: QbNumericField('pk', dtype=typing.Optional[int], is_attribute=False) +pk: QbNumericField('pk', dtype=int | None, is_attribute=False) time: QbNumericField('time', dtype=, is_attribute=False) uuid: QbStrField('uuid', dtype=, is_attribute=False) diff --git a/tests/orm/test_fields/fields_User.yml b/tests/orm/test_fields/fields_User.yml index 06fb9cd05c..fd05fbad85 100644 --- a/tests/orm/test_fields/fields_User.yml +++ b/tests/orm/test_fields/fields_User.yml @@ -2,4 +2,4 @@ email: QbStrField('email', dtype=, is_attribute=False) first_name: QbStrField('first_name', dtype=, is_attribute=False) institution: QbStrField('institution', dtype=, is_attribute=False) last_name: QbStrField('last_name', dtype=, is_attribute=False) -pk: QbNumericField('pk', dtype=typing.Optional[int], is_attribute=False) +pk: QbNumericField('pk', dtype=int | None, is_attribute=False) diff --git a/tests/orm/test_fields/fields_aiida.data.core.array.ArrayData.yml b/tests/orm/test_fields/fields_aiida.data.core.array.ArrayData.yml index c31304e6f5..4609bb166b 100644 --- a/tests/orm/test_fields/fields_aiida.data.core.array.ArrayData.yml +++ b/tests/orm/test_fields/fields_aiida.data.core.array.ArrayData.yml @@ -1,20 +1,20 @@ -arrays: QbDictField('arrays', dtype=typing.Optional[dict[str, bytes]], is_attribute=True) +arrays: QbDictField('arrays', dtype=dict[str, bytes] | None, is_attribute=True) attributes: QbDictField('attributes', dtype=typing.Optional[typing.Dict[str, typing.Any]], is_attribute=False, is_subscriptable=True) -computer: QbNumericField('computer', dtype=typing.Optional[int], is_attribute=False) -ctime: QbNumericField('ctime', dtype=typing.Optional[datetime.datetime], is_attribute=False) -description: QbStrField('description', dtype=typing.Optional[str], is_attribute=False) +computer: QbNumericField('computer', dtype=int | None, is_attribute=False) +ctime: QbNumericField('ctime', dtype=datetime.datetime | None, is_attribute=False) +description: QbStrField('description', dtype=str | None, is_attribute=False) extras: QbDictField('extras', dtype=typing.Optional[typing.Dict[str, typing.Any]], is_attribute=False, is_subscriptable=True) -label: QbStrField('label', dtype=typing.Optional[str], is_attribute=False) -mtime: QbNumericField('mtime', dtype=typing.Optional[datetime.datetime], is_attribute=False) -node_type: QbStrField('node_type', dtype=typing.Optional[str], is_attribute=False) -pk: QbNumericField('pk', dtype=typing.Optional[int], is_attribute=False) -process_type: QbStrField('process_type', dtype=typing.Optional[str], is_attribute=False) -repository_content: QbDictField('repository_content', dtype=typing.Optional[dict[str, - bytes]], is_attribute=False) +label: QbStrField('label', dtype=str | None, is_attribute=False) +mtime: QbNumericField('mtime', dtype=datetime.datetime | None, is_attribute=False) +node_type: QbStrField('node_type', dtype=str | None, is_attribute=False) +pk: QbNumericField('pk', dtype=int | None, is_attribute=False) +process_type: QbStrField('process_type', dtype=str | None, is_attribute=False) +repository_content: QbDictField('repository_content', dtype=dict[str, bytes] | None, + is_attribute=False) repository_metadata: QbDictField('repository_metadata', dtype=typing.Optional[typing.Dict[str, typing.Any]], is_attribute=False) -source: QbDictField('source', dtype=typing.Optional[dict], is_attribute=True, is_subscriptable=True) -user: QbNumericField('user', dtype=typing.Optional[int], is_attribute=False) -uuid: QbStrField('uuid', dtype=typing.Optional[str], is_attribute=False) +source: QbDictField('source', dtype=dict | None, is_attribute=True, is_subscriptable=True) +user: QbNumericField('user', dtype=int | None, is_attribute=False) +uuid: QbStrField('uuid', dtype=str | None, is_attribute=False) diff --git a/tests/orm/test_fields/fields_aiida.data.core.array.bands.BandsData.yml b/tests/orm/test_fields/fields_aiida.data.core.array.bands.BandsData.yml index f0bca48c81..4aa44a6bb8 100644 --- a/tests/orm/test_fields/fields_aiida.data.core.array.bands.BandsData.yml +++ b/tests/orm/test_fields/fields_aiida.data.core.array.bands.BandsData.yml @@ -1,31 +1,31 @@ array_labels: QbArrayField('array_labels', dtype=typing.Optional[typing.List[str]], is_attribute=True) -arrays: QbDictField('arrays', dtype=typing.Optional[dict[str, bytes]], is_attribute=True) +arrays: QbDictField('arrays', dtype=dict[str, bytes] | None, is_attribute=True) attributes: QbDictField('attributes', dtype=typing.Optional[typing.Dict[str, typing.Any]], is_attribute=False, is_subscriptable=True) cell: QbArrayField('cell', dtype=typing.List[typing.List[float]], is_attribute=True) -computer: QbNumericField('computer', dtype=typing.Optional[int], is_attribute=False) -ctime: QbNumericField('ctime', dtype=typing.Optional[datetime.datetime], is_attribute=False) -description: QbStrField('description', dtype=typing.Optional[str], is_attribute=False) +computer: QbNumericField('computer', dtype=int | None, is_attribute=False) +ctime: QbNumericField('ctime', dtype=datetime.datetime | None, is_attribute=False) +description: QbStrField('description', dtype=str | None, is_attribute=False) extras: QbDictField('extras', dtype=typing.Optional[typing.Dict[str, typing.Any]], is_attribute=False, is_subscriptable=True) -label: QbStrField('label', dtype=typing.Optional[str], is_attribute=False) +label: QbStrField('label', dtype=str | None, is_attribute=False) label_numbers: QbArrayField('label_numbers', dtype=typing.List[int], is_attribute=True) labels: QbArrayField('labels', dtype=typing.List[str], is_attribute=True) mesh: QbArrayField('mesh', dtype=typing.List[int], is_attribute=True) -mtime: QbNumericField('mtime', dtype=typing.Optional[datetime.datetime], is_attribute=False) -node_type: QbStrField('node_type', dtype=typing.Optional[str], is_attribute=False) +mtime: QbNumericField('mtime', dtype=datetime.datetime | None, is_attribute=False) +node_type: QbStrField('node_type', dtype=str | None, is_attribute=False) offset: QbArrayField('offset', dtype=typing.List[float], is_attribute=True) pbc1: QbField('pbc1', dtype=, is_attribute=True) pbc2: QbField('pbc2', dtype=, is_attribute=True) pbc3: QbField('pbc3', dtype=, is_attribute=True) -pk: QbNumericField('pk', dtype=typing.Optional[int], is_attribute=False) -process_type: QbStrField('process_type', dtype=typing.Optional[str], is_attribute=False) -repository_content: QbDictField('repository_content', dtype=typing.Optional[dict[str, - bytes]], is_attribute=False) +pk: QbNumericField('pk', dtype=int | None, is_attribute=False) +process_type: QbStrField('process_type', dtype=str | None, is_attribute=False) +repository_content: QbDictField('repository_content', dtype=dict[str, bytes] | None, + is_attribute=False) repository_metadata: QbDictField('repository_metadata', dtype=typing.Optional[typing.Dict[str, typing.Any]], is_attribute=False) -source: QbDictField('source', dtype=typing.Optional[dict], is_attribute=True, is_subscriptable=True) +source: QbDictField('source', dtype=dict | None, is_attribute=True, is_subscriptable=True) units: QbStrField('units', dtype=, is_attribute=True) -user: QbNumericField('user', dtype=typing.Optional[int], is_attribute=False) -uuid: QbStrField('uuid', dtype=typing.Optional[str], is_attribute=False) +user: QbNumericField('user', dtype=int | None, is_attribute=False) +uuid: QbStrField('uuid', dtype=str | None, is_attribute=False) diff --git a/tests/orm/test_fields/fields_aiida.data.core.array.kpoints.KpointsData.yml b/tests/orm/test_fields/fields_aiida.data.core.array.kpoints.KpointsData.yml index 6d0aaa2b6f..a009cbc2ba 100644 --- a/tests/orm/test_fields/fields_aiida.data.core.array.kpoints.KpointsData.yml +++ b/tests/orm/test_fields/fields_aiida.data.core.array.kpoints.KpointsData.yml @@ -1,28 +1,28 @@ -arrays: QbDictField('arrays', dtype=typing.Optional[dict[str, bytes]], is_attribute=True) +arrays: QbDictField('arrays', dtype=dict[str, bytes] | None, is_attribute=True) attributes: QbDictField('attributes', dtype=typing.Optional[typing.Dict[str, typing.Any]], is_attribute=False, is_subscriptable=True) cell: QbArrayField('cell', dtype=typing.List[typing.List[float]], is_attribute=True) -computer: QbNumericField('computer', dtype=typing.Optional[int], is_attribute=False) -ctime: QbNumericField('ctime', dtype=typing.Optional[datetime.datetime], is_attribute=False) -description: QbStrField('description', dtype=typing.Optional[str], is_attribute=False) +computer: QbNumericField('computer', dtype=int | None, is_attribute=False) +ctime: QbNumericField('ctime', dtype=datetime.datetime | None, is_attribute=False) +description: QbStrField('description', dtype=str | None, is_attribute=False) extras: QbDictField('extras', dtype=typing.Optional[typing.Dict[str, typing.Any]], is_attribute=False, is_subscriptable=True) -label: QbStrField('label', dtype=typing.Optional[str], is_attribute=False) +label: QbStrField('label', dtype=str | None, is_attribute=False) label_numbers: QbArrayField('label_numbers', dtype=typing.List[int], is_attribute=True) labels: QbArrayField('labels', dtype=typing.List[str], is_attribute=True) mesh: QbArrayField('mesh', dtype=typing.List[int], is_attribute=True) -mtime: QbNumericField('mtime', dtype=typing.Optional[datetime.datetime], is_attribute=False) -node_type: QbStrField('node_type', dtype=typing.Optional[str], is_attribute=False) +mtime: QbNumericField('mtime', dtype=datetime.datetime | None, is_attribute=False) +node_type: QbStrField('node_type', dtype=str | None, is_attribute=False) offset: QbArrayField('offset', dtype=typing.List[float], is_attribute=True) pbc1: QbField('pbc1', dtype=, is_attribute=True) pbc2: QbField('pbc2', dtype=, is_attribute=True) pbc3: QbField('pbc3', dtype=, is_attribute=True) -pk: QbNumericField('pk', dtype=typing.Optional[int], is_attribute=False) -process_type: QbStrField('process_type', dtype=typing.Optional[str], is_attribute=False) -repository_content: QbDictField('repository_content', dtype=typing.Optional[dict[str, - bytes]], is_attribute=False) +pk: QbNumericField('pk', dtype=int | None, is_attribute=False) +process_type: QbStrField('process_type', dtype=str | None, is_attribute=False) +repository_content: QbDictField('repository_content', dtype=dict[str, bytes] | None, + is_attribute=False) repository_metadata: QbDictField('repository_metadata', dtype=typing.Optional[typing.Dict[str, typing.Any]], is_attribute=False) -source: QbDictField('source', dtype=typing.Optional[dict], is_attribute=True, is_subscriptable=True) -user: QbNumericField('user', dtype=typing.Optional[int], is_attribute=False) -uuid: QbStrField('uuid', dtype=typing.Optional[str], is_attribute=False) +source: QbDictField('source', dtype=dict | None, is_attribute=True, is_subscriptable=True) +user: QbNumericField('user', dtype=int | None, is_attribute=False) +uuid: QbStrField('uuid', dtype=str | None, is_attribute=False) diff --git a/tests/orm/test_fields/fields_aiida.data.core.array.projection.ProjectionData.yml b/tests/orm/test_fields/fields_aiida.data.core.array.projection.ProjectionData.yml index c31304e6f5..4609bb166b 100644 --- a/tests/orm/test_fields/fields_aiida.data.core.array.projection.ProjectionData.yml +++ b/tests/orm/test_fields/fields_aiida.data.core.array.projection.ProjectionData.yml @@ -1,20 +1,20 @@ -arrays: QbDictField('arrays', dtype=typing.Optional[dict[str, bytes]], is_attribute=True) +arrays: QbDictField('arrays', dtype=dict[str, bytes] | None, is_attribute=True) attributes: QbDictField('attributes', dtype=typing.Optional[typing.Dict[str, typing.Any]], is_attribute=False, is_subscriptable=True) -computer: QbNumericField('computer', dtype=typing.Optional[int], is_attribute=False) -ctime: QbNumericField('ctime', dtype=typing.Optional[datetime.datetime], is_attribute=False) -description: QbStrField('description', dtype=typing.Optional[str], is_attribute=False) +computer: QbNumericField('computer', dtype=int | None, is_attribute=False) +ctime: QbNumericField('ctime', dtype=datetime.datetime | None, is_attribute=False) +description: QbStrField('description', dtype=str | None, is_attribute=False) extras: QbDictField('extras', dtype=typing.Optional[typing.Dict[str, typing.Any]], is_attribute=False, is_subscriptable=True) -label: QbStrField('label', dtype=typing.Optional[str], is_attribute=False) -mtime: QbNumericField('mtime', dtype=typing.Optional[datetime.datetime], is_attribute=False) -node_type: QbStrField('node_type', dtype=typing.Optional[str], is_attribute=False) -pk: QbNumericField('pk', dtype=typing.Optional[int], is_attribute=False) -process_type: QbStrField('process_type', dtype=typing.Optional[str], is_attribute=False) -repository_content: QbDictField('repository_content', dtype=typing.Optional[dict[str, - bytes]], is_attribute=False) +label: QbStrField('label', dtype=str | None, is_attribute=False) +mtime: QbNumericField('mtime', dtype=datetime.datetime | None, is_attribute=False) +node_type: QbStrField('node_type', dtype=str | None, is_attribute=False) +pk: QbNumericField('pk', dtype=int | None, is_attribute=False) +process_type: QbStrField('process_type', dtype=str | None, is_attribute=False) +repository_content: QbDictField('repository_content', dtype=dict[str, bytes] | None, + is_attribute=False) repository_metadata: QbDictField('repository_metadata', dtype=typing.Optional[typing.Dict[str, typing.Any]], is_attribute=False) -source: QbDictField('source', dtype=typing.Optional[dict], is_attribute=True, is_subscriptable=True) -user: QbNumericField('user', dtype=typing.Optional[int], is_attribute=False) -uuid: QbStrField('uuid', dtype=typing.Optional[str], is_attribute=False) +source: QbDictField('source', dtype=dict | None, is_attribute=True, is_subscriptable=True) +user: QbNumericField('user', dtype=int | None, is_attribute=False) +uuid: QbStrField('uuid', dtype=str | None, is_attribute=False) diff --git a/tests/orm/test_fields/fields_aiida.data.core.array.trajectory.TrajectoryData.yml b/tests/orm/test_fields/fields_aiida.data.core.array.trajectory.TrajectoryData.yml index 87aaa30148..532cbb0ade 100644 --- a/tests/orm/test_fields/fields_aiida.data.core.array.trajectory.TrajectoryData.yml +++ b/tests/orm/test_fields/fields_aiida.data.core.array.trajectory.TrajectoryData.yml @@ -1,23 +1,23 @@ -arrays: QbDictField('arrays', dtype=typing.Optional[dict[str, bytes]], is_attribute=True) +arrays: QbDictField('arrays', dtype=dict[str, bytes] | None, is_attribute=True) attributes: QbDictField('attributes', dtype=typing.Optional[typing.Dict[str, typing.Any]], is_attribute=False, is_subscriptable=True) -computer: QbNumericField('computer', dtype=typing.Optional[int], is_attribute=False) -ctime: QbNumericField('ctime', dtype=typing.Optional[datetime.datetime], is_attribute=False) -description: QbStrField('description', dtype=typing.Optional[str], is_attribute=False) +computer: QbNumericField('computer', dtype=int | None, is_attribute=False) +ctime: QbNumericField('ctime', dtype=datetime.datetime | None, is_attribute=False) +description: QbStrField('description', dtype=str | None, is_attribute=False) extras: QbDictField('extras', dtype=typing.Optional[typing.Dict[str, typing.Any]], is_attribute=False, is_subscriptable=True) -label: QbStrField('label', dtype=typing.Optional[str], is_attribute=False) -mtime: QbNumericField('mtime', dtype=typing.Optional[datetime.datetime], is_attribute=False) -node_type: QbStrField('node_type', dtype=typing.Optional[str], is_attribute=False) -pk: QbNumericField('pk', dtype=typing.Optional[int], is_attribute=False) -process_type: QbStrField('process_type', dtype=typing.Optional[str], is_attribute=False) -repository_content: QbDictField('repository_content', dtype=typing.Optional[dict[str, - bytes]], is_attribute=False) +label: QbStrField('label', dtype=str | None, is_attribute=False) +mtime: QbNumericField('mtime', dtype=datetime.datetime | None, is_attribute=False) +node_type: QbStrField('node_type', dtype=str | None, is_attribute=False) +pk: QbNumericField('pk', dtype=int | None, is_attribute=False) +process_type: QbStrField('process_type', dtype=str | None, is_attribute=False) +repository_content: QbDictField('repository_content', dtype=dict[str, bytes] | None, + is_attribute=False) repository_metadata: QbDictField('repository_metadata', dtype=typing.Optional[typing.Dict[str, typing.Any]], is_attribute=False) -source: QbDictField('source', dtype=typing.Optional[dict], is_attribute=True, is_subscriptable=True) +source: QbDictField('source', dtype=dict | None, is_attribute=True, is_subscriptable=True) symbols: QbArrayField('symbols', dtype=typing.List[str], is_attribute=True) units_positions: QbStrField('units_positions', dtype=, is_attribute=True) units_times: QbStrField('units_times', dtype=, is_attribute=True) -user: QbNumericField('user', dtype=typing.Optional[int], is_attribute=False) -uuid: QbStrField('uuid', dtype=typing.Optional[str], is_attribute=False) +user: QbNumericField('user', dtype=int | None, is_attribute=False) +uuid: QbStrField('uuid', dtype=str | None, is_attribute=False) diff --git a/tests/orm/test_fields/fields_aiida.data.core.array.xy.XyData.yml b/tests/orm/test_fields/fields_aiida.data.core.array.xy.XyData.yml index c31304e6f5..4609bb166b 100644 --- a/tests/orm/test_fields/fields_aiida.data.core.array.xy.XyData.yml +++ b/tests/orm/test_fields/fields_aiida.data.core.array.xy.XyData.yml @@ -1,20 +1,20 @@ -arrays: QbDictField('arrays', dtype=typing.Optional[dict[str, bytes]], is_attribute=True) +arrays: QbDictField('arrays', dtype=dict[str, bytes] | None, is_attribute=True) attributes: QbDictField('attributes', dtype=typing.Optional[typing.Dict[str, typing.Any]], is_attribute=False, is_subscriptable=True) -computer: QbNumericField('computer', dtype=typing.Optional[int], is_attribute=False) -ctime: QbNumericField('ctime', dtype=typing.Optional[datetime.datetime], is_attribute=False) -description: QbStrField('description', dtype=typing.Optional[str], is_attribute=False) +computer: QbNumericField('computer', dtype=int | None, is_attribute=False) +ctime: QbNumericField('ctime', dtype=datetime.datetime | None, is_attribute=False) +description: QbStrField('description', dtype=str | None, is_attribute=False) extras: QbDictField('extras', dtype=typing.Optional[typing.Dict[str, typing.Any]], is_attribute=False, is_subscriptable=True) -label: QbStrField('label', dtype=typing.Optional[str], is_attribute=False) -mtime: QbNumericField('mtime', dtype=typing.Optional[datetime.datetime], is_attribute=False) -node_type: QbStrField('node_type', dtype=typing.Optional[str], is_attribute=False) -pk: QbNumericField('pk', dtype=typing.Optional[int], is_attribute=False) -process_type: QbStrField('process_type', dtype=typing.Optional[str], is_attribute=False) -repository_content: QbDictField('repository_content', dtype=typing.Optional[dict[str, - bytes]], is_attribute=False) +label: QbStrField('label', dtype=str | None, is_attribute=False) +mtime: QbNumericField('mtime', dtype=datetime.datetime | None, is_attribute=False) +node_type: QbStrField('node_type', dtype=str | None, is_attribute=False) +pk: QbNumericField('pk', dtype=int | None, is_attribute=False) +process_type: QbStrField('process_type', dtype=str | None, is_attribute=False) +repository_content: QbDictField('repository_content', dtype=dict[str, bytes] | None, + is_attribute=False) repository_metadata: QbDictField('repository_metadata', dtype=typing.Optional[typing.Dict[str, typing.Any]], is_attribute=False) -source: QbDictField('source', dtype=typing.Optional[dict], is_attribute=True, is_subscriptable=True) -user: QbNumericField('user', dtype=typing.Optional[int], is_attribute=False) -uuid: QbStrField('uuid', dtype=typing.Optional[str], is_attribute=False) +source: QbDictField('source', dtype=dict | None, is_attribute=True, is_subscriptable=True) +user: QbNumericField('user', dtype=int | None, is_attribute=False) +uuid: QbStrField('uuid', dtype=str | None, is_attribute=False) diff --git a/tests/orm/test_fields/fields_aiida.data.core.base.BaseType.yml b/tests/orm/test_fields/fields_aiida.data.core.base.BaseType.yml index 457621f596..a068c683f7 100644 --- a/tests/orm/test_fields/fields_aiida.data.core.base.BaseType.yml +++ b/tests/orm/test_fields/fields_aiida.data.core.base.BaseType.yml @@ -1,20 +1,20 @@ attributes: QbDictField('attributes', dtype=typing.Optional[typing.Dict[str, typing.Any]], is_attribute=False, is_subscriptable=True) -computer: QbNumericField('computer', dtype=typing.Optional[int], is_attribute=False) -ctime: QbNumericField('ctime', dtype=typing.Optional[datetime.datetime], is_attribute=False) -description: QbStrField('description', dtype=typing.Optional[str], is_attribute=False) +computer: QbNumericField('computer', dtype=int | None, is_attribute=False) +ctime: QbNumericField('ctime', dtype=datetime.datetime | None, is_attribute=False) +description: QbStrField('description', dtype=str | None, is_attribute=False) extras: QbDictField('extras', dtype=typing.Optional[typing.Dict[str, typing.Any]], is_attribute=False, is_subscriptable=True) -label: QbStrField('label', dtype=typing.Optional[str], is_attribute=False) -mtime: QbNumericField('mtime', dtype=typing.Optional[datetime.datetime], is_attribute=False) -node_type: QbStrField('node_type', dtype=typing.Optional[str], is_attribute=False) -pk: QbNumericField('pk', dtype=typing.Optional[int], is_attribute=False) -process_type: QbStrField('process_type', dtype=typing.Optional[str], is_attribute=False) -repository_content: QbDictField('repository_content', dtype=typing.Optional[dict[str, - bytes]], is_attribute=False) +label: QbStrField('label', dtype=str | None, is_attribute=False) +mtime: QbNumericField('mtime', dtype=datetime.datetime | None, is_attribute=False) +node_type: QbStrField('node_type', dtype=str | None, is_attribute=False) +pk: QbNumericField('pk', dtype=int | None, is_attribute=False) +process_type: QbStrField('process_type', dtype=str | None, is_attribute=False) +repository_content: QbDictField('repository_content', dtype=dict[str, bytes] | None, + is_attribute=False) repository_metadata: QbDictField('repository_metadata', dtype=typing.Optional[typing.Dict[str, typing.Any]], is_attribute=False) -source: QbDictField('source', dtype=typing.Optional[dict], is_attribute=True, is_subscriptable=True) -user: QbNumericField('user', dtype=typing.Optional[int], is_attribute=False) -uuid: QbStrField('uuid', dtype=typing.Optional[str], is_attribute=False) +source: QbDictField('source', dtype=dict | None, is_attribute=True, is_subscriptable=True) +user: QbNumericField('user', dtype=int | None, is_attribute=False) +uuid: QbStrField('uuid', dtype=str | None, is_attribute=False) value: QbField('value', dtype=typing.Any, is_attribute=True) diff --git a/tests/orm/test_fields/fields_aiida.data.core.bool.Bool.yml b/tests/orm/test_fields/fields_aiida.data.core.bool.Bool.yml index 457621f596..a068c683f7 100644 --- a/tests/orm/test_fields/fields_aiida.data.core.bool.Bool.yml +++ b/tests/orm/test_fields/fields_aiida.data.core.bool.Bool.yml @@ -1,20 +1,20 @@ attributes: QbDictField('attributes', dtype=typing.Optional[typing.Dict[str, typing.Any]], is_attribute=False, is_subscriptable=True) -computer: QbNumericField('computer', dtype=typing.Optional[int], is_attribute=False) -ctime: QbNumericField('ctime', dtype=typing.Optional[datetime.datetime], is_attribute=False) -description: QbStrField('description', dtype=typing.Optional[str], is_attribute=False) +computer: QbNumericField('computer', dtype=int | None, is_attribute=False) +ctime: QbNumericField('ctime', dtype=datetime.datetime | None, is_attribute=False) +description: QbStrField('description', dtype=str | None, is_attribute=False) extras: QbDictField('extras', dtype=typing.Optional[typing.Dict[str, typing.Any]], is_attribute=False, is_subscriptable=True) -label: QbStrField('label', dtype=typing.Optional[str], is_attribute=False) -mtime: QbNumericField('mtime', dtype=typing.Optional[datetime.datetime], is_attribute=False) -node_type: QbStrField('node_type', dtype=typing.Optional[str], is_attribute=False) -pk: QbNumericField('pk', dtype=typing.Optional[int], is_attribute=False) -process_type: QbStrField('process_type', dtype=typing.Optional[str], is_attribute=False) -repository_content: QbDictField('repository_content', dtype=typing.Optional[dict[str, - bytes]], is_attribute=False) +label: QbStrField('label', dtype=str | None, is_attribute=False) +mtime: QbNumericField('mtime', dtype=datetime.datetime | None, is_attribute=False) +node_type: QbStrField('node_type', dtype=str | None, is_attribute=False) +pk: QbNumericField('pk', dtype=int | None, is_attribute=False) +process_type: QbStrField('process_type', dtype=str | None, is_attribute=False) +repository_content: QbDictField('repository_content', dtype=dict[str, bytes] | None, + is_attribute=False) repository_metadata: QbDictField('repository_metadata', dtype=typing.Optional[typing.Dict[str, typing.Any]], is_attribute=False) -source: QbDictField('source', dtype=typing.Optional[dict], is_attribute=True, is_subscriptable=True) -user: QbNumericField('user', dtype=typing.Optional[int], is_attribute=False) -uuid: QbStrField('uuid', dtype=typing.Optional[str], is_attribute=False) +source: QbDictField('source', dtype=dict | None, is_attribute=True, is_subscriptable=True) +user: QbNumericField('user', dtype=int | None, is_attribute=False) +uuid: QbStrField('uuid', dtype=str | None, is_attribute=False) value: QbField('value', dtype=typing.Any, is_attribute=True) diff --git a/tests/orm/test_fields/fields_aiida.data.core.cif.CifData.yml b/tests/orm/test_fields/fields_aiida.data.core.cif.CifData.yml index da4e1d40d9..46cabec6e0 100644 --- a/tests/orm/test_fields/fields_aiida.data.core.cif.CifData.yml +++ b/tests/orm/test_fields/fields_aiida.data.core.cif.CifData.yml @@ -1,25 +1,25 @@ attributes: QbDictField('attributes', dtype=typing.Optional[typing.Dict[str, typing.Any]], is_attribute=False, is_subscriptable=True) -computer: QbNumericField('computer', dtype=typing.Optional[int], is_attribute=False) +computer: QbNumericField('computer', dtype=int | None, is_attribute=False) content: QbField('content', dtype=, is_attribute=True) -ctime: QbNumericField('ctime', dtype=typing.Optional[datetime.datetime], is_attribute=False) -description: QbStrField('description', dtype=typing.Optional[str], is_attribute=False) +ctime: QbNumericField('ctime', dtype=datetime.datetime | None, is_attribute=False) +description: QbStrField('description', dtype=str | None, is_attribute=False) extras: QbDictField('extras', dtype=typing.Optional[typing.Dict[str, typing.Any]], is_attribute=False, is_subscriptable=True) -filename: QbStrField('filename', dtype=typing.Optional[str], is_attribute=True) +filename: QbStrField('filename', dtype=str | None, is_attribute=True) formulae: QbArrayField('formulae', dtype=typing.Optional[typing.List[str]], is_attribute=True) -label: QbStrField('label', dtype=typing.Optional[str], is_attribute=False) -md5: QbStrField('md5', dtype=typing.Optional[str], is_attribute=True) -mtime: QbNumericField('mtime', dtype=typing.Optional[datetime.datetime], is_attribute=False) -node_type: QbStrField('node_type', dtype=typing.Optional[str], is_attribute=False) -pk: QbNumericField('pk', dtype=typing.Optional[int], is_attribute=False) -process_type: QbStrField('process_type', dtype=typing.Optional[str], is_attribute=False) -repository_content: QbDictField('repository_content', dtype=typing.Optional[dict[str, - bytes]], is_attribute=False) +label: QbStrField('label', dtype=str | None, is_attribute=False) +md5: QbStrField('md5', dtype=str | None, is_attribute=True) +mtime: QbNumericField('mtime', dtype=datetime.datetime | None, is_attribute=False) +node_type: QbStrField('node_type', dtype=str | None, is_attribute=False) +pk: QbNumericField('pk', dtype=int | None, is_attribute=False) +process_type: QbStrField('process_type', dtype=str | None, is_attribute=False) +repository_content: QbDictField('repository_content', dtype=dict[str, bytes] | None, + is_attribute=False) repository_metadata: QbDictField('repository_metadata', dtype=typing.Optional[typing.Dict[str, typing.Any]], is_attribute=False) -source: QbDictField('source', dtype=typing.Optional[dict], is_attribute=True, is_subscriptable=True) +source: QbDictField('source', dtype=dict | None, is_attribute=True, is_subscriptable=True) spacegroup_numbers: QbArrayField('spacegroup_numbers', dtype=typing.Optional[typing.List[str]], is_attribute=True) -user: QbNumericField('user', dtype=typing.Optional[int], is_attribute=False) -uuid: QbStrField('uuid', dtype=typing.Optional[str], is_attribute=False) +user: QbNumericField('user', dtype=int | None, is_attribute=False) +uuid: QbStrField('uuid', dtype=str | None, is_attribute=False) diff --git a/tests/orm/test_fields/fields_aiida.data.core.code.Code.yml b/tests/orm/test_fields/fields_aiida.data.core.code.Code.yml index 8ebaa0804d..c366ccb019 100644 --- a/tests/orm/test_fields/fields_aiida.data.core.code.Code.yml +++ b/tests/orm/test_fields/fields_aiida.data.core.code.Code.yml @@ -1,29 +1,28 @@ append_text: QbStrField('append_text', dtype=, is_attribute=True) attributes: QbDictField('attributes', dtype=typing.Optional[typing.Dict[str, typing.Any]], is_attribute=False, is_subscriptable=True) -computer: QbNumericField('computer', dtype=typing.Optional[int], is_attribute=False) -ctime: QbNumericField('ctime', dtype=typing.Optional[datetime.datetime], is_attribute=False) -default_calc_job_plugin: QbStrField('default_calc_job_plugin', dtype=typing.Optional[str], - is_attribute=True) +computer: QbNumericField('computer', dtype=int | None, is_attribute=False) +ctime: QbNumericField('ctime', dtype=datetime.datetime | None, is_attribute=False) +default_calc_job_plugin: QbStrField('default_calc_job_plugin', dtype=str | None, is_attribute=True) description: QbStrField('description', dtype=, is_attribute=True) extras: QbDictField('extras', dtype=typing.Optional[typing.Dict[str, typing.Any]], is_attribute=False, is_subscriptable=True) -input_plugin: QbStrField('input_plugin', dtype=typing.Optional[str], is_attribute=True) -is_local: QbField('is_local', dtype=typing.Optional[bool], is_attribute=True) +input_plugin: QbStrField('input_plugin', dtype=str | None, is_attribute=True) +is_local: QbField('is_local', dtype=bool | None, is_attribute=True) label: QbStrField('label', dtype=, is_attribute=True) -local_executable: QbStrField('local_executable', dtype=typing.Optional[str], is_attribute=True) -mtime: QbNumericField('mtime', dtype=typing.Optional[datetime.datetime], is_attribute=False) -node_type: QbStrField('node_type', dtype=typing.Optional[str], is_attribute=False) -pk: QbNumericField('pk', dtype=typing.Optional[int], is_attribute=False) +local_executable: QbStrField('local_executable', dtype=str | None, is_attribute=True) +mtime: QbNumericField('mtime', dtype=datetime.datetime | None, is_attribute=False) +node_type: QbStrField('node_type', dtype=str | None, is_attribute=False) +pk: QbNumericField('pk', dtype=int | None, is_attribute=False) prepend_text: QbStrField('prepend_text', dtype=, is_attribute=True) -process_type: QbStrField('process_type', dtype=typing.Optional[str], is_attribute=False) -remote_exec_path: QbStrField('remote_exec_path', dtype=typing.Optional[str], is_attribute=True) -repository_content: QbDictField('repository_content', dtype=typing.Optional[dict[str, - bytes]], is_attribute=False) +process_type: QbStrField('process_type', dtype=str | None, is_attribute=False) +remote_exec_path: QbStrField('remote_exec_path', dtype=str | None, is_attribute=True) +repository_content: QbDictField('repository_content', dtype=dict[str, bytes] | None, + is_attribute=False) repository_metadata: QbDictField('repository_metadata', dtype=typing.Optional[typing.Dict[str, typing.Any]], is_attribute=False) -source: QbDictField('source', dtype=typing.Optional[dict], is_attribute=True, is_subscriptable=True) +source: QbDictField('source', dtype=dict | None, is_attribute=True, is_subscriptable=True) use_double_quotes: QbField('use_double_quotes', dtype=, is_attribute=True) -user: QbNumericField('user', dtype=typing.Optional[int], is_attribute=False) -uuid: QbStrField('uuid', dtype=typing.Optional[str], is_attribute=False) -with_mpi: QbField('with_mpi', dtype=typing.Optional[bool], is_attribute=True) +user: QbNumericField('user', dtype=int | None, is_attribute=False) +uuid: QbStrField('uuid', dtype=str | None, is_attribute=False) +with_mpi: QbField('with_mpi', dtype=bool | None, is_attribute=True) diff --git a/tests/orm/test_fields/fields_aiida.data.core.code.abstract.AbstractCode.yml b/tests/orm/test_fields/fields_aiida.data.core.code.abstract.AbstractCode.yml index 4dc178d9fc..d422983f73 100644 --- a/tests/orm/test_fields/fields_aiida.data.core.code.abstract.AbstractCode.yml +++ b/tests/orm/test_fields/fields_aiida.data.core.code.abstract.AbstractCode.yml @@ -1,25 +1,24 @@ append_text: QbStrField('append_text', dtype=, is_attribute=True) attributes: QbDictField('attributes', dtype=typing.Optional[typing.Dict[str, typing.Any]], is_attribute=False, is_subscriptable=True) -computer: QbNumericField('computer', dtype=typing.Optional[int], is_attribute=False) -ctime: QbNumericField('ctime', dtype=typing.Optional[datetime.datetime], is_attribute=False) -default_calc_job_plugin: QbStrField('default_calc_job_plugin', dtype=typing.Optional[str], - is_attribute=True) +computer: QbNumericField('computer', dtype=int | None, is_attribute=False) +ctime: QbNumericField('ctime', dtype=datetime.datetime | None, is_attribute=False) +default_calc_job_plugin: QbStrField('default_calc_job_plugin', dtype=str | None, is_attribute=True) description: QbStrField('description', dtype=, is_attribute=True) extras: QbDictField('extras', dtype=typing.Optional[typing.Dict[str, typing.Any]], is_attribute=False, is_subscriptable=True) label: QbStrField('label', dtype=, is_attribute=True) -mtime: QbNumericField('mtime', dtype=typing.Optional[datetime.datetime], is_attribute=False) -node_type: QbStrField('node_type', dtype=typing.Optional[str], is_attribute=False) -pk: QbNumericField('pk', dtype=typing.Optional[int], is_attribute=False) +mtime: QbNumericField('mtime', dtype=datetime.datetime | None, is_attribute=False) +node_type: QbStrField('node_type', dtype=str | None, is_attribute=False) +pk: QbNumericField('pk', dtype=int | None, is_attribute=False) prepend_text: QbStrField('prepend_text', dtype=, is_attribute=True) -process_type: QbStrField('process_type', dtype=typing.Optional[str], is_attribute=False) -repository_content: QbDictField('repository_content', dtype=typing.Optional[dict[str, - bytes]], is_attribute=False) +process_type: QbStrField('process_type', dtype=str | None, is_attribute=False) +repository_content: QbDictField('repository_content', dtype=dict[str, bytes] | None, + is_attribute=False) repository_metadata: QbDictField('repository_metadata', dtype=typing.Optional[typing.Dict[str, typing.Any]], is_attribute=False) -source: QbDictField('source', dtype=typing.Optional[dict], is_attribute=True, is_subscriptable=True) +source: QbDictField('source', dtype=dict | None, is_attribute=True, is_subscriptable=True) use_double_quotes: QbField('use_double_quotes', dtype=, is_attribute=True) -user: QbNumericField('user', dtype=typing.Optional[int], is_attribute=False) -uuid: QbStrField('uuid', dtype=typing.Optional[str], is_attribute=False) -with_mpi: QbField('with_mpi', dtype=typing.Optional[bool], is_attribute=True) +user: QbNumericField('user', dtype=int | None, is_attribute=False) +uuid: QbStrField('uuid', dtype=str | None, is_attribute=False) +with_mpi: QbField('with_mpi', dtype=bool | None, is_attribute=True) diff --git a/tests/orm/test_fields/fields_aiida.data.core.code.containerized.ContainerizedCode.yml b/tests/orm/test_fields/fields_aiida.data.core.code.containerized.ContainerizedCode.yml index e7f12a1a94..f6286f31b0 100644 --- a/tests/orm/test_fields/fields_aiida.data.core.code.containerized.ContainerizedCode.yml +++ b/tests/orm/test_fields/fields_aiida.data.core.code.containerized.ContainerizedCode.yml @@ -2,9 +2,8 @@ append_text: QbStrField('append_text', dtype=, is_attribute=True) attributes: QbDictField('attributes', dtype=typing.Optional[typing.Dict[str, typing.Any]], is_attribute=False, is_subscriptable=True) computer: QbStrField('computer', dtype=, is_attribute=True) -ctime: QbNumericField('ctime', dtype=typing.Optional[datetime.datetime], is_attribute=False) -default_calc_job_plugin: QbStrField('default_calc_job_plugin', dtype=typing.Optional[str], - is_attribute=True) +ctime: QbNumericField('ctime', dtype=datetime.datetime | None, is_attribute=False) +default_calc_job_plugin: QbStrField('default_calc_job_plugin', dtype=str | None, is_attribute=True) description: QbStrField('description', dtype=, is_attribute=True) engine_command: QbStrField('engine_command', dtype=, is_attribute=True) extras: QbDictField('extras', dtype=typing.Optional[typing.Dict[str, typing.Any]], @@ -12,18 +11,18 @@ extras: QbDictField('extras', dtype=typing.Optional[typing.Dict[str, typing.Any] filepath_executable: QbStrField('filepath_executable', dtype=, is_attribute=True) image_name: QbStrField('image_name', dtype=, is_attribute=True) label: QbStrField('label', dtype=, is_attribute=True) -mtime: QbNumericField('mtime', dtype=typing.Optional[datetime.datetime], is_attribute=False) -node_type: QbStrField('node_type', dtype=typing.Optional[str], is_attribute=False) -pk: QbNumericField('pk', dtype=typing.Optional[int], is_attribute=False) +mtime: QbNumericField('mtime', dtype=datetime.datetime | None, is_attribute=False) +node_type: QbStrField('node_type', dtype=str | None, is_attribute=False) +pk: QbNumericField('pk', dtype=int | None, is_attribute=False) prepend_text: QbStrField('prepend_text', dtype=, is_attribute=True) -process_type: QbStrField('process_type', dtype=typing.Optional[str], is_attribute=False) -repository_content: QbDictField('repository_content', dtype=typing.Optional[dict[str, - bytes]], is_attribute=False) +process_type: QbStrField('process_type', dtype=str | None, is_attribute=False) +repository_content: QbDictField('repository_content', dtype=dict[str, bytes] | None, + is_attribute=False) repository_metadata: QbDictField('repository_metadata', dtype=typing.Optional[typing.Dict[str, typing.Any]], is_attribute=False) -source: QbDictField('source', dtype=typing.Optional[dict], is_attribute=True, is_subscriptable=True) +source: QbDictField('source', dtype=dict | None, is_attribute=True, is_subscriptable=True) use_double_quotes: QbField('use_double_quotes', dtype=, is_attribute=True) -user: QbNumericField('user', dtype=typing.Optional[int], is_attribute=False) -uuid: QbStrField('uuid', dtype=typing.Optional[str], is_attribute=False) -with_mpi: QbField('with_mpi', dtype=typing.Optional[bool], is_attribute=True) +user: QbNumericField('user', dtype=int | None, is_attribute=False) +uuid: QbStrField('uuid', dtype=str | None, is_attribute=False) +with_mpi: QbField('with_mpi', dtype=bool | None, is_attribute=True) wrap_cmdline_params: QbField('wrap_cmdline_params', dtype=, is_attribute=True) diff --git a/tests/orm/test_fields/fields_aiida.data.core.code.installed.InstalledCode.yml b/tests/orm/test_fields/fields_aiida.data.core.code.installed.InstalledCode.yml index 15089b4a3d..7acf481ab0 100644 --- a/tests/orm/test_fields/fields_aiida.data.core.code.installed.InstalledCode.yml +++ b/tests/orm/test_fields/fields_aiida.data.core.code.installed.InstalledCode.yml @@ -2,25 +2,24 @@ append_text: QbStrField('append_text', dtype=, is_attribute=True) attributes: QbDictField('attributes', dtype=typing.Optional[typing.Dict[str, typing.Any]], is_attribute=False, is_subscriptable=True) computer: QbStrField('computer', dtype=, is_attribute=True) -ctime: QbNumericField('ctime', dtype=typing.Optional[datetime.datetime], is_attribute=False) -default_calc_job_plugin: QbStrField('default_calc_job_plugin', dtype=typing.Optional[str], - is_attribute=True) +ctime: QbNumericField('ctime', dtype=datetime.datetime | None, is_attribute=False) +default_calc_job_plugin: QbStrField('default_calc_job_plugin', dtype=str | None, is_attribute=True) description: QbStrField('description', dtype=, is_attribute=True) extras: QbDictField('extras', dtype=typing.Optional[typing.Dict[str, typing.Any]], is_attribute=False, is_subscriptable=True) filepath_executable: QbStrField('filepath_executable', dtype=, is_attribute=True) label: QbStrField('label', dtype=, is_attribute=True) -mtime: QbNumericField('mtime', dtype=typing.Optional[datetime.datetime], is_attribute=False) -node_type: QbStrField('node_type', dtype=typing.Optional[str], is_attribute=False) -pk: QbNumericField('pk', dtype=typing.Optional[int], is_attribute=False) +mtime: QbNumericField('mtime', dtype=datetime.datetime | None, is_attribute=False) +node_type: QbStrField('node_type', dtype=str | None, is_attribute=False) +pk: QbNumericField('pk', dtype=int | None, is_attribute=False) prepend_text: QbStrField('prepend_text', dtype=, is_attribute=True) -process_type: QbStrField('process_type', dtype=typing.Optional[str], is_attribute=False) -repository_content: QbDictField('repository_content', dtype=typing.Optional[dict[str, - bytes]], is_attribute=False) +process_type: QbStrField('process_type', dtype=str | None, is_attribute=False) +repository_content: QbDictField('repository_content', dtype=dict[str, bytes] | None, + is_attribute=False) repository_metadata: QbDictField('repository_metadata', dtype=typing.Optional[typing.Dict[str, typing.Any]], is_attribute=False) -source: QbDictField('source', dtype=typing.Optional[dict], is_attribute=True, is_subscriptable=True) +source: QbDictField('source', dtype=dict | None, is_attribute=True, is_subscriptable=True) use_double_quotes: QbField('use_double_quotes', dtype=, is_attribute=True) -user: QbNumericField('user', dtype=typing.Optional[int], is_attribute=False) -uuid: QbStrField('uuid', dtype=typing.Optional[str], is_attribute=False) -with_mpi: QbField('with_mpi', dtype=typing.Optional[bool], is_attribute=True) +user: QbNumericField('user', dtype=int | None, is_attribute=False) +uuid: QbStrField('uuid', dtype=str | None, is_attribute=False) +with_mpi: QbField('with_mpi', dtype=bool | None, is_attribute=True) diff --git a/tests/orm/test_fields/fields_aiida.data.core.code.installed.shell.ShellCode.yml b/tests/orm/test_fields/fields_aiida.data.core.code.installed.shell.ShellCode.yml new file mode 100644 index 0000000000..7a682bf60d --- /dev/null +++ b/tests/orm/test_fields/fields_aiida.data.core.code.installed.shell.ShellCode.yml @@ -0,0 +1,26 @@ +append_text: QbStrField('append_text', dtype=, is_attribute=True) +attributes: QbDictField('attributes', dtype=typing.Optional[typing.Dict[str, typing.Any]], + is_attribute=False, is_subscriptable=True) +computer: QbStrField('computer', dtype=, is_attribute=True) +ctime: QbNumericField('ctime', dtype=datetime.datetime | None, is_attribute=False) +default_calc_job_plugin: QbStrField('default_calc_job_plugin', dtype=typing.Optional[str], + is_attribute=False) +description: QbStrField('description', dtype=, is_attribute=True) +extras: QbDictField('extras', dtype=typing.Optional[typing.Dict[str, typing.Any]], + is_attribute=False, is_subscriptable=True) +filepath_executable: QbStrField('filepath_executable', dtype=, is_attribute=True) +label: QbStrField('label', dtype=, is_attribute=True) +mtime: QbNumericField('mtime', dtype=datetime.datetime | None, is_attribute=False) +node_type: QbStrField('node_type', dtype=str | None, is_attribute=False) +pk: QbNumericField('pk', dtype=int | None, is_attribute=False) +prepend_text: QbStrField('prepend_text', dtype=, is_attribute=True) +process_type: QbStrField('process_type', dtype=str | None, is_attribute=False) +repository_content: QbDictField('repository_content', dtype=dict[str, bytes] | None, + is_attribute=False) +repository_metadata: QbDictField('repository_metadata', dtype=typing.Optional[typing.Dict[str, + typing.Any]], is_attribute=False) +source: QbDictField('source', dtype=dict | None, is_attribute=True, is_subscriptable=True) +use_double_quotes: QbField('use_double_quotes', dtype=, is_attribute=True) +user: QbNumericField('user', dtype=int | None, is_attribute=False) +uuid: QbStrField('uuid', dtype=str | None, is_attribute=False) +with_mpi: QbField('with_mpi', dtype=bool | None, is_attribute=True) diff --git a/tests/orm/test_fields/fields_aiida.data.core.code.portable.PortableCode.yml b/tests/orm/test_fields/fields_aiida.data.core.code.portable.PortableCode.yml index b874b26466..f1cbc77676 100644 --- a/tests/orm/test_fields/fields_aiida.data.core.code.portable.PortableCode.yml +++ b/tests/orm/test_fields/fields_aiida.data.core.code.portable.PortableCode.yml @@ -1,27 +1,26 @@ append_text: QbStrField('append_text', dtype=, is_attribute=True) attributes: QbDictField('attributes', dtype=typing.Optional[typing.Dict[str, typing.Any]], is_attribute=False, is_subscriptable=True) -computer: QbNumericField('computer', dtype=typing.Optional[int], is_attribute=False) -ctime: QbNumericField('ctime', dtype=typing.Optional[datetime.datetime], is_attribute=False) -default_calc_job_plugin: QbStrField('default_calc_job_plugin', dtype=typing.Optional[str], - is_attribute=True) +computer: QbNumericField('computer', dtype=int | None, is_attribute=False) +ctime: QbNumericField('ctime', dtype=datetime.datetime | None, is_attribute=False) +default_calc_job_plugin: QbStrField('default_calc_job_plugin', dtype=str | None, is_attribute=True) description: QbStrField('description', dtype=, is_attribute=True) extras: QbDictField('extras', dtype=typing.Optional[typing.Dict[str, typing.Any]], is_attribute=False, is_subscriptable=True) filepath_executable: QbStrField('filepath_executable', dtype=, is_attribute=True) filepath_files: QbStrField('filepath_files', dtype=, is_attribute=False) label: QbStrField('label', dtype=, is_attribute=True) -mtime: QbNumericField('mtime', dtype=typing.Optional[datetime.datetime], is_attribute=False) -node_type: QbStrField('node_type', dtype=typing.Optional[str], is_attribute=False) -pk: QbNumericField('pk', dtype=typing.Optional[int], is_attribute=False) +mtime: QbNumericField('mtime', dtype=datetime.datetime | None, is_attribute=False) +node_type: QbStrField('node_type', dtype=str | None, is_attribute=False) +pk: QbNumericField('pk', dtype=int | None, is_attribute=False) prepend_text: QbStrField('prepend_text', dtype=, is_attribute=True) -process_type: QbStrField('process_type', dtype=typing.Optional[str], is_attribute=False) -repository_content: QbDictField('repository_content', dtype=typing.Optional[dict[str, - bytes]], is_attribute=False) +process_type: QbStrField('process_type', dtype=str | None, is_attribute=False) +repository_content: QbDictField('repository_content', dtype=dict[str, bytes] | None, + is_attribute=False) repository_metadata: QbDictField('repository_metadata', dtype=typing.Optional[typing.Dict[str, typing.Any]], is_attribute=False) -source: QbDictField('source', dtype=typing.Optional[dict], is_attribute=True, is_subscriptable=True) +source: QbDictField('source', dtype=dict | None, is_attribute=True, is_subscriptable=True) use_double_quotes: QbField('use_double_quotes', dtype=, is_attribute=True) -user: QbNumericField('user', dtype=typing.Optional[int], is_attribute=False) -uuid: QbStrField('uuid', dtype=typing.Optional[str], is_attribute=False) -with_mpi: QbField('with_mpi', dtype=typing.Optional[bool], is_attribute=True) +user: QbNumericField('user', dtype=int | None, is_attribute=False) +uuid: QbStrField('uuid', dtype=str | None, is_attribute=False) +with_mpi: QbField('with_mpi', dtype=bool | None, is_attribute=True) diff --git a/tests/orm/test_fields/fields_aiida.data.core.dict.Dict.yml b/tests/orm/test_fields/fields_aiida.data.core.dict.Dict.yml index 710d253b4d..f57a067e42 100644 --- a/tests/orm/test_fields/fields_aiida.data.core.dict.Dict.yml +++ b/tests/orm/test_fields/fields_aiida.data.core.dict.Dict.yml @@ -1,21 +1,21 @@ attributes: QbDictField('attributes', dtype=typing.Optional[typing.Dict[str, typing.Any]], is_attribute=False, is_subscriptable=True) -computer: QbNumericField('computer', dtype=typing.Optional[int], is_attribute=False) -ctime: QbNumericField('ctime', dtype=typing.Optional[datetime.datetime], is_attribute=False) -description: QbStrField('description', dtype=typing.Optional[str], is_attribute=False) +computer: QbNumericField('computer', dtype=int | None, is_attribute=False) +ctime: QbNumericField('ctime', dtype=datetime.datetime | None, is_attribute=False) +description: QbStrField('description', dtype=str | None, is_attribute=False) extras: QbDictField('extras', dtype=typing.Optional[typing.Dict[str, typing.Any]], is_attribute=False, is_subscriptable=True) -label: QbStrField('label', dtype=typing.Optional[str], is_attribute=False) -mtime: QbNumericField('mtime', dtype=typing.Optional[datetime.datetime], is_attribute=False) -node_type: QbStrField('node_type', dtype=typing.Optional[str], is_attribute=False) -pk: QbNumericField('pk', dtype=typing.Optional[int], is_attribute=False) -process_type: QbStrField('process_type', dtype=typing.Optional[str], is_attribute=False) -repository_content: QbDictField('repository_content', dtype=typing.Optional[dict[str, - bytes]], is_attribute=False) +label: QbStrField('label', dtype=str | None, is_attribute=False) +mtime: QbNumericField('mtime', dtype=datetime.datetime | None, is_attribute=False) +node_type: QbStrField('node_type', dtype=str | None, is_attribute=False) +pk: QbNumericField('pk', dtype=int | None, is_attribute=False) +process_type: QbStrField('process_type', dtype=str | None, is_attribute=False) +repository_content: QbDictField('repository_content', dtype=dict[str, bytes] | None, + is_attribute=False) repository_metadata: QbDictField('repository_metadata', dtype=typing.Optional[typing.Dict[str, typing.Any]], is_attribute=False) -source: QbDictField('source', dtype=typing.Optional[dict], is_attribute=True, is_subscriptable=True) -user: QbNumericField('user', dtype=typing.Optional[int], is_attribute=False) -uuid: QbStrField('uuid', dtype=typing.Optional[str], is_attribute=False) +source: QbDictField('source', dtype=dict | None, is_attribute=True, is_subscriptable=True) +user: QbNumericField('user', dtype=int | None, is_attribute=False) +uuid: QbStrField('uuid', dtype=str | None, is_attribute=False) value: QbDictField('value', dtype=typing.Dict[str, typing.Any], is_attribute=False, is_subscriptable=True) diff --git a/tests/orm/test_fields/fields_aiida.data.core.entry_point.EntryPointData.yml b/tests/orm/test_fields/fields_aiida.data.core.entry_point.EntryPointData.yml new file mode 100644 index 0000000000..0936306eae --- /dev/null +++ b/tests/orm/test_fields/fields_aiida.data.core.entry_point.EntryPointData.yml @@ -0,0 +1,19 @@ +attributes: QbDictField('attributes', dtype=typing.Optional[typing.Dict[str, typing.Any]], + is_attribute=False, is_subscriptable=True) +computer: QbNumericField('computer', dtype=int | None, is_attribute=False) +ctime: QbNumericField('ctime', dtype=datetime.datetime | None, is_attribute=False) +description: QbStrField('description', dtype=str | None, is_attribute=False) +extras: QbDictField('extras', dtype=typing.Optional[typing.Dict[str, typing.Any]], + is_attribute=False, is_subscriptable=True) +label: QbStrField('label', dtype=str | None, is_attribute=False) +mtime: QbNumericField('mtime', dtype=datetime.datetime | None, is_attribute=False) +node_type: QbStrField('node_type', dtype=str | None, is_attribute=False) +pk: QbNumericField('pk', dtype=int | None, is_attribute=False) +process_type: QbStrField('process_type', dtype=str | None, is_attribute=False) +repository_content: QbDictField('repository_content', dtype=dict[str, bytes] | None, + is_attribute=False) +repository_metadata: QbDictField('repository_metadata', dtype=typing.Optional[typing.Dict[str, + typing.Any]], is_attribute=False) +source: QbDictField('source', dtype=dict | None, is_attribute=True, is_subscriptable=True) +user: QbNumericField('user', dtype=int | None, is_attribute=False) +uuid: QbStrField('uuid', dtype=str | None, is_attribute=False) diff --git a/tests/orm/test_fields/fields_aiida.data.core.enum.EnumData.yml b/tests/orm/test_fields/fields_aiida.data.core.enum.EnumData.yml index cfc3976079..ea5e746d5f 100644 --- a/tests/orm/test_fields/fields_aiida.data.core.enum.EnumData.yml +++ b/tests/orm/test_fields/fields_aiida.data.core.enum.EnumData.yml @@ -1,20 +1,20 @@ attributes: QbDictField('attributes', dtype=typing.Optional[typing.Dict[str, typing.Any]], is_attribute=False, is_subscriptable=True) -computer: QbNumericField('computer', dtype=typing.Optional[int], is_attribute=False) -ctime: QbNumericField('ctime', dtype=typing.Optional[datetime.datetime], is_attribute=False) -description: QbStrField('description', dtype=typing.Optional[str], is_attribute=False) +computer: QbNumericField('computer', dtype=int | None, is_attribute=False) +ctime: QbNumericField('ctime', dtype=datetime.datetime | None, is_attribute=False) +description: QbStrField('description', dtype=str | None, is_attribute=False) extras: QbDictField('extras', dtype=typing.Optional[typing.Dict[str, typing.Any]], is_attribute=False, is_subscriptable=True) -label: QbStrField('label', dtype=typing.Optional[str], is_attribute=False) +label: QbStrField('label', dtype=str | None, is_attribute=False) member: QbField('member', dtype=, is_attribute=True) -mtime: QbNumericField('mtime', dtype=typing.Optional[datetime.datetime], is_attribute=False) -node_type: QbStrField('node_type', dtype=typing.Optional[str], is_attribute=False) -pk: QbNumericField('pk', dtype=typing.Optional[int], is_attribute=False) -process_type: QbStrField('process_type', dtype=typing.Optional[str], is_attribute=False) -repository_content: QbDictField('repository_content', dtype=typing.Optional[dict[str, - bytes]], is_attribute=False) +mtime: QbNumericField('mtime', dtype=datetime.datetime | None, is_attribute=False) +node_type: QbStrField('node_type', dtype=str | None, is_attribute=False) +pk: QbNumericField('pk', dtype=int | None, is_attribute=False) +process_type: QbStrField('process_type', dtype=str | None, is_attribute=False) +repository_content: QbDictField('repository_content', dtype=dict[str, bytes] | None, + is_attribute=False) repository_metadata: QbDictField('repository_metadata', dtype=typing.Optional[typing.Dict[str, typing.Any]], is_attribute=False) -source: QbDictField('source', dtype=typing.Optional[dict], is_attribute=True, is_subscriptable=True) -user: QbNumericField('user', dtype=typing.Optional[int], is_attribute=False) -uuid: QbStrField('uuid', dtype=typing.Optional[str], is_attribute=False) +source: QbDictField('source', dtype=dict | None, is_attribute=True, is_subscriptable=True) +user: QbNumericField('user', dtype=int | None, is_attribute=False) +uuid: QbStrField('uuid', dtype=str | None, is_attribute=False) diff --git a/tests/orm/test_fields/fields_aiida.data.core.float.Float.yml b/tests/orm/test_fields/fields_aiida.data.core.float.Float.yml index 457621f596..a068c683f7 100644 --- a/tests/orm/test_fields/fields_aiida.data.core.float.Float.yml +++ b/tests/orm/test_fields/fields_aiida.data.core.float.Float.yml @@ -1,20 +1,20 @@ attributes: QbDictField('attributes', dtype=typing.Optional[typing.Dict[str, typing.Any]], is_attribute=False, is_subscriptable=True) -computer: QbNumericField('computer', dtype=typing.Optional[int], is_attribute=False) -ctime: QbNumericField('ctime', dtype=typing.Optional[datetime.datetime], is_attribute=False) -description: QbStrField('description', dtype=typing.Optional[str], is_attribute=False) +computer: QbNumericField('computer', dtype=int | None, is_attribute=False) +ctime: QbNumericField('ctime', dtype=datetime.datetime | None, is_attribute=False) +description: QbStrField('description', dtype=str | None, is_attribute=False) extras: QbDictField('extras', dtype=typing.Optional[typing.Dict[str, typing.Any]], is_attribute=False, is_subscriptable=True) -label: QbStrField('label', dtype=typing.Optional[str], is_attribute=False) -mtime: QbNumericField('mtime', dtype=typing.Optional[datetime.datetime], is_attribute=False) -node_type: QbStrField('node_type', dtype=typing.Optional[str], is_attribute=False) -pk: QbNumericField('pk', dtype=typing.Optional[int], is_attribute=False) -process_type: QbStrField('process_type', dtype=typing.Optional[str], is_attribute=False) -repository_content: QbDictField('repository_content', dtype=typing.Optional[dict[str, - bytes]], is_attribute=False) +label: QbStrField('label', dtype=str | None, is_attribute=False) +mtime: QbNumericField('mtime', dtype=datetime.datetime | None, is_attribute=False) +node_type: QbStrField('node_type', dtype=str | None, is_attribute=False) +pk: QbNumericField('pk', dtype=int | None, is_attribute=False) +process_type: QbStrField('process_type', dtype=str | None, is_attribute=False) +repository_content: QbDictField('repository_content', dtype=dict[str, bytes] | None, + is_attribute=False) repository_metadata: QbDictField('repository_metadata', dtype=typing.Optional[typing.Dict[str, typing.Any]], is_attribute=False) -source: QbDictField('source', dtype=typing.Optional[dict], is_attribute=True, is_subscriptable=True) -user: QbNumericField('user', dtype=typing.Optional[int], is_attribute=False) -uuid: QbStrField('uuid', dtype=typing.Optional[str], is_attribute=False) +source: QbDictField('source', dtype=dict | None, is_attribute=True, is_subscriptable=True) +user: QbNumericField('user', dtype=int | None, is_attribute=False) +uuid: QbStrField('uuid', dtype=str | None, is_attribute=False) value: QbField('value', dtype=typing.Any, is_attribute=True) diff --git a/tests/orm/test_fields/fields_aiida.data.core.folder.FolderData.yml b/tests/orm/test_fields/fields_aiida.data.core.folder.FolderData.yml index 5bee2ef441..0936306eae 100644 --- a/tests/orm/test_fields/fields_aiida.data.core.folder.FolderData.yml +++ b/tests/orm/test_fields/fields_aiida.data.core.folder.FolderData.yml @@ -1,19 +1,19 @@ attributes: QbDictField('attributes', dtype=typing.Optional[typing.Dict[str, typing.Any]], is_attribute=False, is_subscriptable=True) -computer: QbNumericField('computer', dtype=typing.Optional[int], is_attribute=False) -ctime: QbNumericField('ctime', dtype=typing.Optional[datetime.datetime], is_attribute=False) -description: QbStrField('description', dtype=typing.Optional[str], is_attribute=False) +computer: QbNumericField('computer', dtype=int | None, is_attribute=False) +ctime: QbNumericField('ctime', dtype=datetime.datetime | None, is_attribute=False) +description: QbStrField('description', dtype=str | None, is_attribute=False) extras: QbDictField('extras', dtype=typing.Optional[typing.Dict[str, typing.Any]], is_attribute=False, is_subscriptable=True) -label: QbStrField('label', dtype=typing.Optional[str], is_attribute=False) -mtime: QbNumericField('mtime', dtype=typing.Optional[datetime.datetime], is_attribute=False) -node_type: QbStrField('node_type', dtype=typing.Optional[str], is_attribute=False) -pk: QbNumericField('pk', dtype=typing.Optional[int], is_attribute=False) -process_type: QbStrField('process_type', dtype=typing.Optional[str], is_attribute=False) -repository_content: QbDictField('repository_content', dtype=typing.Optional[dict[str, - bytes]], is_attribute=False) +label: QbStrField('label', dtype=str | None, is_attribute=False) +mtime: QbNumericField('mtime', dtype=datetime.datetime | None, is_attribute=False) +node_type: QbStrField('node_type', dtype=str | None, is_attribute=False) +pk: QbNumericField('pk', dtype=int | None, is_attribute=False) +process_type: QbStrField('process_type', dtype=str | None, is_attribute=False) +repository_content: QbDictField('repository_content', dtype=dict[str, bytes] | None, + is_attribute=False) repository_metadata: QbDictField('repository_metadata', dtype=typing.Optional[typing.Dict[str, typing.Any]], is_attribute=False) -source: QbDictField('source', dtype=typing.Optional[dict], is_attribute=True, is_subscriptable=True) -user: QbNumericField('user', dtype=typing.Optional[int], is_attribute=False) -uuid: QbStrField('uuid', dtype=typing.Optional[str], is_attribute=False) +source: QbDictField('source', dtype=dict | None, is_attribute=True, is_subscriptable=True) +user: QbNumericField('user', dtype=int | None, is_attribute=False) +uuid: QbStrField('uuid', dtype=str | None, is_attribute=False) diff --git a/tests/orm/test_fields/fields_aiida.data.core.int.Int.yml b/tests/orm/test_fields/fields_aiida.data.core.int.Int.yml index 457621f596..a068c683f7 100644 --- a/tests/orm/test_fields/fields_aiida.data.core.int.Int.yml +++ b/tests/orm/test_fields/fields_aiida.data.core.int.Int.yml @@ -1,20 +1,20 @@ attributes: QbDictField('attributes', dtype=typing.Optional[typing.Dict[str, typing.Any]], is_attribute=False, is_subscriptable=True) -computer: QbNumericField('computer', dtype=typing.Optional[int], is_attribute=False) -ctime: QbNumericField('ctime', dtype=typing.Optional[datetime.datetime], is_attribute=False) -description: QbStrField('description', dtype=typing.Optional[str], is_attribute=False) +computer: QbNumericField('computer', dtype=int | None, is_attribute=False) +ctime: QbNumericField('ctime', dtype=datetime.datetime | None, is_attribute=False) +description: QbStrField('description', dtype=str | None, is_attribute=False) extras: QbDictField('extras', dtype=typing.Optional[typing.Dict[str, typing.Any]], is_attribute=False, is_subscriptable=True) -label: QbStrField('label', dtype=typing.Optional[str], is_attribute=False) -mtime: QbNumericField('mtime', dtype=typing.Optional[datetime.datetime], is_attribute=False) -node_type: QbStrField('node_type', dtype=typing.Optional[str], is_attribute=False) -pk: QbNumericField('pk', dtype=typing.Optional[int], is_attribute=False) -process_type: QbStrField('process_type', dtype=typing.Optional[str], is_attribute=False) -repository_content: QbDictField('repository_content', dtype=typing.Optional[dict[str, - bytes]], is_attribute=False) +label: QbStrField('label', dtype=str | None, is_attribute=False) +mtime: QbNumericField('mtime', dtype=datetime.datetime | None, is_attribute=False) +node_type: QbStrField('node_type', dtype=str | None, is_attribute=False) +pk: QbNumericField('pk', dtype=int | None, is_attribute=False) +process_type: QbStrField('process_type', dtype=str | None, is_attribute=False) +repository_content: QbDictField('repository_content', dtype=dict[str, bytes] | None, + is_attribute=False) repository_metadata: QbDictField('repository_metadata', dtype=typing.Optional[typing.Dict[str, typing.Any]], is_attribute=False) -source: QbDictField('source', dtype=typing.Optional[dict], is_attribute=True, is_subscriptable=True) -user: QbNumericField('user', dtype=typing.Optional[int], is_attribute=False) -uuid: QbStrField('uuid', dtype=typing.Optional[str], is_attribute=False) +source: QbDictField('source', dtype=dict | None, is_attribute=True, is_subscriptable=True) +user: QbNumericField('user', dtype=int | None, is_attribute=False) +uuid: QbStrField('uuid', dtype=str | None, is_attribute=False) value: QbField('value', dtype=typing.Any, is_attribute=True) diff --git a/tests/orm/test_fields/fields_aiida.data.core.jsonable.JsonableData.yml b/tests/orm/test_fields/fields_aiida.data.core.jsonable.JsonableData.yml index 1166fbc570..3962030e09 100644 --- a/tests/orm/test_fields/fields_aiida.data.core.jsonable.JsonableData.yml +++ b/tests/orm/test_fields/fields_aiida.data.core.jsonable.JsonableData.yml @@ -1,21 +1,21 @@ attributes: QbDictField('attributes', dtype=typing.Optional[typing.Dict[str, typing.Any]], is_attribute=False, is_subscriptable=True) -computer: QbNumericField('computer', dtype=typing.Optional[int], is_attribute=False) -ctime: QbNumericField('ctime', dtype=typing.Optional[datetime.datetime], is_attribute=False) -description: QbStrField('description', dtype=typing.Optional[str], is_attribute=False) +computer: QbNumericField('computer', dtype=int | None, is_attribute=False) +ctime: QbNumericField('ctime', dtype=datetime.datetime | None, is_attribute=False) +description: QbStrField('description', dtype=str | None, is_attribute=False) extras: QbDictField('extras', dtype=typing.Optional[typing.Dict[str, typing.Any]], is_attribute=False, is_subscriptable=True) -label: QbStrField('label', dtype=typing.Optional[str], is_attribute=False) -mtime: QbNumericField('mtime', dtype=typing.Optional[datetime.datetime], is_attribute=False) -node_type: QbStrField('node_type', dtype=typing.Optional[str], is_attribute=False) +label: QbStrField('label', dtype=str | None, is_attribute=False) +mtime: QbNumericField('mtime', dtype=datetime.datetime | None, is_attribute=False) +node_type: QbStrField('node_type', dtype=str | None, is_attribute=False) obj: QbField('obj', dtype=, is_attribute=True) -pk: QbNumericField('pk', dtype=typing.Optional[int], is_attribute=False) -process_type: QbStrField('process_type', dtype=typing.Optional[str], is_attribute=False) -repository_content: QbDictField('repository_content', dtype=typing.Optional[dict[str, - bytes]], is_attribute=False) +pk: QbNumericField('pk', dtype=int | None, is_attribute=False) +process_type: QbStrField('process_type', dtype=str | None, is_attribute=False) +repository_content: QbDictField('repository_content', dtype=dict[str, bytes] | None, + is_attribute=False) repository_metadata: QbDictField('repository_metadata', dtype=typing.Optional[typing.Dict[str, typing.Any]], is_attribute=False) -source: QbDictField('source', dtype=typing.Optional[dict], is_attribute=True, is_subscriptable=True) -user: QbNumericField('user', dtype=typing.Optional[int], is_attribute=False) -uuid: QbStrField('uuid', dtype=typing.Optional[str], is_attribute=False) +source: QbDictField('source', dtype=dict | None, is_attribute=True, is_subscriptable=True) +user: QbNumericField('user', dtype=int | None, is_attribute=False) +uuid: QbStrField('uuid', dtype=str | None, is_attribute=False) diff --git a/tests/orm/test_fields/fields_aiida.data.core.list.List.yml b/tests/orm/test_fields/fields_aiida.data.core.list.List.yml index 4edd6d3380..cb6d741322 100644 --- a/tests/orm/test_fields/fields_aiida.data.core.list.List.yml +++ b/tests/orm/test_fields/fields_aiida.data.core.list.List.yml @@ -1,20 +1,20 @@ attributes: QbDictField('attributes', dtype=typing.Optional[typing.Dict[str, typing.Any]], is_attribute=False, is_subscriptable=True) -computer: QbNumericField('computer', dtype=typing.Optional[int], is_attribute=False) -ctime: QbNumericField('ctime', dtype=typing.Optional[datetime.datetime], is_attribute=False) -description: QbStrField('description', dtype=typing.Optional[str], is_attribute=False) +computer: QbNumericField('computer', dtype=int | None, is_attribute=False) +ctime: QbNumericField('ctime', dtype=datetime.datetime | None, is_attribute=False) +description: QbStrField('description', dtype=str | None, is_attribute=False) extras: QbDictField('extras', dtype=typing.Optional[typing.Dict[str, typing.Any]], is_attribute=False, is_subscriptable=True) -label: QbStrField('label', dtype=typing.Optional[str], is_attribute=False) -mtime: QbNumericField('mtime', dtype=typing.Optional[datetime.datetime], is_attribute=False) -node_type: QbStrField('node_type', dtype=typing.Optional[str], is_attribute=False) -pk: QbNumericField('pk', dtype=typing.Optional[int], is_attribute=False) -process_type: QbStrField('process_type', dtype=typing.Optional[str], is_attribute=False) -repository_content: QbDictField('repository_content', dtype=typing.Optional[dict[str, - bytes]], is_attribute=False) +label: QbStrField('label', dtype=str | None, is_attribute=False) +mtime: QbNumericField('mtime', dtype=datetime.datetime | None, is_attribute=False) +node_type: QbStrField('node_type', dtype=str | None, is_attribute=False) +pk: QbNumericField('pk', dtype=int | None, is_attribute=False) +process_type: QbStrField('process_type', dtype=str | None, is_attribute=False) +repository_content: QbDictField('repository_content', dtype=dict[str, bytes] | None, + is_attribute=False) repository_metadata: QbDictField('repository_metadata', dtype=typing.Optional[typing.Dict[str, typing.Any]], is_attribute=False) -source: QbDictField('source', dtype=typing.Optional[dict], is_attribute=True, is_subscriptable=True) -user: QbNumericField('user', dtype=typing.Optional[int], is_attribute=False) -uuid: QbStrField('uuid', dtype=typing.Optional[str], is_attribute=False) +source: QbDictField('source', dtype=dict | None, is_attribute=True, is_subscriptable=True) +user: QbNumericField('user', dtype=int | None, is_attribute=False) +uuid: QbStrField('uuid', dtype=str | None, is_attribute=False) value: QbArrayField('value', dtype=typing.List[typing.Any], is_attribute=True) diff --git a/tests/orm/test_fields/fields_aiida.data.core.numeric.NumericType.yml b/tests/orm/test_fields/fields_aiida.data.core.numeric.NumericType.yml index 457621f596..a068c683f7 100644 --- a/tests/orm/test_fields/fields_aiida.data.core.numeric.NumericType.yml +++ b/tests/orm/test_fields/fields_aiida.data.core.numeric.NumericType.yml @@ -1,20 +1,20 @@ attributes: QbDictField('attributes', dtype=typing.Optional[typing.Dict[str, typing.Any]], is_attribute=False, is_subscriptable=True) -computer: QbNumericField('computer', dtype=typing.Optional[int], is_attribute=False) -ctime: QbNumericField('ctime', dtype=typing.Optional[datetime.datetime], is_attribute=False) -description: QbStrField('description', dtype=typing.Optional[str], is_attribute=False) +computer: QbNumericField('computer', dtype=int | None, is_attribute=False) +ctime: QbNumericField('ctime', dtype=datetime.datetime | None, is_attribute=False) +description: QbStrField('description', dtype=str | None, is_attribute=False) extras: QbDictField('extras', dtype=typing.Optional[typing.Dict[str, typing.Any]], is_attribute=False, is_subscriptable=True) -label: QbStrField('label', dtype=typing.Optional[str], is_attribute=False) -mtime: QbNumericField('mtime', dtype=typing.Optional[datetime.datetime], is_attribute=False) -node_type: QbStrField('node_type', dtype=typing.Optional[str], is_attribute=False) -pk: QbNumericField('pk', dtype=typing.Optional[int], is_attribute=False) -process_type: QbStrField('process_type', dtype=typing.Optional[str], is_attribute=False) -repository_content: QbDictField('repository_content', dtype=typing.Optional[dict[str, - bytes]], is_attribute=False) +label: QbStrField('label', dtype=str | None, is_attribute=False) +mtime: QbNumericField('mtime', dtype=datetime.datetime | None, is_attribute=False) +node_type: QbStrField('node_type', dtype=str | None, is_attribute=False) +pk: QbNumericField('pk', dtype=int | None, is_attribute=False) +process_type: QbStrField('process_type', dtype=str | None, is_attribute=False) +repository_content: QbDictField('repository_content', dtype=dict[str, bytes] | None, + is_attribute=False) repository_metadata: QbDictField('repository_metadata', dtype=typing.Optional[typing.Dict[str, typing.Any]], is_attribute=False) -source: QbDictField('source', dtype=typing.Optional[dict], is_attribute=True, is_subscriptable=True) -user: QbNumericField('user', dtype=typing.Optional[int], is_attribute=False) -uuid: QbStrField('uuid', dtype=typing.Optional[str], is_attribute=False) +source: QbDictField('source', dtype=dict | None, is_attribute=True, is_subscriptable=True) +user: QbNumericField('user', dtype=int | None, is_attribute=False) +uuid: QbStrField('uuid', dtype=str | None, is_attribute=False) value: QbField('value', dtype=typing.Any, is_attribute=True) diff --git a/tests/orm/test_fields/fields_aiida.data.core.orbital.OrbitalData.yml b/tests/orm/test_fields/fields_aiida.data.core.orbital.OrbitalData.yml index 5bee2ef441..0936306eae 100644 --- a/tests/orm/test_fields/fields_aiida.data.core.orbital.OrbitalData.yml +++ b/tests/orm/test_fields/fields_aiida.data.core.orbital.OrbitalData.yml @@ -1,19 +1,19 @@ attributes: QbDictField('attributes', dtype=typing.Optional[typing.Dict[str, typing.Any]], is_attribute=False, is_subscriptable=True) -computer: QbNumericField('computer', dtype=typing.Optional[int], is_attribute=False) -ctime: QbNumericField('ctime', dtype=typing.Optional[datetime.datetime], is_attribute=False) -description: QbStrField('description', dtype=typing.Optional[str], is_attribute=False) +computer: QbNumericField('computer', dtype=int | None, is_attribute=False) +ctime: QbNumericField('ctime', dtype=datetime.datetime | None, is_attribute=False) +description: QbStrField('description', dtype=str | None, is_attribute=False) extras: QbDictField('extras', dtype=typing.Optional[typing.Dict[str, typing.Any]], is_attribute=False, is_subscriptable=True) -label: QbStrField('label', dtype=typing.Optional[str], is_attribute=False) -mtime: QbNumericField('mtime', dtype=typing.Optional[datetime.datetime], is_attribute=False) -node_type: QbStrField('node_type', dtype=typing.Optional[str], is_attribute=False) -pk: QbNumericField('pk', dtype=typing.Optional[int], is_attribute=False) -process_type: QbStrField('process_type', dtype=typing.Optional[str], is_attribute=False) -repository_content: QbDictField('repository_content', dtype=typing.Optional[dict[str, - bytes]], is_attribute=False) +label: QbStrField('label', dtype=str | None, is_attribute=False) +mtime: QbNumericField('mtime', dtype=datetime.datetime | None, is_attribute=False) +node_type: QbStrField('node_type', dtype=str | None, is_attribute=False) +pk: QbNumericField('pk', dtype=int | None, is_attribute=False) +process_type: QbStrField('process_type', dtype=str | None, is_attribute=False) +repository_content: QbDictField('repository_content', dtype=dict[str, bytes] | None, + is_attribute=False) repository_metadata: QbDictField('repository_metadata', dtype=typing.Optional[typing.Dict[str, typing.Any]], is_attribute=False) -source: QbDictField('source', dtype=typing.Optional[dict], is_attribute=True, is_subscriptable=True) -user: QbNumericField('user', dtype=typing.Optional[int], is_attribute=False) -uuid: QbStrField('uuid', dtype=typing.Optional[str], is_attribute=False) +source: QbDictField('source', dtype=dict | None, is_attribute=True, is_subscriptable=True) +user: QbNumericField('user', dtype=int | None, is_attribute=False) +uuid: QbStrField('uuid', dtype=str | None, is_attribute=False) diff --git a/tests/orm/test_fields/fields_aiida.data.core.pickled.PickledData.yml b/tests/orm/test_fields/fields_aiida.data.core.pickled.PickledData.yml new file mode 100644 index 0000000000..1517beeb3d --- /dev/null +++ b/tests/orm/test_fields/fields_aiida.data.core.pickled.PickledData.yml @@ -0,0 +1,21 @@ +attributes: QbDictField('attributes', dtype=typing.Optional[typing.Dict[str, typing.Any]], + is_attribute=False, is_subscriptable=True) +computer: QbNumericField('computer', dtype=int | None, is_attribute=False) +content: QbField('content', dtype=, is_attribute=True) +ctime: QbNumericField('ctime', dtype=datetime.datetime | None, is_attribute=False) +description: QbStrField('description', dtype=str | None, is_attribute=False) +extras: QbDictField('extras', dtype=typing.Optional[typing.Dict[str, typing.Any]], + is_attribute=False, is_subscriptable=True) +filename: QbStrField('filename', dtype=str | None, is_attribute=True) +label: QbStrField('label', dtype=str | None, is_attribute=False) +mtime: QbNumericField('mtime', dtype=datetime.datetime | None, is_attribute=False) +node_type: QbStrField('node_type', dtype=str | None, is_attribute=False) +pk: QbNumericField('pk', dtype=int | None, is_attribute=False) +process_type: QbStrField('process_type', dtype=str | None, is_attribute=False) +repository_content: QbDictField('repository_content', dtype=dict[str, bytes] | None, + is_attribute=False) +repository_metadata: QbDictField('repository_metadata', dtype=typing.Optional[typing.Dict[str, + typing.Any]], is_attribute=False) +source: QbDictField('source', dtype=dict | None, is_attribute=True, is_subscriptable=True) +user: QbNumericField('user', dtype=int | None, is_attribute=False) +uuid: QbStrField('uuid', dtype=str | None, is_attribute=False) diff --git a/tests/orm/test_fields/fields_aiida.data.core.remote.RemoteData.yml b/tests/orm/test_fields/fields_aiida.data.core.remote.RemoteData.yml index 5086780659..af5e3f0c0e 100644 --- a/tests/orm/test_fields/fields_aiida.data.core.remote.RemoteData.yml +++ b/tests/orm/test_fields/fields_aiida.data.core.remote.RemoteData.yml @@ -1,20 +1,20 @@ attributes: QbDictField('attributes', dtype=typing.Optional[typing.Dict[str, typing.Any]], is_attribute=False, is_subscriptable=True) -computer: QbNumericField('computer', dtype=typing.Optional[int], is_attribute=False) -ctime: QbNumericField('ctime', dtype=typing.Optional[datetime.datetime], is_attribute=False) -description: QbStrField('description', dtype=typing.Optional[str], is_attribute=False) +computer: QbNumericField('computer', dtype=int | None, is_attribute=False) +ctime: QbNumericField('ctime', dtype=datetime.datetime | None, is_attribute=False) +description: QbStrField('description', dtype=str | None, is_attribute=False) extras: QbDictField('extras', dtype=typing.Optional[typing.Dict[str, typing.Any]], is_attribute=False, is_subscriptable=True) -label: QbStrField('label', dtype=typing.Optional[str], is_attribute=False) -mtime: QbNumericField('mtime', dtype=typing.Optional[datetime.datetime], is_attribute=False) -node_type: QbStrField('node_type', dtype=typing.Optional[str], is_attribute=False) -pk: QbNumericField('pk', dtype=typing.Optional[int], is_attribute=False) -process_type: QbStrField('process_type', dtype=typing.Optional[str], is_attribute=False) -remote_path: QbStrField('remote_path', dtype=typing.Optional[str], is_attribute=True) -repository_content: QbDictField('repository_content', dtype=typing.Optional[dict[str, - bytes]], is_attribute=False) +label: QbStrField('label', dtype=str | None, is_attribute=False) +mtime: QbNumericField('mtime', dtype=datetime.datetime | None, is_attribute=False) +node_type: QbStrField('node_type', dtype=str | None, is_attribute=False) +pk: QbNumericField('pk', dtype=int | None, is_attribute=False) +process_type: QbStrField('process_type', dtype=str | None, is_attribute=False) +remote_path: QbStrField('remote_path', dtype=str | None, is_attribute=True) +repository_content: QbDictField('repository_content', dtype=dict[str, bytes] | None, + is_attribute=False) repository_metadata: QbDictField('repository_metadata', dtype=typing.Optional[typing.Dict[str, typing.Any]], is_attribute=False) -source: QbDictField('source', dtype=typing.Optional[dict], is_attribute=True, is_subscriptable=True) -user: QbNumericField('user', dtype=typing.Optional[int], is_attribute=False) -uuid: QbStrField('uuid', dtype=typing.Optional[str], is_attribute=False) +source: QbDictField('source', dtype=dict | None, is_attribute=True, is_subscriptable=True) +user: QbNumericField('user', dtype=int | None, is_attribute=False) +uuid: QbStrField('uuid', dtype=str | None, is_attribute=False) diff --git a/tests/orm/test_fields/fields_aiida.data.core.remote.stash.RemoteStashData.yml b/tests/orm/test_fields/fields_aiida.data.core.remote.stash.RemoteStashData.yml index 35e6e4188e..ecb9e3fbc0 100644 --- a/tests/orm/test_fields/fields_aiida.data.core.remote.stash.RemoteStashData.yml +++ b/tests/orm/test_fields/fields_aiida.data.core.remote.stash.RemoteStashData.yml @@ -1,20 +1,20 @@ attributes: QbDictField('attributes', dtype=typing.Optional[typing.Dict[str, typing.Any]], is_attribute=False, is_subscriptable=True) -computer: QbNumericField('computer', dtype=typing.Optional[int], is_attribute=False) -ctime: QbNumericField('ctime', dtype=typing.Optional[datetime.datetime], is_attribute=False) -description: QbStrField('description', dtype=typing.Optional[str], is_attribute=False) +computer: QbNumericField('computer', dtype=int | None, is_attribute=False) +ctime: QbNumericField('ctime', dtype=datetime.datetime | None, is_attribute=False) +description: QbStrField('description', dtype=str | None, is_attribute=False) extras: QbDictField('extras', dtype=typing.Optional[typing.Dict[str, typing.Any]], is_attribute=False, is_subscriptable=True) -label: QbStrField('label', dtype=typing.Optional[str], is_attribute=False) -mtime: QbNumericField('mtime', dtype=typing.Optional[datetime.datetime], is_attribute=False) -node_type: QbStrField('node_type', dtype=typing.Optional[str], is_attribute=False) -pk: QbNumericField('pk', dtype=typing.Optional[int], is_attribute=False) -process_type: QbStrField('process_type', dtype=typing.Optional[str], is_attribute=False) -repository_content: QbDictField('repository_content', dtype=typing.Optional[dict[str, - bytes]], is_attribute=False) +label: QbStrField('label', dtype=str | None, is_attribute=False) +mtime: QbNumericField('mtime', dtype=datetime.datetime | None, is_attribute=False) +node_type: QbStrField('node_type', dtype=str | None, is_attribute=False) +pk: QbNumericField('pk', dtype=int | None, is_attribute=False) +process_type: QbStrField('process_type', dtype=str | None, is_attribute=False) +repository_content: QbDictField('repository_content', dtype=dict[str, bytes] | None, + is_attribute=False) repository_metadata: QbDictField('repository_metadata', dtype=typing.Optional[typing.Dict[str, typing.Any]], is_attribute=False) -source: QbDictField('source', dtype=typing.Optional[dict], is_attribute=True, is_subscriptable=True) +source: QbDictField('source', dtype=dict | None, is_attribute=True, is_subscriptable=True) stash_mode: QbField('stash_mode', dtype=, is_attribute=True) -user: QbNumericField('user', dtype=typing.Optional[int], is_attribute=False) -uuid: QbStrField('uuid', dtype=typing.Optional[str], is_attribute=False) +user: QbNumericField('user', dtype=int | None, is_attribute=False) +uuid: QbStrField('uuid', dtype=str | None, is_attribute=False) diff --git a/tests/orm/test_fields/fields_aiida.data.core.remote.stash.compress.RemoteStashCompressedData.yml b/tests/orm/test_fields/fields_aiida.data.core.remote.stash.compress.RemoteStashCompressedData.yml index 66c3188024..c00aad1c35 100644 --- a/tests/orm/test_fields/fields_aiida.data.core.remote.stash.compress.RemoteStashCompressedData.yml +++ b/tests/orm/test_fields/fields_aiida.data.core.remote.stash.compress.RemoteStashCompressedData.yml @@ -1,24 +1,24 @@ attributes: QbDictField('attributes', dtype=typing.Optional[typing.Dict[str, typing.Any]], is_attribute=False, is_subscriptable=True) -computer: QbNumericField('computer', dtype=typing.Optional[int], is_attribute=False) -ctime: QbNumericField('ctime', dtype=typing.Optional[datetime.datetime], is_attribute=False) +computer: QbNumericField('computer', dtype=int | None, is_attribute=False) +ctime: QbNumericField('ctime', dtype=datetime.datetime | None, is_attribute=False) dereference: QbField('dereference', dtype=, is_attribute=True) -description: QbStrField('description', dtype=typing.Optional[str], is_attribute=False) +description: QbStrField('description', dtype=str | None, is_attribute=False) extras: QbDictField('extras', dtype=typing.Optional[typing.Dict[str, typing.Any]], is_attribute=False, is_subscriptable=True) fail_on_missing: QbField('fail_on_missing', dtype=, is_attribute=True) -label: QbStrField('label', dtype=typing.Optional[str], is_attribute=False) -mtime: QbNumericField('mtime', dtype=typing.Optional[datetime.datetime], is_attribute=False) -node_type: QbStrField('node_type', dtype=typing.Optional[str], is_attribute=False) -pk: QbNumericField('pk', dtype=typing.Optional[int], is_attribute=False) -process_type: QbStrField('process_type', dtype=typing.Optional[str], is_attribute=False) -repository_content: QbDictField('repository_content', dtype=typing.Optional[dict[str, - bytes]], is_attribute=False) +label: QbStrField('label', dtype=str | None, is_attribute=False) +mtime: QbNumericField('mtime', dtype=datetime.datetime | None, is_attribute=False) +node_type: QbStrField('node_type', dtype=str | None, is_attribute=False) +pk: QbNumericField('pk', dtype=int | None, is_attribute=False) +process_type: QbStrField('process_type', dtype=str | None, is_attribute=False) +repository_content: QbDictField('repository_content', dtype=dict[str, bytes] | None, + is_attribute=False) repository_metadata: QbDictField('repository_metadata', dtype=typing.Optional[typing.Dict[str, typing.Any]], is_attribute=False) -source: QbDictField('source', dtype=typing.Optional[dict], is_attribute=True, is_subscriptable=True) +source: QbDictField('source', dtype=dict | None, is_attribute=True, is_subscriptable=True) source_list: QbArrayField('source_list', dtype=typing.List[str], is_attribute=True) stash_mode: QbField('stash_mode', dtype=, is_attribute=True) target_basepath: QbStrField('target_basepath', dtype=, is_attribute=True) -user: QbNumericField('user', dtype=typing.Optional[int], is_attribute=False) -uuid: QbStrField('uuid', dtype=typing.Optional[str], is_attribute=False) +user: QbNumericField('user', dtype=int | None, is_attribute=False) +uuid: QbStrField('uuid', dtype=str | None, is_attribute=False) diff --git a/tests/orm/test_fields/fields_aiida.data.core.remote.stash.custom.RemoteStashCustomData.yml b/tests/orm/test_fields/fields_aiida.data.core.remote.stash.custom.RemoteStashCustomData.yml index 82e177e738..6b5fa72cb4 100644 --- a/tests/orm/test_fields/fields_aiida.data.core.remote.stash.custom.RemoteStashCustomData.yml +++ b/tests/orm/test_fields/fields_aiida.data.core.remote.stash.custom.RemoteStashCustomData.yml @@ -1,22 +1,22 @@ attributes: QbDictField('attributes', dtype=typing.Optional[typing.Dict[str, typing.Any]], is_attribute=False, is_subscriptable=True) -computer: QbNumericField('computer', dtype=typing.Optional[int], is_attribute=False) -ctime: QbNumericField('ctime', dtype=typing.Optional[datetime.datetime], is_attribute=False) -description: QbStrField('description', dtype=typing.Optional[str], is_attribute=False) +computer: QbNumericField('computer', dtype=int | None, is_attribute=False) +ctime: QbNumericField('ctime', dtype=datetime.datetime | None, is_attribute=False) +description: QbStrField('description', dtype=str | None, is_attribute=False) extras: QbDictField('extras', dtype=typing.Optional[typing.Dict[str, typing.Any]], is_attribute=False, is_subscriptable=True) -label: QbStrField('label', dtype=typing.Optional[str], is_attribute=False) -mtime: QbNumericField('mtime', dtype=typing.Optional[datetime.datetime], is_attribute=False) -node_type: QbStrField('node_type', dtype=typing.Optional[str], is_attribute=False) -pk: QbNumericField('pk', dtype=typing.Optional[int], is_attribute=False) -process_type: QbStrField('process_type', dtype=typing.Optional[str], is_attribute=False) -repository_content: QbDictField('repository_content', dtype=typing.Optional[dict[str, - bytes]], is_attribute=False) +label: QbStrField('label', dtype=str | None, is_attribute=False) +mtime: QbNumericField('mtime', dtype=datetime.datetime | None, is_attribute=False) +node_type: QbStrField('node_type', dtype=str | None, is_attribute=False) +pk: QbNumericField('pk', dtype=int | None, is_attribute=False) +process_type: QbStrField('process_type', dtype=str | None, is_attribute=False) +repository_content: QbDictField('repository_content', dtype=dict[str, bytes] | None, + is_attribute=False) repository_metadata: QbDictField('repository_metadata', dtype=typing.Optional[typing.Dict[str, typing.Any]], is_attribute=False) -source: QbDictField('source', dtype=typing.Optional[dict], is_attribute=True, is_subscriptable=True) +source: QbDictField('source', dtype=dict | None, is_attribute=True, is_subscriptable=True) source_list: QbArrayField('source_list', dtype=typing.List[str], is_attribute=True) stash_mode: QbField('stash_mode', dtype=, is_attribute=True) target_basepath: QbStrField('target_basepath', dtype=, is_attribute=True) -user: QbNumericField('user', dtype=typing.Optional[int], is_attribute=False) -uuid: QbStrField('uuid', dtype=typing.Optional[str], is_attribute=False) +user: QbNumericField('user', dtype=int | None, is_attribute=False) +uuid: QbStrField('uuid', dtype=str | None, is_attribute=False) diff --git a/tests/orm/test_fields/fields_aiida.data.core.remote.stash.folder.RemoteStashFolderData.yml b/tests/orm/test_fields/fields_aiida.data.core.remote.stash.folder.RemoteStashFolderData.yml index 30cb0437ad..8fb9fe0097 100644 --- a/tests/orm/test_fields/fields_aiida.data.core.remote.stash.folder.RemoteStashFolderData.yml +++ b/tests/orm/test_fields/fields_aiida.data.core.remote.stash.folder.RemoteStashFolderData.yml @@ -1,23 +1,23 @@ attributes: QbDictField('attributes', dtype=typing.Optional[typing.Dict[str, typing.Any]], is_attribute=False, is_subscriptable=True) -computer: QbNumericField('computer', dtype=typing.Optional[int], is_attribute=False) -ctime: QbNumericField('ctime', dtype=typing.Optional[datetime.datetime], is_attribute=False) -description: QbStrField('description', dtype=typing.Optional[str], is_attribute=False) +computer: QbNumericField('computer', dtype=int | None, is_attribute=False) +ctime: QbNumericField('ctime', dtype=datetime.datetime | None, is_attribute=False) +description: QbStrField('description', dtype=str | None, is_attribute=False) extras: QbDictField('extras', dtype=typing.Optional[typing.Dict[str, typing.Any]], is_attribute=False, is_subscriptable=True) fail_on_missing: QbField('fail_on_missing', dtype=, is_attribute=True) -label: QbStrField('label', dtype=typing.Optional[str], is_attribute=False) -mtime: QbNumericField('mtime', dtype=typing.Optional[datetime.datetime], is_attribute=False) -node_type: QbStrField('node_type', dtype=typing.Optional[str], is_attribute=False) -pk: QbNumericField('pk', dtype=typing.Optional[int], is_attribute=False) -process_type: QbStrField('process_type', dtype=typing.Optional[str], is_attribute=False) -repository_content: QbDictField('repository_content', dtype=typing.Optional[dict[str, - bytes]], is_attribute=False) +label: QbStrField('label', dtype=str | None, is_attribute=False) +mtime: QbNumericField('mtime', dtype=datetime.datetime | None, is_attribute=False) +node_type: QbStrField('node_type', dtype=str | None, is_attribute=False) +pk: QbNumericField('pk', dtype=int | None, is_attribute=False) +process_type: QbStrField('process_type', dtype=str | None, is_attribute=False) +repository_content: QbDictField('repository_content', dtype=dict[str, bytes] | None, + is_attribute=False) repository_metadata: QbDictField('repository_metadata', dtype=typing.Optional[typing.Dict[str, typing.Any]], is_attribute=False) -source: QbDictField('source', dtype=typing.Optional[dict], is_attribute=True, is_subscriptable=True) +source: QbDictField('source', dtype=dict | None, is_attribute=True, is_subscriptable=True) source_list: QbArrayField('source_list', dtype=typing.List[str], is_attribute=True) stash_mode: QbField('stash_mode', dtype=, is_attribute=True) target_basepath: QbStrField('target_basepath', dtype=, is_attribute=True) -user: QbNumericField('user', dtype=typing.Optional[int], is_attribute=False) -uuid: QbStrField('uuid', dtype=typing.Optional[str], is_attribute=False) +user: QbNumericField('user', dtype=int | None, is_attribute=False) +uuid: QbStrField('uuid', dtype=str | None, is_attribute=False) diff --git a/tests/orm/test_fields/fields_aiida.data.core.singlefile.SinglefileData.yml b/tests/orm/test_fields/fields_aiida.data.core.singlefile.SinglefileData.yml index 71f35c46f7..1517beeb3d 100644 --- a/tests/orm/test_fields/fields_aiida.data.core.singlefile.SinglefileData.yml +++ b/tests/orm/test_fields/fields_aiida.data.core.singlefile.SinglefileData.yml @@ -1,21 +1,21 @@ attributes: QbDictField('attributes', dtype=typing.Optional[typing.Dict[str, typing.Any]], is_attribute=False, is_subscriptable=True) -computer: QbNumericField('computer', dtype=typing.Optional[int], is_attribute=False) +computer: QbNumericField('computer', dtype=int | None, is_attribute=False) content: QbField('content', dtype=, is_attribute=True) -ctime: QbNumericField('ctime', dtype=typing.Optional[datetime.datetime], is_attribute=False) -description: QbStrField('description', dtype=typing.Optional[str], is_attribute=False) +ctime: QbNumericField('ctime', dtype=datetime.datetime | None, is_attribute=False) +description: QbStrField('description', dtype=str | None, is_attribute=False) extras: QbDictField('extras', dtype=typing.Optional[typing.Dict[str, typing.Any]], is_attribute=False, is_subscriptable=True) -filename: QbStrField('filename', dtype=typing.Optional[str], is_attribute=True) -label: QbStrField('label', dtype=typing.Optional[str], is_attribute=False) -mtime: QbNumericField('mtime', dtype=typing.Optional[datetime.datetime], is_attribute=False) -node_type: QbStrField('node_type', dtype=typing.Optional[str], is_attribute=False) -pk: QbNumericField('pk', dtype=typing.Optional[int], is_attribute=False) -process_type: QbStrField('process_type', dtype=typing.Optional[str], is_attribute=False) -repository_content: QbDictField('repository_content', dtype=typing.Optional[dict[str, - bytes]], is_attribute=False) +filename: QbStrField('filename', dtype=str | None, is_attribute=True) +label: QbStrField('label', dtype=str | None, is_attribute=False) +mtime: QbNumericField('mtime', dtype=datetime.datetime | None, is_attribute=False) +node_type: QbStrField('node_type', dtype=str | None, is_attribute=False) +pk: QbNumericField('pk', dtype=int | None, is_attribute=False) +process_type: QbStrField('process_type', dtype=str | None, is_attribute=False) +repository_content: QbDictField('repository_content', dtype=dict[str, bytes] | None, + is_attribute=False) repository_metadata: QbDictField('repository_metadata', dtype=typing.Optional[typing.Dict[str, typing.Any]], is_attribute=False) -source: QbDictField('source', dtype=typing.Optional[dict], is_attribute=True, is_subscriptable=True) -user: QbNumericField('user', dtype=typing.Optional[int], is_attribute=False) -uuid: QbStrField('uuid', dtype=typing.Optional[str], is_attribute=False) +source: QbDictField('source', dtype=dict | None, is_attribute=True, is_subscriptable=True) +user: QbNumericField('user', dtype=int | None, is_attribute=False) +uuid: QbStrField('uuid', dtype=str | None, is_attribute=False) diff --git a/tests/orm/test_fields/fields_aiida.data.core.str.Str.yml b/tests/orm/test_fields/fields_aiida.data.core.str.Str.yml index 457621f596..a068c683f7 100644 --- a/tests/orm/test_fields/fields_aiida.data.core.str.Str.yml +++ b/tests/orm/test_fields/fields_aiida.data.core.str.Str.yml @@ -1,20 +1,20 @@ attributes: QbDictField('attributes', dtype=typing.Optional[typing.Dict[str, typing.Any]], is_attribute=False, is_subscriptable=True) -computer: QbNumericField('computer', dtype=typing.Optional[int], is_attribute=False) -ctime: QbNumericField('ctime', dtype=typing.Optional[datetime.datetime], is_attribute=False) -description: QbStrField('description', dtype=typing.Optional[str], is_attribute=False) +computer: QbNumericField('computer', dtype=int | None, is_attribute=False) +ctime: QbNumericField('ctime', dtype=datetime.datetime | None, is_attribute=False) +description: QbStrField('description', dtype=str | None, is_attribute=False) extras: QbDictField('extras', dtype=typing.Optional[typing.Dict[str, typing.Any]], is_attribute=False, is_subscriptable=True) -label: QbStrField('label', dtype=typing.Optional[str], is_attribute=False) -mtime: QbNumericField('mtime', dtype=typing.Optional[datetime.datetime], is_attribute=False) -node_type: QbStrField('node_type', dtype=typing.Optional[str], is_attribute=False) -pk: QbNumericField('pk', dtype=typing.Optional[int], is_attribute=False) -process_type: QbStrField('process_type', dtype=typing.Optional[str], is_attribute=False) -repository_content: QbDictField('repository_content', dtype=typing.Optional[dict[str, - bytes]], is_attribute=False) +label: QbStrField('label', dtype=str | None, is_attribute=False) +mtime: QbNumericField('mtime', dtype=datetime.datetime | None, is_attribute=False) +node_type: QbStrField('node_type', dtype=str | None, is_attribute=False) +pk: QbNumericField('pk', dtype=int | None, is_attribute=False) +process_type: QbStrField('process_type', dtype=str | None, is_attribute=False) +repository_content: QbDictField('repository_content', dtype=dict[str, bytes] | None, + is_attribute=False) repository_metadata: QbDictField('repository_metadata', dtype=typing.Optional[typing.Dict[str, typing.Any]], is_attribute=False) -source: QbDictField('source', dtype=typing.Optional[dict], is_attribute=True, is_subscriptable=True) -user: QbNumericField('user', dtype=typing.Optional[int], is_attribute=False) -uuid: QbStrField('uuid', dtype=typing.Optional[str], is_attribute=False) +source: QbDictField('source', dtype=dict | None, is_attribute=True, is_subscriptable=True) +user: QbNumericField('user', dtype=int | None, is_attribute=False) +uuid: QbStrField('uuid', dtype=str | None, is_attribute=False) value: QbField('value', dtype=typing.Any, is_attribute=True) diff --git a/tests/orm/test_fields/fields_aiida.data.core.structure.StructureData.yml b/tests/orm/test_fields/fields_aiida.data.core.structure.StructureData.yml index 8e94962d01..05b5e4fd75 100644 --- a/tests/orm/test_fields/fields_aiida.data.core.structure.StructureData.yml +++ b/tests/orm/test_fields/fields_aiida.data.core.structure.StructureData.yml @@ -1,25 +1,25 @@ attributes: QbDictField('attributes', dtype=typing.Optional[typing.Dict[str, typing.Any]], is_attribute=False, is_subscriptable=True) cell: QbArrayField('cell', dtype=typing.List[typing.List[float]], is_attribute=True) -computer: QbNumericField('computer', dtype=typing.Optional[int], is_attribute=False) -ctime: QbNumericField('ctime', dtype=typing.Optional[datetime.datetime], is_attribute=False) -description: QbStrField('description', dtype=typing.Optional[str], is_attribute=False) +computer: QbNumericField('computer', dtype=int | None, is_attribute=False) +ctime: QbNumericField('ctime', dtype=datetime.datetime | None, is_attribute=False) +description: QbStrField('description', dtype=str | None, is_attribute=False) extras: QbDictField('extras', dtype=typing.Optional[typing.Dict[str, typing.Any]], is_attribute=False, is_subscriptable=True) kinds: QbArrayField('kinds', dtype=typing.Optional[typing.List[dict]], is_attribute=True) -label: QbStrField('label', dtype=typing.Optional[str], is_attribute=False) -mtime: QbNumericField('mtime', dtype=typing.Optional[datetime.datetime], is_attribute=False) -node_type: QbStrField('node_type', dtype=typing.Optional[str], is_attribute=False) +label: QbStrField('label', dtype=str | None, is_attribute=False) +mtime: QbNumericField('mtime', dtype=datetime.datetime | None, is_attribute=False) +node_type: QbStrField('node_type', dtype=str | None, is_attribute=False) pbc1: QbField('pbc1', dtype=, is_attribute=True) pbc2: QbField('pbc2', dtype=, is_attribute=True) pbc3: QbField('pbc3', dtype=, is_attribute=True) -pk: QbNumericField('pk', dtype=typing.Optional[int], is_attribute=False) -process_type: QbStrField('process_type', dtype=typing.Optional[str], is_attribute=False) -repository_content: QbDictField('repository_content', dtype=typing.Optional[dict[str, - bytes]], is_attribute=False) +pk: QbNumericField('pk', dtype=int | None, is_attribute=False) +process_type: QbStrField('process_type', dtype=str | None, is_attribute=False) +repository_content: QbDictField('repository_content', dtype=dict[str, bytes] | None, + is_attribute=False) repository_metadata: QbDictField('repository_metadata', dtype=typing.Optional[typing.Dict[str, typing.Any]], is_attribute=False) sites: QbArrayField('sites', dtype=typing.Optional[typing.List[dict]], is_attribute=True) -source: QbDictField('source', dtype=typing.Optional[dict], is_attribute=True, is_subscriptable=True) -user: QbNumericField('user', dtype=typing.Optional[int], is_attribute=False) -uuid: QbStrField('uuid', dtype=typing.Optional[str], is_attribute=False) +source: QbDictField('source', dtype=dict | None, is_attribute=True, is_subscriptable=True) +user: QbNumericField('user', dtype=int | None, is_attribute=False) +uuid: QbStrField('uuid', dtype=str | None, is_attribute=False) diff --git a/tests/orm/test_fields/fields_aiida.data.core.upf.UpfData.yml b/tests/orm/test_fields/fields_aiida.data.core.upf.UpfData.yml index 71f35c46f7..1517beeb3d 100644 --- a/tests/orm/test_fields/fields_aiida.data.core.upf.UpfData.yml +++ b/tests/orm/test_fields/fields_aiida.data.core.upf.UpfData.yml @@ -1,21 +1,21 @@ attributes: QbDictField('attributes', dtype=typing.Optional[typing.Dict[str, typing.Any]], is_attribute=False, is_subscriptable=True) -computer: QbNumericField('computer', dtype=typing.Optional[int], is_attribute=False) +computer: QbNumericField('computer', dtype=int | None, is_attribute=False) content: QbField('content', dtype=, is_attribute=True) -ctime: QbNumericField('ctime', dtype=typing.Optional[datetime.datetime], is_attribute=False) -description: QbStrField('description', dtype=typing.Optional[str], is_attribute=False) +ctime: QbNumericField('ctime', dtype=datetime.datetime | None, is_attribute=False) +description: QbStrField('description', dtype=str | None, is_attribute=False) extras: QbDictField('extras', dtype=typing.Optional[typing.Dict[str, typing.Any]], is_attribute=False, is_subscriptable=True) -filename: QbStrField('filename', dtype=typing.Optional[str], is_attribute=True) -label: QbStrField('label', dtype=typing.Optional[str], is_attribute=False) -mtime: QbNumericField('mtime', dtype=typing.Optional[datetime.datetime], is_attribute=False) -node_type: QbStrField('node_type', dtype=typing.Optional[str], is_attribute=False) -pk: QbNumericField('pk', dtype=typing.Optional[int], is_attribute=False) -process_type: QbStrField('process_type', dtype=typing.Optional[str], is_attribute=False) -repository_content: QbDictField('repository_content', dtype=typing.Optional[dict[str, - bytes]], is_attribute=False) +filename: QbStrField('filename', dtype=str | None, is_attribute=True) +label: QbStrField('label', dtype=str | None, is_attribute=False) +mtime: QbNumericField('mtime', dtype=datetime.datetime | None, is_attribute=False) +node_type: QbStrField('node_type', dtype=str | None, is_attribute=False) +pk: QbNumericField('pk', dtype=int | None, is_attribute=False) +process_type: QbStrField('process_type', dtype=str | None, is_attribute=False) +repository_content: QbDictField('repository_content', dtype=dict[str, bytes] | None, + is_attribute=False) repository_metadata: QbDictField('repository_metadata', dtype=typing.Optional[typing.Dict[str, typing.Any]], is_attribute=False) -source: QbDictField('source', dtype=typing.Optional[dict], is_attribute=True, is_subscriptable=True) -user: QbNumericField('user', dtype=typing.Optional[int], is_attribute=False) -uuid: QbStrField('uuid', dtype=typing.Optional[str], is_attribute=False) +source: QbDictField('source', dtype=dict | None, is_attribute=True, is_subscriptable=True) +user: QbNumericField('user', dtype=int | None, is_attribute=False) +uuid: QbStrField('uuid', dtype=str | None, is_attribute=False) diff --git a/tests/orm/test_fields/fields_aiida.node.data.Data.yml b/tests/orm/test_fields/fields_aiida.node.data.Data.yml index 5bee2ef441..2c565b3b54 100644 --- a/tests/orm/test_fields/fields_aiida.node.data.Data.yml +++ b/tests/orm/test_fields/fields_aiida.node.data.Data.yml @@ -1,19 +1,19 @@ -attributes: QbDictField('attributes', dtype=typing.Optional[typing.Dict[str, typing.Any]], - is_attribute=False, is_subscriptable=True) -computer: QbNumericField('computer', dtype=typing.Optional[int], is_attribute=False) -ctime: QbNumericField('ctime', dtype=typing.Optional[datetime.datetime], is_attribute=False) -description: QbStrField('description', dtype=typing.Optional[str], is_attribute=False) -extras: QbDictField('extras', dtype=typing.Optional[typing.Dict[str, typing.Any]], - is_attribute=False, is_subscriptable=True) -label: QbStrField('label', dtype=typing.Optional[str], is_attribute=False) -mtime: QbNumericField('mtime', dtype=typing.Optional[datetime.datetime], is_attribute=False) -node_type: QbStrField('node_type', dtype=typing.Optional[str], is_attribute=False) -pk: QbNumericField('pk', dtype=typing.Optional[int], is_attribute=False) -process_type: QbStrField('process_type', dtype=typing.Optional[str], is_attribute=False) -repository_content: QbDictField('repository_content', dtype=typing.Optional[dict[str, - bytes]], is_attribute=False) -repository_metadata: QbDictField('repository_metadata', dtype=typing.Optional[typing.Dict[str, - typing.Any]], is_attribute=False) -source: QbDictField('source', dtype=typing.Optional[dict], is_attribute=True, is_subscriptable=True) -user: QbNumericField('user', dtype=typing.Optional[int], is_attribute=False) -uuid: QbStrField('uuid', dtype=typing.Optional[str], is_attribute=False) +attributes: QbDictField('attributes', dtype=typing.Dict[str, typing.Any] | None, is_attribute=False, + is_subscriptable=True) +computer: QbNumericField('computer', dtype=int | None, is_attribute=False) +ctime: QbNumericField('ctime', dtype=datetime.datetime | None, is_attribute=False) +description: QbStrField('description', dtype=str | None, is_attribute=False) +extras: QbDictField('extras', dtype=typing.Dict[str, typing.Any] | None, is_attribute=False, + is_subscriptable=True) +label: QbStrField('label', dtype=str | None, is_attribute=False) +mtime: QbNumericField('mtime', dtype=datetime.datetime | None, is_attribute=False) +node_type: QbStrField('node_type', dtype=str | None, is_attribute=False) +pk: QbNumericField('pk', dtype=int | None, is_attribute=False) +process_type: QbStrField('process_type', dtype=str | None, is_attribute=False) +repository_content: QbDictField('repository_content', dtype=dict[str, bytes] | None, + is_attribute=False) +repository_metadata: QbDictField('repository_metadata', dtype=typing.Dict[str, typing.Any] + | None, is_attribute=False) +source: QbDictField('source', dtype=dict | None, is_attribute=True, is_subscriptable=True) +user: QbNumericField('user', dtype=int | None, is_attribute=False) +uuid: QbStrField('uuid', dtype=str | None, is_attribute=False) diff --git a/tests/orm/test_fields/fields_aiida.node.process.ProcessNode.yml b/tests/orm/test_fields/fields_aiida.node.process.ProcessNode.yml index d8928ee1a4..5a9a90c37d 100644 --- a/tests/orm/test_fields/fields_aiida.node.process.ProcessNode.yml +++ b/tests/orm/test_fields/fields_aiida.node.process.ProcessNode.yml @@ -1,26 +1,26 @@ -attributes: QbDictField('attributes', dtype=typing.Optional[typing.Dict[str, typing.Any]], - is_attribute=False, is_subscriptable=True) -computer: QbNumericField('computer', dtype=typing.Optional[int], is_attribute=False) -ctime: QbNumericField('ctime', dtype=typing.Optional[datetime.datetime], is_attribute=False) -description: QbStrField('description', dtype=typing.Optional[str], is_attribute=False) -exception: QbStrField('exception', dtype=typing.Optional[str], is_attribute=True) -exit_message: QbStrField('exit_message', dtype=typing.Optional[str], is_attribute=True) -exit_status: QbNumericField('exit_status', dtype=typing.Optional[int], is_attribute=True) -extras: QbDictField('extras', dtype=typing.Optional[typing.Dict[str, typing.Any]], - is_attribute=False, is_subscriptable=True) -label: QbStrField('label', dtype=typing.Optional[str], is_attribute=False) -mtime: QbNumericField('mtime', dtype=typing.Optional[datetime.datetime], is_attribute=False) -node_type: QbStrField('node_type', dtype=typing.Optional[str], is_attribute=False) +attributes: QbDictField('attributes', dtype=typing.Dict[str, typing.Any] | None, is_attribute=False, + is_subscriptable=True) +computer: QbNumericField('computer', dtype=int | None, is_attribute=False) +ctime: QbNumericField('ctime', dtype=datetime.datetime | None, is_attribute=False) +description: QbStrField('description', dtype=str | None, is_attribute=False) +exception: QbStrField('exception', dtype=str | None, is_attribute=True) +exit_message: QbStrField('exit_message', dtype=str | None, is_attribute=True) +exit_status: QbNumericField('exit_status', dtype=int | None, is_attribute=True) +extras: QbDictField('extras', dtype=typing.Dict[str, typing.Any] | None, is_attribute=False, + is_subscriptable=True) +label: QbStrField('label', dtype=str | None, is_attribute=False) +mtime: QbNumericField('mtime', dtype=datetime.datetime | None, is_attribute=False) +node_type: QbStrField('node_type', dtype=str | None, is_attribute=False) paused: QbField('paused', dtype=, is_attribute=True) -pk: QbNumericField('pk', dtype=typing.Optional[int], is_attribute=False) -process_label: QbStrField('process_label', dtype=typing.Optional[str], is_attribute=True) -process_state: QbStrField('process_state', dtype=typing.Optional[str], is_attribute=True) -process_status: QbStrField('process_status', dtype=typing.Optional[str], is_attribute=True) -process_type: QbStrField('process_type', dtype=typing.Optional[str], is_attribute=False) -repository_content: QbDictField('repository_content', dtype=typing.Optional[dict[str, - bytes]], is_attribute=False) -repository_metadata: QbDictField('repository_metadata', dtype=typing.Optional[typing.Dict[str, - typing.Any]], is_attribute=False) +pk: QbNumericField('pk', dtype=int | None, is_attribute=False) +process_label: QbStrField('process_label', dtype=str | None, is_attribute=True) +process_state: QbStrField('process_state', dtype=str | None, is_attribute=True) +process_status: QbStrField('process_status', dtype=str | None, is_attribute=True) +process_type: QbStrField('process_type', dtype=str | None, is_attribute=False) +repository_content: QbDictField('repository_content', dtype=dict[str, bytes] | None, + is_attribute=False) +repository_metadata: QbDictField('repository_metadata', dtype=typing.Dict[str, typing.Any] + | None, is_attribute=False) sealed: QbField('sealed', dtype=, is_attribute=True) -user: QbNumericField('user', dtype=typing.Optional[int], is_attribute=False) -uuid: QbStrField('uuid', dtype=typing.Optional[str], is_attribute=False) +user: QbNumericField('user', dtype=int | None, is_attribute=False) +uuid: QbStrField('uuid', dtype=str | None, is_attribute=False) diff --git a/tests/orm/test_fields/fields_aiida.node.process.calculation.CalculationNode.yml b/tests/orm/test_fields/fields_aiida.node.process.calculation.CalculationNode.yml index d8928ee1a4..5a9a90c37d 100644 --- a/tests/orm/test_fields/fields_aiida.node.process.calculation.CalculationNode.yml +++ b/tests/orm/test_fields/fields_aiida.node.process.calculation.CalculationNode.yml @@ -1,26 +1,26 @@ -attributes: QbDictField('attributes', dtype=typing.Optional[typing.Dict[str, typing.Any]], - is_attribute=False, is_subscriptable=True) -computer: QbNumericField('computer', dtype=typing.Optional[int], is_attribute=False) -ctime: QbNumericField('ctime', dtype=typing.Optional[datetime.datetime], is_attribute=False) -description: QbStrField('description', dtype=typing.Optional[str], is_attribute=False) -exception: QbStrField('exception', dtype=typing.Optional[str], is_attribute=True) -exit_message: QbStrField('exit_message', dtype=typing.Optional[str], is_attribute=True) -exit_status: QbNumericField('exit_status', dtype=typing.Optional[int], is_attribute=True) -extras: QbDictField('extras', dtype=typing.Optional[typing.Dict[str, typing.Any]], - is_attribute=False, is_subscriptable=True) -label: QbStrField('label', dtype=typing.Optional[str], is_attribute=False) -mtime: QbNumericField('mtime', dtype=typing.Optional[datetime.datetime], is_attribute=False) -node_type: QbStrField('node_type', dtype=typing.Optional[str], is_attribute=False) +attributes: QbDictField('attributes', dtype=typing.Dict[str, typing.Any] | None, is_attribute=False, + is_subscriptable=True) +computer: QbNumericField('computer', dtype=int | None, is_attribute=False) +ctime: QbNumericField('ctime', dtype=datetime.datetime | None, is_attribute=False) +description: QbStrField('description', dtype=str | None, is_attribute=False) +exception: QbStrField('exception', dtype=str | None, is_attribute=True) +exit_message: QbStrField('exit_message', dtype=str | None, is_attribute=True) +exit_status: QbNumericField('exit_status', dtype=int | None, is_attribute=True) +extras: QbDictField('extras', dtype=typing.Dict[str, typing.Any] | None, is_attribute=False, + is_subscriptable=True) +label: QbStrField('label', dtype=str | None, is_attribute=False) +mtime: QbNumericField('mtime', dtype=datetime.datetime | None, is_attribute=False) +node_type: QbStrField('node_type', dtype=str | None, is_attribute=False) paused: QbField('paused', dtype=, is_attribute=True) -pk: QbNumericField('pk', dtype=typing.Optional[int], is_attribute=False) -process_label: QbStrField('process_label', dtype=typing.Optional[str], is_attribute=True) -process_state: QbStrField('process_state', dtype=typing.Optional[str], is_attribute=True) -process_status: QbStrField('process_status', dtype=typing.Optional[str], is_attribute=True) -process_type: QbStrField('process_type', dtype=typing.Optional[str], is_attribute=False) -repository_content: QbDictField('repository_content', dtype=typing.Optional[dict[str, - bytes]], is_attribute=False) -repository_metadata: QbDictField('repository_metadata', dtype=typing.Optional[typing.Dict[str, - typing.Any]], is_attribute=False) +pk: QbNumericField('pk', dtype=int | None, is_attribute=False) +process_label: QbStrField('process_label', dtype=str | None, is_attribute=True) +process_state: QbStrField('process_state', dtype=str | None, is_attribute=True) +process_status: QbStrField('process_status', dtype=str | None, is_attribute=True) +process_type: QbStrField('process_type', dtype=str | None, is_attribute=False) +repository_content: QbDictField('repository_content', dtype=dict[str, bytes] | None, + is_attribute=False) +repository_metadata: QbDictField('repository_metadata', dtype=typing.Dict[str, typing.Any] + | None, is_attribute=False) sealed: QbField('sealed', dtype=, is_attribute=True) -user: QbNumericField('user', dtype=typing.Optional[int], is_attribute=False) -uuid: QbStrField('uuid', dtype=typing.Optional[str], is_attribute=False) +user: QbNumericField('user', dtype=int | None, is_attribute=False) +uuid: QbStrField('uuid', dtype=str | None, is_attribute=False) diff --git a/tests/orm/test_fields/fields_aiida.node.process.calculation.calcfunction.CalcFunctionNode.yml b/tests/orm/test_fields/fields_aiida.node.process.calculation.calcfunction.CalcFunctionNode.yml index d8928ee1a4..5a9a90c37d 100644 --- a/tests/orm/test_fields/fields_aiida.node.process.calculation.calcfunction.CalcFunctionNode.yml +++ b/tests/orm/test_fields/fields_aiida.node.process.calculation.calcfunction.CalcFunctionNode.yml @@ -1,26 +1,26 @@ -attributes: QbDictField('attributes', dtype=typing.Optional[typing.Dict[str, typing.Any]], - is_attribute=False, is_subscriptable=True) -computer: QbNumericField('computer', dtype=typing.Optional[int], is_attribute=False) -ctime: QbNumericField('ctime', dtype=typing.Optional[datetime.datetime], is_attribute=False) -description: QbStrField('description', dtype=typing.Optional[str], is_attribute=False) -exception: QbStrField('exception', dtype=typing.Optional[str], is_attribute=True) -exit_message: QbStrField('exit_message', dtype=typing.Optional[str], is_attribute=True) -exit_status: QbNumericField('exit_status', dtype=typing.Optional[int], is_attribute=True) -extras: QbDictField('extras', dtype=typing.Optional[typing.Dict[str, typing.Any]], - is_attribute=False, is_subscriptable=True) -label: QbStrField('label', dtype=typing.Optional[str], is_attribute=False) -mtime: QbNumericField('mtime', dtype=typing.Optional[datetime.datetime], is_attribute=False) -node_type: QbStrField('node_type', dtype=typing.Optional[str], is_attribute=False) +attributes: QbDictField('attributes', dtype=typing.Dict[str, typing.Any] | None, is_attribute=False, + is_subscriptable=True) +computer: QbNumericField('computer', dtype=int | None, is_attribute=False) +ctime: QbNumericField('ctime', dtype=datetime.datetime | None, is_attribute=False) +description: QbStrField('description', dtype=str | None, is_attribute=False) +exception: QbStrField('exception', dtype=str | None, is_attribute=True) +exit_message: QbStrField('exit_message', dtype=str | None, is_attribute=True) +exit_status: QbNumericField('exit_status', dtype=int | None, is_attribute=True) +extras: QbDictField('extras', dtype=typing.Dict[str, typing.Any] | None, is_attribute=False, + is_subscriptable=True) +label: QbStrField('label', dtype=str | None, is_attribute=False) +mtime: QbNumericField('mtime', dtype=datetime.datetime | None, is_attribute=False) +node_type: QbStrField('node_type', dtype=str | None, is_attribute=False) paused: QbField('paused', dtype=, is_attribute=True) -pk: QbNumericField('pk', dtype=typing.Optional[int], is_attribute=False) -process_label: QbStrField('process_label', dtype=typing.Optional[str], is_attribute=True) -process_state: QbStrField('process_state', dtype=typing.Optional[str], is_attribute=True) -process_status: QbStrField('process_status', dtype=typing.Optional[str], is_attribute=True) -process_type: QbStrField('process_type', dtype=typing.Optional[str], is_attribute=False) -repository_content: QbDictField('repository_content', dtype=typing.Optional[dict[str, - bytes]], is_attribute=False) -repository_metadata: QbDictField('repository_metadata', dtype=typing.Optional[typing.Dict[str, - typing.Any]], is_attribute=False) +pk: QbNumericField('pk', dtype=int | None, is_attribute=False) +process_label: QbStrField('process_label', dtype=str | None, is_attribute=True) +process_state: QbStrField('process_state', dtype=str | None, is_attribute=True) +process_status: QbStrField('process_status', dtype=str | None, is_attribute=True) +process_type: QbStrField('process_type', dtype=str | None, is_attribute=False) +repository_content: QbDictField('repository_content', dtype=dict[str, bytes] | None, + is_attribute=False) +repository_metadata: QbDictField('repository_metadata', dtype=typing.Dict[str, typing.Any] + | None, is_attribute=False) sealed: QbField('sealed', dtype=, is_attribute=True) -user: QbNumericField('user', dtype=typing.Optional[int], is_attribute=False) -uuid: QbStrField('uuid', dtype=typing.Optional[str], is_attribute=False) +user: QbNumericField('user', dtype=int | None, is_attribute=False) +uuid: QbStrField('uuid', dtype=str | None, is_attribute=False) diff --git a/tests/orm/test_fields/fields_aiida.node.process.calculation.calcjob.CalcJobNode.yml b/tests/orm/test_fields/fields_aiida.node.process.calculation.calcjob.CalcJobNode.yml index 8da4b34cb8..4555a427af 100644 --- a/tests/orm/test_fields/fields_aiida.node.process.calculation.calcjob.CalcJobNode.yml +++ b/tests/orm/test_fields/fields_aiida.node.process.calculation.calcjob.CalcJobNode.yml @@ -1,39 +1,37 @@ -attributes: QbDictField('attributes', dtype=typing.Optional[typing.Dict[str, typing.Any]], - is_attribute=False, is_subscriptable=True) -computer: QbNumericField('computer', dtype=typing.Optional[int], is_attribute=False) -ctime: QbNumericField('ctime', dtype=typing.Optional[datetime.datetime], is_attribute=False) -description: QbStrField('description', dtype=typing.Optional[str], is_attribute=False) -detailed_job_info: QbDictField('detailed_job_info', dtype=typing.Optional[dict], is_attribute=True) -exception: QbStrField('exception', dtype=typing.Optional[str], is_attribute=True) -exit_message: QbStrField('exit_message', dtype=typing.Optional[str], is_attribute=True) -exit_status: QbNumericField('exit_status', dtype=typing.Optional[int], is_attribute=True) -extras: QbDictField('extras', dtype=typing.Optional[typing.Dict[str, typing.Any]], - is_attribute=False, is_subscriptable=True) -imported: QbField('imported', dtype=typing.Optional[bool], is_attribute=True) -job_id: QbStrField('job_id', dtype=typing.Optional[str], is_attribute=True) -label: QbStrField('label', dtype=typing.Optional[str], is_attribute=False) -last_job_info: QbStrField('last_job_info', dtype=typing.Optional[str], is_attribute=True) -mtime: QbNumericField('mtime', dtype=typing.Optional[datetime.datetime], is_attribute=False) -node_type: QbStrField('node_type', dtype=typing.Optional[str], is_attribute=False) +attributes: QbDictField('attributes', dtype=typing.Dict[str, typing.Any] | None, is_attribute=False, + is_subscriptable=True) +computer: QbNumericField('computer', dtype=int | None, is_attribute=False) +ctime: QbNumericField('ctime', dtype=datetime.datetime | None, is_attribute=False) +description: QbStrField('description', dtype=str | None, is_attribute=False) +detailed_job_info: QbDictField('detailed_job_info', dtype=dict | None, is_attribute=True) +exception: QbStrField('exception', dtype=str | None, is_attribute=True) +exit_message: QbStrField('exit_message', dtype=str | None, is_attribute=True) +exit_status: QbNumericField('exit_status', dtype=int | None, is_attribute=True) +extras: QbDictField('extras', dtype=typing.Dict[str, typing.Any] | None, is_attribute=False, + is_subscriptable=True) +imported: QbField('imported', dtype=bool | None, is_attribute=True) +job_id: QbStrField('job_id', dtype=str | None, is_attribute=True) +label: QbStrField('label', dtype=str | None, is_attribute=False) +last_job_info: QbStrField('last_job_info', dtype=str | None, is_attribute=True) +mtime: QbNumericField('mtime', dtype=datetime.datetime | None, is_attribute=False) +node_type: QbStrField('node_type', dtype=str | None, is_attribute=False) paused: QbField('paused', dtype=, is_attribute=True) -pk: QbNumericField('pk', dtype=typing.Optional[int], is_attribute=False) -process_label: QbStrField('process_label', dtype=typing.Optional[str], is_attribute=True) -process_state: QbStrField('process_state', dtype=typing.Optional[str], is_attribute=True) -process_status: QbStrField('process_status', dtype=typing.Optional[str], is_attribute=True) -process_type: QbStrField('process_type', dtype=typing.Optional[str], is_attribute=False) -remote_workdir: QbStrField('remote_workdir', dtype=typing.Optional[str], is_attribute=True) -repository_content: QbDictField('repository_content', dtype=typing.Optional[dict[str, - bytes]], is_attribute=False) -repository_metadata: QbDictField('repository_metadata', dtype=typing.Optional[typing.Dict[str, - typing.Any]], is_attribute=False) -retrieve_list: QbArrayField('retrieve_list', dtype=typing.Optional[typing.List[str]], - is_attribute=True) -retrieve_temporary_list: QbArrayField('retrieve_temporary_list', dtype=typing.Optional[typing.List[str]], - is_attribute=True) -scheduler_lastchecktime: QbStrField('scheduler_lastchecktime', dtype=typing.Optional[str], - is_attribute=True) -scheduler_state: QbStrField('scheduler_state', dtype=typing.Optional[str], is_attribute=True) +pk: QbNumericField('pk', dtype=int | None, is_attribute=False) +process_label: QbStrField('process_label', dtype=str | None, is_attribute=True) +process_state: QbStrField('process_state', dtype=str | None, is_attribute=True) +process_status: QbStrField('process_status', dtype=str | None, is_attribute=True) +process_type: QbStrField('process_type', dtype=str | None, is_attribute=False) +remote_workdir: QbStrField('remote_workdir', dtype=str | None, is_attribute=True) +repository_content: QbDictField('repository_content', dtype=dict[str, bytes] | None, + is_attribute=False) +repository_metadata: QbDictField('repository_metadata', dtype=typing.Dict[str, typing.Any] + | None, is_attribute=False) +retrieve_list: QbArrayField('retrieve_list', dtype=typing.List[str] | None, is_attribute=True) +retrieve_temporary_list: QbArrayField('retrieve_temporary_list', dtype=typing.List[str] + | None, is_attribute=True) +scheduler_lastchecktime: QbStrField('scheduler_lastchecktime', dtype=str | None, is_attribute=True) +scheduler_state: QbStrField('scheduler_state', dtype=str | None, is_attribute=True) sealed: QbField('sealed', dtype=, is_attribute=True) -state: QbStrField('state', dtype=typing.Optional[str], is_attribute=True) -user: QbNumericField('user', dtype=typing.Optional[int], is_attribute=False) -uuid: QbStrField('uuid', dtype=typing.Optional[str], is_attribute=False) +state: QbStrField('state', dtype=str | None, is_attribute=True) +user: QbNumericField('user', dtype=int | None, is_attribute=False) +uuid: QbStrField('uuid', dtype=str | None, is_attribute=False) diff --git a/tests/orm/test_fields/fields_aiida.node.process.workflow.WorkflowNode.yml b/tests/orm/test_fields/fields_aiida.node.process.workflow.WorkflowNode.yml index d8928ee1a4..5a9a90c37d 100644 --- a/tests/orm/test_fields/fields_aiida.node.process.workflow.WorkflowNode.yml +++ b/tests/orm/test_fields/fields_aiida.node.process.workflow.WorkflowNode.yml @@ -1,26 +1,26 @@ -attributes: QbDictField('attributes', dtype=typing.Optional[typing.Dict[str, typing.Any]], - is_attribute=False, is_subscriptable=True) -computer: QbNumericField('computer', dtype=typing.Optional[int], is_attribute=False) -ctime: QbNumericField('ctime', dtype=typing.Optional[datetime.datetime], is_attribute=False) -description: QbStrField('description', dtype=typing.Optional[str], is_attribute=False) -exception: QbStrField('exception', dtype=typing.Optional[str], is_attribute=True) -exit_message: QbStrField('exit_message', dtype=typing.Optional[str], is_attribute=True) -exit_status: QbNumericField('exit_status', dtype=typing.Optional[int], is_attribute=True) -extras: QbDictField('extras', dtype=typing.Optional[typing.Dict[str, typing.Any]], - is_attribute=False, is_subscriptable=True) -label: QbStrField('label', dtype=typing.Optional[str], is_attribute=False) -mtime: QbNumericField('mtime', dtype=typing.Optional[datetime.datetime], is_attribute=False) -node_type: QbStrField('node_type', dtype=typing.Optional[str], is_attribute=False) +attributes: QbDictField('attributes', dtype=typing.Dict[str, typing.Any] | None, is_attribute=False, + is_subscriptable=True) +computer: QbNumericField('computer', dtype=int | None, is_attribute=False) +ctime: QbNumericField('ctime', dtype=datetime.datetime | None, is_attribute=False) +description: QbStrField('description', dtype=str | None, is_attribute=False) +exception: QbStrField('exception', dtype=str | None, is_attribute=True) +exit_message: QbStrField('exit_message', dtype=str | None, is_attribute=True) +exit_status: QbNumericField('exit_status', dtype=int | None, is_attribute=True) +extras: QbDictField('extras', dtype=typing.Dict[str, typing.Any] | None, is_attribute=False, + is_subscriptable=True) +label: QbStrField('label', dtype=str | None, is_attribute=False) +mtime: QbNumericField('mtime', dtype=datetime.datetime | None, is_attribute=False) +node_type: QbStrField('node_type', dtype=str | None, is_attribute=False) paused: QbField('paused', dtype=, is_attribute=True) -pk: QbNumericField('pk', dtype=typing.Optional[int], is_attribute=False) -process_label: QbStrField('process_label', dtype=typing.Optional[str], is_attribute=True) -process_state: QbStrField('process_state', dtype=typing.Optional[str], is_attribute=True) -process_status: QbStrField('process_status', dtype=typing.Optional[str], is_attribute=True) -process_type: QbStrField('process_type', dtype=typing.Optional[str], is_attribute=False) -repository_content: QbDictField('repository_content', dtype=typing.Optional[dict[str, - bytes]], is_attribute=False) -repository_metadata: QbDictField('repository_metadata', dtype=typing.Optional[typing.Dict[str, - typing.Any]], is_attribute=False) +pk: QbNumericField('pk', dtype=int | None, is_attribute=False) +process_label: QbStrField('process_label', dtype=str | None, is_attribute=True) +process_state: QbStrField('process_state', dtype=str | None, is_attribute=True) +process_status: QbStrField('process_status', dtype=str | None, is_attribute=True) +process_type: QbStrField('process_type', dtype=str | None, is_attribute=False) +repository_content: QbDictField('repository_content', dtype=dict[str, bytes] | None, + is_attribute=False) +repository_metadata: QbDictField('repository_metadata', dtype=typing.Dict[str, typing.Any] + | None, is_attribute=False) sealed: QbField('sealed', dtype=, is_attribute=True) -user: QbNumericField('user', dtype=typing.Optional[int], is_attribute=False) -uuid: QbStrField('uuid', dtype=typing.Optional[str], is_attribute=False) +user: QbNumericField('user', dtype=int | None, is_attribute=False) +uuid: QbStrField('uuid', dtype=str | None, is_attribute=False) diff --git a/tests/orm/test_fields/fields_aiida.node.process.workflow.workchain.WorkChainNode.yml b/tests/orm/test_fields/fields_aiida.node.process.workflow.workchain.WorkChainNode.yml index d8928ee1a4..5a9a90c37d 100644 --- a/tests/orm/test_fields/fields_aiida.node.process.workflow.workchain.WorkChainNode.yml +++ b/tests/orm/test_fields/fields_aiida.node.process.workflow.workchain.WorkChainNode.yml @@ -1,26 +1,26 @@ -attributes: QbDictField('attributes', dtype=typing.Optional[typing.Dict[str, typing.Any]], - is_attribute=False, is_subscriptable=True) -computer: QbNumericField('computer', dtype=typing.Optional[int], is_attribute=False) -ctime: QbNumericField('ctime', dtype=typing.Optional[datetime.datetime], is_attribute=False) -description: QbStrField('description', dtype=typing.Optional[str], is_attribute=False) -exception: QbStrField('exception', dtype=typing.Optional[str], is_attribute=True) -exit_message: QbStrField('exit_message', dtype=typing.Optional[str], is_attribute=True) -exit_status: QbNumericField('exit_status', dtype=typing.Optional[int], is_attribute=True) -extras: QbDictField('extras', dtype=typing.Optional[typing.Dict[str, typing.Any]], - is_attribute=False, is_subscriptable=True) -label: QbStrField('label', dtype=typing.Optional[str], is_attribute=False) -mtime: QbNumericField('mtime', dtype=typing.Optional[datetime.datetime], is_attribute=False) -node_type: QbStrField('node_type', dtype=typing.Optional[str], is_attribute=False) +attributes: QbDictField('attributes', dtype=typing.Dict[str, typing.Any] | None, is_attribute=False, + is_subscriptable=True) +computer: QbNumericField('computer', dtype=int | None, is_attribute=False) +ctime: QbNumericField('ctime', dtype=datetime.datetime | None, is_attribute=False) +description: QbStrField('description', dtype=str | None, is_attribute=False) +exception: QbStrField('exception', dtype=str | None, is_attribute=True) +exit_message: QbStrField('exit_message', dtype=str | None, is_attribute=True) +exit_status: QbNumericField('exit_status', dtype=int | None, is_attribute=True) +extras: QbDictField('extras', dtype=typing.Dict[str, typing.Any] | None, is_attribute=False, + is_subscriptable=True) +label: QbStrField('label', dtype=str | None, is_attribute=False) +mtime: QbNumericField('mtime', dtype=datetime.datetime | None, is_attribute=False) +node_type: QbStrField('node_type', dtype=str | None, is_attribute=False) paused: QbField('paused', dtype=, is_attribute=True) -pk: QbNumericField('pk', dtype=typing.Optional[int], is_attribute=False) -process_label: QbStrField('process_label', dtype=typing.Optional[str], is_attribute=True) -process_state: QbStrField('process_state', dtype=typing.Optional[str], is_attribute=True) -process_status: QbStrField('process_status', dtype=typing.Optional[str], is_attribute=True) -process_type: QbStrField('process_type', dtype=typing.Optional[str], is_attribute=False) -repository_content: QbDictField('repository_content', dtype=typing.Optional[dict[str, - bytes]], is_attribute=False) -repository_metadata: QbDictField('repository_metadata', dtype=typing.Optional[typing.Dict[str, - typing.Any]], is_attribute=False) +pk: QbNumericField('pk', dtype=int | None, is_attribute=False) +process_label: QbStrField('process_label', dtype=str | None, is_attribute=True) +process_state: QbStrField('process_state', dtype=str | None, is_attribute=True) +process_status: QbStrField('process_status', dtype=str | None, is_attribute=True) +process_type: QbStrField('process_type', dtype=str | None, is_attribute=False) +repository_content: QbDictField('repository_content', dtype=dict[str, bytes] | None, + is_attribute=False) +repository_metadata: QbDictField('repository_metadata', dtype=typing.Dict[str, typing.Any] + | None, is_attribute=False) sealed: QbField('sealed', dtype=, is_attribute=True) -user: QbNumericField('user', dtype=typing.Optional[int], is_attribute=False) -uuid: QbStrField('uuid', dtype=typing.Optional[str], is_attribute=False) +user: QbNumericField('user', dtype=int | None, is_attribute=False) +uuid: QbStrField('uuid', dtype=str | None, is_attribute=False) diff --git a/tests/orm/test_fields/fields_aiida.node.process.workflow.workfunction.WorkFunctionNode.yml b/tests/orm/test_fields/fields_aiida.node.process.workflow.workfunction.WorkFunctionNode.yml index d8928ee1a4..5a9a90c37d 100644 --- a/tests/orm/test_fields/fields_aiida.node.process.workflow.workfunction.WorkFunctionNode.yml +++ b/tests/orm/test_fields/fields_aiida.node.process.workflow.workfunction.WorkFunctionNode.yml @@ -1,26 +1,26 @@ -attributes: QbDictField('attributes', dtype=typing.Optional[typing.Dict[str, typing.Any]], - is_attribute=False, is_subscriptable=True) -computer: QbNumericField('computer', dtype=typing.Optional[int], is_attribute=False) -ctime: QbNumericField('ctime', dtype=typing.Optional[datetime.datetime], is_attribute=False) -description: QbStrField('description', dtype=typing.Optional[str], is_attribute=False) -exception: QbStrField('exception', dtype=typing.Optional[str], is_attribute=True) -exit_message: QbStrField('exit_message', dtype=typing.Optional[str], is_attribute=True) -exit_status: QbNumericField('exit_status', dtype=typing.Optional[int], is_attribute=True) -extras: QbDictField('extras', dtype=typing.Optional[typing.Dict[str, typing.Any]], - is_attribute=False, is_subscriptable=True) -label: QbStrField('label', dtype=typing.Optional[str], is_attribute=False) -mtime: QbNumericField('mtime', dtype=typing.Optional[datetime.datetime], is_attribute=False) -node_type: QbStrField('node_type', dtype=typing.Optional[str], is_attribute=False) +attributes: QbDictField('attributes', dtype=typing.Dict[str, typing.Any] | None, is_attribute=False, + is_subscriptable=True) +computer: QbNumericField('computer', dtype=int | None, is_attribute=False) +ctime: QbNumericField('ctime', dtype=datetime.datetime | None, is_attribute=False) +description: QbStrField('description', dtype=str | None, is_attribute=False) +exception: QbStrField('exception', dtype=str | None, is_attribute=True) +exit_message: QbStrField('exit_message', dtype=str | None, is_attribute=True) +exit_status: QbNumericField('exit_status', dtype=int | None, is_attribute=True) +extras: QbDictField('extras', dtype=typing.Dict[str, typing.Any] | None, is_attribute=False, + is_subscriptable=True) +label: QbStrField('label', dtype=str | None, is_attribute=False) +mtime: QbNumericField('mtime', dtype=datetime.datetime | None, is_attribute=False) +node_type: QbStrField('node_type', dtype=str | None, is_attribute=False) paused: QbField('paused', dtype=, is_attribute=True) -pk: QbNumericField('pk', dtype=typing.Optional[int], is_attribute=False) -process_label: QbStrField('process_label', dtype=typing.Optional[str], is_attribute=True) -process_state: QbStrField('process_state', dtype=typing.Optional[str], is_attribute=True) -process_status: QbStrField('process_status', dtype=typing.Optional[str], is_attribute=True) -process_type: QbStrField('process_type', dtype=typing.Optional[str], is_attribute=False) -repository_content: QbDictField('repository_content', dtype=typing.Optional[dict[str, - bytes]], is_attribute=False) -repository_metadata: QbDictField('repository_metadata', dtype=typing.Optional[typing.Dict[str, - typing.Any]], is_attribute=False) +pk: QbNumericField('pk', dtype=int | None, is_attribute=False) +process_label: QbStrField('process_label', dtype=str | None, is_attribute=True) +process_state: QbStrField('process_state', dtype=str | None, is_attribute=True) +process_status: QbStrField('process_status', dtype=str | None, is_attribute=True) +process_type: QbStrField('process_type', dtype=str | None, is_attribute=False) +repository_content: QbDictField('repository_content', dtype=dict[str, bytes] | None, + is_attribute=False) +repository_metadata: QbDictField('repository_metadata', dtype=typing.Dict[str, typing.Any] + | None, is_attribute=False) sealed: QbField('sealed', dtype=, is_attribute=True) -user: QbNumericField('user', dtype=typing.Optional[int], is_attribute=False) -uuid: QbStrField('uuid', dtype=typing.Optional[str], is_attribute=False) +user: QbNumericField('user', dtype=int | None, is_attribute=False) +uuid: QbStrField('uuid', dtype=str | None, is_attribute=False) diff --git a/tests/repository/backend/test_abstract.py b/tests/repository/backend/test_abstract.py index 509fba6bdc..1ee8f7cd45 100644 --- a/tests/repository/backend/test_abstract.py +++ b/tests/repository/backend/test_abstract.py @@ -3,7 +3,7 @@ import contextlib import io import tempfile -from typing import BinaryIO, Iterable, List, Optional +from typing import BinaryIO, Iterable, List import pytest @@ -14,11 +14,11 @@ class RepositoryBackend(AbstractRepositoryBackend): """Concrete implementation of ``AbstractRepositoryBackend``.""" @property - def key_format(self) -> Optional[str]: + def key_format(self) -> str | None: return None @property - def uuid(self) -> Optional[str]: + def uuid(self) -> str | None: return None def initialise(self, **kwargs) -> None: diff --git a/tests/repository/conftest.py b/tests/repository/conftest.py index c8faa3d723..d2f7e8d0a5 100644 --- a/tests/repository/conftest.py +++ b/tests/repository/conftest.py @@ -11,7 +11,7 @@ def generate_directory(tmp_path: pathlib.Path) -> typing.Callable: """Construct a temporary directory with some arbitrary file hierarchy in it.""" - def _generate_directory(metadata: typing.Optional[dict] = None) -> pathlib.Path: + def _generate_directory(metadata: dict | None = None) -> pathlib.Path: """Construct the contents of the temporary directory based on the metadata mapping. :param: file object hierarchy to construct. Each key corresponds to either a directory or file to create. If the diff --git a/tests/repository/test_repository.py b/tests/repository/test_repository.py index ca10aa11a4..0f75cf256f 100644 --- a/tests/repository/test_repository.py +++ b/tests/repository/test_repository.py @@ -3,7 +3,6 @@ import contextlib import io import pathlib -import typing as t import pytest @@ -59,7 +58,7 @@ def repository_uninitialised(request, tmp_path_factory) -> Repository: @pytest.fixture(scope='function', params=[True, False]) -def tmp_path_parametrized(request, tmp_path_factory) -> t.Union[str, pathlib.Path]: +def tmp_path_parametrized(request, tmp_path_factory) -> str | pathlib.Path: """Indirect parametrized fixture that returns temporary path both as ``str`` and as ``pathlib.Path``. This is a useful fixture to automatically parametrize a test for a method that accepts both types. diff --git a/tests/restapi/conftest.py b/tests/restapi/conftest.py index 442814a808..171f611f05 100644 --- a/tests/restapi/conftest.py +++ b/tests/restapi/conftest.py @@ -8,8 +8,6 @@ ########################################################################### """pytest fixtures for use with the aiida.restapi tests""" -from typing import Optional - import pytest @@ -53,7 +51,7 @@ def _restapi_server(restapi=None): def server_url(): from aiida.restapi.common.config import API_CONFIG, CLI_DEFAULTS - def _server_url(hostname: Optional[str] = None, port: Optional[int] = None): + def _server_url(hostname: str | None = None, port: int | None = None): return f"http://{hostname or CLI_DEFAULTS['HOST_NAME']}:{port or CLI_DEFAULTS['PORT']}{API_CONFIG['PREFIX']}" return _server_url diff --git a/tests/restapi/test_routes.py b/tests/restapi/test_routes.py index 50f4d2f2c8..d1e78d9992 100644 --- a/tests/restapi/test_routes.py +++ b/tests/restapi/test_routes.py @@ -8,6 +8,8 @@ ########################################################################### """Unittests for REST API.""" +from __future__ import annotations + import io import json from datetime import date diff --git a/tests/schedulers/test_lsf.py b/tests/schedulers/test_lsf.py index 7ee6cf29bd..9a206c00b6 100644 --- a/tests/schedulers/test_lsf.py +++ b/tests/schedulers/test_lsf.py @@ -8,6 +8,8 @@ ########################################################################### """Tests for the `LsfScheduler` plugin.""" +from __future__ import annotations + import logging import uuid diff --git a/tests/schedulers/test_slurm.py b/tests/schedulers/test_slurm.py index 4da51c331c..7ec403f0e9 100644 --- a/tests/schedulers/test_slurm.py +++ b/tests/schedulers/test_slurm.py @@ -9,6 +9,8 @@ # ruff: noqa: E501 """Tests for the SLURM scheduler plugin.""" +from __future__ import annotations + import datetime import logging import unittest diff --git a/tests/storage/psql_dos/migrations/django_branch/test_0026_0027_traj_data.py b/tests/storage/psql_dos/migrations/django_branch/test_0026_0027_traj_data.py index dbe200d0be..5fa7c06cfc 100644 --- a/tests/storage/psql_dos/migrations/django_branch/test_0026_0027_traj_data.py +++ b/tests/storage/psql_dos/migrations/django_branch/test_0026_0027_traj_data.py @@ -8,6 +8,8 @@ ########################################################################### """Test `TrajectoryData` nodes migration, moving symbol lists from repository array to attributes.""" +from __future__ import annotations + import numpy import pytest diff --git a/tests/tools/dumping/integration_tests.py b/tests/tools/dumping/integration_tests.py index a64a8e258a..2f67ef946c 100644 --- a/tests/tools/dumping/integration_tests.py +++ b/tests/tools/dumping/integration_tests.py @@ -10,7 +10,7 @@ import logging import time -from typing import Any, Dict, List, Optional, Tuple +from typing import Any, Dict, List, Tuple import pytest @@ -244,8 +244,8 @@ def _assemble_nodes_by_type(node_trees: List[Dict]) -> Dict[str, List[Dict]]: def get_expected_profile_dump_tree( - groups_data: Optional[Dict[str, List[Dict]]] = None, - ungrouped_data: Optional[List[Dict]] = None, + groups_data: Dict[str, List[Dict]] | None = None, + ungrouped_data: List[Dict] | None = None, organize_by_groups: bool = True, ) -> Dict[str, List[Any]]: """ diff --git a/utils/autogenerate_all_imports.py b/utils/autogenerate_all_imports.py index e3290434e8..de351d0de0 100755 --- a/utils/autogenerate_all_imports.py +++ b/utils/autogenerate_all_imports.py @@ -153,6 +153,7 @@ def write_inits(folder_path: Path, all_dict: dict, skip_children: dict[str, list ) start_content = [] + future_imports = [] end_content = [] in_docstring = in_end_content = False in_start_content = True @@ -162,10 +163,11 @@ def write_inits(folder_path: Path, all_dict: dict, skip_children: dict[str, list if in_end_content: end_content.append(line) continue + # Capture __future__ imports separately (they must stay at the top) + if line.startswith('from __future__'): + future_imports.append(line) + continue # Only keep initial comments and docstring - # TODO: Support __future__ imports, for which we will also - # need to retain any empty lines since ruff formatter automatically - # injects empty line between a module docstring and __future__ import if not ( (line.startswith('#') and not line.startswith(f'# {AUTO_GENERATED}')) or line.startswith('"""') @@ -180,6 +182,9 @@ def write_inits(folder_path: Path, all_dict: dict, skip_children: dict[str, list in_docstring = False if in_start_content: start_content.append(line) + # Re-insert __future__ imports right after the header + if future_imports: + start_content.extend([''] + future_imports) new_content = start_content + auto_content + end_content diff --git a/utils/dependency_management.py b/utils/dependency_management.py index aa15a6e3db..20437b8033 100755 --- a/utils/dependency_management.py +++ b/utils/dependency_management.py @@ -131,7 +131,7 @@ def generate_environment_yml(): # python version cannot be overriden from outside environment.yml # (even if it is not specified at all in environment.yml) # https://github.com/conda/conda/issues/9506 - conda_requires = ['python~=3.9'] + conda_requires = ['python~=3.10'] for req in install_requirements: if req.name == 'python' or any(re.match(ignore, str(req)) for ignore in CONDA_IGNORE): continue diff --git a/uv.lock b/uv.lock index ff82b1d777..c13d6fb37b 100644 --- a/uv.lock +++ b/uv.lock @@ -1,6 +1,6 @@ version = 1 revision = 3 -requires-python = ">=3.9" +requires-python = ">=3.10" resolution-markers = [ "python_full_version >= '3.14' and sys_platform == 'win32'", "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32'", @@ -8,9 +8,8 @@ resolution-markers = [ "python_full_version >= '3.14' and sys_platform != 'win32'", "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'win32'", "python_full_version == '3.11.*' and sys_platform != 'win32'", - "python_full_version == '3.10.*' and sys_platform == 'win32'", - "python_full_version == '3.10.*' and sys_platform != 'win32'", - "python_full_version < '3.10'", + "python_full_version < '3.11' and sys_platform == 'win32'", + "python_full_version < '3.11' and sys_platform != 'win32'", ] [[package]] @@ -29,28 +28,23 @@ wheels = [ name = "aiida-core" source = { editable = "." } dependencies = [ - { name = "alembic", version = "1.16.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "alembic", version = "1.17.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "alembic" }, { name = "archive-path" }, { name = "asyncssh" }, { name = "chardet", marker = "sys_platform == 'win32'" }, { name = "circus" }, - { name = "click", version = "8.1.8", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "click", version = "8.2.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "click" }, { name = "click-spinner" }, { name = "disk-objectstore" }, { name = "docstring-parser" }, - { name = "get-annotations", marker = "python_full_version < '3.10'" }, { name = "graphviz" }, { name = "importlib-metadata" }, - { name = "ipython", version = "8.18.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "ipython", version = "8.37.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.10.*'" }, + { name = "ipython", version = "8.37.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, { name = "ipython", version = "9.7.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, { name = "jedi" }, { name = "jinja2" }, { name = "kiwipy", extra = ["rmq"] }, - { name = "numpy", version = "2.0.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.10.*'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, { name = "numpy", version = "2.3.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, { name = "paramiko" }, { name = "pgsu" }, @@ -72,11 +66,9 @@ dependencies = [ [package.optional-dependencies] atomic-tools = [ { name = "ase" }, - { name = "matplotlib", version = "3.9.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "matplotlib", version = "3.10.7", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "matplotlib" }, { name = "pycifrw" }, - { name = "pymatgen", version = "2024.8.9", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "pymatgen", version = "2025.10.7", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "pymatgen" }, { name = "pymysql" }, { name = "seekpath" }, { name = "spglib" }, @@ -107,16 +99,15 @@ pre-commit = [ { name = "flask" }, { name = "flask-cors" }, { name = "flask-restful" }, - { name = "matplotlib", version = "3.9.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "matplotlib", version = "3.10.7", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "ipykernel" }, + { name = "matplotlib" }, { name = "mypy" }, { name = "packaging" }, { name = "pg8000" }, { name = "pgtest" }, { name = "pre-commit" }, { name = "pycifrw" }, - { name = "pymatgen", version = "2024.8.9", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "pymatgen", version = "2025.10.7", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "pymatgen" }, { name = "pympler" }, { name = "pymysql" }, { name = "pyparsing" }, @@ -163,13 +154,14 @@ tests = [ { name = "flask" }, { name = "flask-cors" }, { name = "flask-restful" }, - { name = "matplotlib", version = "3.9.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "matplotlib", version = "3.10.7", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "ipykernel" }, + { name = "matplotlib" }, + { name = "nbclient" }, + { name = "nbformat" }, { name = "pg8000" }, { name = "pgtest" }, { name = "pycifrw" }, - { name = "pymatgen", version = "2024.8.9", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "pymatgen", version = "2025.10.7", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "pymatgen" }, { name = "pympler" }, { name = "pymysql" }, { name = "pyparsing" }, @@ -203,7 +195,7 @@ requires-dist = [ { name = "alembic", specifier = "~=1.8" }, { name = "archive-path", specifier = "~=0.4.2" }, { name = "ase", marker = "extra == 'atomic-tools'", specifier = "~=3.21" }, - { name = "asyncssh", specifier = "~=2.19.0" }, + { name = "asyncssh", specifier = "~=2.22.0" }, { name = "bpython", marker = "extra == 'bpython'", specifier = "~=0.20" }, { name = "chardet", marker = "sys_platform == 'win32'", specifier = "~=5.2.0" }, { name = "circus", specifier = "~=0.19.0" }, @@ -213,9 +205,8 @@ requires-dist = [ { name = "docstring-parser" }, { name = "docutils", marker = "extra == 'tests'", specifier = "~=0.20" }, { name = "flask", marker = "extra == 'rest'", specifier = "~=2.3.3" }, - { name = "flask-cors", marker = "extra == 'rest'", specifier = "~=3.0" }, + { name = "flask-cors", marker = "extra == 'rest'", specifier = "~=3.0,>=3.0.8" }, { name = "flask-restful", marker = "extra == 'rest'", specifier = "~=0.3.10" }, - { name = "get-annotations", marker = "python_full_version < '3.10'", specifier = "~=0.1" }, { name = "graphviz", specifier = "~=0.19" }, { name = "gssapi", marker = "extra == 'ssh-kerberos'", specifier = "~=1.6" }, { name = "importlib-metadata", specifier = "~=6.0" }, @@ -302,15 +293,16 @@ sdist = { url = "https://files.pythonhosted.org/packages/ea/90/1c9c13f2fdfa96602 [[package]] name = "aio-pika" -version = "9.4.3" +version = "9.5.8" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "aiormq" }, + { name = "exceptiongroup", marker = "python_full_version < '3.11'" }, { name = "yarl" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/c9/69/8649bdb97fa1521af3dafe23dbc5debadd4b01abb2850a4d193dae9b0451/aio_pika-9.4.3.tar.gz", hash = "sha256:fd2b1fce25f6ed5203ef1dd554dc03b90c9a46a64aaf758d032d78dc31e5295d", size = 47693, upload-time = "2024-08-13T06:49:09.619Z" } +sdist = { url = "https://files.pythonhosted.org/packages/c5/73/8d1020683970de5532b3b01732d75c8bf922a6505fcdad1a9c7c6405242a/aio_pika-9.5.8.tar.gz", hash = "sha256:7c36874115f522bbe7486c46d8dd711a4dbedd67c4e8a8c47efe593d01862c62", size = 47408, upload-time = "2025-11-12T10:37:10.215Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/85/66/cad391d83b7266a667c85c826bb6c0d7f68519a0eed7634098c12fb39a4b/aio_pika-9.4.3-py3-none-any.whl", hash = "sha256:f1423d2d5a8b7315d144efe1773763bf687ac17aa1535385982687e9e5ed49bb", size = 53240, upload-time = "2024-08-13T06:49:07.276Z" }, + { url = "https://files.pythonhosted.org/packages/7c/91/513971861d845d28160ecb205ae2cfaf618b16918a9cd4e0b832b5360ce7/aio_pika-9.5.8-py3-none-any.whl", hash = "sha256:f4c6cb8a6c5176d00f39fd7431e9702e638449bc6e86d1769ad7548b2a506a8d", size = 54397, upload-time = "2025-11-12T10:37:08.374Z" }, ] [[package]] @@ -335,43 +327,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/32/34/d4e1c02d3bee589efb5dfa17f88ea08bdb3e3eac12bc475462aec52ed223/alabaster-0.7.16-py3-none-any.whl", hash = "sha256:b46733c07dce03ae4e150330b975c75737fa60f0a7c591b6c8bf4928a28e2c92", size = 13511, upload-time = "2024-01-10T00:56:08.388Z" }, ] -[[package]] -name = "alembic" -version = "1.16.5" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.10'", -] -dependencies = [ - { name = "mako", marker = "python_full_version < '3.10'" }, - { name = "sqlalchemy", marker = "python_full_version < '3.10'" }, - { name = "tomli", marker = "python_full_version < '3.10'" }, - { name = "typing-extensions", marker = "python_full_version < '3.10'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/9a/ca/4dc52902cf3491892d464f5265a81e9dff094692c8a049a3ed6a05fe7ee8/alembic-1.16.5.tar.gz", hash = "sha256:a88bb7f6e513bd4301ecf4c7f2206fe93f9913f9b48dac3b78babde2d6fe765e", size = 1969868, upload-time = "2025-08-27T18:02:05.668Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/39/4a/4c61d4c84cfd9befb6fa08a702535b27b21fff08c946bc2f6139decbf7f7/alembic-1.16.5-py3-none-any.whl", hash = "sha256:e845dfe090c5ffa7b92593ae6687c5cb1a101e91fa53868497dbd79847f9dbe3", size = 247355, upload-time = "2025-08-27T18:02:07.37Z" }, -] - [[package]] name = "alembic" version = "1.17.2" source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.14' and sys_platform == 'win32'", - "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32'", - "python_full_version == '3.11.*' and sys_platform == 'win32'", - "python_full_version >= '3.14' and sys_platform != 'win32'", - "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'win32'", - "python_full_version == '3.11.*' and sys_platform != 'win32'", - "python_full_version == '3.10.*' and sys_platform == 'win32'", - "python_full_version == '3.10.*' and sys_platform != 'win32'", -] dependencies = [ - { name = "mako", marker = "python_full_version >= '3.10'" }, - { name = "sqlalchemy", marker = "python_full_version >= '3.10'" }, - { name = "tomli", marker = "python_full_version == '3.10.*'" }, - { name = "typing-extensions", marker = "python_full_version >= '3.10'" }, + { name = "mako" }, + { name = "sqlalchemy" }, + { name = "tomli", marker = "python_full_version < '3.11'" }, + { name = "typing-extensions" }, ] sdist = { url = "https://files.pythonhosted.org/packages/02/a6/74c8cadc2882977d80ad756a13857857dbcf9bd405bc80b662eb10651282/alembic-1.17.2.tar.gz", hash = "sha256:bbe9751705c5e0f14877f02d46c53d10885e377e3d90eda810a016f9baa19e8e", size = 1988064, upload-time = "2025-11-14T20:35:04.057Z" } wheels = [ @@ -504,13 +468,10 @@ name = "ase" version = "3.26.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "matplotlib", version = "3.9.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "matplotlib", version = "3.10.7", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, - { name = "numpy", version = "2.0.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.10.*'" }, + { name = "matplotlib" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, { name = "numpy", version = "2.3.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, - { name = "scipy", version = "1.13.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "scipy", version = "1.15.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.10.*'" }, + { name = "scipy", version = "1.15.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, { name = "scipy", version = "1.16.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/30/33/2ffa44950267450f6a5cdb711c68e12d0d72d626e246e5897e3bada7bac6/ase-3.26.0.tar.gz", hash = "sha256:a071a355775b0a8062d23e9266e9d811b19d9f6d9ec5215e8032f7d93dc65075", size = 2405567, upload-time = "2025-08-12T13:06:55.589Z" } @@ -550,15 +511,15 @@ wheels = [ [[package]] name = "asyncssh" -version = "2.19.0" +version = "2.22.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "cryptography" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/75/85/c723aa7dd69570a31b6638c1405e659712f18f569f280da2da27989445d3/asyncssh-2.19.0.tar.gz", hash = "sha256:723dead4d068b558708dc66a4ca7e7a93a813aa9416036eccb9af4c03ae2cf30", size = 533702, upload-time = "2024-12-13T00:52:01.966Z" } +sdist = { url = "https://files.pythonhosted.org/packages/fc/d5/957886c316466349d55c4de6a688a10a98295c0b4429deb8db1a17f3eb19/asyncssh-2.22.0.tar.gz", hash = "sha256:c3ce72b01be4f97b40e62844dd384227e5ff5a401a3793007c42f86a5c8eb537", size = 540523, upload-time = "2025-12-21T23:38:30.5Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/95/8f/f0749af566fa39204f6380473e6f9632b804daeb0ecb24cc7de1fc9f2717/asyncssh-2.19.0-py3-none-any.whl", hash = "sha256:bb82ac30ff0cb4393fbaf1114e606ad7a4f13d6c4bdaed423c033ee26b455228", size = 372704, upload-time = "2024-12-13T00:51:58.555Z" }, + { url = "https://files.pythonhosted.org/packages/ed/ae/0da2f2214fc183338af1afe5a103a2052fd03464e8eafbd827abff58a4d0/asyncssh-2.22.0-py3-none-any.whl", hash = "sha256:d16465ccdf1ed20eba1131b14415b155e047f6f5be0d19f39c2e0b61331ee0e7", size = 374938, upload-time = "2025-12-21T23:38:28.976Z" }, ] [[package]] @@ -667,46 +628,16 @@ name = "bibtexparser" version = "1.4.3" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "pyparsing", marker = "python_full_version >= '3.10'" }, + { name = "pyparsing" }, ] sdist = { url = "https://files.pythonhosted.org/packages/92/8d/e296c7af03757debd8fc80df2898cbed4fb69fc61ed2c9b4a1d42e923a9e/bibtexparser-1.4.3.tar.gz", hash = "sha256:a9c7ded64bc137720e4df0b1b7f12734edc1361185f1c9097048ff7c35af2b8f", size = 55582, upload-time = "2024-12-19T20:41:57.754Z" } -[[package]] -name = "bleach" -version = "6.2.0" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.10'", -] -dependencies = [ - { name = "webencodings", marker = "python_full_version < '3.10'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/76/9a/0e33f5054c54d349ea62c277191c020c2d6ef1d65ab2cb1993f91ec846d1/bleach-6.2.0.tar.gz", hash = "sha256:123e894118b8a599fd80d3ec1a6d4cc7ce4e5882b1317a7e1ba69b56e95f991f", size = 203083, upload-time = "2024-10-29T18:30:40.477Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/fc/55/96142937f66150805c25c4d0f31ee4132fd33497753400734f9dfdcbdc66/bleach-6.2.0-py3-none-any.whl", hash = "sha256:117d9c6097a7c3d22fd578fcd8d35ff1e125df6736f554da4e432fdd63f31e5e", size = 163406, upload-time = "2024-10-29T18:30:38.186Z" }, -] - -[package.optional-dependencies] -css = [ - { name = "tinycss2", marker = "python_full_version < '3.10'" }, -] - [[package]] name = "bleach" version = "6.3.0" source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.14' and sys_platform == 'win32'", - "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32'", - "python_full_version == '3.11.*' and sys_platform == 'win32'", - "python_full_version >= '3.14' and sys_platform != 'win32'", - "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'win32'", - "python_full_version == '3.11.*' and sys_platform != 'win32'", - "python_full_version == '3.10.*' and sys_platform == 'win32'", - "python_full_version == '3.10.*' and sys_platform != 'win32'", -] dependencies = [ - { name = "webencodings", marker = "python_full_version >= '3.10'" }, + { name = "webencodings" }, ] sdist = { url = "https://files.pythonhosted.org/packages/07/18/3c8523962314be6bf4c8989c79ad9531c825210dd13a8669f6b84336e8bd/bleach-6.3.0.tar.gz", hash = "sha256:6f3b91b1c0a02bb9a78b5a454c92506aa0fdf197e1d5e114d2e00c6f64306d22", size = 203533, upload-time = "2025-10-27T17:57:39.211Z" } wheels = [ @@ -715,7 +646,7 @@ wheels = [ [package.optional-dependencies] css = [ - { name = "tinycss2", marker = "python_full_version >= '3.10'" }, + { name = "tinycss2" }, ] [[package]] @@ -745,10 +676,8 @@ name = "bpython" version = "0.26" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "curtsies", version = "0.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "curtsies", version = "0.4.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, - { name = "cwcwidth", version = "0.1.10", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "cwcwidth", version = "0.1.11", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.10.*'" }, + { name = "curtsies" }, + { name = "cwcwidth", version = "0.1.11", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, { name = "cwcwidth", version = "0.1.12", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, { name = "greenlet" }, { name = "pygments" }, @@ -850,18 +779,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/a0/1d/ec1a60bd1a10daa292d3cd6bb0b359a81607154fb8165f3ec95fe003b85c/cffi-2.0.0-cp314-cp314t-win32.whl", hash = "sha256:1fc9ea04857caf665289b7a75923f2c6ed559b8298a1b8c49e59f7dd95c8481e", size = 180487, upload-time = "2025-09-08T23:23:40.423Z" }, { url = "https://files.pythonhosted.org/packages/bf/41/4c1168c74fac325c0c8156f04b6749c8b6a8f405bbf91413ba088359f60d/cffi-2.0.0-cp314-cp314t-win_amd64.whl", hash = "sha256:d68b6cef7827e8641e8ef16f4494edda8b36104d79773a334beaa1e3521430f6", size = 191726, upload-time = "2025-09-08T23:23:41.742Z" }, { url = "https://files.pythonhosted.org/packages/ae/3a/dbeec9d1ee0844c679f6bb5d6ad4e9f198b1224f4e7a32825f47f6192b0c/cffi-2.0.0-cp314-cp314t-win_arm64.whl", hash = "sha256:0a1527a803f0a659de1af2e1fd700213caba79377e27e4693648c2923da066f9", size = 184195, upload-time = "2025-09-08T23:23:43.004Z" }, - { url = "https://files.pythonhosted.org/packages/c0/cc/08ed5a43f2996a16b462f64a7055c6e962803534924b9b2f1371d8c00b7b/cffi-2.0.0-cp39-cp39-macosx_10_13_x86_64.whl", hash = "sha256:fe562eb1a64e67dd297ccc4f5addea2501664954f2692b69a76449ec7913ecbf", size = 184288, upload-time = "2025-09-08T23:23:48.404Z" }, - { url = "https://files.pythonhosted.org/packages/3d/de/38d9726324e127f727b4ecc376bc85e505bfe61ef130eaf3f290c6847dd4/cffi-2.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:de8dad4425a6ca6e4e5e297b27b5c824ecc7581910bf9aee86cb6835e6812aa7", size = 180509, upload-time = "2025-09-08T23:23:49.73Z" }, - { url = "https://files.pythonhosted.org/packages/9b/13/c92e36358fbcc39cf0962e83223c9522154ee8630e1df7c0b3a39a8124e2/cffi-2.0.0-cp39-cp39-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:4647afc2f90d1ddd33441e5b0e85b16b12ddec4fca55f0d9671fef036ecca27c", size = 208813, upload-time = "2025-09-08T23:23:51.263Z" }, - { url = "https://files.pythonhosted.org/packages/15/12/a7a79bd0df4c3bff744b2d7e52cc1b68d5e7e427b384252c42366dc1ecbc/cffi-2.0.0-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:3f4d46d8b35698056ec29bca21546e1551a205058ae1a181d871e278b0b28165", size = 216498, upload-time = "2025-09-08T23:23:52.494Z" }, - { url = "https://files.pythonhosted.org/packages/a3/ad/5c51c1c7600bdd7ed9a24a203ec255dccdd0ebf4527f7b922a0bde2fb6ed/cffi-2.0.0-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:e6e73b9e02893c764e7e8d5bb5ce277f1a009cd5243f8228f75f842bf937c534", size = 203243, upload-time = "2025-09-08T23:23:53.836Z" }, - { url = "https://files.pythonhosted.org/packages/32/f2/81b63e288295928739d715d00952c8c6034cb6c6a516b17d37e0c8be5600/cffi-2.0.0-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:cb527a79772e5ef98fb1d700678fe031e353e765d1ca2d409c92263c6d43e09f", size = 203158, upload-time = "2025-09-08T23:23:55.169Z" }, - { url = "https://files.pythonhosted.org/packages/1f/74/cc4096ce66f5939042ae094e2e96f53426a979864aa1f96a621ad128be27/cffi-2.0.0-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:61d028e90346df14fedc3d1e5441df818d095f3b87d286825dfcbd6459b7ef63", size = 216548, upload-time = "2025-09-08T23:23:56.506Z" }, - { url = "https://files.pythonhosted.org/packages/e8/be/f6424d1dc46b1091ffcc8964fa7c0ab0cd36839dd2761b49c90481a6ba1b/cffi-2.0.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:0f6084a0ea23d05d20c3edcda20c3d006f9b6f3fefeac38f59262e10cef47ee2", size = 218897, upload-time = "2025-09-08T23:23:57.825Z" }, - { url = "https://files.pythonhosted.org/packages/f7/e0/dda537c2309817edf60109e39265f24f24aa7f050767e22c98c53fe7f48b/cffi-2.0.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:1cd13c99ce269b3ed80b417dcd591415d3372bcac067009b6e0f59c7d4015e65", size = 211249, upload-time = "2025-09-08T23:23:59.139Z" }, - { url = "https://files.pythonhosted.org/packages/2b/e7/7c769804eb75e4c4b35e658dba01de1640a351a9653c3d49ca89d16ccc91/cffi-2.0.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:89472c9762729b5ae1ad974b777416bfda4ac5642423fa93bd57a09204712322", size = 218041, upload-time = "2025-09-08T23:24:00.496Z" }, - { url = "https://files.pythonhosted.org/packages/aa/d9/6218d78f920dcd7507fc16a766b5ef8f3b913cc7aa938e7fc80b9978d089/cffi-2.0.0-cp39-cp39-win32.whl", hash = "sha256:2081580ebb843f759b9f617314a24ed5738c51d2aee65d31e02f6f7a2b97707a", size = 172138, upload-time = "2025-09-08T23:24:01.7Z" }, - { url = "https://files.pythonhosted.org/packages/54/8f/a1e836f82d8e32a97e6b29cc8f641779181ac7363734f12df27db803ebda/cffi-2.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:b882b3df248017dba09d6b16defe9b5c407fe32fc7c65a9c69798e6175601be9", size = 182794, upload-time = "2025-09-08T23:24:02.943Z" }, ] [[package]] @@ -968,22 +885,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/b0/6f/8f7af07237c34a1defe7defc565a9bc1807762f672c0fde711a4b22bf9c0/charset_normalizer-3.4.4-cp314-cp314-win32.whl", hash = "sha256:f9d332f8c2a2fcbffe1378594431458ddbef721c1769d78e2cbc06280d8155f9", size = 99940, upload-time = "2025-10-14T04:41:49.946Z" }, { url = "https://files.pythonhosted.org/packages/4b/51/8ade005e5ca5b0d80fb4aff72a3775b325bdc3d27408c8113811a7cbe640/charset_normalizer-3.4.4-cp314-cp314-win_amd64.whl", hash = "sha256:8a6562c3700cce886c5be75ade4a5db4214fda19fede41d9792d100288d8f94c", size = 107104, upload-time = "2025-10-14T04:41:51.051Z" }, { url = "https://files.pythonhosted.org/packages/da/5f/6b8f83a55bb8278772c5ae54a577f3099025f9ade59d0136ac24a0df4bde/charset_normalizer-3.4.4-cp314-cp314-win_arm64.whl", hash = "sha256:de00632ca48df9daf77a2c65a484531649261ec9f25489917f09e455cb09ddb2", size = 100743, upload-time = "2025-10-14T04:41:52.122Z" }, - { url = "https://files.pythonhosted.org/packages/46/7c/0c4760bccf082737ca7ab84a4c2034fcc06b1f21cf3032ea98bd6feb1725/charset_normalizer-3.4.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:a9768c477b9d7bd54bc0c86dbaebdec6f03306675526c9927c0e8a04e8f94af9", size = 209609, upload-time = "2025-10-14T04:42:10.922Z" }, - { url = "https://files.pythonhosted.org/packages/bb/a4/69719daef2f3d7f1819de60c9a6be981b8eeead7542d5ec4440f3c80e111/charset_normalizer-3.4.4-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1bee1e43c28aa63cb16e5c14e582580546b08e535299b8b6158a7c9c768a1f3d", size = 149029, upload-time = "2025-10-14T04:42:12.38Z" }, - { url = "https://files.pythonhosted.org/packages/e6/21/8d4e1d6c1e6070d3672908b8e4533a71b5b53e71d16828cc24d0efec564c/charset_normalizer-3.4.4-cp39-cp39-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:fd44c878ea55ba351104cb93cc85e74916eb8fa440ca7903e57575e97394f608", size = 144580, upload-time = "2025-10-14T04:42:13.549Z" }, - { url = "https://files.pythonhosted.org/packages/a7/0a/a616d001b3f25647a9068e0b9199f697ce507ec898cacb06a0d5a1617c99/charset_normalizer-3.4.4-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:0f04b14ffe5fdc8c4933862d8306109a2c51e0704acfa35d51598eb45a1e89fc", size = 162340, upload-time = "2025-10-14T04:42:14.892Z" }, - { url = "https://files.pythonhosted.org/packages/85/93/060b52deb249a5450460e0585c88a904a83aec474ab8e7aba787f45e79f2/charset_normalizer-3.4.4-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:cd09d08005f958f370f539f186d10aec3377d55b9eeb0d796025d4886119d76e", size = 159619, upload-time = "2025-10-14T04:42:16.676Z" }, - { url = "https://files.pythonhosted.org/packages/dd/21/0274deb1cc0632cd587a9a0ec6b4674d9108e461cb4cd40d457adaeb0564/charset_normalizer-3.4.4-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4fe7859a4e3e8457458e2ff592f15ccb02f3da787fcd31e0183879c3ad4692a1", size = 153980, upload-time = "2025-10-14T04:42:17.917Z" }, - { url = "https://files.pythonhosted.org/packages/28/2b/e3d7d982858dccc11b31906976323d790dded2017a0572f093ff982d692f/charset_normalizer-3.4.4-cp39-cp39-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:fa09f53c465e532f4d3db095e0c55b615f010ad81803d383195b6b5ca6cbf5f3", size = 152174, upload-time = "2025-10-14T04:42:19.018Z" }, - { url = "https://files.pythonhosted.org/packages/6e/ff/4a269f8e35f1e58b2df52c131a1fa019acb7ef3f8697b7d464b07e9b492d/charset_normalizer-3.4.4-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:7fa17817dc5625de8a027cb8b26d9fefa3ea28c8253929b8d6649e705d2835b6", size = 151666, upload-time = "2025-10-14T04:42:20.171Z" }, - { url = "https://files.pythonhosted.org/packages/da/c9/ec39870f0b330d58486001dd8e532c6b9a905f5765f58a6f8204926b4a93/charset_normalizer-3.4.4-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:5947809c8a2417be3267efc979c47d76a079758166f7d43ef5ae8e9f92751f88", size = 145550, upload-time = "2025-10-14T04:42:21.324Z" }, - { url = "https://files.pythonhosted.org/packages/75/8f/d186ab99e40e0ed9f82f033d6e49001701c81244d01905dd4a6924191a30/charset_normalizer-3.4.4-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:4902828217069c3c5c71094537a8e623f5d097858ac6ca8252f7b4d10b7560f1", size = 163721, upload-time = "2025-10-14T04:42:22.46Z" }, - { url = "https://files.pythonhosted.org/packages/96/b1/6047663b9744df26a7e479ac1e77af7134b1fcf9026243bb48ee2d18810f/charset_normalizer-3.4.4-cp39-cp39-musllinux_1_2_riscv64.whl", hash = "sha256:7c308f7e26e4363d79df40ca5b2be1c6ba9f02bdbccfed5abddb7859a6ce72cf", size = 152127, upload-time = "2025-10-14T04:42:23.712Z" }, - { url = "https://files.pythonhosted.org/packages/59/78/e5a6eac9179f24f704d1be67d08704c3c6ab9f00963963524be27c18ed87/charset_normalizer-3.4.4-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:2c9d3c380143a1fedbff95a312aa798578371eb29da42106a29019368a475318", size = 161175, upload-time = "2025-10-14T04:42:24.87Z" }, - { url = "https://files.pythonhosted.org/packages/e5/43/0e626e42d54dd2f8dd6fc5e1c5ff00f05fbca17cb699bedead2cae69c62f/charset_normalizer-3.4.4-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:cb01158d8b88ee68f15949894ccc6712278243d95f344770fa7593fa2d94410c", size = 155375, upload-time = "2025-10-14T04:42:27.246Z" }, - { url = "https://files.pythonhosted.org/packages/e9/91/d9615bf2e06f35e4997616ff31248c3657ed649c5ab9d35ea12fce54e380/charset_normalizer-3.4.4-cp39-cp39-win32.whl", hash = "sha256:2677acec1a2f8ef614c6888b5b4ae4060cc184174a938ed4e8ef690e15d3e505", size = 99692, upload-time = "2025-10-14T04:42:28.425Z" }, - { url = "https://files.pythonhosted.org/packages/d1/a9/6c040053909d9d1ef4fcab45fddec083aedc9052c10078339b47c8573ea8/charset_normalizer-3.4.4-cp39-cp39-win_amd64.whl", hash = "sha256:f8e160feb2aed042cd657a72acc0b481212ed28b1b9a95c0cee1621b524e1966", size = 107192, upload-time = "2025-10-14T04:42:29.482Z" }, - { url = "https://files.pythonhosted.org/packages/f0/c6/4fa536b2c0cd3edfb7ccf8469fa0f363ea67b7213a842b90909ca33dd851/charset_normalizer-3.4.4-cp39-cp39-win_arm64.whl", hash = "sha256:b5d84d37db046c5ca74ee7bb47dd6cbc13f80665fdde3e8040bdd3fb015ecb50", size = 100220, upload-time = "2025-10-14T04:42:30.632Z" }, { url = "https://files.pythonhosted.org/packages/0a/4c/925909008ed5a988ccbb72dcc897407e5d6d3bd72410d69e051fc0c14647/charset_normalizer-3.4.4-py3-none-any.whl", hash = "sha256:7a32c560861a02ff789ad905a2fe94e3f840803362c84fecf1851cb4cf3dc37f", size = 53402, upload-time = "2025-10-14T04:42:31.76Z" }, ] @@ -1001,37 +902,12 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/f4/2c/1b09e40d512b7b9f9e58f2ee6c4648461e3fb40de2201856adaa1d22e96f/circus-0.19.0-py3-none-any.whl", hash = "sha256:15cac59d2bac8d8793f801a3a57e54acb261590c93e29fbfe639eaef8a680d39", size = 118155, upload-time = "2025-02-13T09:39:35.828Z" }, ] -[[package]] -name = "click" -version = "8.1.8" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.10'", -] -dependencies = [ - { name = "colorama", marker = "python_full_version < '3.10' and sys_platform == 'win32'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/b9/2e/0090cbf739cee7d23781ad4b89a9894a41538e4fcf4c31dcdd705b78eb8b/click-8.1.8.tar.gz", hash = "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a", size = 226593, upload-time = "2024-12-21T18:38:44.339Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/7e/d4/7ebdbd03970677812aac39c869717059dbb71a4cfc033ca6e5221787892c/click-8.1.8-py3-none-any.whl", hash = "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2", size = 98188, upload-time = "2024-12-21T18:38:41.666Z" }, -] - [[package]] name = "click" version = "8.2.1" source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.14' and sys_platform == 'win32'", - "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32'", - "python_full_version == '3.11.*' and sys_platform == 'win32'", - "python_full_version >= '3.14' and sys_platform != 'win32'", - "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'win32'", - "python_full_version == '3.11.*' and sys_platform != 'win32'", - "python_full_version == '3.10.*' and sys_platform == 'win32'", - "python_full_version == '3.10.*' and sys_platform != 'win32'", -] dependencies = [ - { name = "colorama", marker = "python_full_version >= '3.10' and sys_platform == 'win32'" }, + { 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 = [ @@ -1065,94 +941,16 @@ 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 = "contourpy" -version = "1.3.0" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.10'", -] -dependencies = [ - { name = "numpy", version = "2.0.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/f5/f6/31a8f28b4a2a4fa0e01085e542f3081ab0588eff8e589d39d775172c9792/contourpy-1.3.0.tar.gz", hash = "sha256:7ffa0db17717a8ffb127efd0c95a4362d996b892c2904db72428d5b52e1938a4", size = 13464370, upload-time = "2024-08-27T21:00:03.328Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/6c/e0/be8dcc796cfdd96708933e0e2da99ba4bb8f9b2caa9d560a50f3f09a65f3/contourpy-1.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:880ea32e5c774634f9fcd46504bf9f080a41ad855f4fef54f5380f5133d343c7", size = 265366, upload-time = "2024-08-27T20:50:09.947Z" }, - { url = "https://files.pythonhosted.org/packages/50/d6/c953b400219443535d412fcbbc42e7a5e823291236bc0bb88936e3cc9317/contourpy-1.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:76c905ef940a4474a6289c71d53122a4f77766eef23c03cd57016ce19d0f7b42", size = 249226, upload-time = "2024-08-27T20:50:16.1Z" }, - { url = "https://files.pythonhosted.org/packages/6f/b4/6fffdf213ffccc28483c524b9dad46bb78332851133b36ad354b856ddc7c/contourpy-1.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:92f8557cbb07415a4d6fa191f20fd9d2d9eb9c0b61d1b2f52a8926e43c6e9af7", size = 308460, upload-time = "2024-08-27T20:50:22.536Z" }, - { url = "https://files.pythonhosted.org/packages/cf/6c/118fc917b4050f0afe07179a6dcbe4f3f4ec69b94f36c9e128c4af480fb8/contourpy-1.3.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:36f965570cff02b874773c49bfe85562b47030805d7d8360748f3eca570f4cab", size = 347623, upload-time = "2024-08-27T20:50:28.806Z" }, - { url = "https://files.pythonhosted.org/packages/f9/a4/30ff110a81bfe3abf7b9673284d21ddce8cc1278f6f77393c91199da4c90/contourpy-1.3.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cacd81e2d4b6f89c9f8a5b69b86490152ff39afc58a95af002a398273e5ce589", size = 317761, upload-time = "2024-08-27T20:50:35.126Z" }, - { url = "https://files.pythonhosted.org/packages/99/e6/d11966962b1aa515f5586d3907ad019f4b812c04e4546cc19ebf62b5178e/contourpy-1.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:69375194457ad0fad3a839b9e29aa0b0ed53bb54db1bfb6c3ae43d111c31ce41", size = 322015, upload-time = "2024-08-27T20:50:40.318Z" }, - { url = "https://files.pythonhosted.org/packages/4d/e3/182383743751d22b7b59c3c753277b6aee3637049197624f333dac5b4c80/contourpy-1.3.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:7a52040312b1a858b5e31ef28c2e865376a386c60c0e248370bbea2d3f3b760d", size = 1262672, upload-time = "2024-08-27T20:50:55.643Z" }, - { url = "https://files.pythonhosted.org/packages/78/53/974400c815b2e605f252c8fb9297e2204347d1755a5374354ee77b1ea259/contourpy-1.3.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:3faeb2998e4fcb256542e8a926d08da08977f7f5e62cf733f3c211c2a5586223", size = 1321688, upload-time = "2024-08-27T20:51:11.293Z" }, - { url = "https://files.pythonhosted.org/packages/52/29/99f849faed5593b2926a68a31882af98afbeac39c7fdf7de491d9c85ec6a/contourpy-1.3.0-cp310-cp310-win32.whl", hash = "sha256:36e0cff201bcb17a0a8ecc7f454fe078437fa6bda730e695a92f2d9932bd507f", size = 171145, upload-time = "2024-08-27T20:51:15.2Z" }, - { url = "https://files.pythonhosted.org/packages/a9/97/3f89bba79ff6ff2b07a3cbc40aa693c360d5efa90d66e914f0ff03b95ec7/contourpy-1.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:87ddffef1dbe5e669b5c2440b643d3fdd8622a348fe1983fad7a0f0ccb1cd67b", size = 216019, upload-time = "2024-08-27T20:51:19.365Z" }, - { url = "https://files.pythonhosted.org/packages/b3/1f/9375917786cb39270b0ee6634536c0e22abf225825602688990d8f5c6c19/contourpy-1.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0fa4c02abe6c446ba70d96ece336e621efa4aecae43eaa9b030ae5fb92b309ad", size = 266356, upload-time = "2024-08-27T20:51:24.146Z" }, - { url = "https://files.pythonhosted.org/packages/05/46/9256dd162ea52790c127cb58cfc3b9e3413a6e3478917d1f811d420772ec/contourpy-1.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:834e0cfe17ba12f79963861e0f908556b2cedd52e1f75e6578801febcc6a9f49", size = 250915, upload-time = "2024-08-27T20:51:28.683Z" }, - { url = "https://files.pythonhosted.org/packages/e1/5d/3056c167fa4486900dfbd7e26a2fdc2338dc58eee36d490a0ed3ddda5ded/contourpy-1.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dbc4c3217eee163fa3984fd1567632b48d6dfd29216da3ded3d7b844a8014a66", size = 310443, upload-time = "2024-08-27T20:51:33.675Z" }, - { url = "https://files.pythonhosted.org/packages/ca/c2/1a612e475492e07f11c8e267ea5ec1ce0d89971be496c195e27afa97e14a/contourpy-1.3.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4865cd1d419e0c7a7bf6de1777b185eebdc51470800a9f42b9e9decf17762081", size = 348548, upload-time = "2024-08-27T20:51:39.322Z" }, - { url = "https://files.pythonhosted.org/packages/45/cf/2c2fc6bb5874158277b4faf136847f0689e1b1a1f640a36d76d52e78907c/contourpy-1.3.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:303c252947ab4b14c08afeb52375b26781ccd6a5ccd81abcdfc1fafd14cf93c1", size = 319118, upload-time = "2024-08-27T20:51:44.717Z" }, - { url = "https://files.pythonhosted.org/packages/03/33/003065374f38894cdf1040cef474ad0546368eea7e3a51d48b8a423961f8/contourpy-1.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:637f674226be46f6ba372fd29d9523dd977a291f66ab2a74fbeb5530bb3f445d", size = 323162, upload-time = "2024-08-27T20:51:49.683Z" }, - { url = "https://files.pythonhosted.org/packages/42/80/e637326e85e4105a802e42959f56cff2cd39a6b5ef68d5d9aee3ea5f0e4c/contourpy-1.3.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:76a896b2f195b57db25d6b44e7e03f221d32fe318d03ede41f8b4d9ba1bff53c", size = 1265396, upload-time = "2024-08-27T20:52:04.926Z" }, - { url = "https://files.pythonhosted.org/packages/7c/3b/8cbd6416ca1bbc0202b50f9c13b2e0b922b64be888f9d9ee88e6cfabfb51/contourpy-1.3.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:e1fd23e9d01591bab45546c089ae89d926917a66dceb3abcf01f6105d927e2cb", size = 1324297, upload-time = "2024-08-27T20:52:21.843Z" }, - { url = "https://files.pythonhosted.org/packages/4d/2c/021a7afaa52fe891f25535506cc861c30c3c4e5a1c1ce94215e04b293e72/contourpy-1.3.0-cp311-cp311-win32.whl", hash = "sha256:d402880b84df3bec6eab53cd0cf802cae6a2ef9537e70cf75e91618a3801c20c", size = 171808, upload-time = "2024-08-27T20:52:25.163Z" }, - { url = "https://files.pythonhosted.org/packages/8d/2f/804f02ff30a7fae21f98198828d0857439ec4c91a96e20cf2d6c49372966/contourpy-1.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:6cb6cc968059db9c62cb35fbf70248f40994dfcd7aa10444bbf8b3faeb7c2d67", size = 217181, upload-time = "2024-08-27T20:52:29.13Z" }, - { url = "https://files.pythonhosted.org/packages/c9/92/8e0bbfe6b70c0e2d3d81272b58c98ac69ff1a4329f18c73bd64824d8b12e/contourpy-1.3.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:570ef7cf892f0afbe5b2ee410c507ce12e15a5fa91017a0009f79f7d93a1268f", size = 267838, upload-time = "2024-08-27T20:52:33.911Z" }, - { url = "https://files.pythonhosted.org/packages/e3/04/33351c5d5108460a8ce6d512307690b023f0cfcad5899499f5c83b9d63b1/contourpy-1.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:da84c537cb8b97d153e9fb208c221c45605f73147bd4cadd23bdae915042aad6", size = 251549, upload-time = "2024-08-27T20:52:39.179Z" }, - { url = "https://files.pythonhosted.org/packages/51/3d/aa0fe6ae67e3ef9f178389e4caaaa68daf2f9024092aa3c6032e3d174670/contourpy-1.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0be4d8425bfa755e0fd76ee1e019636ccc7c29f77a7c86b4328a9eb6a26d0639", size = 303177, upload-time = "2024-08-27T20:52:44.789Z" }, - { url = "https://files.pythonhosted.org/packages/56/c3/c85a7e3e0cab635575d3b657f9535443a6f5d20fac1a1911eaa4bbe1aceb/contourpy-1.3.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9c0da700bf58f6e0b65312d0a5e695179a71d0163957fa381bb3c1f72972537c", size = 341735, upload-time = "2024-08-27T20:52:51.05Z" }, - { url = "https://files.pythonhosted.org/packages/dd/8d/20f7a211a7be966a53f474bc90b1a8202e9844b3f1ef85f3ae45a77151ee/contourpy-1.3.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eb8b141bb00fa977d9122636b16aa67d37fd40a3d8b52dd837e536d64b9a4d06", size = 314679, upload-time = "2024-08-27T20:52:58.473Z" }, - { url = "https://files.pythonhosted.org/packages/6e/be/524e377567defac0e21a46e2a529652d165fed130a0d8a863219303cee18/contourpy-1.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3634b5385c6716c258d0419c46d05c8aa7dc8cb70326c9a4fb66b69ad2b52e09", size = 320549, upload-time = "2024-08-27T20:53:06.593Z" }, - { url = "https://files.pythonhosted.org/packages/0f/96/fdb2552a172942d888915f3a6663812e9bc3d359d53dafd4289a0fb462f0/contourpy-1.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:0dce35502151b6bd35027ac39ba6e5a44be13a68f55735c3612c568cac3805fd", size = 1263068, upload-time = "2024-08-27T20:53:23.442Z" }, - { url = "https://files.pythonhosted.org/packages/2a/25/632eab595e3140adfa92f1322bf8915f68c932bac468e89eae9974cf1c00/contourpy-1.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:aea348f053c645100612b333adc5983d87be69acdc6d77d3169c090d3b01dc35", size = 1322833, upload-time = "2024-08-27T20:53:39.243Z" }, - { url = "https://files.pythonhosted.org/packages/73/e3/69738782e315a1d26d29d71a550dbbe3eb6c653b028b150f70c1a5f4f229/contourpy-1.3.0-cp312-cp312-win32.whl", hash = "sha256:90f73a5116ad1ba7174341ef3ea5c3150ddf20b024b98fb0c3b29034752c8aeb", size = 172681, upload-time = "2024-08-27T20:53:43.05Z" }, - { url = "https://files.pythonhosted.org/packages/0c/89/9830ba00d88e43d15e53d64931e66b8792b46eb25e2050a88fec4a0df3d5/contourpy-1.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:b11b39aea6be6764f84360fce6c82211a9db32a7c7de8fa6dd5397cf1d079c3b", size = 218283, upload-time = "2024-08-27T20:53:47.232Z" }, - { url = "https://files.pythonhosted.org/packages/53/a1/d20415febfb2267af2d7f06338e82171824d08614084714fb2c1dac9901f/contourpy-1.3.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:3e1c7fa44aaae40a2247e2e8e0627f4bea3dd257014764aa644f319a5f8600e3", size = 267879, upload-time = "2024-08-27T20:53:51.597Z" }, - { url = "https://files.pythonhosted.org/packages/aa/45/5a28a3570ff6218d8bdfc291a272a20d2648104815f01f0177d103d985e1/contourpy-1.3.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:364174c2a76057feef647c802652f00953b575723062560498dc7930fc9b1cb7", size = 251573, upload-time = "2024-08-27T20:53:55.659Z" }, - { url = "https://files.pythonhosted.org/packages/39/1c/d3f51540108e3affa84f095c8b04f0aa833bb797bc8baa218a952a98117d/contourpy-1.3.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:32b238b3b3b649e09ce9aaf51f0c261d38644bdfa35cbaf7b263457850957a84", size = 303184, upload-time = "2024-08-27T20:54:00.225Z" }, - { url = "https://files.pythonhosted.org/packages/00/56/1348a44fb6c3a558c1a3a0cd23d329d604c99d81bf5a4b58c6b71aab328f/contourpy-1.3.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d51fca85f9f7ad0b65b4b9fe800406d0d77017d7270d31ec3fb1cc07358fdea0", size = 340262, upload-time = "2024-08-27T20:54:05.234Z" }, - { url = "https://files.pythonhosted.org/packages/2b/23/00d665ba67e1bb666152131da07e0f24c95c3632d7722caa97fb61470eca/contourpy-1.3.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:732896af21716b29ab3e988d4ce14bc5133733b85956316fb0c56355f398099b", size = 313806, upload-time = "2024-08-27T20:54:09.889Z" }, - { url = "https://files.pythonhosted.org/packages/5a/42/3cf40f7040bb8362aea19af9a5fb7b32ce420f645dd1590edcee2c657cd5/contourpy-1.3.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d73f659398a0904e125280836ae6f88ba9b178b2fed6884f3b1f95b989d2c8da", size = 319710, upload-time = "2024-08-27T20:54:14.536Z" }, - { url = "https://files.pythonhosted.org/packages/05/32/f3bfa3fc083b25e1a7ae09197f897476ee68e7386e10404bdf9aac7391f0/contourpy-1.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c6c7c2408b7048082932cf4e641fa3b8ca848259212f51c8c59c45aa7ac18f14", size = 1264107, upload-time = "2024-08-27T20:54:29.735Z" }, - { url = "https://files.pythonhosted.org/packages/1c/1e/1019d34473a736664f2439542b890b2dc4c6245f5c0d8cdfc0ccc2cab80c/contourpy-1.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f317576606de89da6b7e0861cf6061f6146ead3528acabff9236458a6ba467f8", size = 1322458, upload-time = "2024-08-27T20:54:45.507Z" }, - { url = "https://files.pythonhosted.org/packages/22/85/4f8bfd83972cf8909a4d36d16b177f7b8bdd942178ea4bf877d4a380a91c/contourpy-1.3.0-cp313-cp313-win32.whl", hash = "sha256:31cd3a85dbdf1fc002280c65caa7e2b5f65e4a973fcdf70dd2fdcb9868069294", size = 172643, upload-time = "2024-08-27T20:55:52.754Z" }, - { url = "https://files.pythonhosted.org/packages/cc/4a/fb3c83c1baba64ba90443626c228ca14f19a87c51975d3b1de308dd2cf08/contourpy-1.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:4553c421929ec95fb07b3aaca0fae668b2eb5a5203d1217ca7c34c063c53d087", size = 218301, upload-time = "2024-08-27T20:55:56.509Z" }, - { url = "https://files.pythonhosted.org/packages/76/65/702f4064f397821fea0cb493f7d3bc95a5d703e20954dce7d6d39bacf378/contourpy-1.3.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:345af746d7766821d05d72cb8f3845dfd08dd137101a2cb9b24de277d716def8", size = 278972, upload-time = "2024-08-27T20:54:50.347Z" }, - { url = "https://files.pythonhosted.org/packages/80/85/21f5bba56dba75c10a45ec00ad3b8190dbac7fd9a8a8c46c6116c933e9cf/contourpy-1.3.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3bb3808858a9dc68f6f03d319acd5f1b8a337e6cdda197f02f4b8ff67ad2057b", size = 263375, upload-time = "2024-08-27T20:54:54.909Z" }, - { url = "https://files.pythonhosted.org/packages/0a/64/084c86ab71d43149f91ab3a4054ccf18565f0a8af36abfa92b1467813ed6/contourpy-1.3.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:420d39daa61aab1221567b42eecb01112908b2cab7f1b4106a52caaec8d36973", size = 307188, upload-time = "2024-08-27T20:55:00.184Z" }, - { url = "https://files.pythonhosted.org/packages/3d/ff/d61a4c288dc42da0084b8d9dc2aa219a850767165d7d9a9c364ff530b509/contourpy-1.3.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4d63ee447261e963af02642ffcb864e5a2ee4cbfd78080657a9880b8b1868e18", size = 345644, upload-time = "2024-08-27T20:55:05.673Z" }, - { url = "https://files.pythonhosted.org/packages/ca/aa/00d2313d35ec03f188e8f0786c2fc61f589306e02fdc158233697546fd58/contourpy-1.3.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:167d6c890815e1dac9536dca00828b445d5d0df4d6a8c6adb4a7ec3166812fa8", size = 317141, upload-time = "2024-08-27T20:55:11.047Z" }, - { url = "https://files.pythonhosted.org/packages/8d/6a/b5242c8cb32d87f6abf4f5e3044ca397cb1a76712e3fa2424772e3ff495f/contourpy-1.3.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:710a26b3dc80c0e4febf04555de66f5fd17e9cf7170a7b08000601a10570bda6", size = 323469, upload-time = "2024-08-27T20:55:15.914Z" }, - { url = "https://files.pythonhosted.org/packages/6f/a6/73e929d43028a9079aca4bde107494864d54f0d72d9db508a51ff0878593/contourpy-1.3.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:75ee7cb1a14c617f34a51d11fa7524173e56551646828353c4af859c56b766e2", size = 1260894, upload-time = "2024-08-27T20:55:31.553Z" }, - { url = "https://files.pythonhosted.org/packages/2b/1e/1e726ba66eddf21c940821df8cf1a7d15cb165f0682d62161eaa5e93dae1/contourpy-1.3.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:33c92cdae89ec5135d036e7218e69b0bb2851206077251f04a6c4e0e21f03927", size = 1314829, upload-time = "2024-08-27T20:55:47.837Z" }, - { url = "https://files.pythonhosted.org/packages/b3/e3/b9f72758adb6ef7397327ceb8b9c39c75711affb220e4f53c745ea1d5a9a/contourpy-1.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a11077e395f67ffc2c44ec2418cfebed032cd6da3022a94fc227b6faf8e2acb8", size = 265518, upload-time = "2024-08-27T20:56:01.333Z" }, - { url = "https://files.pythonhosted.org/packages/ec/22/19f5b948367ab5260fb41d842c7a78dae645603881ea6bc39738bcfcabf6/contourpy-1.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e8134301d7e204c88ed7ab50028ba06c683000040ede1d617298611f9dc6240c", size = 249350, upload-time = "2024-08-27T20:56:05.432Z" }, - { url = "https://files.pythonhosted.org/packages/26/76/0c7d43263dd00ae21a91a24381b7e813d286a3294d95d179ef3a7b9fb1d7/contourpy-1.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e12968fdfd5bb45ffdf6192a590bd8ddd3ba9e58360b29683c6bb71a7b41edca", size = 309167, upload-time = "2024-08-27T20:56:10.034Z" }, - { url = "https://files.pythonhosted.org/packages/96/3b/cadff6773e89f2a5a492c1a8068e21d3fccaf1a1c1df7d65e7c8e3ef60ba/contourpy-1.3.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fd2a0fc506eccaaa7595b7e1418951f213cf8255be2600f1ea1b61e46a60c55f", size = 348279, upload-time = "2024-08-27T20:56:15.41Z" }, - { url = "https://files.pythonhosted.org/packages/e1/86/158cc43aa549d2081a955ab11c6bdccc7a22caacc2af93186d26f5f48746/contourpy-1.3.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4cfb5c62ce023dfc410d6059c936dcf96442ba40814aefbfa575425a3a7f19dc", size = 318519, upload-time = "2024-08-27T20:56:21.813Z" }, - { url = "https://files.pythonhosted.org/packages/05/11/57335544a3027e9b96a05948c32e566328e3a2f84b7b99a325b7a06d2b06/contourpy-1.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:68a32389b06b82c2fdd68276148d7b9275b5f5cf13e5417e4252f6d1a34f72a2", size = 321922, upload-time = "2024-08-27T20:56:26.983Z" }, - { url = "https://files.pythonhosted.org/packages/0b/e3/02114f96543f4a1b694333b92a6dcd4f8eebbefcc3a5f3bbb1316634178f/contourpy-1.3.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:94e848a6b83da10898cbf1311a815f770acc9b6a3f2d646f330d57eb4e87592e", size = 1258017, upload-time = "2024-08-27T20:56:42.246Z" }, - { url = "https://files.pythonhosted.org/packages/f3/3b/bfe4c81c6d5881c1c643dde6620be0b42bf8aab155976dd644595cfab95c/contourpy-1.3.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:d78ab28a03c854a873787a0a42254a0ccb3cb133c672f645c9f9c8f3ae9d0800", size = 1316773, upload-time = "2024-08-27T20:56:58.58Z" }, - { url = "https://files.pythonhosted.org/packages/f1/17/c52d2970784383cafb0bd918b6fb036d98d96bbf0bc1befb5d1e31a07a70/contourpy-1.3.0-cp39-cp39-win32.whl", hash = "sha256:81cb5ed4952aae6014bc9d0421dec7c5835c9c8c31cdf51910b708f548cf58e5", size = 171353, upload-time = "2024-08-27T20:57:02.718Z" }, - { url = "https://files.pythonhosted.org/packages/53/23/db9f69676308e094d3c45f20cc52e12d10d64f027541c995d89c11ad5c75/contourpy-1.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:14e262f67bd7e6eb6880bc564dcda30b15e351a594657e55b7eec94b6ef72843", size = 211817, upload-time = "2024-08-27T20:57:06.328Z" }, - { url = "https://files.pythonhosted.org/packages/d1/09/60e486dc2b64c94ed33e58dcfb6f808192c03dfc5574c016218b9b7680dc/contourpy-1.3.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:fe41b41505a5a33aeaed2a613dccaeaa74e0e3ead6dd6fd3a118fb471644fd6c", size = 261886, upload-time = "2024-08-27T20:57:10.863Z" }, - { url = "https://files.pythonhosted.org/packages/19/20/b57f9f7174fcd439a7789fb47d764974ab646fa34d1790551de386457a8e/contourpy-1.3.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eca7e17a65f72a5133bdbec9ecf22401c62bcf4821361ef7811faee695799779", size = 311008, upload-time = "2024-08-27T20:57:15.588Z" }, - { url = "https://files.pythonhosted.org/packages/74/fc/5040d42623a1845d4f17a418e590fd7a79ae8cb2bad2b2f83de63c3bdca4/contourpy-1.3.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:1ec4dc6bf570f5b22ed0d7efba0dfa9c5b9e0431aeea7581aa217542d9e809a4", size = 215690, upload-time = "2024-08-27T20:57:19.321Z" }, - { url = "https://files.pythonhosted.org/packages/2b/24/dc3dcd77ac7460ab7e9d2b01a618cb31406902e50e605a8d6091f0a8f7cc/contourpy-1.3.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:00ccd0dbaad6d804ab259820fa7cb0b8036bda0686ef844d24125d8287178ce0", size = 261894, upload-time = "2024-08-27T20:57:23.873Z" }, - { url = "https://files.pythonhosted.org/packages/b1/db/531642a01cfec39d1682e46b5457b07cf805e3c3c584ec27e2a6223f8f6c/contourpy-1.3.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8ca947601224119117f7c19c9cdf6b3ab54c5726ef1d906aa4a69dfb6dd58102", size = 311099, upload-time = "2024-08-27T20:57:28.58Z" }, - { url = "https://files.pythonhosted.org/packages/38/1e/94bda024d629f254143a134eead69e21c836429a2a6ce82209a00ddcb79a/contourpy-1.3.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:c6ec93afeb848a0845a18989da3beca3eec2c0f852322efe21af1931147d12cb", size = 215838, upload-time = "2024-08-27T20:57:32.913Z" }, -] - [[package]] name = "contourpy" version = "1.3.2" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version == '3.10.*' and sys_platform == 'win32'", - "python_full_version == '3.10.*' and sys_platform != 'win32'", + "python_full_version < '3.11' and sys_platform == 'win32'", + "python_full_version < '3.11' and sys_platform != 'win32'", ] dependencies = [ - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.10.*'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/66/54/eb9bfc647b19f2009dd5c7f5ec51c4e6ca831725f1aea7a993034f483147/contourpy-1.3.2.tar.gz", hash = "sha256:b6945942715a034c671b7fc54f9588126b0b8bf23db2696e3ca8328f3ff0ab54", size = 13466130, upload-time = "2025-04-15T17:47:53.79Z" } wheels = [ @@ -1304,139 +1102,10 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/0c/58/bd257695f39d05594ca4ad60df5bcb7e32247f9951fd09a9b8edb82d1daa/contourpy-1.3.3-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:3d1a3799d62d45c18bafd41c5fa05120b96a28079f2393af559b843d1a966a77", size = 225315, upload-time = "2025-07-26T12:02:58.801Z" }, ] -[[package]] -name = "coverage" -version = "7.10.7" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.10'", -] -sdist = { url = "https://files.pythonhosted.org/packages/51/26/d22c300112504f5f9a9fd2297ce33c35f3d353e4aeb987c8419453b2a7c2/coverage-7.10.7.tar.gz", hash = "sha256:f4ab143ab113be368a3e9b795f9cd7906c5ef407d6173fe9675a902e1fffc239", size = 827704, upload-time = "2025-09-21T20:03:56.815Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e5/6c/3a3f7a46888e69d18abe3ccc6fe4cb16cccb1e6a2f99698931dafca489e6/coverage-7.10.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:fc04cc7a3db33664e0c2d10eb8990ff6b3536f6842c9590ae8da4c614b9ed05a", size = 217987, upload-time = "2025-09-21T20:00:57.218Z" }, - { url = "https://files.pythonhosted.org/packages/03/94/952d30f180b1a916c11a56f5c22d3535e943aa22430e9e3322447e520e1c/coverage-7.10.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e201e015644e207139f7e2351980feb7040e6f4b2c2978892f3e3789d1c125e5", size = 218388, upload-time = "2025-09-21T20:01:00.081Z" }, - { url = "https://files.pythonhosted.org/packages/50/2b/9e0cf8ded1e114bcd8b2fd42792b57f1c4e9e4ea1824cde2af93a67305be/coverage-7.10.7-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:240af60539987ced2c399809bd34f7c78e8abe0736af91c3d7d0e795df633d17", size = 245148, upload-time = "2025-09-21T20:01:01.768Z" }, - { url = "https://files.pythonhosted.org/packages/19/20/d0384ac06a6f908783d9b6aa6135e41b093971499ec488e47279f5b846e6/coverage-7.10.7-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:8421e088bc051361b01c4b3a50fd39a4b9133079a2229978d9d30511fd05231b", size = 246958, upload-time = "2025-09-21T20:01:03.355Z" }, - { url = "https://files.pythonhosted.org/packages/60/83/5c283cff3d41285f8eab897651585db908a909c572bdc014bcfaf8a8b6ae/coverage-7.10.7-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6be8ed3039ae7f7ac5ce058c308484787c86e8437e72b30bf5e88b8ea10f3c87", size = 248819, upload-time = "2025-09-21T20:01:04.968Z" }, - { url = "https://files.pythonhosted.org/packages/60/22/02eb98fdc5ff79f423e990d877693e5310ae1eab6cb20ae0b0b9ac45b23b/coverage-7.10.7-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e28299d9f2e889e6d51b1f043f58d5f997c373cc12e6403b90df95b8b047c13e", size = 245754, upload-time = "2025-09-21T20:01:06.321Z" }, - { url = "https://files.pythonhosted.org/packages/b4/bc/25c83bcf3ad141b32cd7dc45485ef3c01a776ca3aa8ef0a93e77e8b5bc43/coverage-7.10.7-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:c4e16bd7761c5e454f4efd36f345286d6f7c5fa111623c355691e2755cae3b9e", size = 246860, upload-time = "2025-09-21T20:01:07.605Z" }, - { url = "https://files.pythonhosted.org/packages/3c/b7/95574702888b58c0928a6e982038c596f9c34d52c5e5107f1eef729399b5/coverage-7.10.7-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:b1c81d0e5e160651879755c9c675b974276f135558cf4ba79fee7b8413a515df", size = 244877, upload-time = "2025-09-21T20:01:08.829Z" }, - { url = "https://files.pythonhosted.org/packages/47/b6/40095c185f235e085df0e0b158f6bd68cc6e1d80ba6c7721dc81d97ec318/coverage-7.10.7-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:606cc265adc9aaedcc84f1f064f0e8736bc45814f15a357e30fca7ecc01504e0", size = 245108, upload-time = "2025-09-21T20:01:10.527Z" }, - { url = "https://files.pythonhosted.org/packages/c8/50/4aea0556da7a4b93ec9168420d170b55e2eb50ae21b25062513d020c6861/coverage-7.10.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:10b24412692df990dbc34f8fb1b6b13d236ace9dfdd68df5b28c2e39cafbba13", size = 245752, upload-time = "2025-09-21T20:01:11.857Z" }, - { url = "https://files.pythonhosted.org/packages/6a/28/ea1a84a60828177ae3b100cb6723838523369a44ec5742313ed7db3da160/coverage-7.10.7-cp310-cp310-win32.whl", hash = "sha256:b51dcd060f18c19290d9b8a9dd1e0181538df2ce0717f562fff6cf74d9fc0b5b", size = 220497, upload-time = "2025-09-21T20:01:13.459Z" }, - { url = "https://files.pythonhosted.org/packages/fc/1a/a81d46bbeb3c3fd97b9602ebaa411e076219a150489bcc2c025f151bd52d/coverage-7.10.7-cp310-cp310-win_amd64.whl", hash = "sha256:3a622ac801b17198020f09af3eaf45666b344a0d69fc2a6ffe2ea83aeef1d807", size = 221392, upload-time = "2025-09-21T20:01:14.722Z" }, - { url = "https://files.pythonhosted.org/packages/d2/5d/c1a17867b0456f2e9ce2d8d4708a4c3a089947d0bec9c66cdf60c9e7739f/coverage-7.10.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a609f9c93113be646f44c2a0256d6ea375ad047005d7f57a5c15f614dc1b2f59", size = 218102, upload-time = "2025-09-21T20:01:16.089Z" }, - { url = "https://files.pythonhosted.org/packages/54/f0/514dcf4b4e3698b9a9077f084429681bf3aad2b4a72578f89d7f643eb506/coverage-7.10.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:65646bb0359386e07639c367a22cf9b5bf6304e8630b565d0626e2bdf329227a", size = 218505, upload-time = "2025-09-21T20:01:17.788Z" }, - { url = "https://files.pythonhosted.org/packages/20/f6/9626b81d17e2a4b25c63ac1b425ff307ecdeef03d67c9a147673ae40dc36/coverage-7.10.7-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:5f33166f0dfcce728191f520bd2692914ec70fac2713f6bf3ce59c3deacb4699", size = 248898, upload-time = "2025-09-21T20:01:19.488Z" }, - { url = "https://files.pythonhosted.org/packages/b0/ef/bd8e719c2f7417ba03239052e099b76ea1130ac0cbb183ee1fcaa58aaff3/coverage-7.10.7-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:35f5e3f9e455bb17831876048355dca0f758b6df22f49258cb5a91da23ef437d", size = 250831, upload-time = "2025-09-21T20:01:20.817Z" }, - { url = "https://files.pythonhosted.org/packages/a5/b6/bf054de41ec948b151ae2b79a55c107f5760979538f5fb80c195f2517718/coverage-7.10.7-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4da86b6d62a496e908ac2898243920c7992499c1712ff7c2b6d837cc69d9467e", size = 252937, upload-time = "2025-09-21T20:01:22.171Z" }, - { url = "https://files.pythonhosted.org/packages/0f/e5/3860756aa6f9318227443c6ce4ed7bf9e70bb7f1447a0353f45ac5c7974b/coverage-7.10.7-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:6b8b09c1fad947c84bbbc95eca841350fad9cbfa5a2d7ca88ac9f8d836c92e23", size = 249021, upload-time = "2025-09-21T20:01:23.907Z" }, - { url = "https://files.pythonhosted.org/packages/26/0f/bd08bd042854f7fd07b45808927ebcce99a7ed0f2f412d11629883517ac2/coverage-7.10.7-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:4376538f36b533b46f8971d3a3e63464f2c7905c9800db97361c43a2b14792ab", size = 250626, upload-time = "2025-09-21T20:01:25.721Z" }, - { url = "https://files.pythonhosted.org/packages/8e/a7/4777b14de4abcc2e80c6b1d430f5d51eb18ed1d75fca56cbce5f2db9b36e/coverage-7.10.7-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:121da30abb574f6ce6ae09840dae322bef734480ceafe410117627aa54f76d82", size = 248682, upload-time = "2025-09-21T20:01:27.105Z" }, - { url = "https://files.pythonhosted.org/packages/34/72/17d082b00b53cd45679bad682fac058b87f011fd8b9fe31d77f5f8d3a4e4/coverage-7.10.7-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:88127d40df529336a9836870436fc2751c339fbaed3a836d42c93f3e4bd1d0a2", size = 248402, upload-time = "2025-09-21T20:01:28.629Z" }, - { url = "https://files.pythonhosted.org/packages/81/7a/92367572eb5bdd6a84bfa278cc7e97db192f9f45b28c94a9ca1a921c3577/coverage-7.10.7-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ba58bbcd1b72f136080c0bccc2400d66cc6115f3f906c499013d065ac33a4b61", size = 249320, upload-time = "2025-09-21T20:01:30.004Z" }, - { url = "https://files.pythonhosted.org/packages/2f/88/a23cc185f6a805dfc4fdf14a94016835eeb85e22ac3a0e66d5e89acd6462/coverage-7.10.7-cp311-cp311-win32.whl", hash = "sha256:972b9e3a4094b053a4e46832b4bc829fc8a8d347160eb39d03f1690316a99c14", size = 220536, upload-time = "2025-09-21T20:01:32.184Z" }, - { url = "https://files.pythonhosted.org/packages/fe/ef/0b510a399dfca17cec7bc2f05ad8bd78cf55f15c8bc9a73ab20c5c913c2e/coverage-7.10.7-cp311-cp311-win_amd64.whl", hash = "sha256:a7b55a944a7f43892e28ad4bc0561dfd5f0d73e605d1aa5c3c976b52aea121d2", size = 221425, upload-time = "2025-09-21T20:01:33.557Z" }, - { url = "https://files.pythonhosted.org/packages/51/7f/023657f301a276e4ba1850f82749bc136f5a7e8768060c2e5d9744a22951/coverage-7.10.7-cp311-cp311-win_arm64.whl", hash = "sha256:736f227fb490f03c6488f9b6d45855f8e0fd749c007f9303ad30efab0e73c05a", size = 220103, upload-time = "2025-09-21T20:01:34.929Z" }, - { url = "https://files.pythonhosted.org/packages/13/e4/eb12450f71b542a53972d19117ea5a5cea1cab3ac9e31b0b5d498df1bd5a/coverage-7.10.7-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7bb3b9ddb87ef7725056572368040c32775036472d5a033679d1fa6c8dc08417", size = 218290, upload-time = "2025-09-21T20:01:36.455Z" }, - { url = "https://files.pythonhosted.org/packages/37/66/593f9be12fc19fb36711f19a5371af79a718537204d16ea1d36f16bd78d2/coverage-7.10.7-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:18afb24843cbc175687225cab1138c95d262337f5473512010e46831aa0c2973", size = 218515, upload-time = "2025-09-21T20:01:37.982Z" }, - { url = "https://files.pythonhosted.org/packages/66/80/4c49f7ae09cafdacc73fbc30949ffe77359635c168f4e9ff33c9ebb07838/coverage-7.10.7-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:399a0b6347bcd3822be369392932884b8216d0944049ae22925631a9b3d4ba4c", size = 250020, upload-time = "2025-09-21T20:01:39.617Z" }, - { url = "https://files.pythonhosted.org/packages/a6/90/a64aaacab3b37a17aaedd83e8000142561a29eb262cede42d94a67f7556b/coverage-7.10.7-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:314f2c326ded3f4b09be11bc282eb2fc861184bc95748ae67b360ac962770be7", size = 252769, upload-time = "2025-09-21T20:01:41.341Z" }, - { url = "https://files.pythonhosted.org/packages/98/2e/2dda59afd6103b342e096f246ebc5f87a3363b5412609946c120f4e7750d/coverage-7.10.7-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c41e71c9cfb854789dee6fc51e46743a6d138b1803fab6cb860af43265b42ea6", size = 253901, upload-time = "2025-09-21T20:01:43.042Z" }, - { url = "https://files.pythonhosted.org/packages/53/dc/8d8119c9051d50f3119bb4a75f29f1e4a6ab9415cd1fa8bf22fcc3fb3b5f/coverage-7.10.7-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:bc01f57ca26269c2c706e838f6422e2a8788e41b3e3c65e2f41148212e57cd59", size = 250413, upload-time = "2025-09-21T20:01:44.469Z" }, - { url = "https://files.pythonhosted.org/packages/98/b3/edaff9c5d79ee4d4b6d3fe046f2b1d799850425695b789d491a64225d493/coverage-7.10.7-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a6442c59a8ac8b85812ce33bc4d05bde3fb22321fa8294e2a5b487c3505f611b", size = 251820, upload-time = "2025-09-21T20:01:45.915Z" }, - { url = "https://files.pythonhosted.org/packages/11/25/9a0728564bb05863f7e513e5a594fe5ffef091b325437f5430e8cfb0d530/coverage-7.10.7-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:78a384e49f46b80fb4c901d52d92abe098e78768ed829c673fbb53c498bef73a", size = 249941, upload-time = "2025-09-21T20:01:47.296Z" }, - { url = "https://files.pythonhosted.org/packages/e0/fd/ca2650443bfbef5b0e74373aac4df67b08180d2f184b482c41499668e258/coverage-7.10.7-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:5e1e9802121405ede4b0133aa4340ad8186a1d2526de5b7c3eca519db7bb89fb", size = 249519, upload-time = "2025-09-21T20:01:48.73Z" }, - { url = "https://files.pythonhosted.org/packages/24/79/f692f125fb4299b6f963b0745124998ebb8e73ecdfce4ceceb06a8c6bec5/coverage-7.10.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:d41213ea25a86f69efd1575073d34ea11aabe075604ddf3d148ecfec9e1e96a1", size = 251375, upload-time = "2025-09-21T20:01:50.529Z" }, - { url = "https://files.pythonhosted.org/packages/5e/75/61b9bbd6c7d24d896bfeec57acba78e0f8deac68e6baf2d4804f7aae1f88/coverage-7.10.7-cp312-cp312-win32.whl", hash = "sha256:77eb4c747061a6af8d0f7bdb31f1e108d172762ef579166ec84542f711d90256", size = 220699, upload-time = "2025-09-21T20:01:51.941Z" }, - { url = "https://files.pythonhosted.org/packages/ca/f3/3bf7905288b45b075918d372498f1cf845b5b579b723c8fd17168018d5f5/coverage-7.10.7-cp312-cp312-win_amd64.whl", hash = "sha256:f51328ffe987aecf6d09f3cd9d979face89a617eacdaea43e7b3080777f647ba", size = 221512, upload-time = "2025-09-21T20:01:53.481Z" }, - { url = "https://files.pythonhosted.org/packages/5c/44/3e32dbe933979d05cf2dac5e697c8599cfe038aaf51223ab901e208d5a62/coverage-7.10.7-cp312-cp312-win_arm64.whl", hash = "sha256:bda5e34f8a75721c96085903c6f2197dc398c20ffd98df33f866a9c8fd95f4bf", size = 220147, upload-time = "2025-09-21T20:01:55.2Z" }, - { url = "https://files.pythonhosted.org/packages/9a/94/b765c1abcb613d103b64fcf10395f54d69b0ef8be6a0dd9c524384892cc7/coverage-7.10.7-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:981a651f543f2854abd3b5fcb3263aac581b18209be49863ba575de6edf4c14d", size = 218320, upload-time = "2025-09-21T20:01:56.629Z" }, - { url = "https://files.pythonhosted.org/packages/72/4f/732fff31c119bb73b35236dd333030f32c4bfe909f445b423e6c7594f9a2/coverage-7.10.7-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:73ab1601f84dc804f7812dc297e93cd99381162da39c47040a827d4e8dafe63b", size = 218575, upload-time = "2025-09-21T20:01:58.203Z" }, - { url = "https://files.pythonhosted.org/packages/87/02/ae7e0af4b674be47566707777db1aa375474f02a1d64b9323e5813a6cdd5/coverage-7.10.7-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:a8b6f03672aa6734e700bbcd65ff050fd19cddfec4b031cc8cf1c6967de5a68e", size = 249568, upload-time = "2025-09-21T20:01:59.748Z" }, - { url = "https://files.pythonhosted.org/packages/a2/77/8c6d22bf61921a59bce5471c2f1f7ac30cd4ac50aadde72b8c48d5727902/coverage-7.10.7-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:10b6ba00ab1132a0ce4428ff68cf50a25efd6840a42cdf4239c9b99aad83be8b", size = 252174, upload-time = "2025-09-21T20:02:01.192Z" }, - { url = "https://files.pythonhosted.org/packages/b1/20/b6ea4f69bbb52dac0aebd62157ba6a9dddbfe664f5af8122dac296c3ee15/coverage-7.10.7-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c79124f70465a150e89340de5963f936ee97097d2ef76c869708c4248c63ca49", size = 253447, upload-time = "2025-09-21T20:02:02.701Z" }, - { url = "https://files.pythonhosted.org/packages/f9/28/4831523ba483a7f90f7b259d2018fef02cb4d5b90bc7c1505d6e5a84883c/coverage-7.10.7-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:69212fbccdbd5b0e39eac4067e20a4a5256609e209547d86f740d68ad4f04911", size = 249779, upload-time = "2025-09-21T20:02:04.185Z" }, - { url = "https://files.pythonhosted.org/packages/a7/9f/4331142bc98c10ca6436d2d620c3e165f31e6c58d43479985afce6f3191c/coverage-7.10.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:7ea7c6c9d0d286d04ed3541747e6597cbe4971f22648b68248f7ddcd329207f0", size = 251604, upload-time = "2025-09-21T20:02:06.034Z" }, - { url = "https://files.pythonhosted.org/packages/ce/60/bda83b96602036b77ecf34e6393a3836365481b69f7ed7079ab85048202b/coverage-7.10.7-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:b9be91986841a75042b3e3243d0b3cb0b2434252b977baaf0cd56e960fe1e46f", size = 249497, upload-time = "2025-09-21T20:02:07.619Z" }, - { url = "https://files.pythonhosted.org/packages/5f/af/152633ff35b2af63977edd835d8e6430f0caef27d171edf2fc76c270ef31/coverage-7.10.7-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:b281d5eca50189325cfe1f365fafade89b14b4a78d9b40b05ddd1fc7d2a10a9c", size = 249350, upload-time = "2025-09-21T20:02:10.34Z" }, - { url = "https://files.pythonhosted.org/packages/9d/71/d92105d122bd21cebba877228990e1646d862e34a98bb3374d3fece5a794/coverage-7.10.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:99e4aa63097ab1118e75a848a28e40d68b08a5e19ce587891ab7fd04475e780f", size = 251111, upload-time = "2025-09-21T20:02:12.122Z" }, - { url = "https://files.pythonhosted.org/packages/a2/9e/9fdb08f4bf476c912f0c3ca292e019aab6712c93c9344a1653986c3fd305/coverage-7.10.7-cp313-cp313-win32.whl", hash = "sha256:dc7c389dce432500273eaf48f410b37886be9208b2dd5710aaf7c57fd442c698", size = 220746, upload-time = "2025-09-21T20:02:13.919Z" }, - { url = "https://files.pythonhosted.org/packages/b1/b1/a75fd25df44eab52d1931e89980d1ada46824c7a3210be0d3c88a44aaa99/coverage-7.10.7-cp313-cp313-win_amd64.whl", hash = "sha256:cac0fdca17b036af3881a9d2729a850b76553f3f716ccb0360ad4dbc06b3b843", size = 221541, upload-time = "2025-09-21T20:02:15.57Z" }, - { url = "https://files.pythonhosted.org/packages/14/3a/d720d7c989562a6e9a14b2c9f5f2876bdb38e9367126d118495b89c99c37/coverage-7.10.7-cp313-cp313-win_arm64.whl", hash = "sha256:4b6f236edf6e2f9ae8fcd1332da4e791c1b6ba0dc16a2dc94590ceccb482e546", size = 220170, upload-time = "2025-09-21T20:02:17.395Z" }, - { url = "https://files.pythonhosted.org/packages/bb/22/e04514bf2a735d8b0add31d2b4ab636fc02370730787c576bb995390d2d5/coverage-7.10.7-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:a0ec07fd264d0745ee396b666d47cef20875f4ff2375d7c4f58235886cc1ef0c", size = 219029, upload-time = "2025-09-21T20:02:18.936Z" }, - { url = "https://files.pythonhosted.org/packages/11/0b/91128e099035ece15da3445d9015e4b4153a6059403452d324cbb0a575fa/coverage-7.10.7-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:dd5e856ebb7bfb7672b0086846db5afb4567a7b9714b8a0ebafd211ec7ce6a15", size = 219259, upload-time = "2025-09-21T20:02:20.44Z" }, - { url = "https://files.pythonhosted.org/packages/8b/51/66420081e72801536a091a0c8f8c1f88a5c4bf7b9b1bdc6222c7afe6dc9b/coverage-7.10.7-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:f57b2a3c8353d3e04acf75b3fed57ba41f5c0646bbf1d10c7c282291c97936b4", size = 260592, upload-time = "2025-09-21T20:02:22.313Z" }, - { url = "https://files.pythonhosted.org/packages/5d/22/9b8d458c2881b22df3db5bb3e7369e63d527d986decb6c11a591ba2364f7/coverage-7.10.7-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:1ef2319dd15a0b009667301a3f84452a4dc6fddfd06b0c5c53ea472d3989fbf0", size = 262768, upload-time = "2025-09-21T20:02:24.287Z" }, - { url = "https://files.pythonhosted.org/packages/f7/08/16bee2c433e60913c610ea200b276e8eeef084b0d200bdcff69920bd5828/coverage-7.10.7-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:83082a57783239717ceb0ad584de3c69cf581b2a95ed6bf81ea66034f00401c0", size = 264995, upload-time = "2025-09-21T20:02:26.133Z" }, - { url = "https://files.pythonhosted.org/packages/20/9d/e53eb9771d154859b084b90201e5221bca7674ba449a17c101a5031d4054/coverage-7.10.7-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:50aa94fb1fb9a397eaa19c0d5ec15a5edd03a47bf1a3a6111a16b36e190cff65", size = 259546, upload-time = "2025-09-21T20:02:27.716Z" }, - { url = "https://files.pythonhosted.org/packages/ad/b0/69bc7050f8d4e56a89fb550a1577d5d0d1db2278106f6f626464067b3817/coverage-7.10.7-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:2120043f147bebb41c85b97ac45dd173595ff14f2a584f2963891cbcc3091541", size = 262544, upload-time = "2025-09-21T20:02:29.216Z" }, - { url = "https://files.pythonhosted.org/packages/ef/4b/2514b060dbd1bc0aaf23b852c14bb5818f244c664cb16517feff6bb3a5ab/coverage-7.10.7-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:2fafd773231dd0378fdba66d339f84904a8e57a262f583530f4f156ab83863e6", size = 260308, upload-time = "2025-09-21T20:02:31.226Z" }, - { url = "https://files.pythonhosted.org/packages/54/78/7ba2175007c246d75e496f64c06e94122bdb914790a1285d627a918bd271/coverage-7.10.7-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:0b944ee8459f515f28b851728ad224fa2d068f1513ef6b7ff1efafeb2185f999", size = 258920, upload-time = "2025-09-21T20:02:32.823Z" }, - { url = "https://files.pythonhosted.org/packages/c0/b3/fac9f7abbc841409b9a410309d73bfa6cfb2e51c3fada738cb607ce174f8/coverage-7.10.7-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:4b583b97ab2e3efe1b3e75248a9b333bd3f8b0b1b8e5b45578e05e5850dfb2c2", size = 261434, upload-time = "2025-09-21T20:02:34.86Z" }, - { url = "https://files.pythonhosted.org/packages/ee/51/a03bec00d37faaa891b3ff7387192cef20f01604e5283a5fabc95346befa/coverage-7.10.7-cp313-cp313t-win32.whl", hash = "sha256:2a78cd46550081a7909b3329e2266204d584866e8d97b898cd7fb5ac8d888b1a", size = 221403, upload-time = "2025-09-21T20:02:37.034Z" }, - { url = "https://files.pythonhosted.org/packages/53/22/3cf25d614e64bf6d8e59c7c669b20d6d940bb337bdee5900b9ca41c820bb/coverage-7.10.7-cp313-cp313t-win_amd64.whl", hash = "sha256:33a5e6396ab684cb43dc7befa386258acb2d7fae7f67330ebb85ba4ea27938eb", size = 222469, upload-time = "2025-09-21T20:02:39.011Z" }, - { url = "https://files.pythonhosted.org/packages/49/a1/00164f6d30d8a01c3c9c48418a7a5be394de5349b421b9ee019f380df2a0/coverage-7.10.7-cp313-cp313t-win_arm64.whl", hash = "sha256:86b0e7308289ddde73d863b7683f596d8d21c7d8664ce1dee061d0bcf3fbb4bb", size = 220731, upload-time = "2025-09-21T20:02:40.939Z" }, - { url = "https://files.pythonhosted.org/packages/23/9c/5844ab4ca6a4dd97a1850e030a15ec7d292b5c5cb93082979225126e35dd/coverage-7.10.7-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:b06f260b16ead11643a5a9f955bd4b5fd76c1a4c6796aeade8520095b75de520", size = 218302, upload-time = "2025-09-21T20:02:42.527Z" }, - { url = "https://files.pythonhosted.org/packages/f0/89/673f6514b0961d1f0e20ddc242e9342f6da21eaba3489901b565c0689f34/coverage-7.10.7-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:212f8f2e0612778f09c55dd4872cb1f64a1f2b074393d139278ce902064d5b32", size = 218578, upload-time = "2025-09-21T20:02:44.468Z" }, - { url = "https://files.pythonhosted.org/packages/05/e8/261cae479e85232828fb17ad536765c88dd818c8470aca690b0ac6feeaa3/coverage-7.10.7-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:3445258bcded7d4aa630ab8296dea4d3f15a255588dd535f980c193ab6b95f3f", size = 249629, upload-time = "2025-09-21T20:02:46.503Z" }, - { url = "https://files.pythonhosted.org/packages/82/62/14ed6546d0207e6eda876434e3e8475a3e9adbe32110ce896c9e0c06bb9a/coverage-7.10.7-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:bb45474711ba385c46a0bfe696c695a929ae69ac636cda8f532be9e8c93d720a", size = 252162, upload-time = "2025-09-21T20:02:48.689Z" }, - { url = "https://files.pythonhosted.org/packages/ff/49/07f00db9ac6478e4358165a08fb41b469a1b053212e8a00cb02f0d27a05f/coverage-7.10.7-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:813922f35bd800dca9994c5971883cbc0d291128a5de6b167c7aa697fcf59360", size = 253517, upload-time = "2025-09-21T20:02:50.31Z" }, - { url = "https://files.pythonhosted.org/packages/a2/59/c5201c62dbf165dfbc91460f6dbbaa85a8b82cfa6131ac45d6c1bfb52deb/coverage-7.10.7-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:93c1b03552081b2a4423091d6fb3787265b8f86af404cff98d1b5342713bdd69", size = 249632, upload-time = "2025-09-21T20:02:51.971Z" }, - { url = "https://files.pythonhosted.org/packages/07/ae/5920097195291a51fb00b3a70b9bbd2edbfe3c84876a1762bd1ef1565ebc/coverage-7.10.7-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:cc87dd1b6eaf0b848eebb1c86469b9f72a1891cb42ac7adcfbce75eadb13dd14", size = 251520, upload-time = "2025-09-21T20:02:53.858Z" }, - { url = "https://files.pythonhosted.org/packages/b9/3c/a815dde77a2981f5743a60b63df31cb322c944843e57dbd579326625a413/coverage-7.10.7-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:39508ffda4f343c35f3236fe8d1a6634a51f4581226a1262769d7f970e73bffe", size = 249455, upload-time = "2025-09-21T20:02:55.807Z" }, - { url = "https://files.pythonhosted.org/packages/aa/99/f5cdd8421ea656abefb6c0ce92556709db2265c41e8f9fc6c8ae0f7824c9/coverage-7.10.7-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:925a1edf3d810537c5a3abe78ec5530160c5f9a26b1f4270b40e62cc79304a1e", size = 249287, upload-time = "2025-09-21T20:02:57.784Z" }, - { url = "https://files.pythonhosted.org/packages/c3/7a/e9a2da6a1fc5d007dd51fca083a663ab930a8c4d149c087732a5dbaa0029/coverage-7.10.7-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:2c8b9a0636f94c43cd3576811e05b89aa9bc2d0a85137affc544ae5cb0e4bfbd", size = 250946, upload-time = "2025-09-21T20:02:59.431Z" }, - { url = "https://files.pythonhosted.org/packages/ef/5b/0b5799aa30380a949005a353715095d6d1da81927d6dbed5def2200a4e25/coverage-7.10.7-cp314-cp314-win32.whl", hash = "sha256:b7b8288eb7cdd268b0304632da8cb0bb93fadcfec2fe5712f7b9cc8f4d487be2", size = 221009, upload-time = "2025-09-21T20:03:01.324Z" }, - { url = "https://files.pythonhosted.org/packages/da/b0/e802fbb6eb746de006490abc9bb554b708918b6774b722bb3a0e6aa1b7de/coverage-7.10.7-cp314-cp314-win_amd64.whl", hash = "sha256:1ca6db7c8807fb9e755d0379ccc39017ce0a84dcd26d14b5a03b78563776f681", size = 221804, upload-time = "2025-09-21T20:03:03.4Z" }, - { url = "https://files.pythonhosted.org/packages/9e/e8/71d0c8e374e31f39e3389bb0bd19e527d46f00ea8571ec7ec8fd261d8b44/coverage-7.10.7-cp314-cp314-win_arm64.whl", hash = "sha256:097c1591f5af4496226d5783d036bf6fd6cd0cbc132e071b33861de756efb880", size = 220384, upload-time = "2025-09-21T20:03:05.111Z" }, - { url = "https://files.pythonhosted.org/packages/62/09/9a5608d319fa3eba7a2019addeacb8c746fb50872b57a724c9f79f146969/coverage-7.10.7-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:a62c6ef0d50e6de320c270ff91d9dd0a05e7250cac2a800b7784bae474506e63", size = 219047, upload-time = "2025-09-21T20:03:06.795Z" }, - { url = "https://files.pythonhosted.org/packages/f5/6f/f58d46f33db9f2e3647b2d0764704548c184e6f5e014bef528b7f979ef84/coverage-7.10.7-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:9fa6e4dd51fe15d8738708a973470f67a855ca50002294852e9571cdbd9433f2", size = 219266, upload-time = "2025-09-21T20:03:08.495Z" }, - { url = "https://files.pythonhosted.org/packages/74/5c/183ffc817ba68e0b443b8c934c8795553eb0c14573813415bd59941ee165/coverage-7.10.7-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:8fb190658865565c549b6b4706856d6a7b09302c797eb2cf8e7fe9dabb043f0d", size = 260767, upload-time = "2025-09-21T20:03:10.172Z" }, - { url = "https://files.pythonhosted.org/packages/0f/48/71a8abe9c1ad7e97548835e3cc1adbf361e743e9d60310c5f75c9e7bf847/coverage-7.10.7-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:affef7c76a9ef259187ef31599a9260330e0335a3011732c4b9effa01e1cd6e0", size = 262931, upload-time = "2025-09-21T20:03:11.861Z" }, - { url = "https://files.pythonhosted.org/packages/84/fd/193a8fb132acfc0a901f72020e54be5e48021e1575bb327d8ee1097a28fd/coverage-7.10.7-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6e16e07d85ca0cf8bafe5f5d23a0b850064e8e945d5677492b06bbe6f09cc699", size = 265186, upload-time = "2025-09-21T20:03:13.539Z" }, - { url = "https://files.pythonhosted.org/packages/b1/8f/74ecc30607dd95ad50e3034221113ccb1c6d4e8085cc761134782995daae/coverage-7.10.7-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:03ffc58aacdf65d2a82bbeb1ffe4d01ead4017a21bfd0454983b88ca73af94b9", size = 259470, upload-time = "2025-09-21T20:03:15.584Z" }, - { url = "https://files.pythonhosted.org/packages/0f/55/79ff53a769f20d71b07023ea115c9167c0bb56f281320520cf64c5298a96/coverage-7.10.7-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:1b4fd784344d4e52647fd7857b2af5b3fbe6c239b0b5fa63e94eb67320770e0f", size = 262626, upload-time = "2025-09-21T20:03:17.673Z" }, - { url = "https://files.pythonhosted.org/packages/88/e2/dac66c140009b61ac3fc13af673a574b00c16efdf04f9b5c740703e953c0/coverage-7.10.7-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:0ebbaddb2c19b71912c6f2518e791aa8b9f054985a0769bdb3a53ebbc765c6a1", size = 260386, upload-time = "2025-09-21T20:03:19.36Z" }, - { url = "https://files.pythonhosted.org/packages/a2/f1/f48f645e3f33bb9ca8a496bc4a9671b52f2f353146233ebd7c1df6160440/coverage-7.10.7-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:a2d9a3b260cc1d1dbdb1c582e63ddcf5363426a1a68faa0f5da28d8ee3c722a0", size = 258852, upload-time = "2025-09-21T20:03:21.007Z" }, - { url = "https://files.pythonhosted.org/packages/bb/3b/8442618972c51a7affeead957995cfa8323c0c9bcf8fa5a027421f720ff4/coverage-7.10.7-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:a3cc8638b2480865eaa3926d192e64ce6c51e3d29c849e09d5b4ad95efae5399", size = 261534, upload-time = "2025-09-21T20:03:23.12Z" }, - { url = "https://files.pythonhosted.org/packages/b2/dc/101f3fa3a45146db0cb03f5b4376e24c0aac818309da23e2de0c75295a91/coverage-7.10.7-cp314-cp314t-win32.whl", hash = "sha256:67f8c5cbcd3deb7a60b3345dffc89a961a484ed0af1f6f73de91705cc6e31235", size = 221784, upload-time = "2025-09-21T20:03:24.769Z" }, - { url = "https://files.pythonhosted.org/packages/4c/a1/74c51803fc70a8a40d7346660379e144be772bab4ac7bb6e6b905152345c/coverage-7.10.7-cp314-cp314t-win_amd64.whl", hash = "sha256:e1ed71194ef6dea7ed2d5cb5f7243d4bcd334bfb63e59878519be558078f848d", size = 222905, upload-time = "2025-09-21T20:03:26.93Z" }, - { url = "https://files.pythonhosted.org/packages/12/65/f116a6d2127df30bcafbceef0302d8a64ba87488bf6f73a6d8eebf060873/coverage-7.10.7-cp314-cp314t-win_arm64.whl", hash = "sha256:7fe650342addd8524ca63d77b2362b02345e5f1a093266787d210c70a50b471a", size = 220922, upload-time = "2025-09-21T20:03:28.672Z" }, - { url = "https://files.pythonhosted.org/packages/a3/ad/d1c25053764b4c42eb294aae92ab617d2e4f803397f9c7c8295caa77a260/coverage-7.10.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:fff7b9c3f19957020cac546c70025331113d2e61537f6e2441bc7657913de7d3", size = 217978, upload-time = "2025-09-21T20:03:30.362Z" }, - { url = "https://files.pythonhosted.org/packages/52/2f/b9f9daa39b80ece0b9548bbb723381e29bc664822d9a12c2135f8922c22b/coverage-7.10.7-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:bc91b314cef27742da486d6839b677b3f2793dfe52b51bbbb7cf736d5c29281c", size = 218370, upload-time = "2025-09-21T20:03:32.147Z" }, - { url = "https://files.pythonhosted.org/packages/dd/6e/30d006c3b469e58449650642383dddf1c8fb63d44fdf92994bfd46570695/coverage-7.10.7-cp39-cp39-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:567f5c155eda8df1d3d439d40a45a6a5f029b429b06648235f1e7e51b522b396", size = 244802, upload-time = "2025-09-21T20:03:33.919Z" }, - { url = "https://files.pythonhosted.org/packages/b0/49/8a070782ce7e6b94ff6a0b6d7c65ba6bc3091d92a92cef4cd4eb0767965c/coverage-7.10.7-cp39-cp39-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:2af88deffcc8a4d5974cf2d502251bc3b2db8461f0b66d80a449c33757aa9f40", size = 246625, upload-time = "2025-09-21T20:03:36.09Z" }, - { url = "https://files.pythonhosted.org/packages/6a/92/1c1c5a9e8677ce56d42b97bdaca337b2d4d9ebe703d8c174ede52dbabd5f/coverage-7.10.7-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c7315339eae3b24c2d2fa1ed7d7a38654cba34a13ef19fbcb9425da46d3dc594", size = 248399, upload-time = "2025-09-21T20:03:38.342Z" }, - { url = "https://files.pythonhosted.org/packages/c0/54/b140edee7257e815de7426d5d9846b58505dffc29795fff2dfb7f8a1c5a0/coverage-7.10.7-cp39-cp39-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:912e6ebc7a6e4adfdbb1aec371ad04c68854cd3bf3608b3514e7ff9062931d8a", size = 245142, upload-time = "2025-09-21T20:03:40.591Z" }, - { url = "https://files.pythonhosted.org/packages/e4/9e/6d6b8295940b118e8b7083b29226c71f6154f7ff41e9ca431f03de2eac0d/coverage-7.10.7-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:f49a05acd3dfe1ce9715b657e28d138578bc40126760efb962322c56e9ca344b", size = 246284, upload-time = "2025-09-21T20:03:42.355Z" }, - { url = "https://files.pythonhosted.org/packages/db/e5/5e957ca747d43dbe4d9714358375c7546cb3cb533007b6813fc20fce37ad/coverage-7.10.7-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:cce2109b6219f22ece99db7644b9622f54a4e915dad65660ec435e89a3ea7cc3", size = 244353, upload-time = "2025-09-21T20:03:44.218Z" }, - { url = "https://files.pythonhosted.org/packages/9a/45/540fc5cc92536a1b783b7ef99450bd55a4b3af234aae35a18a339973ce30/coverage-7.10.7-cp39-cp39-musllinux_1_2_riscv64.whl", hash = "sha256:f3c887f96407cea3916294046fc7dab611c2552beadbed4ea901cbc6a40cc7a0", size = 244430, upload-time = "2025-09-21T20:03:46.065Z" }, - { url = "https://files.pythonhosted.org/packages/75/0b/8287b2e5b38c8fe15d7e3398849bb58d382aedc0864ea0fa1820e8630491/coverage-7.10.7-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:635adb9a4507c9fd2ed65f39693fa31c9a3ee3a8e6dc64df033e8fdf52a7003f", size = 245311, upload-time = "2025-09-21T20:03:48.19Z" }, - { url = "https://files.pythonhosted.org/packages/0c/1d/29724999984740f0c86d03e6420b942439bf5bd7f54d4382cae386a9d1e9/coverage-7.10.7-cp39-cp39-win32.whl", hash = "sha256:5a02d5a850e2979b0a014c412573953995174743a3f7fa4ea5a6e9a3c5617431", size = 220500, upload-time = "2025-09-21T20:03:50.024Z" }, - { url = "https://files.pythonhosted.org/packages/43/11/4b1e6b129943f905ca54c339f343877b55b365ae2558806c1be4f7476ed5/coverage-7.10.7-cp39-cp39-win_amd64.whl", hash = "sha256:c134869d5ffe34547d14e174c866fd8fe2254918cc0a95e99052903bc1543e07", size = 221408, upload-time = "2025-09-21T20:03:51.803Z" }, - { url = "https://files.pythonhosted.org/packages/ec/16/114df1c291c22cac3b0c127a73e0af5c12ed7bbb6558d310429a0ae24023/coverage-7.10.7-py3-none-any.whl", hash = "sha256:f7941f6f2fe6dd6807a1208737b8a0cbcf1cc6d7b07d24998ad2d63590868260", size = 209952, upload-time = "2025-09-21T20:03:53.918Z" }, -] - -[package.optional-dependencies] -toml = [ - { name = "tomli", marker = "python_full_version < '3.10'" }, -] - [[package]] name = "coverage" version = "7.11.3" source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.14' and sys_platform == 'win32'", - "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32'", - "python_full_version == '3.11.*' and sys_platform == 'win32'", - "python_full_version >= '3.14' and sys_platform != 'win32'", - "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'win32'", - "python_full_version == '3.11.*' and sys_platform != 'win32'", - "python_full_version == '3.10.*' and sys_platform == 'win32'", - "python_full_version == '3.10.*' and sys_platform != 'win32'", -] sdist = { url = "https://files.pythonhosted.org/packages/d2/59/9698d57a3b11704c7b89b21d69e9d23ecf80d538cabb536c8b63f4a12322/coverage-7.11.3.tar.gz", hash = "sha256:0f59387f5e6edbbffec2281affb71cdc85e0776c1745150a3ab9b6c1d016106b", size = 815210, upload-time = "2025-11-10T00:13:17.18Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/fd/68/b53157115ef76d50d1d916d6240e5cd5b3c14dba8ba1b984632b8221fc2e/coverage-7.11.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0c986537abca9b064510f3fd104ba33e98d3036608c7f2f5537f869bc10e1ee5", size = 216377, upload-time = "2025-11-10T00:10:27.317Z" }, @@ -1534,7 +1203,7 @@ wheels = [ [package.optional-dependencies] toml = [ - { name = "tomli", marker = "python_full_version >= '3.10' and python_full_version <= '3.11'" }, + { name = "tomli", marker = "python_full_version <= '3.11'" }, ] [[package]] @@ -1602,39 +1271,13 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/0d/c3/e90f4a4feae6410f914f8ebac129b9ae7a8c92eb60a638012dde42030a9d/cryptography-46.0.3-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:6b5063083824e5509fdba180721d55909ffacccc8adbec85268b48439423d78c", size = 3438528, upload-time = "2025-10-15T23:18:26.227Z" }, ] -[[package]] -name = "curtsies" -version = "0.4.2" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.10'", -] -dependencies = [ - { name = "blessed", marker = "python_full_version < '3.10'" }, - { name = "cwcwidth", version = "0.1.10", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/53/d2/ea91db929b5dcded637382235f9f1b7d06ef64b7f2af7fe1be1369e1f0d2/curtsies-0.4.2.tar.gz", hash = "sha256:6ebe33215bd7c92851a506049c720cca4cf5c192c1665c1d7a98a04c4702760e", size = 53559, upload-time = "2023-07-31T20:18:34.271Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/5e/ab/c4ae7ff01c75001829dfa54da9b25632a8206fa5c9036ea0292096b402d0/curtsies-0.4.2-py3-none-any.whl", hash = "sha256:f24d676a8c4711fb9edba1ab7e6134bc52305a222980b3b717bb303f5e94cec6", size = 35444, upload-time = "2023-07-31T20:18:33.058Z" }, -] - [[package]] name = "curtsies" version = "0.4.3" source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.14' and sys_platform == 'win32'", - "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32'", - "python_full_version == '3.11.*' and sys_platform == 'win32'", - "python_full_version >= '3.14' and sys_platform != 'win32'", - "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'win32'", - "python_full_version == '3.11.*' and sys_platform != 'win32'", - "python_full_version == '3.10.*' and sys_platform == 'win32'", - "python_full_version == '3.10.*' and sys_platform != 'win32'", -] dependencies = [ - { name = "blessed", marker = "python_full_version >= '3.10'" }, - { name = "cwcwidth", version = "0.1.11", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.10.*'" }, + { name = "blessed" }, + { name = "cwcwidth", version = "0.1.11", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, { name = "cwcwidth", version = "0.1.12", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/d1/18/5741cb42624089a815520d5b65c39c3e59673a77fd1fab6ad65bdebf2f91/curtsies-0.4.3.tar.gz", hash = "sha256:102a0ffbf952124f1be222fd6989da4ec7cce04e49f613009e5f54ad37618825", size = 53401, upload-time = "2025-06-05T06:33:20.099Z" } @@ -1642,59 +1285,13 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/ab/9b/b8ee3720d056309f4ab667bfc85995c4351f67b22e8c2008612b70350c3a/curtsies-0.4.3-py3-none-any.whl", hash = "sha256:65a1b4d6ff887bd9b0f0836cc6dc68c3a2c65c57f51a62f0ee5df408edee1a99", size = 35482, upload-time = "2025-06-05T06:33:19.122Z" }, ] -[[package]] -name = "cwcwidth" -version = "0.1.10" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.10'", -] -sdist = { url = "https://files.pythonhosted.org/packages/23/76/03fc9fb3441a13e9208bb6103ebb7200eba7647d040008b8303a1c03e152/cwcwidth-0.1.10.tar.gz", hash = "sha256:7468760f72c1f4107be1b2b2854bc000401ea36a69daed36fb966a1e19a7a124", size = 60265, upload-time = "2025-02-09T21:15:28.452Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/2c/17/13b80df1bf654e1292c72ae6dd5b19e0069d9ee434042d98c8ce26f07c59/cwcwidth-0.1.10-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:71932aaee8cba8be9365b3e4a96fd3cb4f02b3c54085cd18df26d5b90505af19", size = 22786, upload-time = "2025-02-09T21:14:36.347Z" }, - { url = "https://files.pythonhosted.org/packages/ee/49/8c4e4e9fc781ab8da9962435af95b5cd4c0a99a93743465fa27c5fda3819/cwcwidth-0.1.10-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2bcc437fb407850e7b8d700d08215e1f285456774802be072f80715a3054a9ad", size = 89290, upload-time = "2025-02-09T21:14:37.816Z" }, - { url = "https://files.pythonhosted.org/packages/41/2e/1464e54300b98100b6fd3cf3fa9e9c07926a9f54a9d7bc14488d33ad4964/cwcwidth-0.1.10-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d1af5edb0854442cf156497a0f7adf51ea1403a8a93404655d96769fc16307f4", size = 92805, upload-time = "2025-02-09T21:14:39.776Z" }, - { url = "https://files.pythonhosted.org/packages/7f/01/5ce32ddeb618262666ae3da38220ad9955335a24a1e16929706be901dee3/cwcwidth-0.1.10-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:a36396389a4172a89a76a7768519de33873de53b81604a80f57224574a6664e5", size = 90570, upload-time = "2025-02-09T21:14:41.606Z" }, - { url = "https://files.pythonhosted.org/packages/1b/ce/b51f4a7fedb153a02e2c1f88cf6b5277fdf221631ce0d63c12568435c68f/cwcwidth-0.1.10-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:01393cd955ca9de61d845a438cadf02bd689d6c04201b7b06cf9bae57b54c7e0", size = 89746, upload-time = "2025-02-09T21:14:42.631Z" }, - { url = "https://files.pythonhosted.org/packages/43/3f/dd0034a5a76529ad770d7e3a524cefde7c4b8a104e5177fd5c120805c6c7/cwcwidth-0.1.10-cp310-cp310-win32.whl", hash = "sha256:14823e85163160028cc9f122a0448ddadd7f65d494602b2604211e8f3d0a1e10", size = 23278, upload-time = "2025-02-09T21:14:44.59Z" }, - { url = "https://files.pythonhosted.org/packages/ae/25/390e0738b64a7256aca1065bf10adcf103e45af301a935935e7b67929483/cwcwidth-0.1.10-cp310-cp310-win_amd64.whl", hash = "sha256:8e6b20572c6d17605a69c73e1aee86db051f3ebc90e99f2d99e8751c56553d53", size = 25730, upload-time = "2025-02-09T21:14:46.788Z" }, - { url = "https://files.pythonhosted.org/packages/d3/9d/2e07caf8d141933f063b302acf266117f3ea574cf4b0ac6e3eebc586494c/cwcwidth-0.1.10-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:849091bb6845a9ddb74497b9345eb2610fb4dff4f12263fb393dd62142163046", size = 22758, upload-time = "2025-02-09T21:14:48.473Z" }, - { url = "https://files.pythonhosted.org/packages/c8/61/a8ac0533ae887aed7561a1777a2b7db17a0de73a47cc00d3ea8c24c15bf7/cwcwidth-0.1.10-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:74a1ede59f73733860e775459ba07c723898cece905dd27bd536d0c99d8b42f1", size = 96490, upload-time = "2025-02-09T21:14:50.179Z" }, - { url = "https://files.pythonhosted.org/packages/ee/17/bee2ff48a00bf368021b22559e039db55365e9868a32ce26d269abde7820/cwcwidth-0.1.10-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d15a42557a4ad2614b0281ee3dc27fb6ff9b83437f61cce44dc551926189080", size = 100387, upload-time = "2025-02-09T21:14:51.53Z" }, - { url = "https://files.pythonhosted.org/packages/4b/2c/7860e7869fee3c8c86ec1222e6ba6bcfe2f079c7a52aa0d4446d2a0e4bae/cwcwidth-0.1.10-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:bf2a8e081fa882d2f97ad86443a5e3bac23c841961669d610944b7e81b2966cc", size = 96910, upload-time = "2025-02-09T21:14:53.408Z" }, - { url = "https://files.pythonhosted.org/packages/09/27/e45cbd4aef859dcc37819cdb39f85cdc9e2492d6e0cab81ab5775f7c8d70/cwcwidth-0.1.10-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:79e6f708f1b00f102252b43c3e9ab90d25eaab87d9f2b5649897fb07866b6252", size = 100342, upload-time = "2025-02-09T21:14:54.586Z" }, - { url = "https://files.pythonhosted.org/packages/4e/b2/e838ccfd950a001375f9a43339b258513d03ab60da578b054eeae202e882/cwcwidth-0.1.10-cp311-cp311-win32.whl", hash = "sha256:33bf671f76932af133e66f0741619e9c3a8cebbca0a1f151be65e16cf4cf3e6d", size = 23197, upload-time = "2025-02-09T21:14:56.392Z" }, - { url = "https://files.pythonhosted.org/packages/80/78/f3486595fd0dfd0e06b0d41f75f3f86f498eccda06c7954cc6e24531dfc1/cwcwidth-0.1.10-cp311-cp311-win_amd64.whl", hash = "sha256:619def845e26598a6651620f2ef50bf3adb05979efb622415f0222c6447f1a62", size = 25809, upload-time = "2025-02-09T21:14:57.368Z" }, - { url = "https://files.pythonhosted.org/packages/87/28/8e2ab81f0116bfcec22069e4c92fda9d05b0512605ccef00b62d93719ded/cwcwidth-0.1.10-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1d2b21ff2eb60c6793349b7fb161c40a8583a57ec32e61f47aab7938177bfdec", size = 23031, upload-time = "2025-02-09T21:14:59.01Z" }, - { url = "https://files.pythonhosted.org/packages/3a/a4/5adc535e2a714ecc926ea701e821a9abbe14f65cae4d615d20059b9b52a5/cwcwidth-0.1.10-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e0316488349c3e5ca4b20de7daa1cb8e96a05d1d14d040d46e87a495da655f4a", size = 101219, upload-time = "2025-02-09T21:15:00.079Z" }, - { url = "https://files.pythonhosted.org/packages/78/4c/18a5a06aa8db3cc28712ab957671e7718aedfc73403d84b0c2cb5cfcbc27/cwcwidth-0.1.10-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:848b6ffca1e32e28d2ccbb2cd395ccd3c38a7c4ec110728cd9d828eaf609b09e", size = 106565, upload-time = "2025-02-09T21:15:02.081Z" }, - { url = "https://files.pythonhosted.org/packages/06/40/801cba5ccb9551c862ad210eba22031e4655cd74711e32756b7ce24fc751/cwcwidth-0.1.10-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:c3a7bfe1da478c0c27c549f68c6e28a583413da3ee451854ec2d983497bd18b8", size = 102244, upload-time = "2025-02-09T21:15:04.003Z" }, - { url = "https://files.pythonhosted.org/packages/e4/ed/60f61274fcfd0621a45e9403502e8f46968d562810a4424e5ff8d6bd50b0/cwcwidth-0.1.10-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:cff03100f49170bc50fc399d05a31b8fcb7b0cef26df1a8068fa943387107f6c", size = 105634, upload-time = "2025-02-09T21:15:06.005Z" }, - { url = "https://files.pythonhosted.org/packages/b1/27/8179cecd688fef894dda601455d35066adfa3d58af4e97c5ab112893b5f6/cwcwidth-0.1.10-cp312-cp312-win32.whl", hash = "sha256:2dd9a92fdfbc53fc79f0953f39708dcf743fd27450c374985f419e3d47eb89d4", size = 23507, upload-time = "2025-02-09T21:15:07.968Z" }, - { url = "https://files.pythonhosted.org/packages/b2/b4/b7fe652a4d96f03ef051fff8313dfe827bc31578f7e67f1c98d5a5813f66/cwcwidth-0.1.10-cp312-cp312-win_amd64.whl", hash = "sha256:734d764281e3d87c40d0265543f00a653409145fa9f48a93bc0fbf9a8e7932ca", size = 26100, upload-time = "2025-02-09T21:15:09.186Z" }, - { url = "https://files.pythonhosted.org/packages/af/f7/8c4cfe0b08053eea4da585ad5e12fef7cd11a0c9e4603ac8644c2a0b04b5/cwcwidth-0.1.10-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:2391073280d774ab5d9af1d3aaa26ec456956d04daa1134fb71c31cd72ba5bba", size = 22344, upload-time = "2025-02-09T21:15:10.136Z" }, - { url = "https://files.pythonhosted.org/packages/2a/48/176bbaf56520c5d6b72cbbe0d46821989eaa30df628daa5baecdd7f35458/cwcwidth-0.1.10-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6bfbdc2943631ec770ee781b35b8876fa7e283ff2273f944e2a9ae1f3df4ecdf", size = 94907, upload-time = "2025-02-09T21:15:11.178Z" }, - { url = "https://files.pythonhosted.org/packages/bc/fc/4dfed13b316a67bf2419a63db53566e3e5e4d4fc5a94ef493d3334be3c1f/cwcwidth-0.1.10-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eb0103c7db8d86e260e016ff89f8f00ef5eb75c481abc346bfaa756da9f976b4", size = 100046, upload-time = "2025-02-09T21:15:12.279Z" }, - { url = "https://files.pythonhosted.org/packages/4e/83/612eecdeddbb1329d0f4d416f643459c2c5ae7b753490e31d9dccfa6deed/cwcwidth-0.1.10-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:3b7d38c552edf663bf13f32310f9fd6661070409807b1b5bf89917e2de804ab1", size = 96143, upload-time = "2025-02-09T21:15:14.136Z" }, - { url = "https://files.pythonhosted.org/packages/57/98/87d10d88b5a6de3a4a3452802abed18b909510b9f118ad7f3a40ae48700a/cwcwidth-0.1.10-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:1132be818498163a9208b9f4a28d759e08d3efeb885dfd10364434ccc7fa6a17", size = 99735, upload-time = "2025-02-09T21:15:15.216Z" }, - { url = "https://files.pythonhosted.org/packages/61/de/e0c02f84b0418db5938eeb1269f53dee195615a856ed12f370ef79f6cd5b/cwcwidth-0.1.10-cp313-cp313-win32.whl", hash = "sha256:dcead1b7b60c99f8cda249feb8059e4da38587c34d0b5f3aa130f13c62c0ce35", size = 22922, upload-time = "2025-02-09T21:15:16.999Z" }, - { url = "https://files.pythonhosted.org/packages/d8/4a/1d272a69f14924e43f5d6d4a7935c7a892e25c6e5b9a2c4459472132ef0c/cwcwidth-0.1.10-cp313-cp313-win_amd64.whl", hash = "sha256:b6eafd16d3edfec9acfc3d7b8856313bc252e0eccd56fb088f51ceed14c1bbdd", size = 25211, upload-time = "2025-02-09T21:15:17.898Z" }, - { url = "https://files.pythonhosted.org/packages/8c/e2/e27e0c5bb20ff507100d282b501acbb622499ea43b2fe0ed3e759cb59737/cwcwidth-0.1.10-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3d8bd02fb0bc375479f1af8ff4715d0d9593095c2c72cd7f2a18841cd3657541", size = 22787, upload-time = "2025-02-09T21:15:18.829Z" }, - { url = "https://files.pythonhosted.org/packages/09/d8/68cb5d3a4792be33e6723f828aa0f90b27720796855ee42342aff6f29752/cwcwidth-0.1.10-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2c98ce6ddb32d7162695827ea96d9580866005eb3ed57c5cdbe83293690327a1", size = 89115, upload-time = "2025-02-09T21:15:19.797Z" }, - { url = "https://files.pythonhosted.org/packages/f5/24/e358bc51fba0d506ebf5d0fbb06bad7b93c8b945b7d98ed4c243a1017cd2/cwcwidth-0.1.10-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9005da09777c769871d9c5f54f948585cf10bf49b0d176db3e22d922a3a3d77e", size = 92593, upload-time = "2025-02-09T21:15:21.56Z" }, - { url = "https://files.pythonhosted.org/packages/34/33/02dae2a715d36c6275afeb154ad8e01f04e0a955a90f36a80c6a70548c2b/cwcwidth-0.1.10-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:a64a460e045108a7b9e93a6f06983d56435b2a091f3a7384848d7c32c23bcae0", size = 90373, upload-time = "2025-02-09T21:15:22.551Z" }, - { url = "https://files.pythonhosted.org/packages/ec/03/ebb74d849537b3e5185a0434f2f4485f594345a2e22b6b3a71e2289550fe/cwcwidth-0.1.10-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:b0eeaed08aa37843724d5bc5ce63fc71b6341b48dddee6c2aca5500058e57be2", size = 89487, upload-time = "2025-02-09T21:15:24.307Z" }, - { url = "https://files.pythonhosted.org/packages/c9/0f/b770a482366b66212617b4cf475574c3dd2f3aa16655f3c5d8550dc1411a/cwcwidth-0.1.10-cp39-cp39-win32.whl", hash = "sha256:37cef6a2c1e201b4654079980e93d8849b11198a12898612818d63ab1f818d7e", size = 23273, upload-time = "2025-02-09T21:15:25.309Z" }, - { url = "https://files.pythonhosted.org/packages/94/90/dd1e901b2b8bf87beef67f7a64070bfbdb525030422c3804d69a03546a12/cwcwidth-0.1.10-cp39-cp39-win_amd64.whl", hash = "sha256:00fc0b477057b4af431632fbd6b16690add9aed435dbf89ccca9672173540763", size = 25728, upload-time = "2025-02-09T21:15:27.474Z" }, -] - [[package]] name = "cwcwidth" version = "0.1.11" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version == '3.10.*' and sys_platform == 'win32'", - "python_full_version == '3.10.*' and sys_platform != 'win32'", + "python_full_version < '3.11' and sys_platform == 'win32'", + "python_full_version < '3.11' and sys_platform != 'win32'", ] sdist = { url = "https://files.pythonhosted.org/packages/7f/bc/1746c7650e8c676e7799d40fc31d37d88882c18d92fbcdd1d014c8c8786c/cwcwidth-0.1.11.tar.gz", hash = "sha256:594d8855a6319cc3ef36e0b6374fae02e4f4fe17cd87d0debe8b6e00eb186c17", size = 71727, upload-time = "2025-10-28T08:22:08.186Z" } wheels = [ @@ -1828,10 +1425,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/5a/73/2aa00c7f1f06e997ef57dc9b23d61a92120bec1437a012afb6d176585197/debugpy-1.8.17-cp314-cp314-manylinux_2_34_x86_64.whl", hash = "sha256:b69b6bd9dba6a03632534cdf67c760625760a215ae289f7489a452af1031fe1f", size = 4268254, upload-time = "2025-09-17T16:34:04.486Z" }, { url = "https://files.pythonhosted.org/packages/86/b5/ed3e65c63c68a6634e3ba04bd10255c8e46ec16ebed7d1c79e4816d8a760/debugpy-1.8.17-cp314-cp314-win32.whl", hash = "sha256:5c59b74aa5630f3a5194467100c3b3d1c77898f9ab27e3f7dc5d40fc2f122670", size = 5277203, upload-time = "2025-09-17T16:34:06.65Z" }, { url = "https://files.pythonhosted.org/packages/b0/26/394276b71c7538445f29e792f589ab7379ae70fd26ff5577dfde71158e96/debugpy-1.8.17-cp314-cp314-win_amd64.whl", hash = "sha256:893cba7bb0f55161de4365584b025f7064e1f88913551bcd23be3260b231429c", size = 5318493, upload-time = "2025-09-17T16:34:08.483Z" }, - { url = "https://files.pythonhosted.org/packages/16/ee/0e9a08878f1b525f85c4e47723ea1f17b1bad69672c84fa910210604e3f8/debugpy-1.8.17-cp39-cp39-macosx_15_0_x86_64.whl", hash = "sha256:f2ac8055a0c4a09b30b931100996ba49ef334c6947e7ae365cdd870416d7513e", size = 2099309, upload-time = "2025-09-17T16:34:17.935Z" }, - { url = "https://files.pythonhosted.org/packages/b3/b5/0327b27efd8826ca92a256a3a250e80ccad6a834b4d12bd9cbd491f2da03/debugpy-1.8.17-cp39-cp39-manylinux_2_34_x86_64.whl", hash = "sha256:eaa85bce251feca8e4c87ce3b954aba84b8c645b90f0e6a515c00394a9f5c0e7", size = 3080100, upload-time = "2025-09-17T16:34:19.885Z" }, - { url = "https://files.pythonhosted.org/packages/0f/f0/2e210fa8884d2ab452fa31ffd1402e13010eaacfa67063d0565d97ac9e0e/debugpy-1.8.17-cp39-cp39-win32.whl", hash = "sha256:b13eea5587e44f27f6c48588b5ad56dcb74a4f3a5f89250443c94587f3eb2ea1", size = 5231016, upload-time = "2025-09-17T16:34:21.887Z" }, - { url = "https://files.pythonhosted.org/packages/d6/9b/6a45fb1553d09b618c9441bcbbf72b651246b83b5618b2f95c0e4cf1b8bd/debugpy-1.8.17-cp39-cp39-win_amd64.whl", hash = "sha256:bb1bbf92317e1f35afcf3ef0450219efb3afe00be79d8664b250ac0933b9015f", size = 5262778, upload-time = "2025-09-17T16:34:24.026Z" }, { url = "https://files.pythonhosted.org/packages/b0/d0/89247ec250369fc76db477720a26b2fce7ba079ff1380e4ab4529d2fe233/debugpy-1.8.17-py2.py3-none-any.whl", hash = "sha256:60c7dca6571efe660ccb7a9508d73ca14b8796c4ed484c2002abba714226cfef", size = 5283210, upload-time = "2025-09-17T16:34:25.835Z" }, ] @@ -1870,8 +1463,7 @@ name = "disk-objectstore" version = "1.4.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "click", version = "8.1.8", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "click", version = "8.2.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "click" }, { name = "sqlalchemy" }, ] sdist = { url = "https://files.pythonhosted.org/packages/a6/06/2f76aef59917d47e372158580db988bae1d09f73f5a22721cf88cb5b1dd1/disk_objectstore-1.4.0.tar.gz", hash = "sha256:4d9ea7617dd2de1c817255d7c8123f69e106f6daa0d4c0bdd09ab919ddbc49c8", size = 7390473, upload-time = "2025-10-06T08:35:53.392Z" } @@ -1945,32 +1537,10 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/cb/a8/20d0723294217e47de6d9e2e40fd4a9d2f7c4b6ef974babd482a59743694/fastjsonschema-2.21.2-py3-none-any.whl", hash = "sha256:1c797122d0a86c5cace2e54bf4e819c36223b552017172f32c5c024a6b77e463", size = 24024, upload-time = "2025-08-14T18:49:34.776Z" }, ] -[[package]] -name = "filelock" -version = "3.19.1" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.10'", -] -sdist = { url = "https://files.pythonhosted.org/packages/40/bb/0ab3e58d22305b6f5440629d20683af28959bf793d98d11950e305c1c326/filelock-3.19.1.tar.gz", hash = "sha256:66eda1888b0171c998b35be2bcc0f6d75c388a7ce20c3f3f37aa8e96c2dddf58", size = 17687, upload-time = "2025-08-14T16:56:03.016Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/42/14/42b2651a2f46b022ccd948bca9f2d5af0fd8929c4eec235b8d6d844fbe67/filelock-3.19.1-py3-none-any.whl", hash = "sha256:d38e30481def20772f5baf097c122c3babc4fcdb7e14e57049eb9d88c6dc017d", size = 15988, upload-time = "2025-08-14T16:56:01.633Z" }, -] - [[package]] name = "filelock" version = "3.20.0" source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.14' and sys_platform == 'win32'", - "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32'", - "python_full_version == '3.11.*' and sys_platform == 'win32'", - "python_full_version >= '3.14' and sys_platform != 'win32'", - "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'win32'", - "python_full_version == '3.11.*' and sys_platform != 'win32'", - "python_full_version == '3.10.*' and sys_platform == 'win32'", - "python_full_version == '3.10.*' and sys_platform != 'win32'", -] sdist = { url = "https://files.pythonhosted.org/packages/58/46/0028a82567109b5ef6e4d2a1f04a583fb513e6cf9527fcdd09afd817deeb/filelock-3.20.0.tar.gz", hash = "sha256:711e943b4ec6be42e1d4e6690b48dc175c822967466bb31c0c293f34334c13f4", size = 18922, upload-time = "2025-10-08T18:03:50.056Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/76/91/7216b27286936c16f5b4d0c530087e4a54eead683e6b0b73dd0c64844af6/filelock-3.20.0-py3-none-any.whl", hash = "sha256:339b4732ffda5cd79b13f4e2711a31b0365ce445d95d243bb996273d072546a2", size = 16054, upload-time = "2025-10-08T18:03:48.35Z" }, @@ -1982,9 +1552,7 @@ version = "2.3.3" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "blinker" }, - { name = "click", version = "8.1.8", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "click", version = "8.2.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, - { name = "importlib-metadata", marker = "python_full_version < '3.10'" }, + { name = "click" }, { name = "itsdangerous" }, { name = "jinja2" }, { name = "werkzeug" }, @@ -2076,14 +1644,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/78/d4/ff19976305e0c05aa3340c805475abb00224c954d3c65e82c0a69633d55d/fonttools-4.60.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:f0e8817c7d1a0c2eedebf57ef9a9896f3ea23324769a9a2061a80fe8852705ed", size = 4974184, upload-time = "2025-09-29T21:12:55.962Z" }, { url = "https://files.pythonhosted.org/packages/63/22/8553ff6166f5cd21cfaa115aaacaa0dc73b91c079a8cfd54a482cbc0f4f5/fonttools-4.60.1-cp314-cp314t-win32.whl", hash = "sha256:1410155d0e764a4615774e5c2c6fc516259fe3eca5882f034eb9bfdbee056259", size = 2282241, upload-time = "2025-09-29T21:12:58.179Z" }, { url = "https://files.pythonhosted.org/packages/8a/cb/fa7b4d148e11d5a72761a22e595344133e83a9507a4c231df972e657579b/fonttools-4.60.1-cp314-cp314t-win_amd64.whl", hash = "sha256:022beaea4b73a70295b688f817ddc24ed3e3418b5036ffcd5658141184ef0d0c", size = 2345760, upload-time = "2025-09-29T21:13:00.375Z" }, - { url = "https://files.pythonhosted.org/packages/a4/7f/1c9a6cc6e7374ab59bbe91cb3b8a65ce0907c59f8f35368bb3bf941bd458/fonttools-4.60.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:122e1a8ada290423c493491d002f622b1992b1ab0b488c68e31c413390dc7eb2", size = 2816178, upload-time = "2025-09-29T21:13:02.915Z" }, - { url = "https://files.pythonhosted.org/packages/ca/ac/acb4dcf1932566c0b57b5261f93a8b97cb3ebae08d07aff1288e7c9d7faa/fonttools-4.60.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a140761c4ff63d0cb9256ac752f230460ee225ccef4ad8f68affc723c88e2036", size = 2349175, upload-time = "2025-09-29T21:13:05.432Z" }, - { url = "https://files.pythonhosted.org/packages/3e/ac/0b2f8d62c857adfe96551d56abbbc3d2eda2e4715a2e91c5eb7815bb38e1/fonttools-4.60.1-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0eae96373e4b7c9e45d099d7a523444e3554360927225c1cdae221a58a45b856", size = 4840452, upload-time = "2025-09-29T21:13:08.679Z" }, - { url = "https://files.pythonhosted.org/packages/2d/e1/b2e2ae805f263507e050f1ebfc2fb3654124161f3bea466a1b2a4485c705/fonttools-4.60.1-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:596ecaca36367027d525b3b426d8a8208169d09edcf8c7506aceb3a38bfb55c7", size = 4774040, upload-time = "2025-09-29T21:13:11.424Z" }, - { url = "https://files.pythonhosted.org/packages/9d/91/05949ba6f757014f343632b142543576eb100aeb261c036b86e7d1fc50f0/fonttools-4.60.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:2ee06fc57512144d8b0445194c2da9f190f61ad51e230f14836286470c99f854", size = 4823746, upload-time = "2025-09-29T21:13:14.08Z" }, - { url = "https://files.pythonhosted.org/packages/1b/cf/db9a1bd8d835dc17f09104f83b9d8c078d7bebbaaa9bd41378bf10f025de/fonttools-4.60.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:b42d86938e8dda1cd9a1a87a6d82f1818eaf933348429653559a458d027446da", size = 4934001, upload-time = "2025-09-29T21:13:16.435Z" }, - { url = "https://files.pythonhosted.org/packages/87/4a/c58503524f7e6c73eb33b944f27535460e1050a58c99bd5b441242fcca86/fonttools-4.60.1-cp39-cp39-win32.whl", hash = "sha256:8b4eb332f9501cb1cd3d4d099374a1e1306783ff95489a1026bde9eb02ccc34a", size = 1499091, upload-time = "2025-09-29T21:13:19.072Z" }, - { url = "https://files.pythonhosted.org/packages/69/8f/3394936411aec5f26a1fdf8d7fdc1da7c276e0c627cd71b7b266b2431681/fonttools-4.60.1-cp39-cp39-win_amd64.whl", hash = "sha256:7473a8ed9ed09aeaa191301244a5a9dbe46fe0bf54f9d6cd21d83044c3321217", size = 1543835, upload-time = "2025-09-29T21:13:21.606Z" }, { url = "https://files.pythonhosted.org/packages/c7/93/0dd45cd283c32dea1545151d8c3637b4b8c53cdb3a625aeb2885b184d74d/fonttools-4.60.1-py3-none-any.whl", hash = "sha256:906306ac7afe2156fcf0042173d6ebbb05416af70f6b370967b47f8f00103bbb", size = 1143175, upload-time = "2025-09-29T21:13:24.134Z" }, ] @@ -2105,15 +1665,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/da/71/ae30dadffc90b9006d77af76b393cb9dfbfc9629f339fc1574a1c52e6806/future-1.0.0-py3-none-any.whl", hash = "sha256:929292d34f5872e70396626ef385ec22355a1fae8ad29e1a734c3e43f9fbc216", size = 491326, upload-time = "2024-02-21T11:52:35.956Z" }, ] -[[package]] -name = "get-annotations" -version = "0.1.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/61/6e/265083c3bc64f17b7bc52e8c3720739841772e81b44272b8ba12d46a01ce/get-annotations-0.1.2.tar.gz", hash = "sha256:da7b69b8043237cc7f7ce5919e9cc59bd18fc4e2704b43eb34e3ba4fa9374bab", size = 4506, upload-time = "2021-12-27T06:42:40.22Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/c6/42/9515026b884c7d5877c610082d35bcbad4f8ff4dfbf31aff0fe914f7ff3d/get_annotations-0.1.2-py3-none-any.whl", hash = "sha256:788ba8aa2434ee34ffb985c4aea2f9e575204c884c0e0dd0f969be846470e527", size = 4482, upload-time = "2021-12-27T06:42:41.79Z" }, -] - [[package]] name = "graphviz" version = "0.21" @@ -2182,18 +1733,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/23/6e/74407aed965a4ab6ddd93a7ded3180b730d281c77b765788419484cdfeef/greenlet-3.2.4-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:2917bdf657f5859fbf3386b12d68ede4cf1f04c90c3a6bc1f013dd68a22e2269", size = 1612508, upload-time = "2025-11-04T12:42:23.427Z" }, { url = "https://files.pythonhosted.org/packages/0d/da/343cd760ab2f92bac1845ca07ee3faea9fe52bee65f7bcb19f16ad7de08b/greenlet-3.2.4-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:015d48959d4add5d6c9f6c5210ee3803a830dce46356e3bc326d6776bde54681", size = 1680760, upload-time = "2025-11-04T12:42:25.341Z" }, { url = "https://files.pythonhosted.org/packages/e3/a5/6ddab2b4c112be95601c13428db1d8b6608a8b6039816f2ba09c346c08fc/greenlet-3.2.4-cp314-cp314-win_amd64.whl", hash = "sha256:e37ab26028f12dbb0ff65f29a8d3d44a765c61e729647bf2ddfbbed621726f01", size = 303425, upload-time = "2025-08-07T13:32:27.59Z" }, - { url = "https://files.pythonhosted.org/packages/f7/c0/93885c4106d2626bf51fdec377d6aef740dfa5c4877461889a7cf8e565cc/greenlet-3.2.4-cp39-cp39-macosx_11_0_universal2.whl", hash = "sha256:b6a7c19cf0d2742d0809a4c05975db036fdff50cd294a93632d6a310bf9ac02c", size = 269859, upload-time = "2025-08-07T13:16:16.003Z" }, - { url = "https://files.pythonhosted.org/packages/4d/f5/33f05dc3ba10a02dedb1485870cf81c109227d3d3aa280f0e48486cac248/greenlet-3.2.4-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:27890167f55d2387576d1f41d9487ef171849ea0359ce1510ca6e06c8bece11d", size = 627610, upload-time = "2025-08-07T13:43:01.345Z" }, - { url = "https://files.pythonhosted.org/packages/b2/a7/9476decef51a0844195f99ed5dc611d212e9b3515512ecdf7321543a7225/greenlet-3.2.4-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:18d9260df2b5fbf41ae5139e1be4e796d99655f023a636cd0e11e6406cca7d58", size = 639417, upload-time = "2025-08-07T13:45:32.094Z" }, - { url = "https://files.pythonhosted.org/packages/bd/e0/849b9159cbb176f8c0af5caaff1faffdece7a8417fcc6fe1869770e33e21/greenlet-3.2.4-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:671df96c1f23c4a0d4077a325483c1503c96a1b7d9db26592ae770daa41233d4", size = 634751, upload-time = "2025-08-07T13:53:18.848Z" }, - { url = "https://files.pythonhosted.org/packages/5f/d3/844e714a9bbd39034144dca8b658dcd01839b72bb0ec7d8014e33e3705f0/greenlet-3.2.4-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:16458c245a38991aa19676900d48bd1a6f2ce3e16595051a4db9d012154e8433", size = 634020, upload-time = "2025-08-07T13:18:36.841Z" }, - { url = "https://files.pythonhosted.org/packages/6b/4c/f3de2a8de0e840ecb0253ad0dc7e2bb3747348e798ec7e397d783a3cb380/greenlet-3.2.4-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c9913f1a30e4526f432991f89ae263459b1c64d1608c0d22a5c79c287b3c70df", size = 582817, upload-time = "2025-08-07T13:18:35.48Z" }, - { url = "https://files.pythonhosted.org/packages/89/80/7332915adc766035c8980b161c2e5d50b2f941f453af232c164cff5e0aeb/greenlet-3.2.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b90654e092f928f110e0007f572007c9727b5265f7632c2fa7415b4689351594", size = 1111985, upload-time = "2025-08-07T13:42:42.425Z" }, - { url = "https://files.pythonhosted.org/packages/66/71/1928e2c80197353bcb9b50aa19c4d8e26ee6d7a900c564907665cf4b9a41/greenlet-3.2.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:81701fd84f26330f0d5f4944d4e92e61afe6319dcd9775e39396e39d7c3e5f98", size = 1136137, upload-time = "2025-08-07T13:18:26.168Z" }, - { url = "https://files.pythonhosted.org/packages/4b/bf/7bd33643e48ed45dcc0e22572f650767832bd4e1287f97434943cc402148/greenlet-3.2.4-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:28a3c6b7cd72a96f61b0e4b2a36f681025b60ae4779cc73c1535eb5f29560b10", size = 1542941, upload-time = "2025-11-04T12:42:27.427Z" }, - { url = "https://files.pythonhosted.org/packages/9b/74/4bc433f91d0d09a1c22954a371f9df928cb85e72640870158853a83415e5/greenlet-3.2.4-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:52206cd642670b0b320a1fd1cbfd95bca0e043179c1d8a045f2c6109dfe973be", size = 1609685, upload-time = "2025-11-04T12:42:29.242Z" }, - { url = "https://files.pythonhosted.org/packages/89/48/a5dc74dde38aeb2b15d418cec76ed50e1dd3d620ccda84d8199703248968/greenlet-3.2.4-cp39-cp39-win32.whl", hash = "sha256:65458b409c1ed459ea899e939f0e1cdb14f58dbc803f2f93c5eab5694d32671b", size = 281400, upload-time = "2025-08-07T14:02:20.263Z" }, - { url = "https://files.pythonhosted.org/packages/e5/44/342c4591db50db1076b8bda86ed0ad59240e3e1da17806a4cf10a6d0e447/greenlet-3.2.4-cp39-cp39-win_amd64.whl", hash = "sha256:d2e685ade4dafd447ede19c31277a224a239a0a1a4eca4e6390efedf20260cfb", size = 298533, upload-time = "2025-08-07T13:56:34.168Z" }, ] [[package]] @@ -2225,10 +1764,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/55/3a/414e9cfa3c4f14682e40a5d61b8181936c78abf4aff0f1a91e9adaa20b5c/gssapi-1.10.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:86758d03906e10cb7feeedf26b5ead6661e844c54ef09d5e7de8e5ffb1154932", size = 685642, upload-time = "2025-10-03T03:08:39.115Z" }, { url = "https://files.pythonhosted.org/packages/29/e4/812ef20519f020122b5207600fda2906a3d4fcc6536c8aeb764012c28470/gssapi-1.10.1-cp314-cp314-win32.whl", hash = "sha256:2ef6e30c37676fbb2f635467e560c9a5e7b3f49ee9536ecb363939efa81c82bc", size = 740154, upload-time = "2025-10-03T03:08:40.46Z" }, { url = "https://files.pythonhosted.org/packages/4c/fc/838a46df536111602d6582f8e8efecccaaf828b690c6305a2ef276c71e5e/gssapi-1.10.1-cp314-cp314-win_amd64.whl", hash = "sha256:8f311cec5eabe0ce417908bcf50f60afa91a5b455884794eb02eb35a41d410c7", size = 826869, upload-time = "2025-10-03T03:08:42.524Z" }, - { url = "https://files.pythonhosted.org/packages/2e/6a/c28218ed3995cb38feac9142026994fd54e83a6ddd270d30435476c3b80e/gssapi-1.10.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a2b539dc10c46968a558a92f7ca49a53f1215b9c16fc25a55980824a9123c241", size = 672116, upload-time = "2025-10-03T03:08:43.91Z" }, - { url = "https://files.pythonhosted.org/packages/ee/26/2594e11b25e6731d3bce20111a1e940b7e3b43efb745d76fdedfa0cfced0/gssapi-1.10.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f1622e0a03ec736456b84ddd8b54808f90dca3cf3528d1ff4203f1e8f014a293", size = 694274, upload-time = "2025-10-03T03:08:45.318Z" }, - { url = "https://files.pythonhosted.org/packages/7f/5e/4107ef2226e58b10a279f93fc8c24d489633b111bb0b236d98bb260e065f/gssapi-1.10.1-cp39-cp39-win32.whl", hash = "sha256:2a71b089589ff949ffd557c795ac0c3f80eaa0cb56062c39b1363cf4af413e38", size = 737237, upload-time = "2025-10-03T03:08:46.894Z" }, - { url = "https://files.pythonhosted.org/packages/79/4e/ac06778f2ec6c12c8423b64fe0626939ad829407bc32a8214f0ad23675b6/gssapi-1.10.1-cp39-cp39-win_amd64.whl", hash = "sha256:fea5fa50b36502665d6d2f2479c198307adf21afbc523017cf115e5c4769258a", size = 822466, upload-time = "2025-10-03T03:08:48.257Z" }, ] [[package]] @@ -2307,44 +1842,10 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/59/9b/ecce94952ab5ea74c31dcf9ccf78ccd484eebebef06019bf8cb579ab4519/importlib_metadata-6.11.0-py3-none-any.whl", hash = "sha256:f0afba6205ad8f8947c7d338b5342d5db2afbfd82f9cbef7879a9539cc12eb9b", size = 23427, upload-time = "2023-12-03T17:33:08.965Z" }, ] -[[package]] -name = "importlib-resources" -version = "6.5.2" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "zipp", marker = "python_full_version < '3.10'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/cf/8c/f834fbf984f691b4f7ff60f50b514cc3de5cc08abfc3295564dd89c5e2e7/importlib_resources-6.5.2.tar.gz", hash = "sha256:185f87adef5bcc288449d98fb4fba07cea78bc036455dd44c5fc4a2fe78fed2c", size = 44693, upload-time = "2025-01-03T18:51:56.698Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a4/ed/1f1afb2e9e7f38a545d628f864d562a5ae64fe6f7a10e28ffb9b185b4e89/importlib_resources-6.5.2-py3-none-any.whl", hash = "sha256:789cfdc3ed28c78b67a06acb8126751ced69a3d5f79c095a98298cd8a760ccec", size = 37461, upload-time = "2025-01-03T18:51:54.306Z" }, -] - -[[package]] -name = "iniconfig" -version = "2.1.0" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.10'", -] -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 = "iniconfig" version = "2.3.0" source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.14' and sys_platform == 'win32'", - "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32'", - "python_full_version == '3.11.*' and sys_platform == 'win32'", - "python_full_version >= '3.14' and sys_platform != 'win32'", - "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'win32'", - "python_full_version == '3.11.*' and sys_platform != 'win32'", - "python_full_version == '3.10.*' and sys_platform == 'win32'", - "python_full_version == '3.10.*' and sys_platform != 'win32'", -] sdist = { url = "https://files.pythonhosted.org/packages/72/34/14ca021ce8e5dfedc35312d08ba8bf51fdd999c576889fc2c24cb97f4f10/iniconfig-2.3.0.tar.gz", hash = "sha256:c76315c77db068650d49c5b56314774a7804df16fee4402c1f19d6d15d8c4730", size = 20503, upload-time = "2025-10-18T21:55:43.219Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl", hash = "sha256:f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53fbf12", size = 7484, upload-time = "2025-10-18T21:55:41.639Z" }, @@ -2358,105 +1859,46 @@ resolution-markers = [ "python_full_version < '3.10'", ] dependencies = [ - { name = "appnope", marker = "python_full_version < '3.10' and sys_platform == 'darwin'" }, - { name = "comm", marker = "python_full_version < '3.10'" }, - { name = "debugpy", marker = "python_full_version < '3.10'" }, - { name = "ipython", version = "8.18.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "jupyter-client", marker = "python_full_version < '3.10'" }, - { name = "jupyter-core", version = "5.8.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "matplotlib-inline", marker = "python_full_version < '3.10'" }, - { name = "nest-asyncio", marker = "python_full_version < '3.10'" }, - { name = "packaging", marker = "python_full_version < '3.10'" }, - { name = "psutil", marker = "python_full_version < '3.10'" }, - { name = "pyzmq", marker = "python_full_version < '3.10'" }, - { name = "tornado", marker = "python_full_version < '3.10'" }, - { name = "traitlets", marker = "python_full_version < '3.10'" }, + { name = "appnope", marker = "sys_platform == 'darwin'" }, + { name = "comm" }, + { name = "debugpy" }, + { name = "ipython", version = "8.37.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, + { name = "ipython", version = "9.7.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, + { 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/a5/1d/d5ba6edbfe6fae4c3105bca3a9c889563cc752c7f2de45e333164c7f4846/ipykernel-6.31.0.tar.gz", hash = "sha256:2372ce8bc1ff4f34e58cafed3a0feb2194b91fc7cad0fc72e79e47b45ee9e8f6", size = 167493, upload-time = "2025-10-20T11:42:39.948Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/f6/d8/502954a4ec0efcf264f99b65b41c3c54e65a647d9f0d6f62cd02227d242c/ipykernel-6.31.0-py3-none-any.whl", hash = "sha256:abe5386f6ced727a70e0eb0cf1da801fa7c5fa6ff82147747d5a0406cd8c94af", size = 117003, upload-time = "2025-10-20T11:42:37.502Z" }, ] -[[package]] -name = "ipykernel" -version = "7.1.0" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.14' and sys_platform == 'win32'", - "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32'", - "python_full_version == '3.11.*' and sys_platform == 'win32'", - "python_full_version >= '3.14' and sys_platform != 'win32'", - "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'win32'", - "python_full_version == '3.11.*' and sys_platform != 'win32'", - "python_full_version == '3.10.*' and sys_platform == 'win32'", - "python_full_version == '3.10.*' and sys_platform != 'win32'", -] -dependencies = [ - { name = "appnope", marker = "python_full_version >= '3.10' and sys_platform == 'darwin'" }, - { name = "comm", marker = "python_full_version >= '3.10'" }, - { name = "debugpy", marker = "python_full_version >= '3.10'" }, - { name = "ipython", version = "8.37.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.10.*'" }, - { name = "ipython", version = "9.7.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, - { name = "jupyter-client", marker = "python_full_version >= '3.10'" }, - { name = "jupyter-core", version = "5.9.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, - { name = "matplotlib-inline", marker = "python_full_version >= '3.10'" }, - { name = "nest-asyncio", marker = "python_full_version >= '3.10'" }, - { name = "packaging", marker = "python_full_version >= '3.10'" }, - { name = "psutil", marker = "python_full_version >= '3.10'" }, - { name = "pyzmq", marker = "python_full_version >= '3.10'" }, - { name = "tornado", marker = "python_full_version >= '3.10'" }, - { name = "traitlets", marker = "python_full_version >= '3.10'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/b9/a4/4948be6eb88628505b83a1f2f40d90254cab66abf2043b3c40fa07dfce0f/ipykernel-7.1.0.tar.gz", hash = "sha256:58a3fc88533d5930c3546dc7eac66c6d288acde4f801e2001e65edc5dc9cf0db", size = 174579, upload-time = "2025-10-27T09:46:39.471Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a3/17/20c2552266728ceba271967b87919664ecc0e33efca29c3efc6baf88c5f9/ipykernel-7.1.0-py3-none-any.whl", hash = "sha256:763b5ec6c5b7776f6a8d7ce09b267693b4e5ce75cb50ae696aaefb3c85e1ea4c", size = 117968, upload-time = "2025-10-27T09:46:37.805Z" }, -] - [[package]] name = "ipython" -version = "8.18.1" +version = "8.37.0" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version < '3.10'", + "python_full_version < '3.11' and sys_platform == 'win32'", + "python_full_version < '3.11' and sys_platform != 'win32'", ] dependencies = [ - { name = "colorama", marker = "python_full_version < '3.10' and sys_platform == 'win32'" }, - { name = "decorator", marker = "python_full_version < '3.10'" }, - { name = "exceptiongroup", marker = "python_full_version < '3.10'" }, - { name = "jedi", marker = "python_full_version < '3.10'" }, - { name = "matplotlib-inline", marker = "python_full_version < '3.10'" }, - { name = "pexpect", marker = "python_full_version < '3.10' and sys_platform != 'win32'" }, - { name = "prompt-toolkit", marker = "python_full_version < '3.10'" }, - { name = "pygments", marker = "python_full_version < '3.10'" }, - { name = "stack-data", marker = "python_full_version < '3.10'" }, - { name = "traitlets", marker = "python_full_version < '3.10'" }, - { name = "typing-extensions", marker = "python_full_version < '3.10'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/b1/b9/3ba6c45a6df813c09a48bac313c22ff83efa26cbb55011218d925a46e2ad/ipython-8.18.1.tar.gz", hash = "sha256:ca6f079bb33457c66e233e4580ebfc4128855b4cf6370dddd73842a9563e8a27", size = 5486330, upload-time = "2023-11-27T09:58:34.596Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/47/6b/d9fdcdef2eb6a23f391251fde8781c38d42acd82abe84d054cb74f7863b0/ipython-8.18.1-py3-none-any.whl", hash = "sha256:e8267419d72d81955ec1177f8a29aaa90ac80ad647499201119e2f05e99aa397", size = 808161, upload-time = "2023-11-27T09:58:30.538Z" }, -] - -[[package]] -name = "ipython" -version = "8.37.0" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version == '3.10.*' and sys_platform == 'win32'", - "python_full_version == '3.10.*' and sys_platform != 'win32'", -] -dependencies = [ - { name = "colorama", marker = "python_full_version == '3.10.*' and sys_platform == 'win32'" }, - { name = "decorator", marker = "python_full_version == '3.10.*'" }, - { name = "exceptiongroup", marker = "python_full_version == '3.10.*'" }, - { name = "jedi", marker = "python_full_version == '3.10.*'" }, - { name = "matplotlib-inline", marker = "python_full_version == '3.10.*'" }, - { name = "pexpect", marker = "python_full_version == '3.10.*' and sys_platform != 'emscripten' and sys_platform != 'win32'" }, - { name = "prompt-toolkit", marker = "python_full_version == '3.10.*'" }, - { name = "pygments", marker = "python_full_version == '3.10.*'" }, - { name = "stack-data", marker = "python_full_version == '3.10.*'" }, - { name = "traitlets", marker = "python_full_version == '3.10.*'" }, - { name = "typing-extensions", marker = "python_full_version == '3.10.*'" }, + { name = "colorama", marker = "python_full_version < '3.11' and sys_platform == 'win32'" }, + { name = "decorator", marker = "python_full_version < '3.11'" }, + { name = "exceptiongroup", marker = "python_full_version < '3.11'" }, + { name = "jedi", marker = "python_full_version < '3.11'" }, + { name = "matplotlib-inline", marker = "python_full_version < '3.11'" }, + { name = "pexpect", marker = "python_full_version < '3.11' and sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "prompt-toolkit", marker = "python_full_version < '3.11'" }, + { name = "pygments", marker = "python_full_version < '3.11'" }, + { name = "stack-data", marker = "python_full_version < '3.11'" }, + { name = "traitlets", marker = "python_full_version < '3.11'" }, + { name = "typing-extensions", marker = "python_full_version < '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/85/31/10ac88f3357fc276dc8a64e8880c82e80e7459326ae1d0a211b40abf6665/ipython-8.37.0.tar.gz", hash = "sha256:ca815841e1a41a1e6b73a0b08f3038af9b2252564d01fc405356d34033012216", size = 5606088, upload-time = "2025-05-31T16:39:09.613Z" } wheels = [ @@ -2520,8 +1962,7 @@ version = "8.1.8" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "comm" }, - { name = "ipython", version = "8.18.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "ipython", version = "8.37.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.10.*'" }, + { name = "ipython", version = "8.37.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, { name = "ipython", version = "9.7.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, { name = "jupyterlab-widgets" }, { name = "traitlets" }, @@ -2623,10 +2064,8 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "attrs" }, { name = "jsonschema-specifications" }, - { name = "referencing", version = "0.36.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "referencing", version = "0.37.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, - { name = "rpds-py", version = "0.27.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "rpds-py", version = "0.28.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "referencing" }, + { name = "rpds-py" }, ] sdist = { url = "https://files.pythonhosted.org/packages/74/69/f7185de793a29082a9f3c7728268ffb31cb5095131a9c139a74078e27336/jsonschema-4.25.1.tar.gz", hash = "sha256:e4a9655ce0da0c0b67a085847e00a3a51449e1157f4f75e9fb5aa545e122eb85", size = 357342, upload-time = "2025-08-18T17:03:50.038Z" } wheels = [ @@ -2643,8 +2082,7 @@ format-nongpl = [ { name = "rfc3986-validator" }, { name = "rfc3987-syntax" }, { name = "uri-template" }, - { name = "webcolors", version = "24.11.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "webcolors", version = "25.10.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "webcolors" }, ] [[package]] @@ -2652,8 +2090,7 @@ name = "jsonschema-specifications" version = "2025.9.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "referencing", version = "0.36.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "referencing", version = "0.37.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "referencing" }, ] sdist = { url = "https://files.pythonhosted.org/packages/19/74/a633ee74eb36c44aa6d1095e7cc5569bebf04342ee146178e2d36600708b/jsonschema_specifications-2025.9.1.tar.gz", hash = "sha256:b540987f239e745613c7a9176f3edb72b832a4ac465cf02712288397832b5e8d", size = 32855, upload-time = "2025-09-08T01:34:59.186Z" } wheels = [ @@ -2684,8 +2121,7 @@ version = "1.0.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "attrs" }, - { name = "click", version = "8.1.8", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "click", version = "8.2.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "click" }, { name = "importlib-metadata" }, { name = "nbclient" }, { name = "nbformat" }, @@ -2703,9 +2139,7 @@ name = "jupyter-client" version = "8.6.3" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "importlib-metadata", marker = "python_full_version < '3.10'" }, - { name = "jupyter-core", version = "5.8.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "jupyter-core", version = "5.9.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "jupyter-core" }, { name = "python-dateutil" }, { name = "pyzmq" }, { name = "tornado" }, @@ -2721,14 +2155,11 @@ name = "jupyter-console" version = "6.6.3" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "ipykernel", version = "6.31.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "ipykernel", version = "7.1.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, - { name = "ipython", version = "8.18.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "ipython", version = "8.37.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.10.*'" }, + { name = "ipykernel" }, + { name = "ipython", version = "8.37.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, { name = "ipython", version = "9.7.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, { name = "jupyter-client" }, - { name = "jupyter-core", version = "5.8.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "jupyter-core", version = "5.9.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "jupyter-core" }, { name = "prompt-toolkit" }, { name = "pygments" }, { name = "pyzmq" }, @@ -2739,40 +2170,13 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/ca/77/71d78d58f15c22db16328a476426f7ac4a60d3a5a7ba3b9627ee2f7903d4/jupyter_console-6.6.3-py3-none-any.whl", hash = "sha256:309d33409fcc92ffdad25f0bcdf9a4a9daa61b6f341177570fdac03de5352485", size = 24510, upload-time = "2023-03-06T14:13:28.229Z" }, ] -[[package]] -name = "jupyter-core" -version = "5.8.1" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.10'", -] -dependencies = [ - { name = "platformdirs", version = "4.4.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "pywin32", marker = "python_full_version < '3.10' and platform_python_implementation != 'PyPy' and sys_platform == 'win32'" }, - { name = "traitlets", marker = "python_full_version < '3.10'" }, -] -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 = "jupyter-core" version = "5.9.1" source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.14' and sys_platform == 'win32'", - "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32'", - "python_full_version == '3.11.*' and sys_platform == 'win32'", - "python_full_version >= '3.14' and sys_platform != 'win32'", - "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'win32'", - "python_full_version == '3.11.*' and sys_platform != 'win32'", - "python_full_version == '3.10.*' and sys_platform == 'win32'", - "python_full_version == '3.10.*' and sys_platform != 'win32'", -] dependencies = [ - { name = "platformdirs", version = "4.5.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, - { name = "traitlets", marker = "python_full_version >= '3.10'" }, + { name = "platformdirs" }, + { name = "traitlets" }, ] sdist = { url = "https://files.pythonhosted.org/packages/02/49/9d1284d0dc65e2c757b74c6687b6d319b02f822ad039e5c512df9194d9dd/jupyter_core-5.9.1.tar.gz", hash = "sha256:4d09aaff303b9566c3ce657f580bd089ff5c91f5f89cf7d8846c3cdf465b5508", size = 89814, upload-time = "2025-10-16T19:19:18.444Z" } wheels = [ @@ -2788,8 +2192,7 @@ dependencies = [ { name = "packaging" }, { name = "python-json-logger" }, { name = "pyyaml" }, - { name = "referencing", version = "0.36.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "referencing", version = "0.37.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "referencing" }, { name = "rfc3339-validator" }, { name = "rfc3986-validator" }, { name = "traitlets" }, @@ -2804,7 +2207,6 @@ name = "jupyter-lsp" version = "2.3.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "importlib-metadata", marker = "python_full_version < '3.10'" }, { name = "jupyter-server" }, ] sdist = { url = "https://files.pythonhosted.org/packages/eb/5a/9066c9f8e94ee517133cd98dba393459a16cd48bba71a82f16a65415206c/jupyter_lsp-2.3.0.tar.gz", hash = "sha256:458aa59339dc868fb784d73364f17dbce8836e906cd75fd471a325cba02e0245", size = 54823, upload-time = "2025-08-27T17:47:34.671Z" } @@ -2821,8 +2223,7 @@ dependencies = [ { name = "argon2-cffi" }, { name = "jinja2" }, { name = "jupyter-client" }, - { name = "jupyter-core", version = "5.8.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "jupyter-core", version = "5.9.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "jupyter-core" }, { name = "jupyter-events" }, { name = "jupyter-server-terminals" }, { name = "nbconvert" }, @@ -2863,12 +2264,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "async-lru" }, { name = "httpx" }, - { name = "importlib-metadata", marker = "python_full_version < '3.10'" }, - { name = "ipykernel", version = "6.31.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "ipykernel", version = "7.1.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "ipykernel" }, { name = "jinja2" }, - { name = "jupyter-core", version = "5.8.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "jupyter-core", version = "5.9.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "jupyter-core" }, { name = "jupyter-lsp" }, { name = "jupyter-server" }, { name = "jupyterlab-server" }, @@ -2899,7 +2297,6 @@ version = "2.28.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "babel" }, - { name = "importlib-metadata", marker = "python_full_version < '3.10'" }, { name = "jinja2" }, { name = "json5" }, { name = "jsonschema" }, @@ -2942,123 +2339,10 @@ rmq = [ { name = "pytray" }, ] -[[package]] -name = "kiwisolver" -version = "1.4.7" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.10'", -] -sdist = { url = "https://files.pythonhosted.org/packages/85/4d/2255e1c76304cbd60b48cee302b66d1dde4468dc5b1160e4b7cb43778f2a/kiwisolver-1.4.7.tar.gz", hash = "sha256:9893ff81bd7107f7b685d3017cc6583daadb4fc26e4a888350df530e41980a60", size = 97286, upload-time = "2024-09-04T09:39:44.302Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/97/14/fc943dd65268a96347472b4fbe5dcc2f6f55034516f80576cd0dd3a8930f/kiwisolver-1.4.7-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:8a9c83f75223d5e48b0bc9cb1bf2776cf01563e00ade8775ffe13b0b6e1af3a6", size = 122440, upload-time = "2024-09-04T09:03:44.9Z" }, - { url = "https://files.pythonhosted.org/packages/1e/46/e68fed66236b69dd02fcdb506218c05ac0e39745d696d22709498896875d/kiwisolver-1.4.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:58370b1ffbd35407444d57057b57da5d6549d2d854fa30249771775c63b5fe17", size = 65758, upload-time = "2024-09-04T09:03:46.582Z" }, - { url = "https://files.pythonhosted.org/packages/ef/fa/65de49c85838681fc9cb05de2a68067a683717321e01ddafb5b8024286f0/kiwisolver-1.4.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:aa0abdf853e09aff551db11fce173e2177d00786c688203f52c87ad7fcd91ef9", size = 64311, upload-time = "2024-09-04T09:03:47.973Z" }, - { url = "https://files.pythonhosted.org/packages/42/9c/cc8d90f6ef550f65443bad5872ffa68f3dee36de4974768628bea7c14979/kiwisolver-1.4.7-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:8d53103597a252fb3ab8b5845af04c7a26d5e7ea8122303dd7a021176a87e8b9", size = 1637109, upload-time = "2024-09-04T09:03:49.281Z" }, - { url = "https://files.pythonhosted.org/packages/55/91/0a57ce324caf2ff5403edab71c508dd8f648094b18cfbb4c8cc0fde4a6ac/kiwisolver-1.4.7-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:88f17c5ffa8e9462fb79f62746428dd57b46eb931698e42e990ad63103f35e6c", size = 1617814, upload-time = "2024-09-04T09:03:51.444Z" }, - { url = "https://files.pythonhosted.org/packages/12/5d/c36140313f2510e20207708adf36ae4919416d697ee0236b0ddfb6fd1050/kiwisolver-1.4.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:88a9ca9c710d598fd75ee5de59d5bda2684d9db36a9f50b6125eaea3969c2599", size = 1400881, upload-time = "2024-09-04T09:03:53.357Z" }, - { url = "https://files.pythonhosted.org/packages/56/d0/786e524f9ed648324a466ca8df86298780ef2b29c25313d9a4f16992d3cf/kiwisolver-1.4.7-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f4d742cb7af1c28303a51b7a27aaee540e71bb8e24f68c736f6f2ffc82f2bf05", size = 1512972, upload-time = "2024-09-04T09:03:55.082Z" }, - { url = "https://files.pythonhosted.org/packages/67/5a/77851f2f201e6141d63c10a0708e996a1363efaf9e1609ad0441b343763b/kiwisolver-1.4.7-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e28c7fea2196bf4c2f8d46a0415c77a1c480cc0724722f23d7410ffe9842c407", size = 1444787, upload-time = "2024-09-04T09:03:56.588Z" }, - { url = "https://files.pythonhosted.org/packages/06/5f/1f5eaab84355885e224a6fc8d73089e8713dc7e91c121f00b9a1c58a2195/kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:e968b84db54f9d42046cf154e02911e39c0435c9801681e3fc9ce8a3c4130278", size = 2199212, upload-time = "2024-09-04T09:03:58.557Z" }, - { url = "https://files.pythonhosted.org/packages/b5/28/9152a3bfe976a0ae21d445415defc9d1cd8614b2910b7614b30b27a47270/kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:0c18ec74c0472de033e1bebb2911c3c310eef5649133dd0bedf2a169a1b269e5", size = 2346399, upload-time = "2024-09-04T09:04:00.178Z" }, - { url = "https://files.pythonhosted.org/packages/26/f6/453d1904c52ac3b400f4d5e240ac5fec25263716723e44be65f4d7149d13/kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:8f0ea6da6d393d8b2e187e6a5e3fb81f5862010a40c3945e2c6d12ae45cfb2ad", size = 2308688, upload-time = "2024-09-04T09:04:02.216Z" }, - { url = "https://files.pythonhosted.org/packages/5a/9a/d4968499441b9ae187e81745e3277a8b4d7c60840a52dc9d535a7909fac3/kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:f106407dda69ae456dd1227966bf445b157ccc80ba0dff3802bb63f30b74e895", size = 2445493, upload-time = "2024-09-04T09:04:04.571Z" }, - { url = "https://files.pythonhosted.org/packages/07/c9/032267192e7828520dacb64dfdb1d74f292765f179e467c1cba97687f17d/kiwisolver-1.4.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:84ec80df401cfee1457063732d90022f93951944b5b58975d34ab56bb150dfb3", size = 2262191, upload-time = "2024-09-04T09:04:05.969Z" }, - { url = "https://files.pythonhosted.org/packages/6c/ad/db0aedb638a58b2951da46ddaeecf204be8b4f5454df020d850c7fa8dca8/kiwisolver-1.4.7-cp310-cp310-win32.whl", hash = "sha256:71bb308552200fb2c195e35ef05de12f0c878c07fc91c270eb3d6e41698c3bcc", size = 46644, upload-time = "2024-09-04T09:04:07.408Z" }, - { url = "https://files.pythonhosted.org/packages/12/ca/d0f7b7ffbb0be1e7c2258b53554efec1fd652921f10d7d85045aff93ab61/kiwisolver-1.4.7-cp310-cp310-win_amd64.whl", hash = "sha256:44756f9fd339de0fb6ee4f8c1696cfd19b2422e0d70b4cefc1cc7f1f64045a8c", size = 55877, upload-time = "2024-09-04T09:04:08.869Z" }, - { url = "https://files.pythonhosted.org/packages/97/6c/cfcc128672f47a3e3c0d918ecb67830600078b025bfc32d858f2e2d5c6a4/kiwisolver-1.4.7-cp310-cp310-win_arm64.whl", hash = "sha256:78a42513018c41c2ffd262eb676442315cbfe3c44eed82385c2ed043bc63210a", size = 48347, upload-time = "2024-09-04T09:04:10.106Z" }, - { url = "https://files.pythonhosted.org/packages/e9/44/77429fa0a58f941d6e1c58da9efe08597d2e86bf2b2cce6626834f49d07b/kiwisolver-1.4.7-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:d2b0e12a42fb4e72d509fc994713d099cbb15ebf1103545e8a45f14da2dfca54", size = 122442, upload-time = "2024-09-04T09:04:11.432Z" }, - { url = "https://files.pythonhosted.org/packages/e5/20/8c75caed8f2462d63c7fd65e16c832b8f76cda331ac9e615e914ee80bac9/kiwisolver-1.4.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2a8781ac3edc42ea4b90bc23e7d37b665d89423818e26eb6df90698aa2287c95", size = 65762, upload-time = "2024-09-04T09:04:12.468Z" }, - { url = "https://files.pythonhosted.org/packages/f4/98/fe010f15dc7230f45bc4cf367b012d651367fd203caaa992fd1f5963560e/kiwisolver-1.4.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:46707a10836894b559e04b0fd143e343945c97fd170d69a2d26d640b4e297935", size = 64319, upload-time = "2024-09-04T09:04:13.635Z" }, - { url = "https://files.pythonhosted.org/packages/8b/1b/b5d618f4e58c0675654c1e5051bcf42c776703edb21c02b8c74135541f60/kiwisolver-1.4.7-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ef97b8df011141c9b0f6caf23b29379f87dd13183c978a30a3c546d2c47314cb", size = 1334260, upload-time = "2024-09-04T09:04:14.878Z" }, - { url = "https://files.pythonhosted.org/packages/b8/01/946852b13057a162a8c32c4c8d2e9ed79f0bb5d86569a40c0b5fb103e373/kiwisolver-1.4.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3ab58c12a2cd0fc769089e6d38466c46d7f76aced0a1f54c77652446733d2d02", size = 1426589, upload-time = "2024-09-04T09:04:16.514Z" }, - { url = "https://files.pythonhosted.org/packages/70/d1/c9f96df26b459e15cf8a965304e6e6f4eb291e0f7a9460b4ad97b047561e/kiwisolver-1.4.7-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:803b8e1459341c1bb56d1c5c010406d5edec8a0713a0945851290a7930679b51", size = 1541080, upload-time = "2024-09-04T09:04:18.322Z" }, - { url = "https://files.pythonhosted.org/packages/d3/73/2686990eb8b02d05f3de759d6a23a4ee7d491e659007dd4c075fede4b5d0/kiwisolver-1.4.7-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f9a9e8a507420fe35992ee9ecb302dab68550dedc0da9e2880dd88071c5fb052", size = 1470049, upload-time = "2024-09-04T09:04:20.266Z" }, - { url = "https://files.pythonhosted.org/packages/a7/4b/2db7af3ed3af7c35f388d5f53c28e155cd402a55432d800c543dc6deb731/kiwisolver-1.4.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18077b53dc3bb490e330669a99920c5e6a496889ae8c63b58fbc57c3d7f33a18", size = 1426376, upload-time = "2024-09-04T09:04:22.419Z" }, - { url = "https://files.pythonhosted.org/packages/05/83/2857317d04ea46dc5d115f0df7e676997bbd968ced8e2bd6f7f19cfc8d7f/kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6af936f79086a89b3680a280c47ea90b4df7047b5bdf3aa5c524bbedddb9e545", size = 2222231, upload-time = "2024-09-04T09:04:24.526Z" }, - { url = "https://files.pythonhosted.org/packages/0d/b5/866f86f5897cd4ab6d25d22e403404766a123f138bd6a02ecb2cdde52c18/kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:3abc5b19d24af4b77d1598a585b8a719beb8569a71568b66f4ebe1fb0449460b", size = 2368634, upload-time = "2024-09-04T09:04:25.899Z" }, - { url = "https://files.pythonhosted.org/packages/c1/ee/73de8385403faba55f782a41260210528fe3273d0cddcf6d51648202d6d0/kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:933d4de052939d90afbe6e9d5273ae05fb836cc86c15b686edd4b3560cc0ee36", size = 2329024, upload-time = "2024-09-04T09:04:28.523Z" }, - { url = "https://files.pythonhosted.org/packages/a1/e7/cd101d8cd2cdfaa42dc06c433df17c8303d31129c9fdd16c0ea37672af91/kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:65e720d2ab2b53f1f72fb5da5fb477455905ce2c88aaa671ff0a447c2c80e8e3", size = 2468484, upload-time = "2024-09-04T09:04:30.547Z" }, - { url = "https://files.pythonhosted.org/packages/e1/72/84f09d45a10bc57a40bb58b81b99d8f22b58b2040c912b7eb97ebf625bf2/kiwisolver-1.4.7-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:3bf1ed55088f214ba6427484c59553123fdd9b218a42bbc8c6496d6754b1e523", size = 2284078, upload-time = "2024-09-04T09:04:33.218Z" }, - { url = "https://files.pythonhosted.org/packages/d2/d4/71828f32b956612dc36efd7be1788980cb1e66bfb3706e6dec9acad9b4f9/kiwisolver-1.4.7-cp311-cp311-win32.whl", hash = "sha256:4c00336b9dd5ad96d0a558fd18a8b6f711b7449acce4c157e7343ba92dd0cf3d", size = 46645, upload-time = "2024-09-04T09:04:34.371Z" }, - { url = "https://files.pythonhosted.org/packages/a1/65/d43e9a20aabcf2e798ad1aff6c143ae3a42cf506754bcb6a7ed8259c8425/kiwisolver-1.4.7-cp311-cp311-win_amd64.whl", hash = "sha256:929e294c1ac1e9f615c62a4e4313ca1823ba37326c164ec720a803287c4c499b", size = 56022, upload-time = "2024-09-04T09:04:35.786Z" }, - { url = "https://files.pythonhosted.org/packages/35/b3/9f75a2e06f1b4ca00b2b192bc2b739334127d27f1d0625627ff8479302ba/kiwisolver-1.4.7-cp311-cp311-win_arm64.whl", hash = "sha256:e33e8fbd440c917106b237ef1a2f1449dfbb9b6f6e1ce17c94cd6a1e0d438376", size = 48536, upload-time = "2024-09-04T09:04:37.525Z" }, - { url = "https://files.pythonhosted.org/packages/97/9c/0a11c714cf8b6ef91001c8212c4ef207f772dd84540104952c45c1f0a249/kiwisolver-1.4.7-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:5360cc32706dab3931f738d3079652d20982511f7c0ac5711483e6eab08efff2", size = 121808, upload-time = "2024-09-04T09:04:38.637Z" }, - { url = "https://files.pythonhosted.org/packages/f2/d8/0fe8c5f5d35878ddd135f44f2af0e4e1d379e1c7b0716f97cdcb88d4fd27/kiwisolver-1.4.7-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:942216596dc64ddb25adb215c3c783215b23626f8d84e8eff8d6d45c3f29f75a", size = 65531, upload-time = "2024-09-04T09:04:39.694Z" }, - { url = "https://files.pythonhosted.org/packages/80/c5/57fa58276dfdfa612241d640a64ca2f76adc6ffcebdbd135b4ef60095098/kiwisolver-1.4.7-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:48b571ecd8bae15702e4f22d3ff6a0f13e54d3d00cd25216d5e7f658242065ee", size = 63894, upload-time = "2024-09-04T09:04:41.6Z" }, - { url = "https://files.pythonhosted.org/packages/8b/e9/26d3edd4c4ad1c5b891d8747a4f81b1b0aba9fb9721de6600a4adc09773b/kiwisolver-1.4.7-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ad42ba922c67c5f219097b28fae965e10045ddf145d2928bfac2eb2e17673640", size = 1369296, upload-time = "2024-09-04T09:04:42.886Z" }, - { url = "https://files.pythonhosted.org/packages/b6/67/3f4850b5e6cffb75ec40577ddf54f7b82b15269cc5097ff2e968ee32ea7d/kiwisolver-1.4.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:612a10bdae23404a72941a0fc8fa2660c6ea1217c4ce0dbcab8a8f6543ea9e7f", size = 1461450, upload-time = "2024-09-04T09:04:46.284Z" }, - { url = "https://files.pythonhosted.org/packages/52/be/86cbb9c9a315e98a8dc6b1d23c43cffd91d97d49318854f9c37b0e41cd68/kiwisolver-1.4.7-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9e838bba3a3bac0fe06d849d29772eb1afb9745a59710762e4ba3f4cb8424483", size = 1579168, upload-time = "2024-09-04T09:04:47.91Z" }, - { url = "https://files.pythonhosted.org/packages/0f/00/65061acf64bd5fd34c1f4ae53f20b43b0a017a541f242a60b135b9d1e301/kiwisolver-1.4.7-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:22f499f6157236c19f4bbbd472fa55b063db77a16cd74d49afe28992dff8c258", size = 1507308, upload-time = "2024-09-04T09:04:49.465Z" }, - { url = "https://files.pythonhosted.org/packages/21/e4/c0b6746fd2eb62fe702118b3ca0cb384ce95e1261cfada58ff693aeec08a/kiwisolver-1.4.7-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:693902d433cf585133699972b6d7c42a8b9f8f826ebcaf0132ff55200afc599e", size = 1464186, upload-time = "2024-09-04T09:04:50.949Z" }, - { url = "https://files.pythonhosted.org/packages/0a/0f/529d0a9fffb4d514f2782c829b0b4b371f7f441d61aa55f1de1c614c4ef3/kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:4e77f2126c3e0b0d055f44513ed349038ac180371ed9b52fe96a32aa071a5107", size = 2247877, upload-time = "2024-09-04T09:04:52.388Z" }, - { url = "https://files.pythonhosted.org/packages/d1/e1/66603ad779258843036d45adcbe1af0d1a889a07af4635f8b4ec7dccda35/kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:657a05857bda581c3656bfc3b20e353c232e9193eb167766ad2dc58b56504948", size = 2404204, upload-time = "2024-09-04T09:04:54.385Z" }, - { url = "https://files.pythonhosted.org/packages/8d/61/de5fb1ca7ad1f9ab7970e340a5b833d735df24689047de6ae71ab9d8d0e7/kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:4bfa75a048c056a411f9705856abfc872558e33c055d80af6a380e3658766038", size = 2352461, upload-time = "2024-09-04T09:04:56.307Z" }, - { url = "https://files.pythonhosted.org/packages/ba/d2/0edc00a852e369827f7e05fd008275f550353f1f9bcd55db9363d779fc63/kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:34ea1de54beef1c104422d210c47c7d2a4999bdecf42c7b5718fbe59a4cac383", size = 2501358, upload-time = "2024-09-04T09:04:57.922Z" }, - { url = "https://files.pythonhosted.org/packages/84/15/adc15a483506aec6986c01fb7f237c3aec4d9ed4ac10b756e98a76835933/kiwisolver-1.4.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:90da3b5f694b85231cf93586dad5e90e2d71b9428f9aad96952c99055582f520", size = 2314119, upload-time = "2024-09-04T09:04:59.332Z" }, - { url = "https://files.pythonhosted.org/packages/36/08/3a5bb2c53c89660863a5aa1ee236912269f2af8762af04a2e11df851d7b2/kiwisolver-1.4.7-cp312-cp312-win32.whl", hash = "sha256:18e0cca3e008e17fe9b164b55735a325140a5a35faad8de92dd80265cd5eb80b", size = 46367, upload-time = "2024-09-04T09:05:00.804Z" }, - { url = "https://files.pythonhosted.org/packages/19/93/c05f0a6d825c643779fc3c70876bff1ac221f0e31e6f701f0e9578690d70/kiwisolver-1.4.7-cp312-cp312-win_amd64.whl", hash = "sha256:58cb20602b18f86f83a5c87d3ee1c766a79c0d452f8def86d925e6c60fbf7bfb", size = 55884, upload-time = "2024-09-04T09:05:01.924Z" }, - { url = "https://files.pythonhosted.org/packages/d2/f9/3828d8f21b6de4279f0667fb50a9f5215e6fe57d5ec0d61905914f5b6099/kiwisolver-1.4.7-cp312-cp312-win_arm64.whl", hash = "sha256:f5a8b53bdc0b3961f8b6125e198617c40aeed638b387913bf1ce78afb1b0be2a", size = 48528, upload-time = "2024-09-04T09:05:02.983Z" }, - { url = "https://files.pythonhosted.org/packages/c4/06/7da99b04259b0f18b557a4effd1b9c901a747f7fdd84cf834ccf520cb0b2/kiwisolver-1.4.7-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:2e6039dcbe79a8e0f044f1c39db1986a1b8071051efba3ee4d74f5b365f5226e", size = 121913, upload-time = "2024-09-04T09:05:04.072Z" }, - { url = "https://files.pythonhosted.org/packages/97/f5/b8a370d1aa593c17882af0a6f6755aaecd643640c0ed72dcfd2eafc388b9/kiwisolver-1.4.7-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a1ecf0ac1c518487d9d23b1cd7139a6a65bc460cd101ab01f1be82ecf09794b6", size = 65627, upload-time = "2024-09-04T09:05:05.119Z" }, - { url = "https://files.pythonhosted.org/packages/2a/fc/6c0374f7503522539e2d4d1b497f5ebad3f8ed07ab51aed2af988dd0fb65/kiwisolver-1.4.7-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:7ab9ccab2b5bd5702ab0803676a580fffa2aa178c2badc5557a84cc943fcf750", size = 63888, upload-time = "2024-09-04T09:05:06.191Z" }, - { url = "https://files.pythonhosted.org/packages/bf/3e/0b7172793d0f41cae5c923492da89a2ffcd1adf764c16159ca047463ebd3/kiwisolver-1.4.7-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f816dd2277f8d63d79f9c8473a79fe54047bc0467754962840782c575522224d", size = 1369145, upload-time = "2024-09-04T09:05:07.919Z" }, - { url = "https://files.pythonhosted.org/packages/77/92/47d050d6f6aced2d634258123f2688fbfef8ded3c5baf2c79d94d91f1f58/kiwisolver-1.4.7-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf8bcc23ceb5a1b624572a1623b9f79d2c3b337c8c455405ef231933a10da379", size = 1461448, upload-time = "2024-09-04T09:05:10.01Z" }, - { url = "https://files.pythonhosted.org/packages/9c/1b/8f80b18e20b3b294546a1adb41701e79ae21915f4175f311a90d042301cf/kiwisolver-1.4.7-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dea0bf229319828467d7fca8c7c189780aa9ff679c94539eed7532ebe33ed37c", size = 1578750, upload-time = "2024-09-04T09:05:11.598Z" }, - { url = "https://files.pythonhosted.org/packages/a4/fe/fe8e72f3be0a844f257cadd72689c0848c6d5c51bc1d60429e2d14ad776e/kiwisolver-1.4.7-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c06a4c7cf15ec739ce0e5971b26c93638730090add60e183530d70848ebdd34", size = 1507175, upload-time = "2024-09-04T09:05:13.22Z" }, - { url = "https://files.pythonhosted.org/packages/39/fa/cdc0b6105d90eadc3bee525fecc9179e2b41e1ce0293caaf49cb631a6aaf/kiwisolver-1.4.7-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:913983ad2deb14e66d83c28b632fd35ba2b825031f2fa4ca29675e665dfecbe1", size = 1463963, upload-time = "2024-09-04T09:05:15.925Z" }, - { url = "https://files.pythonhosted.org/packages/6e/5c/0c03c4e542720c6177d4f408e56d1c8315899db72d46261a4e15b8b33a41/kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5337ec7809bcd0f424c6b705ecf97941c46279cf5ed92311782c7c9c2026f07f", size = 2248220, upload-time = "2024-09-04T09:05:17.434Z" }, - { url = "https://files.pythonhosted.org/packages/3d/ee/55ef86d5a574f4e767df7da3a3a7ff4954c996e12d4fbe9c408170cd7dcc/kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:4c26ed10c4f6fa6ddb329a5120ba3b6db349ca192ae211e882970bfc9d91420b", size = 2404463, upload-time = "2024-09-04T09:05:18.997Z" }, - { url = "https://files.pythonhosted.org/packages/0f/6d/73ad36170b4bff4825dc588acf4f3e6319cb97cd1fb3eb04d9faa6b6f212/kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:c619b101e6de2222c1fcb0531e1b17bbffbe54294bfba43ea0d411d428618c27", size = 2352842, upload-time = "2024-09-04T09:05:21.299Z" }, - { url = "https://files.pythonhosted.org/packages/0b/16/fa531ff9199d3b6473bb4d0f47416cdb08d556c03b8bc1cccf04e756b56d/kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:073a36c8273647592ea332e816e75ef8da5c303236ec0167196793eb1e34657a", size = 2501635, upload-time = "2024-09-04T09:05:23.588Z" }, - { url = "https://files.pythonhosted.org/packages/78/7e/aa9422e78419db0cbe75fb86d8e72b433818f2e62e2e394992d23d23a583/kiwisolver-1.4.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:3ce6b2b0231bda412463e152fc18335ba32faf4e8c23a754ad50ffa70e4091ee", size = 2314556, upload-time = "2024-09-04T09:05:25.907Z" }, - { url = "https://files.pythonhosted.org/packages/a8/b2/15f7f556df0a6e5b3772a1e076a9d9f6c538ce5f05bd590eca8106508e06/kiwisolver-1.4.7-cp313-cp313-win32.whl", hash = "sha256:f4c9aee212bc89d4e13f58be11a56cc8036cabad119259d12ace14b34476fd07", size = 46364, upload-time = "2024-09-04T09:05:27.184Z" }, - { url = "https://files.pythonhosted.org/packages/0b/db/32e897e43a330eee8e4770bfd2737a9584b23e33587a0812b8e20aac38f7/kiwisolver-1.4.7-cp313-cp313-win_amd64.whl", hash = "sha256:8a3ec5aa8e38fc4c8af308917ce12c536f1c88452ce554027e55b22cbbfbff76", size = 55887, upload-time = "2024-09-04T09:05:28.372Z" }, - { url = "https://files.pythonhosted.org/packages/c8/a4/df2bdca5270ca85fd25253049eb6708d4127be2ed0e5c2650217450b59e9/kiwisolver-1.4.7-cp313-cp313-win_arm64.whl", hash = "sha256:76c8094ac20ec259471ac53e774623eb62e6e1f56cd8690c67ce6ce4fcb05650", size = 48530, upload-time = "2024-09-04T09:05:30.225Z" }, - { url = "https://files.pythonhosted.org/packages/11/88/37ea0ea64512997b13d69772db8dcdc3bfca5442cda3a5e4bb943652ee3e/kiwisolver-1.4.7-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:3f9362ecfca44c863569d3d3c033dbe8ba452ff8eed6f6b5806382741a1334bd", size = 122449, upload-time = "2024-09-04T09:05:55.311Z" }, - { url = "https://files.pythonhosted.org/packages/4e/45/5a5c46078362cb3882dcacad687c503089263c017ca1241e0483857791eb/kiwisolver-1.4.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e8df2eb9b2bac43ef8b082e06f750350fbbaf2887534a5be97f6cf07b19d9583", size = 65757, upload-time = "2024-09-04T09:05:56.906Z" }, - { url = "https://files.pythonhosted.org/packages/8a/be/a6ae58978772f685d48dd2e84460937761c53c4bbd84e42b0336473d9775/kiwisolver-1.4.7-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f32d6edbc638cde7652bd690c3e728b25332acbadd7cad670cc4a02558d9c417", size = 64312, upload-time = "2024-09-04T09:05:58.384Z" }, - { url = "https://files.pythonhosted.org/packages/f4/04/18ef6f452d311e1e1eb180c9bf5589187fa1f042db877e6fe443ef10099c/kiwisolver-1.4.7-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:e2e6c39bd7b9372b0be21456caab138e8e69cc0fc1190a9dfa92bd45a1e6e904", size = 1626966, upload-time = "2024-09-04T09:05:59.855Z" }, - { url = "https://files.pythonhosted.org/packages/21/b1/40655f6c3fa11ce740e8a964fa8e4c0479c87d6a7944b95af799c7a55dfe/kiwisolver-1.4.7-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:dda56c24d869b1193fcc763f1284b9126550eaf84b88bbc7256e15028f19188a", size = 1607044, upload-time = "2024-09-04T09:06:02.16Z" }, - { url = "https://files.pythonhosted.org/packages/fd/93/af67dbcfb9b3323bbd2c2db1385a7139d8f77630e4a37bb945b57188eb2d/kiwisolver-1.4.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79849239c39b5e1fd906556c474d9b0439ea6792b637511f3fe3a41158d89ca8", size = 1391879, upload-time = "2024-09-04T09:06:03.908Z" }, - { url = "https://files.pythonhosted.org/packages/40/6f/d60770ef98e77b365d96061d090c0cd9e23418121c55fff188fa4bdf0b54/kiwisolver-1.4.7-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5e3bc157fed2a4c02ec468de4ecd12a6e22818d4f09cde2c31ee3226ffbefab2", size = 1504751, upload-time = "2024-09-04T09:06:05.58Z" }, - { url = "https://files.pythonhosted.org/packages/fa/3a/5f38667d313e983c432f3fcd86932177519ed8790c724e07d77d1de0188a/kiwisolver-1.4.7-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3da53da805b71e41053dc670f9a820d1157aae77b6b944e08024d17bcd51ef88", size = 1436990, upload-time = "2024-09-04T09:06:08.126Z" }, - { url = "https://files.pythonhosted.org/packages/cb/3b/1520301a47326e6a6043b502647e42892be33b3f051e9791cc8bb43f1a32/kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:8705f17dfeb43139a692298cb6637ee2e59c0194538153e83e9ee0c75c2eddde", size = 2191122, upload-time = "2024-09-04T09:06:10.345Z" }, - { url = "https://files.pythonhosted.org/packages/cf/c4/eb52da300c166239a2233f1f9c4a1b767dfab98fae27681bfb7ea4873cb6/kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:82a5c2f4b87c26bb1a0ef3d16b5c4753434633b83d365cc0ddf2770c93829e3c", size = 2338126, upload-time = "2024-09-04T09:06:12.321Z" }, - { url = "https://files.pythonhosted.org/packages/1a/cb/42b92fd5eadd708dd9107c089e817945500685f3437ce1fd387efebc6d6e/kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:ce8be0466f4c0d585cdb6c1e2ed07232221df101a4c6f28821d2aa754ca2d9e2", size = 2298313, upload-time = "2024-09-04T09:06:14.562Z" }, - { url = "https://files.pythonhosted.org/packages/4f/eb/be25aa791fe5fc75a8b1e0c965e00f942496bc04635c9aae8035f6b76dcd/kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:409afdfe1e2e90e6ee7fc896f3df9a7fec8e793e58bfa0d052c8a82f99c37abb", size = 2437784, upload-time = "2024-09-04T09:06:16.767Z" }, - { url = "https://files.pythonhosted.org/packages/c5/22/30a66be7f3368d76ff95689e1c2e28d382383952964ab15330a15d8bfd03/kiwisolver-1.4.7-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:5b9c3f4ee0b9a439d2415012bd1b1cc2df59e4d6a9939f4d669241d30b414327", size = 2253988, upload-time = "2024-09-04T09:06:18.705Z" }, - { url = "https://files.pythonhosted.org/packages/35/d3/5f2ecb94b5211c8a04f218a76133cc8d6d153b0f9cd0b45fad79907f0689/kiwisolver-1.4.7-cp39-cp39-win32.whl", hash = "sha256:a79ae34384df2b615eefca647a2873842ac3b596418032bef9a7283675962644", size = 46980, upload-time = "2024-09-04T09:06:20.106Z" }, - { url = "https://files.pythonhosted.org/packages/ef/17/cd10d020578764ea91740204edc6b3236ed8106228a46f568d716b11feb2/kiwisolver-1.4.7-cp39-cp39-win_amd64.whl", hash = "sha256:cf0438b42121a66a3a667de17e779330fc0f20b0d97d59d2f2121e182b0505e4", size = 55847, upload-time = "2024-09-04T09:06:21.407Z" }, - { url = "https://files.pythonhosted.org/packages/91/84/32232502020bd78d1d12be7afde15811c64a95ed1f606c10456db4e4c3ac/kiwisolver-1.4.7-cp39-cp39-win_arm64.whl", hash = "sha256:764202cc7e70f767dab49e8df52c7455e8de0df5d858fa801a11aa0d882ccf3f", size = 48494, upload-time = "2024-09-04T09:06:22.648Z" }, - { url = "https://files.pythonhosted.org/packages/ac/59/741b79775d67ab67ced9bb38552da688c0305c16e7ee24bba7a2be253fb7/kiwisolver-1.4.7-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:94252291e3fe68001b1dd747b4c0b3be12582839b95ad4d1b641924d68fd4643", size = 59491, upload-time = "2024-09-04T09:06:24.188Z" }, - { url = "https://files.pythonhosted.org/packages/58/cc/fb239294c29a5656e99e3527f7369b174dd9cc7c3ef2dea7cb3c54a8737b/kiwisolver-1.4.7-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:5b7dfa3b546da08a9f622bb6becdb14b3e24aaa30adba66749d38f3cc7ea9706", size = 57648, upload-time = "2024-09-04T09:06:25.559Z" }, - { url = "https://files.pythonhosted.org/packages/3b/ef/2f009ac1f7aab9f81efb2d837301d255279d618d27b6015780115ac64bdd/kiwisolver-1.4.7-pp310-pypy310_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bd3de6481f4ed8b734da5df134cd5a6a64fe32124fe83dde1e5b5f29fe30b1e6", size = 84257, upload-time = "2024-09-04T09:06:27.038Z" }, - { url = "https://files.pythonhosted.org/packages/81/e1/c64f50987f85b68b1c52b464bb5bf73e71570c0f7782d626d1eb283ad620/kiwisolver-1.4.7-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a91b5f9f1205845d488c928e8570dcb62b893372f63b8b6e98b863ebd2368ff2", size = 80906, upload-time = "2024-09-04T09:06:28.48Z" }, - { url = "https://files.pythonhosted.org/packages/fd/71/1687c5c0a0be2cee39a5c9c389e546f9c6e215e46b691d00d9f646892083/kiwisolver-1.4.7-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40fa14dbd66b8b8f470d5fc79c089a66185619d31645f9b0773b88b19f7223c4", size = 79951, upload-time = "2024-09-04T09:06:29.966Z" }, - { url = "https://files.pythonhosted.org/packages/ea/8b/d7497df4a1cae9367adf21665dd1f896c2a7aeb8769ad77b662c5e2bcce7/kiwisolver-1.4.7-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:eb542fe7933aa09d8d8f9d9097ef37532a7df6497819d16efe4359890a2f417a", size = 55715, upload-time = "2024-09-04T09:06:31.489Z" }, - { url = "https://files.pythonhosted.org/packages/d5/df/ce37d9b26f07ab90880923c94d12a6ff4d27447096b4c849bfc4339ccfdf/kiwisolver-1.4.7-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:8b01aac285f91ca889c800042c35ad3b239e704b150cfd3382adfc9dcc780e39", size = 58666, upload-time = "2024-09-04T09:06:43.756Z" }, - { url = "https://files.pythonhosted.org/packages/b0/d3/e4b04f43bc629ac8e186b77b2b1a251cdfa5b7610fa189dc0db622672ce6/kiwisolver-1.4.7-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:48be928f59a1f5c8207154f935334d374e79f2b5d212826307d072595ad76a2e", size = 57088, upload-time = "2024-09-04T09:06:45.406Z" }, - { url = "https://files.pythonhosted.org/packages/30/1c/752df58e2d339e670a535514d2db4fe8c842ce459776b8080fbe08ebb98e/kiwisolver-1.4.7-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f37cfe618a117e50d8c240555331160d73d0411422b59b5ee217843d7b693608", size = 84321, upload-time = "2024-09-04T09:06:47.557Z" }, - { url = "https://files.pythonhosted.org/packages/f0/f8/fe6484e847bc6e238ec9f9828089fb2c0bb53f2f5f3a79351fde5b565e4f/kiwisolver-1.4.7-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:599b5c873c63a1f6ed7eead644a8a380cfbdf5db91dcb6f85707aaab213b1674", size = 80776, upload-time = "2024-09-04T09:06:49.235Z" }, - { url = "https://files.pythonhosted.org/packages/9b/57/d7163c0379f250ef763aba85330a19feefb5ce6cb541ade853aaba881524/kiwisolver-1.4.7-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:801fa7802e5cfabe3ab0c81a34c323a319b097dfb5004be950482d882f3d7225", size = 79984, upload-time = "2024-09-04T09:06:51.336Z" }, - { url = "https://files.pythonhosted.org/packages/8c/95/4a103776c265d13b3d2cd24fb0494d4e04ea435a8ef97e1b2c026d43250b/kiwisolver-1.4.7-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:0c6c43471bc764fad4bc99c5c2d6d16a676b1abf844ca7c8702bdae92df01ee0", size = 55811, upload-time = "2024-09-04T09:06:53.078Z" }, -] - [[package]] name = "kiwisolver" version = "1.4.9" source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.14' and sys_platform == 'win32'", - "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32'", - "python_full_version == '3.11.*' and sys_platform == 'win32'", - "python_full_version >= '3.14' and sys_platform != 'win32'", - "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'win32'", - "python_full_version == '3.11.*' and sys_platform != 'win32'", - "python_full_version == '3.10.*' and sys_platform == 'win32'", - "python_full_version == '3.10.*' and sys_platform != 'win32'", -] sdist = { url = "https://files.pythonhosted.org/packages/5c/3c/85844f1b0feb11ee581ac23fe5fce65cd049a200c1446708cc1b7f922875/kiwisolver-1.4.9.tar.gz", hash = "sha256:c3b22c26c6fd6811b0ae8363b95ca8ce4ea3c202d3d0975b2914310ceb1bcc4d", size = 97564, upload-time = "2025-08-10T21:27:49.279Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/c6/5d/8ce64e36d4e3aac5ca96996457dcf33e34e6051492399a3f1fec5657f30b/kiwisolver-1.4.9-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:b4b4d74bda2b8ebf4da5bd42af11d02d04428b2c32846e4c2c93219df8a7987b", size = 124159, upload-time = "2025-08-10T21:25:35.472Z" }, @@ -3172,15 +2456,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/82/3d/14ce75ef66813643812f3093ab17e46d3a206942ce7376d31ec2d36229e7/lark-1.3.1-py3-none-any.whl", hash = "sha256:c629b661023a014c37da873b4ff58a817398d12635d3bbb2c5a03be7fe5d1e12", size = 113151, upload-time = "2025-10-27T18:25:54.882Z" }, ] -[[package]] -name = "latexcodec" -version = "3.0.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/27/dd/4270b2c5e2ee49316c3859e62293bd2ea8e382339d63ab7bbe9f39c0ec3b/latexcodec-3.0.1.tar.gz", hash = "sha256:e78a6911cd72f9dec35031c6ec23584de6842bfbc4610a9678868d14cdfb0357", size = 31222, upload-time = "2025-06-17T18:47:34.051Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/b5/40/23569737873cc9637fd488606347e9dd92b9fa37ba4fcda1f98ee5219a97/latexcodec-3.0.1-py3-none-any.whl", hash = "sha256:a9eb8200bff693f0437a69581f7579eb6bca25c4193515c09900ce76451e452e", size = 18532, upload-time = "2025-06-17T18:47:30.726Z" }, -] - [[package]] name = "librt" version = "0.6.2" @@ -3252,16 +2527,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/d5/4c/97df40d47c9773aa01543e1eacb43cd9ebb0b55110aae4af333f46d7a3a7/librt-0.6.2-cp314-cp314t-win32.whl", hash = "sha256:64451cbf341224e274f6f7e27c09c00a6758c7d4d6176a03e259a12e0befb7d8", size = 19463, upload-time = "2025-11-18T16:51:02.414Z" }, { url = "https://files.pythonhosted.org/packages/04/7d/17ebd7a13d937ee466a68c999f249d8c2e61160781c5391c8e3327c4f18c/librt-0.6.2-cp314-cp314t-win_amd64.whl", hash = "sha256:dd08422c485df288c5c899d2adbbba15e317fc30f627119c99c2111da1920fb5", size = 21044, upload-time = "2025-11-18T16:51:03.439Z" }, { url = "https://files.pythonhosted.org/packages/af/ee/9e30b435bc341844603fb209150594b1a801ced7ddb04be7dd2003a694d2/librt-0.6.2-cp314-cp314t-win_arm64.whl", hash = "sha256:de06350dfbf0649c0458e0af95fa516886120d0d11ed4ebbfcb7f67b038ab393", size = 20246, upload-time = "2025-11-18T16:51:04.724Z" }, - { url = "https://files.pythonhosted.org/packages/1d/2c/8a95c7979abf0f37fdfb1a9eba3dba895030887fadc052e2ffaeba4c8f42/librt-0.6.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:de1013446dc044bed5e7978cf29a8ce2263d5c53f28b38fa408476357f5512bd", size = 27434, upload-time = "2025-11-18T16:51:05.685Z" }, - { url = "https://files.pythonhosted.org/packages/37/9e/e9b76963b666dfaa169ea07d6592d32b2b17a0f48a3cdc7a6973ca87ae5e/librt-0.6.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d2f6d1dc8a48244e31df30bde1795cafccd51f84ed6e10ded0f37595e3f6d78c", size = 27786, upload-time = "2025-11-18T16:51:06.639Z" }, - { url = "https://files.pythonhosted.org/packages/02/4e/6fd9c087b27018808a93b9b66dee49d99a094d32821c73467c2851ba2fc3/librt-0.6.2-cp39-cp39-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:9da3de5096c919d1bbcef803497eef9641ea5d69729d3599b671bec34ae32c3b", size = 81250, upload-time = "2025-11-18T16:51:07.643Z" }, - { url = "https://files.pythonhosted.org/packages/87/e0/bf8259f10d0fe4b7ce089d754321b9ca8e6434a1dbf520c40258c7c7aa6d/librt-0.6.2-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:98986e7dbcf763cefea7437118405b327bf7f23b75449e1a4d97dd53418de59a", size = 85432, upload-time = "2025-11-18T16:51:08.709Z" }, - { url = "https://files.pythonhosted.org/packages/c4/39/7771939b061f2f015ddd12a9ee588c9eec6981af3daeb6dbdfb008448cf4/librt-0.6.2-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c68c8b2f49c34988fbad8ef4ca4d5f113b71e4e9afb580210eccfe6ee08e4636", size = 85677, upload-time = "2025-11-18T16:51:10.468Z" }, - { url = "https://files.pythonhosted.org/packages/99/7e/98a3974f23958e8c8e32288c7d14561ab7b1cde41b5639ec8e4df7433bb7/librt-0.6.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:17e92b1e425b341e53fce61f9332317e5d1ad16b23424175a3f834e9abc71d87", size = 88093, upload-time = "2025-11-18T16:51:11.55Z" }, - { url = "https://files.pythonhosted.org/packages/6f/b9/40d9b7bc9ca00bf7e0ad76960de3e2ed4318cc13a0b9af62ecfb4db9f35f/librt-0.6.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:172ef6a8374f779c9738bc92959d6a9f2182d84072e5758a05dcca072dc622ad", size = 86385, upload-time = "2025-11-18T16:51:12.622Z" }, - { url = "https://files.pythonhosted.org/packages/c7/c8/a5230b7293c33f5a2c28fbbb39a846a2c2bcc923b497694faf088271abb8/librt-0.6.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:911f83129937eefaf8e98cec42c7bb5cd6d19b048f3e4a6c98ebe58ce62267f0", size = 89065, upload-time = "2025-11-18T16:51:13.971Z" }, - { url = "https://files.pythonhosted.org/packages/11/9f/55f53a2bd566f5aaf7afee93d2d5da1e83455d443e449f252c1c424d6b2d/librt-0.6.2-cp39-cp39-win32.whl", hash = "sha256:7c749c94421ced50793d10ee7b37896a98eeed76caea0a992a73ea56937d17b4", size = 19867, upload-time = "2025-11-18T16:51:14.958Z" }, - { url = "https://files.pythonhosted.org/packages/19/09/02570672154a7665af08ca0c8fe4e47da33890d1c372e8d65fb9325ee42e/librt-0.6.2-cp39-cp39-win_amd64.whl", hash = "sha256:71c24bfb56fed324395dbf094340571e9521ce868fba2b4a453a17fefa78f7e5", size = 21409, upload-time = "2025-11-18T16:51:16.009Z" }, ] [[package]] @@ -3388,108 +2653,24 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/fb/df/5bd7a48c256faecd1d36edc13133e51397e41b73bb77e1a69deab746ebac/markupsafe-3.0.3-cp314-cp314t-win32.whl", hash = "sha256:915c04ba3851909ce68ccc2b8e2cd691618c4dc4c4232fb7982bca3f41fd8c3d", size = 14819, upload-time = "2025-09-27T18:37:26.285Z" }, { url = "https://files.pythonhosted.org/packages/1a/8a/0402ba61a2f16038b48b39bccca271134be00c5c9f0f623208399333c448/markupsafe-3.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4faffd047e07c38848ce017e8725090413cd80cbc23d86e55c587bf979e579c9", size = 15426, upload-time = "2025-09-27T18:37:27.316Z" }, { url = "https://files.pythonhosted.org/packages/70/bc/6f1c2f612465f5fa89b95bead1f44dcb607670fd42891d8fdcd5d039f4f4/markupsafe-3.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:32001d6a8fc98c8cb5c947787c5d08b0a50663d139f1305bac5885d98d9b40fa", size = 14146, upload-time = "2025-09-27T18:37:28.327Z" }, - { url = "https://files.pythonhosted.org/packages/56/23/0d8c13a44bde9154821586520840643467aee574d8ce79a17da539ee7fed/markupsafe-3.0.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:15d939a21d546304880945ca1ecb8a039db6b4dc49b2c5a400387cdae6a62e26", size = 11623, upload-time = "2025-09-27T18:37:29.296Z" }, - { url = "https://files.pythonhosted.org/packages/fd/23/07a2cb9a8045d5f3f0890a8c3bc0859d7a47bfd9a560b563899bec7b72ed/markupsafe-3.0.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f71a396b3bf33ecaa1626c255855702aca4d3d9fea5e051b41ac59a9c1c41edc", size = 12049, upload-time = "2025-09-27T18:37:30.234Z" }, - { url = "https://files.pythonhosted.org/packages/bc/e4/6be85eb81503f8e11b61c0b6369b6e077dcf0a74adbd9ebf6b349937b4e9/markupsafe-3.0.3-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0f4b68347f8c5eab4a13419215bdfd7f8c9b19f2b25520968adfad23eb0ce60c", size = 21923, upload-time = "2025-09-27T18:37:31.177Z" }, - { url = "https://files.pythonhosted.org/packages/6f/bc/4dc914ead3fe6ddaef035341fee0fc956949bbd27335b611829292b89ee2/markupsafe-3.0.3-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e8fc20152abba6b83724d7ff268c249fa196d8259ff481f3b1476383f8f24e42", size = 20543, upload-time = "2025-09-27T18:37:32.168Z" }, - { url = "https://files.pythonhosted.org/packages/89/6e/5fe81fbcfba4aef4093d5f856e5c774ec2057946052d18d168219b7bd9f9/markupsafe-3.0.3-cp39-cp39-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:949b8d66bc381ee8b007cd945914c721d9aba8e27f71959d750a46f7c282b20b", size = 20585, upload-time = "2025-09-27T18:37:33.166Z" }, - { url = "https://files.pythonhosted.org/packages/f6/f6/e0e5a3d3ae9c4020f696cd055f940ef86b64fe88de26f3a0308b9d3d048c/markupsafe-3.0.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:3537e01efc9d4dccdf77221fb1cb3b8e1a38d5428920e0657ce299b20324d758", size = 21387, upload-time = "2025-09-27T18:37:34.185Z" }, - { url = "https://files.pythonhosted.org/packages/c8/25/651753ef4dea08ea790f4fbb65146a9a44a014986996ca40102e237aa49a/markupsafe-3.0.3-cp39-cp39-musllinux_1_2_riscv64.whl", hash = "sha256:591ae9f2a647529ca990bc681daebdd52c8791ff06c2bfa05b65163e28102ef2", size = 20133, upload-time = "2025-09-27T18:37:35.138Z" }, - { url = "https://files.pythonhosted.org/packages/dc/0a/c3cf2b4fef5f0426e8a6d7fce3cb966a17817c568ce59d76b92a233fdbec/markupsafe-3.0.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:a320721ab5a1aba0a233739394eb907f8c8da5c98c9181d1161e77a0c8e36f2d", size = 20588, upload-time = "2025-09-27T18:37:36.096Z" }, - { url = "https://files.pythonhosted.org/packages/cd/1b/a7782984844bd519ad4ffdbebbba2671ec5d0ebbeac34736c15fb86399e8/markupsafe-3.0.3-cp39-cp39-win32.whl", hash = "sha256:df2449253ef108a379b8b5d6b43f4b1a8e81a061d6537becd5582fba5f9196d7", size = 14566, upload-time = "2025-09-27T18:37:37.09Z" }, - { url = "https://files.pythonhosted.org/packages/18/1f/8d9c20e1c9440e215a44be5ab64359e207fcb4f675543f1cf9a2a7f648d0/markupsafe-3.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:7c3fb7d25180895632e5d3148dbdc29ea38ccb7fd210aa27acbd1201a1902c6e", size = 15053, upload-time = "2025-09-27T18:37:38.054Z" }, - { url = "https://files.pythonhosted.org/packages/4e/d3/fe08482b5cd995033556d45041a4f4e76e7f0521112a9c9991d40d39825f/markupsafe-3.0.3-cp39-cp39-win_arm64.whl", hash = "sha256:38664109c14ffc9e7437e86b4dceb442b0096dfe3541d7864d9cbe1da4cf36c8", size = 13928, upload-time = "2025-09-27T18:37:39.037Z" }, -] - -[[package]] -name = "matplotlib" -version = "3.9.4" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.10'", -] -dependencies = [ - { name = "contourpy", version = "1.3.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "cycler", marker = "python_full_version < '3.10'" }, - { name = "fonttools", marker = "python_full_version < '3.10'" }, - { name = "importlib-resources", marker = "python_full_version < '3.10'" }, - { name = "kiwisolver", version = "1.4.7", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "numpy", version = "2.0.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "packaging", marker = "python_full_version < '3.10'" }, - { name = "pillow", version = "11.3.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "pyparsing", marker = "python_full_version < '3.10'" }, - { name = "python-dateutil", marker = "python_full_version < '3.10'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/df/17/1747b4154034befd0ed33b52538f5eb7752d05bb51c5e2a31470c3bc7d52/matplotlib-3.9.4.tar.gz", hash = "sha256:1e00e8be7393cbdc6fedfa8a6fba02cf3e83814b285db1c60b906a023ba41bc3", size = 36106529, upload-time = "2024-12-13T05:56:34.184Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/7e/94/27d2e2c30d54b56c7b764acc1874a909e34d1965a427fc7092bb6a588b63/matplotlib-3.9.4-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:c5fdd7abfb706dfa8d307af64a87f1a862879ec3cd8d0ec8637458f0885b9c50", size = 7885089, upload-time = "2024-12-13T05:54:24.224Z" }, - { url = "https://files.pythonhosted.org/packages/c6/25/828273307e40a68eb8e9df832b6b2aaad075864fdc1de4b1b81e40b09e48/matplotlib-3.9.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d89bc4e85e40a71d1477780366c27fb7c6494d293e1617788986f74e2a03d7ff", size = 7770600, upload-time = "2024-12-13T05:54:27.214Z" }, - { url = "https://files.pythonhosted.org/packages/f2/65/f841a422ec994da5123368d76b126acf4fc02ea7459b6e37c4891b555b83/matplotlib-3.9.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ddf9f3c26aae695c5daafbf6b94e4c1a30d6cd617ba594bbbded3b33a1fcfa26", size = 8200138, upload-time = "2024-12-13T05:54:29.497Z" }, - { url = "https://files.pythonhosted.org/packages/07/06/272aca07a38804d93b6050813de41ca7ab0e29ba7a9dd098e12037c919a9/matplotlib-3.9.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18ebcf248030173b59a868fda1fe42397253f6698995b55e81e1f57431d85e50", size = 8312711, upload-time = "2024-12-13T05:54:34.396Z" }, - { url = "https://files.pythonhosted.org/packages/98/37/f13e23b233c526b7e27ad61be0a771894a079e0f7494a10d8d81557e0e9a/matplotlib-3.9.4-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:974896ec43c672ec23f3f8c648981e8bc880ee163146e0312a9b8def2fac66f5", size = 9090622, upload-time = "2024-12-13T05:54:36.808Z" }, - { url = "https://files.pythonhosted.org/packages/4f/8c/b1f5bd2bd70e60f93b1b54c4d5ba7a992312021d0ddddf572f9a1a6d9348/matplotlib-3.9.4-cp310-cp310-win_amd64.whl", hash = "sha256:4598c394ae9711cec135639374e70871fa36b56afae17bdf032a345be552a88d", size = 7828211, upload-time = "2024-12-13T05:54:40.596Z" }, - { url = "https://files.pythonhosted.org/packages/74/4b/65be7959a8fa118a3929b49a842de5b78bb55475236fcf64f3e308ff74a0/matplotlib-3.9.4-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:d4dd29641d9fb8bc4492420c5480398dd40a09afd73aebe4eb9d0071a05fbe0c", size = 7894430, upload-time = "2024-12-13T05:54:44.049Z" }, - { url = "https://files.pythonhosted.org/packages/e9/18/80f70d91896e0a517b4a051c3fd540daa131630fd75e02e250365353b253/matplotlib-3.9.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:30e5b22e8bcfb95442bf7d48b0d7f3bdf4a450cbf68986ea45fca3d11ae9d099", size = 7780045, upload-time = "2024-12-13T05:54:46.414Z" }, - { url = "https://files.pythonhosted.org/packages/a2/73/ccb381026e3238c5c25c3609ba4157b2d1a617ec98d65a8b4ee4e1e74d02/matplotlib-3.9.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2bb0030d1d447fd56dcc23b4c64a26e44e898f0416276cac1ebc25522e0ac249", size = 8209906, upload-time = "2024-12-13T05:54:49.459Z" }, - { url = "https://files.pythonhosted.org/packages/ab/33/1648da77b74741c89f5ea95cbf42a291b4b364f2660b316318811404ed97/matplotlib-3.9.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aca90ed222ac3565d2752b83dbb27627480d27662671e4d39da72e97f657a423", size = 8322873, upload-time = "2024-12-13T05:54:53.066Z" }, - { url = "https://files.pythonhosted.org/packages/57/d3/8447ba78bc6593c9044c372d1609f8ea10fb1e071e7a9e0747bea74fc16c/matplotlib-3.9.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a181b2aa2906c608fcae72f977a4a2d76e385578939891b91c2550c39ecf361e", size = 9099566, upload-time = "2024-12-13T05:54:55.522Z" }, - { url = "https://files.pythonhosted.org/packages/23/e1/4f0e237bf349c02ff9d1b6e7109f1a17f745263809b9714a8576dc17752b/matplotlib-3.9.4-cp311-cp311-win_amd64.whl", hash = "sha256:1f6882828231eca17f501c4dcd98a05abb3f03d157fbc0769c6911fe08b6cfd3", size = 7838065, upload-time = "2024-12-13T05:54:58.337Z" }, - { url = "https://files.pythonhosted.org/packages/1a/2b/c918bf6c19d6445d1cefe3d2e42cb740fb997e14ab19d4daeb6a7ab8a157/matplotlib-3.9.4-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:dfc48d67e6661378a21c2983200a654b72b5c5cdbd5d2cf6e5e1ece860f0cc70", size = 7891131, upload-time = "2024-12-13T05:55:02.837Z" }, - { url = "https://files.pythonhosted.org/packages/c1/e5/b4e8fc601ca302afeeabf45f30e706a445c7979a180e3a978b78b2b681a4/matplotlib-3.9.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:47aef0fab8332d02d68e786eba8113ffd6f862182ea2999379dec9e237b7e483", size = 7776365, upload-time = "2024-12-13T05:55:05.158Z" }, - { url = "https://files.pythonhosted.org/packages/99/06/b991886c506506476e5d83625c5970c656a491b9f80161458fed94597808/matplotlib-3.9.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fba1f52c6b7dc764097f52fd9ab627b90db452c9feb653a59945de16752e965f", size = 8200707, upload-time = "2024-12-13T05:55:09.48Z" }, - { url = "https://files.pythonhosted.org/packages/c3/e2/556b627498cb27e61026f2d1ba86a78ad1b836fef0996bef5440e8bc9559/matplotlib-3.9.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:173ac3748acaac21afcc3fa1633924609ba1b87749006bc25051c52c422a5d00", size = 8313761, upload-time = "2024-12-13T05:55:12.95Z" }, - { url = "https://files.pythonhosted.org/packages/58/ff/165af33ec766ff818306ea88e91f9f60d2a6ed543be1eb122a98acbf3b0d/matplotlib-3.9.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:320edea0cadc07007765e33f878b13b3738ffa9745c5f707705692df70ffe0e0", size = 9095284, upload-time = "2024-12-13T05:55:16.199Z" }, - { url = "https://files.pythonhosted.org/packages/9f/8b/3d0c7a002db3b1ed702731c2a9a06d78d035f1f2fb0fb936a8e43cc1e9f4/matplotlib-3.9.4-cp312-cp312-win_amd64.whl", hash = "sha256:a4a4cfc82330b27042a7169533da7991e8789d180dd5b3daeaee57d75cd5a03b", size = 7841160, upload-time = "2024-12-13T05:55:19.991Z" }, - { url = "https://files.pythonhosted.org/packages/49/b1/999f89a7556d101b23a2f0b54f1b6e140d73f56804da1398f2f0bc0924bc/matplotlib-3.9.4-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:37eeffeeca3c940985b80f5b9a7b95ea35671e0e7405001f249848d2b62351b6", size = 7891499, upload-time = "2024-12-13T05:55:22.142Z" }, - { url = "https://files.pythonhosted.org/packages/87/7b/06a32b13a684977653396a1bfcd34d4e7539c5d55c8cbfaa8ae04d47e4a9/matplotlib-3.9.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3e7465ac859ee4abcb0d836137cd8414e7bb7ad330d905abced457217d4f0f45", size = 7776802, upload-time = "2024-12-13T05:55:25.947Z" }, - { url = "https://files.pythonhosted.org/packages/65/87/ac498451aff739e515891bbb92e566f3c7ef31891aaa878402a71f9b0910/matplotlib-3.9.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f4c12302c34afa0cf061bea23b331e747e5e554b0fa595c96e01c7b75bc3b858", size = 8200802, upload-time = "2024-12-13T05:55:28.461Z" }, - { url = "https://files.pythonhosted.org/packages/f8/6b/9eb761c00e1cb838f6c92e5f25dcda3f56a87a52f6cb8fdfa561e6cf6a13/matplotlib-3.9.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2b8c97917f21b75e72108b97707ba3d48f171541a74aa2a56df7a40626bafc64", size = 8313880, upload-time = "2024-12-13T05:55:30.965Z" }, - { url = "https://files.pythonhosted.org/packages/d7/a2/c8eaa600e2085eec7e38cbbcc58a30fc78f8224939d31d3152bdafc01fd1/matplotlib-3.9.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:0229803bd7e19271b03cb09f27db76c918c467aa4ce2ae168171bc67c3f508df", size = 9094637, upload-time = "2024-12-13T05:55:33.701Z" }, - { url = "https://files.pythonhosted.org/packages/71/1f/c6e1daea55b7bfeb3d84c6cb1abc449f6a02b181e7e2a5e4db34c3afb793/matplotlib-3.9.4-cp313-cp313-win_amd64.whl", hash = "sha256:7c0d8ef442ebf56ff5e206f8083d08252ee738e04f3dc88ea882853a05488799", size = 7841311, upload-time = "2024-12-13T05:55:36.737Z" }, - { url = "https://files.pythonhosted.org/packages/c0/3a/2757d3f7d388b14dd48f5a83bea65b6d69f000e86b8f28f74d86e0d375bd/matplotlib-3.9.4-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:a04c3b00066a688834356d196136349cb32f5e1003c55ac419e91585168b88fb", size = 7919989, upload-time = "2024-12-13T05:55:39.024Z" }, - { url = "https://files.pythonhosted.org/packages/24/28/f5077c79a4f521589a37fe1062d6a6ea3534e068213f7357e7cfffc2e17a/matplotlib-3.9.4-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:04c519587f6c210626741a1e9a68eefc05966ede24205db8982841826af5871a", size = 7809417, upload-time = "2024-12-13T05:55:42.412Z" }, - { url = "https://files.pythonhosted.org/packages/36/c8/c523fd2963156692916a8eb7d4069084cf729359f7955cf09075deddfeaf/matplotlib-3.9.4-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:308afbf1a228b8b525fcd5cec17f246bbbb63b175a3ef6eb7b4d33287ca0cf0c", size = 8226258, upload-time = "2024-12-13T05:55:47.259Z" }, - { url = "https://files.pythonhosted.org/packages/f6/88/499bf4b8fa9349b6f5c0cf4cead0ebe5da9d67769129f1b5651e5ac51fbc/matplotlib-3.9.4-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ddb3b02246ddcffd3ce98e88fed5b238bc5faff10dbbaa42090ea13241d15764", size = 8335849, upload-time = "2024-12-13T05:55:49.763Z" }, - { url = "https://files.pythonhosted.org/packages/b8/9f/20a4156b9726188646a030774ee337d5ff695a965be45ce4dbcb9312c170/matplotlib-3.9.4-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8a75287e9cb9eee48cb79ec1d806f75b29c0fde978cb7223a1f4c5848d696041", size = 9102152, upload-time = "2024-12-13T05:55:51.997Z" }, - { url = "https://files.pythonhosted.org/packages/10/11/237f9c3a4e8d810b1759b67ff2da7c32c04f9c80aa475e7beb36ed43a8fb/matplotlib-3.9.4-cp313-cp313t-win_amd64.whl", hash = "sha256:488deb7af140f0ba86da003e66e10d55ff915e152c78b4b66d231638400b1965", size = 7896987, upload-time = "2024-12-13T05:55:55.941Z" }, - { url = "https://files.pythonhosted.org/packages/56/eb/501b465c9fef28f158e414ea3a417913dc2ac748564c7ed41535f23445b4/matplotlib-3.9.4-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:3c3724d89a387ddf78ff88d2a30ca78ac2b4c89cf37f2db4bd453c34799e933c", size = 7885919, upload-time = "2024-12-13T05:55:59.66Z" }, - { url = "https://files.pythonhosted.org/packages/da/36/236fbd868b6c91309a5206bd90c3f881f4f44b2d997cd1d6239ef652f878/matplotlib-3.9.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d5f0a8430ffe23d7e32cfd86445864ccad141797f7d25b7c41759a5b5d17cfd7", size = 7771486, upload-time = "2024-12-13T05:56:04.264Z" }, - { url = "https://files.pythonhosted.org/packages/e0/4b/105caf2d54d5ed11d9f4335398f5103001a03515f2126c936a752ccf1461/matplotlib-3.9.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6bb0141a21aef3b64b633dc4d16cbd5fc538b727e4958be82a0e1c92a234160e", size = 8201838, upload-time = "2024-12-13T05:56:06.792Z" }, - { url = "https://files.pythonhosted.org/packages/5d/a7/bb01188fb4013d34d274caf44a2f8091255b0497438e8b6c0a7c1710c692/matplotlib-3.9.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:57aa235109e9eed52e2c2949db17da185383fa71083c00c6c143a60e07e0888c", size = 8314492, upload-time = "2024-12-13T05:56:09.964Z" }, - { url = "https://files.pythonhosted.org/packages/33/19/02e1a37f7141fc605b193e927d0a9cdf9dc124a20b9e68793f4ffea19695/matplotlib-3.9.4-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:b18c600061477ccfdd1e6fd050c33d8be82431700f3452b297a56d9ed7037abb", size = 9092500, upload-time = "2024-12-13T05:56:13.55Z" }, - { url = "https://files.pythonhosted.org/packages/57/68/c2feb4667adbf882ffa4b3e0ac9967f848980d9f8b5bebd86644aa67ce6a/matplotlib-3.9.4-cp39-cp39-win_amd64.whl", hash = "sha256:ef5f2d1b67d2d2145ff75e10f8c008bfbf71d45137c4b648c87193e7dd053eac", size = 7822962, upload-time = "2024-12-13T05:56:16.358Z" }, - { url = "https://files.pythonhosted.org/packages/0c/22/2ef6a364cd3f565442b0b055e0599744f1e4314ec7326cdaaa48a4d864d7/matplotlib-3.9.4-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:44e0ed786d769d85bc787b0606a53f2d8d2d1d3c8a2608237365e9121c1a338c", size = 7877995, upload-time = "2024-12-13T05:56:18.805Z" }, - { url = "https://files.pythonhosted.org/packages/87/b8/2737456e566e9f4d94ae76b8aa0d953d9acb847714f9a7ad80184474f5be/matplotlib-3.9.4-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:09debb9ce941eb23ecdbe7eab972b1c3e0276dcf01688073faff7b0f61d6c6ca", size = 7769300, upload-time = "2024-12-13T05:56:21.315Z" }, - { url = "https://files.pythonhosted.org/packages/b2/1f/e709c6ec7b5321e6568769baa288c7178e60a93a9da9e682b39450da0e29/matplotlib-3.9.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bcc53cf157a657bfd03afab14774d54ba73aa84d42cfe2480c91bd94873952db", size = 8313423, upload-time = "2024-12-13T05:56:26.719Z" }, - { url = "https://files.pythonhosted.org/packages/5e/b6/5a1f868782cd13f053a679984e222007ecff654a9bfbac6b27a65f4eeb05/matplotlib-3.9.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:ad45da51be7ad02387801fd154ef74d942f49fe3fcd26a64c94842ba7ec0d865", size = 7854624, upload-time = "2024-12-13T05:56:29.359Z" }, ] [[package]] name = "matplotlib" version = "3.10.7" source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.14' and sys_platform == 'win32'", - "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32'", - "python_full_version == '3.11.*' and sys_platform == 'win32'", - "python_full_version >= '3.14' and sys_platform != 'win32'", - "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'win32'", - "python_full_version == '3.11.*' and sys_platform != 'win32'", - "python_full_version == '3.10.*' and sys_platform == 'win32'", - "python_full_version == '3.10.*' and sys_platform != 'win32'", -] dependencies = [ - { name = "contourpy", version = "1.3.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.10.*'" }, + { name = "contourpy", version = "1.3.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, { name = "contourpy", version = "1.3.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, - { name = "cycler", marker = "python_full_version >= '3.10'" }, - { name = "fonttools", marker = "python_full_version >= '3.10'" }, - { name = "kiwisolver", version = "1.4.9", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.10.*'" }, + { name = "cycler" }, + { name = "fonttools" }, + { name = "kiwisolver" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, { name = "numpy", version = "2.3.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, - { name = "packaging", marker = "python_full_version >= '3.10'" }, - { name = "pillow", version = "12.0.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, - { name = "pyparsing", marker = "python_full_version >= '3.10'" }, - { name = "python-dateutil", marker = "python_full_version >= '3.10'" }, + { name = "packaging" }, + { name = "pillow" }, + { name = "pyparsing" }, + { name = "python-dateutil" }, ] sdist = { url = "https://files.pythonhosted.org/packages/ae/e2/d2d5295be2f44c678ebaf3544ba32d20c1f9ef08c49fe47f496180e1db15/matplotlib-3.10.7.tar.gz", hash = "sha256:a06ba7e2a2ef9131c79c49e63dad355d2d878413a0376c1727c8b9335ff731c7", size = 34804865, upload-time = "2025-10-09T00:28:00.669Z" } wheels = [ @@ -3561,37 +2742,12 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/af/33/ee4519fa02ed11a94aef9559552f3b17bb863f2ecfe1a35dc7f548cde231/matplotlib_inline-0.2.1-py3-none-any.whl", hash = "sha256:d56ce5156ba6085e00a9d54fead6ed29a9c47e215cd1bba2e976ef39f5710a76", size = 9516, upload-time = "2025-10-23T09:00:20.675Z" }, ] -[[package]] -name = "mdit-py-plugins" -version = "0.4.2" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.10'", -] -dependencies = [ - { name = "markdown-it-py", marker = "python_full_version < '3.10'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/19/03/a2ecab526543b152300717cf232bb4bb8605b6edb946c845016fa9c9c9fd/mdit_py_plugins-0.4.2.tar.gz", hash = "sha256:5f2cd1fdb606ddf152d37ec30e46101a60512bc0e5fa1a7002c36647b09e26b5", size = 43542, upload-time = "2024-09-09T20:27:49.564Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a7/f7/7782a043553ee469c1ff49cfa1cdace2d6bf99a1f333cf38676b3ddf30da/mdit_py_plugins-0.4.2-py3-none-any.whl", hash = "sha256:0c673c3f889399a33b95e88d2f0d111b4447bdfea7f237dab2d488f459835636", size = 55316, upload-time = "2024-09-09T20:27:48.397Z" }, -] - [[package]] name = "mdit-py-plugins" version = "0.5.0" source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.14' and sys_platform == 'win32'", - "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32'", - "python_full_version == '3.11.*' and sys_platform == 'win32'", - "python_full_version >= '3.14' and sys_platform != 'win32'", - "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'win32'", - "python_full_version == '3.11.*' and sys_platform != 'win32'", - "python_full_version == '3.10.*' and sys_platform == 'win32'", - "python_full_version == '3.10.*' and sys_platform != 'win32'", -] dependencies = [ - { name = "markdown-it-py", marker = "python_full_version >= '3.10'" }, + { name = "markdown-it-py" }, ] sdist = { url = "https://files.pythonhosted.org/packages/b2/fd/a756d36c0bfba5f6e39a1cdbdbfdd448dc02692467d83816dff4592a1ebc/mdit_py_plugins-0.5.0.tar.gz", hash = "sha256:f4918cb50119f50446560513a8e311d574ff6aaed72606ddae6d35716fe809c6", size = 44655, upload-time = "2025-08-11T07:25:49.083Z" } wheels = [ @@ -3624,8 +2780,7 @@ name = "monty" version = "2025.3.3" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "numpy", version = "2.0.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.10.*'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, { name = "numpy", version = "2.3.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, { name = "ruamel-yaml" }, ] @@ -3778,24 +2933,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/39/ca/c05f144128ea232ae2178b008d5011d4e2cea86e4ee8c85c2631b1b94802/multidict-6.7.0-cp314-cp314t-win32.whl", hash = "sha256:b2d7f80c4e1fd010b07cb26820aae86b7e73b681ee4889684fb8d2d4537aab13", size = 48023, upload-time = "2025-10-06T14:51:51.883Z" }, { url = "https://files.pythonhosted.org/packages/ba/8f/0a60e501584145588be1af5cc829265701ba3c35a64aec8e07cbb71d39bb/multidict-6.7.0-cp314-cp314t-win_amd64.whl", hash = "sha256:09929cab6fcb68122776d575e03c6cc64ee0b8fca48d17e135474b042ce515cd", size = 53507, upload-time = "2025-10-06T14:51:53.672Z" }, { url = "https://files.pythonhosted.org/packages/7f/ae/3148b988a9c6239903e786eac19c889fab607c31d6efa7fb2147e5680f23/multidict-6.7.0-cp314-cp314t-win_arm64.whl", hash = "sha256:cc41db090ed742f32bd2d2c721861725e6109681eddf835d0a82bd3a5c382827", size = 44804, upload-time = "2025-10-06T14:51:55.415Z" }, - { url = "https://files.pythonhosted.org/packages/90/d7/4cf84257902265c4250769ac49f4eaab81c182ee9aff8bf59d2714dbb174/multidict-6.7.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:363eb68a0a59bd2303216d2346e6c441ba10d36d1f9969fcb6f1ba700de7bb5c", size = 77073, upload-time = "2025-10-06T14:51:57.386Z" }, - { url = "https://files.pythonhosted.org/packages/6d/51/194e999630a656e76c2965a1590d12faa5cd528170f2abaa04423e09fe8d/multidict-6.7.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d874eb056410ca05fed180b6642e680373688efafc7f077b2a2f61811e873a40", size = 44928, upload-time = "2025-10-06T14:51:58.791Z" }, - { url = "https://files.pythonhosted.org/packages/e5/6b/2a195373c33068c9158e0941d0b46cfcc9c1d894ca2eb137d1128081dff0/multidict-6.7.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:8b55d5497b51afdfde55925e04a022f1de14d4f4f25cdfd4f5d9b0aa96166851", size = 44581, upload-time = "2025-10-06T14:52:00.174Z" }, - { url = "https://files.pythonhosted.org/packages/69/7b/7f4f2e644b6978bf011a5fd9a5ebb7c21de3f38523b1f7897d36a1ac1311/multidict-6.7.0-cp39-cp39-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:f8e5c0031b90ca9ce555e2e8fd5c3b02a25f14989cbc310701823832c99eb687", size = 239901, upload-time = "2025-10-06T14:52:02.416Z" }, - { url = "https://files.pythonhosted.org/packages/3c/b5/952c72786710a031aa204a9adf7db66d7f97a2c6573889d58b9e60fe6702/multidict-6.7.0-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9cf41880c991716f3c7cec48e2f19ae4045fc9db5fc9cff27347ada24d710bb5", size = 240534, upload-time = "2025-10-06T14:52:04.105Z" }, - { url = "https://files.pythonhosted.org/packages/f3/ef/109fe1f2471e4c458c74242c7e4a833f2d9fc8a6813cd7ee345b0bad18f9/multidict-6.7.0-cp39-cp39-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:8cfc12a8630a29d601f48d47787bd7eb730e475e83edb5d6c5084317463373eb", size = 219545, upload-time = "2025-10-06T14:52:06.208Z" }, - { url = "https://files.pythonhosted.org/packages/42/bd/327d91288114967f9fe90dc53de70aa3fec1b9073e46aa32c4828f771a87/multidict-6.7.0-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:3996b50c3237c4aec17459217c1e7bbdead9a22a0fcd3c365564fbd16439dde6", size = 251187, upload-time = "2025-10-06T14:52:08.049Z" }, - { url = "https://files.pythonhosted.org/packages/f4/13/a8b078ebbaceb7819fd28cd004413c33b98f1b70d542a62e6a00b74fb09f/multidict-6.7.0-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:7f5170993a0dd3ab871c74f45c0a21a4e2c37a2f2b01b5f722a2ad9c6650469e", size = 249379, upload-time = "2025-10-06T14:52:09.831Z" }, - { url = "https://files.pythonhosted.org/packages/e3/6d/ab12e1246be4d65d1f55de1e6f6aaa9b8120eddcfdd1d290439c7833d5ce/multidict-6.7.0-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ec81878ddf0e98817def1e77d4f50dae5ef5b0e4fe796fae3bd674304172416e", size = 239241, upload-time = "2025-10-06T14:52:11.561Z" }, - { url = "https://files.pythonhosted.org/packages/bb/d7/079a93625208c173b8fa756396814397c0fd9fee61ef87b75a748820b86e/multidict-6.7.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:9281bf5b34f59afbc6b1e477a372e9526b66ca446f4bf62592839c195a718b32", size = 237418, upload-time = "2025-10-06T14:52:13.671Z" }, - { url = "https://files.pythonhosted.org/packages/c9/29/03777c2212274aa9440918d604dc9d6af0e6b4558c611c32c3dcf1a13870/multidict-6.7.0-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:68af405971779d8b37198726f2b6fe3955db846fee42db7a4286fc542203934c", size = 232987, upload-time = "2025-10-06T14:52:15.708Z" }, - { url = "https://files.pythonhosted.org/packages/d9/00/11188b68d85a84e8050ee34724d6ded19ad03975caebe0c8dcb2829b37bf/multidict-6.7.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:3ba3ef510467abb0667421a286dc906e30eb08569365f5cdb131d7aff7c2dd84", size = 240985, upload-time = "2025-10-06T14:52:17.317Z" }, - { url = "https://files.pythonhosted.org/packages/df/0c/12eef6aeda21859c6cdf7d75bd5516d83be3efe3d8cc45fd1a3037f5b9dc/multidict-6.7.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:b61189b29081a20c7e4e0b49b44d5d44bb0dc92be3c6d06a11cc043f81bf9329", size = 246855, upload-time = "2025-10-06T14:52:19.096Z" }, - { url = "https://files.pythonhosted.org/packages/69/f6/076120fd8bb3975f09228e288e08bff6b9f1bfd5166397c7ba284f622ab2/multidict-6.7.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:fb287618b9c7aa3bf8d825f02d9201b2f13078a5ed3b293c8f4d953917d84d5e", size = 241804, upload-time = "2025-10-06T14:52:21.166Z" }, - { url = "https://files.pythonhosted.org/packages/5f/51/41bb950c81437b88a93e6ddfca1d8763569ae861e638442838c4375f7497/multidict-6.7.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:521f33e377ff64b96c4c556b81c55d0cfffb96a11c194fd0c3f1e56f3d8dd5a4", size = 235321, upload-time = "2025-10-06T14:52:23.208Z" }, - { url = "https://files.pythonhosted.org/packages/5a/cf/5bbd31f055199d56c1f6b04bbadad3ccb24e6d5d4db75db774fc6d6674b8/multidict-6.7.0-cp39-cp39-win32.whl", hash = "sha256:ce8fdc2dca699f8dbf055a61d73eaa10482569ad20ee3c36ef9641f69afa8c91", size = 41435, upload-time = "2025-10-06T14:52:24.735Z" }, - { url = "https://files.pythonhosted.org/packages/af/01/547ffe9c2faec91c26965c152f3fea6cff068b6037401f61d310cc861ff4/multidict-6.7.0-cp39-cp39-win_amd64.whl", hash = "sha256:7e73299c99939f089dd9b2120a04a516b95cdf8c1cd2b18c53ebf0de80b1f18f", size = 46193, upload-time = "2025-10-06T14:52:26.101Z" }, - { url = "https://files.pythonhosted.org/packages/27/77/cfa5461d1d2651d6fc24216c92b4a21d4e385a41c46e0d9f3b070675167b/multidict-6.7.0-cp39-cp39-win_arm64.whl", hash = "sha256:6bdce131e14b04fd34a809b6380dbfd826065c3e2fe8a50dbae659fa0c390546", size = 43118, upload-time = "2025-10-06T14:52:27.876Z" }, { url = "https://files.pythonhosted.org/packages/b7/da/7d22601b625e241d4f23ef1ebff8acfc60da633c9e7e7922e24d10f592b3/multidict-6.7.0-py3-none-any.whl", hash = "sha256:394fc5c42a333c9ffc3e421a4c85e08580d990e08b99f6bf35b4132114c5dcb3", size = 12317, upload-time = "2025-10-06T14:52:29.272Z" }, ] @@ -3842,12 +2979,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/11/9f/c39e89a3e319c1d9c734dedec1183b2cc3aefbab066ec611619002abb932/mypy-1.19.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8f44f2ae3c58421ee05fe609160343c25f70e3967f6e32792b5a78006a9d850f", size = 13592639, upload-time = "2025-11-28T15:48:08.55Z" }, { url = "https://files.pythonhosted.org/packages/97/6d/ffaf5f01f5e284d9033de1267e6c1b8f3783f2cf784465378a86122e884b/mypy-1.19.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:63ea6a00e4bd6822adbfc75b02ab3653a17c02c4347f5bb0cf1d5b9df3a05835", size = 13799132, upload-time = "2025-11-28T15:47:06.032Z" }, { url = "https://files.pythonhosted.org/packages/fe/b0/c33921e73aaa0106224e5a34822411bea38046188eb781637f5a5b07e269/mypy-1.19.0-cp314-cp314-win_amd64.whl", hash = "sha256:3ad925b14a0bb99821ff6f734553294aa6a3440a8cb082fe1f5b84dfb662afb1", size = 10269832, upload-time = "2025-11-28T15:47:29.392Z" }, - { url = "https://files.pythonhosted.org/packages/b4/59/a7748ef43446163a93159d82bb270c6c4f3d94c1fcbdd2a29a7e439e74d7/mypy-1.19.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:0dde5cb375cb94deff0d4b548b993bec52859d1651e073d63a1386d392a95495", size = 13094255, upload-time = "2025-11-28T15:47:14.282Z" }, - { url = "https://files.pythonhosted.org/packages/f5/0b/92ebf5abc83f559a35dcba3bd9227726b04b04178f1e521f38e647b930eb/mypy-1.19.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1cf9c59398db1c68a134b0b5354a09a1e124523f00bacd68e553b8bd16ff3299", size = 12161414, upload-time = "2025-11-28T15:45:03.302Z" }, - { url = "https://files.pythonhosted.org/packages/aa/03/19412f0a786722055a52c01b4c5d71e5b5443a89f6bbcdd445408240e217/mypy-1.19.0-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3210d87b30e6af9c8faed61be2642fcbe60ef77cec64fa1ef810a630a4cf671c", size = 12756782, upload-time = "2025-11-28T15:46:49.522Z" }, - { url = "https://files.pythonhosted.org/packages/cb/85/395d53c9098b251414b0448cdadcd3277523ff36f5abda6d26ff945dbdb3/mypy-1.19.0-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e2c1101ab41d01303103ab6ef82cbbfedb81c1a060c868fa7cc013d573d37ab5", size = 13503492, upload-time = "2025-11-28T15:48:57.339Z" }, - { url = "https://files.pythonhosted.org/packages/dd/33/1ab1113e3778617ae7aba66b4b537f90512bd279ff65b6c984fb91fbb2d3/mypy-1.19.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:0ea4fd21bb48f0da49e6d3b37ef6bd7e8228b9fe41bbf4d80d9364d11adbd43c", size = 13787703, upload-time = "2025-11-28T15:48:41.286Z" }, - { url = "https://files.pythonhosted.org/packages/4f/2d/8b0821b3e0d538de1ad96c86502256c7326274d5cb74e0b373efaada273f/mypy-1.19.0-cp39-cp39-win_amd64.whl", hash = "sha256:16f76ff3f3fd8137aadf593cb4607d82634fca675e8211ad75c43d86033ee6c6", size = 10049225, upload-time = "2025-11-28T15:45:55.089Z" }, { url = "https://files.pythonhosted.org/packages/09/0e/fe228ed5aeab470c6f4eb82481837fadb642a5aa95cc8215fd2214822c10/mypy-1.19.0-py3-none-any.whl", hash = "sha256:0c01c99d626380752e527d5ce8e69ffbba2046eb8a060db0329690849cf9b6f9", size = 2469714, upload-time = "2025-11-28T15:45:33.22Z" }, ] @@ -3866,14 +2997,11 @@ version = "1.0.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "importlib-metadata" }, - { name = "ipykernel", version = "6.31.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "ipykernel", version = "7.1.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, - { name = "ipython", version = "8.18.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "ipython", version = "8.37.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.10.*'" }, + { name = "ipykernel" }, + { name = "ipython", version = "8.37.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, { name = "ipython", version = "9.7.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, { name = "jupyter-cache" }, - { name = "myst-parser", version = "3.0.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "myst-parser", version = "4.0.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "myst-parser" }, { name = "nbclient" }, { name = "nbformat" }, { name = "pyyaml" }, @@ -3885,47 +3013,17 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/5a/7e/68c5c66645633765dbacea20983132a2e850a1a4883c3539972bcf8d8829/myst_nb-1.0.0-py3-none-any.whl", hash = "sha256:ee8febc6dd7d9e32bede0c66a9b962b2e2fdab697428ee9fbfd4919d82380911", size = 79943, upload-time = "2023-11-08T22:05:49.26Z" }, ] -[[package]] -name = "myst-parser" -version = "3.0.1" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.10'", -] -dependencies = [ - { name = "docutils", marker = "python_full_version < '3.10'" }, - { name = "jinja2", marker = "python_full_version < '3.10'" }, - { name = "markdown-it-py", marker = "python_full_version < '3.10'" }, - { name = "mdit-py-plugins", version = "0.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "pyyaml", marker = "python_full_version < '3.10'" }, - { name = "sphinx", marker = "python_full_version < '3.10'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/49/64/e2f13dac02f599980798c01156393b781aec983b52a6e4057ee58f07c43a/myst_parser-3.0.1.tar.gz", hash = "sha256:88f0cb406cb363b077d176b51c476f62d60604d68a8dcdf4832e080441301a87", size = 92392, upload-time = "2024-04-28T20:22:42.116Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e2/de/21aa8394f16add8f7427f0a1326ccd2b3a2a8a3245c9252bc5ac034c6155/myst_parser-3.0.1-py3-none-any.whl", hash = "sha256:6457aaa33a5d474aca678b8ead9b3dc298e89c68e67012e73146ea6fd54babf1", size = 83163, upload-time = "2024-04-28T20:22:39.985Z" }, -] - [[package]] name = "myst-parser" version = "4.0.1" source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.14' and sys_platform == 'win32'", - "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32'", - "python_full_version == '3.11.*' and sys_platform == 'win32'", - "python_full_version >= '3.14' and sys_platform != 'win32'", - "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'win32'", - "python_full_version == '3.11.*' and sys_platform != 'win32'", - "python_full_version == '3.10.*' and sys_platform == 'win32'", - "python_full_version == '3.10.*' and sys_platform != 'win32'", -] dependencies = [ - { name = "docutils", marker = "python_full_version >= '3.10'" }, - { name = "jinja2", marker = "python_full_version >= '3.10'" }, - { name = "markdown-it-py", marker = "python_full_version >= '3.10'" }, - { name = "mdit-py-plugins", version = "0.5.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, - { name = "pyyaml", marker = "python_full_version >= '3.10'" }, - { name = "sphinx", marker = "python_full_version >= '3.10'" }, + { name = "docutils" }, + { name = "jinja2" }, + { name = "markdown-it-py" }, + { name = "mdit-py-plugins" }, + { name = "pyyaml" }, + { name = "sphinx" }, ] sdist = { url = "https://files.pythonhosted.org/packages/66/a5/9626ba4f73555b3735ad86247a8077d4603aa8628537687c839ab08bfe44/myst_parser-4.0.1.tar.gz", hash = "sha256:5cfea715e4f3574138aecbf7d54132296bfd72bb614d31168f48c477a830a7c4", size = 93985, upload-time = "2025-02-12T10:53:03.833Z" } wheels = [ @@ -3963,8 +3061,7 @@ version = "0.10.2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "jupyter-client" }, - { name = "jupyter-core", version = "5.8.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "jupyter-core", version = "5.9.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "jupyter-core" }, { name = "nbformat" }, { name = "traitlets" }, ] @@ -3979,13 +3076,10 @@ version = "7.16.6" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "beautifulsoup4" }, - { name = "bleach", version = "6.2.0", source = { registry = "https://pypi.org/simple" }, extra = ["css"], marker = "python_full_version < '3.10'" }, - { name = "bleach", version = "6.3.0", source = { registry = "https://pypi.org/simple" }, extra = ["css"], marker = "python_full_version >= '3.10'" }, + { name = "bleach", extra = ["css"] }, { name = "defusedxml" }, - { name = "importlib-metadata", marker = "python_full_version < '3.10'" }, { name = "jinja2" }, - { name = "jupyter-core", version = "5.8.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "jupyter-core", version = "5.9.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "jupyter-core" }, { name = "jupyterlab-pygments" }, { name = "markupsafe" }, { name = "mistune" }, @@ -4008,8 +3102,7 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "fastjsonschema" }, { name = "jsonschema" }, - { name = "jupyter-core", version = "5.8.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "jupyter-core", version = "5.9.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "jupyter-core" }, { name = "traitlets" }, ] sdist = { url = "https://files.pythonhosted.org/packages/6d/fd/91545e604bc3dad7dca9ed03284086039b294c6b3d75c0d2fa45f9e9caf3/nbformat-5.10.4.tar.gz", hash = "sha256:322168b14f937a5d11362988ecac2a4952d3d8e3a2cbeb2319584631226d5b3a", size = 142749, upload-time = "2024-04-04T11:20:37.371Z" } @@ -4026,25 +3119,13 @@ 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.2.1" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.10'", -] -sdist = { url = "https://files.pythonhosted.org/packages/c4/80/a84676339aaae2f1cfdf9f418701dd634aef9cc76f708ef55c36ff39c3ca/networkx-3.2.1.tar.gz", hash = "sha256:9f1bb5cf3409bf324e0a722c20bdb4c20ee39bf1c30ce8ae499c8502b0b5e0c6", size = 2073928, upload-time = "2023-10-28T08:41:39.364Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/d5/f0/8fbc882ca80cf077f1b246c0e3c3465f7f415439bdea6b899f6b19f61f70/networkx-3.2.1-py3-none-any.whl", hash = "sha256:f18c69adc97877c42332c170849c96cefa91881c99a7cb3e95b7c659ebdc1ec2", size = 1647772, upload-time = "2023-10-28T08:41:36.945Z" }, -] - [[package]] name = "networkx" version = "3.4.2" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version == '3.10.*' and sys_platform == 'win32'", - "python_full_version == '3.10.*' and sys_platform != 'win32'", + "python_full_version < '3.11' and sys_platform == 'win32'", + "python_full_version < '3.11' and sys_platform != 'win32'", ] sdist = { url = "https://files.pythonhosted.org/packages/fd/1d/06475e1cd5264c0b870ea2cc6fdb3e37177c1e565c43f56ff17a10e3937f/networkx-3.4.2.tar.gz", hash = "sha256:307c3669428c5362aab27c8a1260aa8f47c4e91d3891f48be0141738d8d053e1", size = 2151368, upload-time = "2024-10-21T12:39:38.695Z" } wheels = [ @@ -4088,8 +3169,7 @@ dependencies = [ { name = "ipython-genutils" }, { name = "jinja2" }, { name = "jupyter-client" }, - { name = "jupyter-core", version = "5.8.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "jupyter-core", version = "5.9.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "jupyter-core" }, { name = "nbclassic" }, { name = "nbconvert" }, { name = "nbformat" }, @@ -4118,68 +3198,13 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/f9/33/bd5b9137445ea4b680023eb0469b2bb969d61303dedb2aac6560ff3d14a1/notebook_shim-0.2.4-py3-none-any.whl", hash = "sha256:411a5be4e9dc882a074ccbcae671eda64cceb068767e9a3419096986560e1cef", size = 13307, upload-time = "2024-02-14T23:35:16.286Z" }, ] -[[package]] -name = "numpy" -version = "2.0.2" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.10'", -] -sdist = { url = "https://files.pythonhosted.org/packages/a9/75/10dd1f8116a8b796cb2c737b674e02d02e80454bda953fa7e65d8c12b016/numpy-2.0.2.tar.gz", hash = "sha256:883c987dee1880e2a864ab0dc9892292582510604156762362d9326444636e78", size = 18902015, upload-time = "2024-08-26T20:19:40.945Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/21/91/3495b3237510f79f5d81f2508f9f13fea78ebfdf07538fc7444badda173d/numpy-2.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:51129a29dbe56f9ca83438b706e2e69a39892b5eda6cedcb6b0c9fdc9b0d3ece", size = 21165245, upload-time = "2024-08-26T20:04:14.625Z" }, - { url = "https://files.pythonhosted.org/packages/05/33/26178c7d437a87082d11019292dce6d3fe6f0e9026b7b2309cbf3e489b1d/numpy-2.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f15975dfec0cf2239224d80e32c3170b1d168335eaedee69da84fbe9f1f9cd04", size = 13738540, upload-time = "2024-08-26T20:04:36.784Z" }, - { url = "https://files.pythonhosted.org/packages/ec/31/cc46e13bf07644efc7a4bf68df2df5fb2a1a88d0cd0da9ddc84dc0033e51/numpy-2.0.2-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:8c5713284ce4e282544c68d1c3b2c7161d38c256d2eefc93c1d683cf47683e66", size = 5300623, upload-time = "2024-08-26T20:04:46.491Z" }, - { url = "https://files.pythonhosted.org/packages/6e/16/7bfcebf27bb4f9d7ec67332ffebee4d1bf085c84246552d52dbb548600e7/numpy-2.0.2-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:becfae3ddd30736fe1889a37f1f580e245ba79a5855bff5f2a29cb3ccc22dd7b", size = 6901774, upload-time = "2024-08-26T20:04:58.173Z" }, - { url = "https://files.pythonhosted.org/packages/f9/a3/561c531c0e8bf082c5bef509d00d56f82e0ea7e1e3e3a7fc8fa78742a6e5/numpy-2.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2da5960c3cf0df7eafefd806d4e612c5e19358de82cb3c343631188991566ccd", size = 13907081, upload-time = "2024-08-26T20:05:19.098Z" }, - { url = "https://files.pythonhosted.org/packages/fa/66/f7177ab331876200ac7563a580140643d1179c8b4b6a6b0fc9838de2a9b8/numpy-2.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:496f71341824ed9f3d2fd36cf3ac57ae2e0165c143b55c3a035ee219413f3318", size = 19523451, upload-time = "2024-08-26T20:05:47.479Z" }, - { url = "https://files.pythonhosted.org/packages/25/7f/0b209498009ad6453e4efc2c65bcdf0ae08a182b2b7877d7ab38a92dc542/numpy-2.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a61ec659f68ae254e4d237816e33171497e978140353c0c2038d46e63282d0c8", size = 19927572, upload-time = "2024-08-26T20:06:17.137Z" }, - { url = "https://files.pythonhosted.org/packages/3e/df/2619393b1e1b565cd2d4c4403bdd979621e2c4dea1f8532754b2598ed63b/numpy-2.0.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d731a1c6116ba289c1e9ee714b08a8ff882944d4ad631fd411106a30f083c326", size = 14400722, upload-time = "2024-08-26T20:06:39.16Z" }, - { url = "https://files.pythonhosted.org/packages/22/ad/77e921b9f256d5da36424ffb711ae79ca3f451ff8489eeca544d0701d74a/numpy-2.0.2-cp310-cp310-win32.whl", hash = "sha256:984d96121c9f9616cd33fbd0618b7f08e0cfc9600a7ee1d6fd9b239186d19d97", size = 6472170, upload-time = "2024-08-26T20:06:50.361Z" }, - { url = "https://files.pythonhosted.org/packages/10/05/3442317535028bc29cf0c0dd4c191a4481e8376e9f0db6bcf29703cadae6/numpy-2.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:c7b0be4ef08607dd04da4092faee0b86607f111d5ae68036f16cc787e250a131", size = 15905558, upload-time = "2024-08-26T20:07:13.881Z" }, - { url = "https://files.pythonhosted.org/packages/8b/cf/034500fb83041aa0286e0fb16e7c76e5c8b67c0711bb6e9e9737a717d5fe/numpy-2.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:49ca4decb342d66018b01932139c0961a8f9ddc7589611158cb3c27cbcf76448", size = 21169137, upload-time = "2024-08-26T20:07:45.345Z" }, - { url = "https://files.pythonhosted.org/packages/4a/d9/32de45561811a4b87fbdee23b5797394e3d1504b4a7cf40c10199848893e/numpy-2.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:11a76c372d1d37437857280aa142086476136a8c0f373b2e648ab2c8f18fb195", size = 13703552, upload-time = "2024-08-26T20:08:06.666Z" }, - { url = "https://files.pythonhosted.org/packages/c1/ca/2f384720020c7b244d22508cb7ab23d95f179fcfff33c31a6eeba8d6c512/numpy-2.0.2-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:807ec44583fd708a21d4a11d94aedf2f4f3c3719035c76a2bbe1fe8e217bdc57", size = 5298957, upload-time = "2024-08-26T20:08:15.83Z" }, - { url = "https://files.pythonhosted.org/packages/0e/78/a3e4f9fb6aa4e6fdca0c5428e8ba039408514388cf62d89651aade838269/numpy-2.0.2-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:8cafab480740e22f8d833acefed5cc87ce276f4ece12fdaa2e8903db2f82897a", size = 6905573, upload-time = "2024-08-26T20:08:27.185Z" }, - { url = "https://files.pythonhosted.org/packages/a0/72/cfc3a1beb2caf4efc9d0b38a15fe34025230da27e1c08cc2eb9bfb1c7231/numpy-2.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a15f476a45e6e5a3a79d8a14e62161d27ad897381fecfa4a09ed5322f2085669", size = 13914330, upload-time = "2024-08-26T20:08:48.058Z" }, - { url = "https://files.pythonhosted.org/packages/ba/a8/c17acf65a931ce551fee11b72e8de63bf7e8a6f0e21add4c937c83563538/numpy-2.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:13e689d772146140a252c3a28501da66dfecd77490b498b168b501835041f951", size = 19534895, upload-time = "2024-08-26T20:09:16.536Z" }, - { url = "https://files.pythonhosted.org/packages/ba/86/8767f3d54f6ae0165749f84648da9dcc8cd78ab65d415494962c86fac80f/numpy-2.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9ea91dfb7c3d1c56a0e55657c0afb38cf1eeae4544c208dc465c3c9f3a7c09f9", size = 19937253, upload-time = "2024-08-26T20:09:46.263Z" }, - { url = "https://files.pythonhosted.org/packages/df/87/f76450e6e1c14e5bb1eae6836478b1028e096fd02e85c1c37674606ab752/numpy-2.0.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c1c9307701fec8f3f7a1e6711f9089c06e6284b3afbbcd259f7791282d660a15", size = 14414074, upload-time = "2024-08-26T20:10:08.483Z" }, - { url = "https://files.pythonhosted.org/packages/5c/ca/0f0f328e1e59f73754f06e1adfb909de43726d4f24c6a3f8805f34f2b0fa/numpy-2.0.2-cp311-cp311-win32.whl", hash = "sha256:a392a68bd329eafac5817e5aefeb39038c48b671afd242710b451e76090e81f4", size = 6470640, upload-time = "2024-08-26T20:10:19.732Z" }, - { url = "https://files.pythonhosted.org/packages/eb/57/3a3f14d3a759dcf9bf6e9eda905794726b758819df4663f217d658a58695/numpy-2.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:286cd40ce2b7d652a6f22efdfc6d1edf879440e53e76a75955bc0c826c7e64dc", size = 15910230, upload-time = "2024-08-26T20:10:43.413Z" }, - { url = "https://files.pythonhosted.org/packages/45/40/2e117be60ec50d98fa08c2f8c48e09b3edea93cfcabd5a9ff6925d54b1c2/numpy-2.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:df55d490dea7934f330006d0f81e8551ba6010a5bf035a249ef61a94f21c500b", size = 20895803, upload-time = "2024-08-26T20:11:13.916Z" }, - { url = "https://files.pythonhosted.org/packages/46/92/1b8b8dee833f53cef3e0a3f69b2374467789e0bb7399689582314df02651/numpy-2.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8df823f570d9adf0978347d1f926b2a867d5608f434a7cff7f7908c6570dcf5e", size = 13471835, upload-time = "2024-08-26T20:11:34.779Z" }, - { url = "https://files.pythonhosted.org/packages/7f/19/e2793bde475f1edaea6945be141aef6c8b4c669b90c90a300a8954d08f0a/numpy-2.0.2-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:9a92ae5c14811e390f3767053ff54eaee3bf84576d99a2456391401323f4ec2c", size = 5038499, upload-time = "2024-08-26T20:11:43.902Z" }, - { url = "https://files.pythonhosted.org/packages/e3/ff/ddf6dac2ff0dd50a7327bcdba45cb0264d0e96bb44d33324853f781a8f3c/numpy-2.0.2-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:a842d573724391493a97a62ebbb8e731f8a5dcc5d285dfc99141ca15a3302d0c", size = 6633497, upload-time = "2024-08-26T20:11:55.09Z" }, - { url = "https://files.pythonhosted.org/packages/72/21/67f36eac8e2d2cd652a2e69595a54128297cdcb1ff3931cfc87838874bd4/numpy-2.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c05e238064fc0610c840d1cf6a13bf63d7e391717d247f1bf0318172e759e692", size = 13621158, upload-time = "2024-08-26T20:12:14.95Z" }, - { url = "https://files.pythonhosted.org/packages/39/68/e9f1126d757653496dbc096cb429014347a36b228f5a991dae2c6b6cfd40/numpy-2.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0123ffdaa88fa4ab64835dcbde75dcdf89c453c922f18dced6e27c90d1d0ec5a", size = 19236173, upload-time = "2024-08-26T20:12:44.049Z" }, - { url = "https://files.pythonhosted.org/packages/d1/e9/1f5333281e4ebf483ba1c888b1d61ba7e78d7e910fdd8e6499667041cc35/numpy-2.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:96a55f64139912d61de9137f11bf39a55ec8faec288c75a54f93dfd39f7eb40c", size = 19634174, upload-time = "2024-08-26T20:13:13.634Z" }, - { url = "https://files.pythonhosted.org/packages/71/af/a469674070c8d8408384e3012e064299f7a2de540738a8e414dcfd639996/numpy-2.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:ec9852fb39354b5a45a80bdab5ac02dd02b15f44b3804e9f00c556bf24b4bded", size = 14099701, upload-time = "2024-08-26T20:13:34.851Z" }, - { url = "https://files.pythonhosted.org/packages/d0/3d/08ea9f239d0e0e939b6ca52ad403c84a2bce1bde301a8eb4888c1c1543f1/numpy-2.0.2-cp312-cp312-win32.whl", hash = "sha256:671bec6496f83202ed2d3c8fdc486a8fc86942f2e69ff0e986140339a63bcbe5", size = 6174313, upload-time = "2024-08-26T20:13:45.653Z" }, - { url = "https://files.pythonhosted.org/packages/b2/b5/4ac39baebf1fdb2e72585c8352c56d063b6126be9fc95bd2bb5ef5770c20/numpy-2.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:cfd41e13fdc257aa5778496b8caa5e856dc4896d4ccf01841daee1d96465467a", size = 15606179, upload-time = "2024-08-26T20:14:08.786Z" }, - { url = "https://files.pythonhosted.org/packages/43/c1/41c8f6df3162b0c6ffd4437d729115704bd43363de0090c7f913cfbc2d89/numpy-2.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9059e10581ce4093f735ed23f3b9d283b9d517ff46009ddd485f1747eb22653c", size = 21169942, upload-time = "2024-08-26T20:14:40.108Z" }, - { url = "https://files.pythonhosted.org/packages/39/bc/fd298f308dcd232b56a4031fd6ddf11c43f9917fbc937e53762f7b5a3bb1/numpy-2.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:423e89b23490805d2a5a96fe40ec507407b8ee786d66f7328be214f9679df6dd", size = 13711512, upload-time = "2024-08-26T20:15:00.985Z" }, - { url = "https://files.pythonhosted.org/packages/96/ff/06d1aa3eeb1c614eda245c1ba4fb88c483bee6520d361641331872ac4b82/numpy-2.0.2-cp39-cp39-macosx_14_0_arm64.whl", hash = "sha256:2b2955fa6f11907cf7a70dab0d0755159bca87755e831e47932367fc8f2f2d0b", size = 5306976, upload-time = "2024-08-26T20:15:10.876Z" }, - { url = "https://files.pythonhosted.org/packages/2d/98/121996dcfb10a6087a05e54453e28e58694a7db62c5a5a29cee14c6e047b/numpy-2.0.2-cp39-cp39-macosx_14_0_x86_64.whl", hash = "sha256:97032a27bd9d8988b9a97a8c4d2c9f2c15a81f61e2f21404d7e8ef00cb5be729", size = 6906494, upload-time = "2024-08-26T20:15:22.055Z" }, - { url = "https://files.pythonhosted.org/packages/15/31/9dffc70da6b9bbf7968f6551967fc21156207366272c2a40b4ed6008dc9b/numpy-2.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1e795a8be3ddbac43274f18588329c72939870a16cae810c2b73461c40718ab1", size = 13912596, upload-time = "2024-08-26T20:15:42.452Z" }, - { url = "https://files.pythonhosted.org/packages/b9/14/78635daab4b07c0930c919d451b8bf8c164774e6a3413aed04a6d95758ce/numpy-2.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f26b258c385842546006213344c50655ff1555a9338e2e5e02a0756dc3e803dd", size = 19526099, upload-time = "2024-08-26T20:16:11.048Z" }, - { url = "https://files.pythonhosted.org/packages/26/4c/0eeca4614003077f68bfe7aac8b7496f04221865b3a5e7cb230c9d055afd/numpy-2.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5fec9451a7789926bcf7c2b8d187292c9f93ea30284802a0ab3f5be8ab36865d", size = 19932823, upload-time = "2024-08-26T20:16:40.171Z" }, - { url = "https://files.pythonhosted.org/packages/f1/46/ea25b98b13dccaebddf1a803f8c748680d972e00507cd9bc6dcdb5aa2ac1/numpy-2.0.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:9189427407d88ff25ecf8f12469d4d39d35bee1db5d39fc5c168c6f088a6956d", size = 14404424, upload-time = "2024-08-26T20:17:02.604Z" }, - { url = "https://files.pythonhosted.org/packages/c8/a6/177dd88d95ecf07e722d21008b1b40e681a929eb9e329684d449c36586b2/numpy-2.0.2-cp39-cp39-win32.whl", hash = "sha256:905d16e0c60200656500c95b6b8dca5d109e23cb24abc701d41c02d74c6b3afa", size = 6476809, upload-time = "2024-08-26T20:17:13.553Z" }, - { url = "https://files.pythonhosted.org/packages/ea/2b/7fc9f4e7ae5b507c1a3a21f0f15ed03e794c1242ea8a242ac158beb56034/numpy-2.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:a3f4ab0caa7f053f6797fcd4e1e25caee367db3112ef2b6ef82d749530768c73", size = 15911314, upload-time = "2024-08-26T20:17:36.72Z" }, - { url = "https://files.pythonhosted.org/packages/8f/3b/df5a870ac6a3be3a86856ce195ef42eec7ae50d2a202be1f5a4b3b340e14/numpy-2.0.2-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:7f0a0c6f12e07fa94133c8a67404322845220c06a9e80e85999afe727f7438b8", size = 21025288, upload-time = "2024-08-26T20:18:07.732Z" }, - { url = "https://files.pythonhosted.org/packages/2c/97/51af92f18d6f6f2d9ad8b482a99fb74e142d71372da5d834b3a2747a446e/numpy-2.0.2-pp39-pypy39_pp73-macosx_14_0_x86_64.whl", hash = "sha256:312950fdd060354350ed123c0e25a71327d3711584beaef30cdaa93320c392d4", size = 6762793, upload-time = "2024-08-26T20:18:19.125Z" }, - { url = "https://files.pythonhosted.org/packages/12/46/de1fbd0c1b5ccaa7f9a005b66761533e2f6a3e560096682683a223631fe9/numpy-2.0.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:26df23238872200f63518dd2aa984cfca675d82469535dc7162dc2ee52d9dd5c", size = 19334885, upload-time = "2024-08-26T20:18:47.237Z" }, - { url = "https://files.pythonhosted.org/packages/cc/dc/d330a6faefd92b446ec0f0dfea4c3207bb1fef3c4771d19cf4543efd2c78/numpy-2.0.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:a46288ec55ebbd58947d31d72be2c63cbf839f0a63b49cb755022310792a3385", size = 15828784, upload-time = "2024-08-26T20:19:11.19Z" }, -] - [[package]] name = "numpy" version = "2.2.6" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version == '3.10.*' and sys_platform == 'win32'", - "python_full_version == '3.10.*' and sys_platform != 'win32'", + "python_full_version < '3.11' and sys_platform == 'win32'", + "python_full_version < '3.11' and sys_platform != 'win32'", ] sdist = { url = "https://files.pythonhosted.org/packages/76/21/7d2a95e4bba9dc13d043ee156a356c0a8f0c6309dff6b21b4d71a073b8a8/numpy-2.2.6.tar.gz", hash = "sha256:e29554e2bef54a90aa5cc07da6ce955accb83f21ab5de01a62c8478897b264fd", size = 20276440, upload-time = "2025-05-17T22:38:04.611Z" } wheels = [ @@ -4422,6 +3447,18 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/84/c7/13bed8834936ddb38a2f366aea9458ebb4fe80c459054e6a0cfbcae68e0d/orjson-3.11.4-cp39-cp39-win_amd64.whl", hash = "sha256:e2985ce8b8c42d00492d0ed79f2bd2b6460d00f2fa671dfde4bf2e02f49bf5c6", size = 131383, upload-time = "2025-10-24T15:50:36.511Z" }, ] +[[package]] +name = "outcome" +version = "1.3.0.post0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "attrs" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/98/df/77698abfac98571e65ffeb0c1fba8ffd692ab8458d617a0eed7d9a8d38f2/outcome-1.3.0.post0.tar.gz", hash = "sha256:9dcf02e65f2971b80047b377468e72a268e15c0af3cf1238e6ff14f7f91143b8", size = 21060, upload-time = "2023-10-26T04:26:04.361Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/55/8b/5ab7257531a5d830fc8000c476e63c935488d74609b50f9384a643ec0a62/outcome-1.3.0.post0-py2.py3-none-any.whl", hash = "sha256:e771c5ce06d1415e356078d3bdd68523f284b4ce5419828922b6871e65eda82b", size = 10692, upload-time = "2023-10-26T04:26:02.532Z" }, +] + [[package]] name = "overrides" version = "7.7.0" @@ -4463,8 +3500,7 @@ name = "pandas" version = "2.3.3" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "numpy", version = "2.0.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.10.*'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, { name = "numpy", version = "2.3.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, { name = "python-dateutil" }, { name = "pytz" }, @@ -4519,13 +3555,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/a4/1e/1bac1a839d12e6a82ec6cb40cda2edde64a2013a66963293696bbf31fbbb/pandas-2.3.3-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2e3ebdb170b5ef78f19bfb71b0dc5dc58775032361fa188e814959b74d726dd5", size = 12121582, upload-time = "2025-09-29T23:30:43.391Z" }, { url = "https://files.pythonhosted.org/packages/44/91/483de934193e12a3b1d6ae7c8645d083ff88dec75f46e827562f1e4b4da6/pandas-2.3.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:d051c0e065b94b7a3cea50eb1ec32e912cd96dba41647eb24104b6c6c14c5788", size = 12699963, upload-time = "2025-09-29T23:31:10.009Z" }, { url = "https://files.pythonhosted.org/packages/70/44/5191d2e4026f86a2a109053e194d3ba7a31a2d10a9c2348368c63ed4e85a/pandas-2.3.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:3869faf4bd07b3b66a9f462417d0ca3a9df29a9f6abd5d0d0dbab15dac7abe87", size = 13202175, upload-time = "2025-09-29T23:31:59.173Z" }, - { url = "https://files.pythonhosted.org/packages/56/b4/52eeb530a99e2a4c55ffcd352772b599ed4473a0f892d127f4147cf0f88e/pandas-2.3.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c503ba5216814e295f40711470446bc3fd00f0faea8a086cbc688808e26f92a2", size = 11567720, upload-time = "2025-09-29T23:33:06.209Z" }, - { url = "https://files.pythonhosted.org/packages/48/4a/2d8b67632a021bced649ba940455ed441ca854e57d6e7658a6024587b083/pandas-2.3.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a637c5cdfa04b6d6e2ecedcb81fc52ffb0fd78ce2ebccc9ea964df9f658de8c8", size = 10810302, upload-time = "2025-09-29T23:33:35.846Z" }, - { url = "https://files.pythonhosted.org/packages/13/e6/d2465010ee0569a245c975dc6967b801887068bc893e908239b1f4b6c1ac/pandas-2.3.3-cp39-cp39-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:854d00d556406bffe66a4c0802f334c9ad5a96b4f1f868adf036a21b11ef13ff", size = 12154874, upload-time = "2025-09-29T23:33:49.939Z" }, - { url = "https://files.pythonhosted.org/packages/1f/18/aae8c0aa69a386a3255940e9317f793808ea79d0a525a97a903366bb2569/pandas-2.3.3-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bf1f8a81d04ca90e32a0aceb819d34dbd378a98bf923b6398b9a3ec0bf44de29", size = 12790141, upload-time = "2025-09-29T23:34:05.655Z" }, - { url = "https://files.pythonhosted.org/packages/f7/26/617f98de789de00c2a444fbe6301bb19e66556ac78cff933d2c98f62f2b4/pandas-2.3.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:23ebd657a4d38268c7dfbdf089fbc31ea709d82e4923c5ffd4fbd5747133ce73", size = 13208697, upload-time = "2025-09-29T23:34:21.835Z" }, - { url = "https://files.pythonhosted.org/packages/b9/fb/25709afa4552042bd0e15717c75e9b4a2294c3dc4f7e6ea50f03c5136600/pandas-2.3.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:5554c929ccc317d41a5e3d1234f3be588248e61f08a74dd17c9eabb535777dc9", size = 13879233, upload-time = "2025-09-29T23:34:35.079Z" }, - { url = "https://files.pythonhosted.org/packages/98/af/7be05277859a7bc399da8ba68b88c96b27b48740b6cf49688899c6eb4176/pandas-2.3.3-cp39-cp39-win_amd64.whl", hash = "sha256:d3e28b3e83862ccf4d85ff19cf8c20b2ae7e503881711ff2d534dc8f761131aa", size = 11359119, upload-time = "2025-09-29T23:34:46.339Z" }, ] [[package]] @@ -4574,7 +3603,7 @@ name = "pexpect" version = "4.9.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "ptyprocess", marker = "python_full_version < '3.10' or sys_platform != 'win32'" }, + { name = "ptyprocess", marker = "sys_platform != 'win32'" }, ] 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 = [ @@ -4599,8 +3628,7 @@ name = "pgsu" version = "0.3.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "click", version = "8.1.8", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "click", version = "8.2.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "click" }, { name = "psycopg", extra = ["binary"] }, ] sdist = { url = "https://files.pythonhosted.org/packages/58/1d/48f83c23a7be0d8bbbab80cb93010ffee0dad2a760d86de3b28470f0b6f9/pgsu-0.3.0.tar.gz", hash = "sha256:51dbb8f2272deacc28f546af442a1411eb260b1da53e11d4f93ea90f2b1acf50", size = 8184, upload-time = "2024-05-30T18:50:39.558Z" } @@ -4620,136 +3648,10 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/d3/47/7b58a3599232c80d1e87facaf24c67a826eed7342a12d5b6e7f8b7735163/pgtest-1.3.2-py2.py3-none-any.whl", hash = "sha256:a80a5b6080c36a207cdbbc44c45c829f721b0e643dd9b821bd31b8f26849c36b", size = 9051, upload-time = "2020-01-14T11:22:58.88Z" }, ] -[[package]] -name = "pillow" -version = "11.3.0" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.10'", -] -sdist = { url = "https://files.pythonhosted.org/packages/f3/0d/d0d6dea55cd152ce3d6767bb38a8fc10e33796ba4ba210cbab9354b6d238/pillow-11.3.0.tar.gz", hash = "sha256:3828ee7586cd0b2091b6209e5ad53e20d0649bbe87164a459d0676e035e8f523", size = 47113069, upload-time = "2025-07-01T09:16:30.666Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/4c/5d/45a3553a253ac8763f3561371432a90bdbe6000fbdcf1397ffe502aa206c/pillow-11.3.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:1b9c17fd4ace828b3003dfd1e30bff24863e0eb59b535e8f80194d9cc7ecf860", size = 5316554, upload-time = "2025-07-01T09:13:39.342Z" }, - { url = "https://files.pythonhosted.org/packages/7c/c8/67c12ab069ef586a25a4a79ced553586748fad100c77c0ce59bb4983ac98/pillow-11.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:65dc69160114cdd0ca0f35cb434633c75e8e7fad4cf855177a05bf38678f73ad", size = 4686548, upload-time = "2025-07-01T09:13:41.835Z" }, - { url = "https://files.pythonhosted.org/packages/2f/bd/6741ebd56263390b382ae4c5de02979af7f8bd9807346d068700dd6d5cf9/pillow-11.3.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7107195ddc914f656c7fc8e4a5e1c25f32e9236ea3ea860f257b0436011fddd0", size = 5859742, upload-time = "2025-07-03T13:09:47.439Z" }, - { url = "https://files.pythonhosted.org/packages/ca/0b/c412a9e27e1e6a829e6ab6c2dca52dd563efbedf4c9c6aa453d9a9b77359/pillow-11.3.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:cc3e831b563b3114baac7ec2ee86819eb03caa1a2cef0b481a5675b59c4fe23b", size = 7633087, upload-time = "2025-07-03T13:09:51.796Z" }, - { url = "https://files.pythonhosted.org/packages/59/9d/9b7076aaf30f5dd17e5e5589b2d2f5a5d7e30ff67a171eb686e4eecc2adf/pillow-11.3.0-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f1f182ebd2303acf8c380a54f615ec883322593320a9b00438eb842c1f37ae50", size = 5963350, upload-time = "2025-07-01T09:13:43.865Z" }, - { url = "https://files.pythonhosted.org/packages/f0/16/1a6bf01fb622fb9cf5c91683823f073f053005c849b1f52ed613afcf8dae/pillow-11.3.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4445fa62e15936a028672fd48c4c11a66d641d2c05726c7ec1f8ba6a572036ae", size = 6631840, upload-time = "2025-07-01T09:13:46.161Z" }, - { url = "https://files.pythonhosted.org/packages/7b/e6/6ff7077077eb47fde78739e7d570bdcd7c10495666b6afcd23ab56b19a43/pillow-11.3.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:71f511f6b3b91dd543282477be45a033e4845a40278fa8dcdbfdb07109bf18f9", size = 6074005, upload-time = "2025-07-01T09:13:47.829Z" }, - { url = "https://files.pythonhosted.org/packages/c3/3a/b13f36832ea6d279a697231658199e0a03cd87ef12048016bdcc84131601/pillow-11.3.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:040a5b691b0713e1f6cbe222e0f4f74cd233421e105850ae3b3c0ceda520f42e", size = 6708372, upload-time = "2025-07-01T09:13:52.145Z" }, - { url = "https://files.pythonhosted.org/packages/6c/e4/61b2e1a7528740efbc70b3d581f33937e38e98ef3d50b05007267a55bcb2/pillow-11.3.0-cp310-cp310-win32.whl", hash = "sha256:89bd777bc6624fe4115e9fac3352c79ed60f3bb18651420635f26e643e3dd1f6", size = 6277090, upload-time = "2025-07-01T09:13:53.915Z" }, - { url = "https://files.pythonhosted.org/packages/a9/d3/60c781c83a785d6afbd6a326ed4d759d141de43aa7365725cbcd65ce5e54/pillow-11.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:19d2ff547c75b8e3ff46f4d9ef969a06c30ab2d4263a9e287733aa8b2429ce8f", size = 6985988, upload-time = "2025-07-01T09:13:55.699Z" }, - { url = "https://files.pythonhosted.org/packages/9f/28/4f4a0203165eefb3763939c6789ba31013a2e90adffb456610f30f613850/pillow-11.3.0-cp310-cp310-win_arm64.whl", hash = "sha256:819931d25e57b513242859ce1876c58c59dc31587847bf74cfe06b2e0cb22d2f", size = 2422899, upload-time = "2025-07-01T09:13:57.497Z" }, - { url = "https://files.pythonhosted.org/packages/db/26/77f8ed17ca4ffd60e1dcd220a6ec6d71210ba398cfa33a13a1cd614c5613/pillow-11.3.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:1cd110edf822773368b396281a2293aeb91c90a2db00d78ea43e7e861631b722", size = 5316531, upload-time = "2025-07-01T09:13:59.203Z" }, - { url = "https://files.pythonhosted.org/packages/cb/39/ee475903197ce709322a17a866892efb560f57900d9af2e55f86db51b0a5/pillow-11.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9c412fddd1b77a75aa904615ebaa6001f169b26fd467b4be93aded278266b288", size = 4686560, upload-time = "2025-07-01T09:14:01.101Z" }, - { url = "https://files.pythonhosted.org/packages/d5/90/442068a160fd179938ba55ec8c97050a612426fae5ec0a764e345839f76d/pillow-11.3.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7d1aa4de119a0ecac0a34a9c8bde33f34022e2e8f99104e47a3ca392fd60e37d", size = 5870978, upload-time = "2025-07-03T13:09:55.638Z" }, - { url = "https://files.pythonhosted.org/packages/13/92/dcdd147ab02daf405387f0218dcf792dc6dd5b14d2573d40b4caeef01059/pillow-11.3.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:91da1d88226663594e3f6b4b8c3c8d85bd504117d043740a8e0ec449087cc494", size = 7641168, upload-time = "2025-07-03T13:10:00.37Z" }, - { url = "https://files.pythonhosted.org/packages/6e/db/839d6ba7fd38b51af641aa904e2960e7a5644d60ec754c046b7d2aee00e5/pillow-11.3.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:643f189248837533073c405ec2f0bb250ba54598cf80e8c1e043381a60632f58", size = 5973053, upload-time = "2025-07-01T09:14:04.491Z" }, - { url = "https://files.pythonhosted.org/packages/f2/2f/d7675ecae6c43e9f12aa8d58b6012683b20b6edfbdac7abcb4e6af7a3784/pillow-11.3.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:106064daa23a745510dabce1d84f29137a37224831d88eb4ce94bb187b1d7e5f", size = 6640273, upload-time = "2025-07-01T09:14:06.235Z" }, - { url = "https://files.pythonhosted.org/packages/45/ad/931694675ede172e15b2ff03c8144a0ddaea1d87adb72bb07655eaffb654/pillow-11.3.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:cd8ff254faf15591e724dc7c4ddb6bf4793efcbe13802a4ae3e863cd300b493e", size = 6082043, upload-time = "2025-07-01T09:14:07.978Z" }, - { url = "https://files.pythonhosted.org/packages/3a/04/ba8f2b11fc80d2dd462d7abec16351b45ec99cbbaea4387648a44190351a/pillow-11.3.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:932c754c2d51ad2b2271fd01c3d121daaa35e27efae2a616f77bf164bc0b3e94", size = 6715516, upload-time = "2025-07-01T09:14:10.233Z" }, - { url = "https://files.pythonhosted.org/packages/48/59/8cd06d7f3944cc7d892e8533c56b0acb68399f640786313275faec1e3b6f/pillow-11.3.0-cp311-cp311-win32.whl", hash = "sha256:b4b8f3efc8d530a1544e5962bd6b403d5f7fe8b9e08227c6b255f98ad82b4ba0", size = 6274768, upload-time = "2025-07-01T09:14:11.921Z" }, - { url = "https://files.pythonhosted.org/packages/f1/cc/29c0f5d64ab8eae20f3232da8f8571660aa0ab4b8f1331da5c2f5f9a938e/pillow-11.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:1a992e86b0dd7aeb1f053cd506508c0999d710a8f07b4c791c63843fc6a807ac", size = 6986055, upload-time = "2025-07-01T09:14:13.623Z" }, - { url = "https://files.pythonhosted.org/packages/c6/df/90bd886fabd544c25addd63e5ca6932c86f2b701d5da6c7839387a076b4a/pillow-11.3.0-cp311-cp311-win_arm64.whl", hash = "sha256:30807c931ff7c095620fe04448e2c2fc673fcbb1ffe2a7da3fb39613489b1ddd", size = 2423079, upload-time = "2025-07-01T09:14:15.268Z" }, - { url = "https://files.pythonhosted.org/packages/40/fe/1bc9b3ee13f68487a99ac9529968035cca2f0a51ec36892060edcc51d06a/pillow-11.3.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:fdae223722da47b024b867c1ea0be64e0df702c5e0a60e27daad39bf960dd1e4", size = 5278800, upload-time = "2025-07-01T09:14:17.648Z" }, - { url = "https://files.pythonhosted.org/packages/2c/32/7e2ac19b5713657384cec55f89065fb306b06af008cfd87e572035b27119/pillow-11.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:921bd305b10e82b4d1f5e802b6850677f965d8394203d182f078873851dada69", size = 4686296, upload-time = "2025-07-01T09:14:19.828Z" }, - { url = "https://files.pythonhosted.org/packages/8e/1e/b9e12bbe6e4c2220effebc09ea0923a07a6da1e1f1bfbc8d7d29a01ce32b/pillow-11.3.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:eb76541cba2f958032d79d143b98a3a6b3ea87f0959bbe256c0b5e416599fd5d", size = 5871726, upload-time = "2025-07-03T13:10:04.448Z" }, - { url = "https://files.pythonhosted.org/packages/8d/33/e9200d2bd7ba00dc3ddb78df1198a6e80d7669cce6c2bdbeb2530a74ec58/pillow-11.3.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:67172f2944ebba3d4a7b54f2e95c786a3a50c21b88456329314caaa28cda70f6", size = 7644652, upload-time = "2025-07-03T13:10:10.391Z" }, - { url = "https://files.pythonhosted.org/packages/41/f1/6f2427a26fc683e00d985bc391bdd76d8dd4e92fac33d841127eb8fb2313/pillow-11.3.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:97f07ed9f56a3b9b5f49d3661dc9607484e85c67e27f3e8be2c7d28ca032fec7", size = 5977787, upload-time = "2025-07-01T09:14:21.63Z" }, - { url = "https://files.pythonhosted.org/packages/e4/c9/06dd4a38974e24f932ff5f98ea3c546ce3f8c995d3f0985f8e5ba48bba19/pillow-11.3.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:676b2815362456b5b3216b4fd5bd89d362100dc6f4945154ff172e206a22c024", size = 6645236, upload-time = "2025-07-01T09:14:23.321Z" }, - { url = "https://files.pythonhosted.org/packages/40/e7/848f69fb79843b3d91241bad658e9c14f39a32f71a301bcd1d139416d1be/pillow-11.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3e184b2f26ff146363dd07bde8b711833d7b0202e27d13540bfe2e35a323a809", size = 6086950, upload-time = "2025-07-01T09:14:25.237Z" }, - { url = "https://files.pythonhosted.org/packages/0b/1a/7cff92e695a2a29ac1958c2a0fe4c0b2393b60aac13b04a4fe2735cad52d/pillow-11.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:6be31e3fc9a621e071bc17bb7de63b85cbe0bfae91bb0363c893cbe67247780d", size = 6723358, upload-time = "2025-07-01T09:14:27.053Z" }, - { url = "https://files.pythonhosted.org/packages/26/7d/73699ad77895f69edff76b0f332acc3d497f22f5d75e5360f78cbcaff248/pillow-11.3.0-cp312-cp312-win32.whl", hash = "sha256:7b161756381f0918e05e7cb8a371fff367e807770f8fe92ecb20d905d0e1c149", size = 6275079, upload-time = "2025-07-01T09:14:30.104Z" }, - { url = "https://files.pythonhosted.org/packages/8c/ce/e7dfc873bdd9828f3b6e5c2bbb74e47a98ec23cc5c74fc4e54462f0d9204/pillow-11.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:a6444696fce635783440b7f7a9fc24b3ad10a9ea3f0ab66c5905be1c19ccf17d", size = 6986324, upload-time = "2025-07-01T09:14:31.899Z" }, - { url = "https://files.pythonhosted.org/packages/16/8f/b13447d1bf0b1f7467ce7d86f6e6edf66c0ad7cf44cf5c87a37f9bed9936/pillow-11.3.0-cp312-cp312-win_arm64.whl", hash = "sha256:2aceea54f957dd4448264f9bf40875da0415c83eb85f55069d89c0ed436e3542", size = 2423067, upload-time = "2025-07-01T09:14:33.709Z" }, - { url = "https://files.pythonhosted.org/packages/1e/93/0952f2ed8db3a5a4c7a11f91965d6184ebc8cd7cbb7941a260d5f018cd2d/pillow-11.3.0-cp313-cp313-ios_13_0_arm64_iphoneos.whl", hash = "sha256:1c627742b539bba4309df89171356fcb3cc5a9178355b2727d1b74a6cf155fbd", size = 2128328, upload-time = "2025-07-01T09:14:35.276Z" }, - { url = "https://files.pythonhosted.org/packages/4b/e8/100c3d114b1a0bf4042f27e0f87d2f25e857e838034e98ca98fe7b8c0a9c/pillow-11.3.0-cp313-cp313-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:30b7c02f3899d10f13d7a48163c8969e4e653f8b43416d23d13d1bbfdc93b9f8", size = 2170652, upload-time = "2025-07-01T09:14:37.203Z" }, - { url = "https://files.pythonhosted.org/packages/aa/86/3f758a28a6e381758545f7cdb4942e1cb79abd271bea932998fc0db93cb6/pillow-11.3.0-cp313-cp313-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:7859a4cc7c9295f5838015d8cc0a9c215b77e43d07a25e460f35cf516df8626f", size = 2227443, upload-time = "2025-07-01T09:14:39.344Z" }, - { url = "https://files.pythonhosted.org/packages/01/f4/91d5b3ffa718df2f53b0dc109877993e511f4fd055d7e9508682e8aba092/pillow-11.3.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:ec1ee50470b0d050984394423d96325b744d55c701a439d2bd66089bff963d3c", size = 5278474, upload-time = "2025-07-01T09:14:41.843Z" }, - { url = "https://files.pythonhosted.org/packages/f9/0e/37d7d3eca6c879fbd9dba21268427dffda1ab00d4eb05b32923d4fbe3b12/pillow-11.3.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:7db51d222548ccfd274e4572fdbf3e810a5e66b00608862f947b163e613b67dd", size = 4686038, upload-time = "2025-07-01T09:14:44.008Z" }, - { url = "https://files.pythonhosted.org/packages/ff/b0/3426e5c7f6565e752d81221af9d3676fdbb4f352317ceafd42899aaf5d8a/pillow-11.3.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:2d6fcc902a24ac74495df63faad1884282239265c6839a0a6416d33faedfae7e", size = 5864407, upload-time = "2025-07-03T13:10:15.628Z" }, - { url = "https://files.pythonhosted.org/packages/fc/c1/c6c423134229f2a221ee53f838d4be9d82bab86f7e2f8e75e47b6bf6cd77/pillow-11.3.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f0f5d8f4a08090c6d6d578351a2b91acf519a54986c055af27e7a93feae6d3f1", size = 7639094, upload-time = "2025-07-03T13:10:21.857Z" }, - { url = "https://files.pythonhosted.org/packages/ba/c9/09e6746630fe6372c67c648ff9deae52a2bc20897d51fa293571977ceb5d/pillow-11.3.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c37d8ba9411d6003bba9e518db0db0c58a680ab9fe5179f040b0463644bc9805", size = 5973503, upload-time = "2025-07-01T09:14:45.698Z" }, - { url = "https://files.pythonhosted.org/packages/d5/1c/a2a29649c0b1983d3ef57ee87a66487fdeb45132df66ab30dd37f7dbe162/pillow-11.3.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:13f87d581e71d9189ab21fe0efb5a23e9f28552d5be6979e84001d3b8505abe8", size = 6642574, upload-time = "2025-07-01T09:14:47.415Z" }, - { url = "https://files.pythonhosted.org/packages/36/de/d5cc31cc4b055b6c6fd990e3e7f0f8aaf36229a2698501bcb0cdf67c7146/pillow-11.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:023f6d2d11784a465f09fd09a34b150ea4672e85fb3d05931d89f373ab14abb2", size = 6084060, upload-time = "2025-07-01T09:14:49.636Z" }, - { url = "https://files.pythonhosted.org/packages/d5/ea/502d938cbaeec836ac28a9b730193716f0114c41325db428e6b280513f09/pillow-11.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:45dfc51ac5975b938e9809451c51734124e73b04d0f0ac621649821a63852e7b", size = 6721407, upload-time = "2025-07-01T09:14:51.962Z" }, - { url = "https://files.pythonhosted.org/packages/45/9c/9c5e2a73f125f6cbc59cc7087c8f2d649a7ae453f83bd0362ff7c9e2aee2/pillow-11.3.0-cp313-cp313-win32.whl", hash = "sha256:a4d336baed65d50d37b88ca5b60c0fa9d81e3a87d4a7930d3880d1624d5b31f3", size = 6273841, upload-time = "2025-07-01T09:14:54.142Z" }, - { url = "https://files.pythonhosted.org/packages/23/85/397c73524e0cd212067e0c969aa245b01d50183439550d24d9f55781b776/pillow-11.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:0bce5c4fd0921f99d2e858dc4d4d64193407e1b99478bc5cacecba2311abde51", size = 6978450, upload-time = "2025-07-01T09:14:56.436Z" }, - { url = "https://files.pythonhosted.org/packages/17/d2/622f4547f69cd173955194b78e4d19ca4935a1b0f03a302d655c9f6aae65/pillow-11.3.0-cp313-cp313-win_arm64.whl", hash = "sha256:1904e1264881f682f02b7f8167935cce37bc97db457f8e7849dc3a6a52b99580", size = 2423055, upload-time = "2025-07-01T09:14:58.072Z" }, - { url = "https://files.pythonhosted.org/packages/dd/80/a8a2ac21dda2e82480852978416cfacd439a4b490a501a288ecf4fe2532d/pillow-11.3.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:4c834a3921375c48ee6b9624061076bc0a32a60b5532b322cc0ea64e639dd50e", size = 5281110, upload-time = "2025-07-01T09:14:59.79Z" }, - { url = "https://files.pythonhosted.org/packages/44/d6/b79754ca790f315918732e18f82a8146d33bcd7f4494380457ea89eb883d/pillow-11.3.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:5e05688ccef30ea69b9317a9ead994b93975104a677a36a8ed8106be9260aa6d", size = 4689547, upload-time = "2025-07-01T09:15:01.648Z" }, - { url = "https://files.pythonhosted.org/packages/49/20/716b8717d331150cb00f7fdd78169c01e8e0c219732a78b0e59b6bdb2fd6/pillow-11.3.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:1019b04af07fc0163e2810167918cb5add8d74674b6267616021ab558dc98ced", size = 5901554, upload-time = "2025-07-03T13:10:27.018Z" }, - { url = "https://files.pythonhosted.org/packages/74/cf/a9f3a2514a65bb071075063a96f0a5cf949c2f2fce683c15ccc83b1c1cab/pillow-11.3.0-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f944255db153ebb2b19c51fe85dd99ef0ce494123f21b9db4877ffdfc5590c7c", size = 7669132, upload-time = "2025-07-03T13:10:33.01Z" }, - { url = "https://files.pythonhosted.org/packages/98/3c/da78805cbdbee9cb43efe8261dd7cc0b4b93f2ac79b676c03159e9db2187/pillow-11.3.0-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1f85acb69adf2aaee8b7da124efebbdb959a104db34d3a2cb0f3793dbae422a8", size = 6005001, upload-time = "2025-07-01T09:15:03.365Z" }, - { url = "https://files.pythonhosted.org/packages/6c/fa/ce044b91faecf30e635321351bba32bab5a7e034c60187fe9698191aef4f/pillow-11.3.0-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:05f6ecbeff5005399bb48d198f098a9b4b6bdf27b8487c7f38ca16eeb070cd59", size = 6668814, upload-time = "2025-07-01T09:15:05.655Z" }, - { url = "https://files.pythonhosted.org/packages/7b/51/90f9291406d09bf93686434f9183aba27b831c10c87746ff49f127ee80cb/pillow-11.3.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:a7bc6e6fd0395bc052f16b1a8670859964dbd7003bd0af2ff08342eb6e442cfe", size = 6113124, upload-time = "2025-07-01T09:15:07.358Z" }, - { url = "https://files.pythonhosted.org/packages/cd/5a/6fec59b1dfb619234f7636d4157d11fb4e196caeee220232a8d2ec48488d/pillow-11.3.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:83e1b0161c9d148125083a35c1c5a89db5b7054834fd4387499e06552035236c", size = 6747186, upload-time = "2025-07-01T09:15:09.317Z" }, - { url = "https://files.pythonhosted.org/packages/49/6b/00187a044f98255225f172de653941e61da37104a9ea60e4f6887717e2b5/pillow-11.3.0-cp313-cp313t-win32.whl", hash = "sha256:2a3117c06b8fb646639dce83694f2f9eac405472713fcb1ae887469c0d4f6788", size = 6277546, upload-time = "2025-07-01T09:15:11.311Z" }, - { url = "https://files.pythonhosted.org/packages/e8/5c/6caaba7e261c0d75bab23be79f1d06b5ad2a2ae49f028ccec801b0e853d6/pillow-11.3.0-cp313-cp313t-win_amd64.whl", hash = "sha256:857844335c95bea93fb39e0fa2726b4d9d758850b34075a7e3ff4f4fa3aa3b31", size = 6985102, upload-time = "2025-07-01T09:15:13.164Z" }, - { url = "https://files.pythonhosted.org/packages/f3/7e/b623008460c09a0cb38263c93b828c666493caee2eb34ff67f778b87e58c/pillow-11.3.0-cp313-cp313t-win_arm64.whl", hash = "sha256:8797edc41f3e8536ae4b10897ee2f637235c94f27404cac7297f7b607dd0716e", size = 2424803, upload-time = "2025-07-01T09:15:15.695Z" }, - { url = "https://files.pythonhosted.org/packages/73/f4/04905af42837292ed86cb1b1dabe03dce1edc008ef14c473c5c7e1443c5d/pillow-11.3.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:d9da3df5f9ea2a89b81bb6087177fb1f4d1c7146d583a3fe5c672c0d94e55e12", size = 5278520, upload-time = "2025-07-01T09:15:17.429Z" }, - { url = "https://files.pythonhosted.org/packages/41/b0/33d79e377a336247df6348a54e6d2a2b85d644ca202555e3faa0cf811ecc/pillow-11.3.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:0b275ff9b04df7b640c59ec5a3cb113eefd3795a8df80bac69646ef699c6981a", size = 4686116, upload-time = "2025-07-01T09:15:19.423Z" }, - { url = "https://files.pythonhosted.org/packages/49/2d/ed8bc0ab219ae8768f529597d9509d184fe8a6c4741a6864fea334d25f3f/pillow-11.3.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:0743841cabd3dba6a83f38a92672cccbd69af56e3e91777b0ee7f4dba4385632", size = 5864597, upload-time = "2025-07-03T13:10:38.404Z" }, - { url = "https://files.pythonhosted.org/packages/b5/3d/b932bb4225c80b58dfadaca9d42d08d0b7064d2d1791b6a237f87f661834/pillow-11.3.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:2465a69cf967b8b49ee1b96d76718cd98c4e925414ead59fdf75cf0fd07df673", size = 7638246, upload-time = "2025-07-03T13:10:44.987Z" }, - { url = "https://files.pythonhosted.org/packages/09/b5/0487044b7c096f1b48f0d7ad416472c02e0e4bf6919541b111efd3cae690/pillow-11.3.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:41742638139424703b4d01665b807c6468e23e699e8e90cffefe291c5832b027", size = 5973336, upload-time = "2025-07-01T09:15:21.237Z" }, - { url = "https://files.pythonhosted.org/packages/a8/2d/524f9318f6cbfcc79fbc004801ea6b607ec3f843977652fdee4857a7568b/pillow-11.3.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:93efb0b4de7e340d99057415c749175e24c8864302369e05914682ba642e5d77", size = 6642699, upload-time = "2025-07-01T09:15:23.186Z" }, - { url = "https://files.pythonhosted.org/packages/6f/d2/a9a4f280c6aefedce1e8f615baaa5474e0701d86dd6f1dede66726462bbd/pillow-11.3.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7966e38dcd0fa11ca390aed7c6f20454443581d758242023cf36fcb319b1a874", size = 6083789, upload-time = "2025-07-01T09:15:25.1Z" }, - { url = "https://files.pythonhosted.org/packages/fe/54/86b0cd9dbb683a9d5e960b66c7379e821a19be4ac5810e2e5a715c09a0c0/pillow-11.3.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:98a9afa7b9007c67ed84c57c9e0ad86a6000da96eaa638e4f8abe5b65ff83f0a", size = 6720386, upload-time = "2025-07-01T09:15:27.378Z" }, - { url = "https://files.pythonhosted.org/packages/e7/95/88efcaf384c3588e24259c4203b909cbe3e3c2d887af9e938c2022c9dd48/pillow-11.3.0-cp314-cp314-win32.whl", hash = "sha256:02a723e6bf909e7cea0dac1b0e0310be9d7650cd66222a5f1c571455c0a45214", size = 6370911, upload-time = "2025-07-01T09:15:29.294Z" }, - { url = "https://files.pythonhosted.org/packages/2e/cc/934e5820850ec5eb107e7b1a72dd278140731c669f396110ebc326f2a503/pillow-11.3.0-cp314-cp314-win_amd64.whl", hash = "sha256:a418486160228f64dd9e9efcd132679b7a02a5f22c982c78b6fc7dab3fefb635", size = 7117383, upload-time = "2025-07-01T09:15:31.128Z" }, - { url = "https://files.pythonhosted.org/packages/d6/e9/9c0a616a71da2a5d163aa37405e8aced9a906d574b4a214bede134e731bc/pillow-11.3.0-cp314-cp314-win_arm64.whl", hash = "sha256:155658efb5e044669c08896c0c44231c5e9abcaadbc5cd3648df2f7c0b96b9a6", size = 2511385, upload-time = "2025-07-01T09:15:33.328Z" }, - { url = "https://files.pythonhosted.org/packages/1a/33/c88376898aff369658b225262cd4f2659b13e8178e7534df9e6e1fa289f6/pillow-11.3.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:59a03cdf019efbfeeed910bf79c7c93255c3d54bc45898ac2a4140071b02b4ae", size = 5281129, upload-time = "2025-07-01T09:15:35.194Z" }, - { url = "https://files.pythonhosted.org/packages/1f/70/d376247fb36f1844b42910911c83a02d5544ebd2a8bad9efcc0f707ea774/pillow-11.3.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:f8a5827f84d973d8636e9dc5764af4f0cf2318d26744b3d902931701b0d46653", size = 4689580, upload-time = "2025-07-01T09:15:37.114Z" }, - { url = "https://files.pythonhosted.org/packages/eb/1c/537e930496149fbac69efd2fc4329035bbe2e5475b4165439e3be9cb183b/pillow-11.3.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ee92f2fd10f4adc4b43d07ec5e779932b4eb3dbfbc34790ada5a6669bc095aa6", size = 5902860, upload-time = "2025-07-03T13:10:50.248Z" }, - { url = "https://files.pythonhosted.org/packages/bd/57/80f53264954dcefeebcf9dae6e3eb1daea1b488f0be8b8fef12f79a3eb10/pillow-11.3.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c96d333dcf42d01f47b37e0979b6bd73ec91eae18614864622d9b87bbd5bbf36", size = 7670694, upload-time = "2025-07-03T13:10:56.432Z" }, - { url = "https://files.pythonhosted.org/packages/70/ff/4727d3b71a8578b4587d9c276e90efad2d6fe0335fd76742a6da08132e8c/pillow-11.3.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4c96f993ab8c98460cd0c001447bff6194403e8b1d7e149ade5f00594918128b", size = 6005888, upload-time = "2025-07-01T09:15:39.436Z" }, - { url = "https://files.pythonhosted.org/packages/05/ae/716592277934f85d3be51d7256f3636672d7b1abfafdc42cf3f8cbd4b4c8/pillow-11.3.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:41342b64afeba938edb034d122b2dda5db2139b9a4af999729ba8818e0056477", size = 6670330, upload-time = "2025-07-01T09:15:41.269Z" }, - { url = "https://files.pythonhosted.org/packages/e7/bb/7fe6cddcc8827b01b1a9766f5fdeb7418680744f9082035bdbabecf1d57f/pillow-11.3.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:068d9c39a2d1b358eb9f245ce7ab1b5c3246c7c8c7d9ba58cfa5b43146c06e50", size = 6114089, upload-time = "2025-07-01T09:15:43.13Z" }, - { url = "https://files.pythonhosted.org/packages/8b/f5/06bfaa444c8e80f1a8e4bff98da9c83b37b5be3b1deaa43d27a0db37ef84/pillow-11.3.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:a1bc6ba083b145187f648b667e05a2534ecc4b9f2784c2cbe3089e44868f2b9b", size = 6748206, upload-time = "2025-07-01T09:15:44.937Z" }, - { url = "https://files.pythonhosted.org/packages/f0/77/bc6f92a3e8e6e46c0ca78abfffec0037845800ea38c73483760362804c41/pillow-11.3.0-cp314-cp314t-win32.whl", hash = "sha256:118ca10c0d60b06d006be10a501fd6bbdfef559251ed31b794668ed569c87e12", size = 6377370, upload-time = "2025-07-01T09:15:46.673Z" }, - { url = "https://files.pythonhosted.org/packages/4a/82/3a721f7d69dca802befb8af08b7c79ebcab461007ce1c18bd91a5d5896f9/pillow-11.3.0-cp314-cp314t-win_amd64.whl", hash = "sha256:8924748b688aa210d79883357d102cd64690e56b923a186f35a82cbc10f997db", size = 7121500, upload-time = "2025-07-01T09:15:48.512Z" }, - { url = "https://files.pythonhosted.org/packages/89/c7/5572fa4a3f45740eaab6ae86fcdf7195b55beac1371ac8c619d880cfe948/pillow-11.3.0-cp314-cp314t-win_arm64.whl", hash = "sha256:79ea0d14d3ebad43ec77ad5272e6ff9bba5b679ef73375ea760261207fa8e0aa", size = 2512835, upload-time = "2025-07-01T09:15:50.399Z" }, - { url = "https://files.pythonhosted.org/packages/9e/8e/9c089f01677d1264ab8648352dcb7773f37da6ad002542760c80107da816/pillow-11.3.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:48d254f8a4c776de343051023eb61ffe818299eeac478da55227d96e241de53f", size = 5316478, upload-time = "2025-07-01T09:15:52.209Z" }, - { url = "https://files.pythonhosted.org/packages/b5/a9/5749930caf674695867eb56a581e78eb5f524b7583ff10b01b6e5048acb3/pillow-11.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:7aee118e30a4cf54fdd873bd3a29de51e29105ab11f9aad8c32123f58c8f8081", size = 4686522, upload-time = "2025-07-01T09:15:54.162Z" }, - { url = "https://files.pythonhosted.org/packages/43/46/0b85b763eb292b691030795f9f6bb6fcaf8948c39413c81696a01c3577f7/pillow-11.3.0-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:23cff760a9049c502721bdb743a7cb3e03365fafcdfc2ef9784610714166e5a4", size = 5853376, upload-time = "2025-07-03T13:11:01.066Z" }, - { url = "https://files.pythonhosted.org/packages/5e/c6/1a230ec0067243cbd60bc2dad5dc3ab46a8a41e21c15f5c9b52b26873069/pillow-11.3.0-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:6359a3bc43f57d5b375d1ad54a0074318a0844d11b76abccf478c37c986d3cfc", size = 7626020, upload-time = "2025-07-03T13:11:06.479Z" }, - { url = "https://files.pythonhosted.org/packages/63/dd/f296c27ffba447bfad76c6a0c44c1ea97a90cb9472b9304c94a732e8dbfb/pillow-11.3.0-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:092c80c76635f5ecb10f3f83d76716165c96f5229addbd1ec2bdbbda7d496e06", size = 5956732, upload-time = "2025-07-01T09:15:56.111Z" }, - { url = "https://files.pythonhosted.org/packages/a5/a0/98a3630f0b57f77bae67716562513d3032ae70414fcaf02750279c389a9e/pillow-11.3.0-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cadc9e0ea0a2431124cde7e1697106471fc4c1da01530e679b2391c37d3fbb3a", size = 6624404, upload-time = "2025-07-01T09:15:58.245Z" }, - { url = "https://files.pythonhosted.org/packages/de/e6/83dfba5646a290edd9a21964da07674409e410579c341fc5b8f7abd81620/pillow-11.3.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:6a418691000f2a418c9135a7cf0d797c1bb7d9a485e61fe8e7722845b95ef978", size = 6067760, upload-time = "2025-07-01T09:16:00.003Z" }, - { url = "https://files.pythonhosted.org/packages/bc/41/15ab268fe6ee9a2bc7391e2bbb20a98d3974304ab1a406a992dcb297a370/pillow-11.3.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:97afb3a00b65cc0804d1c7abddbf090a81eaac02768af58cbdcaaa0a931e0b6d", size = 6700534, upload-time = "2025-07-01T09:16:02.29Z" }, - { url = "https://files.pythonhosted.org/packages/64/79/6d4f638b288300bed727ff29f2a3cb63db054b33518a95f27724915e3fbc/pillow-11.3.0-cp39-cp39-win32.whl", hash = "sha256:ea944117a7974ae78059fcc1800e5d3295172bb97035c0c1d9345fca1419da71", size = 6277091, upload-time = "2025-07-01T09:16:04.4Z" }, - { url = "https://files.pythonhosted.org/packages/46/05/4106422f45a05716fd34ed21763f8ec182e8ea00af6e9cb05b93a247361a/pillow-11.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:e5c5858ad8ec655450a7c7df532e9842cf8df7cc349df7225c60d5d348c8aada", size = 6986091, upload-time = "2025-07-01T09:16:06.342Z" }, - { url = "https://files.pythonhosted.org/packages/63/c6/287fd55c2c12761d0591549d48885187579b7c257bef0c6660755b0b59ae/pillow-11.3.0-cp39-cp39-win_arm64.whl", hash = "sha256:6abdbfd3aea42be05702a8dd98832329c167ee84400a1d1f61ab11437f1717eb", size = 2422632, upload-time = "2025-07-01T09:16:08.142Z" }, - { url = "https://files.pythonhosted.org/packages/6f/8b/209bd6b62ce8367f47e68a218bffac88888fdf2c9fcf1ecadc6c3ec1ebc7/pillow-11.3.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:3cee80663f29e3843b68199b9d6f4f54bd1d4a6b59bdd91bceefc51238bcb967", size = 5270556, upload-time = "2025-07-01T09:16:09.961Z" }, - { url = "https://files.pythonhosted.org/packages/2e/e6/231a0b76070c2cfd9e260a7a5b504fb72da0a95279410fa7afd99d9751d6/pillow-11.3.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:b5f56c3f344f2ccaf0dd875d3e180f631dc60a51b314295a3e681fe8cf851fbe", size = 4654625, upload-time = "2025-07-01T09:16:11.913Z" }, - { url = "https://files.pythonhosted.org/packages/13/f4/10cf94fda33cb12765f2397fc285fa6d8eb9c29de7f3185165b702fc7386/pillow-11.3.0-pp310-pypy310_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:e67d793d180c9df62f1f40aee3accca4829d3794c95098887edc18af4b8b780c", size = 4874207, upload-time = "2025-07-03T13:11:10.201Z" }, - { url = "https://files.pythonhosted.org/packages/72/c9/583821097dc691880c92892e8e2d41fe0a5a3d6021f4963371d2f6d57250/pillow-11.3.0-pp310-pypy310_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d000f46e2917c705e9fb93a3606ee4a819d1e3aa7a9b442f6444f07e77cf5e25", size = 6583939, upload-time = "2025-07-03T13:11:15.68Z" }, - { url = "https://files.pythonhosted.org/packages/3b/8e/5c9d410f9217b12320efc7c413e72693f48468979a013ad17fd690397b9a/pillow-11.3.0-pp310-pypy310_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:527b37216b6ac3a12d7838dc3bd75208ec57c1c6d11ef01902266a5a0c14fc27", size = 4957166, upload-time = "2025-07-01T09:16:13.74Z" }, - { url = "https://files.pythonhosted.org/packages/62/bb/78347dbe13219991877ffb3a91bf09da8317fbfcd4b5f9140aeae020ad71/pillow-11.3.0-pp310-pypy310_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:be5463ac478b623b9dd3937afd7fb7ab3d79dd290a28e2b6df292dc75063eb8a", size = 5581482, upload-time = "2025-07-01T09:16:16.107Z" }, - { url = "https://files.pythonhosted.org/packages/d9/28/1000353d5e61498aaeaaf7f1e4b49ddb05f2c6575f9d4f9f914a3538b6e1/pillow-11.3.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:8dc70ca24c110503e16918a658b869019126ecfe03109b754c402daff12b3d9f", size = 6984596, upload-time = "2025-07-01T09:16:18.07Z" }, - { url = "https://files.pythonhosted.org/packages/9e/e3/6fa84033758276fb31da12e5fb66ad747ae83b93c67af17f8c6ff4cc8f34/pillow-11.3.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:7c8ec7a017ad1bd562f93dbd8505763e688d388cde6e4a010ae1486916e713e6", size = 5270566, upload-time = "2025-07-01T09:16:19.801Z" }, - { url = "https://files.pythonhosted.org/packages/5b/ee/e8d2e1ab4892970b561e1ba96cbd59c0d28cf66737fc44abb2aec3795a4e/pillow-11.3.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:9ab6ae226de48019caa8074894544af5b53a117ccb9d3b3dcb2871464c829438", size = 4654618, upload-time = "2025-07-01T09:16:21.818Z" }, - { url = "https://files.pythonhosted.org/packages/f2/6d/17f80f4e1f0761f02160fc433abd4109fa1548dcfdca46cfdadaf9efa565/pillow-11.3.0-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:fe27fb049cdcca11f11a7bfda64043c37b30e6b91f10cb5bab275806c32f6ab3", size = 4874248, upload-time = "2025-07-03T13:11:20.738Z" }, - { url = "https://files.pythonhosted.org/packages/de/5f/c22340acd61cef960130585bbe2120e2fd8434c214802f07e8c03596b17e/pillow-11.3.0-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:465b9e8844e3c3519a983d58b80be3f668e2a7a5db97f2784e7079fbc9f9822c", size = 6583963, upload-time = "2025-07-03T13:11:26.283Z" }, - { url = "https://files.pythonhosted.org/packages/31/5e/03966aedfbfcbb4d5f8aa042452d3361f325b963ebbadddac05b122e47dd/pillow-11.3.0-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5418b53c0d59b3824d05e029669efa023bbef0f3e92e75ec8428f3799487f361", size = 4957170, upload-time = "2025-07-01T09:16:23.762Z" }, - { url = "https://files.pythonhosted.org/packages/cc/2d/e082982aacc927fc2cab48e1e731bdb1643a1406acace8bed0900a61464e/pillow-11.3.0-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:504b6f59505f08ae014f724b6207ff6222662aab5cc9542577fb084ed0676ac7", size = 5581505, upload-time = "2025-07-01T09:16:25.593Z" }, - { url = "https://files.pythonhosted.org/packages/34/e7/ae39f538fd6844e982063c3a5e4598b8ced43b9633baa3a85ef33af8c05c/pillow-11.3.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:c84d689db21a1c397d001aa08241044aa2069e7587b398c8cc63020390b1c1b8", size = 6984598, upload-time = "2025-07-01T09:16:27.732Z" }, -] - [[package]] name = "pillow" version = "12.0.0" source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.14' and sys_platform == 'win32'", - "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32'", - "python_full_version == '3.11.*' and sys_platform == 'win32'", - "python_full_version >= '3.14' and sys_platform != 'win32'", - "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'win32'", - "python_full_version == '3.11.*' and sys_platform != 'win32'", - "python_full_version == '3.10.*' and sys_platform == 'win32'", - "python_full_version == '3.10.*' and sys_platform != 'win32'", -] sdist = { url = "https://files.pythonhosted.org/packages/5a/b0/cace85a1b0c9775a9f8f5d5423c8261c858760e2466c79b2dd184638b056/pillow-12.0.0.tar.gz", hash = "sha256:87d4f8125c9988bfbed67af47dd7a953e2fc7b0cc1e7800ec6d2080d490bb353", size = 47008828, upload-time = "2025-10-15T18:24:14.008Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/5d/08/26e68b6b5da219c2a2cb7b563af008b53bb8e6b6fcb3fa40715fcdb2523a/pillow-12.0.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:3adfb466bbc544b926d50fe8f4a4e6abd8c6bffd28a26177594e6e9b2b76572b", size = 5289809, upload-time = "2025-10-15T18:21:27.791Z" }, @@ -4844,32 +3746,10 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/95/7e/f896623c3c635a90537ac093c6a618ebe1a90d87206e42309cb5d98a1b9e/pillow-12.0.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:b290fd8aa38422444d4b50d579de197557f182ef1068b75f5aa8558638b8d0a5", size = 6997850, upload-time = "2025-10-15T18:24:11.495Z" }, ] -[[package]] -name = "platformdirs" -version = "4.4.0" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.10'", -] -sdist = { url = "https://files.pythonhosted.org/packages/23/e8/21db9c9987b0e728855bd57bff6984f67952bea55d6f75e055c46b5383e8/platformdirs-4.4.0.tar.gz", hash = "sha256:ca753cf4d81dc309bc67b0ea38fd15dc97bc30ce419a7f58d13eb3bf14c4febf", size = 21634, upload-time = "2025-08-26T14:32:04.268Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/40/4b/2028861e724d3bd36227adfa20d3fd24c3fc6d52032f4a93c133be5d17ce/platformdirs-4.4.0-py3-none-any.whl", hash = "sha256:abd01743f24e5287cd7a5db3752faf1a2d65353f38ec26d98e25a6db65958c85", size = 18654, upload-time = "2025-08-26T14:32:02.735Z" }, -] - [[package]] name = "platformdirs" version = "4.5.0" source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.14' and sys_platform == 'win32'", - "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32'", - "python_full_version == '3.11.*' and sys_platform == 'win32'", - "python_full_version >= '3.14' and sys_platform != 'win32'", - "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'win32'", - "python_full_version == '3.11.*' and sys_platform != 'win32'", - "python_full_version == '3.10.*' and sys_platform == 'win32'", - "python_full_version == '3.10.*' and sys_platform != 'win32'", -] sdist = { url = "https://files.pythonhosted.org/packages/61/33/9611380c2bdb1225fdef633e2a9610622310fed35ab11dac9620972ee088/platformdirs-4.5.0.tar.gz", hash = "sha256:70ddccdd7c99fc5942e9fc25636a8b34d04c24b335100223152c2803e4063312", size = 21632, upload-time = "2025-10-08T17:44:48.791Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/73/cb/ac7874b3e5d58441674fb70742e6c374b28b0c7cb988d37d991cde47166c/platformdirs-4.5.0-py3-none-any.whl", hash = "sha256:e578a81bb873cbb89a41fcc904c7ef523cc18284b7e3b3ccf06aca1403b7ebd3", size = 18651, upload-time = "2025-10-08T17:44:47.223Z" }, @@ -5068,21 +3948,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/08/02/87b25304249a35c0915d236575bc3574a323f60b47939a2262b77632a3ee/propcache-0.4.1-cp314-cp314t-win32.whl", hash = "sha256:05674a162469f31358c30bcaa8883cb7829fa3110bf9c0991fe27d7896c42d85", size = 42546, upload-time = "2025-10-08T19:48:32.872Z" }, { url = "https://files.pythonhosted.org/packages/cb/ef/3c6ecf8b317aa982f309835e8f96987466123c6e596646d4e6a1dfcd080f/propcache-0.4.1-cp314-cp314t-win_amd64.whl", hash = "sha256:990f6b3e2a27d683cb7602ed6c86f15ee6b43b1194736f9baaeb93d0016633b1", size = 46259, upload-time = "2025-10-08T19:48:34.226Z" }, { url = "https://files.pythonhosted.org/packages/c4/2d/346e946d4951f37eca1e4f55be0f0174c52cd70720f84029b02f296f4a38/propcache-0.4.1-cp314-cp314t-win_arm64.whl", hash = "sha256:ecef2343af4cc68e05131e45024ba34f6095821988a9d0a02aa7c73fcc448aa9", size = 40428, upload-time = "2025-10-08T19:48:35.441Z" }, - { url = "https://files.pythonhosted.org/packages/9b/01/0ebaec9003f5d619a7475165961f8e3083cf8644d704b60395df3601632d/propcache-0.4.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:3d233076ccf9e450c8b3bc6720af226b898ef5d051a2d145f7d765e6e9f9bcff", size = 80277, upload-time = "2025-10-08T19:48:36.647Z" }, - { url = "https://files.pythonhosted.org/packages/34/58/04af97ac586b4ef6b9026c3fd36ee7798b737a832f5d3440a4280dcebd3a/propcache-0.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:357f5bb5c377a82e105e44bd3d52ba22b616f7b9773714bff93573988ef0a5fb", size = 45865, upload-time = "2025-10-08T19:48:37.859Z" }, - { url = "https://files.pythonhosted.org/packages/7c/19/b65d98ae21384518b291d9939e24a8aeac4fdb5101b732576f8f7540e834/propcache-0.4.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:cbc3b6dfc728105b2a57c06791eb07a94229202ea75c59db644d7d496b698cac", size = 47636, upload-time = "2025-10-08T19:48:39.038Z" }, - { url = "https://files.pythonhosted.org/packages/b3/0f/317048c6d91c356c7154dca5af019e6effeb7ee15fa6a6db327cc19e12b4/propcache-0.4.1-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:182b51b421f0501952d938dc0b0eb45246a5b5153c50d42b495ad5fb7517c888", size = 201126, upload-time = "2025-10-08T19:48:40.774Z" }, - { url = "https://files.pythonhosted.org/packages/71/69/0b2a7a5a6ee83292b4b997dbd80549d8ce7d40b6397c1646c0d9495f5a85/propcache-0.4.1-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:4b536b39c5199b96fc6245eb5fb796c497381d3942f169e44e8e392b29c9ebcc", size = 209837, upload-time = "2025-10-08T19:48:42.167Z" }, - { url = "https://files.pythonhosted.org/packages/a5/92/c699ac495a6698df6e497fc2de27af4b6ace10d8e76528357ce153722e45/propcache-0.4.1-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:db65d2af507bbfbdcedb254a11149f894169d90488dd3e7190f7cdcb2d6cd57a", size = 215578, upload-time = "2025-10-08T19:48:43.56Z" }, - { url = "https://files.pythonhosted.org/packages/b3/ee/14de81c5eb02c0ee4f500b4e39c4e1bd0677c06e72379e6ab18923c773fc/propcache-0.4.1-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fd2dbc472da1f772a4dae4fa24be938a6c544671a912e30529984dd80400cd88", size = 197187, upload-time = "2025-10-08T19:48:45.309Z" }, - { url = "https://files.pythonhosted.org/packages/1d/94/48dce9aaa6d8dd5a0859bad75158ec522546d4ac23f8e2f05fac469477dd/propcache-0.4.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:daede9cd44e0f8bdd9e6cc9a607fc81feb80fae7a5fc6cecaff0e0bb32e42d00", size = 193478, upload-time = "2025-10-08T19:48:47.743Z" }, - { url = "https://files.pythonhosted.org/packages/60/b5/0516b563e801e1ace212afde869a0596a0d7115eec0b12d296d75633fb29/propcache-0.4.1-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:71b749281b816793678ae7f3d0d84bd36e694953822eaad408d682efc5ca18e0", size = 190650, upload-time = "2025-10-08T19:48:49.373Z" }, - { url = "https://files.pythonhosted.org/packages/24/89/e0f7d4a5978cd56f8cd67735f74052f257dc471ec901694e430f0d1572fe/propcache-0.4.1-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:0002004213ee1f36cfb3f9a42b5066100c44276b9b72b4e1504cddd3d692e86e", size = 200251, upload-time = "2025-10-08T19:48:51.4Z" }, - { url = "https://files.pythonhosted.org/packages/06/7d/a1fac863d473876ed4406c914f2e14aa82d2f10dd207c9e16fc383cc5a24/propcache-0.4.1-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:fe49d0a85038f36ba9e3ffafa1103e61170b28e95b16622e11be0a0ea07c6781", size = 200919, upload-time = "2025-10-08T19:48:53.227Z" }, - { url = "https://files.pythonhosted.org/packages/c3/4e/f86a256ff24944cf5743e4e6c6994e3526f6acfcfb55e21694c2424f758c/propcache-0.4.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:99d43339c83aaf4d32bda60928231848eee470c6bda8d02599cc4cebe872d183", size = 193211, upload-time = "2025-10-08T19:48:55.027Z" }, - { url = "https://files.pythonhosted.org/packages/6e/3f/3fbad5f4356b068f1b047d300a6ff2c66614d7030f078cd50be3fec04228/propcache-0.4.1-cp39-cp39-win32.whl", hash = "sha256:a129e76735bc792794d5177069691c3217898b9f5cee2b2661471e52ffe13f19", size = 38314, upload-time = "2025-10-08T19:48:56.792Z" }, - { url = "https://files.pythonhosted.org/packages/a4/45/d78d136c3a3d215677abb886785aae744da2c3005bcb99e58640c56529b1/propcache-0.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:948dab269721ae9a87fd16c514a0a2c2a1bdb23a9a61b969b0f9d9ee2968546f", size = 41912, upload-time = "2025-10-08T19:48:57.995Z" }, - { url = "https://files.pythonhosted.org/packages/fc/2a/b0632941f25139f4e58450b307242951f7c2717a5704977c6d5323a800af/propcache-0.4.1-cp39-cp39-win_arm64.whl", hash = "sha256:5fd37c406dd6dc85aa743e214cef35dc54bbdd1419baac4f6ae5e5b1a2976938", size = 38450, upload-time = "2025-10-08T19:48:59.349Z" }, { url = "https://files.pythonhosted.org/packages/5b/5a/bc7b4a4ef808fa59a816c17b20c4bef6884daebbdf627ff2a161da67da19/propcache-0.4.1-py3-none-any.whl", hash = "sha256:af2a6052aeb6cf17d3e46ee169099044fd8224cbaf75c76a2ef596e8163e2237", size = 13305, upload-time = "2025-10-08T19:49:00.792Z" }, ] @@ -5180,15 +4045,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/d1/a1/c647e01ab162e6bfa52380e23e486215e9d28ffd31e9cf3cb1e9ca59008b/psycopg_binary-3.2.12-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:7130effd0517881f3a852eff98729d51034128f0737f64f0d1c7ea8343d77bd7", size = 3541756, upload-time = "2025-10-26T00:35:08.622Z" }, { url = "https://files.pythonhosted.org/packages/6b/d0/795bdaa8c946a7b7126bf7ca8d4371eaaa613093e3ec341a0e50f52cbee2/psycopg_binary-3.2.12-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:89b3c5201ca616d69ca0c3c0003ca18f7170a679c445c7e386ebfb4f29aa738e", size = 3587950, upload-time = "2025-10-26T00:35:41.183Z" }, { url = "https://files.pythonhosted.org/packages/53/cf/10c3e95827a3ca8af332dfc471befec86e15a14dc83cee893c49a4910dad/psycopg_binary-3.2.12-cp314-cp314-win_amd64.whl", hash = "sha256:48a8e29f3e38fcf8d393b8fe460d83e39c107ad7e5e61cd3858a7569e0554a39", size = 3005787, upload-time = "2025-10-26T00:36:06.783Z" }, - { url = "https://files.pythonhosted.org/packages/57/23/750496d296e70ae0b5bee6f16e315a78c981dadd10478d5dd0770391c793/psycopg_binary-3.2.12-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f8107968a9eadb451cfa6cf86036006fdde32a83cd39c26c9ca46765e653b547", size = 4031957, upload-time = "2025-10-26T00:41:20.413Z" }, - { url = "https://files.pythonhosted.org/packages/20/d9/e6c1cb955f89d12b415a94405fc563769b9d9cf623b4b79be6f2eaefb594/psycopg_binary-3.2.12-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:15e226f0d8af85cc8b2435b2e9bc6f0d40febc79eef76cf20fceac4d902a6a7b", size = 4091468, upload-time = "2025-10-26T00:41:56.02Z" }, - { url = "https://files.pythonhosted.org/packages/27/b1/50fe132cf4dbdc8cb2ef3bb26abba7f7f74c9b77ca2ff0dbdcefdc885fdb/psycopg_binary-3.2.12-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:f6ba1fe35fd215813dac4544a5ffc90f13713b29dd26e9e5be97ba53482bf6d6", size = 4643368, upload-time = "2025-10-26T00:42:37.575Z" }, - { url = "https://files.pythonhosted.org/packages/7d/96/c18f871210764fa79b83f652ef7a3d3453113ffc6184a44bab161bca3b03/psycopg_binary-3.2.12-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:26b5927b5880b396231ab6190ee5c8fb47ed3f459b53504ed5419faaf16d3bfb", size = 4742543, upload-time = "2025-10-26T00:43:19.215Z" }, - { url = "https://files.pythonhosted.org/packages/c9/b4/c7d17b2d89cf3c691a9bbec3b924ee032029482453cb06e6a26fe3db5d69/psycopg_binary-3.2.12-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:ab02b7d138768fd6ac4230e45b073f7b9fd688d88c04f24c34df4a250a94d066", size = 4426928, upload-time = "2025-10-26T00:43:58.182Z" }, - { url = "https://files.pythonhosted.org/packages/e5/f7/2b5d1956a050ebc613000094b136bdd34f3f24343d799fd43ce2a18bb9de/psycopg_binary-3.2.12-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:acb1811219a4144539f0baee224a11a2aa323a739c349799cf52f191eb87bc52", size = 3885454, upload-time = "2025-10-26T00:44:32.683Z" }, - { url = "https://files.pythonhosted.org/packages/02/3b/f40dcfcadbcd9d33436765f9ae46968fba6458942e17a26f97adc795b2a0/psycopg_binary-3.2.12-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:356b4266e5cde7b5bbcf232f549dedf7fbed4983daa556042bdec397780e044d", size = 3566808, upload-time = "2025-10-26T00:45:03.127Z" }, - { url = "https://files.pythonhosted.org/packages/b8/45/0ecca1fa59affe4fee361007052dbb57987d334d755b925c58ca051d46a0/psycopg_binary-3.2.12-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:489b154891f1c995355adeb1077ee3479e9c9bada721b93270c20243bbad6542", size = 3609838, upload-time = "2025-10-26T00:45:33.667Z" }, - { url = "https://files.pythonhosted.org/packages/ec/1b/bd5066606e69a76c2bf0add40dbe1f4502ed1751bff7af78a29b3d1da39b/psycopg_binary-3.2.12-cp39-cp39-win_amd64.whl", hash = "sha256:294f08b014f08dfd3c9b72408f5e1a0fd187bd86d7a85ead651e32dbd47aa038", size = 2919565, upload-time = "2025-10-26T00:45:58.481Z" }, ] [[package]] @@ -5227,27 +4083,12 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/62/1e/a94a8d635fa3ce4cfc7f506003548d0a2447ae76fd5ca53932970fe3053f/pyasn1-0.4.8-py2.py3-none-any.whl", hash = "sha256:39c7e2ec30515947ff4e87fb6f456dfc6e84857d34be479c9d4a4ba4bf46aa5d", size = 77145, upload-time = "2019-11-16T17:27:11.07Z" }, ] -[[package]] -name = "pybtex" -version = "0.25.1" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "importlib-metadata", marker = "python_full_version < '3.10'" }, - { name = "latexcodec", marker = "python_full_version < '3.10'" }, - { name = "pyyaml", marker = "python_full_version < '3.10'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/5f/bc/c2be05ca72f8c103670e983df8be26d1e288bc6556f487fa8cccaa27779f/pybtex-0.25.1.tar.gz", hash = "sha256:9eaf90267c7e83e225af89fea65c370afbf65f458220d3946a9e3049e1eca491", size = 406157, upload-time = "2025-06-26T13:27:41.903Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/25/68/ceb5d6679baa326261f5d3e5113d9cfed6efef2810afd9f18bffb8ed312b/pybtex-0.25.1-py2.py3-none-any.whl", hash = "sha256:9053b0d619409a0a83f38abad5d9921de5f7b3ede00742beafcd9f10ad0d8c5c", size = 127437, upload-time = "2025-06-26T13:27:43.585Z" }, -] - [[package]] name = "pycifrw" version = "4.4.6" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "numpy", version = "2.0.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.10.*'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, { name = "numpy", version = "2.3.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, { name = "ply" }, ] @@ -5372,19 +4213,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/5c/96/5fb7d8c3c17bc8c62fdb031c47d77a1af698f1d7a406b0f79aaa1338f9ad/pydantic_core-2.41.5-cp314-cp314t-win32.whl", hash = "sha256:b4ececa40ac28afa90871c2cc2b9ffd2ff0bf749380fbdf57d165fd23da353aa", size = 1988906, upload-time = "2025-11-04T13:41:56.606Z" }, { url = "https://files.pythonhosted.org/packages/22/ed/182129d83032702912c2e2d8bbe33c036f342cc735737064668585dac28f/pydantic_core-2.41.5-cp314-cp314t-win_amd64.whl", hash = "sha256:80aa89cad80b32a912a65332f64a4450ed00966111b6615ca6816153d3585a8c", size = 1981607, upload-time = "2025-11-04T13:41:58.889Z" }, { url = "https://files.pythonhosted.org/packages/9f/ed/068e41660b832bb0b1aa5b58011dea2a3fe0ba7861ff38c4d4904c1c1a99/pydantic_core-2.41.5-cp314-cp314t-win_arm64.whl", hash = "sha256:35b44f37a3199f771c3eaa53051bc8a70cd7b54f333531c59e29fd4db5d15008", size = 1974769, upload-time = "2025-11-04T13:42:01.186Z" }, - { url = "https://files.pythonhosted.org/packages/54/db/160dffb57ed9a3705c4cbcbff0ac03bdae45f1ca7d58ab74645550df3fbd/pydantic_core-2.41.5-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:8bfeaf8735be79f225f3fefab7f941c712aaca36f1128c9d7e2352ee1aa87bdf", size = 2107999, upload-time = "2025-11-04T13:42:03.885Z" }, - { url = "https://files.pythonhosted.org/packages/a3/7d/88e7de946f60d9263cc84819f32513520b85c0f8322f9b8f6e4afc938383/pydantic_core-2.41.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:346285d28e4c8017da95144c7f3acd42740d637ff41946af5ce6e5e420502dd5", size = 1929745, upload-time = "2025-11-04T13:42:06.075Z" }, - { url = "https://files.pythonhosted.org/packages/d5/c2/aef51e5b283780e85e99ff19db0f05842d2d4a8a8cd15e63b0280029b08f/pydantic_core-2.41.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a75dafbf87d6276ddc5b2bf6fae5254e3d0876b626eb24969a574fff9149ee5d", size = 1920220, upload-time = "2025-11-04T13:42:08.457Z" }, - { url = "https://files.pythonhosted.org/packages/c7/97/492ab10f9ac8695cd76b2fdb24e9e61f394051df71594e9bcc891c9f586e/pydantic_core-2.41.5-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7b93a4d08587e2b7e7882de461e82b6ed76d9026ce91ca7915e740ecc7855f60", size = 2067296, upload-time = "2025-11-04T13:42:10.817Z" }, - { url = "https://files.pythonhosted.org/packages/ec/23/984149650e5269c59a2a4c41d234a9570adc68ab29981825cfaf4cfad8f4/pydantic_core-2.41.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e8465ab91a4bd96d36dde3263f06caa6a8a6019e4113f24dc753d79a8b3a3f82", size = 2231548, upload-time = "2025-11-04T13:42:13.843Z" }, - { url = "https://files.pythonhosted.org/packages/71/0c/85bcbb885b9732c28bec67a222dbed5ed2d77baee1f8bba2002e8cd00c5c/pydantic_core-2.41.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:299e0a22e7ae2b85c1a57f104538b2656e8ab1873511fd718a1c1c6f149b77b5", size = 2362571, upload-time = "2025-11-04T13:42:16.208Z" }, - { url = "https://files.pythonhosted.org/packages/c0/4a/412d2048be12c334003e9b823a3fa3d038e46cc2d64dd8aab50b31b65499/pydantic_core-2.41.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:707625ef0983fcfb461acfaf14de2067c5942c6bb0f3b4c99158bed6fedd3cf3", size = 2068175, upload-time = "2025-11-04T13:42:18.911Z" }, - { url = "https://files.pythonhosted.org/packages/73/f4/c58b6a776b502d0a5540ad02e232514285513572060f0d78f7832ca3c98b/pydantic_core-2.41.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f41eb9797986d6ebac5e8edff36d5cef9de40def462311b3eb3eeded1431e425", size = 2177203, upload-time = "2025-11-04T13:42:22.578Z" }, - { url = "https://files.pythonhosted.org/packages/ed/ae/f06ea4c7e7a9eead3d165e7623cd2ea0cb788e277e4f935af63fc98fa4e6/pydantic_core-2.41.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0384e2e1021894b1ff5a786dbf94771e2986ebe2869533874d7e43bc79c6f504", size = 2148191, upload-time = "2025-11-04T13:42:24.89Z" }, - { url = "https://files.pythonhosted.org/packages/c1/57/25a11dcdc656bf5f8b05902c3c2934ac3ea296257cc4a3f79a6319e61856/pydantic_core-2.41.5-cp39-cp39-musllinux_1_1_armv7l.whl", hash = "sha256:f0cd744688278965817fd0839c4a4116add48d23890d468bc436f78beb28abf5", size = 2343907, upload-time = "2025-11-04T13:42:27.683Z" }, - { url = "https://files.pythonhosted.org/packages/96/82/e33d5f4933d7a03327c0c43c65d575e5919d4974ffc026bc917a5f7b9f61/pydantic_core-2.41.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:753e230374206729bf0a807954bcc6c150d3743928a73faffee51ac6557a03c3", size = 2322174, upload-time = "2025-11-04T13:42:30.776Z" }, - { url = "https://files.pythonhosted.org/packages/81/45/4091be67ce9f469e81656f880f3506f6a5624121ec5eb3eab37d7581897d/pydantic_core-2.41.5-cp39-cp39-win32.whl", hash = "sha256:873e0d5b4fb9b89ef7c2d2a963ea7d02879d9da0da8d9d4933dee8ee86a8b460", size = 1990353, upload-time = "2025-11-04T13:42:33.111Z" }, - { url = "https://files.pythonhosted.org/packages/44/8a/a98aede18db6e9cd5d66bcacd8a409fcf8134204cdede2e7de35c5a2c5ef/pydantic_core-2.41.5-cp39-cp39-win_amd64.whl", hash = "sha256:e4f4a984405e91527a0d62649ee21138f8e3d0ef103be488c1dc11a80d7f184b", size = 2015698, upload-time = "2025-11-04T13:42:35.484Z" }, { url = "https://files.pythonhosted.org/packages/11/72/90fda5ee3b97e51c494938a4a44c3a35a9c96c19bba12372fb9c634d6f57/pydantic_core-2.41.5-graalpy311-graalpy242_311_native-macosx_10_12_x86_64.whl", hash = "sha256:b96d5f26b05d03cc60f11a7761a5ded1741da411e7fe0909e27a5e6a0cb7b034", size = 2115441, upload-time = "2025-11-04T13:42:39.557Z" }, { url = "https://files.pythonhosted.org/packages/1f/53/8942f884fa33f50794f119012dc6a1a02ac43a56407adaac20463df8e98f/pydantic_core-2.41.5-graalpy311-graalpy242_311_native-macosx_11_0_arm64.whl", hash = "sha256:634e8609e89ceecea15e2d61bc9ac3718caaaa71963717bf3c8f38bfde64242c", size = 1930291, upload-time = "2025-11-04T13:42:42.169Z" }, { url = "https://files.pythonhosted.org/packages/79/c8/ecb9ed9cd942bce09fc888ee960b52654fbdbede4ba6c2d6e0d3b1d8b49c/pydantic_core-2.41.5-graalpy311-graalpy242_311_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:93e8740d7503eb008aa2df04d3b9735f845d43ae845e6dcd2be0b55a2da43cd2", size = 1948632, upload-time = "2025-11-04T13:42:44.564Z" }, @@ -5439,88 +4267,32 @@ 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 = "pymatgen" -version = "2024.8.9" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.10'", -] -dependencies = [ - { name = "joblib", marker = "python_full_version < '3.10'" }, - { name = "matplotlib", version = "3.9.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "monty", marker = "python_full_version < '3.10'" }, - { name = "networkx", version = "3.2.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "numpy", version = "2.0.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "palettable", marker = "python_full_version < '3.10'" }, - { name = "pandas", marker = "python_full_version < '3.10'" }, - { name = "plotly", marker = "python_full_version < '3.10'" }, - { name = "pybtex", marker = "python_full_version < '3.10'" }, - { name = "requests", marker = "python_full_version < '3.10'" }, - { name = "ruamel-yaml", marker = "python_full_version < '3.10'" }, - { name = "scipy", version = "1.13.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "spglib", marker = "python_full_version < '3.10'" }, - { name = "sympy", marker = "python_full_version < '3.10'" }, - { name = "tabulate", marker = "python_full_version < '3.10'" }, - { name = "tqdm", marker = "python_full_version < '3.10'" }, - { name = "uncertainties", marker = "python_full_version < '3.10'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/33/48/881cd58a2f431476239e5d026c1b6c6a6dedc5bf3d03b6e69c638a136af9/pymatgen-2024.8.9.tar.gz", hash = "sha256:e0ca35d41d5964d063519cd6b8db54c411ec8469382df172fa177ec2a6b3a70a", size = 3076458, upload-time = "2024-08-09T17:04:26.34Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/2a/89/3d311237636d15a49f44d6b5cd81968e9aee69ca2cf2226669501b8f23fe/pymatgen-2024.8.9-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:001007a2a8703e01d435e639034c6524c0e4c533da981c53f8c70897bfcc9800", size = 3606214, upload-time = "2024-08-09T17:17:55.626Z" }, - { url = "https://files.pythonhosted.org/packages/e4/94/8d5f9488e487e6c5e27c9a5c60680cec579ccdc0d7e2757dc0cd55e2725e/pymatgen-2024.8.9-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:22a9ba0bd71b802c2431f1960b598c13e930a39e7cf4c7bedc034e0e40156586", size = 4910109, upload-time = "2024-08-09T17:18:00.185Z" }, - { url = "https://files.pythonhosted.org/packages/10/1b/fa7efe73c4d1f3d97803b26eb1d801446eae8d881bd1b2e5fcf9ad4b39e2/pymatgen-2024.8.9-cp310-cp310-win32.whl", hash = "sha256:21cfe64f8089b23e479e5b817066e1e8189cab88fd3a3af109ebb28f4fd4381f", size = 3560472, upload-time = "2024-08-09T17:18:03.403Z" }, - { url = "https://files.pythonhosted.org/packages/46/8a/a3f5d1b826fe2da3bea69762520671fd3ca1d18ef2f0c914ce32c7d84f1d/pymatgen-2024.8.9-cp310-cp310-win_amd64.whl", hash = "sha256:991754462cfbe128bf15bd031a8e315c9bf36091b4acd678d965079e54a36721", size = 3602606, upload-time = "2024-08-09T17:18:06.319Z" }, - { url = "https://files.pythonhosted.org/packages/7c/cb/df4c133504a6e257c0237180f6e9dd2301e4f64d7b8a8291a18679f3eab1/pymatgen-2024.8.9-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7e7360d155dcb68c4b98c07c47188529433bf4a58ded53006065aab95211c461", size = 3579238, upload-time = "2024-08-09T17:04:18.56Z" }, - { url = "https://files.pythonhosted.org/packages/0c/49/a782638eac8f96973e72587bcf4bf1b86267bff170ebb2990ce170a0ad20/pymatgen-2024.8.9-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c69a0e1f9fbbb108315289104dbf1a784078da5b595a9819c7fc9ae0fad8ff8b", size = 5029170, upload-time = "2024-08-09T17:18:09.293Z" }, - { url = "https://files.pythonhosted.org/packages/44/1c/4d47f07baca6c7d087d291c8f3d0d6d9993915cfab89b2214988c6ae863f/pymatgen-2024.8.9-cp311-cp311-win32.whl", hash = "sha256:ae426264b46282ad2a9317f26f5d3403ec5e7099eb4b4b0055e8696b6e7b3782", size = 3559679, upload-time = "2024-08-09T17:18:12.452Z" }, - { url = "https://files.pythonhosted.org/packages/12/10/4bfe08cf7e96c737265822458c6c4f5fcd5981e343dcb8c3605f1099a16d/pymatgen-2024.8.9-cp311-cp311-win_amd64.whl", hash = "sha256:02c194fde76c16e191b7f3a9c494bc3c3ced25dfcf28efed3618a73f13d38267", size = 3603050, upload-time = "2024-08-09T17:18:14.773Z" }, - { url = "https://files.pythonhosted.org/packages/7f/9e/b8b1014e4a81ffb048a905e71efde31a4512ea4ae00421356ea62c52ad2d/pymatgen-2024.8.9-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d9e6717115d1b0f0473a99cf81dab34abbbaf17b683e0c614846b66558237cc5", size = 3607393, upload-time = "2024-08-09T17:18:17.539Z" }, - { url = "https://files.pythonhosted.org/packages/1d/d6/2d5daba8b45560c378f6b21d4f6e1c58838284e26daac541fa3d2f66eaeb/pymatgen-2024.8.9-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:193333f9251aadf8b78d80bab69dc7e510d3c0dc0381c752f3721901fdd15c91", size = 5017836, upload-time = "2024-08-09T17:18:20.864Z" }, - { url = "https://files.pythonhosted.org/packages/ae/24/6c5f85ea921382aabe99956925bd0624fc09e405d2b8bc009f7510daa041/pymatgen-2024.8.9-cp312-cp312-win32.whl", hash = "sha256:757e0a219ad6f597b5017e4ea65eb6c1850ea60afef779e7614fa77450219d92", size = 3560607, upload-time = "2024-08-09T17:18:23.586Z" }, - { url = "https://files.pythonhosted.org/packages/55/be/b1bb01d987c2d6e160bfbe6a03631d3e258ec0306d0c1c755c77d8de9609/pymatgen-2024.8.9-cp312-cp312-win_amd64.whl", hash = "sha256:9415878b831beb517008bd19642351ab8d60fe2caf64700d941bcf097d988344", size = 3602891, upload-time = "2024-08-09T17:18:27.513Z" }, - { url = "https://files.pythonhosted.org/packages/23/2c/571f891c41c64582060e26297e08570181820a57a707f5df1644d28d2a10/pymatgen-2024.8.9-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d60867c2407b22f31e8650eb99b6c3683fab4407b7adc0862c319d1b1f1876cb", size = 3607968, upload-time = "2024-08-09T17:18:33.377Z" }, - { url = "https://files.pythonhosted.org/packages/5d/db/c4012401c41031a709219bcf1e681b30609085d70d9a886a6ecd60a13254/pymatgen-2024.8.9-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ebc7550744acb34c5a28d173b8c65e3e1103412e410d64534e5cb3e2879c60f0", size = 4918337, upload-time = "2024-08-09T17:18:37.587Z" }, - { url = "https://files.pythonhosted.org/packages/90/23/1192e5e9262bdc1482ebdfadc9a75cc9ffddb4ca552a5a5b25a56ef898d0/pymatgen-2024.8.9-cp39-cp39-win32.whl", hash = "sha256:b0c54bf9d21d4f59a2f85634906c72401f35efee8467ecf9df78ae2b09cd336b", size = 3562321, upload-time = "2024-08-09T17:18:41.17Z" }, - { url = "https://files.pythonhosted.org/packages/bc/94/4b2e921c946ab5ab20af5ca4373581636d1c4020a5fc12e5c2ceaeef8765/pymatgen-2024.8.9-cp39-cp39-win_amd64.whl", hash = "sha256:d558d1b37b917ae3b05b5ddf5652bdb672f3ee8d20778e28e7dd3fcc10121a5f", size = 3604328, upload-time = "2024-08-09T17:18:44.987Z" }, -] - [[package]] name = "pymatgen" version = "2025.10.7" source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.14' and sys_platform == 'win32'", - "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32'", - "python_full_version == '3.11.*' and sys_platform == 'win32'", - "python_full_version >= '3.14' and sys_platform != 'win32'", - "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'win32'", - "python_full_version == '3.11.*' and sys_platform != 'win32'", - "python_full_version == '3.10.*' and sys_platform == 'win32'", - "python_full_version == '3.10.*' and sys_platform != 'win32'", -] dependencies = [ - { name = "bibtexparser", marker = "python_full_version >= '3.10'" }, - { name = "joblib", marker = "python_full_version >= '3.10'" }, - { name = "matplotlib", version = "3.10.7", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, - { name = "monty", marker = "python_full_version >= '3.10'" }, - { name = "networkx", version = "3.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.10.*'" }, + { name = "bibtexparser" }, + { name = "joblib" }, + { name = "matplotlib" }, + { name = "monty" }, + { name = "networkx", version = "3.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, { name = "networkx", version = "3.5", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.10.*'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, { name = "numpy", version = "2.3.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, - { name = "orjson", marker = "python_full_version >= '3.10'" }, - { name = "palettable", marker = "python_full_version >= '3.10'" }, - { name = "pandas", marker = "python_full_version >= '3.10'" }, - { name = "plotly", marker = "python_full_version >= '3.10'" }, - { name = "requests", marker = "python_full_version >= '3.10'" }, - { name = "ruamel-yaml", marker = "python_full_version >= '3.10'" }, - { name = "scipy", version = "1.15.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.10.*'" }, + { name = "orjson" }, + { name = "palettable" }, + { name = "pandas" }, + { name = "plotly" }, + { name = "requests" }, + { name = "ruamel-yaml" }, + { name = "scipy", version = "1.15.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, { name = "scipy", version = "1.16.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, - { name = "spglib", marker = "python_full_version >= '3.10'" }, - { name = "sympy", marker = "python_full_version >= '3.10'" }, - { name = "tabulate", marker = "python_full_version >= '3.10'" }, - { name = "tqdm", marker = "python_full_version >= '3.10'" }, - { name = "uncertainties", marker = "python_full_version >= '3.10'" }, + { name = "spglib" }, + { name = "sympy" }, + { name = "tabulate" }, + { name = "tqdm" }, + { name = "uncertainties" }, ] sdist = { url = "https://files.pythonhosted.org/packages/c0/6c/3e7f3f6884d3797a847a8d2441b165bb3a09979a0e40e328d2aca4fa933e/pymatgen-2025.10.7.tar.gz", hash = "sha256:11b4b4dcc847c377088984e58802d155b79237a53d586eb75f32370ed8fafda2", size = 3147848, upload-time = "2025-10-07T13:44:33.704Z" } wheels = [ @@ -5624,8 +4396,7 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "colorama", marker = "sys_platform == 'win32'" }, { name = "exceptiongroup", marker = "python_full_version < '3.11'" }, - { name = "iniconfig", version = "2.1.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "iniconfig", version = "2.3.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "iniconfig" }, { name = "packaging" }, { name = "pluggy" }, { name = "tomli", marker = "python_full_version < '3.11'" }, @@ -5665,8 +4436,7 @@ name = "pytest-cov" version = "7.0.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "coverage", version = "7.10.7", source = { registry = "https://pypi.org/simple" }, extra = ["toml"], marker = "python_full_version < '3.10'" }, - { name = "coverage", version = "7.11.3", source = { registry = "https://pypi.org/simple" }, extra = ["toml"], marker = "python_full_version >= '3.10'" }, + { name = "coverage", extra = ["toml"] }, { name = "pluggy" }, { name = "pytest" }, ] @@ -5755,9 +4525,6 @@ wheels = [ name = "python-json-logger" version = "4.0.0" source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "typing-extensions", marker = "python_full_version < '3.10'" }, -] sdist = { url = "https://files.pythonhosted.org/packages/29/bf/eca6a3d43db1dae7070f70e160ab20b807627ba953663ba07928cdd3dc58/python_json_logger-4.0.0.tar.gz", hash = "sha256:f58e68eb46e1faed27e0f574a55a0455eecd7b8a5b88b85a784519ba3cff047f", size = 17683, upload-time = "2025-10-06T04:15:18.984Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/51/e5/fecf13f06e5e5f67e8837d777d1bc43fac0ed2b77a676804df5c34744727/python_json_logger-4.0.0-py3-none-any.whl", hash = "sha256:af09c9daf6a813aa4cc7180395f50f2a9e5fa056034c9953aec92e381c5ba1e2", size = 15548, upload-time = "2025-10-06T04:15:17.553Z" }, @@ -5813,9 +4580,6 @@ wheels = [ { 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" }, - { url = "https://files.pythonhosted.org/packages/59/42/b86689aac0cdaee7ae1c58d464b0ff04ca909c19bb6502d4973cdd9f9544/pywin32-311-cp39-cp39-win32.whl", hash = "sha256:aba8f82d551a942cb20d4a83413ccbac30790b50efb89a75e4f586ac0bb8056b", size = 8760837, upload-time = "2025-07-14T20:12:59.59Z" }, - { url = "https://files.pythonhosted.org/packages/9f/8a/1403d0353f8c5a2f0829d2b1c4becbf9da2f0a4d040886404fc4a5431e4d/pywin32-311-cp39-cp39-win_amd64.whl", hash = "sha256:e0c4cfb0621281fe40387df582097fd796e80430597cb9944f0ae70447bacd91", size = 9590187, upload-time = "2025-07-14T20:13:01.419Z" }, - { url = "https://files.pythonhosted.org/packages/60/22/e0e8d802f124772cec9c75430b01a212f86f9de7546bda715e54140d5aeb/pywin32-311-cp39-cp39-win_arm64.whl", hash = "sha256:62ea666235135fee79bb154e695f3ff67370afefd71bd7fea7512fc70ef31e3d", size = 8778162, upload-time = "2025-07-14T20:13:03.544Z" }, ] [[package]] @@ -5831,7 +4595,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/cb/44/cbae12ecf6f4fa4129c36871fd09c6bef4f98d5f625ecefb5e2449765508/pywinpty-3.0.2-cp313-cp313t-win_amd64.whl", hash = "sha256:663383ecfab7fc382cc97ea5c4f7f0bb32c2f889259855df6ea34e5df42d305b", size = 2049874, upload-time = "2025-10-03T21:18:53.923Z" }, { url = "https://files.pythonhosted.org/packages/ca/15/f12c6055e2d7a617d4d5820e8ac4ceaff849da4cb124640ef5116a230771/pywinpty-3.0.2-cp314-cp314-win_amd64.whl", hash = "sha256:28297cecc37bee9f24d8889e47231972d6e9e84f7b668909de54f36ca785029a", size = 2050386, upload-time = "2025-10-03T21:18:50.477Z" }, { url = "https://files.pythonhosted.org/packages/de/24/c6907c5bb06043df98ad6a0a0ff5db2e0affcecbc3b15c42404393a3f72a/pywinpty-3.0.2-cp314-cp314t-win_amd64.whl", hash = "sha256:34b55ae9a1b671fe3eae071d86618110538e8eaad18fcb1531c0830b91a82767", size = 2049834, upload-time = "2025-10-03T21:19:25.688Z" }, - { url = "https://files.pythonhosted.org/packages/d3/ea/5cc069afc60f6dd5bc99b3e51fb8b219f10bcf5674882fc5d6dd2186d3aa/pywinpty-3.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:3962daf801bc38dd4de872108c424b5338c9a46c6efca5761854cd66370a9022", size = 2052447, upload-time = "2025-10-03T21:18:51.457Z" }, ] [[package]] @@ -5905,15 +4668,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/da/92/1446574745d74df0c92e6aa4a7b0b3130706a4142b2d1a5869f2eaa423c6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:16249ee61e95f858e83976573de0f5b2893b3677ba71c9dd36b9cf8be9ac6d65", size = 829923, upload-time = "2025-09-25T21:32:54.537Z" }, { url = "https://files.pythonhosted.org/packages/f0/7a/1c7270340330e575b92f397352af856a8c06f230aa3e76f86b39d01b416a/pyyaml-6.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4ad1906908f2f5ae4e5a8ddfce73c320c2a1429ec52eafd27138b7f1cbe341c9", size = 174062, upload-time = "2025-09-25T21:32:55.767Z" }, { url = "https://files.pythonhosted.org/packages/f1/12/de94a39c2ef588c7e6455cfbe7343d3b2dc9d6b6b2f40c4c6565744c873d/pyyaml-6.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:ebc55a14a21cb14062aa4162f906cd962b28e2e9ea38f9b4391244cd8de4ae0b", size = 149341, upload-time = "2025-09-25T21:32:56.828Z" }, - { url = "https://files.pythonhosted.org/packages/9f/62/67fc8e68a75f738c9200422bf65693fb79a4cd0dc5b23310e5202e978090/pyyaml-6.0.3-cp39-cp39-macosx_10_13_x86_64.whl", hash = "sha256:b865addae83924361678b652338317d1bd7e79b1f4596f96b96c77a5a34b34da", size = 184450, upload-time = "2025-09-25T21:33:00.618Z" }, - { url = "https://files.pythonhosted.org/packages/ae/92/861f152ce87c452b11b9d0977952259aa7df792d71c1053365cc7b09cc08/pyyaml-6.0.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c3355370a2c156cffb25e876646f149d5d68f5e0a3ce86a5084dd0b64a994917", size = 174319, upload-time = "2025-09-25T21:33:02.086Z" }, - { url = "https://files.pythonhosted.org/packages/d0/cd/f0cfc8c74f8a030017a2b9c771b7f47e5dd702c3e28e5b2071374bda2948/pyyaml-6.0.3-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3c5677e12444c15717b902a5798264fa7909e41153cdf9ef7ad571b704a63dd9", size = 737631, upload-time = "2025-09-25T21:33:03.25Z" }, - { url = "https://files.pythonhosted.org/packages/ef/b2/18f2bd28cd2055a79a46c9b0895c0b3d987ce40ee471cecf58a1a0199805/pyyaml-6.0.3-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5ed875a24292240029e4483f9d4a4b8a1ae08843b9c54f43fcc11e404532a8a5", size = 836795, upload-time = "2025-09-25T21:33:05.014Z" }, - { url = "https://files.pythonhosted.org/packages/73/b9/793686b2d54b531203c160ef12bec60228a0109c79bae6c1277961026770/pyyaml-6.0.3-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0150219816b6a1fa26fb4699fb7daa9caf09eb1999f3b70fb6e786805e80375a", size = 750767, upload-time = "2025-09-25T21:33:06.398Z" }, - { url = "https://files.pythonhosted.org/packages/a9/86/a137b39a611def2ed78b0e66ce2fe13ee701a07c07aebe55c340ed2a050e/pyyaml-6.0.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:fa160448684b4e94d80416c0fa4aac48967a969efe22931448d853ada8baf926", size = 727982, upload-time = "2025-09-25T21:33:08.708Z" }, - { url = "https://files.pythonhosted.org/packages/dd/62/71c27c94f457cf4418ef8ccc71735324c549f7e3ea9d34aba50874563561/pyyaml-6.0.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:27c0abcb4a5dac13684a37f76e701e054692a9b2d3064b70f5e4eb54810553d7", size = 755677, upload-time = "2025-09-25T21:33:09.876Z" }, - { url = "https://files.pythonhosted.org/packages/29/3d/6f5e0d58bd924fb0d06c3a6bad00effbdae2de5adb5cda5648006ffbd8d3/pyyaml-6.0.3-cp39-cp39-win32.whl", hash = "sha256:1ebe39cb5fc479422b83de611d14e2c0d3bb2a18bbcb01f229ab3cfbd8fee7a0", size = 142592, upload-time = "2025-09-25T21:33:10.983Z" }, - { url = "https://files.pythonhosted.org/packages/f0/0c/25113e0b5e103d7f1490c0e947e303fe4a696c10b501dea7a9f49d4e876c/pyyaml-6.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:2e71d11abed7344e42a8849600193d15b6def118602c4c176f748e4583246007", size = 158777, upload-time = "2025-09-25T21:33:15.55Z" }, ] [[package]] @@ -5977,16 +4731,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/c4/59/a5f38970f9bf07cee96128de79590bb354917914a9be11272cfc7ff26af0/pyzmq-27.1.0-cp314-cp314t-win32.whl", hash = "sha256:1f0b2a577fd770aa6f053211a55d1c47901f4d537389a034c690291485e5fe92", size = 587472, upload-time = "2025-09-08T23:08:58.18Z" }, { url = "https://files.pythonhosted.org/packages/70/d8/78b1bad170f93fcf5e3536e70e8fadac55030002275c9a29e8f5719185de/pyzmq-27.1.0-cp314-cp314t-win_amd64.whl", hash = "sha256:19c9468ae0437f8074af379e986c5d3d7d7bfe033506af442e8c879732bedbe0", size = 661401, upload-time = "2025-09-08T23:08:59.802Z" }, { url = "https://files.pythonhosted.org/packages/81/d6/4bfbb40c9a0b42fc53c7cf442f6385db70b40f74a783130c5d0a5aa62228/pyzmq-27.1.0-cp314-cp314t-win_arm64.whl", hash = "sha256:dc5dbf68a7857b59473f7df42650c621d7e8923fb03fa74a526890f4d33cc4d7", size = 575170, upload-time = "2025-09-08T23:09:01.418Z" }, - { url = "https://files.pythonhosted.org/packages/ac/4e/782eb6df91b6a9d9afa96c2dcfc5cac62562a68eb62a02210101f886014d/pyzmq-27.1.0-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:96c71c32fff75957db6ae33cd961439f386505c6e6b377370af9b24a1ef9eafb", size = 1330426, upload-time = "2025-09-08T23:09:21.03Z" }, - { url = "https://files.pythonhosted.org/packages/8d/ca/2b8693d06b1db4e0c084871e4c9d7842b561d0a6ff9d780640f5e3e9eb55/pyzmq-27.1.0-cp39-cp39-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:49d3980544447f6bd2968b6ac913ab963a49dcaa2d4a2990041f16057b04c429", size = 906559, upload-time = "2025-09-08T23:09:22.983Z" }, - { url = "https://files.pythonhosted.org/packages/6a/b3/b99b39e2cfdcebd512959780e4d299447fd7f46010b1d88d63324e2481ec/pyzmq-27.1.0-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:849ca054d81aa1c175c49484afaaa5db0622092b5eccb2055f9f3bb8f703782d", size = 863816, upload-time = "2025-09-08T23:09:24.556Z" }, - { url = "https://files.pythonhosted.org/packages/61/b2/018fa8e8eefb34a625b1a45e2effcbc9885645b22cdd0a68283f758351e7/pyzmq-27.1.0-cp39-cp39-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3970778e74cb7f85934d2b926b9900e92bfe597e62267d7499acc39c9c28e345", size = 666735, upload-time = "2025-09-08T23:09:26.297Z" }, - { url = "https://files.pythonhosted.org/packages/01/05/8ae778f7cd7c94030731ae2305e6a38f3a333b6825f56c0c03f2134ccf1b/pyzmq-27.1.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:da96ecdcf7d3919c3be2de91a8c513c186f6762aa6cf7c01087ed74fad7f0968", size = 1655425, upload-time = "2025-09-08T23:09:28.172Z" }, - { url = "https://files.pythonhosted.org/packages/ad/ad/d69478a97a3f3142f9dbbbd9daa4fcf42541913a85567c36d4cfc19b2218/pyzmq-27.1.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:9541c444cfe1b1c0156c5c86ece2bb926c7079a18e7b47b0b1b3b1b875e5d098", size = 2033729, upload-time = "2025-09-08T23:09:30.097Z" }, - { url = "https://files.pythonhosted.org/packages/9a/6d/e3c6ad05bc1cddd25094e66cc15ae8924e15c67e231e93ed2955c401007e/pyzmq-27.1.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:e30a74a39b93e2e1591b58eb1acef4902be27c957a8720b0e368f579b82dc22f", size = 1891803, upload-time = "2025-09-08T23:09:31.875Z" }, - { url = "https://files.pythonhosted.org/packages/7f/a7/97e8be0daaca157511563160b67a13d4fe76b195e3fa6873cb554ad46be3/pyzmq-27.1.0-cp39-cp39-win32.whl", hash = "sha256:b1267823d72d1e40701dcba7edc45fd17f71be1285557b7fe668887150a14b78", size = 567627, upload-time = "2025-09-08T23:09:33.98Z" }, - { url = "https://files.pythonhosted.org/packages/5c/91/70bbf3a7c5b04c904261ef5ba224d8a76315f6c23454251bf5f55573a8a1/pyzmq-27.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:0c996ded912812a2fcd7ab6574f4ad3edc27cb6510349431e4930d4196ade7db", size = 632315, upload-time = "2025-09-08T23:09:36.097Z" }, - { url = "https://files.pythonhosted.org/packages/cc/b5/a4173a83c7fd37f6bdb5a800ea338bc25603284e9ef8681377cec006ede4/pyzmq-27.1.0-cp39-cp39-win_arm64.whl", hash = "sha256:346e9ba4198177a07e7706050f35d733e08c1c1f8ceacd5eb6389d653579ffbc", size = 559833, upload-time = "2025-09-08T23:09:38.183Z" }, { url = "https://files.pythonhosted.org/packages/f3/81/a65e71c1552f74dec9dff91d95bafb6e0d33338a8dfefbc88aa562a20c92/pyzmq-27.1.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:c17e03cbc9312bee223864f1a2b13a99522e0dc9f7c5df0177cd45210ac286e6", size = 836266, upload-time = "2025-09-08T23:09:40.048Z" }, { url = "https://files.pythonhosted.org/packages/58/ed/0202ca350f4f2b69faa95c6d931e3c05c3a397c184cacb84cb4f8f42f287/pyzmq-27.1.0-pp310-pypy310_pp73-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:f328d01128373cb6763823b2b4e7f73bdf767834268c565151eacb3b7a392f90", size = 800206, upload-time = "2025-09-08T23:09:41.902Z" }, { url = "https://files.pythonhosted.org/packages/47/42/1ff831fa87fe8f0a840ddb399054ca0009605d820e2b44ea43114f5459f4/pyzmq-27.1.0-pp310-pypy310_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9c1790386614232e1b3a40a958454bdd42c6d1811837b15ddbb052a032a43f62", size = 567747, upload-time = "2025-09-08T23:09:43.741Z" }, @@ -5997,48 +4741,16 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/49/0e/3f0d0d335c6b3abb9b7b723776d0b21fa7f3a6c819a0db6097059aada160/pyzmq-27.1.0-pp311-pypy311_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:53b40f8ae006f2734ee7608d59ed661419f087521edbfc2149c3932e9c14808c", size = 567747, upload-time = "2025-09-08T23:09:52.698Z" }, { url = "https://files.pythonhosted.org/packages/a1/cf/f2b3784d536250ffd4be70e049f3b60981235d70c6e8ce7e3ef21e1adb25/pyzmq-27.1.0-pp311-pypy311_pp73-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f605d884e7c8be8fe1aa94e0a783bf3f591b84c24e4bc4f3e7564c82ac25e271", size = 747371, upload-time = "2025-09-08T23:09:54.563Z" }, { url = "https://files.pythonhosted.org/packages/01/1b/5dbe84eefc86f48473947e2f41711aded97eecef1231f4558f1f02713c12/pyzmq-27.1.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:c9f7f6e13dff2e44a6afeaf2cf54cee5929ad64afaf4d40b50f93c58fc687355", size = 544862, upload-time = "2025-09-08T23:09:56.509Z" }, - { url = "https://files.pythonhosted.org/packages/57/f4/c2e978cf6b833708bad7d6396c3a20c19750585a1775af3ff13c435e1912/pyzmq-27.1.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:722ea791aa233ac0a819fc2c475e1292c76930b31f1d828cb61073e2fe5e208f", size = 836257, upload-time = "2025-09-08T23:10:07.635Z" }, - { url = "https://files.pythonhosted.org/packages/5f/5f/4e10c7f57a4c92ab0fbb2396297aa8d618e6f5b9b8f8e9756d56f3e6fc52/pyzmq-27.1.0-pp39-pypy39_pp73-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:01f9437501886d3a1dd4b02ef59fb8cc384fa718ce066d52f175ee49dd5b7ed8", size = 800203, upload-time = "2025-09-08T23:10:09.436Z" }, - { url = "https://files.pythonhosted.org/packages/19/72/a74a007cd636f903448c6ab66628104b1fc5f2ba018733d5eabb94a0a6fb/pyzmq-27.1.0-pp39-pypy39_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:4a19387a3dddcc762bfd2f570d14e2395b2c9701329b266f83dd87a2b3cbd381", size = 758756, upload-time = "2025-09-08T23:10:11.733Z" }, - { url = "https://files.pythonhosted.org/packages/a9/d4/30c25b91f2b4786026372f5ef454134d7f576fcf4ac58539ad7dd5de4762/pyzmq-27.1.0-pp39-pypy39_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4c618fbcd069e3a29dcd221739cacde52edcc681f041907867e0f5cc7e85f172", size = 567742, upload-time = "2025-09-08T23:10:14.732Z" }, - { url = "https://files.pythonhosted.org/packages/92/aa/ee86edad943438cd0316964020c4b6d09854414f9f945f8e289ea6fcc019/pyzmq-27.1.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:ff8d114d14ac671d88c89b9224c63d6c4e5a613fe8acd5594ce53d752a3aafe9", size = 544857, upload-time = "2025-09-08T23:10:16.431Z" }, -] - -[[package]] -name = "referencing" -version = "0.36.2" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.10'", -] -dependencies = [ - { name = "attrs", marker = "python_full_version < '3.10'" }, - { name = "rpds-py", version = "0.27.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "typing-extensions", marker = "python_full_version < '3.10'" }, -] -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 = "referencing" version = "0.37.0" source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.14' and sys_platform == 'win32'", - "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32'", - "python_full_version == '3.11.*' and sys_platform == 'win32'", - "python_full_version >= '3.14' and sys_platform != 'win32'", - "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'win32'", - "python_full_version == '3.11.*' and sys_platform != 'win32'", - "python_full_version == '3.10.*' and sys_platform == 'win32'", - "python_full_version == '3.10.*' and sys_platform != 'win32'", -] dependencies = [ - { name = "attrs", marker = "python_full_version >= '3.10'" }, - { name = "rpds-py", version = "0.28.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, - { name = "typing-extensions", marker = "python_full_version >= '3.10' and python_full_version < '3.13'" }, + { name = "attrs" }, + { name = "rpds-py" }, + { name = "typing-extensions", marker = "python_full_version < '3.13'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/22/f5/df4e9027acead3ecc63e50fe1e36aca1523e1719559c499951bb4b53188f/referencing-0.37.0.tar.gz", hash = "sha256:44aefc3142c5b842538163acb373e24cce6632bd54bdb01b21ad5863489f50d8", size = 78036, upload-time = "2025-10-13T15:30:48.871Z" } wheels = [ @@ -6106,185 +4818,10 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/25/7a/b0178788f8dc6cafce37a212c99565fa1fe7872c70c6c9c1e1a372d9d88f/rich-14.2.0-py3-none-any.whl", hash = "sha256:76bc51fe2e57d2b1be1f96c524b890b816e334ab4c1e45888799bfaab0021edd", size = 243393, upload-time = "2025-10-09T14:16:51.245Z" }, ] -[[package]] -name = "rpds-py" -version = "0.27.1" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.10'", -] -sdist = { url = "https://files.pythonhosted.org/packages/e9/dd/2c0cbe774744272b0ae725f44032c77bdcab6e8bcf544bffa3b6e70c8dba/rpds_py-0.27.1.tar.gz", hash = "sha256:26a1c73171d10b7acccbded82bf6a586ab8203601e565badc74bbbf8bc5a10f8", size = 27479, upload-time = "2025-08-27T12:16:36.024Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/a5/ed/3aef893e2dd30e77e35d20d4ddb45ca459db59cead748cad9796ad479411/rpds_py-0.27.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:68afeec26d42ab3b47e541b272166a0b4400313946871cba3ed3a4fc0cab1cef", size = 371606, upload-time = "2025-08-27T12:12:25.189Z" }, - { url = "https://files.pythonhosted.org/packages/6d/82/9818b443e5d3eb4c83c3994561387f116aae9833b35c484474769c4a8faf/rpds_py-0.27.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:74e5b2f7bb6fa38b1b10546d27acbacf2a022a8b5543efb06cfebc72a59c85be", size = 353452, upload-time = "2025-08-27T12:12:27.433Z" }, - { url = "https://files.pythonhosted.org/packages/99/c7/d2a110ffaaa397fc6793a83c7bd3545d9ab22658b7cdff05a24a4535cc45/rpds_py-0.27.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9024de74731df54546fab0bfbcdb49fae19159ecaecfc8f37c18d2c7e2c0bd61", size = 381519, upload-time = "2025-08-27T12:12:28.719Z" }, - { url = "https://files.pythonhosted.org/packages/5a/bc/e89581d1f9d1be7d0247eaef602566869fdc0d084008ba139e27e775366c/rpds_py-0.27.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:31d3ebadefcd73b73928ed0b2fd696f7fefda8629229f81929ac9c1854d0cffb", size = 394424, upload-time = "2025-08-27T12:12:30.207Z" }, - { url = "https://files.pythonhosted.org/packages/ac/2e/36a6861f797530e74bb6ed53495f8741f1ef95939eed01d761e73d559067/rpds_py-0.27.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b2e7f8f169d775dd9092a1743768d771f1d1300453ddfe6325ae3ab5332b4657", size = 523467, upload-time = "2025-08-27T12:12:31.808Z" }, - { url = "https://files.pythonhosted.org/packages/c4/59/c1bc2be32564fa499f988f0a5c6505c2f4746ef96e58e4d7de5cf923d77e/rpds_py-0.27.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3d905d16f77eb6ab2e324e09bfa277b4c8e5e6b8a78a3e7ff8f3cdf773b4c013", size = 402660, upload-time = "2025-08-27T12:12:33.444Z" }, - { url = "https://files.pythonhosted.org/packages/0a/ec/ef8bf895f0628dd0a59e54d81caed6891663cb9c54a0f4bb7da918cb88cf/rpds_py-0.27.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:50c946f048209e6362e22576baea09193809f87687a95a8db24e5fbdb307b93a", size = 384062, upload-time = "2025-08-27T12:12:34.857Z" }, - { url = "https://files.pythonhosted.org/packages/69/f7/f47ff154be8d9a5e691c083a920bba89cef88d5247c241c10b9898f595a1/rpds_py-0.27.1-cp310-cp310-manylinux_2_31_riscv64.whl", hash = "sha256:3deab27804d65cd8289eb814c2c0e807c4b9d9916c9225e363cb0cf875eb67c1", size = 401289, upload-time = "2025-08-27T12:12:36.085Z" }, - { url = "https://files.pythonhosted.org/packages/3b/d9/ca410363efd0615814ae579f6829cafb39225cd63e5ea5ed1404cb345293/rpds_py-0.27.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8b61097f7488de4be8244c89915da8ed212832ccf1e7c7753a25a394bf9b1f10", size = 417718, upload-time = "2025-08-27T12:12:37.401Z" }, - { url = "https://files.pythonhosted.org/packages/e3/a0/8cb5c2ff38340f221cc067cc093d1270e10658ba4e8d263df923daa18e86/rpds_py-0.27.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:8a3f29aba6e2d7d90528d3c792555a93497fe6538aa65eb675b44505be747808", size = 558333, upload-time = "2025-08-27T12:12:38.672Z" }, - { url = "https://files.pythonhosted.org/packages/6f/8c/1b0de79177c5d5103843774ce12b84caa7164dfc6cd66378768d37db11bf/rpds_py-0.27.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:dd6cd0485b7d347304067153a6dc1d73f7d4fd995a396ef32a24d24b8ac63ac8", size = 589127, upload-time = "2025-08-27T12:12:41.48Z" }, - { url = "https://files.pythonhosted.org/packages/c8/5e/26abb098d5e01266b0f3a2488d299d19ccc26849735d9d2b95c39397e945/rpds_py-0.27.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:6f4461bf931108c9fa226ffb0e257c1b18dc2d44cd72b125bec50ee0ab1248a9", size = 554899, upload-time = "2025-08-27T12:12:42.925Z" }, - { url = "https://files.pythonhosted.org/packages/de/41/905cc90ced13550db017f8f20c6d8e8470066c5738ba480d7ba63e3d136b/rpds_py-0.27.1-cp310-cp310-win32.whl", hash = "sha256:ee5422d7fb21f6a00c1901bf6559c49fee13a5159d0288320737bbf6585bd3e4", size = 217450, upload-time = "2025-08-27T12:12:44.813Z" }, - { url = "https://files.pythonhosted.org/packages/75/3d/6bef47b0e253616ccdf67c283e25f2d16e18ccddd38f92af81d5a3420206/rpds_py-0.27.1-cp310-cp310-win_amd64.whl", hash = "sha256:3e039aabf6d5f83c745d5f9a0a381d031e9ed871967c0a5c38d201aca41f3ba1", size = 228447, upload-time = "2025-08-27T12:12:46.204Z" }, - { url = "https://files.pythonhosted.org/packages/b5/c1/7907329fbef97cbd49db6f7303893bd1dd5a4a3eae415839ffdfb0762cae/rpds_py-0.27.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:be898f271f851f68b318872ce6ebebbc62f303b654e43bf72683dbdc25b7c881", size = 371063, upload-time = "2025-08-27T12:12:47.856Z" }, - { url = "https://files.pythonhosted.org/packages/11/94/2aab4bc86228bcf7c48760990273653a4900de89c7537ffe1b0d6097ed39/rpds_py-0.27.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:62ac3d4e3e07b58ee0ddecd71d6ce3b1637de2d373501412df395a0ec5f9beb5", size = 353210, upload-time = "2025-08-27T12:12:49.187Z" }, - { url = "https://files.pythonhosted.org/packages/3a/57/f5eb3ecf434342f4f1a46009530e93fd201a0b5b83379034ebdb1d7c1a58/rpds_py-0.27.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4708c5c0ceb2d034f9991623631d3d23cb16e65c83736ea020cdbe28d57c0a0e", size = 381636, upload-time = "2025-08-27T12:12:50.492Z" }, - { url = "https://files.pythonhosted.org/packages/ae/f4/ef95c5945e2ceb5119571b184dd5a1cc4b8541bbdf67461998cfeac9cb1e/rpds_py-0.27.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:abfa1171a9952d2e0002aba2ad3780820b00cc3d9c98c6630f2e93271501f66c", size = 394341, upload-time = "2025-08-27T12:12:52.024Z" }, - { url = "https://files.pythonhosted.org/packages/5a/7e/4bd610754bf492d398b61725eb9598ddd5eb86b07d7d9483dbcd810e20bc/rpds_py-0.27.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4b507d19f817ebaca79574b16eb2ae412e5c0835542c93fe9983f1e432aca195", size = 523428, upload-time = "2025-08-27T12:12:53.779Z" }, - { url = "https://files.pythonhosted.org/packages/9f/e5/059b9f65a8c9149361a8b75094864ab83b94718344db511fd6117936ed2a/rpds_py-0.27.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:168b025f8fd8d8d10957405f3fdcef3dc20f5982d398f90851f4abc58c566c52", size = 402923, upload-time = "2025-08-27T12:12:55.15Z" }, - { url = "https://files.pythonhosted.org/packages/f5/48/64cabb7daced2968dd08e8a1b7988bf358d7bd5bcd5dc89a652f4668543c/rpds_py-0.27.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cb56c6210ef77caa58e16e8c17d35c63fe3f5b60fd9ba9d424470c3400bcf9ed", size = 384094, upload-time = "2025-08-27T12:12:57.194Z" }, - { url = "https://files.pythonhosted.org/packages/ae/e1/dc9094d6ff566bff87add8a510c89b9e158ad2ecd97ee26e677da29a9e1b/rpds_py-0.27.1-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:d252f2d8ca0195faa707f8eb9368955760880b2b42a8ee16d382bf5dd807f89a", size = 401093, upload-time = "2025-08-27T12:12:58.985Z" }, - { url = "https://files.pythonhosted.org/packages/37/8e/ac8577e3ecdd5593e283d46907d7011618994e1d7ab992711ae0f78b9937/rpds_py-0.27.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6e5e54da1e74b91dbc7996b56640f79b195d5925c2b78efaa8c5d53e1d88edde", size = 417969, upload-time = "2025-08-27T12:13:00.367Z" }, - { url = "https://files.pythonhosted.org/packages/66/6d/87507430a8f74a93556fe55c6485ba9c259949a853ce407b1e23fea5ba31/rpds_py-0.27.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:ffce0481cc6e95e5b3f0a47ee17ffbd234399e6d532f394c8dce320c3b089c21", size = 558302, upload-time = "2025-08-27T12:13:01.737Z" }, - { url = "https://files.pythonhosted.org/packages/3a/bb/1db4781ce1dda3eecc735e3152659a27b90a02ca62bfeea17aee45cc0fbc/rpds_py-0.27.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:a205fdfe55c90c2cd8e540ca9ceba65cbe6629b443bc05db1f590a3db8189ff9", size = 589259, upload-time = "2025-08-27T12:13:03.127Z" }, - { url = "https://files.pythonhosted.org/packages/7b/0e/ae1c8943d11a814d01b482e1f8da903f88047a962dff9bbdadf3bd6e6fd1/rpds_py-0.27.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:689fb5200a749db0415b092972e8eba85847c23885c8543a8b0f5c009b1a5948", size = 554983, upload-time = "2025-08-27T12:13:04.516Z" }, - { url = "https://files.pythonhosted.org/packages/b2/d5/0b2a55415931db4f112bdab072443ff76131b5ac4f4dc98d10d2d357eb03/rpds_py-0.27.1-cp311-cp311-win32.whl", hash = "sha256:3182af66048c00a075010bc7f4860f33913528a4b6fc09094a6e7598e462fe39", size = 217154, upload-time = "2025-08-27T12:13:06.278Z" }, - { url = "https://files.pythonhosted.org/packages/24/75/3b7ffe0d50dc86a6a964af0d1cc3a4a2cdf437cb7b099a4747bbb96d1819/rpds_py-0.27.1-cp311-cp311-win_amd64.whl", hash = "sha256:b4938466c6b257b2f5c4ff98acd8128ec36b5059e5c8f8372d79316b1c36bb15", size = 228627, upload-time = "2025-08-27T12:13:07.625Z" }, - { url = "https://files.pythonhosted.org/packages/8d/3f/4fd04c32abc02c710f09a72a30c9a55ea3cc154ef8099078fd50a0596f8e/rpds_py-0.27.1-cp311-cp311-win_arm64.whl", hash = "sha256:2f57af9b4d0793e53266ee4325535a31ba48e2f875da81a9177c9926dfa60746", size = 220998, upload-time = "2025-08-27T12:13:08.972Z" }, - { url = "https://files.pythonhosted.org/packages/bd/fe/38de28dee5df58b8198c743fe2bea0c785c6d40941b9950bac4cdb71a014/rpds_py-0.27.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:ae2775c1973e3c30316892737b91f9283f9908e3cc7625b9331271eaaed7dc90", size = 361887, upload-time = "2025-08-27T12:13:10.233Z" }, - { url = "https://files.pythonhosted.org/packages/7c/9a/4b6c7eedc7dd90986bf0fab6ea2a091ec11c01b15f8ba0a14d3f80450468/rpds_py-0.27.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2643400120f55c8a96f7c9d858f7be0c88d383cd4653ae2cf0d0c88f668073e5", size = 345795, upload-time = "2025-08-27T12:13:11.65Z" }, - { url = "https://files.pythonhosted.org/packages/6f/0e/e650e1b81922847a09cca820237b0edee69416a01268b7754d506ade11ad/rpds_py-0.27.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:16323f674c089b0360674a4abd28d5042947d54ba620f72514d69be4ff64845e", size = 385121, upload-time = "2025-08-27T12:13:13.008Z" }, - { url = "https://files.pythonhosted.org/packages/1b/ea/b306067a712988e2bff00dcc7c8f31d26c29b6d5931b461aa4b60a013e33/rpds_py-0.27.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9a1f4814b65eacac94a00fc9a526e3fdafd78e439469644032032d0d63de4881", size = 398976, upload-time = "2025-08-27T12:13:14.368Z" }, - { url = "https://files.pythonhosted.org/packages/2c/0a/26dc43c8840cb8fe239fe12dbc8d8de40f2365e838f3d395835dde72f0e5/rpds_py-0.27.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7ba32c16b064267b22f1850a34051121d423b6f7338a12b9459550eb2096e7ec", size = 525953, upload-time = "2025-08-27T12:13:15.774Z" }, - { url = "https://files.pythonhosted.org/packages/22/14/c85e8127b573aaf3a0cbd7fbb8c9c99e735a4a02180c84da2a463b766e9e/rpds_py-0.27.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e5c20f33fd10485b80f65e800bbe5f6785af510b9f4056c5a3c612ebc83ba6cb", size = 407915, upload-time = "2025-08-27T12:13:17.379Z" }, - { url = "https://files.pythonhosted.org/packages/ed/7b/8f4fee9ba1fb5ec856eb22d725a4efa3deb47f769597c809e03578b0f9d9/rpds_py-0.27.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:466bfe65bd932da36ff279ddd92de56b042f2266d752719beb97b08526268ec5", size = 386883, upload-time = "2025-08-27T12:13:18.704Z" }, - { url = "https://files.pythonhosted.org/packages/86/47/28fa6d60f8b74fcdceba81b272f8d9836ac0340570f68f5df6b41838547b/rpds_py-0.27.1-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:41e532bbdcb57c92ba3be62c42e9f096431b4cf478da9bc3bc6ce5c38ab7ba7a", size = 405699, upload-time = "2025-08-27T12:13:20.089Z" }, - { url = "https://files.pythonhosted.org/packages/d0/fd/c5987b5e054548df56953a21fe2ebed51fc1ec7c8f24fd41c067b68c4a0a/rpds_py-0.27.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f149826d742b406579466283769a8ea448eed82a789af0ed17b0cd5770433444", size = 423713, upload-time = "2025-08-27T12:13:21.436Z" }, - { url = "https://files.pythonhosted.org/packages/ac/ba/3c4978b54a73ed19a7d74531be37a8bcc542d917c770e14d372b8daea186/rpds_py-0.27.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:80c60cfb5310677bd67cb1e85a1e8eb52e12529545441b43e6f14d90b878775a", size = 562324, upload-time = "2025-08-27T12:13:22.789Z" }, - { url = "https://files.pythonhosted.org/packages/b5/6c/6943a91768fec16db09a42b08644b960cff540c66aab89b74be6d4a144ba/rpds_py-0.27.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:7ee6521b9baf06085f62ba9c7a3e5becffbc32480d2f1b351559c001c38ce4c1", size = 593646, upload-time = "2025-08-27T12:13:24.122Z" }, - { url = "https://files.pythonhosted.org/packages/11/73/9d7a8f4be5f4396f011a6bb7a19fe26303a0dac9064462f5651ced2f572f/rpds_py-0.27.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a512c8263249a9d68cac08b05dd59d2b3f2061d99b322813cbcc14c3c7421998", size = 558137, upload-time = "2025-08-27T12:13:25.557Z" }, - { url = "https://files.pythonhosted.org/packages/6e/96/6772cbfa0e2485bcceef8071de7821f81aeac8bb45fbfd5542a3e8108165/rpds_py-0.27.1-cp312-cp312-win32.whl", hash = "sha256:819064fa048ba01b6dadc5116f3ac48610435ac9a0058bbde98e569f9e785c39", size = 221343, upload-time = "2025-08-27T12:13:26.967Z" }, - { url = "https://files.pythonhosted.org/packages/67/b6/c82f0faa9af1c6a64669f73a17ee0eeef25aff30bb9a1c318509efe45d84/rpds_py-0.27.1-cp312-cp312-win_amd64.whl", hash = "sha256:d9199717881f13c32c4046a15f024971a3b78ad4ea029e8da6b86e5aa9cf4594", size = 232497, upload-time = "2025-08-27T12:13:28.326Z" }, - { url = "https://files.pythonhosted.org/packages/e1/96/2817b44bd2ed11aebacc9251da03689d56109b9aba5e311297b6902136e2/rpds_py-0.27.1-cp312-cp312-win_arm64.whl", hash = "sha256:33aa65b97826a0e885ef6e278fbd934e98cdcfed80b63946025f01e2f5b29502", size = 222790, upload-time = "2025-08-27T12:13:29.71Z" }, - { url = "https://files.pythonhosted.org/packages/cc/77/610aeee8d41e39080c7e14afa5387138e3c9fa9756ab893d09d99e7d8e98/rpds_py-0.27.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:e4b9fcfbc021633863a37e92571d6f91851fa656f0180246e84cbd8b3f6b329b", size = 361741, upload-time = "2025-08-27T12:13:31.039Z" }, - { url = "https://files.pythonhosted.org/packages/3a/fc/c43765f201c6a1c60be2043cbdb664013def52460a4c7adace89d6682bf4/rpds_py-0.27.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:1441811a96eadca93c517d08df75de45e5ffe68aa3089924f963c782c4b898cf", size = 345574, upload-time = "2025-08-27T12:13:32.902Z" }, - { url = "https://files.pythonhosted.org/packages/20/42/ee2b2ca114294cd9847d0ef9c26d2b0851b2e7e00bf14cc4c0b581df0fc3/rpds_py-0.27.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:55266dafa22e672f5a4f65019015f90336ed31c6383bd53f5e7826d21a0e0b83", size = 385051, upload-time = "2025-08-27T12:13:34.228Z" }, - { url = "https://files.pythonhosted.org/packages/fd/e8/1e430fe311e4799e02e2d1af7c765f024e95e17d651612425b226705f910/rpds_py-0.27.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d78827d7ac08627ea2c8e02c9e5b41180ea5ea1f747e9db0915e3adf36b62dcf", size = 398395, upload-time = "2025-08-27T12:13:36.132Z" }, - { url = "https://files.pythonhosted.org/packages/82/95/9dc227d441ff2670651c27a739acb2535ccaf8b351a88d78c088965e5996/rpds_py-0.27.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae92443798a40a92dc5f0b01d8a7c93adde0c4dc965310a29ae7c64d72b9fad2", size = 524334, upload-time = "2025-08-27T12:13:37.562Z" }, - { url = "https://files.pythonhosted.org/packages/87/01/a670c232f401d9ad461d9a332aa4080cd3cb1d1df18213dbd0d2a6a7ab51/rpds_py-0.27.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c46c9dd2403b66a2a3b9720ec4b74d4ab49d4fabf9f03dfdce2d42af913fe8d0", size = 407691, upload-time = "2025-08-27T12:13:38.94Z" }, - { url = "https://files.pythonhosted.org/packages/03/36/0a14aebbaa26fe7fab4780c76f2239e76cc95a0090bdb25e31d95c492fcd/rpds_py-0.27.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2efe4eb1d01b7f5f1939f4ef30ecea6c6b3521eec451fb93191bf84b2a522418", size = 386868, upload-time = "2025-08-27T12:13:40.192Z" }, - { url = "https://files.pythonhosted.org/packages/3b/03/8c897fb8b5347ff6c1cc31239b9611c5bf79d78c984430887a353e1409a1/rpds_py-0.27.1-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:15d3b4d83582d10c601f481eca29c3f138d44c92187d197aff663a269197c02d", size = 405469, upload-time = "2025-08-27T12:13:41.496Z" }, - { url = "https://files.pythonhosted.org/packages/da/07/88c60edc2df74850d496d78a1fdcdc7b54360a7f610a4d50008309d41b94/rpds_py-0.27.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4ed2e16abbc982a169d30d1a420274a709949e2cbdef119fe2ec9d870b42f274", size = 422125, upload-time = "2025-08-27T12:13:42.802Z" }, - { url = "https://files.pythonhosted.org/packages/6b/86/5f4c707603e41b05f191a749984f390dabcbc467cf833769b47bf14ba04f/rpds_py-0.27.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a75f305c9b013289121ec0f1181931975df78738cdf650093e6b86d74aa7d8dd", size = 562341, upload-time = "2025-08-27T12:13:44.472Z" }, - { url = "https://files.pythonhosted.org/packages/b2/92/3c0cb2492094e3cd9baf9e49bbb7befeceb584ea0c1a8b5939dca4da12e5/rpds_py-0.27.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:67ce7620704745881a3d4b0ada80ab4d99df390838839921f99e63c474f82cf2", size = 592511, upload-time = "2025-08-27T12:13:45.898Z" }, - { url = "https://files.pythonhosted.org/packages/10/bb/82e64fbb0047c46a168faa28d0d45a7851cd0582f850b966811d30f67ad8/rpds_py-0.27.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9d992ac10eb86d9b6f369647b6a3f412fc0075cfd5d799530e84d335e440a002", size = 557736, upload-time = "2025-08-27T12:13:47.408Z" }, - { url = "https://files.pythonhosted.org/packages/00/95/3c863973d409210da7fb41958172c6b7dbe7fc34e04d3cc1f10bb85e979f/rpds_py-0.27.1-cp313-cp313-win32.whl", hash = "sha256:4f75e4bd8ab8db624e02c8e2fc4063021b58becdbe6df793a8111d9343aec1e3", size = 221462, upload-time = "2025-08-27T12:13:48.742Z" }, - { url = "https://files.pythonhosted.org/packages/ce/2c/5867b14a81dc217b56d95a9f2a40fdbc56a1ab0181b80132beeecbd4b2d6/rpds_py-0.27.1-cp313-cp313-win_amd64.whl", hash = "sha256:f9025faafc62ed0b75a53e541895ca272815bec18abe2249ff6501c8f2e12b83", size = 232034, upload-time = "2025-08-27T12:13:50.11Z" }, - { url = "https://files.pythonhosted.org/packages/c7/78/3958f3f018c01923823f1e47f1cc338e398814b92d83cd278364446fac66/rpds_py-0.27.1-cp313-cp313-win_arm64.whl", hash = "sha256:ed10dc32829e7d222b7d3b93136d25a406ba9788f6a7ebf6809092da1f4d279d", size = 222392, upload-time = "2025-08-27T12:13:52.587Z" }, - { url = "https://files.pythonhosted.org/packages/01/76/1cdf1f91aed5c3a7bf2eba1f1c4e4d6f57832d73003919a20118870ea659/rpds_py-0.27.1-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:92022bbbad0d4426e616815b16bc4127f83c9a74940e1ccf3cfe0b387aba0228", size = 358355, upload-time = "2025-08-27T12:13:54.012Z" }, - { url = "https://files.pythonhosted.org/packages/c3/6f/bf142541229374287604caf3bb2a4ae17f0a580798fd72d3b009b532db4e/rpds_py-0.27.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:47162fdab9407ec3f160805ac3e154df042e577dd53341745fc7fb3f625e6d92", size = 342138, upload-time = "2025-08-27T12:13:55.791Z" }, - { url = "https://files.pythonhosted.org/packages/1a/77/355b1c041d6be40886c44ff5e798b4e2769e497b790f0f7fd1e78d17e9a8/rpds_py-0.27.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb89bec23fddc489e5d78b550a7b773557c9ab58b7946154a10a6f7a214a48b2", size = 380247, upload-time = "2025-08-27T12:13:57.683Z" }, - { url = "https://files.pythonhosted.org/packages/d6/a4/d9cef5c3946ea271ce2243c51481971cd6e34f21925af2783dd17b26e815/rpds_py-0.27.1-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e48af21883ded2b3e9eb48cb7880ad8598b31ab752ff3be6457001d78f416723", size = 390699, upload-time = "2025-08-27T12:13:59.137Z" }, - { url = "https://files.pythonhosted.org/packages/3a/06/005106a7b8c6c1a7e91b73169e49870f4af5256119d34a361ae5240a0c1d/rpds_py-0.27.1-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6f5b7bd8e219ed50299e58551a410b64daafb5017d54bbe822e003856f06a802", size = 521852, upload-time = "2025-08-27T12:14:00.583Z" }, - { url = "https://files.pythonhosted.org/packages/e5/3e/50fb1dac0948e17a02eb05c24510a8fe12d5ce8561c6b7b7d1339ab7ab9c/rpds_py-0.27.1-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:08f1e20bccf73b08d12d804d6e1c22ca5530e71659e6673bce31a6bb71c1e73f", size = 402582, upload-time = "2025-08-27T12:14:02.034Z" }, - { url = "https://files.pythonhosted.org/packages/cb/b0/f4e224090dc5b0ec15f31a02d746ab24101dd430847c4d99123798661bfc/rpds_py-0.27.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0dc5dceeaefcc96dc192e3a80bbe1d6c410c469e97bdd47494a7d930987f18b2", size = 384126, upload-time = "2025-08-27T12:14:03.437Z" }, - { url = "https://files.pythonhosted.org/packages/54/77/ac339d5f82b6afff1df8f0fe0d2145cc827992cb5f8eeb90fc9f31ef7a63/rpds_py-0.27.1-cp313-cp313t-manylinux_2_31_riscv64.whl", hash = "sha256:d76f9cc8665acdc0c9177043746775aa7babbf479b5520b78ae4002d889f5c21", size = 399486, upload-time = "2025-08-27T12:14:05.443Z" }, - { url = "https://files.pythonhosted.org/packages/d6/29/3e1c255eee6ac358c056a57d6d6869baa00a62fa32eea5ee0632039c50a3/rpds_py-0.27.1-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:134fae0e36022edad8290a6661edf40c023562964efea0cc0ec7f5d392d2aaef", size = 414832, upload-time = "2025-08-27T12:14:06.902Z" }, - { url = "https://files.pythonhosted.org/packages/3f/db/6d498b844342deb3fa1d030598db93937a9964fcf5cb4da4feb5f17be34b/rpds_py-0.27.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:eb11a4f1b2b63337cfd3b4d110af778a59aae51c81d195768e353d8b52f88081", size = 557249, upload-time = "2025-08-27T12:14:08.37Z" }, - { url = "https://files.pythonhosted.org/packages/60/f3/690dd38e2310b6f68858a331399b4d6dbb9132c3e8ef8b4333b96caf403d/rpds_py-0.27.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:13e608ac9f50a0ed4faec0e90ece76ae33b34c0e8656e3dceb9a7db994c692cd", size = 587356, upload-time = "2025-08-27T12:14:10.034Z" }, - { url = "https://files.pythonhosted.org/packages/86/e3/84507781cccd0145f35b1dc32c72675200c5ce8d5b30f813e49424ef68fc/rpds_py-0.27.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:dd2135527aa40f061350c3f8f89da2644de26cd73e4de458e79606384f4f68e7", size = 555300, upload-time = "2025-08-27T12:14:11.783Z" }, - { url = "https://files.pythonhosted.org/packages/e5/ee/375469849e6b429b3516206b4580a79e9ef3eb12920ddbd4492b56eaacbe/rpds_py-0.27.1-cp313-cp313t-win32.whl", hash = "sha256:3020724ade63fe320a972e2ffd93b5623227e684315adce194941167fee02688", size = 216714, upload-time = "2025-08-27T12:14:13.629Z" }, - { url = "https://files.pythonhosted.org/packages/21/87/3fc94e47c9bd0742660e84706c311a860dcae4374cf4a03c477e23ce605a/rpds_py-0.27.1-cp313-cp313t-win_amd64.whl", hash = "sha256:8ee50c3e41739886606388ba3ab3ee2aae9f35fb23f833091833255a31740797", size = 228943, upload-time = "2025-08-27T12:14:14.937Z" }, - { url = "https://files.pythonhosted.org/packages/70/36/b6e6066520a07cf029d385de869729a895917b411e777ab1cde878100a1d/rpds_py-0.27.1-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:acb9aafccaae278f449d9c713b64a9e68662e7799dbd5859e2c6b3c67b56d334", size = 362472, upload-time = "2025-08-27T12:14:16.333Z" }, - { url = "https://files.pythonhosted.org/packages/af/07/b4646032e0dcec0df9c73a3bd52f63bc6c5f9cda992f06bd0e73fe3fbebd/rpds_py-0.27.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:b7fb801aa7f845ddf601c49630deeeccde7ce10065561d92729bfe81bd21fb33", size = 345676, upload-time = "2025-08-27T12:14:17.764Z" }, - { url = "https://files.pythonhosted.org/packages/b0/16/2f1003ee5d0af4bcb13c0cf894957984c32a6751ed7206db2aee7379a55e/rpds_py-0.27.1-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fe0dd05afb46597b9a2e11c351e5e4283c741237e7f617ffb3252780cca9336a", size = 385313, upload-time = "2025-08-27T12:14:19.829Z" }, - { url = "https://files.pythonhosted.org/packages/05/cd/7eb6dd7b232e7f2654d03fa07f1414d7dfc980e82ba71e40a7c46fd95484/rpds_py-0.27.1-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b6dfb0e058adb12d8b1d1b25f686e94ffa65d9995a5157afe99743bf7369d62b", size = 399080, upload-time = "2025-08-27T12:14:21.531Z" }, - { url = "https://files.pythonhosted.org/packages/20/51/5829afd5000ec1cb60f304711f02572d619040aa3ec033d8226817d1e571/rpds_py-0.27.1-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ed090ccd235f6fa8bb5861684567f0a83e04f52dfc2e5c05f2e4b1309fcf85e7", size = 523868, upload-time = "2025-08-27T12:14:23.485Z" }, - { url = "https://files.pythonhosted.org/packages/05/2c/30eebca20d5db95720ab4d2faec1b5e4c1025c473f703738c371241476a2/rpds_py-0.27.1-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bf876e79763eecf3e7356f157540d6a093cef395b65514f17a356f62af6cc136", size = 408750, upload-time = "2025-08-27T12:14:24.924Z" }, - { url = "https://files.pythonhosted.org/packages/90/1a/cdb5083f043597c4d4276eae4e4c70c55ab5accec078da8611f24575a367/rpds_py-0.27.1-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:12ed005216a51b1d6e2b02a7bd31885fe317e45897de81d86dcce7d74618ffff", size = 387688, upload-time = "2025-08-27T12:14:27.537Z" }, - { url = "https://files.pythonhosted.org/packages/7c/92/cf786a15320e173f945d205ab31585cc43969743bb1a48b6888f7a2b0a2d/rpds_py-0.27.1-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:ee4308f409a40e50593c7e3bb8cbe0b4d4c66d1674a316324f0c2f5383b486f9", size = 407225, upload-time = "2025-08-27T12:14:28.981Z" }, - { url = "https://files.pythonhosted.org/packages/33/5c/85ee16df5b65063ef26017bef33096557a4c83fbe56218ac7cd8c235f16d/rpds_py-0.27.1-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0b08d152555acf1f455154d498ca855618c1378ec810646fcd7c76416ac6dc60", size = 423361, upload-time = "2025-08-27T12:14:30.469Z" }, - { url = "https://files.pythonhosted.org/packages/4b/8e/1c2741307fcabd1a334ecf008e92c4f47bb6f848712cf15c923becfe82bb/rpds_py-0.27.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:dce51c828941973a5684d458214d3a36fcd28da3e1875d659388f4f9f12cc33e", size = 562493, upload-time = "2025-08-27T12:14:31.987Z" }, - { url = "https://files.pythonhosted.org/packages/04/03/5159321baae9b2222442a70c1f988cbbd66b9be0675dd3936461269be360/rpds_py-0.27.1-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:c1476d6f29eb81aa4151c9a31219b03f1f798dc43d8af1250a870735516a1212", size = 592623, upload-time = "2025-08-27T12:14:33.543Z" }, - { url = "https://files.pythonhosted.org/packages/ff/39/c09fd1ad28b85bc1d4554a8710233c9f4cefd03d7717a1b8fbfd171d1167/rpds_py-0.27.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:3ce0cac322b0d69b63c9cdb895ee1b65805ec9ffad37639f291dd79467bee675", size = 558800, upload-time = "2025-08-27T12:14:35.436Z" }, - { url = "https://files.pythonhosted.org/packages/c5/d6/99228e6bbcf4baa764b18258f519a9035131d91b538d4e0e294313462a98/rpds_py-0.27.1-cp314-cp314-win32.whl", hash = "sha256:dfbfac137d2a3d0725758cd141f878bf4329ba25e34979797c89474a89a8a3a3", size = 221943, upload-time = "2025-08-27T12:14:36.898Z" }, - { url = "https://files.pythonhosted.org/packages/be/07/c802bc6b8e95be83b79bdf23d1aa61d68324cb1006e245d6c58e959e314d/rpds_py-0.27.1-cp314-cp314-win_amd64.whl", hash = "sha256:a6e57b0abfe7cc513450fcf529eb486b6e4d3f8aee83e92eb5f1ef848218d456", size = 233739, upload-time = "2025-08-27T12:14:38.386Z" }, - { url = "https://files.pythonhosted.org/packages/c8/89/3e1b1c16d4c2d547c5717377a8df99aee8099ff050f87c45cb4d5fa70891/rpds_py-0.27.1-cp314-cp314-win_arm64.whl", hash = "sha256:faf8d146f3d476abfee026c4ae3bdd9ca14236ae4e4c310cbd1cf75ba33d24a3", size = 223120, upload-time = "2025-08-27T12:14:39.82Z" }, - { url = "https://files.pythonhosted.org/packages/62/7e/dc7931dc2fa4a6e46b2a4fa744a9fe5c548efd70e0ba74f40b39fa4a8c10/rpds_py-0.27.1-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:ba81d2b56b6d4911ce735aad0a1d4495e808b8ee4dc58715998741a26874e7c2", size = 358944, upload-time = "2025-08-27T12:14:41.199Z" }, - { url = "https://files.pythonhosted.org/packages/e6/22/4af76ac4e9f336bfb1a5f240d18a33c6b2fcaadb7472ac7680576512b49a/rpds_py-0.27.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:84f7d509870098de0e864cad0102711c1e24e9b1a50ee713b65928adb22269e4", size = 342283, upload-time = "2025-08-27T12:14:42.699Z" }, - { url = "https://files.pythonhosted.org/packages/1c/15/2a7c619b3c2272ea9feb9ade67a45c40b3eeb500d503ad4c28c395dc51b4/rpds_py-0.27.1-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a9e960fc78fecd1100539f14132425e1d5fe44ecb9239f8f27f079962021523e", size = 380320, upload-time = "2025-08-27T12:14:44.157Z" }, - { url = "https://files.pythonhosted.org/packages/a2/7d/4c6d243ba4a3057e994bb5bedd01b5c963c12fe38dde707a52acdb3849e7/rpds_py-0.27.1-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:62f85b665cedab1a503747617393573995dac4600ff51869d69ad2f39eb5e817", size = 391760, upload-time = "2025-08-27T12:14:45.845Z" }, - { url = "https://files.pythonhosted.org/packages/b4/71/b19401a909b83bcd67f90221330bc1ef11bc486fe4e04c24388d28a618ae/rpds_py-0.27.1-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fed467af29776f6556250c9ed85ea5a4dd121ab56a5f8b206e3e7a4c551e48ec", size = 522476, upload-time = "2025-08-27T12:14:47.364Z" }, - { url = "https://files.pythonhosted.org/packages/e4/44/1a3b9715c0455d2e2f0f6df5ee6d6f5afdc423d0773a8a682ed2b43c566c/rpds_py-0.27.1-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f2729615f9d430af0ae6b36cf042cb55c0936408d543fb691e1a9e36648fd35a", size = 403418, upload-time = "2025-08-27T12:14:49.991Z" }, - { url = "https://files.pythonhosted.org/packages/1c/4b/fb6c4f14984eb56673bc868a66536f53417ddb13ed44b391998100a06a96/rpds_py-0.27.1-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1b207d881a9aef7ba753d69c123a35d96ca7cb808056998f6b9e8747321f03b8", size = 384771, upload-time = "2025-08-27T12:14:52.159Z" }, - { url = "https://files.pythonhosted.org/packages/c0/56/d5265d2d28b7420d7b4d4d85cad8ef891760f5135102e60d5c970b976e41/rpds_py-0.27.1-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:639fd5efec029f99b79ae47e5d7e00ad8a773da899b6309f6786ecaf22948c48", size = 400022, upload-time = "2025-08-27T12:14:53.859Z" }, - { url = "https://files.pythonhosted.org/packages/8f/e9/9f5fc70164a569bdd6ed9046486c3568d6926e3a49bdefeeccfb18655875/rpds_py-0.27.1-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fecc80cb2a90e28af8a9b366edacf33d7a91cbfe4c2c4544ea1246e949cfebeb", size = 416787, upload-time = "2025-08-27T12:14:55.673Z" }, - { url = "https://files.pythonhosted.org/packages/d4/64/56dd03430ba491db943a81dcdef115a985aac5f44f565cd39a00c766d45c/rpds_py-0.27.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:42a89282d711711d0a62d6f57d81aa43a1368686c45bc1c46b7f079d55692734", size = 557538, upload-time = "2025-08-27T12:14:57.245Z" }, - { url = "https://files.pythonhosted.org/packages/3f/36/92cc885a3129993b1d963a2a42ecf64e6a8e129d2c7cc980dbeba84e55fb/rpds_py-0.27.1-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:cf9931f14223de59551ab9d38ed18d92f14f055a5f78c1d8ad6493f735021bbb", size = 588512, upload-time = "2025-08-27T12:14:58.728Z" }, - { url = "https://files.pythonhosted.org/packages/dd/10/6b283707780a81919f71625351182b4f98932ac89a09023cb61865136244/rpds_py-0.27.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:f39f58a27cc6e59f432b568ed8429c7e1641324fbe38131de852cd77b2d534b0", size = 555813, upload-time = "2025-08-27T12:15:00.334Z" }, - { url = "https://files.pythonhosted.org/packages/04/2e/30b5ea18c01379da6272a92825dd7e53dc9d15c88a19e97932d35d430ef7/rpds_py-0.27.1-cp314-cp314t-win32.whl", hash = "sha256:d5fa0ee122dc09e23607a28e6d7b150da16c662e66409bbe85230e4c85bb528a", size = 217385, upload-time = "2025-08-27T12:15:01.937Z" }, - { url = "https://files.pythonhosted.org/packages/32/7d/97119da51cb1dd3f2f3c0805f155a3aa4a95fa44fe7d78ae15e69edf4f34/rpds_py-0.27.1-cp314-cp314t-win_amd64.whl", hash = "sha256:6567d2bb951e21232c2f660c24cf3470bb96de56cdcb3f071a83feeaff8a2772", size = 230097, upload-time = "2025-08-27T12:15:03.961Z" }, - { url = "https://files.pythonhosted.org/packages/7f/6c/252e83e1ce7583c81f26d1d884b2074d40a13977e1b6c9c50bbf9a7f1f5a/rpds_py-0.27.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:c918c65ec2e42c2a78d19f18c553d77319119bf43aa9e2edf7fb78d624355527", size = 372140, upload-time = "2025-08-27T12:15:05.441Z" }, - { url = "https://files.pythonhosted.org/packages/9d/71/949c195d927c5aeb0d0629d329a20de43a64c423a6aa53836290609ef7ec/rpds_py-0.27.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1fea2b1a922c47c51fd07d656324531adc787e415c8b116530a1d29c0516c62d", size = 354086, upload-time = "2025-08-27T12:15:07.404Z" }, - { url = "https://files.pythonhosted.org/packages/9f/02/e43e332ad8ce4f6c4342d151a471a7f2900ed1d76901da62eb3762663a71/rpds_py-0.27.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bbf94c58e8e0cd6b6f38d8de67acae41b3a515c26169366ab58bdca4a6883bb8", size = 382117, upload-time = "2025-08-27T12:15:09.275Z" }, - { url = "https://files.pythonhosted.org/packages/d0/05/b0fdeb5b577197ad72812bbdfb72f9a08fa1e64539cc3940b1b781cd3596/rpds_py-0.27.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c2a8fed130ce946d5c585eddc7c8eeef0051f58ac80a8ee43bd17835c144c2cc", size = 394520, upload-time = "2025-08-27T12:15:10.727Z" }, - { url = "https://files.pythonhosted.org/packages/67/1f/4cfef98b2349a7585181e99294fa2a13f0af06902048a5d70f431a66d0b9/rpds_py-0.27.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:037a2361db72ee98d829bc2c5b7cc55598ae0a5e0ec1823a56ea99374cfd73c1", size = 522657, upload-time = "2025-08-27T12:15:12.613Z" }, - { url = "https://files.pythonhosted.org/packages/44/55/ccf37ddc4c6dce7437b335088b5ca18da864b334890e2fe9aa6ddc3f79a9/rpds_py-0.27.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5281ed1cc1d49882f9997981c88df1a22e140ab41df19071222f7e5fc4e72125", size = 402967, upload-time = "2025-08-27T12:15:14.113Z" }, - { url = "https://files.pythonhosted.org/packages/74/e5/5903f92e41e293b07707d5bf00ef39a0eb2af7190aff4beaf581a6591510/rpds_py-0.27.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2fd50659a069c15eef8aa3d64bbef0d69fd27bb4a50c9ab4f17f83a16cbf8905", size = 384372, upload-time = "2025-08-27T12:15:15.842Z" }, - { url = "https://files.pythonhosted.org/packages/8f/e3/fbb409e18aeefc01e49f5922ac63d2d914328430e295c12183ce56ebf76b/rpds_py-0.27.1-cp39-cp39-manylinux_2_31_riscv64.whl", hash = "sha256:c4b676c4ae3921649a15d28ed10025548e9b561ded473aa413af749503c6737e", size = 401264, upload-time = "2025-08-27T12:15:17.388Z" }, - { url = "https://files.pythonhosted.org/packages/55/79/529ad07794e05cb0f38e2f965fc5bb20853d523976719400acecc447ec9d/rpds_py-0.27.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:079bc583a26db831a985c5257797b2b5d3affb0386e7ff886256762f82113b5e", size = 418691, upload-time = "2025-08-27T12:15:19.144Z" }, - { url = "https://files.pythonhosted.org/packages/33/39/6554a7fd6d9906fda2521c6d52f5d723dca123529fb719a5b5e074c15e01/rpds_py-0.27.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:4e44099bd522cba71a2c6b97f68e19f40e7d85399de899d66cdb67b32d7cb786", size = 558989, upload-time = "2025-08-27T12:15:21.087Z" }, - { url = "https://files.pythonhosted.org/packages/19/b2/76fa15173b6f9f445e5ef15120871b945fb8dd9044b6b8c7abe87e938416/rpds_py-0.27.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:e202e6d4188e53c6661af813b46c37ca2c45e497fc558bacc1a7630ec2695aec", size = 589835, upload-time = "2025-08-27T12:15:22.696Z" }, - { url = "https://files.pythonhosted.org/packages/ee/9e/5560a4b39bab780405bed8a88ee85b30178061d189558a86003548dea045/rpds_py-0.27.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:f41f814b8eaa48768d1bb551591f6ba45f87ac76899453e8ccd41dba1289b04b", size = 555227, upload-time = "2025-08-27T12:15:24.278Z" }, - { url = "https://files.pythonhosted.org/packages/52/d7/cd9c36215111aa65724c132bf709c6f35175973e90b32115dedc4ced09cb/rpds_py-0.27.1-cp39-cp39-win32.whl", hash = "sha256:9e71f5a087ead99563c11fdaceee83ee982fd39cf67601f4fd66cb386336ee52", size = 217899, upload-time = "2025-08-27T12:15:25.926Z" }, - { url = "https://files.pythonhosted.org/packages/5b/e0/d75ab7b4dd8ba777f6b365adbdfc7614bbfe7c5f05703031dfa4b61c3d6c/rpds_py-0.27.1-cp39-cp39-win_amd64.whl", hash = "sha256:71108900c9c3c8590697244b9519017a400d9ba26a36c48381b3f64743a44aab", size = 228725, upload-time = "2025-08-27T12:15:27.398Z" }, - { url = "https://files.pythonhosted.org/packages/d5/63/b7cc415c345625d5e62f694ea356c58fb964861409008118f1245f8c3347/rpds_py-0.27.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:7ba22cb9693df986033b91ae1d7a979bc399237d45fccf875b76f62bb9e52ddf", size = 371360, upload-time = "2025-08-27T12:15:29.218Z" }, - { url = "https://files.pythonhosted.org/packages/e5/8c/12e1b24b560cf378b8ffbdb9dc73abd529e1adcfcf82727dfd29c4a7b88d/rpds_py-0.27.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:5b640501be9288c77738b5492b3fd3abc4ba95c50c2e41273c8a1459f08298d3", size = 353933, upload-time = "2025-08-27T12:15:30.837Z" }, - { url = "https://files.pythonhosted.org/packages/9b/85/1bb2210c1f7a1b99e91fea486b9f0f894aa5da3a5ec7097cbad7dec6d40f/rpds_py-0.27.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb08b65b93e0c6dd70aac7f7890a9c0938d5ec71d5cb32d45cf844fb8ae47636", size = 382962, upload-time = "2025-08-27T12:15:32.348Z" }, - { url = "https://files.pythonhosted.org/packages/cc/c9/a839b9f219cf80ed65f27a7f5ddbb2809c1b85c966020ae2dff490e0b18e/rpds_py-0.27.1-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d7ff07d696a7a38152ebdb8212ca9e5baab56656749f3d6004b34ab726b550b8", size = 394412, upload-time = "2025-08-27T12:15:33.839Z" }, - { url = "https://files.pythonhosted.org/packages/02/2d/b1d7f928b0b1f4fc2e0133e8051d199b01d7384875adc63b6ddadf3de7e5/rpds_py-0.27.1-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fb7c72262deae25366e3b6c0c0ba46007967aea15d1eea746e44ddba8ec58dcc", size = 523972, upload-time = "2025-08-27T12:15:35.377Z" }, - { url = "https://files.pythonhosted.org/packages/a9/af/2cbf56edd2d07716df1aec8a726b3159deb47cb5c27e1e42b71d705a7c2f/rpds_py-0.27.1-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7b002cab05d6339716b03a4a3a2ce26737f6231d7b523f339fa061d53368c9d8", size = 403273, upload-time = "2025-08-27T12:15:37.051Z" }, - { url = "https://files.pythonhosted.org/packages/c0/93/425e32200158d44ff01da5d9612c3b6711fe69f606f06e3895511f17473b/rpds_py-0.27.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:23f6b69d1c26c4704fec01311963a41d7de3ee0570a84ebde4d544e5a1859ffc", size = 385278, upload-time = "2025-08-27T12:15:38.571Z" }, - { url = "https://files.pythonhosted.org/packages/eb/1a/1a04a915ecd0551bfa9e77b7672d1937b4b72a0fc204a17deef76001cfb2/rpds_py-0.27.1-pp310-pypy310_pp73-manylinux_2_31_riscv64.whl", hash = "sha256:530064db9146b247351f2a0250b8f00b289accea4596a033e94be2389977de71", size = 402084, upload-time = "2025-08-27T12:15:40.529Z" }, - { url = "https://files.pythonhosted.org/packages/51/f7/66585c0fe5714368b62951d2513b684e5215beaceab2c6629549ddb15036/rpds_py-0.27.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7b90b0496570bd6b0321724a330d8b545827c4df2034b6ddfc5f5275f55da2ad", size = 419041, upload-time = "2025-08-27T12:15:42.191Z" }, - { url = "https://files.pythonhosted.org/packages/8e/7e/83a508f6b8e219bba2d4af077c35ba0e0cdd35a751a3be6a7cba5a55ad71/rpds_py-0.27.1-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:879b0e14a2da6a1102a3fc8af580fc1ead37e6d6692a781bd8c83da37429b5ab", size = 560084, upload-time = "2025-08-27T12:15:43.839Z" }, - { url = "https://files.pythonhosted.org/packages/66/66/bb945683b958a1b19eb0fe715594630d0f36396ebdef4d9b89c2fa09aa56/rpds_py-0.27.1-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:0d807710df3b5faa66c731afa162ea29717ab3be17bdc15f90f2d9f183da4059", size = 590115, upload-time = "2025-08-27T12:15:46.647Z" }, - { url = "https://files.pythonhosted.org/packages/12/00/ccfaafaf7db7e7adace915e5c2f2c2410e16402561801e9c7f96683002d3/rpds_py-0.27.1-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:3adc388fc3afb6540aec081fa59e6e0d3908722771aa1e37ffe22b220a436f0b", size = 556561, upload-time = "2025-08-27T12:15:48.219Z" }, - { url = "https://files.pythonhosted.org/packages/e1/b7/92b6ed9aad103bfe1c45df98453dfae40969eef2cb6c6239c58d7e96f1b3/rpds_py-0.27.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:c796c0c1cc68cb08b0284db4229f5af76168172670c74908fdbd4b7d7f515819", size = 229125, upload-time = "2025-08-27T12:15:49.956Z" }, - { url = "https://files.pythonhosted.org/packages/0c/ed/e1fba02de17f4f76318b834425257c8ea297e415e12c68b4361f63e8ae92/rpds_py-0.27.1-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:cdfe4bb2f9fe7458b7453ad3c33e726d6d1c7c0a72960bcc23800d77384e42df", size = 371402, upload-time = "2025-08-27T12:15:51.561Z" }, - { url = "https://files.pythonhosted.org/packages/af/7c/e16b959b316048b55585a697e94add55a4ae0d984434d279ea83442e460d/rpds_py-0.27.1-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:8fabb8fd848a5f75a2324e4a84501ee3a5e3c78d8603f83475441866e60b94a3", size = 354084, upload-time = "2025-08-27T12:15:53.219Z" }, - { url = "https://files.pythonhosted.org/packages/de/c1/ade645f55de76799fdd08682d51ae6724cb46f318573f18be49b1e040428/rpds_py-0.27.1-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eda8719d598f2f7f3e0f885cba8646644b55a187762bec091fa14a2b819746a9", size = 383090, upload-time = "2025-08-27T12:15:55.158Z" }, - { url = "https://files.pythonhosted.org/packages/1f/27/89070ca9b856e52960da1472efcb6c20ba27cfe902f4f23ed095b9cfc61d/rpds_py-0.27.1-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3c64d07e95606ec402a0a1c511fe003873fa6af630bda59bac77fac8b4318ebc", size = 394519, upload-time = "2025-08-27T12:15:57.238Z" }, - { url = "https://files.pythonhosted.org/packages/b3/28/be120586874ef906aa5aeeae95ae8df4184bc757e5b6bd1c729ccff45ed5/rpds_py-0.27.1-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:93a2ed40de81bcff59aabebb626562d48332f3d028ca2036f1d23cbb52750be4", size = 523817, upload-time = "2025-08-27T12:15:59.237Z" }, - { url = "https://files.pythonhosted.org/packages/a8/ef/70cc197bc11cfcde02a86f36ac1eed15c56667c2ebddbdb76a47e90306da/rpds_py-0.27.1-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:387ce8c44ae94e0ec50532d9cb0edce17311024c9794eb196b90e1058aadeb66", size = 403240, upload-time = "2025-08-27T12:16:00.923Z" }, - { url = "https://files.pythonhosted.org/packages/cf/35/46936cca449f7f518f2f4996e0e8344db4b57e2081e752441154089d2a5f/rpds_py-0.27.1-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aaf94f812c95b5e60ebaf8bfb1898a7d7cb9c1af5744d4a67fa47796e0465d4e", size = 385194, upload-time = "2025-08-27T12:16:02.802Z" }, - { url = "https://files.pythonhosted.org/packages/e1/62/29c0d3e5125c3270b51415af7cbff1ec587379c84f55a5761cc9efa8cd06/rpds_py-0.27.1-pp311-pypy311_pp73-manylinux_2_31_riscv64.whl", hash = "sha256:4848ca84d6ded9b58e474dfdbad4b8bfb450344c0551ddc8d958bf4b36aa837c", size = 402086, upload-time = "2025-08-27T12:16:04.806Z" }, - { url = "https://files.pythonhosted.org/packages/8f/66/03e1087679227785474466fdd04157fb793b3b76e3fcf01cbf4c693c1949/rpds_py-0.27.1-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2bde09cbcf2248b73c7c323be49b280180ff39fadcfe04e7b6f54a678d02a7cf", size = 419272, upload-time = "2025-08-27T12:16:06.471Z" }, - { url = "https://files.pythonhosted.org/packages/6a/24/e3e72d265121e00b063aef3e3501e5b2473cf1b23511d56e529531acf01e/rpds_py-0.27.1-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:94c44ee01fd21c9058f124d2d4f0c9dc7634bec93cd4b38eefc385dabe71acbf", size = 560003, upload-time = "2025-08-27T12:16:08.06Z" }, - { url = "https://files.pythonhosted.org/packages/26/ca/f5a344c534214cc2d41118c0699fffbdc2c1bc7046f2a2b9609765ab9c92/rpds_py-0.27.1-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:df8b74962e35c9249425d90144e721eed198e6555a0e22a563d29fe4486b51f6", size = 590482, upload-time = "2025-08-27T12:16:10.137Z" }, - { url = "https://files.pythonhosted.org/packages/ce/08/4349bdd5c64d9d193c360aa9db89adeee6f6682ab8825dca0a3f535f434f/rpds_py-0.27.1-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:dc23e6820e3b40847e2f4a7726462ba0cf53089512abe9ee16318c366494c17a", size = 556523, upload-time = "2025-08-27T12:16:12.188Z" }, - { url = "https://files.pythonhosted.org/packages/4e/ea/5463cd5048a7a2fcdae308b6e96432802132c141bfb9420260142632a0f1/rpds_py-0.27.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:aa8933159edc50be265ed22b401125c9eebff3171f570258854dbce3ecd55475", size = 371778, upload-time = "2025-08-27T12:16:13.851Z" }, - { url = "https://files.pythonhosted.org/packages/0d/c8/f38c099db07f5114029c1467649d308543906933eebbc226d4527a5f4693/rpds_py-0.27.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:a50431bf02583e21bf273c71b89d710e7a710ad5e39c725b14e685610555926f", size = 354394, upload-time = "2025-08-27T12:16:15.609Z" }, - { url = "https://files.pythonhosted.org/packages/7d/79/b76f97704d9dd8ddbd76fed4c4048153a847c5d6003afe20a6b5c3339065/rpds_py-0.27.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:78af06ddc7fe5cc0e967085a9115accee665fb912c22a3f54bad70cc65b05fe6", size = 382348, upload-time = "2025-08-27T12:16:17.251Z" }, - { url = "https://files.pythonhosted.org/packages/8a/3f/ef23d3c1be1b837b648a3016d5bbe7cfe711422ad110b4081c0a90ef5a53/rpds_py-0.27.1-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:70d0738ef8fee13c003b100c2fbd667ec4f133468109b3472d249231108283a3", size = 394159, upload-time = "2025-08-27T12:16:19.251Z" }, - { url = "https://files.pythonhosted.org/packages/74/8a/9e62693af1a34fd28b1a190d463d12407bd7cf561748cb4745845d9548d3/rpds_py-0.27.1-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e2f6fd8a1cea5bbe599b6e78a6e5ee08db434fc8ffea51ff201c8765679698b3", size = 522775, upload-time = "2025-08-27T12:16:20.929Z" }, - { url = "https://files.pythonhosted.org/packages/36/0d/8d5bb122bf7a60976b54c5c99a739a3819f49f02d69df3ea2ca2aff47d5c/rpds_py-0.27.1-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8177002868d1426305bb5de1e138161c2ec9eb2d939be38291d7c431c4712df8", size = 402633, upload-time = "2025-08-27T12:16:22.548Z" }, - { url = "https://files.pythonhosted.org/packages/0f/0e/237948c1f425e23e0cf5a566d702652a6e55c6f8fbd332a1792eb7043daf/rpds_py-0.27.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:008b839781d6c9bf3b6a8984d1d8e56f0ec46dc56df61fd669c49b58ae800400", size = 384867, upload-time = "2025-08-27T12:16:24.29Z" }, - { url = "https://files.pythonhosted.org/packages/d6/0a/da0813efcd998d260cbe876d97f55b0f469ada8ba9cbc47490a132554540/rpds_py-0.27.1-pp39-pypy39_pp73-manylinux_2_31_riscv64.whl", hash = "sha256:a55b9132bb1ade6c734ddd2759c8dc132aa63687d259e725221f106b83a0e485", size = 401791, upload-time = "2025-08-27T12:16:25.954Z" }, - { url = "https://files.pythonhosted.org/packages/51/78/c6c9e8a8aaca416a6f0d1b6b4a6ee35b88fe2c5401d02235d0a056eceed2/rpds_py-0.27.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a46fdec0083a26415f11d5f236b79fa1291c32aaa4a17684d82f7017a1f818b1", size = 419525, upload-time = "2025-08-27T12:16:27.659Z" }, - { url = "https://files.pythonhosted.org/packages/a3/69/5af37e1d71487cf6d56dd1420dc7e0c2732c1b6ff612aa7a88374061c0a8/rpds_py-0.27.1-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:8a63b640a7845f2bdd232eb0d0a4a2dd939bcdd6c57e6bb134526487f3160ec5", size = 559255, upload-time = "2025-08-27T12:16:29.343Z" }, - { url = "https://files.pythonhosted.org/packages/40/7f/8b7b136069ef7ac3960eda25d832639bdb163018a34c960ed042dd1707c8/rpds_py-0.27.1-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:7e32721e5d4922deaaf963469d795d5bde6093207c52fec719bd22e5d1bedbc4", size = 590384, upload-time = "2025-08-27T12:16:31.005Z" }, - { url = "https://files.pythonhosted.org/packages/d8/06/c316d3f6ff03f43ccb0eba7de61376f8ec4ea850067dddfafe98274ae13c/rpds_py-0.27.1-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:2c426b99a068601b5f4623573df7a7c3d72e87533a2dd2253353a03e7502566c", size = 555959, upload-time = "2025-08-27T12:16:32.73Z" }, - { url = "https://files.pythonhosted.org/packages/60/94/384cf54c430b9dac742bbd2ec26c23feb78ded0d43d6d78563a281aec017/rpds_py-0.27.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:4fc9b7fe29478824361ead6e14e4f5aed570d477e06088826537e202d25fe859", size = 228784, upload-time = "2025-08-27T12:16:34.428Z" }, -] - [[package]] name = "rpds-py" version = "0.28.0" source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.14' and sys_platform == 'win32'", - "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32'", - "python_full_version == '3.11.*' and sys_platform == 'win32'", - "python_full_version >= '3.14' and sys_platform != 'win32'", - "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'win32'", - "python_full_version == '3.11.*' and sys_platform != 'win32'", - "python_full_version == '3.10.*' and sys_platform == 'win32'", - "python_full_version == '3.10.*' and sys_platform != 'win32'", -] sdist = { url = "https://files.pythonhosted.org/packages/48/dc/95f074d43452b3ef5d06276696ece4b3b5d696e7c9ad7173c54b1390cd70/rpds_py-0.28.0.tar.gz", hash = "sha256:abd4df20485a0983e2ca334a216249b6186d6e3c1627e106651943dbdb791aea", size = 27419, upload-time = "2025-10-22T22:24:29.327Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/82/f8/13bb772dc7cbf2c3c5b816febc34fa0cb2c64a08e0569869585684ce6631/rpds_py-0.28.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:7b6013db815417eeb56b2d9d7324e64fcd4fa289caeee6e7a78b2e11fc9b438a", size = 362820, upload-time = "2025-10-22T22:21:15.074Z" }, @@ -6465,68 +5002,20 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/6b/fa/3234f913fe9a6525a7b97c6dad1f51e72b917e6872e051a5e2ffd8b16fbb/ruamel.yaml.clib-0.2.14-cp314-cp314-macosx_15_0_arm64.whl", hash = "sha256:70eda7703b8126f5e52fcf276e6c0f40b0d314674f896fc58c47b0aef2b9ae83", size = 137970, upload-time = "2025-09-22T19:51:09.472Z" }, { url = "https://files.pythonhosted.org/packages/ef/ec/4edbf17ac2c87fa0845dd366ef8d5852b96eb58fcd65fc1ecf5fe27b4641/ruamel.yaml.clib-0.2.14-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:a0cb71ccc6ef9ce36eecb6272c81afdc2f565950cdcec33ae8e6cd8f7fc86f27", size = 739639, upload-time = "2025-09-22T19:51:10.566Z" }, { url = "https://files.pythonhosted.org/packages/15/18/b0e1fafe59051de9e79cdd431863b03593ecfa8341c110affad7c8121efc/ruamel.yaml.clib-0.2.14-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:e7cb9ad1d525d40f7d87b6df7c0ff916a66bc52cb61b66ac1b2a16d0c1b07640", size = 764456, upload-time = "2025-09-22T19:51:11.736Z" }, - { url = "https://files.pythonhosted.org/packages/2a/a0/e709dc2f58054049cd154319a7d37917689785b12ec43ea2df47ea5344ef/ruamel.yaml.clib-0.2.14-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:18c041b28f3456ddef1f1951d4492dbebe0f8114157c1b3c981a4611c2020792", size = 270636, upload-time = "2025-09-23T14:24:17.855Z" }, - { url = "https://files.pythonhosted.org/packages/18/81/491c9e394976e10682a596f2b785ba7066db525cc17f267005ae8ca33c73/ruamel.yaml.clib-0.2.14-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:d8354515ab62f95a07deaf7f845886cc50e2f345ceab240a3d2d09a9f7d77853", size = 137954, upload-time = "2025-09-22T19:51:12.851Z" }, - { url = "https://files.pythonhosted.org/packages/ad/a5/c6d1c767e051bbc00146a93132bf199b3e6ec2c219131b9d3e19eff428f3/ruamel.yaml.clib-0.2.14-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:275f938692013a3883edbd848edde6d9f26825d65c9a2eb1db8baa1adc96a05d", size = 636162, upload-time = "2025-09-22T19:51:16.823Z" }, - { url = "https://files.pythonhosted.org/packages/e3/6f/4746e2e8f60b3489b6cd6fad96a8e2aaa0cf7dd6760de3daad1a6e9f5789/ruamel.yaml.clib-0.2.14-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:16a60d69f4057ad9a92f3444e2367c08490daed6428291aa16cefb445c29b0e9", size = 723934, upload-time = "2025-09-22T19:51:13.948Z" }, - { url = "https://files.pythonhosted.org/packages/26/47/5446e8cea2f6b5391fba653196f38b3f14030c1c324bd9aa67f1773d24ec/ruamel.yaml.clib-0.2.14-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5ac5ff9425d8acb8f59ac5b96bcb7fd3d272dc92d96a7c730025928ffcc88a7a", size = 686265, upload-time = "2025-09-22T19:51:15.142Z" }, - { url = "https://files.pythonhosted.org/packages/52/d7/344d7b3010b6a01af97431bdf89056abb2d8bd704d0f3430e7b50232cce4/ruamel.yaml.clib-0.2.14-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:e1d1735d97fd8a48473af048739379975651fab186f8a25a9f683534e6904179", size = 693042, upload-time = "2025-09-23T18:42:53.238Z" }, - { url = "https://files.pythonhosted.org/packages/b3/d5/a0f2cce1b6cfa9bf1921b8a19ebceafc7a9b3c27882e5af5a07ae080b1bd/ruamel.yaml.clib-0.2.14-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:83bbd8354f6abb3fdfb922d1ed47ad8d1db3ea72b0523dac8d07cdacfe1c0fcf", size = 706110, upload-time = "2025-09-22T19:51:18.467Z" }, - { url = "https://files.pythonhosted.org/packages/42/cd/85b422d24ee2096eaf6faa360c95ef9bdb59097d19b9624cebce4dd9bc2a/ruamel.yaml.clib-0.2.14-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:808c7190a0fe7ae7014c42f73897cf8e9ef14ff3aa533450e51b1e72ec5239ad", size = 725028, upload-time = "2025-09-22T19:51:19.782Z" }, - { url = "https://files.pythonhosted.org/packages/4d/ac/99e6e0ea2584f84f447069d0187fe411e9b5deb7e3ddecda25001cfc7a95/ruamel.yaml.clib-0.2.14-cp39-cp39-win32.whl", hash = "sha256:6d5472f63a31b042aadf5ed28dd3ef0523da49ac17f0463e10fda9c4a2773352", size = 100915, upload-time = "2025-09-22T19:51:21.764Z" }, - { url = "https://files.pythonhosted.org/packages/5d/8d/846e43369658958c99d959bb7774136fff9210f9017d91a4277818ceafbf/ruamel.yaml.clib-0.2.14-cp39-cp39-win_amd64.whl", hash = "sha256:8dd3c2cc49caa7a8d64b67146462aed6723a0495e44bf0aa0a2e94beaa8432f6", size = 118706, upload-time = "2025-09-22T19:51:20.878Z" }, { url = "https://files.pythonhosted.org/packages/e7/cd/150fdb96b8fab27fe08d8a59fe67554568727981806e6bc2677a16081ec7/ruamel_yaml_clib-0.2.14-cp314-cp314-win32.whl", hash = "sha256:9b4104bf43ca0cd4e6f738cb86326a3b2f6eef00f417bd1e7efb7bdffe74c539", size = 102394, upload-time = "2025-11-14T21:57:36.703Z" }, { url = "https://files.pythonhosted.org/packages/bd/e6/a3fa40084558c7e1dc9546385f22a93949c890a8b2e445b2ba43935f51da/ruamel_yaml_clib-0.2.14-cp314-cp314-win_amd64.whl", hash = "sha256:13997d7d354a9890ea1ec5937a219817464e5cc344805b37671562a401ca3008", size = 122673, upload-time = "2025-11-14T21:57:38.177Z" }, ] -[[package]] -name = "scipy" -version = "1.13.1" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.10'", -] -dependencies = [ - { name = "numpy", version = "2.0.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/ae/00/48c2f661e2816ccf2ecd77982f6605b2950afe60f60a52b4cbbc2504aa8f/scipy-1.13.1.tar.gz", hash = "sha256:095a87a0312b08dfd6a6155cbbd310a8c51800fc931b8c0b84003014b874ed3c", size = 57210720, upload-time = "2024-05-23T03:29:26.079Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/33/59/41b2529908c002ade869623b87eecff3e11e3ce62e996d0bdcb536984187/scipy-1.13.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:20335853b85e9a49ff7572ab453794298bcf0354d8068c5f6775a0eabf350aca", size = 39328076, upload-time = "2024-05-23T03:19:01.687Z" }, - { url = "https://files.pythonhosted.org/packages/d5/33/f1307601f492f764062ce7dd471a14750f3360e33cd0f8c614dae208492c/scipy-1.13.1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:d605e9c23906d1994f55ace80e0125c587f96c020037ea6aa98d01b4bd2e222f", size = 30306232, upload-time = "2024-05-23T03:19:09.089Z" }, - { url = "https://files.pythonhosted.org/packages/c0/66/9cd4f501dd5ea03e4a4572ecd874936d0da296bd04d1c45ae1a4a75d9c3a/scipy-1.13.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cfa31f1def5c819b19ecc3a8b52d28ffdcc7ed52bb20c9a7589669dd3c250989", size = 33743202, upload-time = "2024-05-23T03:19:15.138Z" }, - { url = "https://files.pythonhosted.org/packages/a3/ba/7255e5dc82a65adbe83771c72f384d99c43063648456796436c9a5585ec3/scipy-1.13.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f26264b282b9da0952a024ae34710c2aff7d27480ee91a2e82b7b7073c24722f", size = 38577335, upload-time = "2024-05-23T03:19:21.984Z" }, - { url = "https://files.pythonhosted.org/packages/49/a5/bb9ded8326e9f0cdfdc412eeda1054b914dfea952bda2097d174f8832cc0/scipy-1.13.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:eccfa1906eacc02de42d70ef4aecea45415f5be17e72b61bafcfd329bdc52e94", size = 38820728, upload-time = "2024-05-23T03:19:28.225Z" }, - { url = "https://files.pythonhosted.org/packages/12/30/df7a8fcc08f9b4a83f5f27cfaaa7d43f9a2d2ad0b6562cced433e5b04e31/scipy-1.13.1-cp310-cp310-win_amd64.whl", hash = "sha256:2831f0dc9c5ea9edd6e51e6e769b655f08ec6db6e2e10f86ef39bd32eb11da54", size = 46210588, upload-time = "2024-05-23T03:19:35.661Z" }, - { url = "https://files.pythonhosted.org/packages/b4/15/4a4bb1b15bbd2cd2786c4f46e76b871b28799b67891f23f455323a0cdcfb/scipy-1.13.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:27e52b09c0d3a1d5b63e1105f24177e544a222b43611aaf5bc44d4a0979e32f9", size = 39333805, upload-time = "2024-05-23T03:19:43.081Z" }, - { url = "https://files.pythonhosted.org/packages/ba/92/42476de1af309c27710004f5cdebc27bec62c204db42e05b23a302cb0c9a/scipy-1.13.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:54f430b00f0133e2224c3ba42b805bfd0086fe488835effa33fa291561932326", size = 30317687, upload-time = "2024-05-23T03:19:48.799Z" }, - { url = "https://files.pythonhosted.org/packages/80/ba/8be64fe225360a4beb6840f3cbee494c107c0887f33350d0a47d55400b01/scipy-1.13.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e89369d27f9e7b0884ae559a3a956e77c02114cc60a6058b4e5011572eea9299", size = 33694638, upload-time = "2024-05-23T03:19:55.104Z" }, - { url = "https://files.pythonhosted.org/packages/36/07/035d22ff9795129c5a847c64cb43c1fa9188826b59344fee28a3ab02e283/scipy-1.13.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a78b4b3345f1b6f68a763c6e25c0c9a23a9fd0f39f5f3d200efe8feda560a5fa", size = 38569931, upload-time = "2024-05-23T03:20:01.82Z" }, - { url = "https://files.pythonhosted.org/packages/d9/10/f9b43de37e5ed91facc0cfff31d45ed0104f359e4f9a68416cbf4e790241/scipy-1.13.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:45484bee6d65633752c490404513b9ef02475b4284c4cfab0ef946def50b3f59", size = 38838145, upload-time = "2024-05-23T03:20:09.173Z" }, - { url = "https://files.pythonhosted.org/packages/4a/48/4513a1a5623a23e95f94abd675ed91cfb19989c58e9f6f7d03990f6caf3d/scipy-1.13.1-cp311-cp311-win_amd64.whl", hash = "sha256:5713f62f781eebd8d597eb3f88b8bf9274e79eeabf63afb4a737abc6c84ad37b", size = 46196227, upload-time = "2024-05-23T03:20:16.433Z" }, - { url = "https://files.pythonhosted.org/packages/f2/7b/fb6b46fbee30fc7051913068758414f2721003a89dd9a707ad49174e3843/scipy-1.13.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5d72782f39716b2b3509cd7c33cdc08c96f2f4d2b06d51e52fb45a19ca0c86a1", size = 39357301, upload-time = "2024-05-23T03:20:23.538Z" }, - { url = "https://files.pythonhosted.org/packages/dc/5a/2043a3bde1443d94014aaa41e0b50c39d046dda8360abd3b2a1d3f79907d/scipy-1.13.1-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:017367484ce5498445aade74b1d5ab377acdc65e27095155e448c88497755a5d", size = 30363348, upload-time = "2024-05-23T03:20:29.885Z" }, - { url = "https://files.pythonhosted.org/packages/e7/cb/26e4a47364bbfdb3b7fb3363be6d8a1c543bcd70a7753ab397350f5f189a/scipy-1.13.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:949ae67db5fa78a86e8fa644b9a6b07252f449dcf74247108c50e1d20d2b4627", size = 33406062, upload-time = "2024-05-23T03:20:36.012Z" }, - { url = "https://files.pythonhosted.org/packages/88/ab/6ecdc526d509d33814835447bbbeedbebdec7cca46ef495a61b00a35b4bf/scipy-1.13.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de3ade0e53bc1f21358aa74ff4830235d716211d7d077e340c7349bc3542e884", size = 38218311, upload-time = "2024-05-23T03:20:42.086Z" }, - { url = "https://files.pythonhosted.org/packages/0b/00/9f54554f0f8318100a71515122d8f4f503b1a2c4b4cfab3b4b68c0eb08fa/scipy-1.13.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:2ac65fb503dad64218c228e2dc2d0a0193f7904747db43014645ae139c8fad16", size = 38442493, upload-time = "2024-05-23T03:20:48.292Z" }, - { url = "https://files.pythonhosted.org/packages/3e/df/963384e90733e08eac978cd103c34df181d1fec424de383cdc443f418dd4/scipy-1.13.1-cp312-cp312-win_amd64.whl", hash = "sha256:cdd7dacfb95fea358916410ec61bbc20440f7860333aee6d882bb8046264e949", size = 45910955, upload-time = "2024-05-23T03:20:55.091Z" }, - { url = "https://files.pythonhosted.org/packages/7f/29/c2ea58c9731b9ecb30b6738113a95d147e83922986b34c685b8f6eefde21/scipy-1.13.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:436bbb42a94a8aeef855d755ce5a465479c721e9d684de76bf61a62e7c2b81d5", size = 39352927, upload-time = "2024-05-23T03:21:01.95Z" }, - { url = "https://files.pythonhosted.org/packages/5c/c0/e71b94b20ccf9effb38d7147c0064c08c622309fd487b1b677771a97d18c/scipy-1.13.1-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:8335549ebbca860c52bf3d02f80784e91a004b71b059e3eea9678ba994796a24", size = 30324538, upload-time = "2024-05-23T03:21:07.634Z" }, - { url = "https://files.pythonhosted.org/packages/6d/0f/aaa55b06d474817cea311e7b10aab2ea1fd5d43bc6a2861ccc9caec9f418/scipy-1.13.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d533654b7d221a6a97304ab63c41c96473ff04459e404b83275b60aa8f4b7004", size = 33732190, upload-time = "2024-05-23T03:21:14.41Z" }, - { url = "https://files.pythonhosted.org/packages/35/f5/d0ad1a96f80962ba65e2ce1de6a1e59edecd1f0a7b55990ed208848012e0/scipy-1.13.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:637e98dcf185ba7f8e663e122ebf908c4702420477ae52a04f9908707456ba4d", size = 38612244, upload-time = "2024-05-23T03:21:21.827Z" }, - { url = "https://files.pythonhosted.org/packages/8d/02/1165905f14962174e6569076bcc3315809ae1291ed14de6448cc151eedfd/scipy-1.13.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a014c2b3697bde71724244f63de2476925596c24285c7a637364761f8710891c", size = 38845637, upload-time = "2024-05-23T03:21:28.729Z" }, - { url = "https://files.pythonhosted.org/packages/3e/77/dab54fe647a08ee4253963bcd8f9cf17509c8ca64d6335141422fe2e2114/scipy-1.13.1-cp39-cp39-win_amd64.whl", hash = "sha256:392e4ec766654852c25ebad4f64e4e584cf19820b980bc04960bca0b0cd6eaa2", size = 46227440, upload-time = "2024-05-23T03:21:35.888Z" }, -] - [[package]] name = "scipy" version = "1.15.3" source = { registry = "https://pypi.org/simple" } resolution-markers = [ - "python_full_version == '3.10.*' and sys_platform == 'win32'", - "python_full_version == '3.10.*' and sys_platform != 'win32'", + "python_full_version < '3.11' and sys_platform == 'win32'", + "python_full_version < '3.11' and sys_platform != 'win32'", ] dependencies = [ - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.10.*'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/0f/37/6964b830433e654ec7485e45a00fc9a27cf868d622838f6b6d9c5ec0d532/scipy-1.15.3.tar.gz", hash = "sha256:eae3cf522bc7df64b42cad3925c876e1b0b6c35c1337c93e12c0f366f55b0eaf", size = 59419214, upload-time = "2025-05-08T16:13:05.955Z" } wheels = [ @@ -6674,8 +5163,7 @@ version = "1.9.7" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "future" }, - { name = "numpy", version = "2.0.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.10.*'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, { name = "numpy", version = "2.3.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, { name = "spglib" }, ] @@ -6752,9 +5240,7 @@ name = "spglib" version = "2.6.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "importlib-resources", marker = "python_full_version < '3.10'" }, - { name = "numpy", version = "2.0.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version == '3.10.*'" }, + { name = "numpy", version = "2.2.6", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.11'" }, { name = "numpy", version = "2.3.4", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.11'" }, { name = "typing-extensions", marker = "python_full_version < '3.13'" }, ] @@ -6780,11 +5266,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/7c/3e/fa9706976dc00e3862d858ddc5d5f8a06938175ba503a9f43bf3d2c119e4/spglib-2.6.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ebf487ab9f87378f4514e9415f27a546e3cd03ced6aa40428bb16bcb9728334", size = 805020, upload-time = "2025-03-10T05:58:48.527Z" }, { url = "https://files.pythonhosted.org/packages/53/01/1c0485ae02e645bc517bf5d5a6ca674f62c97e247890b954cbfe85c64dae/spglib-2.6.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc9d856d7cc936dc73b6b303aaf8b2fb4230a8527659373450c6e1139cbb2a5c", size = 809074, upload-time = "2025-03-10T05:58:50.017Z" }, { url = "https://files.pythonhosted.org/packages/16/56/a31e8d3c9e8d21100b83bbe1c1f3f7c94db317393a229e193461e5e6d2a4/spglib-2.6.0-cp313-cp313-win_amd64.whl", hash = "sha256:ff1632524f6ac0031423474e48d6b69f4932ecb7eb4446a501f59619e2b5cbc9", size = 561092, upload-time = "2025-03-10T05:58:51.732Z" }, - { url = "https://files.pythonhosted.org/packages/f3/3a/dc6c34e4d09820ad94334f7725887c050d0c272ff63c0aebaaec7e4fb390/spglib-2.6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9e8b045112a473e2a338d713e8579e053be6e12fc184d37c70ba12a24128b18b", size = 796252, upload-time = "2025-03-10T05:58:53.496Z" }, - { url = "https://files.pythonhosted.org/packages/fb/7f/d4a4610c7b8996a6ac9bccf380aafd7b2e92416ad5829dec1778213313d6/spglib-2.6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6a64ade674bf8018c26d3f549a94e75cf124508a54a8fc4ef249ac7b2a51545b", size = 798724, upload-time = "2025-03-10T05:58:54.745Z" }, - { url = "https://files.pythonhosted.org/packages/57/bd/e274f4e7e79c223a0659e3990764977dbf4ae32dcbd0d09b6873f608f4b4/spglib-2.6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0aa76030b070cac33f71c2b80a97f5a13ce63bbcecf2dcb839637fbef998ab34", size = 805039, upload-time = "2025-03-10T05:58:56.066Z" }, - { url = "https://files.pythonhosted.org/packages/67/d9/d2031a86eaa1039eaf4bc03d1dd14ce7443ab45ba121536d0c03d0faa928/spglib-2.6.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:33356cbea5a443d691229ebfd09fd5c9dbe259249d1edd3391073dbb6038def6", size = 809044, upload-time = "2025-03-10T05:58:57.362Z" }, - { url = "https://files.pythonhosted.org/packages/f1/e4/4fe7edd63da6d6b178332f49bc106c09533be0bb5abf4e7f4b2ec0441d53/spglib-2.6.0-cp39-cp39-win_amd64.whl", hash = "sha256:4dbb67f9d9e98f21e389d75a1b1661184db056007a55a23322e3e986cdd15aee", size = 561144, upload-time = "2025-03-10T05:58:59.028Z" }, ] [[package]] @@ -6797,7 +5278,6 @@ dependencies = [ { name = "colorama", marker = "sys_platform == 'win32'" }, { name = "docutils" }, { name = "imagesize" }, - { name = "importlib-metadata", marker = "python_full_version < '3.10'" }, { name = "jinja2" }, { name = "packaging" }, { name = "pygments" }, @@ -6845,8 +5325,7 @@ version = "2.1.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "babel" }, - { name = "click", version = "8.1.8", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "click", version = "8.2.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "click" }, { name = "setuptools" }, { name = "sphinx" }, ] @@ -6988,14 +5467,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/88/ee/4afb39a8ee4fc786e2d716c20ab87b5b1fb33d4ac4129a1aaa574ae8a585/sqlalchemy-2.0.44-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:1e77faf6ff919aa8cd63f1c4e561cac1d9a454a191bb864d5dd5e545935e5a40", size = 3226248, upload-time = "2025-10-10T15:43:51.862Z" }, { url = "https://files.pythonhosted.org/packages/32/d5/0e66097fc64fa266f29a7963296b40a80d6a997b7ac13806183700676f86/sqlalchemy-2.0.44-cp313-cp313-win32.whl", hash = "sha256:ee51625c2d51f8baadf2829fae817ad0b66b140573939dd69284d2ba3553ae73", size = 2101275, upload-time = "2025-10-10T15:03:26.096Z" }, { url = "https://files.pythonhosted.org/packages/03/51/665617fe4f8c6450f42a6d8d69243f9420f5677395572c2fe9d21b493b7b/sqlalchemy-2.0.44-cp313-cp313-win_amd64.whl", hash = "sha256:c1c80faaee1a6c3428cecf40d16a2365bcf56c424c92c2b6f0f9ad204b899e9e", size = 2127901, upload-time = "2025-10-10T15:03:27.548Z" }, - { url = "https://files.pythonhosted.org/packages/65/1c/819435b7cb66dac6192e6af8b7d0896b9507edf798f3826b9590c7e980db/sqlalchemy-2.0.44-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f7027414f2b88992877573ab780c19ecb54d3a536bef3397933573d6b5068be4", size = 2138850, upload-time = "2025-10-10T16:20:45.841Z" }, - { url = "https://files.pythonhosted.org/packages/fd/06/e8637ce5c4fdc027c00a9611052329169ef5a99feb22efd38866e27caf27/sqlalchemy-2.0.44-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3fe166c7d00912e8c10d3a9a0ce105569a31a3d0db1a6e82c4e0f4bf16d5eca9", size = 2128842, upload-time = "2025-10-10T16:20:47.209Z" }, - { url = "https://files.pythonhosted.org/packages/c3/5b/86f7cc573254bbfa50b339d8c72c5c026ceaa0adaa114237884886a0e14b/sqlalchemy-2.0.44-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3caef1ff89b1caefc28f0368b3bde21a7e3e630c2eddac16abd9e47bd27cc36a", size = 3216858, upload-time = "2025-10-10T15:38:33.535Z" }, - { url = "https://files.pythonhosted.org/packages/2f/ee/c9e582288edb41a47df7525f9fcae775d9f0b7da8eda8732f9d22f0c383e/sqlalchemy-2.0.44-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc2856d24afa44295735e72f3c75d6ee7fdd4336d8d3a8f3d44de7aa6b766df2", size = 3217019, upload-time = "2025-10-10T15:45:13.678Z" }, - { url = "https://files.pythonhosted.org/packages/71/a1/449f3bea46769b31443eac4152452af684c0ddd64e3c4719b636f85a5604/sqlalchemy-2.0.44-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:11bac86b0deada30b6b5f93382712ff0e911fe8d31cb9bf46e6b149ae175eff0", size = 3155491, upload-time = "2025-10-10T15:38:35.317Z" }, - { url = "https://files.pythonhosted.org/packages/0e/34/f99b584a0bf94ff2e822bcb4951dcc24a7967476b35b9b3c35bc11cbd6bc/sqlalchemy-2.0.44-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:4d18cd0e9a0f37c9f4088e50e3839fcb69a380a0ec957408e0b57cff08ee0a26", size = 3179978, upload-time = "2025-10-10T15:45:15.262Z" }, - { url = "https://files.pythonhosted.org/packages/ae/43/71a22aa66a1ef974f4e34982ce55d5f38d4770d2f0091eb210374e860b8e/sqlalchemy-2.0.44-cp39-cp39-win32.whl", hash = "sha256:9e9018544ab07614d591a26c1bd4293ddf40752cc435caf69196740516af7100", size = 2106888, upload-time = "2025-10-10T15:45:58.079Z" }, - { url = "https://files.pythonhosted.org/packages/08/fb/cc98eb1ab3c5ad92b51c0db17ee86d1c33379a7490da376567b902222dcf/sqlalchemy-2.0.44-cp39-cp39-win_amd64.whl", hash = "sha256:8e0e4e66fd80f277a8c3de016a81a554e76ccf6b8d881ee0b53200305a8433f6", size = 2130728, upload-time = "2025-10-10T15:45:59.7Z" }, { url = "https://files.pythonhosted.org/packages/9c/5e/6a29fa884d9fb7ddadf6b69490a9d45fded3b38541713010dad16b77d015/sqlalchemy-2.0.44-py3-none-any.whl", hash = "sha256:19de7ca1246fbef9f9d1bff8f1ab25641569df226364a0e40457dc5457c54b05", size = 1928718, upload-time = "2025-10-10T15:29:45.32Z" }, ] @@ -7059,10 +5530,8 @@ version = "6.6.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "markdown-it-py", extra = ["linkify"] }, - { name = "mdit-py-plugins", version = "0.4.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "mdit-py-plugins", version = "0.5.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, - { name = "platformdirs", version = "4.4.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "platformdirs", version = "4.5.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "mdit-py-plugins" }, + { name = "platformdirs" }, { name = "pygments" }, { name = "rich" }, { name = "typing-extensions" }, @@ -7178,8 +5647,7 @@ name = "trogon" version = "0.6.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "click", version = "8.1.8", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "click", version = "8.2.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "click" }, { name = "textual" }, ] sdist = { url = "https://files.pythonhosted.org/packages/cf/ae/7367acac2194a215b092ba3fccde3b558272702110b8bb9bea164ab4ac42/trogon-0.6.0.tar.gz", hash = "sha256:fd1abfeb7b15d79d6e6cfc9e724aad2a2728812e4713a744d975f133e7ec73a4", size = 22902, upload-time = "2024-10-02T13:38:12.511Z" } @@ -7358,10 +5826,8 @@ version = "20.35.4" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "distlib" }, - { name = "filelock", version = "3.19.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "filelock", version = "3.20.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, - { name = "platformdirs", version = "4.4.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" }, - { name = "platformdirs", version = "4.5.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" }, + { name = "filelock" }, + { name = "platformdirs" }, { name = "typing-extensions", marker = "python_full_version < '3.11'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/20/28/e6f1a6f655d620846bd9df527390ecc26b3805a0c5989048c210e22c5ca9/virtualenv-20.35.4.tar.gz", hash = "sha256:643d3914d73d3eeb0c552cbb12d7e82adf0e504dbf86a3182f8771a153a1971c", size = 6028799, upload-time = "2025-10-29T06:57:40.511Z" } @@ -7378,32 +5844,10 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/af/b5/123f13c975e9f27ab9c0770f514345bd406d0e8d3b7a0723af9d43f710af/wcwidth-0.2.14-py2.py3-none-any.whl", hash = "sha256:a7bb560c8aee30f9957e5f9895805edd20602f2d7f720186dfd906e82b4982e1", size = 37286, upload-time = "2025-09-22T16:29:51.641Z" }, ] -[[package]] -name = "webcolors" -version = "24.11.1" -source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version < '3.10'", -] -sdist = { url = "https://files.pythonhosted.org/packages/7b/29/061ec845fb58521848f3739e466efd8250b4b7b98c1b6c5bf4d40b419b7e/webcolors-24.11.1.tar.gz", hash = "sha256:ecb3d768f32202af770477b8b65f318fa4f566c22948673a977b00d589dd80f6", size = 45064, upload-time = "2024-11-11T07:43:24.224Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/60/e8/c0e05e4684d13459f93d312077a9a2efbe04d59c393bc2b8802248c908d4/webcolors-24.11.1-py3-none-any.whl", hash = "sha256:515291393b4cdf0eb19c155749a096f779f7d909f7cceea072791cb9095b92e9", size = 14934, upload-time = "2024-11-11T07:43:22.529Z" }, -] - [[package]] name = "webcolors" version = "25.10.0" source = { registry = "https://pypi.org/simple" } -resolution-markers = [ - "python_full_version >= '3.14' and sys_platform == 'win32'", - "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform == 'win32'", - "python_full_version == '3.11.*' and sys_platform == 'win32'", - "python_full_version >= '3.14' and sys_platform != 'win32'", - "python_full_version >= '3.12' and python_full_version < '3.14' and sys_platform != 'win32'", - "python_full_version == '3.11.*' and sys_platform != 'win32'", - "python_full_version == '3.10.*' and sys_platform == 'win32'", - "python_full_version == '3.10.*' and sys_platform != 'win32'", -] sdist = { url = "https://files.pythonhosted.org/packages/1d/7a/eb316761ec35664ea5174709a68bbd3389de60d4a1ebab8808bfc264ed67/webcolors-25.10.0.tar.gz", hash = "sha256:62abae86504f66d0f6364c2a8520de4a0c47b80c03fc3a5f1815fedbef7c19bf", size = 53491, upload-time = "2025-10-31T07:51:03.977Z" } wheels = [ { url = "https://files.pythonhosted.org/packages/e2/cc/e097523dd85c9cf5d354f78310927f1656c422bd7b2613b2db3e3f9a0f2c/webcolors-25.10.0-py3-none-any.whl", hash = "sha256:032c727334856fc0b968f63daa252a1ac93d33db2f5267756623c210e57a4f1d", size = 14905, upload-time = "2025-10-31T07:51:01.778Z" }, @@ -7514,16 +5958,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/be/44/a1bd64b723d13bb151d6cc91b986146a1952385e0392a78567e12149c7b4/wrapt-1.17.3-cp314-cp314t-win32.whl", hash = "sha256:41b1d2bc74c2cac6f9074df52b2efbef2b30bdfe5f40cb78f8ca22963bc62977", size = 38717, upload-time = "2025-08-12T05:53:15.214Z" }, { url = "https://files.pythonhosted.org/packages/79/d9/7cfd5a312760ac4dd8bf0184a6ee9e43c33e47f3dadc303032ce012b8fa3/wrapt-1.17.3-cp314-cp314t-win_amd64.whl", hash = "sha256:73d496de46cd2cdbdbcce4ae4bcdb4afb6a11234a1df9c085249d55166b95116", size = 41334, upload-time = "2025-08-12T05:53:14.178Z" }, { url = "https://files.pythonhosted.org/packages/46/78/10ad9781128ed2f99dbc474f43283b13fea8ba58723e98844367531c18e9/wrapt-1.17.3-cp314-cp314t-win_arm64.whl", hash = "sha256:f38e60678850c42461d4202739f9bf1e3a737c7ad283638251e79cc49effb6b6", size = 38471, upload-time = "2025-08-12T05:52:57.784Z" }, - { url = "https://files.pythonhosted.org/packages/41/be/be9b3b0a461ee3e30278706f3f3759b9b69afeedef7fe686036286c04ac6/wrapt-1.17.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:30ce38e66630599e1193798285706903110d4f057aab3168a34b7fdc85569afc", size = 53485, upload-time = "2025-08-12T05:51:53.11Z" }, - { url = "https://files.pythonhosted.org/packages/b3/a8/8f61d6b8f526efc8c10e12bf80b4206099fea78ade70427846a37bc9cbea/wrapt-1.17.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:65d1d00fbfb3ea5f20add88bbc0f815150dbbde3b026e6c24759466c8b5a9ef9", size = 38675, upload-time = "2025-08-12T05:51:42.885Z" }, - { url = "https://files.pythonhosted.org/packages/48/f1/23950c29a25637b74b322f9e425a17cc01a478f6afb35138ecb697f9558d/wrapt-1.17.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a7c06742645f914f26c7f1fa47b8bc4c91d222f76ee20116c43d5ef0912bba2d", size = 38956, upload-time = "2025-08-12T05:52:03.149Z" }, - { url = "https://files.pythonhosted.org/packages/43/46/dd0791943613885f62619f18ee6107e6133237a6b6ed8a9ecfac339d0b4f/wrapt-1.17.3-cp39-cp39-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:7e18f01b0c3e4a07fe6dfdb00e29049ba17eadbc5e7609a2a3a4af83ab7d710a", size = 81745, upload-time = "2025-08-12T05:52:49.62Z" }, - { url = "https://files.pythonhosted.org/packages/dd/ec/bb2d19bd1a614cc4f438abac13ae26c57186197920432d2a915183b15a8b/wrapt-1.17.3-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0f5f51a6466667a5a356e6381d362d259125b57f059103dd9fdc8c0cf1d14139", size = 82833, upload-time = "2025-08-12T05:52:27.738Z" }, - { url = "https://files.pythonhosted.org/packages/8d/eb/66579aea6ad36f07617fedca8e282e49c7c9bab64c63b446cfe4f7f47a49/wrapt-1.17.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:59923aa12d0157f6b82d686c3fd8e1166fa8cdfb3e17b42ce3b6147ff81528df", size = 81889, upload-time = "2025-08-12T05:52:29.023Z" }, - { url = "https://files.pythonhosted.org/packages/04/9c/a56b5ac0e2473bdc3fb11b22dd69ff423154d63861cf77911cdde5e38fd2/wrapt-1.17.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:46acc57b331e0b3bcb3e1ca3b421d65637915cfcd65eb783cb2f78a511193f9b", size = 81344, upload-time = "2025-08-12T05:52:50.869Z" }, - { url = "https://files.pythonhosted.org/packages/93/4c/9bd735c42641d81cb58d7bfb142c58f95c833962d15113026705add41a07/wrapt-1.17.3-cp39-cp39-win32.whl", hash = "sha256:3e62d15d3cfa26e3d0788094de7b64efa75f3a53875cdbccdf78547aed547a81", size = 36462, upload-time = "2025-08-12T05:53:19.623Z" }, - { url = "https://files.pythonhosted.org/packages/f0/ea/0b72f29cb5ebc16eb55c57dc0c98e5de76fc97f435fd407f7d409459c0a6/wrapt-1.17.3-cp39-cp39-win_amd64.whl", hash = "sha256:1f23fa283f51c890eda8e34e4937079114c74b4c81d2b2f1f1d94948f5cc3d7f", size = 38740, upload-time = "2025-08-12T05:53:18.271Z" }, - { url = "https://files.pythonhosted.org/packages/c3/8b/9eae65fb92321e38dbfec7719b87d840a4b92fde83fd1bbf238c5488d055/wrapt-1.17.3-cp39-cp39-win_arm64.whl", hash = "sha256:24c2ed34dc222ed754247a2702b1e1e89fdbaa4016f324b4b8f1a802d4ffe87f", size = 36806, upload-time = "2025-08-12T05:52:58.765Z" }, { url = "https://files.pythonhosted.org/packages/1f/f6/a933bd70f98e9cf3e08167fc5cd7aaaca49147e48411c0bd5ae701bb2194/wrapt-1.17.3-py3-none-any.whl", hash = "sha256:7171ae35d2c33d326ac19dd8facb1e82e5fd04ef8c6c0e394d7af55a55051c22", size = 23591, upload-time = "2025-08-12T05:53:20.674Z" }, ] @@ -7650,22 +6084,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/35/18/55e6011f7c044dc80b98893060773cefcfdbf60dfefb8cb2f58b9bacbd83/yarl-1.22.0-cp314-cp314t-win32.whl", hash = "sha256:8009b3173bcd637be650922ac455946197d858b3630b6d8787aa9e5c4564533e", size = 89056, upload-time = "2025-10-06T14:12:13.317Z" }, { url = "https://files.pythonhosted.org/packages/f9/86/0f0dccb6e59a9e7f122c5afd43568b1d31b8ab7dda5f1b01fb5c7025c9a9/yarl-1.22.0-cp314-cp314t-win_amd64.whl", hash = "sha256:9fb17ea16e972c63d25d4a97f016d235c78dd2344820eb35bc034bc32012ee27", size = 96292, upload-time = "2025-10-06T14:12:15.398Z" }, { url = "https://files.pythonhosted.org/packages/48/b7/503c98092fb3b344a179579f55814b613c1fbb1c23b3ec14a7b008a66a6e/yarl-1.22.0-cp314-cp314t-win_arm64.whl", hash = "sha256:9f6d73c1436b934e3f01df1e1b21ff765cd1d28c77dfb9ace207f746d4610ee1", size = 85171, upload-time = "2025-10-06T14:12:16.935Z" }, - { url = "https://files.pythonhosted.org/packages/94/fd/6480106702a79bcceda5fd9c63cb19a04a6506bd5ce7fd8d9b63742f0021/yarl-1.22.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:3aa27acb6de7a23785d81557577491f6c38a5209a254d1191519d07d8fe51748", size = 141301, upload-time = "2025-10-06T14:12:19.01Z" }, - { url = "https://files.pythonhosted.org/packages/42/e1/6d95d21b17a93e793e4ec420a925fe1f6a9342338ca7a563ed21129c0990/yarl-1.22.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:af74f05666a5e531289cb1cc9c883d1de2088b8e5b4de48004e5ca8a830ac859", size = 93864, upload-time = "2025-10-06T14:12:21.05Z" }, - { url = "https://files.pythonhosted.org/packages/32/58/b8055273c203968e89808413ea4c984988b6649baabf10f4522e67c22d2f/yarl-1.22.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:62441e55958977b8167b2709c164c91a6363e25da322d87ae6dd9c6019ceecf9", size = 94706, upload-time = "2025-10-06T14:12:23.287Z" }, - { url = "https://files.pythonhosted.org/packages/18/91/d7bfbc28a88c2895ecd0da6a874def0c147de78afc52c773c28e1aa233a3/yarl-1.22.0-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b580e71cac3f8113d3135888770903eaf2f507e9421e5697d6ee6d8cd1c7f054", size = 347100, upload-time = "2025-10-06T14:12:28.527Z" }, - { url = "https://files.pythonhosted.org/packages/bd/e8/37a1e7b99721c0564b1fc7b0a4d1f595ef6fb8060d82ca61775b644185f7/yarl-1.22.0-cp39-cp39-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:e81fda2fb4a07eda1a2252b216aa0df23ebcd4d584894e9612e80999a78fd95b", size = 318902, upload-time = "2025-10-06T14:12:30.528Z" }, - { url = "https://files.pythonhosted.org/packages/1c/ef/34724449d7ef2db4f22df644f2dac0b8a275d20f585e526937b3ae47b02d/yarl-1.22.0-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:99b6fc1d55782461b78221e95fc357b47ad98b041e8e20f47c1411d0aacddc60", size = 363302, upload-time = "2025-10-06T14:12:32.295Z" }, - { url = "https://files.pythonhosted.org/packages/8a/04/88a39a5dad39889f192cce8d66cc4c58dbeca983e83f9b6bf23822a7ed91/yarl-1.22.0-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:088e4e08f033db4be2ccd1f34cf29fe994772fb54cfe004bbf54db320af56890", size = 370816, upload-time = "2025-10-06T14:12:34.01Z" }, - { url = "https://files.pythonhosted.org/packages/6b/1f/5e895e547129413f56c76be2c3ce4b96c797d2d0ff3e16a817d9269b12e6/yarl-1.22.0-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2e4e1f6f0b4da23e61188676e3ed027ef0baa833a2e633c29ff8530800edccba", size = 346465, upload-time = "2025-10-06T14:12:35.977Z" }, - { url = "https://files.pythonhosted.org/packages/11/13/a750e9fd6f9cc9ed3a52a70fe58ffe505322f0efe0d48e1fd9ffe53281f5/yarl-1.22.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:84fc3ec96fce86ce5aa305eb4aa9358279d1aa644b71fab7b8ed33fe3ba1a7ca", size = 341506, upload-time = "2025-10-06T14:12:37.788Z" }, - { url = "https://files.pythonhosted.org/packages/3c/67/bb6024de76e7186611ebe626aec5b71a2d2ecf9453e795f2dbd80614784c/yarl-1.22.0-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:5dbeefd6ca588b33576a01b0ad58aa934bc1b41ef89dee505bf2932b22ddffba", size = 335030, upload-time = "2025-10-06T14:12:39.775Z" }, - { url = "https://files.pythonhosted.org/packages/a2/be/50b38447fd94a7992996a62b8b463d0579323fcfc08c61bdba949eef8a5d/yarl-1.22.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:14291620375b1060613f4aab9ebf21850058b6b1b438f386cc814813d901c60b", size = 358560, upload-time = "2025-10-06T14:12:41.547Z" }, - { url = "https://files.pythonhosted.org/packages/e2/89/c020b6f547578c4e3dbb6335bf918f26e2f34ad0d1e515d72fd33ac0c635/yarl-1.22.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:a4fcfc8eb2c34148c118dfa02e6427ca278bfd0f3df7c5f99e33d2c0e81eae3e", size = 357290, upload-time = "2025-10-06T14:12:43.861Z" }, - { url = "https://files.pythonhosted.org/packages/8c/52/c49a619ee35a402fa3a7019a4fa8d26878fec0d1243f6968bbf516789578/yarl-1.22.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:029866bde8d7b0878b9c160e72305bbf0a7342bcd20b9999381704ae03308dc8", size = 350700, upload-time = "2025-10-06T14:12:46.868Z" }, - { url = "https://files.pythonhosted.org/packages/ab/c9/f5042d87777bf6968435f04a2bbb15466b2f142e6e47fa4f34d1a3f32f0c/yarl-1.22.0-cp39-cp39-win32.whl", hash = "sha256:4dcc74149ccc8bba31ce1944acee24813e93cfdee2acda3c172df844948ddf7b", size = 82323, upload-time = "2025-10-06T14:12:48.633Z" }, - { url = "https://files.pythonhosted.org/packages/fd/58/d00f7cad9eba20c4eefac2682f34661d1d1b3a942fc0092eb60e78cfb733/yarl-1.22.0-cp39-cp39-win_amd64.whl", hash = "sha256:10619d9fdee46d20edc49d3479e2f8269d0779f1b031e6f7c2aa1c76be04b7ed", size = 87145, upload-time = "2025-10-06T14:12:50.241Z" }, - { url = "https://files.pythonhosted.org/packages/c2/a3/70904f365080780d38b919edd42d224b8c4ce224a86950d2eaa2a24366ad/yarl-1.22.0-cp39-cp39-win_arm64.whl", hash = "sha256:dd7afd3f8b0bfb4e0d9fc3c31bfe8a4ec7debe124cfd90619305def3c8ca8cd2", size = 82173, upload-time = "2025-10-06T14:12:51.869Z" }, { url = "https://files.pythonhosted.org/packages/73/ae/b48f95715333080afb75a4504487cbe142cae1268afc482d06692d605ae6/yarl-1.22.0-py3-none-any.whl", hash = "sha256:1380560bdba02b6b6c90de54133c81c9f2a453dee9912fe58c1dcced1edb7cff", size = 46814, upload-time = "2025-10-06T14:12:53.872Z" }, ]